将 _NET_WM_NAME 设置为 Linux 中当前运行的命令

将 _NET_WM_NAME 设置为 Linux 中当前运行的命令

我使用的是带有 X 和 dwm 的 Arch linux。我希望在 st(这个糟糕的终端)中有窗口的标题,以反映我正在运行的命令,而不是普通的 st。例如,如果我运行 htop 来监视我的 cpu 使用情况,我希望标题为 htop - st。我该怎么做?

编辑:我希望这由我的 Xorg 服务器处理,而不是在正在打开的终端上捕获函数

答案1

就像在xterm或大多数其他终端模拟器:

printf '\033]2;%s\033\\' whatever

其余的由 shell 决定——例如,在 bash 中您可以使用DEBUG陷阱:

set_title(){
   local cmd=$BASH_COMMAND
   case $cmd in
   fg) cmd=$(jobs %); cmd=${cmd##"${cmd%  *}  "};;
   fg\ *|%*) cmd=$(jobs "${cmd#fg }"); cmd=${cmd##"${cmd%  *}  "};;
   esac
   printf '\e]2;%s\e\\' "${TERM%%-*} ${cmd//[$'\e\a']/#}"
}
trap set_title DEBUG

仅设置该窗口属性也可以通过以下方式完成:

xprop -id "$WINDOWID" -f _NET_WM_NAME 8u -set _NET_WM_NAME whatever

但这在 su、ssh、screen、tmux 等中无法可靠地工作。

相关内容