キーマップは、その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)))