Conecte todas as janelas de aplicativos abertas

4

Estou procurando uma maneira de organizar todas as janelas de aplicativos abertas em uma determinada tela. Eu gostaria de "cascatear" -los para que parte de cada janela é visível, e quando qualquer um deles é clicado eu posso facilmente clicar de volta para outra janela, o que significa que nenhuma janela é perdida atrás de outro.

Aqui está a ideia:

IssoenvolvereposicionarcadajanelanoseixosXeYdatelaeredimensionarcadajanela.paraserdomesmotamanho.

  • ExistealgumamaneiradefazerissodeformanativanoMacOS?
  • Existemaplicativosquepodemalcançaressafuncionalidade?

Atualização:

TenteiasoluçãodaHammerspoonerecebioerroabaixo.ElemoveutodasasminhasjanelasdomonitorexternoparaoMacBook,eissonãoaconteceuemcascata.

    
por ThomasReggi 19.02.2016 / 15:17

3 respostas

4

Eu não conheço nenhuma maneira de fazer isso nativamente, além do Controle da Missão.

Hammerspoon é uma ferramenta de automação de baixo nível que é ótima para esse tipo de coisa, ainda que um pouco desajeitada. Ele expõe muitas operações no nível do sistema operacional a um mecanismo de script Lua, incluindo o posicionamento de janelas, entre muitas outras coisas.

Para implementar essa funcionalidade no Hammerspoon, você poderia fazer algo como:

function cascadeWindows()
    local windows = hs.window.allWindows()
    local screen = windows[1]:screen():frame()

    local xMargin, yMargin = screen.w/5, screen.h/5  -- This is equal to the gap between the edge of the topleft window and the edge of the screen.
    local layout = {}
    for i, win in ipairs(windows) do
        local winPos = {
            win:application(),
            win:title(),
            win:screen(),
            nil, hs.geometry.rect(
            (i-1)*(xMargin/(#windows-1)), -- x
            (i-1)*(yMargin/(#windows-1)), -- y, you might end up having to add some number here
            screen.w - xMargin,           -- w
            screen.h - yMargin            -- h
            ), nil
        }
        layout[#layout+1] = winPos
    end
    hs.layout.apply(layout)
end
hs.hotkey.bind({'cmd','alt','ctrl'}, 'space', cascadeWindows)

Este código foi testado de forma frouxa, mas deve funcionar como ponto de partida. Para instalar, primeiro instale o Hammerspoon e, em seguida, insira esse código no arquivo ~/.hammerspoon/init.lua . Você pode encontrar mais informações sobre exatamente o que está acontecendo na documentação para hs.layout.apply , e mais geralmente no documentário Hammerspoon.

Se você não conhece Lua e não quer aprender Lua (É rápido e fácil!), ou não quer se envolver em aprender uma nova ferramenta tão profunda quanto Hammerspoon, você pode simplesmente seguir o exemplo acima. instruções alterando a ligação de chaves para o que você quiser.

    
por 19.02.2016 / 17:29
2

No menu Janela, mantenha pressionada a opção e clique em Organizar na frente. Isso fará exatamente o que você deseja, conectando todas as janelas em cascata, como mostra o diagrama.

Classifica-os em ordem alfabética.

    
por 11.04.2017 / 01:32
1

Eu estava procurando a mesma coisa e encontrei minha própria solução Hammerspoon:

hs.hotkey.bind({'cmd','alt','ctrl'}, ',', function()
    local windows = hs.window.orderedWindows()
    local screen = windows[1]:screen():frame()
    local nOfSpaces = #windows > 1 and #windows - 1 or 1

    local xMargin = screen.w / 10 -- unused horizontal margin
    local yMargin = 20            -- unused vertical margin
    local spacing = 40            -- the visible margin for each window

    for i, win in ipairs(windows) do
        local offset = (i - 1) * spacing
        local rect = {
            x = xMargin + offset,
            y = screen.y + yMargin + offset,
            w = screen.w - (2 * xMargin) - (nOfSpaces * spacing),
            h = screen.h - (2 * yMargin) - (nOfSpaces * spacing),
        }
        win:setFrame(rect)
    end
end)

Estou bastante satisfeito com isso até agora. Você também pode estar interessado no resto da minha configuração Hammerspoon: link

    
por 04.04.2018 / 07:10