Customizing the Emacs Help Menu
18 Jul 2025 Charles Choi
NGL, I’ve always found the default Emacs Help menu to be a bit too extra.
While the Help menu is commendable in trying to assist new users, I’ve long outgrown it as most of its offerings I can access via the keyboard. The Help menu though lacks a feature that I sorely miss from other apps: The ability to open a separate GUI window (in Emacs parlance, a frame) to read help in.
As always though with Emacs, you can customize nearly everything about it and that includes the Help menu which this post will cover. Readers are invited to adopt or adapt these customizations for their own. Consider this a followup to an earlier post of mine “Customizing the Emacs Tools Menu”.
A design challenge to building a menu for Emacs Help is that there are no less than four different help subsystems provided by it:
- The Emacs Info reader for Texinfo files.
- Elisp docstrings rendered by the
describe-
family of functions. - The Man page reader for
troff
formatted files. shortdoc
for an overview of functions relevant for a topic.
For my Help menu I’ve decided to make three ways to create a new frame:
- Info in New Frame: Create a new frame with the Emacs Info reader.
- New Info in New Frame: Create a new frame with a different Emacs Info reader instance. The user will be prompted for a manual to render.
- Man Page in New Frame: Create a new frame with a Man page reader. The user will be prompted for a man page to render.
I’ve found the relatively recent addition of describe-symbol
to generalize search of all docstrings to be a welcome one. Promoting it and describe-key
to the first level of the menu seemed appropriate.
A recent TIL is the command finder-commentary
which will display the commentary section of an Elisp library. I’ve found this command nice to have around but its name to be completely unmemorable, which makes it perfect to put in the menu labeled as “Library Commentary…”.
With existing Help menu items, I’ve decided to either remove or re-arrange them to taste. The result of my customizations looks like this:
Be forewarned, some Elisp ahead.
Implementation
To customize the Help menu it helps to know the internal key of a menu item. These keys are Elisp symbols. Here’s a utility function to help show these key symbols in string form:
1 2 3 4 5 6 |
|
With cc/show-global-map-keys
evaluated, we can run it in IELM as shown below for the keypath [menu-bar help-menu]
.
1 2 3 4 5 6 7 8 |
|
We’ll return back to these keys later.
Opening a new frame (aka GUI window) can be achieved with the function other-frame-prefix
. We can wrap this function so that any interactive command can be invoked in a new frame as shown below.
1 2 3 4 5 |
|
With cc/--command-in-new-frame
in place, we can now add menu items using easy-menu-add-item
. The next code example shows how to invoke info
in a new frame as a menu item added before emacs-tutorial
.
1 2 3 4 5 6 7 8 |
|
Let’s add some more menu items to support viewing a Man page and for describe-symbol
and describe-key
. In addition, we’ll re-arrange some existing menu items by replicating their entry in global-map
in a desired position and later deleting the older menu item with the same command.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
|
So far all we’ve done is add more menu items. Here’s how to get rid of the items using the keys obtained via cc/show-global-map-keys
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Closing Thoughts
I’ve been living with this customized Help menu for several months now and upon reflection a couple of thoughts:
-
How did I live so long without this?
Easy and non-disruptive access to Help in a separate GUI window is baseline for a proper application. Vanilla Emacs makes doing this way more onerous than need be:
- Create a new frame either from the menu “Edit › New Frame” or by recalling the arcane incantation
C-x 5 2
. (really?) - Run
M-x info
in the new frame.
With my reconfigured Help menu, I can just go to “Help › Info in New Frame” via mouse and it does the right thing without altering any existing Emacs window configuration. Simple pleasures.
- Create a new frame either from the menu “Edit › New Frame” or by recalling the arcane incantation
-
To my surprise, I use Info so much more now.
Having the Info reader in a separate GUI window lets me treat it like a web browser window but with the benefits of:
- Local access - never worry about a network connection.
- You’re still in Emacs.
Couple that with my Casual interface for Info and I’d argue that Info is actually pleasurable to use. (Alongside that the same goes for Casual Man and Help.)
Info is not exclusive to just Emacs manuals. You can read manuals for GNU coreutils, Make, Bash, Gnuplot, and many others. These days, whenever I’m dealing with software, I actively look to see if there’s Texinfo documentation for it.
If you’ve made it to here, thanks for reading!