XTerm 打印机命令输出中的额外字符

XTerm 打印机命令输出中的额外字符

我已经设置了.XresourcesAlt按-时能够将终端内容打印到文件中P

XTerm*printAttributes: 2
XTerm*printerCommand: cat - > "`mktemp --tmpdir xterm-screenshot.bin.XXXXXXXXXX`"
XTerm.VT100.translations: #override Meta <KeyPress> P: print() \n

这似乎工作正常,除了输出中的每一行都以一些转义字符和文字为前缀#5。比较会话开始时的输出xterm

user^2@host:~
$ 

ESC#5ESC[0m一开始的那一点正常吗?

less /tmp/xterm-screenshot.bin.*:

ESC#5ESC[0muserESC[0;1;33m^2ESC[0m@host:ESC[0;1;34m~ESC[0m
ESC#5ESC[0m$ ESC[0m

less -R /tmp/xterm-screenshot.bin.*:

[0muser^2@host:~
[0m$

附加信息:

$ xterm -version
XTerm(271)
$ uname -a
Linux user 3.2.0-27-generic #43-Ubuntu SMP Fri Jul 6 14:46:35 UTC 2012 i686 i686 i386 GNU/Linux

答案1

是的,因为您特别要求 xTerm 具有print()所有属性:

XTerm*printAttributes: 2

即输出文件包含发送到 xTerm 的整个字节序列,然后您使用less(普通,没有开关)来文件,以便您获得终端上显示的文本版本(具有各种属性的内容)。有问题的文件是:

[me ~]$ file -b /tmp/xterm-screenshot.bin.HBsmSPRrFx
ASCII text, with CRLF line terminators, with escape sequences

您必须使用-r( --raw-control-chars)less才能看法文件内容与终端上显示的方式相同:

less -r /tmp/xterm-screenshot.bin.HBsmSPRrFx

如果您不希望输出文件中包含转义序列(即,您想要一个没有图形属性的纯文本文件),则必须使用:

XTerm*printAttributes: 0

在你的~/.Xresources。从xTerm手册

printAttributes (class PrintAttributes)
    Specifies whether to print graphic attributes along with the text. A real DEC VTxxx terminal
    will print the underline, highlighting codes but your printer may not handle these. A "0"
    disables the attributes. A "1" prints the normal set of attributes (bold, underline, inverse
    and blink) as VT100-style control sequences. A "2" prints ANSI color attributes as well.

相关内容