本自民党指南演示如何更改 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
答案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/~}"'