2

I've set up .Xresources to be able to print the terminal contents to a file when pressing Alt-P:

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

This seems to work fine, except that each line in the output is prefixed by some escape characters and the literal #5. Compare the output at the start of the xterm session:

user^2@host:~
$ 

Is that ESC#5ESC[0m bit at the start normal?

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$

Additional info:

$ 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
l0b0
  • 51,350

1 Answers1

3

Yes, since you specifically requested xTerm to print() with all the attributes:

XTerm*printAttributes: 2

i.e. the output file contains the whole sequence of bytes sent to xTerm and then you are using less (plain, with no switch) to read the file so you get the text version of what appeared on the terminal (stuff with all kind of attributes). The file in question is:

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

You'll have to use -r (--raw-control-chars) with less in order to view the file content the same way it appeared on terminal:

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

If you don't want the escape sequences in your output file (that is, you want a plain text file with no graphical attributes) you have to use:

XTerm*printAttributes: 0

in your ~/.Xresources. From xTerm manual:

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.
don_crissti
  • 82,805