[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Top] [Table des matières] [Index] [ ? ]

22.3 Format of Keymaps

Each keymap is a list whose CAR is the symbol keymap. The remaining elements of the list define the key bindings of the keymap. A symbol whose function definition is a keymap is also a keymap. Use the function keymapp (see below) to test whether an object is a keymap.

Several kinds of elements may appear in a keymap, after the symbol keymap that begins it:

(type . binding)

This specifies one binding, for events of type type. Each ordinary binding applies to events of a particular event type, which is always a character or a symbol. Voir la section Classifying Events. In this kind of binding, binding is a command.

(type item-name [cache] . binding)

This specifies a binding which is also a simple menu item that displays as item-name in the menu. cache, if present, caches certain information for display in the menu. Voir la section Simple Menu Items.

(type item-name help-string [cache] . binding)

This is a simple menu item with help string help-string.

(type menu-item . details)

This specifies a binding which is also an extended menu item. This allows use of other features. Voir la section Extended Menu Items.

(t . binding)

This specifies a default key binding; any event not bound by other elements of the keymap is given binding as its binding. Default bindings allow a keymap to bind all possible event types without having to enumerate all of them. A keymap that has a default binding completely masks any lower-precedence keymap, except for events explicitly bound to nil (see below).

char-table

If an element of a keymap is a char-table, it counts as holding bindings for all character events with no modifier bits (voir modifier bits): element n is the binding for the character with code n. This is a compact way to record lots of bindings. A keymap with such a char-table is called a full keymap. Other keymaps are called sparse keymaps.

string

Aside from elements that specify bindings for keys, a keymap can also have a string as an element. This is called the overall prompt string and makes it possible to use the keymap as a menu. Voir la section Defining Menus.

When the binding is nil, it doesn't constitute a definition but it does take precedence over a default binding or a binding in the parent keymap. On the other hand, a binding of nil does not override lower-precedence keymaps; thus, if the local map gives a binding of nil, Emacs uses the binding from the global map.

Keymaps do not directly record bindings for the meta characters. Instead, meta characters are regarded for purposes of key lookup as sequences of two characters, the first of which is <ESC> (or whatever is currently the value of meta-prefix-char). Thus, the key M-a is internally represented as <ESC> a, and its global binding is found at the slot for a in esc-map (voir la section Prefix Keys).

This conversion applies only to characters, not to function keys or other input events; thus, M-<end> has nothing to do with <ESC> <end>.

Here as an example is the local keymap for Lisp mode, a sparse keymap. It defines bindings for <DEL> and <TAB>, plus C-c C-l, M-C-q, and M-C-x.

 
lisp-mode-map
⇒
(keymap
 (3 keymap
    ;; C-c C-z
    (26 . run-lisp))
 (27 keymap
     ;; M-C-x, treated as <ESC> C-x
     (24 . lisp-send-defun)
     keymap
     ;; M-C-q, treated as <ESC> C-q
     (17 . indent-sexp))
 ;; This part is inherited from lisp-mode-shared-map.
 keymap
 ;; <DEL>
 (127 . backward-delete-char-untabify)
 (27 keymap
     ;; M-C-q, treated as <ESC> C-q
     (17 . indent-sexp))
 (9 . lisp-indent-line))
Function: keymapp object

This function returns t if object is a keymap, nil otherwise. More precisely, this function tests for a list whose CAR is keymap, or for a symbol whose function definition satisfies keymapp.

 
(keymapp '(keymap))
    ⇒ t
(fset 'foo '(keymap))
(keymapp 'foo)
    ⇒ t
(keymapp (current-global-map))
    ⇒ t

[ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Top] [Table des matières] [Index] [ ? ]

Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.