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 のように賢く見出し語を予測してくれたりしません。
フォーマットなし
外字とかリンクとか修飾とか、おおむね全滅です。
というわけで
誰かかっこよく実装し直してくれないかなぁ……。