Emacs下查词典(StarDict篇)

StarDict 应该算是我用得最多的一个词典工具,尤其是以前网络不是随时都可访问的时候。

而现在,因为版权问题,加上胡正下落不明导致项目状态也不清楚了(刚发现原来在sourceforge上的StarDict项目http://stardict.sf.net 不再存在了,这导致以前 ),词典比较难找了(yeelou.com上原来可下载词典的页面http://yeelou.com/huzheng/stardict-dic/ 也没有了,所以我现在常常是用网络来查词典。


补充说明一下:
1. StarDict不仅有Linux、FreeBSD、Windows、MaeMo版本,在手机上也有不少使用stardict词典文件的词典工具: iphone上有gurudict,wedict和istardict(最后这个需要越狱), android上有colordict和wordmate,在任天堂DS上也都有。详见维基百科: StarDict
2. 刚找到一个可以下载stardict中文词典的地方:  http://sourceforge.net/projects/stardictdata/

1. 屏幕取词

这当然是最简单的方式,你不用在Emacs上安装配置什么东西。在Linux下可以使用StarDict 或者GoldenDict,Windows下你可以用金山词霸、有道辞典、灵格斯等等。


其它也没有什么好说的,屏幕取词最简单了。当然前提是在GUI下工作,如果你想在console/terminal下查辞典,或者想在Emacs里面显示、拷贝查询结果,可以看看下面的方法。

2.  调用外部命令查StarDict词典

2.1 sdcv

sdcv (StarDict console version) 是一个命令行工具,可以在console/shell下查StarDict安装好的词典,支持交互模式,也支持命令行传参数的方式。

* 说一下windows上sdcv的使用:
因为sdcv使用了glib2库,所以Cygwin上自己编译还有点麻烦,我放了一份编译好的Cygwin版本在这里,注意下载页面描述的包依赖关系(尤其是libglib2.0_0, libreadline7 这两个包可能有些朋友没有安装)

然后建立一个sdcv.bat,确保在PATH变量中会优先于sdcv.exe被Emacs找到(不建议将Cygwin的/bin加到系统PATH中,Emacs官方FAQ里也是这样说的

@echo off
set PATH = e: \ cygwin2 \ bin ; e: \ cygwin2 \ usr \ local \ bin
rem cygwin-1.7 use utf-8 as default locale, if nothing (LANG/LC_xxx) set
rem
but Emacs would set LANG according system active codepage
set LANG =
rem @start d:\devtools\bin\argtest.exe %1 %2 %3 %4 %5
sdcv . exe %*
 
 

* sdcv-mode.el (推荐)
主页: http://code.google.com/p/sdcv-mode/

这是pluskid 写的扩展,它调用sdcv命令行工具来查词。

使用非常简单,直接用sdcv-search函数就可以查词了

(require ' sdcv-mode)
(global-set-key (kbd "C-c d")
' sdcv - search)

注意查询结果(*sdcv*缓冲区)用outline方式折叠起来了,每个词典一节,你可以用?键查查如何展开查看

* sdcv.el
sdcv.el 作者参考了sdcv-mode,但做了两个改进: 1) 用tooltip(需要showtip.el,也意味者只能工作在GUI下)来显示查询结果; 2)将词典分了两个列表,一个simple-list,一个complete-list,方便用在简单查询和详细查询的不同场合。

其实这两个改进是一起使用的: 用showtip来显示的场合一般都只需要简单查询。

(setq sdcv - dictionary - simple - list ' ("朗道英汉字典5.0"))
(global-set-key (kbd "<f3> s")
' sdcv - search - pointer + )

(global
- set - key (kbd " <f3> S " ) ' sdcv-search-input)
 
 

使用showtip显示查询结果的效果如下:


sdcv.el有一些bug和问题
* sdcv-search-detail中start-process里又调用shell-command-to-string的问题,导致sdcv进程挂住
* -u 指定字典时不支持字典名有空格
* showtip在Emacs全屏时出现异常(应该说是showtip库的问题。可能只是Windows上存在)
* showtip在鼠标光标里输入点很近时,tooltip显示后马上关闭
在本文的评论部分详细描述了这些问题,如果有兴趣可以仔细看一下。

另外,在Windows下,同样需要用上面sdcv.bat那样的技巧

2.2 不使用sdcv命令行工具


* stardict.el

http://www.emacswiki.org/emacs/stardict.el

这个库是用elisp解析stardict词典的数据来查词的,不需要其它程序,但同时加载词库比较慢,查询速度还凑合。

基本用法如下:

(require ' stardict)
(setq dict-langdao (stardict-open "/usr/local/share/stardict/dic/" "langdao-ec-gb" t))

(stardict-lookup dict-langdao "hello")
;;"*[hә
' lәu]
;;interj. 喂, 嘿
"


该库没有提供UI交互方面的功能。

** sydict

这是网友Sylvester自己分析了stardict词典数据结构后写的一个Emacs扩展,相关说明可参见下面两篇博文:
* 在Emacs中构建我的字典(sydict)
* 在Emacs中漫游——sydict v0.3

他在sf.net上建立了一个项目: http://sourceforge.net/projects/sydict,代码可在下载区找到(注意sydict程序的代码不在svn中)

使用很简单
1. 编译readdict.c为sydict可执行文件, 放到PATH中
2. 放置sydict.el和sydict-index.el到Emacs的load-path
3. (require 'sydict)
(setq sydict-dict-path ""/usr/local/share/stardict/dic/oxford-gb.dict")
M-x sydict-look-up-word

亮点:
* 读取词典的程序很小巧,用mingw编译一下就可以跑
* emacs中查词时可以提示补全

缺点:
* 只能使用一个词典,不支持多个
* 我在Windows下使用时,查询结果有时显示为乱码(出现"\347\224函\237剜\243\215"这样的乱码,但有时又不乱)

注意: 词典文件不能是是压缩的(*.dz),需要先解压

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值