terminal - 通过打印字符来清除屏幕?

标签 terminal scheme ascii

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

根据我的发现,通过 ^L (control-L) 清除屏幕或给出 clear命令(至少在 bash 中)相当于输出 ASCII 字符 12:Form feed .
但是,打印它什么都不做。如果我使用 (display (integer->char 12))它只打印一个 newline .编码此字符的另一种方法是 \f (类似于 \nnewline ),但在 Python 中 print("\f")以及在方案 (display "\f")只是一个 newline .

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

有什么方法可以清除跨语言的屏幕,类似于 \n对于 newline ?

最佳答案

如果要清除屏幕,printf 中的“ANSI”序列

\033[2J

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

命令行 clear 程序使用它,同时将光标移动到“home”位置,再次是“ANSI”序列:
\033[H

程序从终端数据库中获取信息。例如,对于 TERM=vt100 ,它可能会看到这个(使用 \E 作为 \033 ):
clear=\E[H\E[J$<50>

($<50> 表示真正的 VT100 需要填充)。您可能会注意到 2此字符串中不存在。这是因为光标首先移动到起始位置(左上角),而 2 (整个屏幕)不是必需的。从字符串中消除它使 VT100 更快一些。

另一方面,如果您只想 重置 终端,您可以使用VT100-style RIS :
\033c

但这有副作用,除了不在 ECMA-48 中。这些错误报告是针对 \033c 的副作用的。 :
  • Debian Bug report logs - #60377 "reset" broken for dumb terminals
  • Debian Bug report logs - #239205 "reset changes a unicode console to non-unicode"

  • 进一步阅读:
  • Why doesn't the screen clear when I type control/L?
  • XTerm Control Sequences

  • CSI Ps J 显示中的删除 (ED)。
    Ps = 0 -> 删除下方(默认)。
    Ps = 1 -> 删除上面。
    Ps = 2 -> 全部删除。
    Ps = 3 -> 删除已保存的行 (xterm)。
  • ECMA-48: Control Functions for Coded Character Sets
  • 关于terminal - 通过打印字符来清除屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37774983/

    相关文章:

    functional-programming - 有人可以解释一下方案中的这种延续吗?

    c++ - ASCII字符矩形框

    terminal - "which nvm"命令(通过 Homebrew 软件安装的 nvm)不返回路径

    macos - 如何将 osx 中的 GCC 从 xcode 移动到/usr/bin

    java - 使用绝对路径从终端运行 jar 文件

    python - Mysql 与 Django 设置

    scheme - 通过数字列表进行过滤

    list - 将列表放入方案的参数中

    java - 如何保证Gson在toJson()中的输出是ASCII?

    python - ftp.retrbinary() 帮助 python