级联所有打开的应用程序窗口

Tho*_*ggi 5 display gui window macos

我正在寻找一种在给定屏幕上排列所有打开的应用程序窗口的方法。我想“级联”它们,以便每个窗口的一部分都是可见的,当单击它们中的任何一个时,我可以轻松地单击返回另一个窗口,这意味着没有一个窗口会丢失在另一个窗口之后。

这是想法:

在此处输入图片说明

这包括在屏幕的 X 轴和 Y 轴上重新定位每个窗口以及调整每个窗口的大小。大小相同。

  • 有什么方法可以在 Mac OS 中以本机方式执行此操作?
  • 是否有任何应用程序可以实现此功能?

更新:

尝试了 Hammerspoon 解决方案并得到以下错误。它确实将我所有的窗口从外接显示器移动到了 MacBook,而且它并没有真正级联。

在此处输入图片说明

小智 4

除了任务控制之外,我不知道有什么方法可以本地执行此操作。

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)
Run Code Online (Sandbox Code Playgroud)

该代码已经过松散测试,但应该作为起点。要安装,首先安装 Hammerspoon,然后将此代码放入您的~/.hammerspoon/init.lua文件中。您可以在 的文档中找到有关具体情况的更多信息hs.layout.apply,更一般的信息可以在 Hammerspoon 纪录片中找到。

如果你不懂Lua并且不想学习Lua(又快又简单!),或者不想学习像Hammerspoon这样深入的新工具,你可以按照上面的说明更改键绑定到您想要的任何内容。