Terminal 通过打印字符清除屏幕?

Terminal 通过打印字符清除屏幕?,terminal,scheme,ascii,Terminal,Scheme,Ascii,我使用的是chez方案,我找不到完全清除屏幕的方法。(如果有人知道比印刷更好的方法,我也会对此感兴趣,但这不是我的问题) 通过^L(control-L)清除屏幕或发出clear命令(至少在bash中)相当于输出ASCII字符12:Form feed。 但是,打印这些内容没有任何作用。如果我使用(display(integer->char 12))它只打印一个换行符。另一种编码此字符的方法是\f(类似于换行符的\n),但在Python打印(“\f”)以及Scheme(display“\f”)中,它

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

通过^L(control-L)清除屏幕或发出
clear
命令(至少在bash中)相当于输出ASCII字符12:
Form feed
。 但是,打印这些内容没有任何作用。如果我使用
(display(integer->char 12))
它只打印一个
换行符。另一种编码此字符的方法是
\f
(类似于
换行符的
\n
),但在Python
打印(“\f”)
以及Scheme
(display“\f”)
中,它只是一个
换行符

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


是否有任何方法可以清除应跨语言工作的屏幕,类似于
换行符的
\n

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

petite -q <<< '(display "\033c")'
petite-q如果要清除屏幕,请在
printf

\033[2J
清除整个屏幕,例如

printf '\033[2J'
命令行程序使用此命令,同时将光标移动到“主”位置,这也是一个“ANSI”序列:

\033[H
程序从终端数据库获取信息。例如,它可能会看到以下内容(使用
\E
作为
\033
):

但这除了不在ECMA-48中之外还有副作用。这些错误报告是针对
\033c
的副作用:

进一步阅读:

CSI Ps J擦除显示(ED)。 Ps=0->删除下面的内容(默认设置)。 Ps=1->删除上面的内容。 Ps=2->全部擦除。 Ps=3->删除保存的行(xterm)。

您的基本理解是正确的,但可用功能取决于方案实施使用的精确输出系统调用以及终端环境等。“终端环境”警告至关重要。环境变量项告诉应用程序正在使用哪个终端;为了表现良好且便于携带,他们应该在termcap/terminfo数据库中查找要执行的操作,以查找该终端类型,而不是硬编码转义序列。033实际上指的是什么?@Darklightus
\033
是转义的八进制转义序列,请参见ascii表以供参考:
man ascii
您需要测试的不是不同的shell,而是不同的终端。shell在解释终端指令方面没有任何作用。有趣。我不熟悉qsh——它是否声称符合POSIX?您使用的是printf吗?基于它,它基于POSIX和X/Open标准
clear=\E[H\E[J$<50>
\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).