O xdotool permite procurar janelas usando seu subcomando de pesquisa. Eu preciso localizar uma janela, que tenha a classe 'gvim' e o título contendo a palavra 'TODO'. Como eu faço isso?
O que eu tentei:
- Você pode fazer isso
xdotool search --name --class
, mas ele aceitaria apenas um padrão para nome e título. - O xdotool suporta encadeamento de comandos, mas não consegui encontrar uma maneira de encadear duas chamadas de pesquisa - a segunda simplesmente substitui a primeira.
x11
xorg
window-management
xdotool
t7ko
fonte
fonte
xdotool
é uma merda ... esta é uma operação tão simples e não há como fazê-lo com elegância.Respostas:
Minha ajuda do xdotool me informa que seus dois comutadores são os mesmos (xdotool versão 3.20150503.1),
e, como tal, não faz nada. Meu xdotool faz o mesmo que o seu com a substituição da pilha de janelas, então fiz isso com um script de shell. Um script de shell fazendo o que você deseja é entregue abaixo:
Os asteriscos na instrução if estão lá para fazer uma correspondência de substring para
TODO
, para que possa ocorrer em qualquer lugar do título.fonte
Consegui identificar uma solução curta e unix-way:
fonte
Aqui está outra solução aderente à maneira UNIX!
À primeira vista, não é tão bonito quanto o seu, @ t7ko:
Mas tenha paciência comigo! Há alguma beleza escondida nele.
Em suma,
(Se esses pontos são vantagens depende do contexto - vamos ignorar esse aspecto * .)
Mostrarei o mesmo código em um layout mais estruturado abaixo, para facilitar o entendimento passo a passo.
Mas observe que o recuo é para explicar o comando - ele não indica aninhamento, então tudo ainda é um pipeline UNIX linear.
O mesmo comando, basta dividir após os pipes (
|
):O comando completo, como mostrado acima, fornece a localização do pixel da
gvim
janela, retornando as coordenadas do pixel em relação ao canto superior esquerdo da tela atual (possivelmente virtual) comox,y
, tipo42,433
, ou talvez-5375,-3809
quando ele está na primeira das quatro por quatro telas virtuais , e a atual está em algum lugar do lado direito.Por enquanto, reduzirei o comando para encontrar apenas um ID da janela X11 - talvez seja tudo o que realmente era necessário pelo OP, não tenho certeza:
O pipeline de comando reduzido, um comando shell separado em cada linha:
Agora, começa a ser legível:
O
xdotool
comandosearch
é usado para encontrar janelas com a " classe "gvim
, deixando de fora algumas janelas "internas". O resultado é listado comoPID
's (identificadores de processo).Para cada um
PID
,xargs
executa outroxdotool search
, verificando o "nome" do nosso padrão de exemploTODO
- depois de verificar oPID
.(Apenas no caso: as linhas que terminam em
\
- chamadas linhas de continuação - precisam realmente terminar com o\
espaço em branco antes da nova linha).Agora, de volta ao comando original:
A parte restante lista alguns detalhes sobre a janela, incluindo a posição. O
sed
comando corresponde e retorna apenas ox,y
valor da posição.Como exemplo, executando o comando na parte superior da minha 16ª tela virtual (de 4 por 4), com um "TODO"
gvim
na tela 1:*) Isenção de responsabilidade: prefiro o código da @ t7ko. Muito!
fonte
--onlyvisible
é legal. Me ajudou com um problema semelhante. O Thunderbird pode começar com 14 janelas e apenas uma ou duas estão na área de trabalho. Não faço ideia para que servem os outros. Entre apenas os meios visíveis podem ser exibidos - e não apenas mostrados imediatamente na área de trabalho atual.Resposta curta e elegante (que usa
wmctrl
):O ID da janela resultante está em hexadecimal, então você precisa convertê-lo em decimal (usado por
xdotool
):Então você pode fazer o que quiser
xdotool
.fonte
wmctrl
manual diz que-l
não imprime classe de janela, apenas título; portanto, seu snippet de código não resolve meu problema "pesquisar por título E classe".wmctrl -lx
fornece a classe.