m/fzf
1
0
mirror of https://github.com/junegunn/fzf.git synced 2025-11-17 15:53:39 -05:00

Add 'track' action

This commit is contained in:
Junegunn Choi
2023-04-22 23:39:35 +09:00
parent 6be855be6a
commit 65dd2bb429
5 changed files with 96 additions and 14 deletions

View File

@@ -165,6 +165,14 @@ func defaultMargin() [4]sizeSpec {
return [4]sizeSpec{}
}
type trackOption int
const (
trackDisabled trackOption = iota
trackEnabled
trackCurrent
)
type windowPosition int
const (
@@ -267,7 +275,7 @@ type Options struct {
WithNth []Range
Delimiter Delimiter
Sort int
Track bool
Track trackOption
Tac bool
Criteria []criterion
Multi int
@@ -340,7 +348,7 @@ func defaultOptions() *Options {
WithNth: make([]Range, 0),
Delimiter: Delimiter{},
Sort: 1000,
Track: false,
Track: trackDisabled,
Tac: false,
Criteria: []criterion{byScore, byLength},
Multi: 0,
@@ -1085,6 +1093,8 @@ func parseActionList(masked string, original string, prevActions []*action, putA
appendAction(actToggleSearch)
case "toggle-track":
appendAction(actToggleTrack)
case "track":
appendAction(actTrack)
case "select":
appendAction(actSelect)
case "select-all":
@@ -1574,9 +1584,9 @@ func parseOptions(opts *Options, allArgs []string) {
case "+s", "--no-sort":
opts.Sort = 0
case "--track":
opts.Track = true
opts.Track = trackEnabled
case "--no-track":
opts.Track = false
opts.Track = trackDisabled
case "--tac":
opts.Tac = true
case "--no-tac":

View File

@@ -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