terminal - 从终端读取屏幕字符

标签 terminal curses ioctl termcap terminfo

据我研究,terminfo/termcapioctl 不允许查询终端上 (x,y) 位置的字符屏幕。这是相当出乎意料的,因为:

  • 人们可以阅读例如终端的屏幕尺寸(例如 tput cotput li),
  • 可以从终端读取输入

——两者表示与终端的通信是双向的。是否真的没有办法查询给定位置的字符,例如使用 *inch**in_wch* Curses 函数(仅适用于 Curses 窗口)?

最佳答案

这是预期的(不是“意外的”):

  • tput给出来自终端数据库(固定)和操作系统(可变)组合的值,但不询问终端。
  • 从终端读取数据是通过设备的输入流进行的(终端的设计目的)。

一些(不是全部)终端支持转义序列,该序列询问终端光标在哪里。 resize程序使用它来获取屏幕尺寸。但请记住,正如手册页中提到的,它是依赖于终端的:

-s [rows columns]
This option indicates that Sun console escape sequences will be used instead of the VT100-style xterm escape codes.

很少有终端支持转义序列,它只是从屏幕上读取字符。并不是每个人都喜欢一个可以读取屏幕的程序的概念——也许在他们不知情的情况下。

关于terminal - 从终端读取屏幕字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39206272/

相关文章:

linux - 如何在 Linux 中捕获同名但不同扩展名的文件并删除它们

c - 术语 'Segmentation fault (core dumped)' 是什么意思?

python - 诅咒Windows的替代品

python3 curses addstr in pad 未显示在迭代循环中

linux - 这个宏_IOR(MY_MACIG, 0, int) 是什么意思?

terminal - Aria2c - 如何下载大量文件并输出为 0.pdf、1.pdf、2.pdf ...?

colors - xfce 终端配置中的 12 个十六进制数字颜色代码意味着什么?

c - 在 ncurses 中滚动数据

python - 如何正确地将 C ioctl 调用转换为 python fcntl.ioctl 调用?

c# - 物理磁盘大小不正确 (IoCtlDiskGetDriveGeometry)