据我研究,terminfo
/termcap
并且ioctl
不允许在终端屏幕上的 (x,y) 位置查询字符。这是相当出乎意料的,因为:
- 可以从终端读取例如屏幕尺寸(例如
tput co
,tput li
), - 可以从终端读取输入
– 两者表示与终端的通信是双向的。真的没有办法查询给定位置的字符,比如 with *inch*
,*in_wch*
curses 函数(仅适用于 curses windows)?
这是预期的(不是“意外”):
tput
给出来自终端数据库(固定)和操作系统(可变)的组合的值,但不询问终端。一些(不是全部)终端支持转义序列,询问终端光标在哪里。该resize
程序使用它来获取屏幕尺寸。但请记住,众所周知,它依赖于终端,如手册页中所述:
-s
[rows columns]
此选项表示将使用Sun控制台转义序列而不是 VT100 样式的 xterm 转义码。
很少有终端支持转义序列,它只会从屏幕上读取字符。并不是每个人都喜欢可以读取屏幕的程序的概念——也许在他们不知情的情况下。