Skip to content
Snippets Groups Projects
Commit 1e6ac559 authored by Junegunn Choi's avatar Junegunn Choi
Browse files

'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'
parent 5e42b1c9
No related branches found
No related tags found
No related merge requests found
......@@ -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++
}
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment