特定のアプリケーション(F1 Chrome、F2端末など)にファンクションキーを使用します。正しいアプリケーションを有効にするために、ショートカットキーにバインドされたスクリプトがありますが、動作しますが、最近焦点を当てたウィンドウをアクティブにしません。スクリプトは、wmctrl -lx
生成順序とは逆の順序でリストされたウィンドウをリストします。 「最も近い端末ウィンドウのアクティブ化」スクリプトを作成できるように、特定のウィンドウのアクティブ化順序を要求または追跡する方法はありますか?
または、ウィンドウを繰り返すときに使用されるウィンドウスタックの順序を維持して問題を解決できるように見えますが、xfwm4
そのウィンドウスタックの順序を取得するコマンドラインインターフェイスは表示されません。
答え1
スクリプトではwmctrl
、、xprop
およびを使用してawk
ウィンドウマネージャが管理するアクティベーション時間を使用できます。 (例えばwm-spec 1.5)。たとえば、次のように(複数行)コマンドラインを使用します。
W=$(wmctrl -l | \
awk '$ ~ "Terminal" {print $1;}' | while read x ; do \
echo "$x $(xprop -id $(xprop -id $x \
| awk '$1 ~ /_NET_WM_USER_TIME/ {print $NF}' \
) \
| awk '{print $NF}' \
)" ; \
done | awk '$2>t {i=$1; t=$2} END {print i}' \
)
つまり:
- フィルタリングを介してリストを渡して、指定された
wmctrl
アプリケーションのウィンドウID(上記の例では「ターミナル」)を選択します。 - これを(最も内側)に渡して、
xprop
最後に使用されたウィンドウIDを取得します。 xprop
別の(外部)を使用して、元のウィンドウの「最も高いウィンドウ」の(単一)プロパティである対応するタイムスタンプを取得します_NET_WM_USER_TIME_WINDOW
。awk
最大のタイムスタンプを持つIDを報告するフィルタで生成されたすべてのIDとタイムスタンプの行を渡します。