キーボード入力とコマンド関数とのバインディングはキーマップと呼ばれるデータ構造 に記録されます。 2種類の primary キーマップが(常に)存在します。 (全ての)バッ ファで利用できるグローバルキーマップと、(通常)あるメジャーモードに対応付けられ る (カレントな)ローカルキーマップです。
キーマップは、2 種類の Lisp オブジェクト(ベクトルもしくはリスト) のいずれかで 表現されます。フルキーマップは長さ 128 の配列です。このキーマップでは、ある文 字に対するバインディングは、この配列からその文字を添字として (要素をアクセスす ることで) 得られます。キーマップは(また)、car がシンボル keymap で、残りの(諸) 要素が (文字 . バインディング) というフォームの pair であるリストであることも あります。このリストは (フルキーマップでは、ほとんどの文字のエントリーが nil になってしまう場合に用いるもので) スパースキーマップと呼ばれます。エントリーが 少ないと考えられる場合、スパースキーマップが用いられます。 (define-key が必要 とする場合、スパースキーマップは中間的な (訳注:intermediate) キーマップとして 作られます)
キーマップは長さが 128 しかないため、 (128 から 255 のコードである) メタ文字は どのように扱われるのでしょうか? メタ文字を含むキーは(通常)、 (最初の文字が ESC である) 2 文字のシーケンスとして表わされます。 M-a は(実際には) ESC a で表 わされ、このバインディングは esc-map の `a' のスロットに見い出されます。
Function: keymapp object
この関数は、 object がキーマップの場合 t を返し、そうでない場合 nil を返し ます。キーマップは長さ128 のベクトルか、リスト (keymap . alist ) です。
(keymapp '(keymap)) => t (keymapp (current-grobal-map)) => t
Function: make-keymap
この関数は、その(全ての)エントリーが ("キーマップ中でコマンドが未定義であ る" ことを示す) nil であるフルキーマップ (i.e., 長さ 128 のベクトル) を(新 しく)作り、それを返します。
(make-keymap) => [nil nil nil ... nil nil]
Function: make-sparse-keymap
この関数は、エントリーを持たないスパースキーマップを新しく作り、それを返し ます。
(make-sparse-keymap) => (keymap)