2009-05-27 12 views
32

Ich versuche, eine Tastenbindung zu Strg + TAB in Emacs zu setzen. Ich benutzte den folgenden Aufruf:Emacs Global-Set-Key zu C-TAB

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

Jedes Mal, wenn ich es verwenden, erhalte ich eine

<C-tab> is undefined 

Fehlermeldung. Wenn Sie versuchen, die Bindung an "C-tab" festzulegen, wird eine Fehlermeldung angezeigt.

Wie kann ich meine Bindung an C-TAB festlegen?

Antwort

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

danke die [] Syntax war wo ich falsch ging –

3

Verwenden Sie statt der read-kbd-macro die einfachere Syntax?

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

Vielleicht wird die einfachere Syntax einen Unterschied machen?

Mehr auf read-kbd-macro und global-set-key.

+1

Der große Vorteil der Verwendung von '(KBD)' ist, dass Sie die gleiche Syntax, Emacs Renditen verwenden können wenn Sie 'describe-key' aufrufen, was es völlig trivial macht, damit umzugehen (wie Treys Antwort schön zeigt). – phils

11

Es ist, weil Sie read-kbd-macro falsch verwenden. Wenn Sie sehen, was zu einem Schlüssel gebunden ist:

C-h k C-TAB 

Emacs sagen Sie:

<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 das gleiche wie <C-tab>.

(equal (kbd "<C-TAB>") (kbd "<C-tab>")) 
-> 
nil 
45

Anders als andere vorgeschlagen haben, ist es eine gute Idee kbd Sie jemals im Fall (oder read-kbd-macro die im Grunde dasselbe ist) zu verwenden, um die gleichen Konfigurationsdateien in anderen Versionen von Emacs verwenden möchten; kbd funktioniert über mehrere Versionen von Emacs und XEmacs, wobei die interne Darstellung der Schlüsselsequenzen unterschiedlich ist.

  • Die speziellen Wörter RET, SPC, TAB, DEL, LFD, ESC und NUL repräsentieren besondere:

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

    das Eingabeformat von read-kbd-macro verwendet wird, in der docstring von edmacro-mode dokumentiert Steuerzeichen. Die Wörter müssen in Großbuchstaben geschrieben werden.

  • Ein Wort in spitzen Klammern, z.B. < Return>, < down> oder < f1> stellt eine Funktionstaste. (Beachten Sie, dass in der Standardkonfiguration die Funktionstaste < return> und die Steuertaste RET synonym sind.) Sie können spitze Klammern für die Wörter RET, SPC, etc. verwenden, aber sie sind dort nicht erforderlich .

Dies ist etwas leider geschrieben; Der TAB, auf den im ersten Aufzählungspunkt verwiesen wird, ist das ASCII-Zeichen für TAB, und das Hinzufügen des Steuermodifizierers macht etwas unsinniges. Wenn Sie Control-Tab drücken, sieht Emacs (über Ihr Windowssystem; funktioniert nicht in einem Text-Terminal) als <tab> mit einem Control-Modifikator, den Sie als C-<tab> oder <C-tab> darstellen können.

+0

Gibt es eine Umgehung für '' in Emacs in einem Text-Terminal? Ich fragte auf serverfault: http://serverfault.com/questions/81688/problem-with-ctrl-tab-keybinding-in-emacs-in-gnome-terminal – Tom

+0

Was bedeutet kbd? Danke – why

+0

kbd ist ein Makro dokumentiert unter http://www.gnu.org/software/emacs/manual/html_node/elisp/Key-Sequences.html und wird verwendet, um das in der Emacs-Dokumentation verwendete Schlüsselbindungsformat in Werte zu konvertieren, die von Funktionen verstanden werden wie global-set-key. –

6

Beachten Sie, dass Sie auch global-set-key interaktiv aufrufen können. Sie können dann die richtige Bindung Befehl mit repeat-complex-command sehen (siehe auch KeybindingGuide):

  1. M-x: global-set-key
  2. Geben Sie die Tastenkombination Sie wollen
  3. Verwenden 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)) 
    
0

In der Emacs-Referenzhandbuch lispelt, Abschnitt 21.1 "Tastenfolgen", sie \ t Referenz auf die 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)