Emacs查词典 第二部分: DICT协议
如果你是在Linux/Unix下,那么使用dict命令行程序来查辞典是非常简单方便的,它通过DICT协议(RFC 2229)与dict server通讯获取查询结果,而dict.org 就提供这个服务(另外你也可以直接在网页上 http://www.dict.org 上面查词),你也可以用dictd包自己搭一个服务器(由于dict.org上没有提供中文词典服务,所以要查中文的话,还是得自己搭一个)。
通过DICT协议查询词典有如下一些功能
1. 可以指定词典
2. 可以指定查询策略(比如在词典中按前部匹配、后部匹配、中间匹配、regexp等方式——也就是你在 http://www.dict.org/ 网页上看到的search type选项)
0. 自己搭一个dictd服务器
以Debian为例,先安装dictd包:
然后你得安装一些词典, 常用的英文词典是:
* wn (WordNet)
* gcide (GNU version of the Collaborative International Dictionary of English)
* foldoc (Free On Line Dictionary of Computing)
* jargon
* vera (Virtual Entity of Relevant Acronyms, computer related acronyms)
另外freedict项目提供一些其它语言的词典。这些包Debian都收录了,所以:
而中文词典包可以在这里找到: dict-zh-1.6
下一步是配置权限,因为Debian缺省的配置比较严格。但这里我就不细说了,只说说quick and dirty的方法: 如果你的dictd 服务器只是你一个人用不需要怎么考虑安全性问题的话,可以把/etc/dictd/dictd.conf里面的access配置为allow *;而且Debian缺省只允许本地访问,想让其它机器也能访问的话可把listen_to 127.0.0.1注释掉。
最后,启动dictd 服务器
1. dictionary.el (推荐)
主页: http://me.in-berlin.de/~myrkr/dictionary/
EmacsMirror: https://github.com/emacsmirror/dictionary
这个包自行实现了DICT协议(RFC 2229),所以不需要外部程序。而且它支持http代理,这是dict命令行程序不支持的。
该包有5个.el文件, 主要入口都在dictionary.el。基本用法如下:
(setq dictionary-server "localhost") (autoload 'dictionary-search "dictionary" "Ask for a word and search it in all dictionaries" t) (autoload 'dictionary-match-words "dictionary""Ask for a word and search all matching words in the dictionaries" t)
然后就可以用M-x dictionary-search查某个单词的含义,用M-x dictionary-match-words查有那些单词与当前给出的类似。
参考文档:
* Pluskid's Emacs Wiki: EmacsDictionary
* Xah Lee: Emacs Dictionary Lookup
Xah Lee的文档里指出了dictionary.el的几个缺点,有的还给出了解决办法(比如不能指定多个词典查询的问题),打算使用这个库的朋友要去看一下。
补充一下: dictionary.el 在现在的GNU Emacs上使用时,会报告make-local-hook找不到,把那行注释掉就是了。
2. dict.el
回到dict.el, 使用方法如下:
(setq dict-servers '("localhost")) (setq dict-enable-key-bindings t) (setq dict-databases '("gcide""pydict")) (require 'dict)
然后就可以M-x dict或者C-c d d来查词了,用C-c d C-h可看到其它用法。
dict.el 的缺点是需要dict命令行程序,而且在加载的时候就会调用dict程序连接dict server获取词典列表和匹配策略。所以如果想使用本机安装的dictd服务器的话,至少需要先设置dict-servers。
也因为上述原因,在Windows上使用的时候特别难搞:首先你没有dict程序,然后它加载时还需要调用gawk, cut,
sed等程序,又会碰到烦人的cmdproxy vs
bash问题。我用Cygwin自己移植了dict客户端过来,但Emacs里面的折腾了好久都没搞定,以后搞定了再补充说明吧(其实这个说了也白说,因为有更好的替代品
dictionary.el,纯粹是征服欲作祟:-)。
3. 其它
dict-web
这个包虽然也是访问dict.org来提取数据,但不根据DICT协议,而是HTTP协议,对结果的呈现也是web方式(所以需要w3浏览器)
dictem
这个包只有一个文件dictem.el,也需要dict命令行程序,比dict.el 好用多了。
;;On Windows, first make sure cygwin binary path in env PATH (setenv "PATH"(concat "e:/cygwin2/bin;e:/cygwin2/usr/local/bin;"(getenv "PATH"))) (add-to-list 'exec-path"e:/cygwin2/bin") (add-to-list 'exec-path"e:/cygwin2/usr/local/bin") (require 'dictem) (setq dictem-server "localhost") (dictem-initialize) ;;Now you can ;;M-x dictem-run-search ;;M-x dictem-run-match
Debian package: http://packages.debian.org/squeeze/lookup-el
这个包支持EPWING光盘形式的词典,也支持NDTP服务器和dictd服务器的词典查询。这个库是日本人写的,文档里面也都是日文内容,看不太懂,所以没有去试用这个库(另外EPWING和NDTP似乎也主要是日本人常用)。