v0.5.1 8e4df5c

frame_style_reuse_test.go RawHistoryFolder

1package core
2
3import "testing"
4
5func TestSetStyleReuse(t *testing.T) {
6	for _, rotated := range []bool{false, true} {
7		f := NewFrame(3, 2)
8		if rotated {
9			f.ScrollUp(0, 1, 1)
10		}
11		styles := []Style{DefaultStyle(), {Bold: true}, {Italic: true}, {Bold: true}, DefaultStyle()}
12		for _, style := range styles {
13			for repeat := range 3 {
14				for x := range f.Width {
15					cell := Cell{Rune: rune('a' + repeat), Style: style}
16					// Inactive RGB fields differ without changing canonical style.
17					cell.Style.ForegroundRGB = RGB{R: uint8(repeat + 1)}
18					index := f.offset(x, 0)
19					oldID := f.page.cells[index].styleID
20					sameStyle := f.page.styles[oldID].style == style.Canonical()
21					f.Set(x, 0, cell)
22					if got := f.page.cells[index].styleID; sameStyle && got != oldID {
23						t.Fatalf("equivalent style changed ID from %d to %d", oldID, got)
24					}
25					if got := f.Cell(x, 0); !got.Equal(cell) {
26						t.Fatalf("cell = %+v, want %+v", got, cell)
27					}
28					if err := f.CheckInvariants(); err != nil {
29						t.Fatal(err)
30					}
31				}
32			}
33		}
34	}
35}
36
37func BenchmarkFrameRewriteSameStyle(b *testing.B) {
38	f := NewFrame(182, 53)
39	row := make([]Cell, f.Width)
40	for x := range row {
41		row[x] = Cell{Rune: 'x', Style: Style{Bold: true}}
42	}
43	for y := range f.Height {
44		f.WriteRow(y, 0, row)
45	}
46	b.ReportAllocs()
47	for b.Loop() {
48		for y := range f.Height {
49			f.WriteRow(y, 0, row)
50		}
51	}
52}

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 2

Tags 13

↑↓ moveenter openesc close