Go to the previous, next section.


Emacs uses keymaps to record which keys call which commands. Specific modes, such as C mode or Text mode, have their own keymaps; the mode-specific keymaps override the global map that is shared by all buffers.

The  global-set-key function binds, or rebinds, the global keymap. For example, the following binds the key C-c C-l to the function  line-to-top-of-window :

(global-set-key "\C-c\C-l" 'line-to-top-of-window))

Mode-specific keymaps are bound using the  define-key function, which takes a specific keymap as an argument, as well as the key and the command. For example, my `.emacs' file contains the following expression to bind the  texinfo-insert-@group command to C-c C-c g:

(define-key texinfo-mode-map "\C-c\C-cg"

The  texinfo-insert-@group function itself is a little extension to Texinfo mode that inserts `@group' into a Texinfo file. I use this command all the time and prefer to type the three strokes C-c C-c g rather than the six strokes @ g r o u p. (`@group' and its matching `@end group' are commands that keep all enclosed text together on one page; many multi-line examples in this book are surrounded by `@group @dots{' @end group}.)

Here is the  texinfo-insert-@group function definition:

(defun texinfo-insert-@group ()
  "Insert the string @group in a Texinfo buffer."
  (insert "@group\n"))

(Of course, I could have used Abbrev mode to save typing, rather than write a function to insert a word; but I prefer key strokes consistent with other Texinfo mode key bindings.)

You will see numerous  define-key expressions in `loaddefs.el' as well as in the various mode libraries, such as `c-mode.el' and `lisp-mode.el'.

See section 'Customizing Key Bindings' in The GNU Emacs Manual, and section 'Keymaps' in The GNU Emacs Lisp Reference Manual, for more information about keymaps.

Go to the previous, next section.