I cannot install any tools like screen or xproc on the box. I dont need to modify the title, I only need to find the window title name.
echo -e "\033]0;[title]\07"; modifies the title I know. But I just want to know the existing title name.
I cannot install any tools like screen or xproc on the box. I dont need to modify the title, I only need to find the window title name.
echo -e "\033]0;[title]\07"; modifies the title I know. But I just want to know the existing title name.
Try the following, but notice that the compatibility is pretty limited. See the notes below.
get_title(){(
set -e
ss=`stty -g`; trap 'exit 11' INT QUIT TERM; trap 'stty "$ss"' EXIT
e=`printf '\033'`; st=`printf '\234'`; t=
stty -echo -icanon min 0 time "${2:-2}"
printf "${1:-\033[21t}" > "`tty`"
while c=`dd bs=1 count=1 2>/dev/null` && [ "$c" ]; do
t="$t$c"
case "$t" in
$e*$e\\|$e*$st)
t=${t%$e\\}; t=${t%$st}; printf '%s\n' "${t#$e\][lL]}";
exit 0;;
$e*);;
*) break;;
esac
done
printf %s "$t"; exit 1
)}
Example:
$ get_title
$ title=`get_title`
Or, if your script's stdin is not the terminal:
$ title=`get_title </dev/tty`
The stty + dd kludge tries to make sure that the script won't just block if the terminal doesn't report anything in response to the \e[21t escape. This (or a better) approach could be also used with other control sequences (eg. to get the cursor position).
Notes:
Since the \e[21t escape is considered "insecure", extra configuration is needed in order to make it work:
For xterm: echo '*.vt100.allowWindowOps: true' | xrdb -override
For urxvt: echo 'Rxvt.insecure: true' | xrdb -override
It will not work at all in vte-based terminals like gnome-terminal, mate-terminal, xfce4-terminal, etc, since they report either a fake ("Terminal") or empty title in response.
mlterm doesn't need anything special, but it will crash (!) if the title wasn't set before with \e]2;TITLE\a (that bug was fixed in the current sources).
screen will report its own window title (the one that was set with the -t option or the C-a A command, not the title of the window it's running in.
It's blocked and not supported in tmux.