lookup の検索結果を pos-tip で表示する

ドーモ、emacs おじさんです。

辞書を引くのに、10 年以上 lookup を使っています。epwing は絶滅危惧規格ではありますが、dessed と LogoVista さんのおかげで現在でも有用な辞書を手元におくことができます。

そんなわけで手放せない lookup なのですが、不満がいくつかあります。

ひとつは、完全に独自に構築されたウィンドウ管理。popwin や helm に噛ませることができればなぁ……と一時あれこれ試してみたのですが、結局挫折しました。

もう一つは、autolookup です。これは lookup の 1.x 系列にしか対応していないので 2.x 系列では使えないうえに、使えたとしても訳語の表示場所がミニバッファで、視線移動が切ないといえるでしょう。

できれば、ウェブブラウザでよくあるように、結果をポップアップして欲しい。

という思いをずーーーっと持っていたのですが、関西 Emacs で気分が盛り上がっているうちに、と無理矢理なんとかしてみました。lookup 2.x 用です。

elisp

もしかして gist 貼れないの……?

https://gist.github.com/lurdan/11146220#file-lookup-at-point-el

モックとして上流の方に見せてみて、同じようなことをより流儀にそったやり方で実現してもらおー、という目論見なので、極めて投げやりかつその場しのぎのコード (というかlookup 本体から関数コピーして出力いじっただけ) になっています。

上記を .emacs に追記して (キーバインドはご自由に)、lookup-at-point を適当な英単語の上で呼んでみてください。

このように、カーソル付近の単語を拾って、検索結果を pos-tip で表示します。

デフォルトでは、何か操作をするまで表示し続けるようになっていますので、好みで

(setq lookup-at-point-pos-tip-timeout 時間)

を指定するといいでしょう。

タイマー的な処理と組み合せて、autolookup の代わりにすることもできると思いますが、個人的にはちょっとうるさかったので、w3m-mode-map で ; にアサインするくらいが丁度いい感じです。

制約とか問題とか

なにぶんやっつけ仕事なもので、あれこれ制約があります。

辞書は決め打ち

自由に選んだりすることができません。

デフォルトでは、辞書リストの最初にあるものを使います。指定したい場合は、事前に lookup でモジュールを作って使いたい辞書を登録し、

(setq lookup-at-point-pos-tip-module "モジュールの名前")

とする必要があります。

エラー処理なし

対象の単語は lookup の機能を使って拾っていますが、結果のチェックをしていないため、単語を拾えない場合は string をよこせ、nil 投げんな、と怒られます。

スペル補正なし

lookup のように賢く見出し語を予測してくれたりしません。

フォーマットなし

外字とかリンクとか修飾とか、おおむね全滅です。

というわけで

誰かかっこよく実装し直してくれないかなぁ……。