23.8 Поиск в активных клавиатурных картах

Ниже приводится псевдо-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 заменяет входные последовательности клавиш значением переменной или строкой и перезапускает поиск в активных клавиатурных картах. См. Поиск клавиш.

Найденная команда также может быть переназначена. См. Переназначение команд.