La commande réelle que vous voulez est quelque chose comme
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,0,0,$HALF,-1
Cela fera que la fenêtre actuelle occupe la moitié de l'écran (changez $HALF
les dimensions de votre écran) et s'accroche sur le côté gauche. Pour accrocher vers la droite, utilisez
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,$HALF,0,$HALF,-1
Vous pouvez également jouer avec wmctrl
pour obtenir l'ID des fenêtres qui vous intéressent au lieu d'utiliser :ACTIVE:
. Je ne peux pas vous aider, car cela dépend des fenêtres en question. Jetez un oeil à man wmctrl
plus.
J'ai écrit un script pour ça. Je n'utilise pas Unity, je ne peux donc pas garantir qu'il fonctionnera avec, mais je ne vois aucune raison de ne pas le faire. Il a besoin wmctrl
, xdpyinfo
et disper
à installer:
sudo apt-get install wmctrl x11-utils disper
Ensuite, enregistrez le script ci-dessous sous ~/bin/snap_windows.sh
, rendez-le exécutable avec chmod a+x ~/bin/snap_windows.sh
et vous pouvez exécuter
snap_windows.sh r
Pour accrocher sur le côté droit. Utilisationl
pour le côté gauche et aucun argument pour maximiser la fenêtre. Notez qu'il s'exécute sur la fenêtre actuelle, vous devrez donc lui attribuer un raccourci si vous souhaitez qu'il s'exécute sur autre chose que le terminal.
Le script est un peu plus compliqué que ce que vous demandez, car je l'ai écrit pour fonctionner sur des configurations à un ou deux moniteurs.
#!/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