Muitas vezes tenho duas janelas do Firefox abertas juntas e gosto delas em cantos opostos da tela. Há a parte relevante do meu arquivo de configuração do devilspie2
--if string.match(get_window_name(), "Mozilla Firefox")
if get_application_name() == "Firefox"
then
-- Apply default immediately
set_window_geometry(1040,32,878, 950);
-- Second window
--os.execute("sleep " .. 10);
if string.match(get_window_name(), "MySite")
then
set_window_geometry(0, 374, 824, 666);
end
end
Mas a segunda janela sempre tem a posição padrão.
Minhas observações sugerem que devilspie2 termina de processar a janela ANTES do Firefox carregar o site e ajustar o título da janela. O sono foi adicionado em resposta a isso, mas não faz diferença, tentei sem dormir e com tempos de sono de um e dez segundos, sem sucesso. Não sou um programador lua e recebi a dica os.execute() de uma pesquisa na web. Da mesma forma, não faz diferença se eu usar get_window_name() ou get_application_name() no início.
Esta pergunta pode estar relacionada, mas não recebeu respostas. Devilspie2 detecta apenas janelas do Firefox ao reiniciar; Como posso consertar isso? .
Alguém sabe como fazer o devilspie2 reagir à mudança do título de uma janela?
Pelo que entendi,
devilspie2
só executa código lua em eventos (delibwnck
) devido à criação de janela, destruição de janela ou mudança de janela ativa em foco.Usar sleep em lua não ajudará porque alterações em uma propriedade da janela, como o nome da janela, de fato farão com que eventos sejam adicionados à fila, mas a fila não será processada até que lua retorne o controle ao loop principal de devilspie2. Nesse ponto, libwnck atualizará as informações, mas lua não será chamada novamente por devilspie2 até que um novo evento de criação, destruição ou foco.
Uma possibilidade é obter o nome da janela usando o utilitário padrão do X11, xprop . Em vez de
os.execute("sleep " .. 10);
usar algo comoNão sou especialista em lua e não testei o que foi dito acima. O
xprop
comando recebe o ID da janela decimal da janela atual e solicita a propriedade WM_NAME, que ele gera no formatoVocê deverá então ser capaz de usar
Seria útil substituir o único sleep/xprop por um loop limitado de sleeps/xprop mais curtos para que a correspondência possa ser encontrada o mais rápido possível.
Inspirado na resposta de @meuh. Olhei para o xdotool e criei este script, que parece funcionar: