辞書の有効活用

超久しぶりの更新。


 Macユーザの皆さんなら既にご存知かと思いますが、MacOSXにはDictionary.appという辞書ソフトが標準で搭載されています。この辞書ソフト、英和/和英に国語時点まで付いてるという優れものなのですが、いかんせん使いにくい。そもそも起動がやたらと遅いせいで、日常的に使うのは難しいと思います。しかしせっかくの辞書ソフト、使わずに置いておくのは勿体ないですし、何より容量の無駄です。


 では、この辞書をどうやって生かそうか…と考えた時に我々情報病の人間はまず「エディタとの連携」を考えるでしょう。という訳で、このDictionary.appをEmacsと連携させるための手順をご紹介します。


とりあえず連携させるにしても、辞書のAPIが無いと話にならんよね、という問題があります。これについてはCocoa用にAPIが用意されているようですが、私はCocoaと簡単に連携できるような言語をRubyくらいしか書けません。とりあえずググってみたところ、Pythonには簡単に辞書にアクセスできるようなライブラリがあるようですが…。
 もうすこし探してみたところ、こちらのブログで端末から叩ける辞書ラッパー(?)を公開されていたので、これをお借りする事にしました。Mercurialでレポジトリからcloneしたあと、makeを叩くだけで実行ファイルが生成されます。これで、同梱されているelispを導入する事でEmacsから辞書を引く事が出来る事になりました。


 しかし、このelispでは検索するたびにバッファが立ち上がり、画面が二分されてしまいます。これでは「快適に辞書を使える」とは言えません。なので、少し違うアプローチで応用してみる事にしましょう。


 読者の皆さんは、popup.elというライブラリがあるのをご存知でしょうか。これは元々、auto-completeというプロジェクトで開発されていたもののようで、簡単に言えばvimやVisualStudioのようにポップアップで説明や補完候補などを表示してくれるツールです。勿論バッファ上にテキストで描画しているため、端末上で起動したEmacsでも利用する事が出来ます。このライブラリのpopup-tip関数を利用して、カーソル位置の単語を辞書で検索した結果をポップアップで表示する事にします。

(global-set-key "\C-c\C-d" 'popup-dict)

(defun popup-dict ()
 (interactive)
  (let ((search (thing-at-point 'word)))
    (popup-tip
     (shell-command-to-string 
      (concat "/path/to/dict " search " Japanese-English")))
    )
  )

 ね、簡単でしょう?私はLispを勉強し始めたばかりなので、これだけのコードを書くにも2時間くらい粘りました…精進が足りませんね。まあ何はともあれ、これでポップアップで辞書を使えるようになりました。私の環境では以下の画像のように表示されます。ちなみに"/path/to/dict"の部分は、前半で説明したラッパーへのパスですのでお間違えのないよう。


現在では英和/和英しか対応させていませんが、このへんを参考にすると、更に楽しめるでしょう。今は亡きSunがJavaのリファレンスマニュアルを公開していたので(Javadocだっけ?)、それを変換して引けるようにしておくと、VisualStudioのインテリセンスみたいな事ができて幸せになれるかもしれませんね。