Next: Modifying Menus, Previous: Menu Example, Up: Menu Keymaps
ほとんどのウィンドウシステムでは、
各フレームにメニューバー(menu bar)、
つまり、フレームの先頭に水平方向に延びているメニューを恒久的に表示できます。
メニューバーの項目は、すべての活性なキーマップで定義された
疑似『ファンクションキー』menu-bar
のサブコマンドです。
メニューバーに項目を追加するには、
読者独自の疑似『ファンクションキー』を考え(これをkeyとする)、
キー列[menu-bar
key]
に対するバインディングを作ります。
多くの場合、バインディングはメニューキーマップであって、
メニューバーの項目上でボタンを押すと別のメニューへ至るようにします。
メニューバーに対する同じ疑似ファンクションキーを 複数の活性なキーマップで定義していても、1つの項目だけが表示されます。 ユーザーがメニューバーの当該項目をクリックすると、 当該項目のすべてのサブコマンド、つまり、 グローバルのサブコマンド、ローカルのサブコマンド、 マイナモードのサブコマンドを含む1つの複合メニューが表示されます。
メニューバーの内容を決定する際には、
通常、変数overriding-local-map
は無視されます。
つまり、overriding-local-map
がnil
であるときに
活性になるキーマップからメニューバーを計算します。
See Active Keymaps。
フレームにメニューバーを表示するには、
フレームのパラメータmenu-bar-lines
が0より大きい必要があります。
Emacsはメニューバーそのものには1行だけ使います。
読者が2行以上を指定すると、
残りの行はフレームのウィンドウとメニューバーを区切る行になります。
menu-bar-lines
の値には1か2を勧めます。
See Window Frame Parameters。
メニューバーの項目の設定例を示します。
(modify-frame-parameters (selected-frame) '((menu-bar-lines . 2))) ;; (プロンプト文字列を持つ)メニューキーマップを作り ;; それをメニューバーの項目の定義にする (define-key global-map [menu-bar words] (cons "Words" (make-sparse-keymap "Words"))) ;; このメニュー内のサブコマンドを定義する (define-key global-map [menu-bar words forward] '("Forward word" . forward-word)) (define-key global-map [menu-bar words backward] '("Backward word" . backward-word))
グローバルキーマップに作ったメニューバー項目を
ローカルキーマップで取り消すには、
ローカルキーマップの当該疑似ファンクションキーのバインディングを
undefined
で再バインドします。
たとえば、つぎのようにしてdiredはメニューバーの項目‘Edit’を抑制します。
(define-key dired-mode-map [menu-bar edit] 'undefined)
edit
は、メニューバー項目‘Edit’に対して
グローバルキーマップで使う疑似ファンクションキーです。
グローバルなメニューバー項目を抑制する主な理由は、
モード固有の項目向けに場所を確保するためです。