23.12 Последовательности клавиш

Последовательность клавиш (key sequence), или сокращенно клавиша (key), — это последовательность из одной или более событий ввода, образующих единое целое. События ввода включают символы, функциональные клавиши, действия мыши или системные события, внешние по отношению к Emacs, такие как iconify-frame (см. События ввода). Представление последовательности клавиш в Emacs Lisp — это строка или вектор. Если не указано иное, любая функция Emacs Lisp, принимающая последовательность клавиш в качестве аргумента, может обрабатывать оба представления.

В стровом представлении буквенно-цифровые символы обычно обозначают сами себя; например, "a" представляет a, а "2" представляет 2. События управляющих символов имеют префикс подстроки "\C-", а метасимволы — "\M-"; например, "\C-x" представляет клавишу C-x. Кроме того, события TAB, RET, ESC и DEL представляются соответственно "\t", "\r", "\e" и "\d". Стровое представление полной последовательности клавиш — это конкатенация строковых представлений составляющих событий; таким образом, "\C-xl" представляет последовательность клавиш C-x l.

Последовательности клавиш, содержащие функциональные клавиши, события кнопок мыши, системные события или не-ASCII символы, такие как C-= или H-a, не могут быть представлены в виде строк; они должны быть представлены в виде векторов.

В векторном представлении каждый элемент вектора представляет событие ввода в его форме Lisp. См. События ввода. Например, вектор [?\C-x ?l] представляет последовательность клавиш C-x l.

Примеры последовательностей клавиш, записанных в стровом и векторном представлениях, приведены в Init Rebinding в The GNU Emacs Manual.

Функция: kbd keyseq-text

Эта функция преобразует текст keyseq-text (строковый констант) в последовательность клавиш (строковый или векторный констант). Содержимое keyseq-text должно использовать ту же синтаксическую структуру, что и в буфере, вызываемом командой C-x C-k RET (kmacro-edit-macro); в частности, вы должны заключать имена функциональных клавиш в одинарные кавычки. См. Edit Keyboard Macro в The GNU Emacs Manual.

(kbd "C-x") ⇒ "\C-x"
(kbd "C-x C-f") ⇒ "\C-x\C-f"
(kbd "C-x 4 C-f") ⇒ "\C-x4\C-f"
(kbd "X") ⇒ "X"
(kbd "RET") ⇒ "^M"
(kbd "C-c SPC") ⇒ "\C-c "
(kbd "<f1> SPC") ⇒ [f1 32]
(kbd "C-M-<down>") ⇒ [C-M-down]

Функция kbd очень разрешительна и попытается вернуть что-то осмысленное, даже если используемый синтаксис не соответствует полностью. Чтобы проверить, является ли синтаксис действительно корректным, используйте функцию key-valid-p.