Speed up preview switching when doing partial rendering

Fix #2417
pull/2440/head
Junegunn Choi 3 years ago
parent c8cd94a772
commit 8b36a4cb19
No known key found for this signature in database
GPG Key ID: 254BC280FEF9C627

@ -1968,6 +1968,7 @@ func (t *Terminal) Loop() {
}() }()
// Goroutine 2 periodically requests rendering // Goroutine 2 periodically requests rendering
rendered := util.NewAtomicBool(false)
go func(version int64) { go func(version int64) {
lines := []string{} lines := []string{}
spinner := makeSpinner(t.unicode) spinner := makeSpinner(t.unicode)
@ -1982,6 +1983,7 @@ func (t *Terminal) Loop() {
if spinnerIndex >= 0 { if spinnerIndex >= 0 {
spin := spinner[spinnerIndex%len(spinner)] spin := spinner[spinnerIndex%len(spinner)]
t.reqBox.Set(reqPreviewDisplay, previewResult{version, lines, offset, spin}) t.reqBox.Set(reqPreviewDisplay, previewResult{version, lines, offset, spin})
rendered.Set(true)
offset = -1 offset = -1
} }
spinnerIndex++ spinnerIndex++
@ -2001,6 +2003,7 @@ func (t *Terminal) Loop() {
} }
if err != nil { if err != nil {
t.reqBox.Set(reqPreviewDisplay, previewResult{version, lines, offset, ""}) t.reqBox.Set(reqPreviewDisplay, previewResult{version, lines, offset, ""})
rendered.Set(true)
break Loop break Loop
} }
} }
@ -2022,7 +2025,13 @@ func (t *Terminal) Loop() {
util.KillCommand(cmd) util.KillCommand(cmd)
t.eventBox.Set(EvtQuit, code) t.eventBox.Set(EvtQuit, code)
} else { } else {
timer := time.NewTimer(previewCancelWait) // We can immediately kill a long-running preview program
// once we started rendering its partial output
delay := previewCancelWait
if rendered.Get() {
delay = 0
}
timer := time.NewTimer(delay)
select { select {
case <-timer.C: case <-timer.C:
util.KillCommand(cmd) util.KillCommand(cmd)

Loading…
Cancel
Save