読者です 読者をやめる 読者になる 読者になる

Emacsに英辞郎導入

前回英辞郎を買ったのが5年以上前だったのに気づいたので,買い直した.


データしかいらないのでダウンロード版を購入
http://www.dlmarket.jp/products/detail/249143


まずはデータを解凍

mkdir ~/sdic
mv EDP-140.zip ~/sdic
unzip EDP-140.zip


sdicをインストール

sudo apt-get install sdic sdic-eijiro

途中,英辞郎の場所を聞かれるので /home/USERNAME/sdic/EIJIRO/ を指定
しかし,WAEI-140.TXTの変換で固まり,動かなくなったので手動で変換.

nkf -S -e EIJI-140.TXT | perl /usr/share/sdic/eijiro.pl > eijiro.sdic
sudo mv eijiro.sdic /usr/share/dict/eijiro.sdic
nkf -S -e WAEI-140.TXT | perl /usr/share/sdic/eijiro.pl --waei > waeijiro.sdic
sudo mv waeijiro.sdic /usr/share/dict/waeijiro.sdic
sudo dpkg --configure -a

これだと重いので,処理しやすいように変換してやるといいらしい

sudo apt-get install sary
nkf -w eijiro.sdic > eijiro-utf8.sdic
mksary -c UTF-8 eijiro-utf8.sdic
nkf -w waeijiro.sdic > waeijiro-utf8.sdic
mksary -c UTF-8 waeijiro-utf8.sdic


後は,.emacsを編集.
以下はEmacs + sdicから英辞郎v135を使えるようにするまでの顛末 - deruiの日記をほぼそのまま使っています.

;; ---------------------------------------------------
;; sdic
;; ---------------------------------------------------
(autoload 'sdic-describe-word "sdic" "search word" t nil)
(global-set-key "\C-ce" 'sdic-describe-word)
(autoload 'sdic-describe-word-at-point "sdic" "カーソル位置の英単語の意味を調べる" t nil)
(global-set-key "\C-ce" 'sdic-describe-word-at-point)

(eval-after-load "sdic"
  '(progn
     (setq sdicf-array-command "/usr/bin/sary") ; コマンドパス
     (setq sdic-eiwa-dictionary-list
           '((sdicf-client "/usr/share/dict/eijiro-utf8.sdic" (strategy array)))
           sdic-waei-dictionary-list
           '((sdicf-client "/usr/share/dict/waeijiro-utf8.sdic" (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)


参考