Карта клавиш — это структура данных Lisp, которая определяет привязки клавиш для различных последовательностей клавиш.
Одна карта клавиш напрямую определяет значения для отдельных событий. Когда последовательность клавиш состоит из одного события, ее привязка в карте клавиш — это определение этой карты клавиш для данного события. Привязка более длинной последовательности клавиш находится путем итеративного процесса: сначала найти определение первого события (которое само должно быть картой клавиш); затем найти определение второго события в этой карте клавиш и так далее, пока не будут обработаны все события в последовательности клавиш.
Если привязка последовательности клавиш является картой клавиш, мы называем эту
последовательность префиксной клавишей. В противном случае мы называем ее
полной клавишей (потому что к ней не может быть добавлены другие
события). Если привязка равна nil, мы называем клавишу
неопределенной. Примеры префиксных клавиш: C-c,
C-x и C-x 4. Примеры определенных полных
клавиш: X, RET и C-x 4 C-f.
Примеры неопределенных полных клавиш: C-x C-g и C-c 3.
См. Префиксные клавиши для получения более
подробной информации.
Правило поиска привязки последовательности клавиш предполагает, что промежуточные привязки (найденные для событий до последнего) являются картами клавиш; если это не так, то последовательность событий не образует единого блока — это не действительно одна последовательность клавиш. Другими словами, удаление одного или более событий с конца любой допустимой последовательности клавиш всегда должно давать префиксную клавишу. Например, C-f C-n не является последовательностью клавиш; C-f не является префиксной клавишей, поэтому более длинная последовательность, начинающаяся с C-f, не может быть последовательностью клавиш.
Набор возможных многособытийных последовательностей клавиш зависит от привязок префиксных клавиш; поэтому он может отличаться для разных карт клавиш и может меняться при изменении привязок. Однако однособытийная последовательность всегда является последовательностью клавиш, потому что она не зависит от каких-либо префиксных клавиш для своей корректности.
В любой момент времени несколько основных карт клавиш являются активными — то есть используются для поиска привязок клавиш. Это глобальная карта, которая используется во всех буферах; локальная карта клавиш, которая обычно связана с определенным основным режимом; и ноль или более карт клавиш второстепенного режима, которые принадлежат текущим включенным второстепенным режимам. (Не все второстепенные режимы имеют карты клавиш.) Привязки локальной карты клавиш перекрывают (т.е. имеют приоритет над) соответствующими глобальными привязками. Карты клавиш второстепенного режима перекрывают как локальные, так и глобальные карты клавиш. См. Активные карты клавиш для получения подробной информации.