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:
@@ -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":
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user