Il vero comando che vuoi è qualcosa di simile
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,0,0,$HALF,-1
Ciò farà in modo che la finestra corrente occupi metà dello schermo (modificando $HALF
le dimensioni dello schermo) e scattando sul lato sinistro. Per scattare a destra, utilizzare
wmctrl -r :ACTIVE: -b add,maximized_vert &&
wmctrl -r :ACTIVE: -e 0,$HALF,0,$HALF,-1
Puoi anche giocare con wmctrl
per ottenere l'ID delle finestre che ti interessano invece di utilizzare :ACTIVE:
. Non posso fare a meno però, poiché dipende dalle finestre in questione. Dai un'occhiata man wmctrl
per di più.
Ho scritto una sceneggiatura per questo. Non utilizzo Unity quindi non posso garantire che funzionerà con esso, ma non vedo alcun motivo per cui no. Ha bisogno wmctrl
, xdpyinfo
e disper
da installare:
sudo apt-get install wmctrl x11-utils disper
Quindi, salva lo script qui sotto come ~/bin/snap_windows.sh
, rendilo eseguibile con chmod a+x ~/bin/snap_windows.sh
e puoi eseguirlo
snap_windows.sh r
Per scattare a destra. Utilizzare l
per il lato sinistro e senza argomenti per ingrandire la finestra. Si noti che viene eseguito sulla finestra corrente, quindi è necessario assegnare un collegamento ad esso se si desidera che venga eseguito su qualsiasi cosa tranne il terminale.
Lo script è un po 'più complicato di quello che chiedi perché l'ho scritto per funzionare su configurazioni sia a singolo monitor che a doppio monitor.
#!/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