Emacs global-Set-Taste, um C-TAB
-
06-09-2019 - |
Frage
Ich versuche, einen Schlüssel-Bindung an Strg + TAB in Emacs zu setzen. Ich benutzte den folgenden Aufruf:
(global-set-key (read-kbd-macro "C-TAB") 'my-func)
Jedes Mal, wenn ich es, erhalte ich ein
<C-tab> is undefined
Fehlermeldung. Der Versuch, die Bindung an „C-Register“ führt zu einer Fehlermeldung zu setzen.
Wie kann ich meine Bindung an C-TAB?
Lösung
(global-set-key [C-tab] 'my-func)
Andere Tipps
Im Gegensatz zu anderen vorgeschlagen haben, ist es eine gute Idee, kbd
(oder read-kbd-macro
die im Grunde dasselbe ist) zu verwenden, falls Sie jemals die gleichen Konfigurationsdateien in anderen Versionen von Emacs verwenden mögen; kbd
arbeitet über mehrere Versionen von Emacs und XEmacs, wo die interne Darstellung von Tastenfolgen unterschiedlich sind.
(global-set-key (kbd "<C-tab>") 'my-func)
Das Eingabeformat von read-kbd-macro
verwendet wird, in der docstring von edmacro-mode
dokumentiert:
Die speziellen Wörter RET, SPC, TAB, DEL, LFD, ESC und NUL vertreten spezielles Steuerzeichen. Die Worte müssen in Großbuchstaben geschrieben werden.
Ein Wort in spitzen Klammern, z.B.
, oder , darstellt eine Funktionstaste. (Beachten Sie, dass in der Standardkonfiguration, die Funktionstaste und die Steuertaste RET sind synonym.) Sie können spitze Klammern auf den Worte RET, SPC, usw. verwenden, aber sie werden dort nicht erforderlich.
Das ist etwas leider geschrieben; die TAB bezeichnet im ersten Aufzählungspunkt ist das ASCII-Zeichen für TAB, und das Hinzufügen des Steuer Modifikator macht etwas unsinnig es. Wenn Sie bei gedrückter Ctrl-Tab drücken, Emacs sieht es (über Ihr Windowing-System, es wird nicht in einem Text-Terminal arbeiten). Als <tab>
mit Control Modifikator, die Sie als C-<tab>
oder <C-tab>
darstellen
Es ist, weil Sie read-kbd-macro
falsch verwenden. Wenn Sie sehen, was auf eine Taste gebunden ist:
C-h k C-TAB
Emacs sagt Ihnen:
<C-tab> is undefined.
Sie müssen die <> in Ihrem Aufruf von read-kbd-macro
aufzunehmen.
(global-set-key (read-kbd-macro "<C-tab>") 'my-func)
Und ich weiß nicht, wie <C-TAB>
zu erzeugen, aber es ist nicht die gleiche wie <C-tab>
.
(equal (kbd "<C-TAB>") (kbd "<C-tab>"))
->
nil
Beachten Sie, dass Sie auch global-set-key
interaktiv aufrufen können. Sie können dann den richtigen Bindung Befehl mit repeat-complex-command
sehen (siehe auch KeybindingGuide ):
-
M-x: global-set-key
- Geben Sie die Tastenkombination Sie wollen
-
Mit
C-x ESC ESC
(repeat-complex-command
) den apropiate Befehl zu sehen. In Ihrem Fall erhalte ich:(global-set-key (quote [C-tab]) (quote my-func))
Statt read-kbd-macro
zu verwenden, versuchen, die mehr Klar Syntax?
;(global-set-key [(control tab)] 'my-func)
Vielleicht ist die schlichteren Syntax wird einen Unterschied machen?
Mehr read-kbd-macro und global-set-Taste .
In der Emacs-Referenzhandbuch lispelt, Abschnitt 21.1 "Tastenfolgen", die sie verweisen mit \ t der Tab-Taste darzustellen.
die Syntax in dem Lisp-Referenzhandbuch gezeigt verwenden, würde ich den folgenden Befehl verwenden:
(global-set-key (kbd "C-\t") 'my-func)