detached faf772d

perf(core): use columnEdges in scrollBy

commit
faf772d6743d941534718c3436827be740650fb3
author
brice · · 2026-10-21 08:21 UTC
parent
02f068b
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
1 file · +6 -5
M internal/core/drag.go +6 -5
@@ -559,20 +559,21 @@ func (c *Core) edgeScroll(t time.Duration) bool {
559559 func (w *Workspace) scrollBy(dir int) bool {
560560 g := w.gap()
561561 n := len(w.Columns)
562- maxView := max(w.columnX(n-1)+w.columnWidth(n-1)+g-(w.Usable.X+w.Usable.W), 0)
562+ xs, ws := w.columnEdges()
563+ maxView := max(xs[n-1]+ws[n-1]+g-(w.Usable.X+w.Usable.W), 0)
563564 view := w.View
564565 if dir < 0 {
565566 // The first column not fully on screen at the left.
566567 for i := n - 1; i >= 0; i-- {
567- if w.columnX(i)-view < w.Usable.X+g {
568- view = w.columnX(i) - w.Usable.X - g
568+ if xs[i]-view < w.Usable.X+g {
569+ view = xs[i] - w.Usable.X - g
569570 break
570571 }
571572 }
572573 } else {
573574 for i := range n {
574- if w.columnX(i)+w.columnWidth(i)-view > w.Usable.X+w.Usable.W-g {
575- view = w.columnX(i) + w.columnWidth(i) + g - w.Usable.X - w.Usable.W
575+ if xs[i]+ws[i]-view > w.Usable.X+w.Usable.W-g {
576+ view = xs[i] + ws[i] + g - w.Usable.X - w.Usable.W
576577 break
577578 }
578579 }
@@ -559,20 +559,21 @@ func (c *Core) edgeScroll(t time.Duration) bool {
559 func (w *Workspace) scrollBy(dir int) bool {559 func (w *Workspace) scrollBy(dir int) bool {
560 g := w.gap()560 g := w.gap()
561 n := len(w.Columns)561 n := len(w.Columns)
562- maxView := max(w.columnX(n-1)+w.columnWidth(n-1)+g-(w.Usable.X+w.Usable.W), 0)562+ xs, ws := w.columnEdges()
563+ maxView := max(xs[n-1]+ws[n-1]+g-(w.Usable.X+w.Usable.W), 0)
563 view := w.View564 view := w.View
564 if dir < 0 {565 if dir < 0 {
565 // The first column not fully on screen at the left.566 // The first column not fully on screen at the left.
566 for i := n - 1; i >= 0; i-- {567 for i := n - 1; i >= 0; i-- {
567- if w.columnX(i)-view < w.Usable.X+g {568+ if xs[i]-view < w.Usable.X+g {
568- view = w.columnX(i) - w.Usable.X - g569+ view = xs[i] - w.Usable.X - g
569 break570 break
570 }571 }
571 }572 }
572 } else {573 } else {
573 for i := range n {574 for i := range n {
574- if w.columnX(i)+w.columnWidth(i)-view > w.Usable.X+w.Usable.W-g {575+ if xs[i]+ws[i]-view > w.Usable.X+w.Usable.W-g {
575- view = w.columnX(i) + w.columnWidth(i) + g - w.Usable.X - w.Usable.W576+ view = xs[i] + ws[i] + g - w.Usable.X - w.Usable.W
576 break577 break
577 }578 }
578 }579 }

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