这个主要是方便在Emacs下直接查单词,因为如果再打开一个stardict,非常麻烦。碰巧在网上看到有关stardict的elisp代码,我就把它封装过来。下面是整个安装和使用过程。
Table of Contents
1 安装Stardict
下面的命令直接安装Stardict.
sudo apt-get install stardict
2 添加词库
直接搜索“stardict 词库”,就能找到词库的主页,按照它的说明即可。
3 安装stardict命令行程序
这个命令可以在命令行下使用stardict查询单词。
sudo apt-get install sdcv
4 添加stardict.el
下面是stardict.el,你可以把它放到~/.emacs.d/下。
;; Author : pluskid ;; Modified By : lishuo ;; ;; 调用 stardict 的命令行程序 sdcv 来查辞典 ;; 安装: sudo apt-get install stardict ;; sudo apt-get install sdcv ;; ;; 如果选中了 region 就查询 region 的内容,否则查询当前光标所在的单词 ;; 查询结果在一个叫做 *sdcv* 的 buffer 里面显示出来,在这个 buffer 里面 ;; 按 q 可以把这个 buffer 放到 buffer 列表末尾,按 d 可以查询单词 ;; 注意自己编写.el的时候必须加上开头和结尾 (require 'cl) (defun view-stardict-in-buffer () (interactive) (let ((word (if mark-active (buffer-substring-no-properties (region-beginning) (region-end)) (current-word nil t)))) (setq word (read-string (format "Search the dictionary for (default %s): " word) nil nil word)) (set-buffer (get-buffer-create "*sdcv*")) (buffer-disable-undo) (erase-buffer) (let ((process (start-process-shell-command "sdcv" "*sdcv*" "sdcv" "-n" word))) (set-process-sentinel process (lambda (process signal) (when (memq (process-status process) '(exit signal)) (unless (string= (buffer-name) "*sdcv*") (setq kid-sdcv-window-configuration (current-window-configuration)) (switch-to-buffer-other-window "*sdcv*") (local-set-key (kbd "d") 'view-stardict-in-buffer) (local-set-key (kbd "q") (lambda () (interactive) (bury-buffer) (unless (null (cdr (window-list))) ; only one window (delete-window))))) (goto-char (point-min)))))))) (provide 'stardict)
5 启用stardict
在~/.emacs下启用stardict
(require 'stardict) (global-set-key (kbd "C-c-d") 'view-stardict-in-buffer)
6 效果图