以下のマクロはポップアップメニューおよび/またはメニューバーメニューを定義する便利な方法を提供します。
このマクロはmenuにより与えるコンテンツのポップアップメニューおよび/またはメニューバーサブメニューを定義する。
symbolが非nil
なら、それはシンボルである。その場合、このマクロはドキュメント文字列docをもつ、メニューをポップアップ(ポップアップメニューを参照)する関数としてsymbol、さらに値がそのメニューであるような変数としてsymbolの定義も行う。symbolはクォートしないこと。
symbolの値とは関係なく、mapsがキーマップならメニューはメニューバーのトップレベルのメニュー(メニューバーを参照)としてmapsに追加される。これにはキーマップのリストも指定でき、その場合メニューはそれらのキーマップに個別に追加される。
menuの最初の要素は文字列でなければならず、それはメニューラベルの役割をもつ。値には以下のキーワード/引数ペアーが任意の個数続くかもしれない:
:filter function
functionは1つの引数(他のメニューアイテムのリスト)で呼び出される関数でなければならず、メニュー内に表示される実際のアイテムをリターンする。
:visible include
includeには式を指定する。その式がnil
に評価されるとメニューは不可視になる。:included
は:visible
にたいするエイリアス。
:active enable
enableは式を指定する。その式がnil
に評価されるとメニューは選択不可になる。:enable
は:active
にたいするエイリアス。
menu内の残りの要素はメニューアイテム。
メニューアイテムには3要素のベクター[name callback
enable]
を指定できる。ここでnameはメニューアイテム名(文字列)、callbackはアイテム選択時に実行するコマンドか評価される式。enableが式でnil
に評価されると、そのアイテムの選択は無効になる。
かわりにメニューアイテムは以下の形式をもつことができる:
[ name callback [ keyword arg ]... ]
ここでnameとcallbackは上記と同じ意味をもち、オプションのkeywordとargの各ペアーは以下のいずれかである:
:keys keys
keysはメニューアイテムにたいする等価なキーボード入力として表示する文字列。等価なキーボード入力は自動的に計算されるので通常は必要ない。keysは表示前にsubstitute-command-keys
により展開される(ドキュメント内でのキーバインディングの置き換えを参照)。
:key-sequence keys
keysはコナドが複数のキーシーケンスにバインドされている場合に、等価なキーボード入力としてどのキーシーケンスを表示するかを示すためのヒント。このメニューアイテムとしてkeysが同じコマンドがバインドされていなければ効果はない。
:active enable
enableには式を指定する。その式がnil
に評価されるとアイテムは選択不可になる。enableは:active
にたいするエイリアス。
:visible include
includeには式を指定する。その式がnil
に評価されるとアイテムは不可視になる。:included
は:visible
にたいするエイリアス。
:label form
formはメニューアイテムのラベル(デフォルトはname)の役目をもつ値を取得するために表示される式である。
:suffix form
formは動的に評価される式であり、値はメニューエントリーのラベルに結合される。
:style style
styleはメニューアイテムの型を記述するシンボルであり、toggle
(チェックボックス)、radio
(ラジオボタン)、またはそれ以外(通常のメニューアイテムであることを意味する)のいずれかである。
:selected selected
selectedには式を指定し、その式の値が非nil
のときはチェックボックスまたはラジオボタンが選択状態になる。
:help help
helpはメニューアイテムを説明する文字列。
かわりにメニューアイテムに文字列を指定できる。その場合には文字列は選択不可なテキストとしてメニューに表示される。ダッシュから構成される文字列はセパレーターとして表示される(メニューセパレーターを参照)
かわりにメニューアイテムにmenuと同じフォーマットのリストを指定できる。これはサブメニューとなる。
以下はeasy-menu-define
を使用してメニューバー内で定義したメニューと同等なメニューを定義する例:
(easy-menu-define words-menu global-map "単語単位コマンドにたいするメニュー" '("Words" ["Forward word" forward-word] ["Backward word" backward-word]))