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

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

本自民党指南演示如何更改 xterm 的标题。

我知道使用xtitle命令也可以做到这一点。

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

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

这有点与 xtitle 相反......这可能吗?

答案1

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

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

echo -ne '\e[22t'

这会将标题设置为my title

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

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

echo -ne '\e[23t'

答案2

使用xtitle脚本。

互联网上有很多变体,但是,我倾向于使用一种取决于xprop

http://www.shelldorado.com/scripts/cmds/xtitle

答案3

对于简单的情况(可能是最常见的情况),人们可能希望查询当前 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 echo 和第二个示例中的 eval 只是为了去掉 xprop 在值周围放置的引号。

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

答案4

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

$ 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/~}"'

相关内容