Next: アクティブなキーマップの制御, Previous: アクティブなキーマップ, Up: キーマップ [Contents][Index]
以下はEmacsがアクティブなキーマップを検索する方法を示す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
(アクティブなキーマップの制御を参照)をセットすることによって機能する点に注意してください。
上記の処理概要ではキーシーケンスがマウスイベント(マウスイベントを参照)で始まる場合には、ポイント位置のかわりにそのイベント位置、カレントバッファーのかわりにそのイベントのバッファーが使用されます。これは特にプロパティkeymap
とlocal-map
をルックアップする方法に影響を与えます。display
、before-string
、after-string
プロパティ(特殊な意味をもつプロパティを参照)が埋め込まれていてkeymap
かlocal-map
プロパティが非nil
の文字列上でマウスイベントが発生すると、それは基調となるバッファーテキストの対応するプロパティをオーバーライドします(バッファーテキストにより指定されたプロパティは無視される)。
アクティブなキーマップの1つでキーバインディングが見つかって、そのバインディングがコマンドなら検索は終了してそのコマンドが実行されます。しかしそのバインディングが値をもつ変数か文字列なら、Emacsは入力キーシーケンスをその変数の値か文字列で置き換えて、アクティブなキーマップの検索を再開します。 キーの照合を参照してください。
最終的に見つかったコマンドもリマップされるかもしれません。コマンドのリマップを参照してください。