Finding commands and key bindings in GNU/Emacs

Since I use GNU/Emacs for everything, I can’t remember all the key bindings for all the different modes (org-mode, gnus, geiser, etc.). So I often use the command names using M-x command-name.

Sometimes, I don’t even remember the exact name of the command and I will use the TAB completion to see suggestions. But for that, I need to remember the beginning of the name of the command. If I remember a part of the name of the command, say, find, typing M-x –find followed by TAB will propose all available commands whose name contains find.

So far so good.

If I don’t know at all the name of the command, there are a couple of things that I can do. One would be browsing the menus in the menu bar, but since my menu bar is hidden1 in order to increase screen real estate, I would need to show it (M-x menu-bar-mode), and grab the mouse. Instead, pressing F10, a pop-up menu which can be keyboard driven appears and I can browse the menus.

I only would do this if I was bored, but this is rarely the case, so I prefer another possibility. I use C-h m, which is bound to the describe-mode command which displays the documentation for all active modes for the current buffer.

In this documentation there is a table showing all the available key bindings and the corresponding commands. When in an org-mode buffer I get this:

key             binding
---             -------

C-a             org-beginning-of-line
C-c             Prefix Command
C-e             org-end-of-line
TAB             org-cycle
C-j             org-return-indent
C-k             org-kill-line
RET             org-return
C-y             org-yank
ESC             Prefix Command
|               org-force-self-insert
...

Usually, this allows me to find the command I need and recall (at least for 5 minutes) the corresponding key binding.

If I am not sure if a command does what I need, I can always use the describe-function (bound to C-h f) command to get its documentation. If I invoke the command with the cursor on one of the commands of the table above, this will be used as default command to be described by describe-function.

Nice and efficient.

Footnotes:

1

I have (menu-bar-mode -1) in my .emacs.