From 1e6ac5590ec3c928b4d065a42eb45bac87752bbc Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Fri, 6 Dec 2019 22:34:30 +0900 Subject: [PATCH] 'reload' action should be allowed even where there's no match If the command template doesn't have any placeholder expressions. : | fzf --bind 'space:reload:seq 10' --- src/terminal.go | 16 +++++++++------- test/test_go.rb | 7 +++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/terminal.go b/src/terminal.go index 4cd507a..3cd0af6 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -1237,7 +1237,7 @@ func parsePlaceholder(match string) (bool, string, placeholderFlags) { return false, matchWithoutFlags, flags } -func hasPreviewFlags(template string) (plus bool, query bool) { +func hasPreviewFlags(template string) (slot bool, plus bool, query bool) { for _, match := range placeholder.FindAllString(template, -1) { _, _, flags := parsePlaceholder(match) if flags.plus { @@ -1246,6 +1246,7 @@ func hasPreviewFlags(template string) (plus bool, query bool) { if flags.query { query = true } + slot = true } return } @@ -1409,7 +1410,7 @@ func (t *Terminal) currentItem() *Item { func (t *Terminal) buildPlusList(template string, forcePlus bool) (bool, []*Item) { current := t.currentItem() - plus, query := hasPreviewFlags(template) + _, plus, query := hasPreviewFlags(template) if !(query && len(t.input) > 0 || (forcePlus || plus) && len(t.selected) > 0) { return current != nil, []*Item{current, current} } @@ -2045,11 +2046,12 @@ func (t *Terminal) Loop() { t.failed = nil valid, list := t.buildPlusList(a.a, false) - // If the command template has {q}, we run the command even when the - // query string is empty. if !valid { - _, query := hasPreviewFlags(a.a) - valid = query + // We run the command even when there's no match + // 1. If the template doesn't have any slots + // 2. If the template has {q} + slot, _, query := hasPreviewFlags(a.a) + valid = !slot || query } if valid { command := replacePlaceholder(a.a, @@ -2095,7 +2097,7 @@ func (t *Terminal) Loop() { if queryChanged { if t.isPreviewEnabled() { - _, q := hasPreviewFlags(t.preview.command) + _, _, q := hasPreviewFlags(t.preview.command) if q { t.version++ } diff --git a/test/test_go.rb b/test/test_go.rb index 501641e..8d6fb37 100755 --- a/test/test_go.rb +++ b/test/test_go.rb @@ -1640,6 +1640,13 @@ class TestGoFZF < TestBase tmux.until { |lines| lines.item_count == 553 && lines.match_count == 1 } tmux.until { |lines| !lines[-2].include?('(1/2)') } end + + def test_reload_even_when_theres_no_match + tmux.send_keys %(: | #{FZF} --bind 'space:reload(seq 10)'), :Enter + tmux.until { |lines| lines.item_count.zero? } + tmux.send_keys :Space + tmux.until { |lines| lines.item_count == 10 } + end end module TestShell