次: Creating Keymaps, 前: Keymap Terminology, 上: Keymaps
キーマップは、そのcarがシンボルkeymapであるリストです。
リストの残りの要素がキーマップのキーバインディングを定義します。
オブジェクトがキーマップであるかどうか検査するには、
関数keymapp(下記参照)を使います。
キーマップでは、シンボルkeymapのうしろに、
さまざまな種類の要素が現れます。
(type . binding)(t . binding)キーマップにベクトルがあると、ベクトルの要素がnilであっても
ベクトルが各ASCII文字のバインディングをつねに定義する。
そのようなnilのバインディングは、
ASCII文字に対しては
キーマップのデフォルトのキーバインディングを無効にする。
しかし、ASCII文字以外のイベントに対しては、
デフォルトのバインディングが意味を持つ。
nilのバインディングが
低優先順位のキーマップを隠すことはない。
つまり、ローカルマップがnilのバインディングを与えると、
Emacsはグローバルマップのバインディングを使う。
キーマップは、メタ文字に対するバインディングを直接には記録していません。
そのかわりに、キー探索においては、メタ文字は2文字から成る列とみなし、
先頭文字は<ESC>(あるいは、meta-prefix-charの現在値)です。
つまり、キーM-aは実際には<ESC> aと表現され、
そのグローバルなバインディングは
esc-mapのaでみつかります(see Prefix Keys)。
Lispモードに対するローカルキーマップの例を示します。 これは疎なキーマップです。 <DEL>、<TAB>、C-c C-l、M-C-q、M-C-xに対する バインディングを定義しています。
lisp-mode-map
=>
(keymap
;; <TAB>
(9 . lisp-indent-line)
;; <DEL>
(127 . backward-delete-char-untabify)
(3 keymap
;; C-c C-l
(12 . run-lisp))
(27 keymap
;; M-C-qは<ESC> C-qとみなされる
(17 . indent-sexp)
;; M-C-xは<ESC> C-xとみなされる
(24 . lisp-send-defun)))