“wmctrl -i -a 的行为不一致”

“wmctrl -i -a 的行为不一致”

我正在尝试使用dmenuwmctrl编写一个脚本,该脚本将向我显示所有当前打开的窗口的列表,然后切换到我选择的窗口。它看起来像这样:

switch_to 脚本

现在,我使用从中获得的窗口 ID wmctrl -l(例如,第二行屏幕截图中可见的“0x00c0005c”)来准确确定已选择哪个窗口(我没有使用窗口类,因为 2 个窗口属于同一个应用程序将具有相同的类,但不同的 id)。

唯一的问题是:wmctrl -i -a有时有效,但有时不起作用 - 有时,它会切换,但切换到错误的窗口!这是相当随机的。经过网上搜索,我发现的唯一一个网页甚至提及问题是这个。它说:

WIN 作为数字窗口 ID 的工作方式似乎不一致。也许并非所有选项都支持它,或者正在发生一些疯狂的事情。它曾经对我来说非常有效。重新测试。

谁能告诉我如何解决或解决这个问题?

wmctrl我正在最新的 Arch Linux 机器上使用官方存储库中的 1.07-3 版本,以及 Awesome Window Manager(如果有帮助的话)。谢谢

答案1

我今天摆弄了它之后,它就可以工作了,但是当我上次尝试它时,我无法确定问题出在哪里(在此期间我确实切换到了 Linux Mint;也许这以某种方式解决了问题。)

这是任何感兴趣的人的工作脚本:

#!/bin/sh

# source dmenu config file if it exists
if [ -f $HOME/.dmenurc ]; then
    . $HOME/.dmenurc
else
    DMENU='dmenu -i'
fi

# get list of all windows, and their count
wmctrl_output=$(wmctrl -lx)
win_count=$(echo "$wmctrl_output" | wc -l)
# get rid of the hostname and the number in the 2nd column
hostname=$(uname -n)
win_list=$(echo "$wmctrl_output" | \
    sed -r -e 's/[^@]'$hostname'//' | \
    sed -r -e 's/ [0-9][0-9]? / /')

# select a window ($target) and extract its id ($target_id)
target=$(echo "$win_list" | $DMENU -l $win_count -p "Switch to: ")
target_id=$(echo "$target" | cut -d' ' -f1)

# switch to target window
cmd="wmctrl -i -a \"$target_id\""
eval "$cmd"

和我的~/.dmenurc

DMENU_FONT='-*-*-medium-r-*-*-18-*-*-*-*-*-*-*'
DMENU="dmenu -i -fn $DMENU_FONT -nb #1E2320 -nf #DBDBDB -sb #3f3f3f -sf #ffffff"

您所需要做的就是将脚本放在 $PATH 上的某个位置,使其可执行,然后将密钥绑定到它。

相关内容