Como corrijo janelas de aplicativos (make) para serem abertas no local desejado da área de trabalho?

0

Por exemplo, quero que a janela do SMPlayer seja sempre aberta no meio da área de trabalho, porque quando eu a coloco no meio toda vez que eu lanço, ela sobe à esquerda no topo com o tempo, então eu tenho que arrastá-la para trás e meio que não gostam de repetir isso de novo e de novo.

Então, como faço para que uma janela de aplicativo aberta seja colocada onde eu quero?

    
por JoKeR 12.04.2015 / 22:48

1 resposta

1

Se você executar o script abaixo com os argumentos:

<application> <x> <y>

A janela do aplicativo será colocada em x, y na tela.

Como configurar

O script usa wmctrl e xdotool :

sudo apt-get install wmctrl
sudo apt-get install xdotool

Então:

  1. A maneira mais elegante é Copiar o script em um arquivo vazio e salvá-lo em ~/bin (talvez você tenha que criar o diretório) como place_window (sem extensão)
  2. Torne o script executável (!)
  3. Se você acabou de criar ~/bin , efetue logout / in ou execute o comando:

    source ~/.profile
    
  4. Teste-o com o comando (por exemplo):

    place_window gedit 100 100
    

    Uma janela do gedit deve aparecer em x = 100, y = 100 na sua tela.

Se tudo funcionar bem, você pode colocar o comando em uma combinação de atalhos (escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados"), ou como um atalho de lista rápida para um lançador de aplicativos.

O script:

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

app = sys.argv[1]
user = getpass.getuser()
get = lambda x: subprocess.check_output(["/bin/bash", "-c", x]).decode("utf-8")
ws1 = get("wmctrl -lp"); t = 0
subprocess.Popen(["/bin/bash", "-c", app])

while t < 30:      
    ws2 = [w.split()[0:3] for w in get("wmctrl -lp").splitlines() if not w in ws1]
    procs = [[(p, w[0]) for p in get("ps -u "+user).splitlines() \
              if app[:14] in p and w[2] in p] for w in ws2]
    if len(procs) > 0:
        w_id = procs[0][0][1]   
        cmd1 = "wmctrl -ir "+w_id+" -b remove,maximized_vert remove,maximized_horz"
        cmd2 = "xdotool windowmove "+w_id+" "+sys.argv[2]+" "+sys.argv[3]
        for cmd in [cmd1, cmd2]:
            subprocess.call(["/bin/bash", "-c", cmd])
        break
    time.sleep(0.5)
    t = t+1

Como funciona

O script executa o comando para iniciar o aplicativo, aguarda a exibição da janela correspondente (esperando que o pid produza uma nova janela) e a posiciona nas coordenadas que você definir.

place_window gedit 50 150

place_windowgedit15050

Definindo o comando como um item de lista rápida

O mais elegante seria adicioná-lo como um atalho de teclado ou, alternativamente, como um item de lista rápida:

Nessecaso,ocomandoparausarnalinhaExec=seria,porexemplo:

Exec=/bin/bash-c"place_window gedit 600 600"
    
por Jacob Vlijm 12.04.2015 / 23:29