« lrcdis的rhythmbox插件 | Main | 绝路之盲辉正传 »
lazyword简易版本(shell版本)
By lerosua | 三月 23, 2009
linuxdesktop上tx介绍了一个新软件,叫lazyword, 用来不知不觉背单词的。我觉得它提的那个概念极好,就是复习stardict查询过的单词。虽然还处于预览阶段,不过我还是去下载了。
才发觉它不是我那杯茶。不是说他不好,我绝没这意思,只是我这人从来尽量不用qt的东西的。何况是qt的开发环境呢,所以lazyword也就编译不了了,它是基于qt4.5的。二来它未必考虑sdcv的情况吧,这点未证实。
于是无聊就写了个脚本,实现定时显示sdcv查询过的单词,也算是lazyword的简易版本吧。
#!/bin/sh #lazyword easy version by lerosua book=~/.sdcv_history stime=15000 itime=100 while [ true ] do line=`wc -l $book |awk '{print $1}'` num=`expr $RANDOM % $line` word=`sed -n "${num}p" $book` content=`sdcv -n $word` notify-send -t $stime "$content" sleep $itime done
脚本主要依赖sdcv(stardict的命令行版本,平时我用它查询单词),notify-send(显示notify用)。 每一百秒显示一次查询过的单词,每次显示15秒。
没有用sdcv的朋友可以自定义单词本,换掉book变量即可。单词本要求就是一行一个单词而已,时间也可以随便定义。都是很简单的语句,大家都明白,自取所需吧。
更新:如果是使用sdcv的历史记录作为生词本的话,有可能出现漏词的现象,而查询过多次的情况下,这词就重复出现两三次而把其它没查过的词挤掉。解决的办法是取出这个词马上把它从历史记录中删除掉,不用担心,因为后面用sdcv查询一次就会加上。而这样也能让单词本流动从而使随机取得的单词更完善(我想象的)。
在取得word后面加上这句就行了:
sed -i "${num}d" ~/.sdcv_history
实际上可以直接写成$book的,但我怕某些人不小心删除掉它自己的单词本就不好了。这样可以表明这是sdcv_history专用的,也不怕人误用了,呵呵。
Topics: 程序设计 | 6 Comments »


三月 26th, 2009 at 9:07 下午
今天突然在LDCN上看到你写的这个,我现在才知道有sdcv这个玩意,告诉TX他说他也不知道!
之前不想看stardict的源码,所以就用保存单词这招!
用了下,哇塞好酷阿,哈哈 我可以把他加入到lazyword里了!
谢谢!!
三月 26th, 2009 at 10:41 下午
我也是看你的软件才想到的啊。呵呵
四月 18th, 2009 at 9:44 下午
很有趣的脚本,但是运行时有错误
expr: 写入时发生错误
初学shell script,没查出来为什么
请教楼主^_^
四月 19th, 2009 at 9:47 上午
to Caspar
确保你是使用bash, 我这里没问题,看提示是expr那行有错。
四月 19th, 2009 at 11:18 下午
我这里是Ubuntu 8.04,肯定是使用bash,
我把第一行的sh用bash替换就不会产生那个错误了^_^
十月 4th, 2009 at 2:18 下午
你好,我的~/.sdcv_history是不存在的。是什么原因呢?
需要安装readline之后compile么?
apt-get install 什么包?
谢谢!