Previous: , Up: メニューキーマップ   [Contents][Index]


23.17.8 easy-menu

以下のマクロはポップアップメニューおよび/またはメニューバーメニューを定義する便利な方法を提供します。

Macro: easy-menu-define symbol maps doc menu

このマクロはmenuにより与えるコンテンツのポップアップメニューおよび/またはメニューバーサブメニューを定義する。

symbolが非nilなら、それはシンボルである。その場合、このマクロはドキュメント文字列docをもつ、メニューをポップアップ(ポップアップメニューを参照)する関数として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 ]... ]

ここでnamecallbackは上記と同じ意味をもち、オプションのkeywordargの各ペアーは以下のいずれかである:

: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]))