Skip to content

Commit a4500e1

Browse files
committed
Read all lines from task when jumping to bottom
1 parent 18d8e7c commit a4500e1

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

pkg/gui/controllers/view_selection_controller.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,15 @@ func (self *ViewSelectionController) handleGotoTop() error {
100100
}
101101

102102
func (self *ViewSelectionController) handleGotoBottom() error {
103-
v := self.Context().GetView()
104-
self.handleLineChange(v.ViewLinesHeight())
103+
if manager, ok := (*self.viewBufferManagerMap)[self.context.GetViewName()]; ok {
104+
manager.ReadToEnd(func() {
105+
self.c.OnUIThread(func() error {
106+
v := self.Context().GetView()
107+
self.handleLineChange(v.ViewLinesHeight())
108+
return nil
109+
})
110+
})
111+
}
112+
105113
return nil
106114
}

pkg/tasks/tasks.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ type LinesToRead struct {
7070
// do an initial refresh. Only set for the initial read request; -1 for
7171
// subsequent requests.
7272
InitialRefreshAfter int
73+
74+
// Function to call after reading the lines is done
75+
Then func()
7376
}
7477

7578
func (m *ViewBufferManager) GetTaskKey() string {
@@ -105,6 +108,16 @@ func (self *ViewBufferManager) ReadLines(n int) {
105108
}
106109
}
107110

111+
func (self *ViewBufferManager) ReadToEnd(then func()) {
112+
if self.readLines != nil {
113+
go utils.Safe(func() {
114+
self.readLines <- LinesToRead{Total: -1, InitialRefreshAfter: -1, Then: then}
115+
})
116+
} else if then != nil {
117+
then()
118+
}
119+
}
120+
108121
func (self *ViewBufferManager) NewCmdTask(start func() (*exec.Cmd, io.Reader), prefix string, linesToRead LinesToRead, onDoneFn func()) func(TaskOpts) error {
109122
return func(opts TaskOpts) error {
110123
var onDoneOnce sync.Once
@@ -234,11 +247,17 @@ func (self *ViewBufferManager) NewCmdTask(start func() (*exec.Cmd, io.Reader), p
234247
case <-opts.Stop:
235248
break outer
236249
case linesToRead := <-self.readLines:
237-
for i := 0; i < linesToRead.Total; i++ {
250+
callThen := func() {
251+
if linesToRead.Then != nil {
252+
linesToRead.Then()
253+
}
254+
}
255+
for i := 0; linesToRead.Total == -1 || i < linesToRead.Total; i++ {
238256
var ok bool
239257
var line []byte
240258
select {
241259
case <-opts.Stop:
260+
callThen()
242261
break outer
243262
case line, ok = <-lineChan:
244263
break
@@ -258,6 +277,7 @@ func (self *ViewBufferManager) NewCmdTask(start func() (*exec.Cmd, io.Reader), p
258277
// if we're here then there's nothing left to scan from the source
259278
// so we're at the EOF and can flush the stale content
260279
self.onEndOfInput()
280+
callThen()
261281
break outer
262282
}
263283
writeToView(append(line, '\n'))
@@ -272,6 +292,7 @@ func (self *ViewBufferManager) NewCmdTask(start func() (*exec.Cmd, io.Reader), p
272292
}
273293
refreshViewIfStale()
274294
onFirstPageShown()
295+
callThen()
275296
}
276297
}
277298

0 commit comments

Comments
 (0)