• Lerosua on Twitter

    t
  • 订阅

    抓虾
    google reader
    bloglines
    鲜果
  • 分类目录

  • 功能

  • « | 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 »

    6 Responses to “lazyword简易版本(shell版本)”

    1. frankyue Says:
      三月 26th, 2009 at 9:07 下午

      今天突然在LDCN上看到你写的这个,我现在才知道有sdcv这个玩意,告诉TX他说他也不知道!
      之前不想看stardict的源码,所以就用保存单词这招!
      用了下,哇塞好酷阿,哈哈 我可以把他加入到lazyword里了!
      谢谢!!

    2. lerosua Says:
      三月 26th, 2009 at 10:41 下午

      我也是看你的软件才想到的啊。呵呵

    3. Caspar Says:
      四月 18th, 2009 at 9:44 下午

      很有趣的脚本,但是运行时有错误
      expr: 写入时发生错误
      初学shell script,没查出来为什么
      请教楼主^_^

    4. lerosua Says:
      四月 19th, 2009 at 9:47 上午

      to Caspar
      确保你是使用bash, 我这里没问题,看提示是expr那行有错。

    5. Caspar Says:
      四月 19th, 2009 at 11:18 下午

      我这里是Ubuntu 8.04,肯定是使用bash,
      我把第一行的sh用bash替换就不会产生那个错误了^_^

    6. benjamin Says:
      十月 4th, 2009 at 2:18 下午

      你好,我的~/.sdcv_history是不存在的。是什么原因呢?
      需要安装readline之后compile么?

      apt-get install 什么包?
      谢谢!