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


21.17.7 Modifying Menus

既存のメニューに新たなアイテムを挿入するときは、そのメニューの既存のアイテムの中の特定の位置にアイテムを追加したいと思うかもしれません。define-keyを使用してアイテムを追加した場合は通常、そのアイテムはメニューの先頭に追加されます。メニュー内の他の位置にアイテムを追加するには、define-key-afterを使用します:

Function: define-key-after map key binding &optional after

define-keyと同じように、map内にkeyにたいする値bindingのバインディングを定義するが、map内でそのバインディングの位置は、イベントafterにたいするバインディングの後になる。引数keyは長さ1 — 1要素だけのベクターか文字列にすべきである。しかしafterは単一のイベント型 — シーケンスではないシンボルか文字にすべきである。新たなバインディングは、afterにたいするバインディングの後に追加される。aftert、または省略された場合、新たなバインディングはそのキーマップの最後に追加される。しかし、新たなバインディングは、すべての継承されたキーマップの前に追加される。

以下に例を示す:

(define-key-after my-menu [drink]
  '("Drink" . drink-command) 'eat)

これは、偽ファンクションキーDRINKにたいするバインディングを作成して、EATにたいするバインディングの直後に追加する。

以下に、Shellモードの‘Signals’メニュー内のアイテムbreakの後に、‘Work’と呼ばれるアイテムを追加する方法を示す:

(define-key-after
  (lookup-key shell-mode-map [menu-bar signals])
  [work] '("Work" . work-command) 'break)