Lay the Settings window out as a source list - #17
Merged
Conversation
One column you scroll is not a settings window, it is a config file with switches. Split it the way macOS splits settings: a source list on the left, one short pane on the right. Three panes that each fit on screen beat one that does not, and the rail doubles as the map — you can see everything yap can be told to do without touching anything. Ignored apps gets the control macOS already has for an editable set: a bordered list with + and - under it, the same one login items use. Rows carry the app's real icon and its bundle id, because the id is what the config file actually stores. An app that has since been deleted keeps its place under its identifier with a drawn placeholder rather than the generic app icon, which read as a failed image load. The window names the file it writes in a bottom bar. The whole point is that clicking here and editing the JSON are the same act, so the path is worth saying out loud rather than hiding behind the button. Split into three files along a real seam — window chrome, pane content, and the config-backed model — rather than one 600-line view.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The Settings window shipped as one column you scroll. That is not a settings window, it is a config file with switches: everything at one visual weight, no way to jump, and the section people open it for — Meetings → Ignored apps — below the fold.
What
Split it the way macOS splits settings: a source list on the left, one short pane on the right.
.sidebarmaterial. Red goes to Recording deliberately: it is the record light, the same thing it means everywhere else in yap. The rail doubles as the map — you can see everything yap can be told to do without touching anything.+/−beneath it, the same one Login Items uses. Rows carry the app's real icon and its bundle id, because the id is what the config file actually stores. An app that has since been deleted keeps its place under its identifier with a drawn placeholder; the generic application icon read as a failed image load.No behaviour change: the same keys, the same immediate write-through, the same live reload.
Open Config Filemoves from a section of its own into the bottom bar.Split into three files along a real seam — window chrome, pane content, config-backed model — rather than one 600-line view. Each is now under the 400-line lint bar.
The one rule
No new dependencies; SwiftUI and
NSVisualEffectVieware system frameworks. Still nothing built until the menu item is first clicked, still nothing running while idle. No new processes, no new timers.Verified
Local CI gate green (
swift test,swift build -c release --arch arm64, the three smoke subcommands, embedded__info_plist), then driven live as a signed binary on an M4 across three inspection rounds. Each round fixed what it showed:~/.config/yap/config.json.+/−bar room.Confirmed at the end: Meetings shows header, both toggles, a three-row list and its
+/−bar with nothing clipped and no scroll; Dictation and Recording likewise. Ignored-app add and remove still round-trip tomeeting_excluded_apps, and the daemon still logsconfig reloadedon every change.