GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Modifying-Menus.html ・ emacs-doc.conao3.com

23.18.7 メニューの変更

既存のメニューに新しい項目を追加する際、メニュー内の既存項目の特定の位置に配置したい場合が多いでしょう。define-key を使用して項目を追加すると、通常はメニューの先頭に配置されます。メニュー内の別の位置に配置するには、keymap-set-after を使用してください:

関数: keymap-set-after map key binding &optional 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)