Com um pequeno script e uma pequena cirurgia no seu sistema, ele pode ser organizado exatamente como você descreve.
Ingredientes
- %código%; possivelmente precisa ser instalado.
- O script abaixo
-
wmctrl
, para obter as propriedades da janela. Isso já está instalado no seu sistema. - Alterações de configurações nas configurações do painel do xfce
- Atalhos de teclado adicionais
Como configurar
-
Instale
xprop
:sudo apt-get install wmctrl
-
Crie um diretório
wmctrl
(~/bin
). Copie o script abaixo em um arquivo vazio, salve-o como/home/<yourname>/bin
(sem extensão) empanel_navigate
e torne-o executável . -
Alterar configurações do painel:
Vá para o Gerenciador de configurações > "Painel" > "Itens" (tab) > "Botões da janela" >
- "Ordem de classificação" > Escolha: Timestamp
- "Agrupamento de janelas" > Escolha: "Nunca"
- Verifique se "Mostrar janelas de todas as áreas de trabalho ou viewports" está un marcado
- "Ordem de classificação" > Escolha: Timestamp
Adicionaratalhosdeteclado:
váparaoGerenciadordeconfigurações>"Teclado" > "Atalhos de aplicativos", escolha "Adicionar". Adicione o comando:panel_navigate 1
Defina para a combinação de teclas Ctrl + 1
Agoravocêpodeescolher:
- pararepetiresteprocedimentoparaadicionar
~/bin
emCtrl+2eassimpordiante(até9)
(opçãodesalvar)ou(sevocênãotemmedodeeditarosarquivosdeconfiguraçãomanualmente):
vocêpodeeditaroarquivo:
~/.config/xfce4/xfconf/xfce-perchanel-xml/xfce4-keyboard-shortcuts.xml
emqueosatalhosdeteclado(em
panel_navigate2
)sãoarmazenados.Abraoarquivocomxfce
eprocureporumalinhacomo:<propertyname="<Primary>1" type="string" value="panel_navigate 1"/>
Copie a linha, cole-a na próxima linha (inserir) e altere as ocorrências de 1 para 2, para obter:
<property name="<Primary>1" type="string" value="panel_navigate 1"/> <property name="<Primary>2" type="string" value="panel_navigate 2"/>
e assim por diante.
Verifique se o recuo é exatamente o mesmo. Repita o procedimento até 9.
- pararepetiresteprocedimentoparaadicionar
Faça o logout e volte a funcionar e isso deve funcionar:
Ctrl + 1
Ctrl+3
E assim por diante ...
O script
#!/usr/bin/env python3
import subprocess
import sys
def get_value(command):
return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip()
def run_command(command):
subprocess.Popen(["/bin/bash", "-c", command])
current_workspace = [l for l in get_value("wmctrl -d").splitlines() if l.split(" ")[2] == "*"][0][0]
wlist_ids = [item.split()[0:4] for item in get_value("wmctrl -l").splitlines()]
relevant = [item for item in wlist_ids if item[1] == current_workspace]
panel = []
for item in relevant:
data = get_value("xprop -id "+item[0])
if ("_TYPE_NORMAL" in data, "TYPE_DIALOG" in data).count(True) == 1:
panel.append(item)
try:
window = panel[int(sys.argv[1])-1][0]
run_command("wmctrl -ia "+window)
except IndexError:
pass
Explicação
A solução é oportunista. Ocorreu-me que a lista de janelas, chamada pelo comando mousepad
, é ordenada pela idade das janelas. Ao fazer o painel xfce fazer o mesmo (configurações), ambos os pedidos são correspondentes perfeitamente. O que o script faz é criar uma lista de janelas, filtrar as janelas visíveis "reais" (com wmcrl -l
) e alternar para uma janela escolhida pelo comando xprop
, com o número da janela (da esquerda para a à direita) como um instrumento.
Problemas
Eu notei uma exceção: as janelas IDLE (interpretador de python) possuem pid 0 e suas propriedades não podem ser "pesquisadas" por panel_navigate
. As janelas não aparecem na lista de janelas e são ignoradas pelo script.
Nota
Embora a combinação de teclas Ctrl + xprop
não tenha gerado nenhum erro durante o teste, pode entrar em conflito com alguns aplicativos. Pode ser mais seguro escolher (por exemplo)
Ctrl + Alt + 1