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