是否可以在屏幕上读取字符(准确地说:在屏幕会话中,来自带有 ncurses 界面的旧版软件)?
不幸的是,我们在屏幕会话中运行的软件的(非常简单的)API 不允许访问一些仅在“屏幕上”显示的重要状态消息。
所以,问题是:我们可以从外部访问屏幕会话的“字符缓冲区”吗?即某事。喜欢 => getChars(x=5, y=30, length=5; screen-pid=12345)
?
是否可以在屏幕上读取字符(准确地说:在屏幕会话中,来自带有 ncurses 界面的旧版软件)?
不幸的是,我们在屏幕会话中运行的软件的(非常简单的)API 不允许访问一些仅在“屏幕上”显示的重要状态消息。
所以,问题是:我们可以从外部访问屏幕会话的“字符缓冲区”吗?即某事。喜欢 => getChars(x=5, y=30, length=5; screen-pid=12345)
?
通常,屏幕缓冲区是终端仿真器的属性(不是“tty”本身的一部分)。一些终端仿真器允许从外部访问它们的屏幕缓冲区,而另一些则不允许。
GNU Screen 使用该
:hardcopy
命令支持这一点(尽管在我的快速测试中,它完全破坏了所有应该是 UTF-8 的非 ASCII 文本)。用于screen -X
在外部调用它:tmux 中的等效功能(使用
capture-pane
andsave-buffer
)似乎效果更好:(为了完整性:Linux 虚拟控制台也允许这样做,使用peekvc。)
有时您可能会发现使用终端仿真库(例如libvterm)编写自定义“主机”程序更有用——创建一个 pty,运行附加的软件,然后使用 libvterm 将 ncurses“绘图”序列直接处理到你自己的缓冲区。