私は21:9モニターを使用しており、キーボードショートカットを使用してウィンドウをモニターの左、中央、右にタイリング/ソートするスクリプトを作成しました。
┌─────────┬─────────┬─────────┐
│ window1 │ window2 │ window3 │
│ left │ centre │ right │
│ aligned │ aligned │ aligned │
└─────────┴─────────┴─────────┘
スクリプトは、現在フォーカスされたウィンドウの名前を取得し、
WINDOW_NAME=$(xdotool getwindowfocus getwindowname)
ウィンドウ名を使用してウィンドウをソートする方法で動作します。
wmctrl -ir "$WINDOW_NAME" -e 1,$X_OFFSET,$Y_OFFSET,$X_WIDTH,$Y_HEIGHT
問題は、同じウィンドウ名(たとえば、2つのFirefoxブラウザまたは3つの端末など)で複数のウィンドウが開かれたときに、現在フォーカスされているウィンドウを移動せずに、同じ名前のすべてのウィンドウのうちの最初のウィンドウを移動することです。
つまり、3つの端末が開いていて端末T2をソートしようとすると、T1が最初に開かれるため、スクリプトはT2の代わりにT1をソートします。
だから私の考えは、ウィンドウ名とは異なり、PIDが一意であるため、ウィンドウ名を使用する代わりにプロセスID(PID)を使用することです。問題は、wmctrl
PIDを使用して作業できるかどうかです。
マニュアルページで、wmctrl
変数を文字列名ではなく数値として解釈するオプションが見つかりました。-i
<WIN>
$ man wmctrl
[...]
-e <MVARG>
Resize and move a window that has been specified with a -r
action according to the <MVARG> argument.
[...]
-r <WIN>
Specify a target window for an action.
[...]
-i
Interpret window arguments (<WIN>) as a numeric value rather
than a string name for the window. If the numeric value starts
with the prefix '0x' it is assumed to be a hexadecimal number.
[...]
私はこのオプションが何を意味するのかよく理解しておらず、-i
ウィンドウ名の代わりにPIDを使用できるという意味かもしれないと思いました。
WINDOW_ID=$(xdotool getactivewindow getwindowpid)
WINDOW_ID=$(printf 0x%x $WINDOW_ID)
wmctrl -ir "$WINDOW_ID" -e 1,$X_OFFSET,$Y_OFFSET,$X_WIDTH,$Y_HEIGHT
残念ながら、これは機能しません(10進数または16進数では)。
wmctrl
Q1:ウィンドウ名の代わりにPIDを使用できますか?
Q2:-i
このオプションは実際に何を意味しますか?
答え1
この-i
オプションには、実行後に取得されるウィンドウIDが必要です。
xdotool getactivewindow
20971543などの10進数を印刷します。だからあなたはこれを行うことができます
wmctrl -i -r "$(xdotool getactivewindow)" ...
wmctrl
しかし、疑似ウィンドウID文字列はフォーカスされた:ACTIVE:
ウィンドウを表すために許可されるため、これを行う必要はありません。
wmctrl -r :ACTIVE: ...