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


21.17.4 Menu Example

以下は、メニューキーマップを定義する、完全な例です。これは、メニューバー内の‘Edit’メニューにサブメニュー‘Replace’を定義して、その定義内で拡張メニューフォーマット(Extended Menu Itemsを参照)を使用します。例ではまずキーマップを作成して、それに名前をつけます:

(defvar menu-bar-replace-menu (make-sparse-keymap "Replace"))

次にメニューアイテムを定義します:

(define-key menu-bar-replace-menu [tags-repl-continue]
  '(menu-item "Continue Replace" tags-loop-continue
              :help "Continue last tags replace operation"))
(define-key menu-bar-replace-menu [tags-repl]
  '(menu-item "Replace in tagged files" tags-query-replace
              :help "Interactively replace a regexp in all tagged files"))
(define-key menu-bar-replace-menu [separator-replace-tags]
  '(menu-item "--"))
;; 

バインディングがそのシンボルのために“作成された”ことに注意してください。これらのシンボルは、定義されるキーシーケンス内の角カッコ内に記述されます。このシンボルはコマンド名と同じときもあれば、異なることもあります。これらのシンボルは“ファンクションキー”として扱われますが、これらはキーボード上の実際のファンクションキーではありません。これらはメニュー自体の機能に影響しませんが、ユーザーがメニューから選択したときにエコーエリアに“エコー”され、where-isaproposの出力に現れます。

この例のメニューは、マウスによる使用を意図しています。もしキーボードの使用を意図したメニュー、つまりキーボードイベントで終了するキーシーケンスにバインドされたメニューの場合、メニューアイテムはキーボードでタイプできる文字、または“実際”のファンクションキーにバインドされるべきです。

定義が("--")のバインディングは、セパレーターラインです。実際のメニューアイテムと同様、セパレーターはキーシンボルをもち、この例ではseparator-replace-tagsです。1つのメニューが2つのセパレーターをもつ場合、それらは2つの異なるキーシンボルをもたなければなりません。

以下では、親メニュー内のアイテムとしてこのメニューがどのように表示されるかを記述しています:

(define-key menu-bar-edit-menu [replace]
  (list 'menu-item "Replace" menu-bar-replace-menu))

これは、シンボルmenu-bar-replace-menu自体ではなく、変数menu-bar-replace-menuの値であるサブメニューキーマップを組み込むことに注意してください。menu-bar-replace-menuはコマンドではないので、親メニューアイテムにそのシンボルを使用するのは無意味です。

同じreplaceメニューをマウスクリックに割り当てたい場合は、以下のようにこれを行うことができます:

(define-key global-map [C-S-down-mouse-1]
   menu-bar-replace-menu)