以下のマクロを使用すると、ポップアップメニューやメニューバーメニューを手軽に定義できます。
このマクロは、menu で内容が指定されるポップアップメニューおよび/またはメニューバーのサブメニューを定義します。
symbol が nil
以外の場合はシンボルである必要があります。このマクロは、symbol
をメニューをポップアップ表示するための関数(ポップアップメニュー を参照)として定義し、doc をそのドキュメント文字列とします。また、symbol
をメニューを値とする変数として定義します。symbol はクォートで囲まないものとします。
symbol の値にかかわらず、maps がキーマップである場合、メニューはメニューバーのトップレベルメニューとして、そのキーマップに追加されます(メニューバーを参照)。また、キーマップのリストである場合もあり、その場合はメニューがそれぞれのキーマップに個別に追加されます。
menu の最初の要素は文字列である必要があり、これがメニューラベルとなります。その後には、以下のキーワード引数ペアを任意の数だけ続けることができます。
:filter functionfunction は、1つの引数(他のメニュー項目のリスト)を指定して呼び出された際に、メニューに表示すべき実際の項目を返す関数である必要があります。
:visible includeinclude は式であり、これが nil
と評価された場合、メニューは非表示になります。 :included は :visible のエイリアスです。
:active enableenable は式で、これが nil
と評価される場合、メニューは選択できません。 :enable は :active のエイリアスです。
menu の残りの要素はメニュー項目です。
メニュー項目は、3つの要素からなるベクトル [name callback enable] で表されます。name はメニュー項目名(文字列)です。callback
は、項目が選択された際に実行するコマンド、または評価する式です。enable は式であり、これが
nil と評価される場合、その項目は選択不可となります。
あるいは、メニュー項目が次のような形式になる場合もあります:
[ name callback [ keyword arg ]... ]
ここで、name および callback は上記と同じ意味を持ち、任意の keyword と arg の各ペアは、以下のいずれかである必要があります:
:keys keyskeys
は、メニュー項目のキーボード相当として表示する文字列です。通常、キーボード相当は自動的に算出されるため、この指定は不要です。keys は、表示される前に substitute-command-keys で展開されます(ドキュメント内でのキーバインドの置換 を参照してください)。
:key-sequence keyskeys は、コマンドが複数のキーシーケンスに割り当てられている場合に、どのキーシーケンスをキーボード相当として表示するかを示すヒントです。keys がこのメニュー項目と同じコマンドに割り当てられていない場合は、効果はありません。
:active enableenable は式であり、これが nil
と評価される場合、その項目は選択不能になります。 :enable は :active のエイリアスです。
:visible includeinclude は式であり、これが nil
と評価される場合、その項目は非表示になります。 :included は :visible のエイリアスです。
:label formform は、メニュー項目のラベルとなる値を得るために評価される式です(デフォルトは name です)。
:suffix formform は動的に評価される式であり、その値がメニュー項目のラベルと連結されます。
:style stylestyle はメニュー項目の種類を表す記号で、toggle(チェックボックス)、radio(ラジオボタン)、あるいはそれ以外(通常のメニュー項目)である必要があります。
:selected selectedselected は式であり、式の値が nil
以外である場合にチェックボックスまたはラジオボタンが選択されます。
:help helphelp はメニュー項目を説明する文字列です。
あるいは、メニュー項目を文字列にすることもできます。その場合、その文字列は選択不能なテキストとしてメニューに表示されます。ハイフンで構成される文字列は、区切り文字として表示されます(メニューの区切り文字を参照)。
あるいは、メニュー項目を menu と同じ形式のリストにすることもできます。これはサブメニューです。
メニューバーの例で定義されているものと同様のメニューをeasy-menu-defineを用いて定義する例を以下に示します。
(easy-menu-define words-menu global-map
"Menu for word navigation commands."
'("Words"
["Forward word" forward-word]
["Backward word" backward-word]))