diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2015-06-15 23:25:00 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2015-06-15 23:27:05 +0900 |
commit | 8677dbded15ffad32bdc4cc20db4152a376424f0 (patch) | |
tree | 6c8755a86e7d64213731526909e9f1e955cfb744 | |
parent | 794ad5785ddd96e65e71767be2de201d0b154df2 (diff) |
Change alternative notation for execute action (#265)
e.g. fzf --bind "ctrl-m:execute:COMMAND..." --bind ctrl-j:accept
-rw-r--r-- | src/options.go | 10 | ||||
-rw-r--r-- | src/options_test.go | 6 | ||||
-rw-r--r-- | test/test_go.rb | 2 |
3 files changed, 9 insertions, 9 deletions
diff --git a/src/options.go b/src/options.go index 7ecf7649..891ea1cc 100644 --- a/src/options.go +++ b/src/options.go @@ -410,9 +410,9 @@ var executeRegexp *regexp.Regexp func parseKeymap(keymap map[int]actionType, execmap map[int]string, toggleSort bool, str string) (map[int]actionType, map[int]string, bool) { if executeRegexp == nil { // Backreferences are not supported. - // "~!@#$%^&*:;/|".each_char.map { |c| Regexp.escape(c) }.map { |c| "#{c}[^#{c}]*#{c}" }.join('|') + // "~!@#$%^&*;/|".each_char.map { |c| Regexp.escape(c) }.map { |c| "#{c}[^#{c}]*#{c}" }.join('|') executeRegexp = regexp.MustCompile( - "(?s):execute=.*|:execute(\\([^)]*\\)|\\[[^\\]]*\\]|~[^~]*~|![^!]*!|@[^@]*@|\\#[^\\#]*\\#|\\$[^\\$]*\\$|%[^%]*%|\\^[^\\^]*\\^|&[^&]*&|\\*[^\\*]*\\*|:[^:]*:|;[^;]*;|/[^/]*/|\\|[^\\|]*\\|)") + "(?s):execute:.*|:execute(\\([^)]*\\)|\\[[^\\]]*\\]|~[^~]*~|![^!]*!|@[^@]*@|\\#[^\\#]*\\#|\\$[^\\$]*\\$|%[^%]*%|\\^[^\\^]*\\^|&[^&]*&|\\*[^\\*]*\\*|;[^;]*;|/[^/]*/|\\|[^\\|]*\\|)") } masked := executeRegexp.ReplaceAllStringFunc(str, func(src string) string { return ":execute(" + strings.Repeat(" ", len(src)-10) + ")" @@ -503,7 +503,7 @@ func parseKeymap(keymap map[int]actionType, execmap map[int]string, toggleSort b default: if isExecuteAction(act) { keymap[key] = actExecute - if pair[1][7] == '=' { + if pair[1][7] == ':' { execmap[key] = pair[1][8:] } else { execmap[key] = pair[1][8 : len(act)-1] @@ -522,8 +522,8 @@ func isExecuteAction(str string) bool { } b := str[7] e := str[len(str)-1] - if b == '=' || b == '(' && e == ')' || b == '[' && e == ']' || - b == e && strings.ContainsAny(string(b), "~!@#$%^&*:;/|") { + if b == ':' || b == '(' && e == ')' || b == '[' && e == ']' || + b == e && strings.ContainsAny(string(b), "~!@#$%^&*;/|") { return true } return false diff --git a/src/options_test.go b/src/options_test.go index 3c33ef47..dee1c0d1 100644 --- a/src/options_test.go +++ b/src/options_test.go @@ -162,9 +162,9 @@ func TestBind(t *testing.T) { keymap, execmap, toggleSort := parseKeymap(keymap, execmap, false, "ctrl-a:kill-line,ctrl-b:toggle-sort,c:page-up,alt-z:page-down,"+ - "f1:execute(ls {}),f2:execute/echo {}, {}, {}/,f3:execute[echo '({})'],f4:execute:less {}:,"+ + "f1:execute(ls {}),f2:execute/echo {}, {}, {}/,f3:execute[echo '({})'],f4:execute;less {};,"+ "alt-a:execute@echo (,),[,],/,:,;,%,{}@,alt-b:execute;echo (,),[,],/,:,@,%,{};"+ - ",X:execute=\nfoobar,Y:execute(baz)") + ",X:execute:\nfoobar,Y:execute(baz)") if !toggleSort { t.Errorf("toggleSort not set") } @@ -184,7 +184,7 @@ func TestBind(t *testing.T) { checkString("echo (,),[,],/,:,@,%,{}", execmap[curses.AltB]) checkString("\nfoobar,Y:execute(baz)", execmap[curses.AltZ+'X']) - for idx, char := range []rune{'~', '!', '@', '#', '$', '%', '^', '&', '*', '|', ':', ';', '/'} { + for idx, char := range []rune{'~', '!', '@', '#', '$', '%', '^', '&', '*', '|', ';', '/'} { keymap, execmap, toggleSort = parseKeymap(keymap, execmap, false, fmt.Sprintf("%d:execute%cfoobar%c", idx%10, char, char)) checkString("foobar", execmap[curses.AltZ+int([]rune(fmt.Sprintf("%d", idx%10))[0])]) diff --git a/test/test_go.rb b/test/test_go.rb index a12ed4db..5c814d07 100644 --- a/test/test_go.rb +++ b/test/test_go.rb @@ -596,7 +596,7 @@ class TestGoFZF < TestBase def test_execute output = '/tmp/fzf-test-execute' - opts = %[--bind \\"alt-a:execute(echo '[{}]' >> #{output}),alt-b:execute[echo '({}), ({})' >> #{output}],C:execute:echo '({}), [{}], @{}@' >> #{output}:\\"] + opts = %[--bind \\"alt-a:execute(echo '[{}]' >> #{output}),alt-b:execute[echo '({}), ({})' >> #{output}],C:execute:echo '({}), [{}], @{}@' >> #{output}\\"] tmux.send_keys "seq 100 | #{fzf opts}", :Enter tmux.until { |lines| lines[-2].include? '100/100' } tmux.send_keys :Escape, :a, :Escape, :a |