GNU Info

Info Node: (emacs)Local Keymaps

(emacs)Local Keymaps


Next: Minibuffer Maps Prev: Prefix Keymaps Up: Key Bindings
Enter node , (file) or (file)node

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.  Portions of text in the buffer can specify
their own keymaps to substitute for the keymap of the buffer's major
mode.

   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.

   The local keymaps for Lisp mode and several other major modes always
exist even when not in use.  These are kept in variables named
`lisp-mode-map' and so on.  For major modes less often used, the local
keymap is normally constructed only when the mode is used for the first
time in a session.  This is to save space.  If you wish to change one
of these keymaps, you must use the major mode's "mode hook"--see below.

   All minor mode keymaps are created in advance.  There is no way to
defer their creation until the first time the minor mode is enabled.

   A local keymap can locally redefine a key as a prefix key by defining
it as a prefix keymap.  If the key is also defined globally as a prefix,
then its local and global definitions (both keymaps) effectively
combine: both of them are used to look up the event that follows the
prefix key.  Thus, if the mode's local keymap defines `C-c' as another
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 ordinary circumstances.

   To change the local bindings of a major mode, you must change the
mode's local keymap.  Normally you must wait until the first time the
mode is used, because most major modes don't create their keymaps until
then.  If you want to specify something in your `~/.emacs' file to
change a major mode's bindings, you must use the mode's mode hook to
delay the change until the mode is first used.

   For example, the command `texinfo-mode' to select Texinfo mode runs
the hook `texinfo-mode-hook'.  Here's how you can use the hook to add
local bindings (not very useful, we admit) for `C-c n' and `C-c p' in
Texinfo mode:

     (add-hook 'texinfo-mode-hook
               '(lambda ()
                  (define-key texinfo-mode-map "\C-cp"
                              'backward-paragraph)
                  (define-key texinfo-mode-map "\C-cn"
                              'forward-paragraph)))

   Note: Hooks.


automatically generated by info2www version 1.2.2.9