Ответ 1
(global-set-key [C-tab] 'my-func)
Я пытаюсь установить привязку клавиш к Ctrl + TAB в Emacs. Я использовал следующий вызов:
(global-set-key (read-kbd-macro "C-TAB") 'my-func)
Однако, когда я его использую, я получаю
<C-tab> is undefined
сообщение об ошибке. Попытка установить привязку к "C-tab" приводит к сообщению об ошибке.
Как установить привязку к C-TAB?
(global-set-key [C-tab] 'my-func)
В отличие от других, рекомендуется использовать kbd
(или read-kbd-macro
, что в основном одно и то же), если вы когда-либо захотите использовать те же конфигурационные файлы в других версиях Emacs; kbd
работает в нескольких версиях Emacs и XEmacs, где внутреннее представление ключевых последовательностей отличается.
(global-set-key (kbd "<C-tab>") 'my-func)
Формат ввода, используемый read-kbd-macro
, задокументирован в docstring edmacro-mode
:
Специальные слова RET, SPC, TAB, DEL, LFD, ESC и NUL представляют специальные управляющие символы. Слова должны быть записаны в верхнем регистре.
Слово в угловых скобках, например, <return> , <down> или < f1 > , представляет функциональный ключ. (Обратите внимание, что в стандартной конфигурации функциональная клавиша <return> и управляющий ключ RET являются синонимами.) Вы можете использовать угловые скобки для слов RET, SPC и т.д., Но они там не требуется.
Это написано несколько к сожалению; TAB, упомянутый в первой точке маркера, является символом ASCII для TAB, и добавление модификатора Control делает для него что-то бессмысленное. Когда вы нажимаете Control-Tab, Emacs видит это (через вашу оконную систему, она не будет работать в текстовом терминале) как <tab>
с модификатором Control, который вы можете представить как C-<tab>
или <C-tab>
.
Это потому, что вы неправильно используете read-kbd-macro
. Когда вы видите, что связано с ключом:
C-h k C-TAB
Emacs сообщает вам:
<C-tab> is undefined.
Вам нужно включить < > в ваш вызов read-kbd-macro
.
(global-set-key (read-kbd-macro "<C-tab>") 'my-func)
И я не знаю, как сгенерировать <C-TAB>
, но это не то же самое, что <C-TAB>
.
(equal (kbd "<C-TAB>") (kbd "<C-tab>"))
->
nil
Обратите внимание, что вы также можете вызвать global-set-key
в интерактивном режиме. Затем вы можете увидеть правильную команду привязки с repeat-complex-command
(см. Также KeybindingGuide):
M-x: global-set-key
Используйте C-x ESC ESC
(repeat-complex-command
), чтобы увидеть команду apropiate. В вашем случае я получаю:
(global-set-key (quote [C-tab]) (quote my-func))
Вместо использования read-kbd-macro
попробуйте использовать более простой синтаксис?
;(global-set-key [(control tab)] 'my-func)
Возможно, более простой синтаксис будет иметь значение?
Подробнее о read-kbd-macro и глобальный набор -key.
В справочном руководстве gnu emacs lisp, раздел 21.1 "Последовательности клавиш", они ссылаются с помощью \t для представления клавиши табуляции.
Используя синтаксис, показанный в справочном руководстве lisp, я бы использовал следующую команду:
(global-set-key (kbd "C-\t") 'my-func)