El comando real que quieres es algo así como
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,0,0,$HALF,-1
Eso hará que la ventana actual ocupe la mitad de la pantalla (cambie $HALF
a las dimensiones de su pantalla) y se ajuste al lado izquierdo. Para girar a la derecha, use
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,$HALF,0,$HALF,-1
También puedes jugar wmctrl
para obtener la identificación de las ventanas que te interesan en lugar de usar :ACTIVE:
. Sin embargo, no puedo ayudar ya que eso depende de las ventanas en cuestión. Echa un vistazo a man wmctrl
más.
He escrito un guión para eso. No uso Unity, así que no puedo garantizar que funcione con él, pero no veo ninguna razón por la que no. Necesita wmctrl
, xdpyinfo
y disper
para ser instalado:
sudo apt-get install wmctrl x11-utils disper
Luego, guarde el script a continuación como ~/bin/snap_windows.sh
, hágalo ejecutable chmod a+x ~/bin/snap_windows.sh
y puede ejecutar
snap_windows.sh r
Para encajar a la derecha. Use l
para el lado izquierdo y sin argumentos para maximizar la ventana. Tenga en cuenta que se ejecuta en la ventana actual, por lo que deberá asignarle un acceso directo si desea que se ejecute en cualquier cosa que no sea el terminal.
El script es un poco más complicado de lo que pides porque lo he escrito para que funcione en configuraciones de monitor único y dual.
#!/usr/bin/env bash
## If no side has been given, maximize the current window and exit
if [ ! $1 ]
then
wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz
exit
fi
## If a side has been given, continue
side=$1;
## How many screens are there?
screens=`disper -l | grep -c display`
## Get screen dimensions
WIDTH=`xdpyinfo | grep 'dimensions:' | cut -f 2 -d ':' | cut -f 1 -d 'x'`;
HALF=$(($WIDTH/2));
## If we are running on one screen, snap to edge of screen
if [ $screens == '1' ]
then
## Snap to the left hand side
if [ $side == 'l' ]
then
## wmctrl format: gravity,posx,posy,width,height
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,0,0,$HALF,-1
## Snap to the right hand side
else
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$HALF,0,$HALF,-1
fi
## If we are running on two screens, snap to edge of right hand screen
## I use 1600 because I know it is the size of my laptop display
## and that it is not the same as that of my 2nd monitor.
else
LAPTOP=1600; ## Change this as approrpiate for your setup.
let "WIDTH-=LAPTOP";
SCREEN=$LAPTOP;
HALF=$(($WIDTH/2));
if [ $side == 'l' ]
then
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$LAPTOP,0,$HALF,-1
else
let "SCREEN += HALF+2";
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$SCREEN,0,$HALF,-1;
fi
fi