Chez-schemeを使用していますが、画面を完全にクリアする方法が見つかりません。 (誰かが印刷よりも良い方法を知っているなら、私もそれに興味がありますが、ここでは私の質問ではありません)
^ L(control-L)またはclear
コマンド(少なくともbashで)を使用して画面をクリアすることは、ASCII文字12:Form feed
を出力することと同じです。 。ただし、これを印刷しても何も起こりません。(display (integer->char 12))
を使用すると、newline
が印刷されます。この文字をエンコードする別の方法は、\f
(newline
の\n
に類似)ですが、Python print("\f")
およびSchemeの(display "\f")
は単なるnewline
です。
ASCII 12の意味の私の理解は間違っていますか、それとも実装が不足していますか?
newline
の\n
に類似した、言語間で動作するはずの画面をクリアする方法はありますか?
画面を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)。
印刷できます\033c
ターミナルをリセットします:
petite -q <<< '(display "\033c")'
\033
はエスケープで、c
はリテラルcです。
これがどの程度広くサポートされているかについての情報はお伝えできません。