J'ai récemment vu cette réponse à une excellente question, et je me suis demandé si cela était également possible sur Ubuntu GNOME 15.10 avec GNOME 3.18 et GDM, ainsi que sur Compiz, comme le montre la réponse à cette question.
Mais les raccourcis clavier ne sont pas si importants pour moi, je veux vraiment pouvoir faire glisser les fenêtres dans les coins et les redimensionner automatiquement dans ces coins plutôt que sur les côtés lorsque je relâche ma souris.
Sur le point de poster un duplicata de celui-ci (mais la question diffère légèrement), le script ci-dessous fait ce que vous décrivez, if vous l'exécutez avec les arguments
python3 /path/to/script.py 2 2
Cependant, s'il y a plus de quatre fenêtres (ou plus que les cellules d'une grille, si vous utilisez des arguments autres que 2 2
), le script place uniquement les quatre anciennes fenêtres dans la grille. .
Lorsque quatre fenêtres sont ouvertes, placées au hasard sur l'écran:
l'exécution du script les organisera dans une grille:
#!/usr/bin/env python3
import subprocess
import sys
#--- set your preferences below: padding between windows, margin(s)
cols = int(sys.argv[1]); rows = int(sys.argv[2]); padding = 10; left_margin = 0; top_margin = 30
#---
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_res():
xr = get("xrandr").split(); pos = xr.index("current")
return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
def check_window(w_id):
w_type = get("xprop -id "+w_id)
if " _NET_WM_WINDOW_TYPE_NORMAL" in w_type:
return True
else:
return False
# get resolution
res = get_res()
# define (calculate) the area to divide
area_h = res[0] - left_margin; area_v = res[1] - top_margin
# create a list of calculated coordinates
x_coords = [int(left_margin+area_h/cols*n) for n in range(cols)]
y_coords = [int(top_margin+area_v/rows*n) for n in range(rows)]
coords = sum([[(cx, cy) for cx in x_coords] for cy in y_coords], [])
# calculate the corresponding window size, given the padding, margins, columns and rows
w_size = [str(int(area_h/cols - padding)), str(int(area_v/rows - padding))]
# find windows of the application, identified by their pid
wlist = [w.split()[0] for w in get("wmctrl -lp").splitlines()]
w_list = [w for w in wlist if check_window(w) == True][:cols*rows]
print(w_list)
# remove possibly maximization, move the windows
for n, w in enumerate(w_list):
data = (",").join([str(item) for item in coords[n]])+","+(",").join(w_size)
cmd1 = "wmctrl -ir "+w+" -b remove,maximized_horz"
cmd2 = "wmctrl -ir "+w+" -b remove,maximized_vert"
cmd3 = "wmctrl -ir "+w+" -e 0,"+data
for cmd in [cmd1, cmd2, cmd3]:
subprocess.Popen(["/bin/bash", "-c", cmd])
Le script nécessite à la fois xdotool
et wmctrl
:
Sudo apt-get install xdotool wmctrl
Copiez le script dans un fichier vide, enregistrez-le sous le nom twobytwo.py
Testez-le en ouvrant quatre fenêtres (au moins une fenêtre de terminal pour exécuter la commande), puis exécutez la commande:
python3 /path/to/twobytwo.py 2 2
Les fenêtres doivent se déplacer dans une grille de 4, comme dans la deuxième image
Si tout fonctionne correctement, ajoutez-le à une touche de raccourci: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:
python3 /path/to/twobytwo.py 2 2
dans la section head, il y a une section:
left_margin = 0
J'ai mis ceci à zéro, car gnome n'a pas le lanceur à gauche. Pour Unity, cela devrait être (au moins) 65
, en fonction de la largeur définie du lanceur.
Gnome Shell peut être changé en utilisant Gnome Extensions - Je pense que cette extension fonctionnera pour vous:
Ceci est fait en glissant-déposant les fenêtres dans leur position, un surlignage orange apparaît (ne semble pas correspondre au thème: /). Vous pouvez modifier l’écart entre les fenêtres dans les paramètres:
Bien que cette extension ne soit actuellement pas disponible pour GNOME 3.18, vous devrez donc essayez cette solution de contournement .