端末で実行されているEmacsがCtrl +を「;」と区別できないのはなぜですか?

端末で実行されているEmacsがCtrl +を「;」と区別できないのはなぜですか?

この問題は私のものから来ています。emacs betaに関する以前の質問。簡単に言えば、C-;端末でEmacs機能にバインドしたいのですが、Emacsに到達する前に何かがこのキーをキャプチャしているようです。 Emacsは私がそれを押したと思います;

明らかな容疑者はターミナルエミュレータです。 EmacsのGUIバージョンでは、このキーはC-;正しく機能するため、おそらくウィンドウマネージャを除外できます。また、bashとzshという2つの異なるシェルを試しましたが、再び成功しませんでした。

また何を試すことができますか?

ベストアンサー1

おそらく実際の端末を使用していないので、混乱を招く可能性があります。深刻なコンピュータが数台の直立型冷蔵庫サイズであったとき、端末文字と文字のみを使用してシリアルケーブルを介して中央コンピュータと通信します。これらの文字はASCIIやEBCDICなどの標準化された文字セットの一部ですが、通常はASCIIです。 ASCIIには33個の制御文字があり、端末オペレータは特殊キー(例えば、DEL)を押すか、CTRLキーを押しながら別のキーを押して送信します。中央コンピュータは最後の制御文字だけを見ることができ、その文字を生成するためにどのキーが押されたかを知ることはできません。

xtermなどの端末エミュレーションプログラムはこの動作を模倣します。ターミナルエミュレータは33個のASCII制御文字をすべて送信する方法を提供し、送信されるとEmacsはそれを受け取ります。しかし、Emacsは上記の中央コンピュータと同じです。端末エミュレータで実行すると、実際にどのキーが押されたのかわかりません。したがって、CTRLとセミコロンを押すと、ターミナルエミュレータがそのキーをASCII文字にマップしない限り、Emacsは何も入力されていません。

ターミナルエミュレータは通常、次のマッピングを使用して制御文字を生成します。

キーASCII
------
脱出27
127 削除
バックスペースキー8
CTRL+スペースバー 0
CTRL+@0
Ctrl+A 1
Ctrl+B 2
Ctrl+C 3
など...
CTRL+X 24
CTRL+Y 25
Ctrl+Z 26
CTRL+[ 27
CTRL+\ 28
CTRL+] 29
CTRL+^30
CTRL+_ 31

Ctrl+はリストに表示されません。端末は通常、次に割り当てられた印刷可能文字のみを送信します。CTRL+の場合制御文字にマップされていません。もしそうなら、端末エミュレータは何を送るべきかを教えてくれます。唯一の問題は、Ctrl +を押すときに何をすべきかわからないということです。

これらはすべて端末または端末エミュレーションプログラムを使用している場合にのみ適用されます。 EmacsをWindowsシステム上のネイティブアプリケーションとして実行する場合、Emacsは文字だけでなくキーストロークイベントへのフルアクセス権を持ちます。したがって、EmacsはユーザーがCTRLとセミコロンを同時に押したことを知り、そのキーペアにタスクを割り当てることができます。

端末には、通常、制御文字を含む文字シーケンスを生成するファンクションキーと矢印キーがあります。これらのシーケンスは通常ASCIIコード27(ESCAPE)で始まります。

おすすめ記事