2

VT102シーケンスと、ncursesなどのライブラリがどのように機能するかについて頭を悩ませようとしています。

例を挙げると、Emacsを開くと、ターミナルウィンドウがいっぱいになります。をC-x C-c押すと、プログラムが終了し、ターミナルウィンドウはemacsを起動する前とまったく同じように見えます(つまり、カーソルの上の行は、emacsemacsがレンダリングしたものではなく、zsh履歴のコマンドを示しています)。

一種の「HelloWorld」として、開いてから、ターミナルにある行と同じ数の行(空白行、背景色)を/dev/tty書き込む小さなルビースクリプトを作成しました。\x1B[48;597m\nその後、プログラムは5秒間スリープし、明るいオレンジ色の画面を一瞬見つめています。次に、それが終了し、zshプロンプトが表示されたままになり、その上に53​​行の明るいオレンジが表示されます。

2つの質問:

  1. ターミナルウィンドウを色で塗りつぶす正しい方法は、背景色で空白行を書くことですか?
  2. VT102シーケンスを/dev/ ttyに送信して、画面を完全にクリアするにはどうすればよいですか?

送信することはできます\x1B[2Jが、これはコマンドを実行したときと同じことをclear行い、実際には、カーソルを空白のウィンドウの一番上に置くまで、カーソルをどこにでも置いたままにするのではなく、すべてのコンテンツをターミナルウィンドウの上方に移動します。当然のことながら、私のプログラムが画面に大量の空白行を書き込まなかった場合です。

PS:誰もが実際にサブスクライブする可能性が高い、ここで使用するタグがわかりません。

4

1 に答える 1

3

ターミナルウィンドウを色で塗りつぶす正しい方法は、背景色で空白行を書くことですか?

いいえ。これを行う正しい方法(BCE *をサポートする端末で)は、背景色を設定してから、EDシーケンス(たとえば^[ [ 2 J)を使用して画面を消去することです。

*:ほとんどの最新の端末は

VT102シーケンスを/dev/ ttyに送信して、画面を完全にクリアするにはどうすればよいですか?

EDを使用します。上記を参照。

実際にやりたいことが代替画面に切り替えることである場合(例でemacsが行っているように)、代替画面はプライベートモード1049によって制御されます。を使用して切り替えることができ、を使用^[ [ ? 1 0 4 9 hして元に戻すことができます^[ [ ? 1 0 4 9 l。ただし、これはxtermの拡張機能であることに注意してください。これは完全に標準ではなく、DECハードウェア端末(VT102など)ではサポートされていませんでした。

于 2012-05-08T18:00:46.497 に答える