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

时间:2015-07-24 21:20:25

标签: linux escaping ansi vt100

  1. 当我在终端上调整大小时,它会全屏显示。 我猜,有些东西可以找出终端的屏幕尺寸。我怎么能在VT100中做到这一点?

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

  3. 谢谢

1 个答案:

答案 0 :(得分:7)

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

如果不考虑SIGWINCH,程序可以询问终端有关其屏幕大小的信息。 resize程序通过将终端控制序列发送到

来完成此操作
  • 将光标移动到右下角(实际上,移动到行/列999/999,这已经足够了),并且
  • 询问终端光标到底在哪里。

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