- Detect an external display as any online display that isn't built in (CGGetOnlineDisplayList + CGDisplayIsBuiltin) instead of counting NSScreens, so the rule works in clamshell mode, when mirroring and on single-monitor desktops. The Smart Activation footer reports the same check. - Refuse and mark shortcut presets that clash with a macOS system shortcut (CopySymbolicHotKeys, checked once, only when the Global Shortcut submenu opens), report the real reason a registration failed, and stop claiming that other apps' clashes are detected. Show the shortcut hint on the toggle only when it is actually registered. - Make the menu toggle carry the action it displays, refresh the status line, toggle and "Add 30 minutes" while the menu is open, and ignore a click that lands as the toggle changes meaning, so a click never does the opposite of its label. - Replace the single suppression flag with per-rule overrides: the status names what is paused, Turn On becomes Resume Smart Activation, each rule re-arms when it stops holding, and a rule that became true during a timed session takes over at expiry while rules that held throughout stay paused. - Update the README to match, bump the version to 1.1.0 and add CHANGELOG.md. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
3.1 KiB
3.1 KiB
Changelog
All notable changes to Wakeful are recorded here. The format follows Keep a Changelog, and versions follow Semantic Versioning.
[1.1.0] - 2026-09-23
Fixed
- External display rule works where it matters. It now looks for any connected display that isn't the built-in panel, instead of counting screens, so it fires with the lid closed (clamshell), when mirroring to a projector, and on a desktop Mac's only monitor. Docking and closing the lid no longer switches Wakeful off. The Smart Activation footer shows the same check ("external display" / "no external display") instead of a screen count.
- Global shortcut clashes with macOS shortcuts are detected. Presets that clash with a system shortcut (screenshots, Spotlight, Mission Control, input sources…) are marked "used by a macOS shortcut" and can't be picked, and a failed registration shows its real reason. 1.0.0 promised an "unavailable" warning that could never appear. Clashes with App Shortcuts, Services and other apps can't be detected by any public API; the README now says so.
- An open menu no longer goes stale. The status line, Turn On / Turn Off and "Add 30 minutes" update while the menu is open, and the toggle always does what its label said. Previously, clicking "Turn Off" as a timed session expired started an indefinite session. A click that lands just as the label changes is now ignored.
- Smart Activation after a manual override:
- Turning Wakeful off while a rule applies now says what is paused ("Sleep allowed — AC rule paused") instead of "watching conditions".
- Each paused rule re-arms as soon as its condition stops holding, so unplugging and replugging re-arms the AC rule even with other rules on.
- A rule that becomes true during a timed session (you dock halfway through) takes over when the session ends. A rule that held throughout stays paused, so "Keep Awake For 15 minutes" still really ends on AC.
- Turning off and back on no longer converts an automatic session into an indefinite manual one that survives unplugging.
- The shortcut hint on Turn On / Turn Off (e.g. "(⌃⌥⌘K)") only appears when that shortcut is actually registered.
Changed
- While Smart Activation is paused, Turn On and the global shortcut become
Resume Smart Activation, handing control back to the rules. In that state
they don't use
defaultDurationMinutes; use Keep Awake For to start a manual session. - Turn Off overrides only the rules that hold at that moment. With the AC and battery rules both on, turning off at your desk and then unplugging lets the battery rule switch Wakeful back on; 1.0.0 stayed off.
- A deliberate click on the toggle within about half a second of its label changing is ignored and needs repeating.
- The chosen shortcut preset is checked for system-shortcut clashes when you pick it and at each launch; a clash created later is noticed at the next launch.
- README: smart activation semantics, the menu design notes and the global shortcut limitations rewritten to match the code.
[1.0.0]
- Initial release.