私は現在開いているすべてのウィンドウのリストを表示してから、選択したウィンドウに切り替えるスクリプトを使用してdmenu
作成しようとしています。wmctrl
次のようになります。
ここで取得したウィンドウID wmctrl -l
(スクリーンショットの2行目に表示される「0x00c0005c」)を使用して、どのウィンドウが正確に選択されているかを確認します。同じアプリケーションに属する2つのウィンドウは同じクラスですが、IDは異なります)。
唯一の問題は、wmctrl -i -a
動作する場合もありますが、動作しない場合もあることです。時には切り替えられますが、間違ったウィンドウに切り替えられることがあります。それは非常にランダムです。オンラインで検索した結果、唯一のページが見つかりました言及する問題はこれ。それは言う:
WINが数値ウィンドウIDとして機能する方法に矛盾があるようです。たぶん、すべてのオプションがそれをサポートしていないか、何か奇妙なことが起こっている可能性があります。それは私にとって本当にうまくいきました。再試験。
誰でもこの問題を修正または解決する方法を教えてもらえますか?
wmctrl
私はAwesome Window Managerと一緒に最新のArch Linuxシステムの公式リポジトリにあるバージョン1.07-3を使用しています。ありがとう
答え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のどこかに置き、実行可能にしてからキーをバインドすることだけです。