次: Alias Menu Items, 前: Simple Menu Items, 上: Defining Menus
拡張形式のメニュー項目は、より柔軟性があり、
単純な形式より見通しがよい代替方法です。
それらは、シンボルmenu-item
で始まるリストから成ります。
選択不可の文字列を定義するには、項目をつぎのようにします。
(menu-item item-name)
ここで、文字列item-nameは区切り行を表す複数個のダッシュから成ります。
選択可能な実際のメニュー項目を定義するには、 拡張形式の項目はつぎのようになります。
(menu-item item-name real-binding . item-property-list)
ここで、item-nameは、メニュー項目の文字列に評価される式です。 つまり、(項目の)文字列は定数である必要はありません。 3番目の要素item-property-listは実行すべきコマンドです。 リストの残りitem-property-listは、 他の情報を含んだ属性リストの形式です。 指定できる属性はつぎのとおりです。
:enable FORM
nil
以外だとオン)。
:visible FORM
nil
以外だと含める)。
項目を含めない場合、当該項目が定義されていないかのようにメニューを表示する。
:help
help:button (
type .
selected)
:toggle
か:radio
であり、
どちらであるかを指定する。
cdrのselectedはフォームであること。
その評価結果が、現在ボタンが選択されているかどうかを決定する。
トグル(toggle)は、selectedの値に応じて
『on』か『off』と書かれるメニュー項目である。
コマンド自身では、selectedがnil
ならば
selectedにt
を設定し、
t
ならばnil
を設定すること。
以下は、debug-on-error
が定義されていれば
debug-on-error
をオン/オフするメニュー項目の書き方である。
(menu-item "Debug on Error" toggle-debug-on-error :button (:toggle . (and (boundp 'debug-on-error) debug-on-error))
これは、変数debug-on-error
をオン/オフするコマンドとして
toggle-debug-on-error
が定義されているので動作する。
ラジオボタン(radio button)はメニュー項目のグループであり、
ある時点ではそれらのうちの1つだけを『選択』できる。
どれを選択しているかを表す変数が必要である。
グループ内の各ラジオボタンに対するフォームselectedは、
当該変数の値が当該ボタンを選択している値かどうかを検査する。
ボタンをクリックすると、クリックしたボタンが選択されるように
当該変数に設定すること。
:key-sequence
key-sequenceまちがったキー列を指定しても、その効果はない。
メニューにkey-sequenceを表示するまえに、
Emacsはkey-sequenceがこのメニュー項目に実際に等価かどうか調べる。
:key-sequence nil
しかし、ユーザーがこの項目の定義に対してキー列を再バインドすると、
Emacsは属性:keys
を無視して等価なキーボード入力を探す。
:keys
string:filter
filter-fn