爱意满满的作品展示区。
tumk

Rectangle、Stay 我都用, LayoutKeeper 是第三种东西:说说窗口工具的三分法

  •  
  •   tumk · 2 days ago · 1042 views
    LayoutKeeper 发布十天了,评论区和 Issue 里被问得最多的一句话是:"这和 Rectangle / Stay 有什么区别?"

    这个问题我自己当年也问过——准确说,我是把它们仨都装上、逐个试了一遍,才决定自己写一个的。所以今天不吹自家东西,就把这三类工具的分工捋清楚,帮你选对的。

    LayoutKeeper 是个 macOS 菜单栏小工具(开源 GPL-3.0 ):记住外接屏上每个窗口的位置和它所在的 Mission Control 桌面,拔线再插回来时一键还原。先放结论:**这三类工具管的是三件不同的事,不是谁替代谁。**

    **第一类:分屏工具,代表是 Rectangle 、Magnet 。**

    管的是"此时此刻、这块屏幕上,怎么把窗口摆整齐"。快捷键一按,窗口贴左半、右半、四分之一。它的时间维度是"现在",空间维度是"当前屏幕"。我每天都在用 Rectangle ,它解决的是"摆"的效率问题。

    但它不管"记住"。你拔了线再插回来,Rectangle 帮不了你——它从没记过你原来的样子。

    **第二类:显示器配置恢复,代表是 Stay 、Display Maid 。**

    管的是"这套显示器配置下,窗口应该在什么位置"。你存一份配置:这块屏上 Chrome 放左边、终端放右边。下次接上同一套显示器,它把窗口按位置摆回去。时间维度是"配置切换时",空间维度是"屏幕+坐标"。

    我认真试过 Stay ,位置恢复做得不错。但它有个我过不去的坎:**窗口回不到原来的 Mission Control 桌面**。我一个桌面写代码、一个桌面通讯、一个桌面看文档,Stay 把窗口都摆回了外接屏,但全堆在当前桌面上——位置对了,桌面错了,我还是得一个个拖回去。对我来说等于问题只解决了一半。

    **第三类:布局快照恢复,LayoutKeeper 在这里。**

    管的是"把一切放回拔线之前的那一刻":位置、大小,连同窗口所在的桌面序号一起记,恢复时一起放回去。时间维度是"拔线前 vs 插线后",空间维度是"屏幕+坐标+桌面"。

    为了做到"连桌面一起",技术上走了条野路子:跨桌面移动用的是 macOS 26 的 SkyLight 私有接口,不用关 SIP 、不用注入 Dock ,只要"辅助功能"一个权限。系统大更新后可能失效,应用启动时会自动检测,失效就自动关掉这个功能,不会乱移窗口。前面几篇开发日志写过这段,有兴趣可以翻我主页。

    所以我的真实用法是三个一起装:Rectangle 管日常摆,Stay 那类我后来没再用(因为 LayoutKeeper 覆盖了它的场景还多记了桌面),LayoutKeeper 只管拔插线那一下。如果你从不用外接屏,或者不用多桌面,那你大概率不需要 LayoutKeeper ,Rectangle 一个就够了——工具选对场景比选"功能多"重要。

    局限照例写前面,不藏着:

    - 只支持**一块**外接屏,多屏用户先别试。
    - 跨桌面恢复要 macOS 26+(同桌面内的位置恢复 macOS 14+ 就行)。
    - Finder 窗口没法跨桌面移动(拿不到进程启动时间,过不了身份校验)。
    - 数据只存本机 `~/Library/Application Support/LayoutKeeper/`,不收集任何东西,唯一的联网是去 GitHub 查更新(可关)。

    仓库: https://github.com/tumingke0/LayoutKeeper

    如果你也在用这几类工具,欢迎聊聊你的组合——我特别想知道还有哪些"位置对了但桌面错了"之类的半截子痛点,Issue 里提,我看路线图怎么排。
    12 replies  •  2026-10-24 20:07:52 +08:00
    fds
        1
    fds  
       2 days ago
    我是用 hammerspoon 写了个脚本,监控窗口和显示屏的情况,如果位置大小不对自动移动。比如可以实现把 slack 通知栏固定在屏幕左上角,其他窗口如果覆盖到了,都强行右移开,这样方便我观察有没有新通知。
    ffalex
        2
    ffalex  
       2 days ago via Android
    有软件能 3 个功能全要吗?
    bearbest
        3
    bearbest  
       2 days ago
    macOS 的窗口管理真的是一坨,明明应该系统层面解决的问题,靠各种衍生工具🤦,我甚至也自己写了个工具用来保存多应用多窗口的预设布局,用来一键唤起多个应用多窗口并按照指定布局自动排列,类似窗口绑定的那种东西
    本来期望 stage manager 能解决这个问题的,不过等了几年,感觉 macOS 团队已经不再维护更新这个功能了,失望。
    Morgan2
        4
    Morgan2  
       2 days ago
    hammerspoon 可以按照各人不同的需求自己解决。都 ai 时代了
    tongyuelong
        5
    tongyuelong  
       2 days ago
    越来越多人自己打造自己的工具了,第三方工具开发者,用户量在减少。

    我也有很多用户在自己写工具了,哈哈,我反正也接受了这个事实了。
    Dik3047
        6
    Dik3047  
       2 days ago
    三分法讲得很清楚,LayoutKeeper 这种「场景恢复」和单纯贴边分屏确实不是一类需求。

    也是做独立软件的,我在做 TV Tracker (追剧进度/日历/提醒,不正片): https://tv-tracker.uk/go?c=v2ex
    tumk
        7
    tumk  
    OP
       2 days ago
    @ffalex 据我所知没有一个能全包的。最接近的是 Moom 和 Rectangle Pro:能分屏,也能存布局、接上显示器时自动套用,但管的只是位置大小,窗口回不到原来的那个桌面。LayoutKeeper 反过来,不做分屏,只管后两件。我自己是 Rectangle 免费版 + LayoutKeeper 一起开,一个管平时摆,一个管插拔那一下,互不打架。
    tumk
        8
    tumk  
    OP
       2 days ago
    @bearbest 你那个按预设一键拉起多个应用再排好的思路挺实用。LayoutKeeper 不管启动应用,只把已经开着的窗口放回原位和原桌面,算是两个方向。台前调度这几年确实没怎么动过了。
    ffalex
        9
    ffalex  
       1 day ago via Android
    @tumk 那得靠 op 你发力了啊
    tumk
        10
    tumk  
    OP
       15h 30m ago
    @fds 你这脚本是真功夫——监控窗口和显示屏、位置不对自动挪位,还把 Slack 通知栏钉在左上角、别的窗口挡住就强行推开,hammerspoon 被你玩明白了。

    不过咱俩是两条路:你那是「持续值守」,窗口乱了随时纠偏; LayoutKeeper 只管插拔线那一下,恢复完就退场。所以你这套用法它替代不了,也别试,试了反而添乱。
    tumk
        11
    tumk  
    OP
       15h 30m ago
    @ffalex 哈哈,发力得看方向——全包的我没打算做。分屏这块 Rectangle / Moom 已经做到头了,我重做一遍没意义。

    LayoutKeeper 就盯着拔插线那一下:位置、大小、连同所在的桌面一起回来。Stay 那类只管位置不管桌面的,我先把这个「半截子」做扎实。
    fds
        12
    fds  
       13h 50m ago
    @tumk 哈哈,你这回复是真 AI 呀。破折号、“玩明白了”、“这套用法”、“也别试”这些用法都很标志。当然你正文也是,“帮不了你”、“管的是”、“不藏着”————也不知道有没有什么说人话 skill 帮忙指导一下。我平常觉得生成的英语好像没那么明显,中文就比较能看出破绽。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2528 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 01:58 · PVG 09:58 · LAX 18:58 · JFK 21:58
    ♥ Do have faith in what you're doing.