Next: Creating Keymaps, Previous: Keymap Basics, Up: Keymaps [Contents][Index]
キーマップはそれぞれ、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-endはESC endと何も関係ありません。
以下に例としてLispモードにたいするローカルキーマップ(sparseキーマップ)を挙げます。以下ではDEL、C-c C-z、C-M-q、C-M-xにたいするバインディングを定義しています(実際の値はメニューバインディングも含みますが、簡潔にするためここでは省略しています)。
lisp-mode-map ⇒
(keymap (3 keymap ;; C-c C-z (26 . run-lisp))
(27 keymap
;; C-M-xはESC C-xとして扱われる
(24 . lisp-send-defun))
;; この部分はlisp-mode-shared-map
から継承
keymap
;; DEL
(127 . backward-delete-char-untabify)
(27 keymap
;; C-M-qはESC C-qとして扱われる
(17 . indent-sexp)))
この関数は、objectがキーマップならt
、それ以外はnil
をリターンする。より正確には、この関数はリストにたいしてそのCARがkeymap
か、あるいはシンボルにたいしてその関数定義がkeymapp
かをテストする。
(keymapp '(keymap)) ⇒ t
(fset 'foo '(keymap)) (keymapp 'foo) ⇒ t
(keymapp (current-global-map)) ⇒ t