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.