emacs: Local Keymaps
51.3.3 Local Keymaps
--------------------
So far, we have explained the ins and outs of the global map. Major
modes customize Emacs by providing their own key bindings in “local
keymaps”. For example, C mode overrides <TAB> to make it indent the
current line for C code. Minor modes can also have local keymaps;
whenever a minor mode is in effect, the definitions in its keymap
override both the major mode’s local keymap and the global keymap. In
addition, portions of text in the buffer can specify their own keymaps,
which override all other keymaps.
A local keymap can redefine a key as a prefix key by defining it as a
prefix keymap. If the key is also defined globally as a prefix, its
local and global definitions (both keymaps) effectively combine: both
definitions are used to look up the event that follows the prefix key.
For example, if a local keymap defines ‘C-c’ as a prefix keymap, and
that keymap defines ‘C-z’ as a command, this provides a local meaning
for ‘C-c C-z’. This does not affect other sequences that start with
‘C-c’; if those sequences don’t have their own local bindings, their
global bindings remain in effect.
Another way to think of this is that Emacs handles a multi-event key
sequence by looking in several keymaps, one by one, for a binding of the
whole key sequence. First it checks the minor mode keymaps for minor
modes that are enabled, then it checks the major mode’s keymap, and then
it checks the global keymap. This is not precisely how key lookup
works, but it’s good enough for understanding the results in ordinary
circumstances.