Ниже приводится псевдо-Lisp-краткое изложение того, как Emacs ищет в активных клавиатурных картах:
(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-char-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 — это псевдофункции, которые
ищут в одной клавиатурной карте и в списке клавиатурных карт соответственно. Обратите
внимание, что функция set-transient-map работает путем установки
overriding-terminal-local-map (см. Управление активными клавиатурными картами).
В приведенном выше псевдокоде, если последовательность клавиш начинается с события мыши
(см. События мыши), используется позиция этого
события вместо точки, а буфер этого события используется вместо текущего буфера.
В частности, это влияет на то, как извлекаются свойства keymap и
local-map. Если событие мыши происходит на строке, содержащей
display, before-string или after-string
свойство (см. Свойства со специальным значением),
и строка имеет свойство keymap или local-map, отличное
от nil, то это переопределяет соответствующее свойство в базовом
тексте буфера (т.е. игнорируется свойство, указанное в базовом тексте).
Когда привязка клавиш найдена в одной из активных клавиатурных карт, и эта привязка является командой, поиск завершается — выполняется команда. Однако, если привязка является символом со значением или строкой, Emacs заменяет входные последовательности клавиш значением переменной или строкой и перезапускает поиск в активных клавиатурных картах. См. Поиск клавиш.
Найденная команда также может быть переназначена. См. Переназначение команд.