VT100 ANSI 转义序列:获取屏幕大小,条件 ANSI

VT100 ANSI escape sequences: getting screen size, conditional ANSI

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

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

谢谢

自动调整屏幕大小的程序(例如vi)正在响应SIGWINCH信号,并使用系统调用获取系统有关屏幕大小的信息。例如参见 [​​=27=]Get width/height of a terminal window in c++?. By the way, though widely implemented, it does not appear to be documented in POSIX signal.h.

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

来完成此操作
  • 将光标移动到右下角(其实是row/column999/999,这样就好了),
  • 询问终端光标的实际位置。

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