Существует два вида ввода, которые вы можете получить с клавиатуры: обычные клавиши и функциональные клавиши. Обычные клавиши соответствуют (возможно, измененным) символам; события, которые они генерируют, представлены в Lisp как символы. Тип события символьного события — это сам символ (целое число), который может иметь установленные некоторые биты модификатора; см. Классификация событий.
Символьное событие ввода состоит из базового кода от 0 до 524287, плюс любой или все эти биты модификатора:
Бит 2**27 в коде символа указывает на символ, набранный с зажатой клавишей meta.
Бит 2**26 в коде символа указывает на не-ASCII символ управления.
ASCII символы управления, такие как C-a, имеют свои специальные базовые коды, поэтому Emacs не нуждается в специальном бите для их обозначения. Таким образом, код для C-a — это просто 1.
Но если вы вводите комбинацию управления, не входящую в ASCII, например, % с клавишей control, числовое значение, которое вы получаете, — это код для % плюс 2**26 (при условии, что терминал поддерживает не-ASCII символы управления), то есть с установленным 27-м битом.
Бит 2**25 (26-й бит) в коде символьного события указывает на ASCII символ управления, набранный с зажатой клавишей shift.
Для букв сам базовый код указывает на заглавную или строчную букву; для цифр и знаков препинания клавиша shift выбирает совершенно другой символ с другим базовым кодом. Чтобы по возможности оставаться в пределах набора ASCII символов, Emacs избегает использования бита 2**25 для этих символьных событий.
Однако ASCII не предоставляет способа отличить C-A от C-a, поэтому Emacs использует бит 2**25 в C-A и не использует его в C-a.
Бит 2**24 в коде символьного события указывает на символ, набранный с зажатой клавишей hyper.
Бит 2**23 в коде символьного события указывает на символ, набранный с зажатой клавишей super.
Бит 2**22 в коде символьного события указывает на символ, набранный с зажатой клавишей alt. (Клавиша с меткой Alt на большинстве клавиатур на самом деле обрабатывается как клавиша meta, а не как эта.)
Лучше избегать упоминания конкретных номеров битов в вашей программе. Чтобы
проверить биты модификатора символа, используйте функцию
event-modifiers (см. Классификация
событий). При создании привязок клавиш с помощью keymap-set
вы указываете эти события, используя строки вида ‘C-H-x’
(для «control hyper x») (см. Изменение
привязок клавиш).