Next: , Previous: , Up: Menu Keymaps   [Contents][Index]


21.17.5 The Menu Bar

Emacsは通常、各フレームの最上部にメニューバー(menu bar)を表示します。Menu Bars in The GNU Emacs Manualを参照してください。メニューバーのアイテムは、アクティブキーマップ内で定義される偽りの“ファンクションキー”menu-barのサブコマンドです。

メニューバーにアイテムを追加するには、自分で偽りの“ファンクションキー”(これをkeyと呼ぶことにしましょう)を創作して、キーシーケンス[menu-bar key]にたいするキーバインディングを作成します。ほとんどの場合において、そのバインディングはメニューキーマップなので、メニューバーアイテム上でボタンを押下すると、他のメニューに導かれます。

メニューバーにたいして同じ“ファンクションキー”を定義するアクティブなキーマップが1つ以上存在するとき、そのアイテムは1回だけ出現します。ユーザーがメニューバーのそのアイテムをクリックした場合、そのアイテムのすべてのサブコマンド— グローバルサブコマンド、ローカルサブコマンド、マイナーモードサブコマンドが組み合わされた単一のメニューを表示します。

変数overriding-local-mapは通常、メニューバーのコンテンツを決定する際は無視されます。つまり、メニューバーはoverriding-local-mapnilの場合にアクティブになるであろうキーマップから計算されます。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’メニューバーアイテムにたいしてグローバルキーマップにより使用される偽ファンクションキーです。グローバルメニューバーアイテムを抑制する主な理由は、モード特有のアイテムのためのスペースを確保するためです。

Variable: menu-bar-final-items

通常メニューバーナーグローバルアイテムの後にローカルマップにより定義されるアイテムを表示する。

この変数は、通常の順番による位置ではなく、メニューの最後に表示するアイテムのための偽ファンクションキーのリストを保持する。デフォルト値は(help-menu)である。したがって、‘Help’メニューアイテムはメニューバーの最後、ローカルメニューアイテムの後に表示される。

Variable: menu-bar-update-hook

このノーマルフックは、メニューバーの再表示の前に、メニューバーのコンテンツを更新するための再表示により実行される。コンテンツを変化させる必要があるメニューの更新に使用できる。このフックは頻繁に実行されるので、フックが呼び出す関数は、通常の場合は長い時間を要さないことを確実にするよう助言する。

Emacsは、すべてのメニューバーアイテムの隣に、(もしそのようなキーバインディングが存在するなら)同じコマンドを実行するキーバインディングを表示します。これは、キーバインディングを知らないユーザーにたいして便利なヒントを与える役目をもちます。コマンドが複数のバインディングをもつ場合、通常Emacsは最初に見つけたバインディングを表示します。コマンドのシンボルプロパティ:advertised-bindingに割り当てることにより、特定のキーバインディングを指定できます。Keys in Documentationを参照してください。