完整可滚动 window 内容的 xterm 转储

xterm dump of full scrollable window content

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

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

在这种情况下,我很乐意帮助我,最好能看到完整的视图,包括您自己输入的所有内容和所有消息的顺序,就像您向后滚动时观看它时的顺序一样。

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

有个控制序列,我忘记了。这个问题提醒了我。在 XTerm Control Sequences 中注明 "print all pages":

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.

那是 1999 年 (patch #119) 的日期,因此您的 xterm 中可能有它。您可以在 shell 命令中执行此操作,如下所示:

printf '3[?11i'

一条评论提到了页面 Hidden gems of xterm, which uses the corresponding action print-everything (something that can be executed via the translations resource). It is in the manual page, of course. The same comment points to Extra characters in XTerm printerCommand output, which mentions the resource printAttributes. By default, the control sequences for the printer tell xterm to send extra control characters (to reconstruct video attributes). The resource can be modified (set to 0) to suppress that. That is even older (patch #74)。

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

如果您想捕获写入 xterm 的文本,您可以通过在之前准备不同方法需要的文本来实现(参见manual):

  • 打开 xterm 日志记录功能(不是那么用户友好,因为它会生成文件名)。这可以使用 "Log to File (logging)" 菜单项启用。
  • 使用打印机控制序列在写入时写入行(同样,不是那么友好,虽然有一个菜单项可以打开和关闭它,"Redirect to Printer (print-redir)")
  • 使用script捕获所有输出到终端。我使用它,因为它适用于任何 POSIX 类系统(甚至 Cygwin)上的任何终端。

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