v0.3.47 56b82c0

view_compact_mode_test.go RawHistoryFolder

1package tui
2
3import (
4	"encoding/json"
5	"strings"
6	"testing"
7
8	"github.com/patriceckhart/zot/packages/provider"
9)
10
11func compactModeUserMsg(text string) provider.Message {
12	return provider.Message{
13		Role:    provider.RoleUser,
14		Content: []provider.Content{provider.TextBlock{Text: text}},
15	}
16}
17
18func countGutterRows(plain string) int {
19	n := 0
20	for _, line := range strings.Split(plain, "\n") {
21		if strings.Contains(line, "▌") {
22			n++
23		}
24	}
25	return n
26}
27
28func TestCompactModeDropsUserBubblePadding(t *testing.T) {
29	spacious := View{Theme: Dark, Messages: []provider.Message{compactModeUserMsg("hello")}}
30	spaciousPlain := stripANSI(strings.Join(spacious.Build(80), "\n"))
31	if got := countGutterRows(spaciousPlain); got != 3 {
32		t.Fatalf("default user bubble should be 3 gutter rows, got %d:\n%s", got, spaciousPlain)
33	}
34
35	compact := View{Theme: Dark, CompactMode: true, Messages: []provider.Message{compactModeUserMsg("hello")}}
36	compactPlain := stripANSI(strings.Join(compact.Build(80), "\n"))
37	if got := countGutterRows(compactPlain); got != 1 {
38		t.Fatalf("compact mode user message should be 1 gutter row, got %d:\n%s", got, compactPlain)
39	}
40	if !strings.Contains(compactPlain, "▌ hello") {
41		t.Fatalf("compact mode lost user text or gutter:\n%s", compactPlain)
42	}
43}
44
45func TestCompactModeDropsToolBoxBorders(t *testing.T) {
46	args := json.RawMessage(`{"command":"echo hi"}`)
47	compact := View{
48		Theme:       Dark,
49		CompactMode: true,
50		ToolCalls: []ToolCallView{
51			{ID: "toolu_1", Name: "bash", Args: ShortArgs("bash", args), Result: "hi\n"},
52		},
53	}
54	compactPlain := stripANSI(strings.Join(compact.Build(80), "\n"))
55	if strings.ContainsAny(compactPlain, "┌└│┐┘") {
56		t.Fatalf("compact mode tool render still contains box glyphs:\n%s", compactPlain)
57	}
58	if !strings.Contains(compactPlain, "bash") || !strings.Contains(compactPlain, "hi") {
59		t.Fatalf("compact mode tool render lost header or output:\n%s", compactPlain)
60	}
61
62	spacious := View{
63		Theme: Dark,
64		ToolCalls: []ToolCallView{
65			{ID: "toolu_1", Name: "bash", Args: ShortArgs("bash", args), Result: "hi\n"},
66		},
67	}
68	spaciousPlain := stripANSI(strings.Join(spacious.Build(80), "\n"))
69	if !strings.ContainsAny(spaciousPlain, "┌└│┐┘") {
70		t.Fatalf("default tool render should contain box glyphs:\n%s", spaciousPlain)
71	}
72}

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