22.7.1 События клавиатуры

Существует два вида ввода, которые вы можете получить с клавиатуры: обычные клавиши и функциональные клавиши. Обычные клавиши соответствуют (возможно, измененным) символам; события, которые они генерируют, представлены в Lisp как символы. Тип события символьного события — это сам символ (целое число), который может иметь установленные некоторые биты модификатора; см. Классификация событий.

Символьное событие ввода состоит из базового кода от 0 до 524287, плюс любой или все эти биты модификатора:

meta

Бит 2**27 в коде символа указывает на символ, набранный с зажатой клавишей meta.

control

Бит 2**26 в коде символа указывает на не-ASCII символ управления.

ASCII символы управления, такие как C-a, имеют свои специальные базовые коды, поэтому Emacs не нуждается в специальном бите для их обозначения. Таким образом, код для C-a — это просто 1.

Но если вы вводите комбинацию управления, не входящую в ASCII, например, % с клавишей control, числовое значение, которое вы получаете, — это код для % плюс 2**26 (при условии, что терминал поддерживает не-ASCII символы управления), то есть с установленным 27-м битом.

shift

Бит 2**25 (26-й бит) в коде символьного события указывает на ASCII символ управления, набранный с зажатой клавишей shift.

Для букв сам базовый код указывает на заглавную или строчную букву; для цифр и знаков препинания клавиша shift выбирает совершенно другой символ с другим базовым кодом. Чтобы по возможности оставаться в пределах набора ASCII символов, Emacs избегает использования бита 2**25 для этих символьных событий.

Однако ASCII не предоставляет способа отличить C-A от C-a, поэтому Emacs использует бит 2**25 в C-A и не использует его в C-a.

hyper

Бит 2**24 в коде символьного события указывает на символ, набранный с зажатой клавишей hyper.

super

Бит 2**23 в коде символьного события указывает на символ, набранный с зажатой клавишей super.

alt

Бит 2**22 в коде символьного события указывает на символ, набранный с зажатой клавишей alt. (Клавиша с меткой Alt на большинстве клавиатур на самом деле обрабатывается как клавиша meta, а не как эта.)

Лучше избегать упоминания конкретных номеров битов в вашей программе. Чтобы проверить биты модификатора символа, используйте функцию event-modifiers (см. Классификация событий). При создании привязок клавиш с помощью keymap-set вы указываете эти события, используя строки вида ‘C-H-x’ (для «control hyper x») (см. Изменение привязок клавиш).