VT102シーケンスと、ncursesなどのライブラリがどのように機能するかについて頭を悩ませようとしています。
例を挙げると、Emacsを開くと、ターミナルウィンドウがいっぱいになります。をC-x C-c押すと、プログラムが終了し、ターミナルウィンドウはemacsを起動する前とまったく同じように見えます(つまり、カーソルの上の行は、emacs
emacsがレンダリングしたものではなく、zsh履歴のコマンドを示しています)。
一種の「HelloWorld」として、開いてから、ターミナルにある行と同じ数の行(空白行、背景色)を/dev/tty
書き込む小さなルビースクリプトを作成しました。\x1B[48;597m\n
その後、プログラムは5秒間スリープし、明るいオレンジ色の画面を一瞬見つめています。次に、それが終了し、zshプロンプトが表示されたままになり、その上に53行の明るいオレンジが表示されます。
2つの質問:
- ターミナルウィンドウを色で塗りつぶす正しい方法は、背景色で空白行を書くことですか?
- VT102シーケンスを/dev/ ttyに送信して、画面を完全にクリアするにはどうすればよいですか?
送信することはできます\x1B[2J
が、これはコマンドを実行したときと同じことをclear
行い、実際には、カーソルを空白のウィンドウの一番上に置くまで、カーソルをどこにでも置いたままにするのではなく、すべてのコンテンツをターミナルウィンドウの上方に移動します。当然のことながら、私のプログラムが画面に大量の空白行を書き込まなかった場合です。
PS:誰もが実際にサブスクライブする可能性が高い、ここで使用するタグがわかりません。