summaryrefslogtreecommitdiffstats
path: root/src/terminal.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2023-04-22 23:39:35 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2023-04-22 23:42:09 +0900
commit65dd2bb42947d4ede31d160214f3a4c6fdc619e1 (patch)
tree8f5744ddc7d0ab91983fdf6df28d96d253b2aa54 /src/terminal.go
parent6be855be6af102a0f89932e5752ce75aa9713108 (diff)
Add 'track' action
Diffstat (limited to 'src/terminal.go')
-rw-r--r--src/terminal.go27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/terminal.go b/src/terminal.go
index e3403a40..47991a65 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -184,7 +184,7 @@ type Terminal struct {
multi int
sort bool
toggleSort bool
- track bool
+ track trackOption
delimiter Delimiter
expect map[tui.Event]string
keymap map[tui.Event][]*action
@@ -340,6 +340,7 @@ const (
actToggleIn
actToggleOut
actToggleTrack
+ actTrack
actDown
actUp
actPageUp
@@ -922,7 +923,7 @@ func (t *Terminal) UpdateProgress(progress float32) {
func (t *Terminal) UpdateList(merger *Merger, reset bool) {
t.mutex.Lock()
var prevIndex int32 = -1
- if !reset && t.track {
+ if !reset && t.track != trackDisabled {
if t.merger.Length() > 0 {
prevIndex = t.merger.Get(t.cy).item.Index()
} else if merger.Length() > 0 {
@@ -946,6 +947,10 @@ func (t *Terminal) UpdateList(merger *Merger, reset bool) {
if i >= 0 {
t.cy = i
t.offset = t.cy - pos
+ } else if t.track == trackCurrent {
+ t.track = trackDisabled
+ t.cy = pos
+ t.offset = 0
} else if t.cy > count {
// Try to keep the vertical position when the list shrinks
t.cy = count - util.Min(count, t.maxItems()) + pos
@@ -1479,7 +1484,7 @@ func (t *Terminal) printInfo() {
output += " -S"
}
}
- if t.track {
+ if t.track != trackDisabled {
output += " +T"
}
if t.multi > 0 {
@@ -2733,6 +2738,10 @@ func (t *Terminal) Loop() {
currentIndex = currentItem.Index()
}
focusChanged := focusedIndex != currentIndex
+ if focusChanged && t.track == trackCurrent {
+ t.track = trackDisabled
+ t.printInfo()
+ }
if onFocus != nil && focusChanged {
t.serverChan <- onFocus
}
@@ -3311,7 +3320,17 @@ func (t *Terminal) Loop() {
changed = !t.paused
req(reqPrompt)
case actToggleTrack:
- t.track = !t.track
+ switch t.track {
+ case trackEnabled:
+ t.track = trackDisabled
+ case trackDisabled:
+ t.track = trackEnabled
+ }
+ req(reqInfo)
+ case actTrack:
+ if t.track == trackDisabled {
+ t.track = trackCurrent
+ }
req(reqInfo)
case actEnableSearch:
t.paused = false