首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >换页不会清除屏幕

问换页不会清除屏幕
EN

Stack Overflow用户
提问于 2013-07-25 08:59:14
回答 2查看 1.2K关注 0票数 1

我最近发现了Ada编程语言,但这个问题在C编程语言中也存在。换页不能按预期工作。

Ada示例:

代码语言:javascript
复制
with Ada.Text_IO; use Ada.Text_IO;

procedure Main is
begin
  New_Page;
end Main;

在C中也是如此:

代码语言:javascript
复制
#include <stdio.h>

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

这两种方法在XTerm和Linux console (都使用zsh)上只产生一个新行。它们应该像Ctrl-L一样清除屏幕。

调用时

代码语言:javascript
复制
# ./main | cat -A

我得到了一个

代码语言:javascript
复制
^L

但是如果我输入一个

代码语言:javascript
复制
# cat -A

并键入a

代码语言:javascript
复制
Ctrl-L

我得到了一个

代码语言:javascript
复制
^L

也是。

有人知道如何让表单换页作为Ctrl-L组合键工作吗?

谢谢你的帮忙!

EN

回答 2

Stack Overflow用户

发布于 2013-07-25 10:01:39

根据this article的说法,清除屏幕的正确方法是printf("\033[2J"); (假设您的终端支持ANSI转义序列并且是VT100-compatible)。我可以确认这在使用GNOME终端的Linux Mint和使用xterm和PuTTY的Windows上都有效。

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

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

票数 5
EN

Stack Overflow用户

发布于 2013-07-25 23:00:40

我试图编辑@Nobilis的答案来添加一个Ada版本,但我认为当屏幕被清除时,我的编辑丢失了,所以再试一次:

代码语言:javascript
复制
with Ada.Text_IO; use Ada.Text_IO;

procedure Main is
begin
  Put (ASCII.ESC & "[2J");
end Main;

在一个较大的程序中,您可能需要在它后面加上一个"Flush;“调用,因为上面的调用可能会被I/O包缓冲,而I/O包可能不会意识到这是一个特殊的终端命令。(我想在C中也是一样:fflush(stdout);。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17847252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档