「Ctrl + h」を選択したときにxtermがバックスペースを送信するのをどのように停止しますか?

「Ctrl + h」を選択したときにxtermがバックスペースを送信するのをどのように停止しますか?

xtermがCtrl + hをバックスペースに変換するのをやめたいのですが。私はこのキーの組み合わせを別の目的に使用しますが、ターミナルはCtrl + hをつかみ、毎回バックスペースを送信します。この機能を無効にするにはどうすればよいですか?

これは、Ctrl + hを送信するバックスペースを無効にするための他の投稿とは異なることに注意してください。私は反対の状況を扱っています。

注:必要に応じてUbuntu 22.04を使用してください。

答え1

バックスペースキーには、端末で2つの一般的な動作があります。 1つは、バイト0x08(ASCIIBSまたはbackspace一般的にマークされている)を生成することです^H。もう 1 つは、バイト 0x7F (DELまたはdelete、または、一般的に で表される^?) を生成することです。

どちらを選ぶべきかについての一般的な合意はまだ行われていないようです。私のもの印象これは^?比較的一般的です。実際、このオプションを使用すると、バックスペースキーとCtrl + Hキーを区別できます。他の選択肢については同じでなければなりません。したがって、2つを区別することが目標なので、に投票する必要があります^?

Ubuntuではこれが私の基本的な動作ですxterm。アップストリームxtermであり、terminfoデフォルトでに設定されているようですが、^HDebian(およびUbuntu)にはこれを^?。なぜこの動作が現れるのかよくわかりません^H(この動作が見えたら)。たぶんxterm手動でインストールしたかもしれません。あるいは、xtermが作成されたが使用^?していたアプリケーションが同じことを行うことにしたかもしれません^H

3つの主要コンポーネントは互いに一貫している必要があります。

一つは、端末エミュレータの実際の動作です。これを確認するには、コマンドを実行しshowkey -aてバックスペースをクリックします。報告されたら、^H端末の動作をエクスポートするように変更する必要があります^?

もう1つは、行がベーキングモードになっているときにカーネルが使用する行ルール設定です(たとえば、印刷または印刷ではなくcatバックスペースキーを実行して通常どおりに機能すると予想される場合)。およびクエリを介して値をクエリするか、またはを介して設定できます。^H^?stty -aerase = ...stty erase '^?'stty erase '^H'

3番目はterminfo定義です。 Runinfocmp | grep kbsの値は、残りのすべての値と同じか一致するkbs必要があります(つまり、これが私たちが望むものです)。そうでない場合は、terminfoを調べてその定義を変更する方法、またはTERMの別の値を選択する方法を確認する必要があります。これが正しく設定されていない場合は、どのような結果が出るのかわかりません。バックスペースを押したときにncursesアプリケーションのテキスト入力フィールドが正しく機能しない可能性があるとします。^?^H^?

上記の3つの項目はどの順序で設定する必要がありますか?ここには明確な答えはありません。いくつかの効果的な解決策があります。特定の方法で動作するように端末エミュレータを設定したり、一部の端末では自動的に一致するようにプロパティを設定したりすることがありますstty。または、まずプロパティを設定してから、指示どおりに実行するようにstty端末を設定することもできます。 terminfoで説明されているアクションに基づいてsttyアクションを設定することもできます。xtermの場合は、マンページxtermを参照してbackarrowKeyIsErase可能性を調査し、使用する項目を選択してください。残念ながら、私はこれを行う方法を正確に伝える正確な詳細に慣れていません。主にUbuntuはデフォルトで^?一貫した動作を実行するため、これを操作する必要はありません。

使用するためにこれら3つの場所を一貫して設定した場合^?(1.確認された端末の実際の動作showkey -a、2.設定、3.stty現在の状況に関する確認された用語情報の説明を確認する)、ほとんどのアプリケーションは正常に実行する必要があります。 Ctrl + H(バイト0x08)とバックスペースキー(バイト0x7F)を区別できます。特定のアプリケーションでまだそうでない場合は、その特定のアプリケーションのドキュメントと設定を検討する必要があります。$TERMinfocmp

sshリモートホストに接続する場合は、sttyログイン後に設定が正しいこと、リモートterminfoデータベースが期待どおりに機能していることを確認する必要があります。

関連情報