Skip to content

v1.2 · 不再倒计时,窗口不再消失

Choose a tag to compare

@winglight9 winglight9 released this 24 Oct 14:24
· 21 commits to main since this release

这一版全部来自真机反馈

没有新功能。改的是两件事:用起来吓人,和界面在关键时刻不该消失。


1. 检测页不再自己数 20 秒

旧版是个 20 秒倒计时,数完自动退出你列出来的那些程序。

一个会自己关掉你程序的界面,等多久都吓人——而且数着数,你还没看完清单就得做决定。

倒计时整个删掉了。现在只有一个动作:一键全部关闭。点了才动手,不点就一直在那儿等你。

2. 自动关闭时,鼠标不再卡

卡顿的根因是同步子进程跑在主线程上:

  • system_profiler 读蓝牙状态 —— 0.5 到 2.5 秒
  • pmset -g assertions 加每个进程一次 ps —— 几百毫秒
  • 后台服务的 Unix socket 往返 —— 最长等 8 秒

这些全在主线程。主线程一停,整个界面包括鼠标指针就跟着停。

现在全部挪到后台队列执行。并且加了一条回归测试:主线程每 20 毫秒打一次心跳,同时连跑两次最重的查询,断言中间最大空档小于 400 毫秒。旧的同步写法要 0.5–2.5 秒才回来,差一个数量级,这个阈值不会误报。

3. 窗口不会在关键时刻消失了

旧版窗口是 NSPopover,规则是「焦点一离开就收起来」。于是你看到的是:

点「一键关闭」→ 窗口没了 → 鼠标卡一下 → 再点图标才看见「可以拔掉显示器了」

换成不随失焦隐藏的浮动面板。扫描、检测、自动关闭、阻塞、可以拔线、外出中这几页被标成「必须一直看着」:失焦不收,被收走还会自己摆回来。流程中点菜单栏图标也不是「关掉窗口」了,只把它提到前面。

另外补了一个「正在自动关闭」页:逐条打勾,当前这一步转圈。以前那几秒是一个不动的窗口,你只能猜它是不是死了。

4. 左上角的黄点变成带字的标签

一个没有文字的彩色圆点,确实不知道是干嘛用的。现在是胶囊标签,直接写「在家」「准备中」「处理中」「可以拔线」「外出中」「需要处理」「统计中」「已回来」。

5. 检测页不再让你回来汇报

旧版选了「我自己关」之后,关完还要回来点「我关好了,继续」。

关没关掉,机器自己查得出来。现在检测页每 1.5 秒重扫一遍:你关掉一个程序,清单就少一行;全关干净了,自动往下走。一个按钮都不需要点。

6. 文案

  • 检测页从四行 10pt 灰字砍到两行,字号提到 11–12pt。小字堆成一片等于没写。
  • 所有界面文案去掉句末的「。」——那是文章的写法。
  • 按钮上方加一句直白的提示:「手动关掉它们,或者点下面一键关闭」。

7. 修掉「点让电脑睡眠,屏幕反复黑屏亮屏」

这一条是 1.2 发布前几分钟才在真机上撞到的,一起并进这一版。

根因不是睡眠逻辑错了,是重试次数错了。 显示器还插着的时候,pmset sleepnow 的实际效果是:

屏幕黑一下 → WindowServer 立刻抓一个 PreventSystemSleep 把系统拽回来 → 屏幕又亮

旧版固定重试 3 次,就是连闪三下,最后报一句「系统没有进入睡眠」——循环论证,你听完还是不知道为什么。

  • 现在只在线真拔了的时候重试 3 次。显示器还插着时只试一次:成不成一次就看出来了,第二次只是再闪一下。
  • 失败原因说人话:插着线时说「显示器还插着,系统刚睡下就被叫醒了。拔掉线之后它会自己睡」。
  • 拔线页那句「会自动重试」在没拔线时是假话(后台看门狗压根不会重试),改成「拔掉线之后它会自己睡,不用再点」。
  • 按钮从「现在就让电脑睡眠」改名「我已经拔线了,让它睡」。它本来就是「我拔了、你没发现」的兜底,旧名字会让人当成「我想现在睡」去点,而那一按注定只会闪一下。

顺带:跑测试不再往你的 app.log 里灌假记录(查这次闪屏时就被它带偏过)。


安装

  1. 下载 Knight.dmg,打开,把 Knight 拖进「应用程序」。
  2. 第一次打开如果提示「无法验证开发者」:右键点图标 →「打开」→ 再点「打开」。只需要做一次。
  3. 首次使用会要一次管理员授权(装一个最小的后台服务,用来改系统睡眠设置和关共享服务)。密码只在安装时输入一次。

校验

SHA-256  d676a32f08d7c15389943d0c432e52cf80176e27533fee1f39c3b9b59fe85114

其它

  • 测试 198 → 201,全绿。
  • 系统要求:macOS 13 或更高。
  • 免费、开源、无广告、不联网。

完整改动见 CHANGELOG.md。