Estou usando um monitor 21:9 e escrevi um script para colocar/alinhar minhas janelas à esquerda, centro e lado direito do monitor, usando atalhos de teclado:
┌─────────┬─────────┬─────────┐
│ window1 │ window2 │ window3 │
│ left │ centre │ right │
│ aligned │ aligned │ aligned │
└─────────┴─────────┴─────────┘
O script funciona obtendo o nome da janela atualmente em foco:
WINDOW_NAME=$(xdotool getwindowfocus getwindowname)
e alinha a janela usando seu nome de janela:
wmctrl -ir "$WINDOW_NAME" -e 1,$X_OFFSET,$Y_OFFSET,$X_WIDTH,$Y_HEIGHT
O problema é que, ao ter várias janelas abertas com o mesmo nome de janela (por exemplo, 2 navegadores Firefox ou 3 terminais etc.), ele não move a janela em foco atual, mas de todas as janelas com o mesmo nome, aquela que foi aberta a primeira .
Ou seja, digamos que eu abro 3 Terminais, e quero alinhar o Terminal T2, o script irá alinhar T1 e não T2, pois T1 foi aberto primeiro.
Então minha ideia é ao invés de usar os nomes das janelas, usar os IDs do processo (PIDs), pois diferentemente do nome de uma janela, o PID é único. A questão é: É possível trabalhar com o wmctrl
uso de PIDs?
Nas páginas man de wmctrl
eu encontrei a opção -i
que interpreta a variável <WIN>
como um número em vez de um nome de string.
$ 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.
[...]
Eu realmente não entendo o que essa -i
opção significa e pensei que talvez isso significasse que é possível usar o PID em vez do nome da janela:
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
Infelizmente, isso não funcionou (nem com decimal, nem como número hexadecimal).
Q1: É possível usar wmctrl
com PIDs em vez de nomes de janela?
Q2: O que a -i
opção realmente significa?
o
-i
opção precisa de um ID de janela, que é o que você obtém se apenas executarque imprime um número decimal como 20971543. Então você pode fazer
Mas você não precisa fazer isso, pois
wmctrl
aceita uma string de ID de pseudo-janela:ACTIVE:
para significar a janela focada, para que você possa fazer