汎用プルダウンメニューインターフェースライブラリpulldown.el

汎用のプルダウンメニューインターフェースライブラリpulldown.elをリリースしました。このライブラリはauto-complete.elからメニュー表示ルーチンを抜き出して独立させたものです。今のところauto-complete.elのリポジトリで開発しています。利用するにはauto-complete.elのリポジトリから取得してください。

http://github.com/m2ym/auto-complete/blob/master/pulldown.el

pulldown.elを利用してプルダウンメニューを作るには二つの方法があります。一つは内部でコマンドループをシミュレートして同期的に選択結果を返すpulldown-menu関数を利用する方法です。もう一つは、auto-complete.elがやっていることですが、独自でコマンドループを適宜ハンドリングしてプルダウンメニューを操作するというものです。特に複雑なことをやらない限り、前者の方法が一番です。

pulldown-menu関数を使ってプルダウンメニューを表示する例を示します。

(require 'pulldown)
(pulldown-menu '(foo bar hoge))

これを評価すると次のようになります。

C-nやdownで候補を選択してRETすると、その項目値がミニバッファに表示されます。

pulldown-menu関数は同期的に動作するので、選択された項目の値が関数の返り値として返ってくることを想定できます。そのためコードが非常に簡潔になります。

次にM-xで実行したコマンドヒストリをプルダウンメニューで選択して実行する例を示します。エラー処理は省いてますが、やろうとしていることが直感的に理解できると思います。

(require 'pulldown)
; エラー処理なし
(call-interactively
 (intern-soft
  (pulldown-menu extended-command-history)))

pulldown-menuの第一引数には選択候補のリストを指定します。リストの要素は文字列でもシンボルでも数値でもかまいません。文字列の場合、faceやselection-faceをテキストプロパティに設定しておくことで、メニューのフェイスや選択状態のフェイスを指定することもできます。

必要ならばメニューの幅や高さを指定することも可能です。その場合、pulldown-menu関数の引数に幅と高さを:width, :heightのようにキー指定渡しで指定してください。特に指定がない場合は適当な幅や高さが使用されます。

pulldown.elはauto-complete.elの開発によって洗練された正確なメニュー表示ロジックをそのまま受け継いでいるため、多くのケースで正しくメニューを表示することができます。また、auto-complete.elの開発と連携しているため、随時パフォーマンスの改善やバグ修正が入っていく予定です。是非ご利用ください。