Глобальный набор ключей Emacs для C-TAB - PullRequest
35 голосов
/ 27 мая 2009

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

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

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

<C-tab> is undefined

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

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

Ответы [ 6 ]

49 голосов
/ 27 мая 2009

В отличие от других, было бы неплохо использовать kbd (или read-kbd-macro, что в принципе то же самое) на тот случай, если вы когда-нибудь захотите использовать те же файлы конфигурации в других версиях Emacs; kbd работает в нескольких версиях Emacs и XEmacs, где внутреннее представление последовательностей ключей различно.

(global-set-key (kbd "<C-tab>") 'my-func)

Формат ввода, используемый read-kbd-macro, задокументирован в строке документации edmacro-mode:

  • Специальные слова RET, SPC, TAB, DEL, LFD, ESC и NUL представляют специальные управляющие символы. Слова должны быть написаны в верхнем регистре.

  • Слово в угловых скобках, например, , или , представляет функциональная клавиша. (Обратите внимание, что в стандартной конфигурации функциональная клавиша и клавиша управления RET являются синонимами.) Вы можете использовать угловые скобки для слов RET, SPC и т. Д., Но они там не требуются.

Это написано несколько к сожалению; TAB, упомянутый в первом пункте, является символом ASCII для TAB, и добавление модификатора Control делает с ним что-то бессмысленное. Когда вы нажимаете Control-Tab, Emacs видит его (через вашу оконную систему; он не будет работать в текстовом терминале) как <tab> с модификатором Control, который вы можете представить как C-<tab> или <C-tab>.

42 голосов
/ 27 мая 2009
(global-set-key [C-tab] 'my-func)
11 голосов
/ 27 мая 2009

Это потому, что вы используете 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
6 голосов
/ 28 мая 2009

Обратите внимание, что вы также можете позвонить global-set-key в интерактивном режиме. Затем можно увидеть правильную команду привязки с помощью repeat-complex-command (см. Также KeybindingGuide ):

  1. M-x: global-set-key
  2. Введите нужную комбинацию клавиш
  3. Используйте C-x ESC ESC (repeat-complex-command), чтобы увидеть команду apropiate. В вашем случае я получаю:

    (global-set-key (quote [C-tab]) (quote my-func))
    
3 голосов
/ 27 мая 2009

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

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

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

Подробнее о read-kbd-macro и global-set-key .

1 голос
/ 27 декабря 2016

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

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

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

...