Arch-Linux

“wmctrl -i -a <WIN>”的行為不一致

  • June 14, 2013

我正在嘗試使用dmenuwmctrl編寫一個腳本,該腳本將向我顯示所有目前打開的視窗的列表,然後切換到我選擇的那個。它看起來像這樣:

switch_to 腳本

現在,我正在使用從中獲得的視窗 ID wmctrl -l(例如,在第二行的螢幕截圖中可見的“0x00c0005c”)來確定確切選擇了哪個視窗(我沒有使用視窗類,因為 2 個視窗屬於到同一個應用程序將具有相同的類,但不同的 id)。

唯一的問題是:wmctrl -i -a有時有效,但有時無效 - 有時,它會切換,但切換到錯誤的視窗!這是相當隨機的。在網上搜尋後,我發現唯一一個甚至提到這個問題的網頁就是這個。它說:

WIN 作為數字視窗 ID 似乎並不能始終如一地工作。也許並非所有選項都支持它,或者正在發生一些瘋狂的事情。它曾經對我很好。重新測試。

誰能告訴我如何解決或解決此問題?

我在wmctrl最新的 Arch Linux 機器上使用官方儲存庫中的 1.07-3 版本,如果有幫助的話,還有 Awesome Window Manager。謝謝

今天擺弄了一下之後,我得到了這個東西,但是當我上次嘗試它時,我無法確定問題出在哪裡(我確實在過渡期間切換到了 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 上的某個位置,使其可執行,並將密鑰綁定到它。

引用自:https://unix.stackexchange.com/questions/50539