summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2021-04-04 13:42:11 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2021-04-04 13:43:16 +0900
commit8b36a4cb19771f44e093b5b1341b9080d7255494 (patch)
treeb7e26f67f86daf91fdba55bf7dee78014538aa31
parentc8cd94a77294c1cac22e7559126d4671da898291 (diff)
Speed up preview switching when doing partial rendering
Fix #2417
-rw-r--r--src/terminal.go11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/terminal.go b/src/terminal.go
index 59851a0c..3b14a2e6 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -1968,6 +1968,7 @@ func (t *Terminal) Loop() {
}()
// Goroutine 2 periodically requests rendering
+ rendered := util.NewAtomicBool(false)
go func(version int64) {
lines := []string{}
spinner := makeSpinner(t.unicode)
@@ -1982,6 +1983,7 @@ func (t *Terminal) Loop() {
if spinnerIndex >= 0 {
spin := spinner[spinnerIndex%len(spinner)]
t.reqBox.Set(reqPreviewDisplay, previewResult{version, lines, offset, spin})
+ rendered.Set(true)
offset = -1
}
spinnerIndex++
@@ -2001,6 +2003,7 @@ func (t *Terminal) Loop() {
}
if err != nil {
t.reqBox.Set(reqPreviewDisplay, previewResult{version, lines, offset, ""})
+ rendered.Set(true)
break Loop
}
}
@@ -2022,7 +2025,13 @@ func (t *Terminal) Loop() {
util.KillCommand(cmd)
t.eventBox.Set(EvtQuit, code)
} 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 {
case <-timer.C:
util.KillCommand(cmd)