我最近发现了Ada编程语言,但问题也存在于C编程语言中.换页符不能按预期工作.
阿达示例:
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
begin
New_Page;
end Main;
Run Code Online (Sandbox Code Playgroud)
在C中相同:
#include <stdio.h>
int main (void) {
printf ("\f");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
两者都只导致XTerm以及Linux控制台(都使用zsh)的新行.他们应该清除屏幕而不是Ctrl-L.
当被召唤时
# ./main | cat -A
Run Code Online (Sandbox Code Playgroud)
我得到了
^L
Run Code Online (Sandbox Code Playgroud)
但如果我输入一个
# cat -A
Run Code Online (Sandbox Code Playgroud)
并键入a
Ctrl-L
Run Code Online (Sandbox Code Playgroud)
我得到了
^L
Run Code Online (Sandbox Code Playgroud)
太.
有谁知道如何使换页符作为Ctrl-L工作?
谢谢你的帮助!
根据这篇文章,清除屏幕的正确方法是printf("\033[2J");(假设您的终端支持ANSI转义序列并且与VT100兼容).我可以确认这适用于使用GNOME终端的Linux Mint,以及使用xterm和PuTTY的Windows.
^L清除屏幕看起来不像便携式约定.例如,在带有POSIX shell的HP-UX上,传递^L给shell不会执行任何操作.这似乎更像是一种bash事件.
打印\f将使用某些终端清除屏幕,但不清除其他终端.例如,从Windows登录到Red Hat主机,我可以printf("\f");在PuTTY中清除屏幕但不在xterm中清除(在后一种情况下我得到一个空行).