Thaw and Ice fixes and features - #40
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…an it) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…eals from cached state - ApplicationMenuFrames reads the application menu frame and the menu bar's validity off the main thread (0.25 s messaging timeout) on frontmost, owner, space and screen changes, with two bounded settle reads - Hit testing, hiding application menus, temporary showing and the overlay read the cache; the overlay's millisecond read loop is gone - macOS 27 item bounds asked on the main thread come from the last read - Show on click logs how many milliseconds after the click it revealed Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
… while locked or asleep - SystemActivity (Core, tested) and SystemActivityMonitor pause item reads, moves, captures and concealment changes while the screen is locked, the Mac sleeps or the session is away, and settle once 2 s after wake, unlock or a display change (one-shot wait, no timer loop) - On settle: health check of taps and monitors, item cache, images where a view shows them, macOS 27 concealment and the menu bar appearance - EventTap recreates a missing or invalid port and adds its run loop source before enabling; the health check also runs when Accessibility is granted - MoveBackoff (Core, tested; adapted from Thaw's MoveCircuitBreaker, credited in NOTICE) pauses automatic moves for 60 s doubling to 10 min; user moves in the Layout pane and from the Shelf always go through and end a pause - Rehiding temporarily shown items waits during a pause instead of retrying every 3 s without end Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…urs are validated - The overlay panel joins every desktop (canJoinAllSpaces, stationary) instead of following the active space, steps aside on a fullscreen space and redraws with reveals, the item list and the macOS 27 concealment - The appearance manager restores the panels on settle and retries panels that found no menu bar at launch (three times, 3 s apart) - Stored hotkeys with a key code outside 0...127 or unknown modifier bits are ignored; conversions for the system use UInt16/UInt32(exactly:) (jordanbaird/Ice#985) - ColorComponents (Core, tested) rejects stored colours with the wrong number of components or values that are not numbers; the gradient average skips colours without four RGB components - The logs privacy check fails on a public window title Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…the class body - OSLog interpolations of a property need an explicit self in a method - ApplicationMenuFrames.ReadResult moves into the class, next to its only user Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…ne restore path - ItemIdentity (Core, tested; canonical titles adapted from Thaw's canonicalMetricTitle, credited in NOTICE): numbers in titles do not change an identity, apps whose titles change beyond that are learned and keyed by position, several items of one app stay apart, keys of earlier versions match - Before macOS 27 the section of every item is saved (ItemSections) after a Layout pane drop, a Command-drag on the bar, a profile and on the first run; reconcileSections in SectionRestore.swift is the one path that restores them on launch, app launch (with one re-check 2 s later) and settle, places new items and keeps Live Activities visible; placeNewItems and move(itemsTo:) are gone - Profiles, groups, known items and temporarily shown items match by identity - The mouse-up monitor notices the end of a Command-drag before macOS 27 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…ar, no Dock icon, notch apps left alone - InterfaceWindowRule (Core, tested): only a new menu-level window of the item's app (levels 24, 25, 100, 101) keeps a temporarily shown item out, before and on macOS 27 (ItemClicker27 lists only menus) (Thaw #1158) - ClockBridgeZone27 bridges a click only inside the visible menu bar's rectangle; frames grow by a point horizontally only; on a fullscreen space only while the bar's window is on screen (Thaw #1171, #1191) - DockIconPolicy (Core, tested): Settings and the search open without a Dock icon; the new setting "Keep the Dock icon hidden" (on by default) keeps it hidden when items reach the application menus; the toggle hotkey still hides them (jordanbaird/Ice#906, Thaw #1197) - MenuBarOcclusion (Core, tested): show on click and hover ignore another app's window above the bar, such as a notch app (jordanbaird/Ice#933) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…URL commands ask before rearranging - SourcePIDCache remembers a failed lookup for 30 s instead of scanning every app again on each miss (jordanbaird/Ice#911) - Before macOS 27 the application menu bar is found at the display's corner and then 8, 20 and 40 points in, halfway down the bar, following a menu to its bar, so notched Macs and Liquid Glass find it (jordanbaird/Ice#911) - SpacingRelaunch.isRelaunched (tested): a respawned app is not launched a second time, a quitting old process does not stop the launch (jordanbaird/Ice#923) - holzbar://profile/<name> asks before it rearranges the bar (Cancel is the default, Escape cancels); every URL command's effect is documented Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…t from under the notch - MenuBarItemProvider27 keeps every frame MenuBarAgent draws on displays whose bar is not active; ItemHitTest27 counts them (tested), so hover, click and the context menu leave items on the second display alone (Thaw #1159, #1138, #1137; jordanbaird/Ice#1001) - NotchCover27 (tested): while holzBar's icon lies under the notch, the nearest visible app right of it is concealed for the moment, one per read, never in the saved layout; cleared on display changes and app launches - When the bar moves to a roomier display with items folded, concealment is released and applied again once (Thaw #1106) - A click on the overflow button is bridged like the clock (Thaw #1195) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…ock click, unsquashed launching apps - DesktopPicture reads the desktop picture from its file (ImageIO thumbnail off the main thread, laid out like the desktop) for the wallpaper beside a menu bar shape; no capture and no Screen Recording. Only a moving wallpaper before macOS 27 falls back to the capture (and its 30 s refresh); on macOS 27 the shape stands on the flat colour - WallpaperChangeMonitor (adapted from Thaw, credited in NOTICE) notices a new wallpaper from the wallpaper store's index instead of a timer - The search uses the flat colour on macOS 27; the wallpaper window is found under WindowManager too (jordanbaird/Ice#1001) - ClockCover27 covers the concealed part of the bar while a clock click lifts concealment, so hidden items no longer flash (Thaw #1181) - LaunchGrace27 (tested): an app launching into a concealed section is shown until its item exists (at most 10 s), then concealed, so its item is not squashed to 3 points (jordanbaird/Ice#1007) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
- A hidden item opened from the search goes through ItemClicker27, as in the Shelf - Items without a bundle identifier are disabled in the Layout pane with a tooltip; system items that cannot be hidden say so - Settings that do nothing on macOS 27 are not shown there; their values stay - holzBar's icon is put back when MenuBarAgent dropped it while concealing (two reads in a row, once per concealment change) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
- docs/upstream-bugs.md: #1005 and #1007 fixed on macOS 27; items losing their section, several items of one app, auto-rehide behind other windows, the Dock icon and styling lost after sleep or login move to Fixed; #988, #959 join the drawing group; #976 is not a bug - README: new rows in "holzBar vs. Ice and Thaw", the feature list, the macOS 27 section and the Screen Recording row Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
The weak capture inside the setup task's closure differed from that closure's strong capture of self (compiler warning); configureObservers registers it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
- ZenMode (Core, tested): manual and automatic parts; while active, hover, click on empty bar space, scroll, reveal rules, URL commands and change reveal are refused; holzBar's icon and the section hotkeys still work - MenuBarManager.toggleZenMode() and setAutomaticZenMode(_:); turning it on hides every section (macOS 27 concealment follows the sections) - Gates in HIDEventManager, RevealRules and URLCommands (logs "Ignored: Zen mode") - HotkeyAction.toggleZenMode = "ToggleZenMode" appended last; recorder "Zen mode"; "Zen Mode" item with a checkmark in holzBar's menu; holzbar://zen/toggle (no confirmation: it only hides) - HolzBarIntents.swift: ToggleZenModeIntent and the App Shortcuts provider; AppState.current reaches the app state, because NSApp.delegate is SwiftUI's adaptor object, not AppDelegate Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
… item, Shortcuts actions - PresentationSignals (Core, tested) and PresentationMonitor: with "Turn on Zen mode while the screen is mirrored or shared" on, Zen mode follows CGDisplayIsInMirrorSet on screen changes (adapted from Thaw, NOTICE) and macOS's screen sharing agent on app launch and quit notifications; no polling, no process-table walk, no permission; turning the setting off withdraws only the automatic part - HotkeyTarget (Core, tested): actions keep Ice's stored names, profiles and items are stored as "ApplyProfile:<name>" and "OpenItem:<identity key>" in the same Hotkeys dictionary; Hotkey holds a target; HotkeysSettings loads, saves and removes the dynamic hotkeys; deleting a profile removes its hotkey - Hotkeys pane: a "Layout Profiles" section with a recorder per profile and the items that have a hotkey, each with a remove button; "Set Hotkey…" in the context menu of an item in the Menu Bar Layout pane - ItemOpener.swift: openItem(_:mouseButton:shelfDisplayID:) and the item lookup by identity key, used by item hotkeys and the Shortcuts action - Shortcuts: Change Section, Apply Layout Profile (profile entity and query), Open Menu Bar Item (fuzzy match by name) and Search Menu Bar Items, all in the App Shortcuts provider - Raycast README: the zen/toggle row and the Shortcuts actions Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
- LayoutProfile gains optional displayUUID and spaceUUID (older profiles decode unchanged; saving a profile again keeps its bindings); bind(_:toDisplay:), bind(_:toSpace:), unbind(_:) and rename(_:to:), which moves the profile's hotkey - ProfileBinding (Core, tested): only newly connected displays count, a bound Space wins over a bound display, the current profile is never applied again - Event-driven: displays are compared after SystemActivityMonitor's settle, the Space on activeSpaceDidChangeNotification; nothing applies while Zen mode is on or an item is dragged in the Layout pane - Bridging.getDisplayUUIDString(for:) and getActiveSpaceUUID() through CGSCopyManagedDisplaySpaces (every value type-checked, nil otherwise) - Layout pane: a row per profile with Apply, Bind (To This Display, To This Space, Remove Binding), Rename… and Delete, and a line saying what it is bound to - README: Zen mode, hotkeys per profile and item, Shortcuts actions and profile bindings in the comparison table and the feature list Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…y of opening items - ItemHints (Core, tested): home-row letters first, two-letter hints only once the single letters run out, never a hint that starts another; typed letters pick, wait or miss - ItemHintsPanel: a key panel under the menu bar with every item in bar order (visible, hidden, always hidden, separated), its picture or name and its letter; letters pick, Delete takes one back, Escape or a click elsewhere closes; each hint is a button VoiceOver reads as "A, Wi-Fi"; needs no Screen Recording - HotkeyAction.showItemHints = "ShowItemHints" appended last; recorder "Open an item by letter" in Menu Bar Items - The Shelf (left and right click), the search and groups now open items through MenuBarItemManager.openItem (ItemOpener.swift), like item hotkeys and the Shortcuts action; their three copies and MenuBarItemActions are removed Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…ceOver actions - LayoutKeys (Core, tested): arrows move the focus within a section and between sections, Option-arrows and Command-1/2/3 move the item, Return or Space opens its menu; moving within a section is refused on macOS 27 - Layout pane: items take the keyboard focus with the system focus ring and handle the keys; LayoutBarRouter moves the focus between the section rows; macOS 27 beeps and says "macOS orders the items within each section." - Undo and redo: every Layout pane move (keyboard or drop) registers its inverse on the Settings window's undo manager (before 27 back next to the former neighbour, on 27 the former section); undoing registers the redo at once; profile save, delete, rename and bind restore the profile list and its hotkeys without touching the bar; deleting asks first and says it can be undone; the hidden Edit menu keeps its key equivalents, so Command-Z, Copy and Paste work in holzBar's windows - VoiceOver: layout items are buttons read as "<name>, <section>" with Move to Visible/Hidden/Always Hidden, Move Left/Right (before 27) and Set Hotkey…; every move is announced; Shelf items are buttons with Open and Open Menu - Shelf: opened with a section hotkey it takes keys: Left/Right highlight, Return or Space opens through openItem, Escape closes - Scripts/macos27/layout-ax.swift accepts the button role Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…ng items show briefly - THAW-13: "Temporarily shown item delay" becomes "Hide opened items again after" (0 to 30 s, stored under TempShowInterval; a stored value above 30 reads as 30), counted from when the item's menu closes: before macOS 27 the rehide waits the delay once the menu is seen closed, on macOS 27 ItemClicker27 waits it before ending the temporary show - "Open hidden items in the menu bar" (OpenHiddenItemsInMenuBar, on by default): off, openItem presses a hidden item through Accessibility off the main thread with a 0.25 s messaging timeout, and shows it as before when the app does not take the press - THAW-12: ChangeReveal (Core, tested): 1 s debounce, one reveal per item every 30 s, nothing in Zen mode or for a visible item; ItemChangeWatcher observes kAXTitleChangedNotification and kAXValueChangedNotification on the items marked "Show When It Changes" (RevealOnChangeItems) only, set up again when the item list changes; MenuBarManager.revealBriefly shows the item for 5 s; one bounded wait per batch, no timer, no polling - The Open Menu Bar Item shortcut no longer waits until the item hides again - README: rows and features for item hints, keyboard and VoiceOver, opened items and Show When It Changes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
… coloured folders - ItemIconChoice (Core, tested): chosen image, then the capture, then the app icon, then the name; "Use App Icon" wins over a capture; stored values "app" and "file:<name>.png" only, never a path; HexColor for group colors - ItemIconStore: Choose Image… reads the file once from the open panel, scales it off the main thread with ImageIO to at most 64 points high at 2x and stores a PNG in Application Support/holzBar/ItemIcons; Use App Icon, Reset Image; choices in the ItemIcons setting (synced, images stay local) - The Shelf, the search, the Layout pane, the item hints and the group panel show the same image; without Screen Recording the Shelf shows the items with their apps' icons next to the hint instead of the hint alone - Groups as folders: a color (color well, tinted symbol in the menu bar, colored name in the panel) and an image of the user's choice instead of the symbol; older groups decode unchanged Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…nts, system glass - BorderStyle and BorderPattern (Core, tested): solid, dashed (6 and 3 widths) and dotted (round dots every two widths); the border of the bar and of the shapes is stroked with the pattern - WallpaperPalette (Core, tested), adapted from Thaw (NOTICE): the dominant colors of the desktop picture strip, read from its file by DesktopPicture.palette(for:height:) with no capture and no permission - Tints: "Follow Wallpaper" (a gradient of the two dominant colors, renewed on wallpaper, Space and screen changes), "System Glass" (an NSGlassEffectView masked to the shape, macOS 26 and later; hidden in the picker before) and "Use Accent Color" for the solid tint, updated on systemColorsDidChangeNotification - Tolerant decoding: an unknown tint kind reads as no tint and an unknown border style as solid, so older and newer appearances import unchanged - Editor: Border Style picker, the new tint kinds and Use Accent Color Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
SYNC-01 (user decision): settings sync is no longer limited to iCloud Drive. - SettingsSyncLocation (Core, tested): the chosen folder from its bookmark, iCloud Drive without a choice (stored as the choice, so existing iCloud users keep syncing without a question), never a silent switch to iCloud Drive when the chosen folder cannot be found; the file is holzBar/Settings.plist in the folder; folder names for people - SettingsSync: the folder is chosen with an NSOpenPanel and kept as a bookmark (SettingsSyncFolderBookmark, stays on this Mac, stale bookmarks are stored again); reads and writes keep file coordination; a file system event source on the folder notices files that Nextcloud, Dropbox, OneDrive or Syncthing replace without coordination; no polling, no network code - Advanced pane: "Sync settings between your Macs" with the folder's name, Change… and Turn Off (Turn On… while off) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…mansh - Localizable, InfoPlist and AppShortcuts String Catalogs with German (Swiss spelling), French, Italian and Romansh translations of every user-visible text; holzBar and holzBar Shelf stay untranslated - AppKit alerts, menus, tooltips, panels and errors go through String(localized:); interpolated SwiftUI keys instead of concatenation - knownRegions en, Base, de, fr, it, rm; macOS's per-app language picks it - strings job in CI: strings-check.py proves every text has its four translations with the same format specifiers - README: languages, folders and item images, borders and tints, settings sync through any synced folder, permissions table Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…ents Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…mpling - Actions with @parameter properties and the App Shortcuts provider are main-actor isolated: nonisolated cannot apply to the mutable parameter properties - The wallpaper palette samples its pixels in a loop the type checker handles in time - README: 338 unit tests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…ts metadata ship - README: the app size of this build (16912 KB) - build job: every language's compiled catalog and Metadata.appintents must be in the built app - 05.1.1.1-03 summary: CI results and fixes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
…con claim - build job: listing a language folder that does not exist no longer ends the step; the step lists the app's resources - README: without Screen Recording, the holzBar Shelf and the search show app icons (the Layout pane still asks for the permission) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
holzcloud
marked this pull request as ready for review
October 3, 2026 08:39
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.
Fixes and features from the other Ice fork, Thaw (GPL-3.0), and from the open pull requests and issues of the original Ice by Jordan Baird. Two phases share this pull request: 05.1.1 Thaw fixes and speed and 05.1.1.1 Thaw features. Code adapted from Thaw is credited in NOTICE (one line per file).
Done — Phase 05.1.1
Plan 05.1.1-01: input, robustness, hardening
ApplicationMenuFrames); hit tests, hiding app menus, temporary showing and the overlay read the cache; macOS 27 item bounds asked on the main thread come from the last read.MoveCircuitBreaker); Layout pane and Shelf moves always go through. holzBar rests while locked, asleep or switched away and settles 2 s after. The tint and shape stand on every desktop, follow the item list, reveals and macOS 27 concealment, step aside in fullscreen, and come back after sleep and login.Plan 05.1.1-02: identity, menus, Dock icon, URL audit
holzbar://profile/<name>asks before it rearranges the bar (Cancel is the default); every URL command's effect is documented inIntegrations/Raycast/README.md.Plan 05.1.1-03: macOS 27 displays and notch, no screenshots, docs
ItemClicker27; bundleless items are disabled in the Layout pane with a tooltip; settings without effect are hidden on 27; the wallpaper window is found under WindowManager; a dropped holzBar icon is put back.docs/upstream-bugs.mdis up to date (#1005, #1007, #974, #968, #988, #959, #979, #961, #976).README (05.1.1): new rows in "holzBar vs. Ice and Thaw", the feature list, the macOS 27 section and the Screen Recording row.
Done — Phase 05.1.1.1
Plan 05.1.1.1-01: Zen mode, Shortcuts, hotkeys per profile and item, profiles per display or Space
holzbar://zen/toggleor Shortcuts, and optionally on its own while a display is mirrored or the screen is shared (screen sharing agent and mirror state from notifications; no permission, no polling).Plan 05.1.1.1-02: item hints, keyboard and VoiceOver, rehide, change reveal
Plan 05.1.1.1-03: images and folders, appearance, sync, languages
String(localized:), astringsCI job that proves every text has its four translations. macOS's per-app language chooses it. The translations are machine-written and wait for a reader.README: new comparison rows, selling point "Five languages", feature list, permissions ("A folder you choose"), 338 unit tests, app size 16.5 MB. CI also checks that every language and the App Intents metadata are in the built app.
Before merging (macOS 26 and 27)
05.1.1-01
kill -STOP <pid>), then hover, click the menu bar and type for 30 s: the pointer, clicks and keys never stall (kill -CONTafterwards).log stream --predicate 'subsystem == "com.holzcloud.holzBar"' --level debug | grep 'after the click'shows about 70 ms or less.defaults write com.holzcloud.holzBar Hotkeys -dict-add ToggleHiddenSection -data 5b39393939392c3235365d, relaunch: ignored without a crash.05.1.1-02
open "holzbar://profile/Work"asks; Cancel (Return or Escape) leaves the bar unchanged.05.1.1-03
05.1.1.1-01
open holzbar://show/hiddenis ignored; holzBar's icon and the section hotkey still show them. The Zen mode hotkey andopen holzbar://zen/toggletoggle it; Shortcuts lists "Toggle Zen Mode" and it works.lsappinfo list | grep -i screensharingduring a session lists the sharing agent.05.1.1.1-02
05.1.1.1-03
tccutil reset ScreenCapture com.holzcloud.holzBar) the Shelf and the search show app icons. A group with a colour and an image shows them in its icon and panel.Website
Rows for the comparison table on https://holzcloud.ch/holzbar (Ice 0.11.12 / Thaw 3.0 beta / holzBar), all added in this pull request:
Changed rows: "Settings sync checks for changes" → when the synced folder delivers them, no polling (Thaw: — no sync); "Unit tests run on every change" → 338; "App size" → 16.5 MB. Selling points: "Five languages" (English, German, French, Italian and Romansh); "More features" now names folders, Zen mode, Shortcuts actions and settings sync through any folder. Permissions: "A folder you choose" replaces "iCloud Drive file"; without Screen Recording the Shelf and the search show app icons.
🤖 Generated with Claude Code
https://claude.ai/code/session_01BSzFQk1ZzGXFVBDZMYq8eu
Generated by Claude Code
Generated by Claude Code