通过打印字符清除屏幕?

Wys*_*ard 10 terminal scheme ascii

我正在使用chez-scheme,我找不到完全清除屏幕的方法.(如果有人知道比打印更好的方式我也会对此感兴趣,但这不是我的问题)

从我可以找到通过^ L(control-L)清除屏幕或给出clear命令(至少在bash中)相当于输出ASCII字符12 : Form feed. 但是,打印这没什么.如果我使用(display (integer->char 12))它只打印一个newline.编码这个角色的另一种方法是\f(类似于\nfor newline),但是在Python print("\f")和Scheme (display "\f")中只是一个newline.

我对ASCII 12的含义的理解是错误的,还是缺乏实现?

有没有什么办法来清除应该跨语言工作的屏幕,类似于\n一个newline

Tho*_*key 31

如果要清除屏幕,请在"ANSI"序列中清除printf

\033[2J
Run Code Online (Sandbox Code Playgroud)

清除整个屏幕,例如,

printf '\033[2J'
Run Code Online (Sandbox Code Playgroud)

命令行clear程序使用它,同时将光标移动到"home"位置,再次是"ANSI"序列:

\033[H
Run Code Online (Sandbox Code Playgroud)

该程序从终端数据库获取信息.例如,for TERM=vt100,它可能会看到这个(使用\Eas \033):

clear=\E[H\E[J$<50>
Run Code Online (Sandbox Code Playgroud)

($<50>表示真正的VT100所需的填充).你可能会注意到2这个字符串中没有.这是因为光标首先移动到原位(左上)位置,并且2(整个屏幕)不是必需的.从字符串中消除使VT100s 更快一点.

另一方面,如果您只想重置终端,可以使用VT100风格RIS:

\033c
Run Code Online (Sandbox Code Playgroud)

但这有副作用,除了不在ECMA-48之外.这些错误报告对副作用\033c:

进一步阅读:

CSI Ps J  Erase in Display (ED).
            Ps = 0  -> Erase Below (default).
            Ps = 1  -> Erase Above.
            Ps = 2  -> Erase All.
            Ps = 3  -> Erase Saved Lines (xterm).


and*_*lrc 5

您可以打印\033c重置终端:

petite -q <<< '(display "\033c")'
Run Code Online (Sandbox Code Playgroud)

\033是逃避,c是文字c.

我无法向您提供有关支持广泛程度的任何信息.

  • 您需要测试的不是不同的 shell,而是不同的终端。shell 没有解释终端指令的作用。 (2认同)