Add 'start' event that is triggered once when fzf finder starts

Close #1622
pull/3046/head
Junegunn Choi 2 years ago
parent 170fc517d0
commit 168829b555
No known key found for this signature in database
GPG Key ID: 254BC280FEF9C627

@ -1,6 +1,15 @@
CHANGELOG
=========
0.35.0
------
- Added `start` event that is triggered only once when fzf finder starts.
Since fzf consumes the input stream asynchronously, the input list is not
available unless you use `--sync`.
```sh
seq 100 | fzf --multi --sync --bind 'start:last+select-all+preview(echo welcome)'
```
0.34.0
------
- Added support for adaptive `--height`. If the `--height` value is prefixed

@ -21,7 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
..
.TH fzf 1 "Sep 2022" "fzf 0.34.0" "fzf - a command-line fuzzy finder"
.TH fzf 1 "Oct 2022" "fzf 0.35.0" "fzf - a command-line fuzzy finder"
.SH NAME
fzf - a command-line fuzzy finder
@ -811,6 +811,15 @@ e.g.
or any single character
.SS AVAILABLE EVENTS:
\fIstart\fR
.RS
Triggered only once when fzf finder starts. Since fzf consumes the input stream
asynchronously, the input list is not available unless you use \fI--sync\fR.
e.g.
\fB# Move cursor to the last item and select all items
seq 1000 | fzf --multi --sync --bind start:last+select-all\fR
.RE
\fIchange\fR
.RS
Triggered whenever the query string is changed

@ -543,6 +543,8 @@ func parseKeyChords(str string, message string) map[tui.Event]string {
add(tui.Change)
case "backward-eof":
add(tui.BackwardEOF)
case "start":
add(tui.Start)
case "alt-enter", "alt-return":
chords[tui.CtrlAltKey('m')] = key
case "alt-space":

@ -2362,13 +2362,21 @@ func (t *Terminal) Loop() {
}()
looping := true
_, startEvent := t.keymap[tui.Start.AsEvent()]
for looping {
var newCommand *string
changed := false
beof := false
queryChanged := false
event := t.tui.GetChar()
var event tui.Event
if startEvent {
event = tui.Start.AsEvent()
startEvent = false
} else {
event = t.tui.GetChar()
}
t.mutex.Lock()
previousInput := t.input

@ -90,6 +90,7 @@ const (
Change
BackwardEOF
Start
AltBS

@ -2332,6 +2332,14 @@ class TestGoFZF < TestBase
OUTPUT
tmux.until { assert_block(expected, _1) }
end
def test_start_event
tmux.send_keys 'seq 100 | fzf --multi --sync --preview-window border-none --bind "start:select-all+last+preview(echo welcome)"', :Enter
tmux.until do |lines|
assert_match(/>100.*welcome/, lines[0])
assert_includes(lines[-2], '100/100 (100)')
end
end
end
module TestShell

Loading…
Cancel
Save