基本的に、alt-tabを何度も入力しないようにするために、ウィンドウを切り替えるためにwmctrlに大きく依存しています。私はいつも1つのワークスペースを使用していましたが、今は複数のワークスペースを使い始めたいと思っています。
wmctrl -l </ code>と入力すると、wmctrlのコンテキストを変更できるかどうか疑問に思いました。 、すべてのワークスペースのすべてのウィンドウではなく、現在のワークスペースのウィンドウのみが表示されます。
たとえば、ワークスペース1でFirefoxウィンドウを開いていると仮定します。 ctrl + alt + f
にキーボードショートカットがあります。 wmctrl -a firefox
を実行します 、Firefoxに切り替わります。ワークスペース2で新しいFirefoxウィンドウを開き、 ctrl + alt + f
と入力した場合 、ワークスペース1のウィンドウに切り替わりますが、これは私が望んでいることではありません。
これを解決する方法に関する提案/アイデアはありますか?
編集 :compiz(Unity)を使用しています
承認された回答:
Compizを使用している場合( wmctrl -m
を実行します わからない場合)、wmctrlには1つのデスクトップ(wmctrl -lの2番目のフィールド、つまり0)しか表示されませんが、geometry(-G)オプションを使用して、どの仮想デスクトップにどのウィンドウがあるかを知ることができます。現在のデスクトップのすべてのウィンドウのx位置は、0から画面の幅までです。 0と画面の高さの間のy位置についても同じです。
したがって、そのようなものを使用できます
#!/bin/bash
SCREEN_W=$(xwininfo -root | sed -n 's/^ Width: (.*)$/1/p')
SCREEN_H=$(xwininfo -root | sed -n 's/^ Height: (.*)$/1/p')
NAME='Navigator.Firefox'
wmctrl -xlG | awk -v W="$SCREEN_W" -v H="$SCREEN_H" -v NAME="$NAME" '$7==NAME && $3>=0 && $3<W && $4>=0 && $4<H {print $1}' | while read WINS; do wmctrl -ia "$WINS"; done
exit 0
必要に応じて画面の幅と高さをハードコーディングでき、ワンライナーが必要な場合はNAMEをハードコーディングできます。
NAMEに一致する複数のウィンドウをどのように処理するかわかりません。それはそれらすべてに焦点を合わせます。
メタシティの場合、デスクトップのウィンドウ数は wmctrl -l
を使用して確認できます。 2番目のフィールドをgrepします。