detached fc47398

tweak(tui): status bar spacing + muted busy-segment dash

Two small polishes.

- StatusBar: the busy branch used to emit three pad groups
  before the provider/model block (pad + busyPrefix + pad +
  pad). On screen that read as six spaces between the elapsed
  counter and "(openai) gpt-5.4", which looked like a layout
  bug. Collapsed to two pads so the gap matches the idle path
  exactly: 2 spaces before the model block, 2 spaces between
  the busy segment and the model block.

- The separator between the spinner message and the elapsed
  counter was rendered as a plain unstyled "-", which the
  terminal painted in the default foreground colour (white on
  my dark theme) and stood out against the muted counter next
  to it. Pulled the dash into its own FG256(Muted, ...) call so
  the whole tail ("- 15s") shares the same grey tone.
commit
fc47398717243df2ffc18075c225af65d1594fb3
author
patriceckhart · · 2026-04-21 15:53 UTC
parent
1f28b62
signature
unsigned
refs
tag: v0.0.81
2 files · +6 -1
M internal/agent/modes/interactive.go +2 -1
@@ -719,9 +719,10 @@ func (i *Interactive) redraw() {
719719 // drifts every second and shouldn't grab focus.
720720 var busyPrefix string
721721 if i.busy {
722- busyPrefix = fmt.Sprintf("%s %s - %s",
722+ busyPrefix = fmt.Sprintf("%s %s %s %s",
723723 i.cfg.Theme.FG256(i.cfg.Theme.Assistant, i.spin.Frame()),
724724 i.cfg.Theme.FG256(i.cfg.Theme.Assistant, i.spin.Message()),
725+ i.cfg.Theme.FG256(i.cfg.Theme.Muted, "-"),
725726 i.cfg.Theme.FG256(i.cfg.Theme.Muted, i.spin.Elapsed().String()),
726727 )
727728 }
@@ -719,9 +719,10 @@ func (i *Interactive) redraw() {
719 // drifts every second and shouldn't grab focus.719 // drifts every second and shouldn't grab focus.
720 var busyPrefix string720 var busyPrefix string
721 if i.busy {721 if i.busy {
722- busyPrefix = fmt.Sprintf("%s %s - %s",722+ busyPrefix = fmt.Sprintf("%s %s %s %s",
723 i.cfg.Theme.FG256(i.cfg.Theme.Assistant, i.spin.Frame()),723 i.cfg.Theme.FG256(i.cfg.Theme.Assistant, i.spin.Frame()),
724 i.cfg.Theme.FG256(i.cfg.Theme.Assistant, i.spin.Message()),724 i.cfg.Theme.FG256(i.cfg.Theme.Assistant, i.spin.Message()),
725+ i.cfg.Theme.FG256(i.cfg.Theme.Muted, "-"),
725 i.cfg.Theme.FG256(i.cfg.Theme.Muted, i.spin.Elapsed().String()),726 i.cfg.Theme.FG256(i.cfg.Theme.Muted, i.spin.Elapsed().String()),
726 )727 )
727 }728 }
M internal/tui/view.go +4 -0
@@ -1374,6 +1374,10 @@ func StatusBar(p StatusBarParams) []string {
13741374 // segments. Wrapping the whole thing here would override
13751375 // those choices. The pad itself needs no color (it's spaces).
13761376 leftBuilder.WriteString(pad + p.BusyPrefix)
1377+ // Exactly one pad (2 spaces) between the busy segment and
1378+ // the provider/model block. The leading pad above covers
1379+ // the left indent.
1380+ } else {
13771381 leftBuilder.WriteString(pad)
13781382 }
13791383 leftBuilder.WriteString(pad)
@@ -1374,6 +1374,10 @@ func StatusBar(p StatusBarParams) []string {
1374 // segments. Wrapping the whole thing here would override1374 // segments. Wrapping the whole thing here would override
1375 // those choices. The pad itself needs no color (it's spaces).1375 // those choices. The pad itself needs no color (it's spaces).
1376 leftBuilder.WriteString(pad + p.BusyPrefix)1376 leftBuilder.WriteString(pad + p.BusyPrefix)
1377+ // Exactly one pad (2 spaces) between the busy segment and
1378+ // the provider/model block. The leading pad above covers
1379+ // the left indent.
1380+ } else {
1377 leftBuilder.WriteString(pad)1381 leftBuilder.WriteString(pad)
1378 }1382 }
1379 leftBuilder.WriteString(pad)1383 leftBuilder.WriteString(pad)

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 476

↑↓ moveenter openesc close