我想制作一个迷你游戏/终端保护程序,例如矩阵但在最初的概念中,它会使用终端的实际内容。有没有办法获取启动脚本的终端中当前显示的内容?
答案1
有一个转义序列用于查询终端的内容 (DECRQCRA)。更准确地说,它报告矩形区域的校验和,但通过为每个 1x1 矩形发出它,您可能可以读回屏幕上的内容。由于其安全隐患,大多数终端仿真器都没有实现它。
但是,为了使屏幕上的内容实现 cmatrix 效果,您无需读取单元格。您甚至可以使用 DECCARA 来更改现有单元格的属性(例如不可见性、颜色、粗体)。这同样仅受少数终端仿真器支持,例如猫咪。
通过定义滚动区域(上部和下部以及左部和右部边距),我猜你应该能够垂直移动单个字符。但我不确定,我还没有尝试过。同样,它可能仅受少数终端仿真器支持。
答案2
一般情况下不会。程序通过向终端发送命令流来与终端交互 - 它们无法直接访问字符网格。
通信协议确实有一些命令可以返回某些信息。但是,我很确定不存在返回全屏缓冲区的命令,如果存在,它将被视为重大安全风险。(例如,通过 ssh 连接到服务器会让它看到你之前在本地做了什么。)这已经发生在一些看似微不足道的事情上,比如能够查询终端窗口的标题。
(与 Windows“控制台”相比,它始终充当字符缓冲区并为此提供官方 API。)
答案3
是的,有办法;但它需要针对 NCurses 库或类似库进行编程。NCurses 是用户程序与各种不同终端 API 之间的兼容层。
至于远程会话中的脚本能够访问本地终端的攻击媒介,这对于 SSH 来说是一个问题,因为它在远程系统和本地系统之间中继所有数据 - 包括终端命令。