Next: Controlling Active Maps, Previous: Active Keymaps, Up: Keymaps [Contents][Index]
以下は、macsがアクティブなキーマップを検索する方法を示す、Lisp処理概要です:
(or (if overriding-terminal-local-map
(find-in overriding-terminal-local-map))
(if overriding-local-map
(find-in overriding-local-map)
(or (find-in (get-char-property (point) 'keymap))
(find-in-any emulation-mode-map-alists)
(find-in-any minor-mode-overriding-map-alist)
(find-in-any minor-mode-map-alist)
(if (get-text-property (point) 'local-map)
(find-in (get-char-property (point) 'local-map))
(find-in (current-local-map)))))
(find-in (current-global-map)))
ここで、find-inとfind-in-anyはそれぞれ、1つのキーマップとキーマップのalistを検索する仮の関数です。関数set-transient-mapがoverriding-terminal-local-map(Controlling Active Mapsを参照)をセットすることにより機能する点に注意してください。
上記の処理概要では、キーシーケンスがマウスイベント(Mouse Eventsを参照)で始まる場合、ポイント位置のかわりにそのイベント位置、カレントバッファーのかわりにそのイベントのバッファーが使用されます。これは特に、プロパティkeymapおよびlocal-mapをルックアップする方法に影響を与えます。display、before-string、after-stringプロパティ(Special Propertiesを参照)が埋め込まれていて、keymapまたはlocal-mapプロパティが非nilの文字列上でマウスイベントが発生した場合、それは基調となるバッファーテキストの対応するプロパティをオーバーライドします(バッファーテキストにより指定されたプロパティは無視される)。
アクティブなキーマップの1つでキーバインディングが見つかり、そのバインディングがコマンドの場合、検索は終了し、そのコマンドが実行されます。しかし、そのバインディングが値をもつ変数、または文字列の場合、Emacsは入力キーシーケンスをその変数の値、または文字列で置き換えて、アクティブなキーマップの検索を再開します。 Key Lookupを参照してください。
最終的に見つかったコマンドもリマップされるかもしれません。Remapping Commandsを参照してください。