使用脚本将所有打开的终端窗口移到前面

使用脚本将所有打开的终端窗口移到前面

我正在尝试使用建议脚本我之前曾问过这个问题,但是我无法让它发挥作用。

该脚本应该将程序(其名称作为参数传递)的所有实例转发。

以下是脚本的副本:

#!/bin/bash

Program=$@

wmctrl -l | while read Window; do
    if [[ "$Window" == *"$Program"* ]]; then
        echo "DEBUG: I bring $Window"
        code=`echo "$Window" | cut -f 1 -d " "`
        wmctrl -i -a $code
    fi
done

我在偏好设置中添加了一个键盘快捷键,其命令是:

bash /home/michael/Scripts/bring-all-windows.bash  terminal

它对于 gedit 等其他应用程序运行良好,但当我尝试使用终端、终端或 gnome-terminal 时没有得到任何响应。

有人知道为什么会发生这种情况吗?

答案1

问题中的脚本运行完美,但问题在于您的终端窗口标题不包含单词(字符串)“Terminal”。要克服这个“不足”,您有三种可能性:

  1. 让你的终端窗口包含单词“terminal”。为此,当你在终端时,转到编辑个人资料偏好(或按Alt+E然后O),选择头衔和命令选项卡,然后按照下图中的说明进行操作:

    终端标题

  2. 正如我所见这个图片,您的终端窗口标题与终端提示符相同。因此,如果您使用以下命令运行脚本,该脚本将按预期工作:

    /home/michael/Scripts/bring-all-windows.bash michael@michael

    (您不需要在上述命令前面添加bash)。

  3. 或者,也许最好的选择是,在脚本中与窗口标识匹配,而不是与窗口标题匹配:

    #!/bin/bash
    
    Program=" $(pidof $@) "
    
    wmctrl -lp | while read Window; do
        if [ "${Program/ `echo "$Window" | cut -f 4 -d " "` }" != "$Program" ]; then
            echo "DEBUG: I bring $Window"
            code=`echo "$Window" | cut -f 1 -d " "`
            wmctrl -i -a $code
        fi
    done
    

    然后使用以下命令运行脚本:

    /home/michael/Scripts/bring-all-windows.bash gnome-terminal

相关内容