Next: Extended Menu Items, Previous: Defining Menus, Up: Defining Menus
メニューキーマップのバインディングを定義する単純で旧式の方法は つぎのとおりです。
(item-string . real-binding)
carのitem-stringは、メニューに表示される文字列です。 3単語までの短いものにし、対応するコマンドの動作を記述します。
つぎのように、ヘルプ文字列となる2つめの文字列も指定できます。
(item-string help-string . real-binding)
現状では、Emacsは実際にはhelp-stringを使いません。 real-bindingを取り出すためにhelp-stringを無視する方法を 知っているだけです。 将来、ユーザーの要望に応じてメニュー項目に対する追加説明として help-stringを使うかもしれません。
define-key
に関する限り、
item-stringとhelp-stringは
イベントのバインディングの一部分です。
しかし、lookup-key
はreal-bindingのみを返し、
キーの実行にはreal-bindingのみが使われます。
real-bindingがnil
であると、
item-stringはメニューに現れますが、それは選択できません。
real-bindingがシンボルであり、
その属性menu-enable
がnil
以外であると、
当該属性は、メニュー項目を活性にするかどうかを制御する式です。
Emacsは、メニューを表示するためにキーマップを使うたびに、
その式を評価し、式の値がnil
以外である場合に限り、
当該メニュー項目をオンにします。
メニュー項目がオフであると、『薄く』表示し、それは選択できません。
メニューバーでは、読者がメニューを見るたびにどの項目がオンであるかを
再計算しません。
Xツールキットがあらかじめメニューの木構造全体を必要とするからです。
メニューバーの再計算を強制するには、
force-mode-line-update
を呼び出します。
(see Mode Line Format)。
メニュー項目には、同じコマンドを起動する等価なキーボードのキー列が (あれば)表示されていることに気づいたと思います。 再計算の時間を節約するために、 メニューの表示では、この情報をつぎのように バインディングの部分リストに隠し持っています。
(item-string [help-string] (key-binding-data) . real-binding)
読者は、メニュー項目にこれらの部分リストを入れないでください。 それらはメニューの表示で自動的に計算されます。 冗長になるので、項目の文字列には、等価なキーボード入力を 含めないでください。