summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2019-12-06 22:34:30 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2019-12-06 22:34:30 +0900
commit1e6ac5590ec3c928b4d065a42eb45bac87752bbc (patch)
tree1e50f12022b22340b1193067d5330ad2420744a9
parent5e42b1c9f8f61c3dd6165c1a9a8321e865a06601 (diff)
'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'
-rw-r--r--src/terminal.go16
-rwxr-xr-xtest/test_go.rb7
2 files changed, 16 insertions, 7 deletions
diff --git a/src/terminal.go b/src/terminal.go
index 4cd507a3..3cd0af6e 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 501641e2..8d6fb37c 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