web-dev-qa-db-ja.com

Emacsglobal-set-keyからC-TAB

EmacsでキーバインドをCtrl + TABに設定しようとしています。私は次の呼び出しを使用しました:

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

しかし、私がそれを使うときはいつでも、私は

<C-tab> is undefined

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

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

38
Martin Cote
(global-set-key [C-tab] 'my-func)
43
Nathaniel Flath

他の人が提案しているのとは異なり、他のバージョンのEmacsで同じ構成ファイルを使用したい場合は、kbd(または基本的に同じものであるread-kbd-macro)を使用することをお勧めします。 kbdは、キーシーケンスの内部表現が異なるEmacsとXEmacsのいくつかのバージョンで機能します。

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

read-kbd-macroで使用される入力形式は、edmacro-modeのドキュメント文字列に記載されています。

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

  • <return>、<down>、<f1>などの山かっこで囲まれた単語は、ファンクションキーを表します。 (標準構成では、ファンクションキー<return>とコントロールキーRETは同義語であることに注意してください。)RET、SPCなどの単語に山かっこを使用できますが、必須ではありません。

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

51

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
11
Trey Jackson

global-set-keyをインタラクティブに呼び出すこともできることに注意してください。次に、repeat-complex-commandを使用して正しいバインディングコマンドを確認できます( KeybindingGuide も参照)。

  1. M-x: global-set-key
  2. 必要なキーの組み合わせを入力します
  3. C-x ESC ESCrepeat-complex-command)を使用して、適切なコマンドを確認します。あなたの場合、私は次のようになります。

    (global-set-key (quote [C-tab]) (quote my-func))
    
6
danielpoe

read-kbd-macroを使用する代わりに、よりわかりやすい構文を使用してみてください。

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

おそらく、より単純な構文が違いを生むでしょうか?

read-kbd-macro および global-set-key の詳細。

3
artlung

Gnu emacs LISPリファレンスマニュアルのセクション21.1「キーシーケンス」では、タブキーを表すために\ tを使用して参照しています。

LISPリファレンスマニュアルに示されている構文を使用して、次のコマンドを使用します。

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

1
skm