たった3行のelisp関数

ずっとEmacs上で動く英和辞書を使っているのですが、使っているものが2種類ありまして、一つはsdic、もう一つはlookupです。

この二つは大きく特徴が異なりまして、sdicはカーソル位置から単語を取ってきてくれて、さらにstem.elを使って語尾の変化を取り除いて辞書で調べられるように加工して辞書を引いてくれます。しかしこの辞書は単語帳レベルです。

lookupはEPWING対応で辞書は立派なのですが、カーソル位置の単語を取ってくるようなことはしてくれません。文字を直接打って調べるわけですが、語尾の変化は自分で取らなければいけません。

そこで入力はsdic出力はlookupという事がしたかったのですが、どうすればいいのかしばらく全く思いつきませんでした。

こういうのはある日突然ひらめいたりするんですよね。で、ひらめきました。まずsdicを引く。その時カーソルは語尾を取った単語の上にあるので、そこで不満なら'f'を押してその単語をlookupに渡してlookupで調べる。

さあどれくらいの長さのプログラムを書くことになるのかなと思っていたら

(defun my-sdic2lookup ()
 (interactive)
 (lookup-select-search-pattern(thing-at-point `word)))

でした。このインタラクティブ関数(コマンドと言った方が分かりやすいと思いますが)をfキーに割り付けるわけですが。その部分が

(add-hook 'sdic-mode-hook
     (lambda ()
       (define-key sdic-mode-map "f" 'my-sdic2lookup)))

ただしこのコマンドを実行する前に一回lookupを呼び出して、lookupの関数をロードしておいてください。この部分はどうやったら自動で出来るのかわかりませんでしたorz