该LDP Howto演示了如何更改xterm的标题。
我知道使用xtitle
命令也可以。
在调用长时间运行的操作之前,我的脚本使用了此类技术来更改其xterm窗口的标题。
我想在更改xterm窗口之前提取它的名称,以便长时间运行的操作完成后,我可以将标题恢复为其先前的值。
这有点像xtitle的逆序...甚至可能吗?
该LDP Howto演示了如何更改xterm的标题。
我知道使用xtitle
命令也可以。
在调用长时间运行的操作之前,我的脚本使用了此类技术来更改其xterm窗口的标题。
我想在更改xterm窗口之前提取它的名称,以便长时间运行的操作完成后,我可以将标题恢复为其先前的值。
这有点像xtitle的逆序...甚至可能吗?
Answers:
xtitle
仅适用于本地会话。
对于琐碎的(可能是最常见的情况),可能希望查询当前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。
如果我正确理解您的问题,则应该可以通过检查$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
不是获得标题的最权威方法,因为它并不总是设置的,并且您运行的任何命令都可以在提示之间更改标题。为了获得最高的准确性,可能需要使用终端仿真器特定的控制序列。
$PROMPT_COMMAND
没有窗口的标题。它们是无关的。
xterm
如果您能弄清楚如何使用它,则看起来好像有一个窗口标题堆栈。