【发布时间】:2015-08-08 22:20:18
【问题描述】:
当我在终端上调整大小时,它保持全屏显示。 我想,有某种方法可以找出终端的屏幕尺寸。如何在 VT100 中做到这一点?
使用 ,当我列出文件夹时,它以蓝色显示文件夹。 (或者说不同的颜色)但是,如果您将输出保存到文本文件( ls > out.txt )中,您将看不到任何 ANSI 代码,而是纯文本。但是,如果您尝试 (vi > out.txt),您将看到 ANSI 代码。怎么知道的?
谢谢
【问题讨论】:
当我在终端上调整大小时,它保持全屏显示。 我想,有某种方法可以找出终端的屏幕尺寸。如何在 VT100 中做到这一点?
使用 ,当我列出文件夹时,它以蓝色显示文件夹。 (或者说不同的颜色)但是,如果您将输出保存到文本文件( ls > out.txt )中,您将看不到任何 ANSI 代码,而是纯文本。但是,如果您尝试 (vi > out.txt),您将看到 ANSI 代码。怎么知道的?
谢谢
【问题讨论】:
自动调整屏幕大小的程序(例如vi)响应SIGWINCH 信号,并使用系统调用获取系统关于屏幕大小的信息。参见例如 Get width/height of a terminal window in c++?。顺便说一句,虽然它被广泛实施,但它似乎没有记录在 POSIX signal.h 中。
在不考虑SIGWINCH 的情况下,程序可以向终端询问其屏幕尺寸。 resize 程序通过将终端控制序列发送到
ls 和 vi(和其他程序)关于将嵌入其输出中的 ANSI 控制序列的行为取决于程序的设计。他们可能会使用isatty 函数检测到其输出重定向到文件,并根据输出是到终端还是到文件执行不同的操作。
【讨论】:
TIOCGWINSZioctl。