この問題は私のものから来ています。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)で始まります。