feat/data-dnd e05cb15

refresh_bench_test.go RawHistoryFolder

1package core
2
3import (
4	"testing"
5	"time"
6
7	"github.com/bnema/neferwl/internal/ports"
8)
9
10// BenchmarkRefreshShown is one publish's layout build on a screen of 24
11// windows, 20 of them with a rect motion and 6 more leaving: the cost of
12// matching the motions to the layout every frame. The layout is built in the
13// screen's reused buffers: 0 allocs/op (33 before).
14func BenchmarkRefreshShown(b *testing.B) {
15	var cfg ports.Config
16	cfg.Keyboard.CmdKey = "super"
17	cfg.Layout.MaxColumns = 4
18	cfg.Animations.On = true
19	cfg.Animations.Slowdown = 10
20	c, err := New(cfg, Channels{Scenes: make(chan []ports.Scene, 1), Commands: make(chan ports.ClientCommand, 64)}, Options{})
21	if err != nil {
22		b.Fatal(err)
23	}
24	c.addScreen(ports.OutputInfo{Name: "A", Width: 3000, Height: 2000})
25	sc := c.cur()
26	for id := WindowID(1); id <= 30; id++ {
27		sc.mon.AddWindow(id)
28	}
29	sc.arrange()
30	c.refreshShown()
31	t0 := time.Now()
32	sc.rects = make(map[WindowID]rectMotion, 26)
33	sp := viewSpring(100, 0)
34	for i, p := range sc.settledLayout {
35		if i >= 20 {
36			break
37		}
38		sc.rects[p.ID] = rectMotion{
39			x: c.spring(sp, t0), y: c.spring(sp, t0), w: c.spring(sp, t0), h: c.spring(sp, t0),
40			dx: 100, dy: 100, dw: 100, dh: 100,
41			fade: c.spring(levelSpring(0.5, 0), t0), df: 0.5, scale: true,
42		}
43	}
44	for _, p := range sc.settledLayout[24:] {
45		sc.mon.RemoveWindow(p.ID)
46		c.leaveFrom(sc, p, nil, t0)
47	}
48	sc.rectsWS = sc.mon.Current()
49	c.refreshShown()
50	if len(sc.rects) != 26 {
51		b.Fatalf("rects %d", len(sc.rects))
52	}
53	b.ReportAllocs()
54	b.ResetTimer()
55	for range b.N {
56		c.refreshShown()
57	}
58	if len(sc.rects) != 26 {
59		b.Fatalf("rects %d after", len(sc.rects))
60	}
61}

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 25

Tags 10

↑↓ moveenter openesc close