in reply to How to Get XTerm Title

Update:I have discovered the escape sequence ^[[21t; outputs the title but it doesn't go to either STDOUT or STDERR! How can I capture it then?

Think a second about how your program talks to the terminal (emulator) and the user behind it. (Think about a three-wire RS232 connection -- TxD, RxD, GND -- to an old VT100 terminal, if that helps you.) STDOUT and STDERR go into the terminal (TxD wire on the computer), where the text written is postprocessed and usually displayed on screen. STDIN comes from the terminal (RxD wire), usually only when the user starts hacking on the keyboard.

All terminal emulators behave the same, in this respect: There is one (virtual) wire into the terminal, and another (virtual) wire back to the computer. The Linux virtual consoles (also known as text mode) behave like pimped VT100s, and so do all other virtual consoles. xterm and its clones do the same, but instead of writing characters into the text mode graphics card, they ask the X server to draw some pixels into the frame buffer. PuTTY does the same for Windows.

The big difference between xterm and a classic VT100 is that the xterm terminal emulator knows some new tricks that involve the mouse, so you can use the mouse in joe and mc, for example. PuTTY pretends to be an xterm clone because, well, it is an xterm clone. It is a terminal emulator with mouse functions running in graphics mode, no matter how you communicate with the server (telnet, ssh, rlogin, serial port).

Now, what is the only way for a terminal to send information back to the computer? STDIN, of course! You write a special escape sequence to STDOUT and the terminal will answer via STDIN, just in between the data entered by the user. The terminal software usually takes care that its own answer is send in one piece, uninterrupted by keyboard data.

Now, why do you see the terminal's answer on the terminal screen? Because usually, the operating system echos all terminal input back to the terminal output.

See also the PuTTY FAQ A.7.12

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

Replies are listed 'Best First'.
Re^2: How to Get XTerm Title
by NateTut (Deacon) on Sep 03, 2009 at 21:41 UTC
    That escape sequence is part of the XTerm control set. When I did echo ^[[21t; > STDOUT.txt 2> STDERR.txt I get nothing in either file, yet I can see the window title on the screen. Putty is returning it, but I can't seem to capture it.

    Update: the first character of that control string is an ESC and I entered it by doing a Cntrl-v first then the ESC key.

    Update: Corrected a typo
      When I did echo ^[[21t; > STDOUT.txt 2> STDERR.txt I get nothing in either file, yet I can see the window title on the screen. Putty is returning it, but I can't seem to capture it.

      It seems you did not read or at least did not understand my posting.

      PuTTY and any other terminal emulator returns answers to status queries on the same channel where it returns user input: STDIN. STandarD INput, not STDOUT, not STDERR. You see the answer on screen because the terminal handling code of your operating system works in echo mode and writes back everything coming in from the terminal back to the terminal. This happens in the kernel, in a layer below the file handle layer.

      Stupid example that lacks disabling echo and a reasonable reading routine:

      #!/usr/bin/perl -w use strict; $|=1; print "Press <Enter> now, as this is a very stupid demo!\n", "Note that echo is not turned off, so you will see the answer +here,\n", "even before perl has read it: ", "\x05"; # Ctrl-E -> tell Putty to identify itself my $id=<STDIN>; chomp $id; print "OK, your terminal answered '$id' to Ctrl-E.\n";

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
        Thank You! You are right I did not understand your original answer, the code example helped tremendously.