既存のメニューに新しい項目を追加する際、メニュー内の既存項目の特定の位置に配置したい場合が多いでしょう。define-key
を使用して項目を追加すると、通常はメニューの先頭に配置されます。メニュー内の別の位置に配置するには、keymap-set-after を使用してください:
map に、keymap-set と同様に key 用のバインディングを値 binding で定義します(キーバインディングの変更
を参照)。ただし、このバインディングは map の、イベント after 用のバインディングの後に配置します。引数 key
は単一のメニュー項目またはキーを表す必要があり、key-valid-p を満たす必要があります(キーシーケンス を参照)。after
は単一のイベントタイプ(シーケンスではなく、シンボルまたは文字)である必要があります。新しいバインディングは after 用のバインディングの後に配置されます。after が
t
であるか、あるいは省略されている場合、新しいバインディングはキーマップの最後、つまり末尾に配置されます。ただし、新しいバインディングは継承されたキーマップよりも前に追加されます。
以下に例を示します。
(keymap-set-after my-menu "<drink>"
'("Drink" . drink-command) 'eat)
擬似関数キー DRINK のバインディングを作成し、EAT のバインディングの直後に配置します。
シェルモードの‘Signals’メニューにおいて、項目breakの後に‘Work’という項目を挿入する方法は以下の通りです。
(keymap-set-after shell-mode-map "<menu-bar> <signals> <work>"
'("Work" . work-command) 'break)