Como posso pular automaticamente para a viewport de um aplicativo recém-aberto?

2

Recentemente, descobri a mágica do Compiz, que agora configuro para abrir vários aplicativos em espaços de trabalho diferentes. Minha pergunta é como fazer com que o alternador de espaço de trabalho pule automaticamente para o espaço de trabalho do aplicativo depois de abri-lo?

Um exemplo disso seria eu ter o gerenciador de arquivos aberto na área de trabalho 2-1, onde eu clico em um arquivo de filme, o que abriria o VLC na área de trabalho 1-2. Como obtenho o navegador do espaço de trabalho para alternar automaticamente para o VLC no espaço de trabalho 1-2?

    
por Kalamalka Kid 12.11.2014 / 09:58

1 resposta

2

O script abaixo mudará a viewport atual para aquela em que qualquer nova janela aparece.

O script não adiciona qualquer carga visível / mensurável (usando o monitor do sistema) ao seu sistema.

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

def get_wlist():
    # get the output of wmctrl -lG, try because wmctrl is a bit buggy :)
    try:
        return subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

def get_wids(currlist):
    # get the window ids
    return [l.split()[0] for l in currlist.splitlines()]

def get_abspos():
    posdate = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
    return [int(n) for n in posdate[5].split(",")]

while True:
    # wait until the desktop is ready to run wmctrl
    wdata1 = get_wlist()
    if wdata1:
        break
    time.sleep(1)

# and then...
wlist1 = get_wids(wdata1)

while True:
    time.sleep(2)
    wdata2 = get_wlist()
    if wdata2:
        wlist2 = get_wids(wdata2)
        new = [w for w in wlist2 if not w in wlist1]
        for item in new:
            line = wdata2.splitlines()[wlist2.index(item)].split()
            pos = [int(line[n]) for n in [2, 3]]
            absposcount = get_abspos()
            abspos = [str(pos[0]+absposcount[0]), str(pos[1]+absposcount[1])]
            # print(abspos)
            subprocess.Popen(["wmctrl", "-o", ",".join(abspos)])
        wlist1 = wlist2; wdata1 = wdata2

Como usar

  1. O script precisa de wmctrl :

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

  3. Execute-o pelo comando:

    python3 /path/to/move_toviewport.py
    
  4. Se tudo funcionar bem, adicione a Startup Applications: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando acima.

Como funciona

  • O script fica de olho nas janelas possivelmente recém-exibidas, usando wmctrl -lG
  • Se houver uma nova janela, o script lerá sua posição (absoluta) na área de trabalho de abrangência e, em seguida, moverá para a viewport correspondente usando wmctrl -o x,y
por Jacob Vlijm 12.10.2016 / 10:57