Como posso reciclar janelas na ordem da barra de tarefas?

6

Eu quero mudar o comportamento Alt + Tab , ou preferencialmente definir uma combinação de teclas de atalho diferente para percorrer todas as janelas à esquerda / direita, onde MRU, a maioria recentemente usado NÃO é aplicável.

Enquanto pesquisava, encontrei maneiras de fazer isso no Windows ou talvez compiz com outras distros, nada que eu pudesse usar no Ubuntu.

    
por user643974 18.01.2017 / 23:55

1 resposta

4

Percorra as janelas da esquerda para a direita

(na viewport atual ou em todas as viewports)

O script abaixo, adicionado a uma tecla de atalho, percorrerá as janelas da esquerda para a direita:

Oscript

#!/usr/bin/env python3 import subprocess from operator import itemgetter import sys this_ws = True if "oncurrent" in sys.argv[1:] else False nxt = -1 if "backward" in sys.argv[1:] else 1 def get(command): try: return subprocess.check_output(command).decode("utf-8").strip() except subprocess.CalledProcessError: pass def exclude(w_id): # exclude window types; you wouldn't want to incude the launcher or Dash exclude = ["_NET_WM_WINDOW_TYPE_DOCK", "_NET_WM_WINDOW_TYPE_DESKTOP"] wdata = get(["xprop", "-id", w_id]) return any([tpe in wdata for tpe in exclude]) if this_ws: # if only windows on this viewport should be picked: get the viewport size resdata = get("xrandr").split(); index = resdata.index("current") res = [int(n.strip(",")) for n in [resdata[index+1], resdata[index+3]]] # get the window list, geometry valid = [w for w in sorted([[w[0], int(w[2]), int(w[3])] for w in [ l.split() for l in get(["wmctrl", "-lG"]).splitlines() ]], key = itemgetter(1)) if not exclude(w[0])] # exclude windows on other viewports (if set) if this_ws: valid = [w[0] for w in valid if all([ 0 <= w[1] < res[0], 0 <= w[2] < res[1] ])] else: valid = [w[0] for w in valid] # get active window front = [l.split()[-1] for l in get(["xprop", "-root"]).splitlines() if \ "_NET_ACTIVE_WINDOW(WINDOW)" in l][0] # convert xprop- format for window id to wmctrl format current = front[:2]+((10-len(front))*"0")+front[2:] # pick the next window try: next_win = valid[valid.index(current)+nxt] except IndexError: next_win = valid[0] # raise next in row subprocess.Popen(["wmctrl", "-ia", next_win])

Como usar

  1. O script precisa de wmctrl

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

  3. Adicione o script 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/cyclewins.py
    

É isso

Percorrer apenas as janelas na janela de visualização atual?

Caso você queira apenas percorrer as janelas na viewport atual, o script com o argumento oncurrent :

python3 /path/to/cyclewins.py oncurrent

Ciclo para trás?

Caso você queira alternar da direita para a esquerda, execute o script com o argumento backward :

python3 /path/to/cyclewins.py backward

É claro que a combinação dos dois argumentos é possível;

python3 /path/to/cyclewins.py backward oncurrent

voltará pelas janelas na janela de visualização atual.

    
por Jacob Vlijm 19.01.2017 / 23:15