次: 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 FORMnil以外だとオン)。
:visible FORMnil以外だと含める)。
項目を含めない場合、当該項目が定義されていないかのようにメニューを表示する。
: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