Skip to content

Commit acb85d6

Browse files
authored
refactor: avoid storing current preview separately (gokcehan#2300)
1 parent 0df0589 commit acb85d6

File tree

4 files changed

+43
-56
lines changed

4 files changed

+43
-56
lines changed

app.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -423,9 +423,6 @@ func (app *app) loop() {
423423
if curr.path != oldCurrPath {
424424
app.ui.loadFile(app, true)
425425
}
426-
if d.path == curr.path {
427-
app.ui.dirPrev = d
428-
}
429426
}
430427

431428
app.watchDir(d)
@@ -447,7 +444,6 @@ func (app *app) loop() {
447444
curr, err := app.nav.currFile()
448445
if err == nil {
449446
if r.path == curr.path {
450-
app.ui.regPrev = r
451447
app.ui.sxScreen.forceClear = true
452448
if gOpts.preload && r.volatile {
453449
app.ui.loadFile(app, true)

eval.go

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,12 @@ func (e *setExpr) eval(app *app, _ []string) {
7474
err = applyBoolOpt(&gOpts.dirfirst, e)
7575
if err == nil {
7676
app.nav.sort()
77-
app.ui.sort()
7877
}
7978
case "dironly", "nodironly", "dironly!":
8079
err = applyBoolOpt(&gOpts.dironly, e)
8180
if err == nil {
8281
app.nav.sort()
8382
app.nav.position()
84-
app.ui.sort()
8583
app.ui.loadFile(app, true)
8684
}
8785
case "dirpreviews", "nodirpreviews", "dirpreviews!":
@@ -98,7 +96,6 @@ func (e *setExpr) eval(app *app, _ []string) {
9896
if err == nil {
9997
app.nav.sort()
10098
app.nav.position()
101-
app.ui.sort()
10299
app.ui.loadFile(app, true)
103100
}
104101
case "history", "nohistory", "history!":
@@ -110,15 +107,13 @@ func (e *setExpr) eval(app *app, _ []string) {
110107
if err == nil {
111108
app.nav.sort()
112109
app.nav.position()
113-
app.ui.sort()
114110
app.ui.loadFile(app, true)
115111
}
116112
case "ignoredia", "noignoredia", "ignoredia!":
117113
err = applyBoolOpt(&gOpts.ignoredia, e)
118114
if err == nil {
119115
app.nav.sort()
120116
app.nav.position()
121-
app.ui.sort()
122117
app.ui.loadFile(app, true)
123118
}
124119
case "incfilter", "noincfilter", "incfilter!":
@@ -155,7 +150,6 @@ func (e *setExpr) eval(app *app, _ []string) {
155150
err = applyBoolOpt(&gOpts.reverse, e)
156151
if err == nil {
157152
app.nav.sort()
158-
app.ui.sort()
159153
}
160154
case "roundbox", "noroundbox", "roundbox!":
161155
err = applyBoolOpt(&gOpts.roundbox, e)
@@ -168,15 +162,13 @@ func (e *setExpr) eval(app *app, _ []string) {
168162
if err == nil {
169163
app.nav.sort()
170164
app.nav.position()
171-
app.ui.sort()
172165
app.ui.loadFile(app, true)
173166
}
174167
case "smartdia", "nosmartdia", "smartdia!":
175168
err = applyBoolOpt(&gOpts.smartdia, e)
176169
if err == nil {
177170
app.nav.sort()
178171
app.nav.position()
179-
app.ui.sort()
180172
app.ui.loadFile(app, true)
181173
}
182174
case "watch", "nowatch", "watch!":
@@ -225,7 +217,6 @@ func (e *setExpr) eval(app *app, _ []string) {
225217
}
226218
app.nav.sort()
227219
app.nav.position()
228-
app.ui.sort()
229220
app.ui.loadFile(app, true)
230221
case "findlen":
231222
n, err := strconv.Atoi(e.val)
@@ -254,7 +245,6 @@ func (e *setExpr) eval(app *app, _ []string) {
254245
gOpts.hiddenfiles = toks
255246
app.nav.sort()
256247
app.nav.position()
257-
app.ui.sort()
258248
app.ui.loadFile(app, true)
259249
case "ifs":
260250
gOpts.ifs = e.val
@@ -401,7 +391,6 @@ func (e *setExpr) eval(app *app, _ []string) {
401391
}
402392
gOpts.sortby = method
403393
app.nav.sort()
404-
app.ui.sort()
405394
case "statfmt":
406395
gOpts.statfmt = e.val
407396
case "tabstop":
@@ -485,29 +474,25 @@ func (e *setLocalExpr) eval(app *app, _ []string) {
485474
err = applyLocalBoolOpt(gLocalOpts.dirfirst, gOpts.dirfirst, e)
486475
if err == nil {
487476
app.nav.sort()
488-
app.ui.sort()
489477
}
490478
case "dironly", "nodironly", "dironly!":
491479
err = applyLocalBoolOpt(gLocalOpts.dironly, gOpts.dironly, e)
492480
if err == nil {
493481
app.nav.sort()
494482
app.nav.position()
495-
app.ui.sort()
496483
app.ui.loadFile(app, true)
497484
}
498485
case "hidden", "nohidden", "hidden!":
499486
err = applyLocalBoolOpt(gLocalOpts.hidden, gOpts.hidden, e)
500487
if err == nil {
501488
app.nav.sort()
502489
app.nav.position()
503-
app.ui.sort()
504490
app.ui.loadFile(app, true)
505491
}
506492
case "reverse", "noreverse", "reverse!":
507493
err = applyLocalBoolOpt(gLocalOpts.reverse, gOpts.reverse, e)
508494
if err == nil {
509495
app.nav.sort()
510-
app.ui.sort()
511496
}
512497
case "info":
513498
if e.val == "" {
@@ -532,7 +517,6 @@ func (e *setLocalExpr) eval(app *app, _ []string) {
532517
}
533518
gLocalOpts.sortby[e.path] = method
534519
app.nav.sort()
535-
app.ui.sort()
536520
default:
537521
err = fmt.Errorf("unknown option: %s", e.opt)
538522
}
@@ -1772,7 +1756,6 @@ func (e *callExpr) eval(app *app, _ []string) {
17721756
return
17731757
}
17741758
app.nav.sort()
1775-
app.ui.sort()
17761759
case "clearmaps":
17771760
// leave `:` and cmaps bound so the user can still exit using `:quit`
17781761
clear(gOpts.nkeys)

nav.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,14 @@ func (nav *nav) sort() {
987987
d.sort()
988988
d.sel(name, nav.height)
989989
}
990+
991+
if curr, err := nav.currFile(); err == nil {
992+
if d, ok := nav.dirCache[curr.path]; ok {
993+
name := d.name()
994+
d.sort()
995+
d.sel(name, nav.height)
996+
}
997+
}
990998
}
991999

9921000
func (nav *nav) setFilter(filter []string) error {

ui.go

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -244,21 +244,16 @@ func (win *win) printRight(screen tcell.Screen, y int, st tcell.Style, s string)
244244
}
245245

246246
func (win *win) printReg(screen tcell.Screen, reg *reg, previewLoading bool, sxs *sixelScreen) {
247-
if reg == nil {
248-
return
249-
}
250-
251-
st := tcell.StyleDefault
252-
253247
if reg.loading {
254248
if previewLoading {
255-
st = st.Reverse(true)
249+
st := tcell.StyleDefault.Reverse(true)
256250
win.print(screen, 2, 0, st, "loading...")
257251
}
258252
return
259253
}
260254

261255
if !reg.sixel {
256+
st := tcell.StyleDefault
262257
for i, l := range reg.lines {
263258
if i > win.h-1 {
264259
break
@@ -642,8 +637,6 @@ type ui struct {
642637
msgWin *win
643638
menuWin *win
644639
msg string
645-
regPrev *reg
646-
dirPrev *dir
647640
exprChan chan expr
648641
keyChan chan string
649642
tevChan chan tcell.Event
@@ -721,15 +714,6 @@ func (ui *ui) renew() {
721714
ui.menuWin.renew(wtot, 1, 0, htot-2)
722715
}
723716

724-
func (ui *ui) sort() {
725-
if ui.dirPrev == nil {
726-
return
727-
}
728-
name := ui.dirPrev.name()
729-
ui.dirPrev.sort()
730-
ui.dirPrev.sel(name, ui.wins[0].h)
731-
}
732-
733717
func (ui *ui) echo(msg string) {
734718
ui.msg = msg
735719
}
@@ -784,9 +768,9 @@ func (ui *ui) loadFile(app *app, volatile bool) {
784768
}
785769

786770
if curr.isPreviewable() {
787-
ui.regPrev = app.nav.loadReg(curr.path, volatile)
771+
app.nav.loadReg(curr.path, volatile)
788772
} else if curr.IsDir() {
789-
ui.dirPrev = app.nav.loadDir(curr.path)
773+
app.nav.loadDir(curr.path)
790774
}
791775
}
792776

@@ -1146,6 +1130,30 @@ func (ui *ui) drawRulerFile(nav *nav) {
11461130
ui.msgWin.printRight(ui.screen, 0, tcell.StyleDefault, right)
11471131
}
11481132

1133+
func (ui *ui) drawPreview(nav *nav, context *dirContext) {
1134+
curr, err := nav.currFile()
1135+
if err != nil {
1136+
return
1137+
}
1138+
1139+
win := ui.wins[len(ui.wins)-1]
1140+
ui.sxScreen.clearSixel(win, ui.screen, curr.path)
1141+
1142+
if gOpts.preview {
1143+
if curr.isPreviewable() {
1144+
if reg, ok := nav.regCache[curr.path]; ok {
1145+
win.printReg(ui.screen, reg, nav.previewLoading, &ui.sxScreen)
1146+
}
1147+
} else if curr.IsDir() {
1148+
ui.sxScreen.lastFile = ""
1149+
if dir, ok := nav.dirCache[curr.path]; ok {
1150+
dirStyle := &dirStyle{colors: ui.styles, icons: ui.icons, role: Preview}
1151+
win.printDir(ui, dir, context, dirStyle)
1152+
}
1153+
}
1154+
}
1155+
}
1156+
11491157
func (ui *ui) drawBox() {
11501158
st := parseEscapeSequence(gOpts.borderfmt)
11511159

@@ -1275,20 +1283,7 @@ func (ui *ui) draw(nav *nav) {
12751283
ui.screen.ShowCursor(ui.msgWin.x+runeSliceWidth(prefix)+runeSliceWidth(left), ui.msgWin.y)
12761284
}
12771285

1278-
curr, err := nav.currFile()
1279-
if err == nil {
1280-
preview := ui.wins[len(ui.wins)-1]
1281-
ui.sxScreen.clearSixel(preview, ui.screen, curr.path)
1282-
if gOpts.preview {
1283-
if curr.isPreviewable() {
1284-
preview.printReg(ui.screen, ui.regPrev, nav.previewLoading, &ui.sxScreen)
1285-
} else if curr.IsDir() {
1286-
ui.sxScreen.lastFile = ""
1287-
preview.printDir(ui, ui.dirPrev, &context,
1288-
&dirStyle{colors: ui.styles, icons: ui.icons, role: Preview})
1289-
}
1290-
}
1291-
}
1286+
ui.drawPreview(nav, &context)
12921287

12931288
if gOpts.drawbox {
12941289
ui.drawBox()
@@ -1699,7 +1694,12 @@ func (ui *ui) readNormalEvent(ev tcell.Event, nav *nav) expr {
16991694
}
17001695
return &callExpr{"open", nil, 1}
17011696
}
1702-
dir = ui.dirPrev
1697+
1698+
var ok bool
1699+
dir, ok = nav.dirCache[curr.path]
1700+
if !ok {
1701+
return nil
1702+
}
17031703
} else {
17041704
dir = ui.dirOfWin(nav, wind)
17051705
if dir == nil {

0 commit comments

Comments
 (0)