我在用控制端在启动应用程序后移动它们,这样我就不必手动执行此操作,例如,对于几个文本编辑器、Web 浏览器、pdf 查看器和终端。我发出以下 wmctrl 命令来移动应用程序
wmctrl -r <title> -e <x>,<y>,0,-1,-1
其中 < x > 和 < y > 是水平和垂直目标坐标,< title > 是 返回的应用程序名称wmctrl -l
。如果我通过以下命令启动两个 Google Chrome 副本,
google-chrome &
google-chrome &
然后发出命令
wmctrl -l
返回的窗口名称是
0x03c06fd9 0 main New Tab - Google Chrome
0x03c0703d 0 main New Tab - Google Chrome
现在,如果我尝试将其中一个移动到任意坐标,比如说 100,100,使用以下命令
wmctrl -r "Google Chrome" -e 100,100,0,-1,-1
如果您还没猜到的话,它会移动我当前正在输入的这个 Google Chrome 窗口,因为我在打开另外两个窗口之前打开了它。
有没有办法在从命令行启动时分配这些窗口标题,或者稍后重置它们。我需要将名称更改为类似
Google Chrome 1
Google Chrome 2
Google Chrome 3
请注意,据我所知有两种解决此问题的方法,但是,我不喜欢它们中的任何一种,因为如果操作系统在后台启动程序,它们可能会导致问题。
- 不要使用标题,而是通过
-i
命令使用数字窗口 ID。 - 使用字符串
:ACTIVE:
来使用活动窗口
答案1
使用软件包xttitle
中的程序xttitle
。请注意 x 中的两个“t”。特itle。嗯,实际上,有 3 个“t”……但我只输错了前两个。
下面是我的一个例子~/.bashrc
,其中我覆盖了cd
内置函数,并用来xttitle
将当前目录放在我的窗口标题中:
# from the "xttitle(1)" man page - put info in window title
update_title()
{
[[ $TERM = xterm ]] || [[ $TERM = xterm-color ]] && xttitle "[$$] ${USER}@${HOSTNAME}:$PWD"
}
cd()
{
[[ -z "$*" ]] && builtin cd $HOME
[[ -n "$*" ]] && builtin cd "$*"
update_title
}