web-dev-qa-db-fra.com

Comment faire des fenêtres de taille égale dans les coins de l'écran?

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.

3
user364819

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. .

Ce qu'il fait

Lorsque quatre fenêtres sont ouvertes, placées au hasard sur l'écran:

enter image description here

l'exécution du script les organisera dans une grille:

enter image description here

Le scénario

#!/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])

Comment utiliser

  1. Le script nécessite à la fois xdotool et wmctrl:

    Sudo apt-get install xdotool wmctrl
    
  2. Copiez le script dans un fichier vide, enregistrez-le sous le nom twobytwo.py

  3. 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

  4. 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
    

Remarques)

  • 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.

  • Comme mentionné, le script, tel qu'il est, grille les quatre plus anciennes fenêtres. Cela signifie que si vous avez besoin que plus de fenêtres soient placées dans la même grille, le script nécessite une édition. S'il vous plaît mentionner si oui.
1
Jacob Vlijm

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:

enter image description here

Bien que cette extension ne soit actuellement pas disponible pour GNOME 3.18, vous devrez donc essayez cette solution de contournement .

5
Wilf