2011年10月8日土曜日

Emacs 英辞郎 + sdic + sary


このエントリーをはてなブックマークに追加


英語力のない人間にとって英和辞典は必須です。HyperSpecを眺めているときにEmacsから直接辞書が引けるようにしておく。


環境

Fedora15 x64 + Emacs23



必要なもの

英辞郎(かなり古いものを使っています)
sdic
sary
nkf



saryのインストール

x64環境でコンパイルしようとしたらハマったので大人しくビルド済みのものを利用する。

http://ftp.yz.yamagata-u.ac.jp/pub/linux/Vine/VineSeed/x86_64/RPMS.plus/sary-1.2.0-2vl6.x86_64.rpm

# sary -v
# mksary --version



辞書の加工

現在の辞書がEUC形式なのでUTF-8へ変換する。

$ nkf -g eijirou.sdic
EUC-JP

$ nkf -g waeijirou.sdic
EUC-JP

$ nkf -w eijirou.sdic > eijirou.sdic.utf8
$ nkf -w waeijirou.sdic > waeijirou.sdic.utf8


インデックスの作成

$ mksary -c UTF-8 eijirou.sdic.utf8
$ mksary -c UTF-8 waeijirou.sdic.utf8


変換するとファイルが大きくなるので注意
-rwxr--r--. 1   56M 10月  8 20:52 eijirou.sdic
-rw-rw-r--. 1   69M 10月  8 22:32 eijirou.sdic.utf8
-rw-rw-r--. 1  176M 10月  8 22:34 eijirou.sdic.utf8.ary
-rwxr--r--. 1   53M 10月  8 20:52 waeijirou.sdic
-rw-rw-r--. 1   63M 10月  8 22:32 waeijirou.sdic.utf8
-rw-rw-r--. 1  145M 10月  8 22:34 waeijirou.sdic.utf8.ary



Emacs側の設定

sdicはこちらから入手してload-pathを通しておく。

設定はここを参考にして記述。
;; ---------------------------------------------------
;; sdic
;; ---------------------------------------------------
(autoload 'sdic-describe-word "sdic" "search word" t nil)
(global-set-key "\C-cw" 'sdic-describe-word)
(autoload 'sdic-describe-word-at-point "sdic" "カーソル位置の英単語の意味を調べる" t nil)
(global-set-key "\C-cW" 'sdic-describe-word-at-point)

(eval-after-load "sdic"
  '(progn
     (setq sdicf-array-command "/usr/bin/sary") ; コマンドパス
     (setq sdic-eiwa-dictionary-list
           '((sdicf-client "~/.emacs.d/dict/eijirou.sdic.utf8" (strategy array)))
           sdic-waei-dictionary-list
           '((sdicf-client "~/.emacs.d/dict/waeijirou.sdic.utf8" (strategy array))))

     ;; saryを直接使用できるように sdicf.el 内に定義されているarrayコマンド用関数を強制的に置換
     (fset 'sdicf-array-init 'sdicf-common-init)
     (fset 'sdicf-array-quit 'sdicf-common-quit)
     (fset 'sdicf-array-search
           (lambda (sdic pattern &optional case regexp)
             (sdicf-array-init sdic)
             (if regexp
                 (signal 'sdicf-invalid-method '(regexp))
               (save-excursion
                 (set-buffer (sdicf-get-buffer sdic))
                 (delete-region (point-min) (point-max))
                 (apply 'sdicf-call-process
                        sdicf-array-command
                        (sdicf-get-coding-system sdic)
                        nil t nil
                        (if case
                            (list "-i" pattern (sdicf-get-filename sdic))
                          (list pattern (sdicf-get-filename sdic))))
                 (goto-char (point-min))
                 (let (entries)
                   (while (not (eobp)) (sdicf-search-internal))
                   (nreverse entries))))))

     (defadvice sdic-forward-item (after sdic-forward-item-always-top activate)
       (recenter 0))
     (defadvice sdic-backward-item (after sdic-backward-item-always-top activate)
       (recenter 0))))

(setq sdic-default-coding-system 'utf-8-unix)

C-c w で単語を入力するか、調べたい単語にカーソルをあわせてC-c W で検索できる。

0 件のコメント:

コメントを投稿