是否可以获取xterm窗口的当前名称?


9

该LDP Howto演示了如何更改xterm的标题。

我知道使用xtitle命令也可以。

在调用长时间运行的操作之前,我的脚本使用了此类技术来更改其xterm窗口的标题。

我想在更改xterm窗口之前提取它的名称,以便长时间运行的操作完成后,我可以将标题恢复为其先前的值。

这有点像xtitle的逆序...甚至可能吗?


相关的stackoverflow问题xterm如果您能弄清楚如何使用它,则看起来好像有一个窗口标题堆栈。
jw013 2012年

Answers:



9

有一个查询当前标题的控制序列,但是出于安全原因通常将其禁用。这是因为它允许恶意程序或什至是带猫的文本文件,通过先设置标题然后要求将其报告回来,来插入任意字符序列,就像在键盘上键入一样。因此,标题栈被引入。

以下命令将当前窗口和图标标题保存到堆栈中:

echo -ne '\e[22t'

这将标题设置为my title

echo -ne '\e]0;my title\007'

这将恢复先前的窗口和图标标题:

echo -ne '\e[23t'

2

对于琐碎的(可能是最常见的情况),可能希望查询当前xterm的提示,只需使用xprop -id $WINDOWID WM_NAME。如果要提取值以在Shell脚本中进行操作,则可以执行一些更昂贵的操作,例如:

   curtitle=`xprop -id $WINDOWID WM_NAME|awk '{print $3}'|xargs echo`

单独使用bash(避免调用awk和xargs):

   curtitle=`xprop -id $WINDOWID WM_NAME`
   curtitle=`eval echo ${x##*=}`

在第一个示例中的xargs回声和在第二个示例中的eval只是为了去除xprop将值引起的引号。

如果要获取图标名称而不是标题栏中的字符串,请用WM_ICON替换WM_NAME。


-1

如果我正确理解您的问题,则应该可以通过检查$PROMPT_COMMAND变量来获取当前的xterm标题,例如:

$ echo $PROMPT_COMMAND 
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

您可以将其设置为(换行符以提高可读性):

PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]\
0;%s@%s%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

PROMPT_COMMAND不是获得标题的最权威方法,因为它并不总是设置的,并且您运行的任何命令都可以在提示之间更改标题。为了获得最高的准确性,可能需要使用终端仿真器特定的控制序列。
2012年

这在其他应用设置标题的情况下不起作用。
TheGeeko61

$PROMPT_COMMAND没有窗口的标题。它们是无关的。
JamesThomasMoon1979
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.