Я не знаю ни одного способа сделать это изначально, кроме управления полетами.
Hammerspoon - это инструмент автоматизации низкого уровня, который отлично подходит для такого рода вещей, хотя и немного неуклюже. Он предоставляет множество операций на уровне операционной системы скриптовому движку Lua, в том числе позиционирование окон и многое другое.
Чтобы реализовать эту функцию в Hammerspoon, вы можете сделать что-то вроде:
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)
Этот код был свободно протестирован, но должен работать как отправная точка. Для установки сначала установите Hammerspoon, а затем поместите этот код в файл ~/.hammerspoon/init.lua
. Вы можете найти более подробную информацию о том, что именно там происходит, в документации по hs.layout.apply
, а также в документальном фильме Hammerspoon.
Если вы не знаете Lua и не хотите изучать Lua (это быстро и легко!) Или не хотите принимать участие в изучении нового инструмента, такого как Hammerspoon, вы можете просто следовать приведенным выше инструкциям, изменяя привязка клавиш к тому, что вы хотите.