web-dev-qa-db-ja.com

文字を印刷して画面をクリアしますか?

Chez-schemeを使用していますが、画面を完全にクリアする方法が見つかりません。 (誰かが印刷よりも良い方法を知っているなら、私もそれに興味がありますが、ここでは私の質問ではありません)

^ L(control-L)またはclearコマンド(少なくともbashで)を使用して画面をクリアすることは、ASCII文字12:Form feedを出力することと同じです。 。ただし、これを印刷しても何も起こりません。(display (integer->char 12))を使用すると、newlineが印刷されます。この文字をエンコードする別の方法は、\fnewline\nに類似)ですが、Python print("\f")およびSchemeの(display "\f")は単なるnewlineです。

ASCII 12の意味の私の理解は間違っていますか、それとも実装が不足していますか?

newline\nに類似した、言語間で動作するはずの画面をクリアする方法はありますか?

12
Lara

画面をclearしたい場合は、printfの「ANSI」シーケンス

\033[2J

画面全体をクリアします。

printf '\033[2J'

コマンドライン clear プログラムはこれを使用し、カーソルを「ホーム」位置に移動します。これも「ANSI」シーケンスです。

\033[H

プログラムは、端末データベースから情報を取得します。たとえば、 TERM=vt100 の場合、次のように表示されます(\E\033として使用):

clear=\E[H\E[J$<50>

$<50>は、実際のVT100に必要なpaddingを示します)。この文字列には2がないことに気付くでしょう。これは、カーソルがfirstがホーム(左上)位置に移動し、2(画面全体)が不要になるためです。それを文字列から削除すると、VT100は少し速くなりました。

一方、単に端末をresetしたい場合は、- VT100スタイルRIS

\033c

しかし、ECMA-48にないことに加えて、それには副作用があります。これらのバグレポートは、\033c副作用に関するものでした。

参考文献:

 CSI Ps J Erase in Display(ED)。
 Ps = 0-> Erase Below(default)。
 Ps = 1-> Erase Above。
 Ps = 2->すべてを消去。
 Ps = 3->保存された行を消去(xterm)。
30
Thomas Dickey

印刷できます\033cターミナルをリセットします:

petite -q <<< '(display "\033c")'

\033はエスケープで、cはリテラルcです。

これがどの程度広くサポートされているかについての情報はお伝えできません。

5
andlrc