diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2023-04-22 23:39:35 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2023-04-22 23:42:09 +0900 |
| commit | 65dd2bb42947d4ede31d160214f3a4c6fdc619e1 (patch) | |
| tree | 8f5744ddc7d0ab91983fdf6df28d96d253b2aa54 /src | |
| parent | 6be855be6af102a0f89932e5752ce75aa9713108 (diff) | |
| download | fzf-65dd2bb42947d4ede31d160214f3a4c6fdc619e1.tar.gz | |
Add 'track' action
Diffstat (limited to 'src')
| -rw-r--r-- | src/options.go | 18 | ||||
| -rw-r--r-- | src/terminal.go | 27 |
2 files changed, 37 insertions, 8 deletions
diff --git a/src/options.go b/src/options.go index 3718cf5a..e0a5caf6 100644 --- a/src/options.go +++ b/src/options.go @@ -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": 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 |
