Passeie pelos clientes em ambas as telas em awesomewm

6

Estou usando o awesomewm e tenho dois monitores, e Mod4+j e Mod4+k percorrem as janelas apenas na tela atual. Existe uma maneira de percorrer todas as janelas / clientes em todas as telas para fazê-lo funcionar como o normal Alt+Tab ?

    
por Sergey Eremin 24.10.2012 / 00:29

2 respostas

1

Claro que é!

As combinações de teclas em awesome são controladas pelo arquivo rc, que na verdade é um script lua . As ligações de teclas são apenas isso, elas ligam as chaves às funções lua. Você é livre para fazer as funções fazer qualquer que seja que você quer que elas façam.

No seu caso, você deseja vincular essas chaves a uma função que altera a tag ativa em cada tela, em vez de apenas a tela de foco atual.

Neste momento, você provavelmente tem algumas linhas semelhantes a esta na sua configuração:

awful.key({ modkey }, "j", awful.tag.viewprev )

... que faz exatamente o que parece.

O que você vai querer fazer é mudar estes comandos de comandos simples para a API incrível para ser pequenas funções que executam alguns comandos em seqüência. As funções awful.tag.viewprev() e aweful.tag.viewnext() convenientemente aceitam um argumento opcional de qual tela operar. Por padrão, eles trabalham no atual, mas você pode superá-lo.

Por exemplo, para executar a mesma coisa nas duas telas 1 e 2, a linha acima pode ser alterada para:

awful.key({ modkey }, "j", function () awful.tag.viewprev(1); awful.tag.viewprev(2) end)

Tenha em mente que seu contexto pode ser um pouco diferente. Tenha certeza e observe onde várias estruturas como parênteses, chaves, etc são abertas e fechadas e para finalizar linhas que fazem parte de listas com uma vírgula. Adapte conforme necessário para corresponder ao seu arquivo de configuração.

    
por 24.10.2012 / 14:30
1

Depois de examinar documentos do módulo horrível , encontrei uma solução. É hacky, mas funciona como eu queria que funcionasse.

awful.key({ modkey,           }, "Tab",
    function ()
        awful.client.focus.byidx(1)
        if awful.client.ismarked() then
            awful.screen.focus_relative(-1)
            awful.client.getmarked()
        end
        if client.focus then
            client.focus:raise()
        end
        awful.client.togglemarked()
    end),

Esta função percorre os clientes na tela atual, marcando-os e quando todos estiverem marcados, salta para a próxima tela. Aqui está o que acontece passo a passo:

É engraçado porque eu não sei o que "marcado" significa. Clientes marcados não parecem diferir de clientes não marcados visualmente ou por comportamento.

É estranho que eu tenha que escrever uma função de 10 linhas para obter algo tão trivial quanto o multiscreen alt-tab. Eu poderia ter feito algo excessivo)

    
por 24.10.2012 / 18:11