备注: 此文章可能并不能很好地解决问题,推荐看更新的文章(修复某些游戏在macOS上的全屏相关缺陷)
前言
我在全新macOS Tahoe 26系统并在外接显示器体验过程中,dock栏(中文名:程序坞,后续不再解释)中的应用保留比较少,同时dock栏大小调整的比较大,虽然看着很舒服了,但是所占的空间可不小,我希望dock栏能智能显示或隐藏,比如在使用非全屏大窗口应用(比如:系统设置,访达等)时(即窗口未与dock栏区域接触{只要窗口底边>=dock栏最上边的纵坐标就算接触})dock栏能自动显示,否则自动隐藏。在互联网中发现有个应用(intellidock)能基本满足我的需求,但它在我这个系统中不能正常工作(能自动隐藏,但不能自动显示),故本人写一个swift二进制程序来实现需求。
已知bug/macOS特性:
- (这其实并非我编写程序的bug,而是macOS特性,我有一些方法可以解决/完善,但都不够优雅(主要是有点复杂+懒),没想好怎么修算比较好)
在 Dock 显示状态下,当点击一个最小化的全覆盖屏幕窗口(minimized to Dock),macOS 会尝试让窗口不遮挡 Dock,所以系统会自动调整窗口位置,把它“挤”在 Dock 上方,下边界会被强制上移。
目前不足:
- (✅已优化,采用池管理)
当前程序性能开销总体来说非常低了,但依然还有改进的空间,比如:避免频繁注册/卸载事件。 - (✅已优化,采用私有API)
采用AppleScript来控制 Dock 自动隐藏控制开销还是有点高 - (目前没能力做.)无GUI可视化
- (懒的搞.)目前只对单屏幕有优化模式
- 单屏幕时,程序会缓存dock栏高度,这会导致当dock栏高度变化时不能及时处理
- 程序被kill时应该发出通知并启动一个新进程fork
本程序优点:
- 速度非常快,性能开销非常低
- 命令行运行,支持不同的参数
- 兼容性极好,支持不同macOS
部署
建议懒人(比如我😂)使用此方式(自定义用户可作为参考).
将下面命令在 终端 中运行.
1 | user=$(whoami); |
启动或停止双击 SmartDock运行状态切换.command 文件即可.
备注:
你需要在 系统设置 中 隐私与安全性 中 辅助功能 中添加 终端 应用(需要给权限)
默认使用参数 --fast-pid :同一进程的不同窗口跳过聚焦切换处理,如果不需要请自行修改 SmartDock运行状态切换.command 脚本
如果下载失败,你可以选择通过代理下载或者将 lanyun.pages.dev 替换为 lanyundev.com 并在浏览器的无痕模式中进行下载。
手动在无痕模式文件下载链接:SmartDock SmartDock运行状态切换.command
可以手动验证一下一些文件的完整性,避免因网络缓存等原因导致与预期不符。
1 | sha512sum * |
更新说明
优化不足1和2.












