Что Emacs описывает ключ для ввода? - PullRequest
2 голосов
/ 07 марта 2020

Я в Emacs '*scratch*, и я пытаюсь

(describe-key "C-x C-f")

, и я возвращаюсь

"C - x SPC C - f is undefined"

Очевидно, он не распознает мою C-x C-f стенографию. Чего это ожидает? Документация

Отображение документации по функции, вызываемой KEY. KEY может быть любой последовательностью клавиш; он может включать в себя события клавиатуры, события мыши и / или события меню. При вызове из программы передайте KEY в виде строки или вектора.

не уточняет, как следует вводить эту строку или вектор. Что мне нужно, чтобы это работало?

Ответы [ 2 ]

2 голосов
/ 07 марта 2020

Вам нужно указать его как (describe-key "\C-x\C-f") или (describe-key (kbd "C-x C-f")).

, если вы позвоните C-h f kbd, вы получите:

(КБД-КЛЮЧИ)

Преобразование KEYS во внутреннее представление ключа Emacs. KEYS должна быть строкой в ​​формате, возвращаемом такими командами, как 'C -hk' ('description-key').

Это тот же формат, который используется для сохранения клавиатурных макросов (см. Edmacro-mode). ').

0 голосов
/ 07 марта 2020

Вам нужно точно указать ключи. "C-x C-f" - это строка, состоящая из заглавной буквы C, да sh, строчных букв x, пробела и т.д. c .: это описание того, что вы нажимаете.

На самом деле вы нажимаете [24 6] вектор из двух символов (символы внутри представлены как целые числа, а 24 и 6 - целые числа, представляющие Control-x и Control-f соответственно). Другой способ описать вектор этих двух символов - это строка, состоящая из двух символов: "\C-x\C-f" - это один из способов, как указывает Алекс Отт в своем ответе; эквивалентно "\x18\x6" использует шестнадцатеричные значения 24 и 6 соответственно; или "\030\006" использует восьмеричные значения.

Но мы бы предпочли использовать описание "C -x C -f", поэтому (как Алекс Отт снова указывает в своем ответе) kbd переводится из описания в фактическую последовательность символов:

(kbd "C-x C-f") --> "^X^F"

, которая на самом деле состоит из двух символов: Control-x и Control-f. Принтер LISP использует представление каретки, чтобы указать их, поэтому он выглядит как четыре символа между кавычками, но это так, как они выглядят: если вы делаете вышеупомянутое в своем буфере *scratch*, поместите курсор на левую кавычку и нажмите стрелку вправо или C-f на них, и вы увидите, что между кавычками есть только два символа.

Все это и многое другое объясняется в руководстве по GNU Emacs Lisp, в Тип символа раздел и его подразделы.

...