Emacs: Bind Menu/App Key
On most Windows keyboards, there's the ▤ Menu key, also known as App key. This page shows you how to use that key in emacs, on linux or Mac or Windows.

Menu key on Microsoft Windows
On Microsoft Windows, by default, the menu key does nothing.
Under Windows, the menu key has the syntax "<apps>"
You can set it to do execute-extended-command
;; make the menu key do M-x (when (>= emacs-major-version 29) (cond ((eq system-type 'windows-nt) (keymap-global-set "<apps>" 'execute-extended-command)) ((eq system-type 'gnu/linux) (keymap-global-set "<menu>" 'execute-extended-command)) ((eq system-type 'darwin) nil) (t nil))) (when (not (>= emacs-major-version 29)) (cond ((eq system-type 'windows-nt) (global-set-key (kbd "<apps>") 'execute-extended-command)) ((eq system-type 'gnu/linux) (global-set-key (kbd "<menu>") 'execute-extended-command)) ((eq system-type 'darwin) nil) (t nil)))
Menu Key in Linux
In Linux GNU emacs, by default, ▤ Menu key invokes execute-extended-command
Under linux, the menu key has the syntax "<menu>"
Menu key on Mac
On Mac OS X, if you are using a Windows keyboard, the ▤ Menu key sends Ctrl+p by default.
How to fix menu key on the Mac?
You can workaround by:
;; make Ctrl+p send the menu/app key (define-key key-translation-map (kbd "C-p") (kbd "<menu>"))
or
(global-set-key (kbd "C-p") 'execute-extended-command)
That's still not a good fix, because you lost the C-p.
best is to use a keyboard tool to fix at operating system level. [see Mac Keyboard Software Guide]
Make the Menu Key as Leader Key
Best is to set ▤ Menu key as the leader key of key sequences for emacs's hundreds of commands. [see Ban Key Chords]
Example of key sequence starting with the ▤ Menu key.
;; on Linux, the menu/apps key syntax is <menu> ;; on Windows, the menu/apps key syntax is <apps> ;; make the syntax equal (define-key key-translation-map (kbd "<apps>") (kbd "<menu>")) (progn ;; define set of key sequences (define-prefix-command 'my-leader-key-map) (define-key my-leader-key-map (kbd "RET") 'execute-extended-command) (define-key my-leader-key-map (kbd "<menu>") 'exchange-point-and-mark) (define-key my-leader-key-map (kbd "'") 'quoted-insert) (define-key my-leader-key-map (kbd "2") 'delete-window) (define-key my-leader-key-map (kbd "3") 'delete-other-windows) (define-key my-leader-key-map (kbd "4") 'split-window-below) (define-key my-leader-key-map (kbd "5") 'split-window-right) (define-key my-leader-key-map (kbd "7") 'dired-jump) (define-key my-leader-key-map (kbd "9") 'ispell-word) (define-key my-leader-key-map (kbd "a") 'mark-whole-buffer) (define-key my-leader-key-map (kbd "b") 'end-of-buffer) (define-key my-leader-key-map (kbd "d") 'beginning-of-buffer) (define-key my-leader-key-map (kbd "g") 'isearch-forward) (define-key my-leader-key-map (kbd "k") 'yank) (define-key my-leader-key-map (kbd "l") 'recenter-top-bottom) (define-key my-leader-key-map (kbd "m") 'universal-argument) (define-key my-leader-key-map (kbd "p") 'query-replace) (define-key my-leader-key-map (kbd "z") 'comment-dwim)) ;; make the menu key as leader key (global-set-key (kbd "<menu>") 'my-leader-key-map)
Why should you use the menu key?
Setting the ▤ Menu key for execute-extended-command
is quite convenient. You'd know if you've used it on linux.
but, emacs has hundreds of commands starting with Ctrl+x. It'd be nice, if all these are just a key sequence of 3 keys. That way, you don't have to hold down a key on the corner.
So, we can use the ▤ Menu as a leader key for sequences.
But you don't have a single key for execute-extended-command
anymore? what to do? The Windows keyboard doesn't have much convenient keys. So, you could map one of the ❖ Window key to do the execute-extended-command
. Else, you can just set
▤ Menu Enter or
▤ Menu Space or
▤ Menu ▤ Menu to do execute-extended-command
.
How to design key sequence to replace all C-x?
you can see example design here Emacs: Xah Fly Keys