Enquanto em esta resposta , a questão era como (re) organizar janelas específicas de aplicativos em uma grade, a versão editada abaixo reorganiza todas as janelas "normais" em uma grade:
#!/usr/bin/env python3
import subprocess
import getpass
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 = 70; 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])
Como usar
-
Verifique se o wmctrl está instalado:
sudo apt-get install wmctrl
v v Beses v v v v v es es eses v es es v es es es es es es es es es es es es es es es es es es es es es es es es eses eses eses eses eses eses eses es eses eses es eses eses es eses eses es eses eses es eses eses es eses eses es eses eses es eses eseses
-
Na seção principal do script, defina seu preenchimento preferido, se desejar:
esvvvvv v Bv Bvv v vv vv B vv B v Bv Bvv Bvv Bvv v vv v vv vv Bvv v vv vv es es es es es es es v esvv v es es es v es esv B B B Bv B v B vv es v Bvv v esvv v es es#--- set your preferences below: padding between windows, margin(s) cols = 3; rows = 2; padding = 10; left_margin = 70; top_margin = 30 #---
-
Execute-o pelo comando:
python3 /path/to/rearrange_windows.py <cols> <rows>
por exemplo. :
python3 /path/to/rearrange_windows.py 3 2
para definir uma grade de 3 collums / 2 linhas de janelas.
Se tudo funcionar como esperado, adicione-o a uma tecla de atalho: Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:
python3 /path/to/rearrange_windows.py <cols> <rows>
es vBvvBvvvv vvv vv vesvvBvesvvvvvvv v esesvBeses v eseseses esesvvvv esesvvvvv vvBesvvBeses vBvv esvv vvv esvesesvv eseseses esesesesvv esvv vv esesesesvBesvv esvv esesesvBesvBesvv eseseseseses eseseseseses esesveseseseses eseseseseseseseses
Nota
v es vvvBves esv vv esv vv esv vv es vv esv vv es es es vv ves es es es es es es es es es es eses es eses veses eses es eses es es eses es eses veseses eseseseseseseses es es es es eses ves es es es eses eses eses eseseseseseseseseseses esesExemplos
python3 /path/to/rearrange_windows.py 3 2
es vvv es B es es es es es es v es es es es es es es v es es es es es es es es es es es es es ves B B B B B B v B es B v es v v es es eses
python3 /path/to/rearrange_windows.py 2 3
es es es es es es es es es es es es es es es es es es es es es es es es es es es es es B es B B es es es eses es es es es es es es es eses es es es es es eses es es es es eses eses eses eses eses eses eses eses eses eseses