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

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

  •  
  •   tumk · 5 days ago · 1140 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 里提,我看路线图怎么排。
    Supplement 1  ·  1 day ago
    更新到了 v0.6.12 ,主要加了两个平时高频用到的功能:
    1. 按 Mac 机身物理接口自动切换显示器排列:之前 GitHub Issue #1 有朋友提了个需求,同一台显示器有时候把 MacBook 放在左边左右并排,有时候放在显示器下面上下叠放,但 macOS 对同一台显示器只记一种排列。实测 Apple Silicon 的 IOKit 会暴露机身各个雷雳口和 HDMI 口的物理编号,现在可以把「外接屏在正上方 / 正右方」或自定义位置绑定到具体的 C 口上,换个口插线就会自动切过去。
    2. 息屏不休眠(合盖外接屏防断连):平时跑长任务或挂着终端,显示器黑屏、拔插电源或合盖时很容易被系统强制休眠断网。现在菜单栏和设置里加了防休眠,开启「息屏不休眠」后开盖允许正常黑屏但锁住系统与网络不断连,合盖接外接屏时也会自动拦住系统的 5 秒强制合盖休眠。

    发布页: https://github.com/tumingke0/LayoutKeeper/releases/tag/v0.6.12
    Supplement 2  ·  5h 38m ago
    更新到了 v0.6.14 ,根据这两天收集到的多显示器高频痛点又加了两个实用功能:
    1. 外接屏亮度跟随内建屏幕自动变化:平时开盖外接第三方显示器,天黑了 MacBook 内屏会随着环境光传感器自动变暗,但外接屏一直亮着很刺眼。现在在「设置 -> 显示器 -> 外接显示器」以及菜单栏亮度滑块下方加了跟随开关。开启后,内建屏幕随环境光或手动调亮、调暗(变化达 2% 及以上)时,外接屏会通过 DDC 按相同幅度自动增减亮度,同时保留两块屏幕原本的亮度差值;合盖或锁屏时自动暂停。
    2. 菜单栏 4 档防休眠切换:除了默认的「息屏不休眠」,新增了「合盖断电也不休眠」档位,拔掉电源合盖换会议室或跑长任务时也不会被系统切断休眠。

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

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

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

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

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