summaryrefslogtreecommitdiffstats
path: root/pkg/tasks/tasks.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2021-10-17 19:01:02 +1100
committerJesse Duffield <jessedduffield@gmail.com>2021-10-17 19:45:57 +1100
commitd672b7342f12c64112cd6b59fb5e4286a7cb92b4 (patch)
tree4b4c51680b05217708ce7ca596b6a47ffc170838 /pkg/tasks/tasks.go
parente7c27b6f4aef44a2391dd207e1321008b5d1dcff (diff)
stop resetting scroll all the time
Diffstat (limited to 'pkg/tasks/tasks.go')
-rw-r--r--pkg/tasks/tasks.go43
1 files changed, 35 insertions, 8 deletions
diff --git a/pkg/tasks/tasks.go b/pkg/tasks/tasks.go
index 8287b3927..ba86317ac 100644
--- a/pkg/tasks/tasks.go
+++ b/pkg/tasks/tasks.go
@@ -31,15 +31,36 @@ type ViewBufferManager struct {
Log *logrus.Entry
newTaskId int
readLines chan int
+ taskKey string
+ onNewKey func()
// beforeStart is the function that is called before starting a new task
- beforeStart func()
- refreshView func()
- flushStaleCells func()
+ beforeStart func()
+ refreshView func()
+ onEndOfInput func()
}
-func NewViewBufferManager(log *logrus.Entry, writer io.Writer, beforeStart func(), refreshView func(), flushStaleCells func()) *ViewBufferManager {
- return &ViewBufferManager{Log: log, writer: writer, beforeStart: beforeStart, refreshView: refreshView, flushStaleCells: flushStaleCells, readLines: make(chan int, 1024)}
+func (m *ViewBufferManager) GetTaskKey() string {
+ return m.taskKey
+}
+
+func NewViewBufferManager(
+ log *logrus.Entry,
+ writer io.Writer,
+ beforeStart func(),
+ refreshView func(),
+ onEndOfInput func(),
+ onNewKey func(),
+) *ViewBufferManager {
+ return &ViewBufferManager{
+ Log: log,
+ writer: writer,
+ beforeStart: beforeStart,
+ refreshView: refreshView,
+ onEndOfInput: onEndOfInput,
+ readLines: make(chan int, 1024),
+ onNewKey: onNewKey,
+ }
}
func (m *ViewBufferManager) ReadLines(n int) {
@@ -117,11 +138,11 @@ func (m *ViewBufferManager) NewCmdTask(r io.Reader, cmd *exec.Cmd, prefix string
if !ok {
// if we're here then there's nothing left to scan from the source
// so we're at the EOF and can flush the stale content
- m.flushStaleCells()
+ m.onEndOfInput()
m.refreshView()
break outer
}
- _, _ = m.writer.Write(append(scanner.Bytes(), []byte("\n")...))
+ _, _ = m.writer.Write(append(scanner.Bytes(), '\n'))
}
m.refreshView()
case <-stop:
@@ -179,11 +200,17 @@ func (t *ViewBufferManager) Close() {
// 1) command based, where the manager can be asked to read more lines, but the command can be killed
// 2) string based, where the manager can also be asked to read more lines
-func (m *ViewBufferManager) NewTask(f func(stop chan struct{}) error) error {
+func (m *ViewBufferManager) NewTask(f func(stop chan struct{}) error, key string) error {
go utils.Safe(func() {
m.taskIDMutex.Lock()
m.newTaskId++
taskID := m.newTaskId
+
+ if m.GetTaskKey() != key && m.onNewKey != nil {
+ m.onNewKey()
+ }
+ m.taskKey = key
+
m.taskIDMutex.Unlock()
m.waitingMutex.Lock()