Skip to content

Fix issues 370-375#376

Open
Anton-Horn wants to merge 10 commits into
mainfrom
fix/issues-370-375
Open

Fix issues 370-375#376
Anton-Horn wants to merge 10 commits into
mainfrom
fix/issues-370-375

Conversation

@Anton-Horn

@Anton-Horn Anton-Horn commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

One commit per issue, plus follow-up tweaks.

  • Top-right overlay badges overlap panel content #370: worktree chip stays as the top-right overlay but is collapsed to its icon until hovered, where it grows to the full title. The markdown Source/Preview toggle gets its own header row. Neither covers content anymore.
  • Shift+Space tool toggle swallows spaces while typing #371: tool toggle default is now Ctrl+Space, so typing ':' or '(' followed by a space no longer triggers it.
  • Allow disabling a keyboard shortcut #372: shortcut rows have an x button to disable a binding. Custom bindings now also persist to settings.json (customShortcuts), they were session-only before.
  • Markdown preview code blocks have no copy button #373: markdown preview code blocks get a hover copy button, same affordance as agent chat.
  • BUG: Can't set the editor font family on windows #374: new editorFontFamily setting (Settings > Appearance), wired into Monaco with live updates. Blank keeps the old default stack.
  • Workspace toggle expand all - collapse all #375: expand/collapse all button in the Workspace sidebar header.
  • Tooltips: all icon-only buttons now use the portal Tooltip (native title is flaky in Electron). Tooltip moved to ui/, right placement added, SidebarHeaderButton wraps its title prop automatically.
  • Terminal: phantom rows-changing resizes (zoom render-scale steps, the safeFit subpixel guard, the transfer nudge) no longer reach the PTY. Ink TUIs like Claude Code leak a duplicate frame into scrollback on every rows change when their frame fills the viewport, which showed up as doubled panel content.

Not addressed: the worktree tint default feedback in #372, that's a product call.

…cuts

Shift+Space fired during normal typing and swallowed the space (#371).
Shortcut rows in Settings get an x button that clears the binding; an
empty-key binding never matches. Custom bindings and disabled shortcuts
now persist to settings.json via a new customShortcuts key, so overrides
survive a restart (#372).
New editorFontFamily setting wired end to end: settings schema,
Appearance UI text field, Monaco create options, and a live
updateOptions + remeasureFonts on change. Blank keeps the previous
built-in stack.
Fenced blocks in the markdown preview get the same hover Copy
affordance as agent chat code blocks, with a brief check confirmation.
The worktree chip moves from an absolute overlay on the panel content
to the right end of the dock tab strip; the markdown Source/Preview
toggle moves into a slim header row above the editor instead of
floating over the first line.
Lift per-workspace expansion state from WorkspaceTab into ProjectList
and add a header toggle next to the New Workspace button.
…Space

The chip stays as a top-right overlay but renders icon-only until
hovered, growing horizontally to the full worktree title. Tool toggle
default drops Shift: plain Ctrl+Space.
The icon buttons only had native title attributes, which are flaky in
Electron, so they read as unlabeled. Wrap them in the portal Tooltip
used by SearchView, with clearer labels (Fetch from remote, Pop latest
stash, Stage file, ...) and aria-labels.
Native title attributes are unreliable in Electron, so icon buttons
across the app effectively had no tooltips. Move Tooltip to ui/, add a
right placement for the sidebar rail, auto-wrap SidebarHeaderButton's
title prop, and wrap the remaining icon-only buttons (file explorer,
browser bar, dock tab bar, canvas node chrome, agent chat, providers,
settings, dialogs) with aria-labels. Informational titles on text rows
stay native.
TUIs with an Ink-style renderer (Claude Code) leak a duplicate frame
into scrollback on every rows change while their frame is taller than
the viewport, which showed up as doubled panel content that only a
large vertical resize cleared. Cate was generating rows changes the
user never asked for:

- render-scale steps during canvas zoom flipped rows by 1 via cell-px
  rounding; fit() gains a preserveGrid option that discards those
  deltas so the PTY never sees the phantom SIGWINCH
- the safeFit sub-pixel guard compared integer offsetHeights and
  intermittently shaved a row; it now measures fractional rect heights
- the cross-window transfer nudge resized rows-1 then rows; it now
  nudges cols instead, forcing the same full repaint without touching
  the fragile axis
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant