Next: , Previous: , Up: Keymaps   [Contents][Index]


21.3 Format of Keymaps

キーマップはそれぞれ、CARがシンボルkeymapであるようなリストです。このリストの残りの要素は、そのキーマップのキーバインディングを定義します。関数定義がキーマップであるようなシンボルもキーマップです。あるオブジェクトがキーマップかどうかテストするには、関数keymapp(以下参照)を使用してください。

キーマップを開始するシンボルkeymapの後には、いくつかの種類の要素が出現します:

(type . binding)

これは型typeのイベントにたいする1つのバインディングを指定する。通常のバインディングはそれぞれ、常に文字かシンボルであるような特定のイベント型(event type)のイベントに適用される。Classifying Eventsを参照のこと。この種のバインディングでは、bindingはコマンドである。

(type item-name . binding)

これは、メニュー内でitem-nameとして表示されるシンプルなメニューアイテムでもあるようなバインディングを指定する。Simple Menu Itemsを参照のこと。

(type item-name help-string . binding)

これは、ヘルプ文字列help-stringのシンプルなメニューアイテムである。

(type menu-item . details)

これは、拡張されたメニューアイテムでもあるようなバインディングを指定する。これは他の機能も使用できる。Extended Menu Itemsを参照のこと。

(t . binding)

これはデフォルトキーバインディング(default key binding)を指定する。キーマップの他の要素でバインドされないイベントは、バインディングとしてbindingが与えられる。デフォルトバインディングにより、利用可能なすべてのイベント型を列挙することなくバインドできる。デフォルトバインディングをもつキーマップは、明示的にnilにバインドされるイベント(以下参照)を除き、より低い優先度にあるすべてのキーマップをマスクする。

char-table

キーマップのある要素が文字テーブル(char-table)の場合、それは修飾ビットなしのすべての文字イベントにたいするバインディングを保持するとみなされる。 If an element of a keymap is a it counts as holding bindings for all character events with no modifier bits (see modifier bits): 要素nは、コードnの文字にたいするバインディングである。これは多量のバインディングを記録するための、コンパクトな方法である。そのような文字テーブルのキーマップは、fullキーマップ(full keymap: 完全なキーマップ)と呼ばれる。それにたいし他のキーマップはsparseキーマップ(sparse keymaps: 疎なキーマップ)と呼ばれる。

string

キーにたいするバインディングを指定する要素は別として、キーマップは要素として文字列ももつことができる。これはoverallプロンプト文字列(overall prompt string: 全般的なプロンプト文字列)と呼ばれ、メニューとしてキーマップを使用することを可能にする。Defining Menusを参照のこと。

(keymap …)

キーマップのある要素それ自身がキーマップの場合、それは外側のキーマップ内でこれが内側のキーマップとしてinline指定されているかのようにみなされる。これはmake-composed-keymap内で行なわれるような多重継承にたいして使用される。

バインディングがnilの場合、それは定義の構成要素ではありませんが、デフォルトバインディングや親キーマップ内のバインディングに優先されます。一方、nilのバインディングは、より低い優先度のキーマップをオーバーライドしませんしたがって、ローカルマップでnilのバインディングが与えられた場合、Emacsはグローバルマップのバインディングを使用します。

キーマップはメタ文字にたいするバインディングを直接記録しません。かわりに、メタ文字は1文字目がESC(または何であれmeta-prefix-charのカレント値)の、2文字のキーシーケンスをルックアップするものとみなされます。したがって、キーM-aは内部的にESC aで表され、そのグローバルバインディングは、esc-map内のaにたいするスロットで見つけることができます(Prefix Keysを参照)。

この変換は文字にたいしてのみ適用され、ファンクションキーや他の入力イベントには適用されないので、M-endESC endと何も関係ありません。

以下に例としてLispモードにたいするローカルキーマップ(sparseキーマップ)を挙げます。以下ではDELC-c C-zC-M-qC-M-xにたいするバインディングを定義しています(実際の値はメニューバインディングも含みますが、簡潔にするためここでは省略しています)。

lisp-mode-map
⇒
(keymap
 (3 keymap
    ;; C-c C-z
    (26 . run-lisp))
 (27 keymap
     ;; C-M-xESC C-xとして扱われる
     (24 . lisp-send-defun))
 ;; この部分はlisp-mode-shared-mapから継承
 keymap
 ;; DEL
 (127 . backward-delete-char-untabify)
 (27 keymap
     ;; C-M-qESC C-qとして扱われる
     (17 . indent-sexp)))
Function: keymapp object

この関数は、objectがキーマップならt、それ以外はnilをリターンする。より正確には、この関数はリストにたいしてそのCARkeymapか、あるいはシンボルにたいしてその関数定義がkeymappかをテストする。

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