Skip to content

Commit

Permalink
Add 'start' event that is triggered once when fzf finder starts
Browse files Browse the repository at this point in the history
Close #1622
  • Loading branch information
junegunn committed Oct 26, 2022
1 parent 170fc51 commit 168829b
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 2 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
11 changes: 10 additions & 1 deletion man/man1/fzf.1
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions src/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -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":
Expand Down
10 changes: 9 additions & 1 deletion src/terminal.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/tui/tui.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ const (

Change
BackwardEOF
Start

AltBS

Expand Down
8 changes: 8 additions & 0 deletions test/test_go.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2332,6 +2332,14 @@ def test_height_range_overflow
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
Expand Down

0 comments on commit 168829b

Please sign in to comment.