2009-05-27 7 views
32

私はEmacsでCtrl + Tabキーバインディングを設定しようとしています。私は、次の呼び出しを使用:EmacsのグローバルセットキーをC-TABに

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

私はそれを使用するたびしかし、私は

<C-tab> is undefined 

エラーメッセージが表示されます。バインディングを "C-tab"に設定しようとすると、エラーメッセージが表示されます。

C-TABにバインディングを設定するにはどうすればよいですか?

答えて

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

ありがとう[]構文がどこに間違っていたのですか –

3

read-kbd-macroの代わりに、より単純な構文を使用してみてください。

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

おそらくより単純な構文が違いを生みますか?

read-kbd-macroglobal-set-keyの詳細については、

+1

を '使用しての大きな利点は、(KBD)'あなたはそのEmacsが戻って同じ構文を使用することができるということですあなたが 'describe-key'を呼び出すと、(Treyの答えによってうまく説明されているように)対処するのが完全に自明になります。 – phils

11

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 
45

示唆している、あなたが今までのEmacsの他のバージョンで同じ設定ファイルを使用したい場合には(基本的に同じものであるかread-kbd-macro)​​を使用するのは良いアイデアです。​​は、キーシーケンスの内部表現が異なるEmacsとXEmacsのいくつかのバージョンで動作します。

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

read-kbd-macroによって使用される入力フォーマットをedmacro-modeのドキュメント文字列に記載されている:

  • 特別な単語RET、SPC、TAB、DEL、LFD、ESC、およびNULは特別 を表します制御文字。単語は大文字で書く必要があります。角括弧内

  • ワード、例えば、<リターン>、ダウン<>、又は< F1>、 ファンクションキーを表します。 (標準設定では ファンクションキー< return>とコントロールキーRETは同義です) RET、SPCなどの単語に山括弧を使用できますが、 は不要です。

これはやや残念ながら書かれています。最初の箇条書きで言及されているTABはTABのASCII文字であり、Control修飾子を追加することはそれに対して無意味なことをする。 Control-Tabを押すと、Emacsはそれを見ることができます(あなたのウィンドウシステムでは、テキスト端末では機能しません)。<tab>とControl修飾子があり、C-<tab>または<C-tab>と表現できます。

+0

テキスト端末のemacsで ''の回避策はありますか?私はserverfaultで尋ねました:http://serverfault.com/questions/81688/problem-with-ctrl-tab-keybinding-in-emacs-in-gnome-terminal – Tom

+0

kbdは何を意味していますか?ありがとう – why

+0

kbdは、http://www.gnu.org/software/emacs/manual/html_node/elisp/Key-Sequences.htmlで文書化されているマクロで、Emacsのドキュメントで使用されているキーバインディング形式を関数が理解できる値に変換するために使用されますグローバルセットキーのようなものである。 –

6

global-set-keyも対話形式で呼び出すことができます。あなたはその後、repeat-complex-commandで正しい結合コマンドを見ることができます(また、KeybindingGuide参照):

  1. M-x: global-set-key
  2. タイプのキーの組み合わせは、あなたはapropiateコマンドを参照してください
  3. 使用C-x ESC ESCrepeat-complex-command)します。あなたのケースでは、私が得る:

    GNU Emacsで
    (global-set-key (quote [C-tab]) (quote my-func)) 
    
0

は、リファレンスマニュアルをLISP、セクション21.1「キー配列」は、彼らがタブキーを表現するために、\ tを使用して参照します。 Lispリファレンスマニュアルに示されている構文を使用して

、私は次のコマンドを使用します。

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