Подтвердить что ты не робот

Emacs - глобальный набор ключей для C-TAB

Я пытаюсь установить привязку клавиш к Ctrl + TAB в Emacs. Я использовал следующий вызов:

(global-set-key (read-kbd-macro "C-TAB") 'my-func)

Однако, когда я его использую, я получаю

<C-tab> is undefined

сообщение об ошибке. Попытка установить привязку к "C-tab" приводит к сообщению об ошибке.

Как установить привязку к C-TAB?

4b9b3361

Ответ 1

(global-set-key [C-tab] 'my-func)

Ответ 2

В отличие от других, рекомендуется использовать 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>.

Ответ 3

Это потому, что вы неправильно используете 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

Ответ 4

Обратите внимание, что вы также можете вызвать 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))
    

Ответ 5

Вместо использования read-kbd-macro попробуйте использовать более простой синтаксис?

;(global-set-key [(control tab)] 'my-func)

Возможно, более простой синтаксис будет иметь значение?

Подробнее о read-kbd-macro и глобальный набор -key.

Ответ 6

В справочном руководстве gnu emacs lisp, раздел 21.1 "Последовательности клавиш", они ссылаются с помощью \t для представления клавиши табуляции.

Используя синтаксис, показанный в справочном руководстве lisp, я бы использовал следующую команду:

(global-set-key (kbd "C-\t") 'my-func)