【问题标题】:Read screen character from terminal从终端读取屏幕字符
【发布时间】:2025-11-30 11:15:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: terminal curses ioctl termcap terminfo


    【解决方案1】:

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

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

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

    -s [行列]
    此选项表示 Sun 控制台转义序列将 用于代替 VT100 样式的 xterm 转义码。

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

    【讨论】:

    • 我很想知道哪些终端类型支持从屏幕缓冲区读取字符。