完整可滚动窗口内容的 xterm 转储

And*_*els 4 linux dump xterm

我想知道是否有人知道在 Linux 上的 xterm 窗口中转储或复制所有可查看消息的方法。非常重要的是我不想知道如何发送命令并捕获流 1 和 2 的输出以及输入,因为这对我来说是众所周知的。

我可以解释一下这需要什么。你做了一些事情,预计不会有任何并发​​症,但你会得到 msg 的 als err msg 或正常输出的页面。为了能够稍后查看,您应该能够将它们放入文件中,并且只要您能够用鼠标来回滚动所有内容,就可以确保数据存在于某个位置。但时间可能不是滚动、截图和滚动....

在这种情况下,我很乐意为我提供帮助,并且如果您能够获得完整的视图,包括您自己的所有打字和所有消息,并且按您向后滚动时观看的顺序相同的顺序,那就太好了。

我真的不知道它存储在哪里以及如何保存它。我知道我可以转储全部内存并在其中搜索 xterm 窗口的一部分,但我认为这有点过头了。

Tho*_*key 6

有一个控制序列,我忘了。这个问题提醒了我。在XTerm Control Sequences中,注明“打印所有页面”:

CSI ? Pm i
      Media Copy (MC, DEC-specific).
        Ps = 1  -> Print line containing cursor.
        Ps = 4  -> Turn off autoprint mode.
        Ps = 5  -> Turn on autoprint mode.
        Ps = 1  0  -> Print composed display, ignores DECPEX.
        Ps = 1  1  -> Print all pages.
Run Code Online (Sandbox Code Playgroud)

它可以追溯到 1999 年(补丁#119),所以你的 xterm 中可能有它。您可以在 shell 命令中执行此操作,如下所示:

printf '\033[?11i'
Run Code Online (Sandbox Code Playgroud)

评论提到了xterm 的 Hidden gems页面,它使用相应的操作 print-everything(可以通过资源执行的操作translations)。当然,它在手册页中。相同的注释指向XTerm PrinterCommand 输出中的额外字符,其中提到了资源printAttributes。默认情况下,打印机的控制序列告诉 xterm 发送额外的控制字符(以重建视频属性)。可以修改资源(设置为0)来抑制这种情况。那甚至更旧(补丁#74)。

如果没有这个——可以想象,我们可以构建一个应用程序,该应用程序使用 X SendEvent 协议来构建一系列事件,这些事件将被解释为 xterm 操作,以向后滚动、选择文本并通过剪贴板逐块复制它。你甚至可以用 Perl 编写它(有一个用于X 协议的模块)。但说真的,不。

如果您想捕获写入 xterm 的文本,您可以通过在需要文本之前通过不同的方法进行准备来完成此操作(请参阅手册):

  • 打开 xterm 日志记录功能(不是用户友好的,因为它生成文件名)。可以使用“记录到文件(日志记录)”菜单项来启用此功能。
  • 使用打印机控制序列在写入时写入行(同样,不太友好,尽管有一个菜单项可以打开和关闭它,“重定向到打印机(print-redir)”
  • 用于script捕获终端的所有输出。我使用它是因为它适用于任何 POSIX 类系统(甚至 Cygwin)上的任何终端。

这些方法中的每一种都会生成一个包含转义/控制序列的文件,需要将其过滤掉。使用 SendEvent 的假设程序原则上可以消除这种情况。