既存のメニューに新たなアイテムを挿入するときは、そのメニューの既存のアイテムの中の特定の位置にアイテムを追加したいと思うかもしれません。define-key
を使用してアイテムを追加すると、そのアイテムは通常はメニューの先頭に追加されます。メニュー内の他の位置にアイテムを追加するにはdefine-key-after
を使用します:
define-key
と同じようにmap内にkeyにたいする値bindingのバインディングを定義するが、map内でのバインディング位置はイベントafterのバインディングの後になる。引数keyは長さ1
— 1要素だけのベクターか文字列にすること。しかしafterは単一のイベント型 —
シーケンスではないシンボルか文字にすること。新たなバインディングはafterのバインディングの後に追加される。afterがt
または省略された場合には、新たなバインディングはそのキーマップの最後に追加される。しかし新たなバインディングは継承されたすべてのキーマップの前に追加される。
以下は例:
(define-key-after my-menu [drink] '("Drink" . drink-command) 'eat)
これは偽ファンクションキーDRINKのバインディングを作成して、EATのバインディングの直後に追加する。
以下はShellモードの‘Signals’メニュー内のアイテムbreak
の後に‘Work’と呼ばれるアイテムを追加する方法:
(define-key-after shell-mode-map [menu-bar signals work] '("Work" . work-command) 'break)