私のEmacsキーバインディングの1つは、C-'
GUIでうまく機能することです。ただし、端末では認識されません。端末に送信された実際の文字を見つけて、C-'
それをemacs設定にマップする必要があることを知っています。
次の提案に従ってくださいBashでショートカットを再マップするためのターミナルキーコードのリストはどこにありますか?、sed -n l
私に返されるのは終わりがなくても空行です$
。端末がC-'
シーケンスをまったく認識しないのでしょうか?
答え1
端末はキーではなくバイトを送信します。Ctrl+などのキーコードは'一連のバイトでエンコードする必要があります。ほとんどのキーとコードには、修飾子がないか、またはのみ印刷可能な文字以外の対応する文字がなく、代わりにエスケープ文字(バイト値が27の文字)のエスケープシーケンスとして送信されます。これは、次の方法で作成されたEmacs文字でShift使用できます。\e
文字列から)。しかし、多くのキーコードには従来の標準エスケープシーケンスがなく、多くの端末はこれらのキーコードを送信しないか、修飾子に関する情報を削除します(Ctrl文字で+のみ送信)。''
一部の端末では、各キーとコードのエスケープシーケンスを設定できます。端末アプリケーションではキーボード設定でこれを行うことができます。。
Ctrl+の場合または次を'選択します。これは、libtermkeyスキームとxtermスキームという2つの新しい標準です。バラより\033[39;5~
\033[27;5;39~
端末使用時のキーバインディングの問題より多くの情報を知りたいです。
Emacsは次のようにエスケープシーケンスを内部キー表現に変換します。input-decode-map
またはlocal-function-key-map
(またはfunction-key-map
Emacs 23より前)。次のいずれかを初期化ファイルに入れます。
(define-key input-decode-map "\033[39;5~" [(control ?\')])
(define-key input-decode-map "\033[27;5;39~" [(control ?\')])
答え2
私はusingを試み、showkey
これがc-'
using aloneと同じであることがわかりました'
。上記の回答を読んで試した後、キーボードのほぼすべてのキーをテストしたところ、ほとんどのキーがコントロールキーをshowkey
押し^key
たときに出力があることがわかりました^C
。を押しているが、c-c
を押しても影響を受けないキーがいくつかありますc-
。たとえば、'
影響を受けないだけでなく、押した,
とき.
にドットがドットをc-
印刷せず、何もしないので、バインディングではないようです。通常のキーを押すのと同じ'
ことはありません!しかし、X
「おそらく」がそれを認識しているので、なぜ機能するのか説明できません。
キーを使ってみてください。showkey --ascii
この回答が役に立つことを願っています。