如何确定 ANSI 端子的尺寸?

Posted

技术标签:

【中文标题】如何确定 ANSI 端子的尺寸?【英文标题】:How do I determine size of ANSI terminal? 【发布时间】:2016-06-11 19:56:23 【问题描述】:

标准输入和输出连接到实现 ANSI 转义序列但尺寸未知的终端。

我需要知道终端有多大,以便在其上绘制全屏文本 UI。如何获得尺寸?

正确的大小未加载到环境变量中。我不能使用 TIOCGETS;调用将返回成功,但值不正确——内核也不知道大小。

搜索 *** 的答案有很多,但它们都依赖于操作系统以一种或另一种方式提供答案;但这次不是这样。

我能找到的最好的线索是返回当前光标位置的 DSR 命令;但没有移动到底部/右侧命令。

【问题讨论】:

gnu.org/software/termutils/manual/termcap-1.3/html_mono/… :: "co" 和 "li" OP 已经表明不行。 @wildplasser:ansi 没有能力 co 和 li。 好的,好的。我站得更正了。那么我们假设 80*24,对于残缺的终端(并且可能允许在客户端使用命令行标志进行覆盖) OP 需要澄清 ANSI 序列; resize 是一个很好的例子,因为它做了 OP 真正需要知道的事情。 【参考方案1】:

resize 程序通过将光标移动到非常大的列和行来实现此目的;终端尽可能移动,例如,

CUP 999 999

然后resize 询问光标在哪里

DSR 6

终端回复实际光标位置(即光标位置报告CPR),resize 从中知道终端的大小:光标在右下角。

这一切都是使用标准 (ECMA-48 / VT100) 转义序列完成的。在XTerm Control Sequences(应该适用于你的“ANSI”终端)

CSI Ps n  Device Status Report (DSR).
            Ps = 6  -> Report Cursor Position (CPR) [row;column].
          Result is CSI r ; c R

【讨论】:

已测试;验证工作。顺便说一句,测试实例原来是 120x30。

以上是关于如何确定 ANSI 端子的尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

确定字节数组是不是包含 ANSI 或 Unicode 字符串?

threeJS 导入模型(不确定尺寸)后如何确定相机位置及物体缩放比例

mfc dialog 尺寸无法固定控件位置如何确定?

sizeToFit 如何确定合适的尺寸?

如何确定移动应用程序中可以合理呈现多少列? (屏幕尺寸/分辨率/方向)

确定适合相机校准的校准板尺寸