Como gerar manualmente um cliente em uma tag específica no Awesome?

2

Eu já tenho atribuição automática de tags para clientes usando regras, mas às vezes preciso gerar um cliente em uma tag específica.

Por exemplo, geralmente quero meu navegador (dwb) na tag 2 usando a seguinte regra:

awful.rules.rules = {
    [...]
    { rule = { class = "Dwb" }, properties = { tag = tags[1][2] } },
}

Mas ao gerar um navegador para uma sessão de depuração, eu quero que ele desova em outra tag (junto com o meu IDE) digamos que a tag 3.

Como posso iniciar um programa a partir da linha de comando para que seu (s) cliente (s) irá aparecer em uma tag especificada como parâmetro?

Preuk
fonte

Respostas:

2

Você pode criar uma função e usá-la através da incrível ferramenta cliente.

Primeiro, crie uma função e adicione-a ao seu arquivo rc.lua:

function spawn(command, class, tag, test)
local test = test or "class"
local callback
callback = function(c)
    if test == "class" then
        if c.class == class then
            awful.client.movetotag(tag, c)
            client.disconnect_signal("manage", callback)
        end
    elseif test == "instance" then
        if c.instance == class then
            awful.client.movetotag(tag, c)
            client.disconnect_signal("manage", callback)
        end
    elseif test == "name" then
           if string.match(c.name, class) then
               awful.client.movetotag(tag, c)
            client.disconnect_signal("manage", callback)
        end
    end
end
client.connect_signal("manage", callback)
awful.util.spawn_with_shell(command)
end

Então, reinicie sua sessão incrível (geralmente através de Ctrl + Super + r).

Então, como se você estivesse escrevendo uma regra, escolha a maneira de identificar o cliente (janela) para mover. Você pode fazer isso por classe, por instância ou por nome. Usar xprop para obter informações no windows, também ver isso Perguntas frequentes .

Finalmente, crie um script simples:

#!/usr/bin/env bash
cat <<EOF | awesome-client
spawn("/usr/bin/firefox", "Firefox", tags[1][1], "class")
EOF

Você pode adicionar quantas ações de desova desejar. Eu escrevi vários scripts de inicialização que iniciam todos os programas que preciso, dependendo da tarefa que pretendo trabalhar.

Espero que isto ajude.

mperrin
fonte
Alterar o retorno de chamada é realmente uma boa ideia. Vou ver se isso resolve o meu problema, especialmente para clientes difíceis de identificar e que você saiba
Preuk
Muito boa solução, exceto pelo cliente que pisca na tela atual; mas isso não é diferente das regras padrão, obrigado!
Preuk
@mperrin: Obrigado, tenho uma pergunta adicional: é possível diferenciar entre instâncias diferentes do mesmo programa? por exemplo. Gostaria que instâncias diferentes do google-chrome (com perfis diferentes) surgissem em tags diferentes. Esse método sempre corresponde à ocorrência de primeiro (eu acho).
Emile 81
Ok, depois de um pouco de pesquisa: o cliente também tem um pid, então eu poderia lembrar que somwhere e testar contra isso, ou se a lista de clientes é ordenada (o que parece ser, eu poderia passar um índice / offset / contador , então continuo correspondendo até que a instância do cliente (esperançosamente) correta seja atingida. Pode postar outra resposta se eu conseguir que ela funcione.
Emile 81