6
  1. 当我在终端上调整大小时,它会保持全屏显示。我想,有某种方法可以找出终端的屏幕尺寸。如何在 VT100 中做到这一点?

  2. 使用 ,当我列出文件夹时,它以蓝色显示文件夹。(或者说不同的颜色)但是,如果您将输出保存到文本文件( ls > out.txt )中,您将看不到任何 ANSI 代码,而是纯文本。但是,如果您尝试 (vi > out.txt),您将看到 ANSI 代码。这怎么知道?

谢谢

4

1 回答 1

7

自动调整屏幕大小的程序(例如vi)正在响应SIGWINCH信号,并使用系统调用来获取系统关于屏幕大小的信息。参见例如Get width/height of a terminal window in c++? . 顺便说一句,虽然它被广泛实施,但它似乎没有记录在 POSIX 中signal.h

在不考虑SIGWINCH的情况下,程序可以终端询问其屏幕尺寸。resize程序通过将终端控制序列发送到

  • 将光标移动到右下角(实际上,移动到行/列 999/999,这已经足够好了),并且
  • 询问终端光标的真正位置。

ls将嵌入其输出中的 ANSI 控制序列和(和其他程序)的行为vi取决于程序的设计。他们可能会使用该函数检测到其输出重定向到文件isatty,并根据输出是到终端还是到文件执行不同的操作。

于 2015-08-08T14:20:18.230 回答