Como fazer janelas de tamanhos iguais nos cantos da tela?

3

Eu recentemente vi esta resposta para uma ótima pergunta, e eu imaginei, isso também é possível no Ubuntu GNOME 15.10 com GNOME 3.18 e GDM, assim como no Compiz, como a resposta para essa pergunta mostra?

Mas os atalhos de teclado não são tão importantes para mim, eu realmente quero poder arrastar as janelas para os cantos e fazer com que eles redimensionem automaticamente para esses cantos, e não para os lados, quando eu soltar o mouse.

    
por Jacob Vlijm 24.11.2015 / 22:44

2 respostas

1

No limite de postar uma cópia de esta ( mas a questão é um pouco diferente), o script abaixo faz o que você descreve, se você o executa com os argumentos

python3 /path/to/script.py 2 2

No entanto, se houver mais de quatro janelas (ou mais que as células de uma grade, se você usar outros argumentos além de 2 2 ), o script colocará apenas as quatro janelas mais antigas na grade.

O que faz

Quando quatro janelas são abertas, colocadas aleatoriamente na tela:

aexecuçãodoscriptosorganizaráemumagrade:

Oscript

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

Como usar

  1. O script precisa dos dois xdotool e wmctrl :

    sudo apt-get install xdotool wmctrl
    
  2. Copie o script em um arquivo vazio, salve-o como twobytwo.py

  3. Teste-o abrindo quatro janelas (pelo menos uma janela de terminal para executar o comando), execute o comando:

    python3 /path/to/twobytwo.py 2 2
    

    As janelas devem se mover em uma grade de 4, como na segunda imagem

  4. Se tudo funcionar bem, 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/twobytwo.py 2 2
    

Nota (s)

  • na seção principal, há uma seção:

    left_margin = 0
    

    Eu configurei isso para zero, já que o gnome não tem o ativador à esquerda. Para o Unity, isso deve ser (pelo menos) 65 , dependendo da largura definida do lançador.

  • Como mencionado, o script, como está, exibe as quatro janelas mais antigas . Isso significa que, se você precisar de mais janelas para serem colocadas na mesma grade, o script precisará de uma edição. Por favor mencione em caso afirmativo.
por Jacob Vlijm 15.12.2015 / 15:13
5

O Gnome Shell pode ser alterado usando as Extensões do Gnome - eu acho que esta extensão funcionará para você:

Isso é feito arrastando e soltando as janelas na posição, ele mostrará um destaque em laranja (não parece combinar com o tema: /). Você pode alterar o intervalo entre as janelas nas configurações:

EmboraatualmenteessaextensãonãoestejadisponívelparaoGNOME3.18,vocêteráque aplicar essa solução alternativa .

    
por Wilf 24.11.2015 / 23:19