次: , 前: Defining Menus, 上: Defining Menus


21.12.1.1 単純なメニュー項目

メニューキーマップのバインディングを定義する単純で旧式の方法は つぎのとおりです。

     (item-string . real-binding)

caritem-stringは、メニューに表示される文字列です。 3単語までの短いものにし、対応するコマンドの動作を記述します。

つぎのように、ヘルプ文字列となる2つめの文字列も指定できます。

     (item-string help-string . real-binding)

現状では、Emacsは実際にはhelp-stringを使いません。 real-bindingを取り出すためにhelp-stringを無視する方法を 知っているだけです。 将来、ユーザーの要望に応じてメニュー項目に対する追加説明として help-stringを使うかもしれません。

define-keyに関する限り、 item-stringhelp-stringは イベントのバインディングの一部分です。 しかし、lookup-keyreal-bindingのみを返し、 キーの実行にはreal-bindingのみが使われます。

real-bindingnilであると、 item-stringはメニューに現れますが、それは選択できません。

real-bindingがシンボルであり、 その属性menu-enablenil以外であると、 当該属性は、メニュー項目を活性にするかどうかを制御する式です。 Emacsは、メニューを表示するためにキーマップを使うたびに、 その式を評価し、式の値がnil以外である場合に限り、 当該メニュー項目をオンにします。 メニュー項目がオフであると、『薄く』表示し、それは選択できません。

メニューバーでは、読者がメニューを見るたびにどの項目がオンであるかを 再計算しません。 Xツールキットがあらかじめメニューの木構造全体を必要とするからです。 メニューバーの再計算を強制するには、 force-mode-line-updateを呼び出します。 (see Mode Line Format)。

メニュー項目には、同じコマンドを起動する等価なキーボードのキー列が (あれば)表示されていることに気づいたと思います。 再計算の時間を節約するために、 メニューの表示では、この情報をつぎのように バインディングの部分リストに隠し持っています。

     (item-string [help-string] (key-binding-data) . real-binding)

読者は、メニュー項目にこれらの部分リストを入れないでください。 それらはメニューの表示で自動的に計算されます。 冗長になるので、項目の文字列には、等価なキーボード入力を 含めないでください。