Next: , Previous: Simple Menu Items, Up: Defining Menus


21.12.1.2 拡張メニュー項目

拡張形式のメニュー項目は、より柔軟性があり、 単純な形式より見通しがよい代替方法です。 それらは、シンボル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
formの評価結果で、項目をオンにするかどうか決定する (nil以外だとオン)。
:visible FORM
formの評価結果で、項目をメニューに含めるかどうか決定する。 (nil以外だと含める)。 項目を含めない場合、当該項目が定義されていないかのようにメニューを表示する。
:help help
この属性の値helpは、拡張ヘルプ文字列 (現状ではEmacsは使わない)。
:button (type . selected)
この属性は、ラジオボタンとトグルボタンを定義する方法を提供する。 cartypeは、:toggle:radioであり、 どちらであるかを指定する。 cdrselectedはフォームであること。 その評価結果が、現在ボタンが選択されているかどうかを決定する。

トグル(toggle)は、selectedの値に応じて 『on』か『off』と書かれるメニュー項目である。 コマンド自身では、selectednilならば selectedtを設定し、 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はこのメニュー項目に等価なキーボード入力をキーマップで 探す必要がないからである。

しかし、ユーザーがこの項目の定義に対してキー列を再バインドすると、 Emacsは属性:keysを無視して等価なキーボード入力を探す。

:keys string
この属性は、このメニュー項目に対する等価なキーボード入力として 表示する文字列stringを指定する。 stringでは説明文の‘\\[...]’の書き方を使える。
:filter filter-fn
この属性は、動的にメニュー項目を計算する方法を与える。 属性値filter-fnは1引数の関数であること。 それが呼ばれるとき、引数はreal-bindingになる。 関数はかわりに使用するバインディングを返すこと。