web-dev-qa-db-fra.com

Puis-je définir un raccourci clavier pour redimensionner une fenêtre à la moitié de sa taille, dans la direction choisie?

En utilisant Ubuntu 14.04, je cherche à obtenir un écran 40 "4k et j'ai trouvé comment redimensionner les fenêtres jusqu'aux quarts de section de l'écran, mais j'aimerais pouvoir les redimensionner davantage si vous le souhaitez. Par exemple, je voudrais pour associer la compiz par défaut pour prendre une fenêtre plein écran et la placer dans le quart supérieur gauche de l'écran, mais si vous appuyez à nouveau, réduisez-la davantage au huitième supérieur gauche de l'écran, ou pour placer la fenêtre dans le quart inférieur droit du quart supérieur de l'écran (occupant un huitième verticalement et horizontalement de l'écran). Cette fonctionnalité est-elle cachée dans compiz ou toute autre application que je ne connais pas?

2
Travis

Le script ci-dessous peut être utilisé comme une fonctionnalité supplémentaire à l'option "redimensionner au trimestre" dans 14.04. Il peut être exécuté avec les arguments: "gauche", "droite", "haut", "bas", pour réduire encore le quart en huit.

Ce qu'il fait

Si vous avez déplacé votre fenêtre au quart de votre écran:

enter image description here

le script coupera la fenêtre en deux, soit la gauche, la droite, la moitié supérieure ou inférieure, selon l'argument avec lequel vous l'exécutez (voir ci-dessous).

Comment utiliser

  • Le script utilise wmctrl, qui n'est pas par défaut sur votre système:

    Sudo apt-get install wmctrl
    
  • Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous organize_w dans le répertoire ~/bin. Rendez le script exécutable. Vous devrez probablement encore créer le répertoire ~/bin. Il a l'avantage que vous pouvez exécuter le script uniquement par son nom:

  • Ajoutez quatre commandes aux raccourcis clavier personnalisés. Ouvrez les paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Ajoutez quatre commandes aux combinaisons de touches.
    Sur mon système, j'ai trouvé quatre raccourcis extrêmement adaptés encore disponibles: je suggérerais d'ajouter les commandes sous ces combinaisons de touches:

    organize_w left 
    

    Shift+Ctrl+ Pavé numérique <

    effet:

    enter image description here

    organize_w right 
    

    Shift+Ctrl+ Pavé numérique >

    effet:

    enter image description here

    organize_w up 
    

    Shift+Ctrl+ Pavé numérique ^

    effet:

    enter image description here

    organize_w down 
    

    Shift+Ctrl + Pavé numérique v

    effet:

    enter image description here

    De cette façon, vous pouvez organiser les fenêtres comme ci-dessous en quelques touches:

  • enter image description here

Le script:

#!/usr/bin/env python3
import subprocess
import sys

arg = sys.argv[1]
WA_correction = 28

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")

def execute(command):
    subprocess.Popen(["/bin/bash", "-c", command])

xprop_data = get("xprop -root").split()
w_id = xprop_data[xprop_data.index("_NET_ACTIVE_WINDOW(WINDOW):")+4].replace(",", "")
frontmost = w_id[:2]+"0"+w_id[2:]
w_data = [l for l in get("wmctrl -lG").splitlines() if frontmost in l][0].split()
new_G = w_data[2:6]
new_G[1] = str(int(int(new_G[1])-WA_correction))
xy_corr = lambda x: -10 if int(x) < 100 else 0
if arg == "left":
    new_G[2] = str(int(int(new_G[2])/2 + xy_corr(new_G[0])))
    new_G[3] = str(int(int(new_G[3]) + xy_corr(new_G[1])))            
Elif arg == "right":
    new_G[0] = str(int(int(new_G[0])+int(new_G[2])/2))    
    new_G[2] = str(int(int(new_G[2])/2))
    new_G[3] = str(int(int(new_G[3]) + xy_corr(new_G[1])))
Elif arg == "up":
    new_G[2] = str(int(new_G[2]) + xy_corr(new_G[0]))
    new_G[3] = str(int(int(new_G[3])/2 + xy_corr(new_G[1])))
Elif arg == "down":
    new_G[1] = str(int(int(new_G[1]) + int(new_G[3])/2))
    new_G[2] = str(int(new_G[2]) + xy_corr(new_G[0]))
    new_G[3] = str(int(int(new_G[3])/2))

execute("wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz")
execute("wmctrl -ir "+frontmost+" -e 0,"+(",").join(new_G))



modifier:

Version XFCE

Avec quelques modifications mineures, le script peut également être utilisé pour redimensionner les fenêtres en demi/quart ou huit sur XFCE (testé le 14.04).

Utilisez-le exactement comme la version pour Unity:

#!/usr/bin/env python3
import subprocess
import sys

arg = sys.argv[1]
WA_correction = 48

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")

def execute(command):
    subprocess.Popen(["/bin/bash", "-c", command])

xprop_data = get("xprop -root").split()
w_id = xprop_data[xprop_data.index("_NET_ACTIVE_WINDOW(WINDOW):")+4].replace(",", "")
frontmost = w_id[:2]+"0"+w_id[2:]
w_data = [l for l in get("wmctrl -lG").splitlines() if frontmost in l][0].split()
new_G = w_data[2:6]
new_G[1] = str(int(int(new_G[1])-WA_correction))
if arg == "left":
    new_G[2] = str(int(int(new_G[2])/2))      
Elif arg == "right":
    new_G[0] = str(int(int(new_G[0])+int(new_G[2])/2))    
    new_G[2] = str(int(int(new_G[2])/2))
Elif arg == "up":
    new_G[3] = str(int(int(new_G[3])/2))
Elif arg == "down":
    new_G[1] = str(int(int(new_G[1]) + int(new_G[3])/2))
    new_G[3] = str(int(int(new_G[3])/2))

execute("wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz")
execute("wmctrl -ir "+frontmost+" -e 0,"+(",").join(new_G))

(La version XFCE a également été publiée sur Gist.gisthub )

2
Jacob Vlijm