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里也是这样说的)
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函数就可以查词了
(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来显示的场合一般都只需要简单查询。
(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词典的数据来查词的,不需要其它程序,但同时加载词库比较慢,查询速度还凑合。
基本用法如下:
(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),需要先解压