Next: Menu Separators, Previous: Simple Menu Items, Up: Defining Menus [Contents][Index]
メニューアイテムの拡張フォーマットは、単純なフォーマットに比べてより柔軟かつ明快です。拡張フォーマットではシンボルmenu-item
で始まるリストでイベント型を定義します。選択できない文字列にたいしては以下のようなバインディングになります:
(menu-item item-name)
2つ以上のダッシュで始まる文字列はリストのセパレーターを指定します。Menu Separatorsを参照してください。
選択可能な実際のメニューアイテムを定義するには以下のような拡張フォーマットでバインドします:
(menu-item item-name real-binding . item-property-list)
ここでitem-nameはメニューアイテム文字列を評価する式です。つまり文字列は定数である必要はありません。3つ目の引数real-bindingは実行するコマンドです。リストの最後の要素item-property-listは、その他の情報を含んだプロパティリストの形式です。
以下はサポートされるプロパティのテーブルです:
:enable form
formの評価結果はそのアイテムを有効にするかどうかを決定する(非nil
なら有効)。アイテムが無効なら▽まったくクリックできない。
:visible form
formの評価結果はそのアイテムを実際にメニューに表示するかどうかを決定する(非nil
なら表示)。アイテムが非表示ならそのアイテムが定義されていないかのようにメニューが表示される。
:help help
このプロパティhelpの値は、そのアイテム上にマウスがある間表示する“help-echo”文字列を指定する。この文字列は、help-echo
テキストプロパティ(Help displayを参照)と同じ方法で表示される。これは、テキストやoverlayにたいするhelp-echo
プロパティと異なり、文字列定数でなければならないことに注意されたい。
:button (type . selected)
このプロパティはラジオボタンとトグルボタンを定義する手段を提供する。CARのtypeには、:toggle
か:radio
のいずれかを指定する。CDRのselectedはフォームで、評価結果によってそのボタンがカレントで選択されているかどうかを指定する。
トグル(toggle)は、selectedの値に応じて“on”か“off”のいずれかがラベルされるメニューアイテムである。コマンド自身は、selectedがnil
ならt
に、t
ならnil
にselectedを切り替える(toggle)こと。以下は、debug-on-error
フラグが定義されているときに、メニューアイテムをトグルする方法の例である:
(menu-item "Debug on Error" toggle-debug-on-error :button (:toggle . (and (boundp 'debug-on-error) debug-on-error)))
これはtoggle-debug-on-error
が変数debug-on-error
をトグルするコマンドとして定義されていることによって機能する。
ラジオボタンとは、メニューアイテムのグループであり、常にただ1つのメニューアイテムだけが“選択される(selected)”。そのためには、どのメニューアイテムが選択されているかを示す変数が存在する必要がある。グループ内の各ラジオボタンにたいするselectedフォームは、そのボタンを選択するために、その変数が正しい値をもつかどうかをチェックする。そして、ボタンのクリックにより変数をセットして、クリックされたボタンが選択される。
:key-sequence key-sequence
このプロパティはそのメニューアイテムによって呼び出されるのと同じコマンドにバインドされるかもしれないキーシーケンスを指定する。正しいキーシーケンスを指定すればメニュー表示の準備がより高速になる。
間違ったキーシーケンスを指定すると何の効果もない。Emacsはメニュー内のkey-sequenceの表示前に、実際にそのkey-sequenceがそのメニューアイテムと等価なのか検証する。
:key-sequence nil
このプロパティはそのメニューアイテムには等価なキーバインディングが通常は存在しないことを示す。このプロパティを使用することによりEmacsはそのメニューアイテムにたいして等価なキーボード入力をキーマップから検索する必要がなくなるので、メニュー表示の準備時間が短縮される。
しかしユーザーがそのアイテムの定義をキーシーケンスにリバインドすると、Emacsは:keys
プロパティを無視して結局は等価なキーボード入力を見つけ出す。
:keys string
このプロパティはそのメニューにたいする等価なキーボード入力として表示される文字列stringを指定する。string内ではドキュメント構文‘\\[...]’を使用できる。
:filter filter-fn
このプロパティはメニューアイテムを直接計算する手段を提供する。このプロパティの値filter-fnは引数が1つの関数で、呼び出し時の引数はreal-binding。この関数はかわりに使用するバインディングをリターンすること。
Emacs、メニューデータ構造の再表示や操作を行うすべてのタイミングでこの関数を呼び出すかもしれないので、いつ呼び出されても安全なように関数を記述すること。