Next: Tool Bar, Previous: Menu Example, Up: Menu Keymaps [Contents][Index]
Emacsは通常、各フレームの最上部にメニューバー(menu bar)を表示します。Menu Bars in The
GNU Emacs
Manualを参照してください。メニューバーのアイテムは、アクティブキーマップ内で定義される偽りの“ファンクションキー”menu-bar
のサブコマンドです。
メニューバーにアイテムを追加するには、自分で偽りの“ファンクションキー”(これをkeyと呼ぶことにしましょう)を創作して、キーシーケンス[menu-bar
key]
にたいするキーバインディングを作成します。ほとんどの場合において、そのバインディングはメニューキーマップなので、メニューバーアイテム上でボタンを押下すると、他のメニューに導かれます。
メニューバーにたいして同じ“ファンクションキー”を定義するアクティブなキーマップが1つ以上存在するとき、そのアイテムは1回だけ出現します。ユーザーがメニューバーのそのアイテムをクリックした場合、そのアイテムのすべてのサブコマンド— グローバルサブコマンド、ローカルサブコマンド、マイナーモードサブコマンドが組み合わされた単一のメニューを表示します。
変数overriding-local-map
は通常、メニューバーのコンテンツを決定する際は無視されます。つまり、メニューバーはoverriding-local-map
がnil
の場合にアクティブになるであろうキーマップから計算されます。Active Keymapsを参照してください。
以下は、メニューバーのアイテムをセットアップする例です:
;; (プロンプト文字列とともに)メニューキーマップを作成して ;; それをメニューバーアイテムの定義にする (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’メニューバーアイテムにたいしてグローバルキーマップにより使用される偽ファンクションキーです。グローバルメニューバーアイテムを抑制する主な理由は、モード特有のアイテムのためのスペースを確保するためです。
通常メニューバーナーグローバルアイテムの後にローカルマップにより定義されるアイテムを表示する。
この変数は、通常の順番による位置ではなく、メニューの最後に表示するアイテムのための偽ファンクションキーのリストを保持する。デフォルト値は(help-menu)
である。したがって、‘Help’メニューアイテムはメニューバーの最後、ローカルメニューアイテムの後に表示される。
このノーマルフックは、メニューバーの再表示の前に、メニューバーのコンテンツを更新するための再表示により実行される。コンテンツを変化させる必要があるメニューの更新に使用できる。このフックは頻繁に実行されるので、フックが呼び出す関数は、通常の場合は長い時間を要さないことを確実にするよう助言する。
Emacsは、すべてのメニューバーアイテムの隣に、(もしそのようなキーバインディングが存在するなら)同じコマンドを実行するキーバインディングを表示します。これは、キーバインディングを知らないユーザーにたいして便利なヒントを与える役目をもちます。コマンドが複数のバインディングをもつ場合、通常Emacsは最初に見つけたバインディングを表示します。コマンドのシンボルプロパティ:advertised-binding
に割り当てることにより、特定のキーバインディングを指定できます。Keys in Documentationを参照してください。