从终端读取屏幕字符
Read screen character from terminal
据我研究,terminfo
/termcap
和 ioctl
不允许查询终端屏幕上 (x,y) 位置的字符。这有点出乎意料,因为:
- 一个人可以阅读,例如来自终端的屏幕尺寸(例如
tput co
、tput li
)、
- 可以从终端读取输入
– 两者表示与终端的通信是双向的。真的没有办法查询给定位置的字符吗,比如 *inch*
、*in_wch*
curses 函数(仅适用于 curses windows)?
这是预期的(不是 "unexpected"):
tput
结合终端数据库(固定)和操作系统(可变)给出值,但不询问 终端。
- 从终端读取是通过来自设备的输入流(终端的设计用途)。
一些(不是所有)终端支持一个转义序列,它询问终端光标在哪里。 resize
程序使用它来获取屏幕尺寸。但是请记住,它是终端依赖的,如手册页中所述:
-s
[rows columns]
This option indicates that Sun console escape sequences will be
used instead of the VT100-style xterm escape codes.
很少有终端支持转义序列,它只会从屏幕上读取字符。不是每个人都喜欢可以读取他们屏幕的程序的概念——也许他们不知情。
据我研究,terminfo
/termcap
和 ioctl
不允许查询终端屏幕上 (x,y) 位置的字符。这有点出乎意料,因为:
- 一个人可以阅读,例如来自终端的屏幕尺寸(例如
tput co
、tput li
)、 - 可以从终端读取输入
– 两者表示与终端的通信是双向的。真的没有办法查询给定位置的字符吗,比如 *inch*
、*in_wch*
curses 函数(仅适用于 curses windows)?
这是预期的(不是 "unexpected"):
tput
结合终端数据库(固定)和操作系统(可变)给出值,但不询问 终端。- 从终端读取是通过来自设备的输入流(终端的设计用途)。
一些(不是所有)终端支持一个转义序列,它询问终端光标在哪里。 resize
程序使用它来获取屏幕尺寸。但是请记住,它是终端依赖的,如手册页中所述:
-s
[rows columns]
This option indicates that Sun console escape sequences will be used instead of the VT100-style xterm escape codes.
很少有终端支持转义序列,它只会从屏幕上读取字符。不是每个人都喜欢可以读取他们屏幕的程序的概念——也许他们不知情。