答え1
ここで注目すべき重要な点は質問のラベルです。この動作は、GNOME端末とlibvteに構築された他の端末エミュレータにのみ適用されます。 Xterm、Unicode RXVT、Linuxカーネルに組み込まれているターミナルエミュレータ、またはFreeBSDコンソールではこれを見ることはできません。
一般的に起こることはこれです。
- この
clear
コマンドはterminfo / termcapを表示し、適切な制御シーケンスを発行します。- terminfo / termcapエントリに
E3
この機能がある場合は、最初に記録されます。これはスクロールバックバッファをクリアする制御シーケンスを発行します。これとその背後に隠された歴史については、後で詳しく説明します。clear
Dickeyはこのコマンドのncursesのマニュアルページを使用します。。 - 次に、
clear
この機能を使用して表示される画面を消去します。
- terminfo / termcapエントリに
- terminfo / termcapエントリの制御順序は、端末の種類によって決まります。ただし、画面を消去するためにFormFeedを使用する端末を除いて(最近ではほとんど発生しません)(DEC VTおよびそのようなプログラムではこれを行いません)、通常の古いECMA-48制御シーケンスまたはその拡張です。いくつかの例:
putty
入り口E3=\E[3J
Xterm拡張制御シーケンスを定義します。- NetBSDコンソール
pcvtxx
エントリclear=\E[H\E[J
多くの定義の1つであるか、これに似ています。これは2つの一般的なECMA-48制御シーケンスです。
- 端末エミュレータは制御順序に従って動作します。 ECMA-48とXterm拡張の定義によると:
- CSI
H
(CUP) カーソルを返します。 - CSI
0
J
(ED 0) または CSI は、J
現在のカーソル位置から画面の終わりまで削除されます。 - CSI
2
J
(ED 2) 全画面を削除します。 - CSI
3
J
(ED 3) スクロールバックバッファをクリアします。
- CSI
GNOME端末の場合:
- 端末タイプは正しい
gnome
ことで、一部の人はそれを誤って設定しましたxterm
。 - 用語情報
gnome
項目この機能は定義されておらE3
ず、多くのシステムでそのまま残ります! - このアイテムxterm
はまだ削除されていないため存在しません。Dickeyの用語について。だから能力の内容だけをclear
書いてください。clear
- これらのterminfo項目の機能内容は、カーソルを
clear
返してから全画面を消去する制御シーケンスです。 - ただし、GNOME端末は全画面消去を正しく実行できません。 より具体的には、ベースライブラリであるlibvteはコードでこれを行いません。その
VteTerminalPrivate::seq_clear_screen()
機能。代わりに、libvteは空白行を含む画面全体をスクロールし、カーソル位置を空白行の最初に移動します。
だからあなたはあなたが見るものを見る。 libvteは指示を受けたときに全画面を消去しません。代わりに、誰かが質問者がここでしたことを正確に実行するまで、表面的に同様のことを行います。つまり、端末ウィンドウをスクロールバックしてスクロールバッファを確認します。もしそうなら、違いは明らかです。
XtermやUnicode RXVTなどの他の端末エミュレータでは、ED 2制御シーケンスは画面を上から下に画面上のすべての位置を消去し、スクロールバックバッファを変更しません。ただし、libvte端末エミュレータは現在の画面をスクロールバックバッファにプッシュし、画面の空白行を追加します。前の画面の内容は削除されず、スクロールバックバッファに移動されます。
コマンドを2回実行すると追加clear
されます。二つ画面に空白行が表示されます。スクロールバックバッファが十分に大きい場合は、次のことができます。まだ元の画面コンテンツを見つけるには、スクロールバックバッファを詳しく見てください。
追加読書
- 文字セットエンコーディングのための制御機能ECMA-48。
- ゲオルギキリロフ(2007-12-30)。Ctrl-L はスクロールバックバッファにスペースを追加します。。 GNOMEのバグ#506438。
- xterm、xterm-color、VT100ベースのLinux端末エミュレータはどのくらいですか?
- 「前」スクロールバックバッファをクリア
- Bash Clearコマンドの奇妙な動作により、スクロールバックバッファが削除されます。
- https://superuser.com/questions/1094599/
- ディッキー、トーマス(2018)。 」XTermと同様のプログラムの既知のバグ:GNOME端末」。 XTerm FAQ。 Invisibleisland.net.
- ディッキー、トーマス(2018)。 」XTermおよび類似アイテムの既知のバグ:VTEアノテーション」。 XTerm FAQ。 Invisibleisland.net.
答え2
端末を消去して出力バッファ全体を破壊するには、次のことをお勧めしますtput reset
。たとえば、以前のプログラムがクラッシュして端末をクリーンでない状態にした場合、端末は確実にクリアされ、ステータスがボーナスに変更されます。また、tput
正しい端末タイプを決定するのに十分スマートである必要があるため、端末がVT100または他のコマンドシーケンスを使用しているかどうかを知る必要はありません。
POSIXで定義されているように、tput reset
すべてのPOSIX互換システムでも機能する必要があります。https://pubs.opengroup.org/onlinepubs/007904975/utilities/tput.html