c - 换页不清除屏幕

标签 c escaping ada

我最近发现了 Ada 编程语言,但是 C 编程语言也存在这个问题。表单提要未按预期工作。

阿达示例:

with Ada.Text_IO; use Ada.Text_IO;

procedure Main is
begin
  New_Page;
end Main;

在 C 中相同:

#include <stdio.h>

int main (void) {
  printf ("\f");
  return 0;
}

两者都只会在 XTerm 和 Linux 控制台(均使用 zsh)上产生一个新行。他们应该像 Ctrl-L 那样清除屏幕。

调用时

# ./main | cat -A

我得到一个

^L

但是如果我输入一个

# cat -A

然后输入一个

Ctrl-L

我得到一个

^L

也是。

有谁知道如何使表单提要像 Ctrl-L 一样工作?

感谢您的帮助!

最佳答案

根据 this article清除屏幕的正确方法是 printf("\033[2J");(前提是您的终端支持 ANSI 转义序列并且与 VT100 兼容)。我可以确认这适用于使用 GNOME 终端的 Linux Mint,以及使用 xterm 和 PuTTY 的 Windows。

^L 清除屏幕看起来不像是可移植的约定。例如,在带有 POSIX shell 的 HP-UX 上,将 ^L 传递给 shell 不会执行任何操作。这看起来更像是 bash 事件。

打印 \f 将清除某些终端的屏幕,但不会清除其他终端。例如,从 Windows 登录到 Red Hat 主机,我可以在 PuTTY 中使用 printf("\f"); 清除屏幕,但在 xterm 中不能(在后一种情况下我得到一个空行)。

关于c - 换页不清除屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17847252/

相关文章:

mysql - MySQL 中不可打印的字符

java - 尝试将冒号字符 (":") 写入属性文件会导致该字符被转义

stream - Ada - 如何显式打包位字段记录类型?

ada - Ada 中的动态调度

c - 二维数组的 sizeof 操作

c - 即使 GCC 优化关闭,是否也有必要使用 "volatile"限定符?

c - 为什么 sizeof 对 %f 的响应不同?

c - 在C中生成两个不同的随机数

c++ - 使用 scanf 读入 std::string

c - 在 linux 内核中设置模块的许可证