我最近发现了Ada编程语言,但问题也存在于C编程语言中。换页符不能按预期工作。
Ada示例:
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工作?
感谢您的帮助!
答案 0 :(得分:5)
根据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中不清除(在后一种情况下我得到一个空行)。
答案 1 :(得分:2)
我试图编辑@Nobilis的答案来添加Ada版本,但我认为我的编辑在屏幕被清除时丢失了,所以这是另一次尝试:
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
begin
Put (ASCII.ESC & "[2J");
end Main;
在较大的程序中,您可能需要使用“Flush”进行跟踪;调用,因为上面的内容可以被I / O包缓冲,这可能不会意识到这是一个特殊的终端命令。 (与C相同,我认为:fflush(stdout);
。)