summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2017-08-27 02:19:39 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2017-08-27 02:19:56 +0900
commitfee404399adcebc0c6253e2ef4dc95871f81c806 (patch)
tree4d7cbd14f0196c32167a5acefabe95056a853483
parent6b4805ca1a1b0758363d1bb8c4c996730e19dc5a (diff)
Make --expect additive
Similarly to --bind or --color. --expect used to replace the previously specified keys, and fzf#wrap({'options': '--expect=f1'}) wouldn't work as expected. It forced us to come up with some ugly hacks like the following: https://github.com/junegunn/fzf.vim/blob/13b27c45c8bdf6c3a41376bb83e4895edadf8c7e/autoload/fzf/vim.vim#L1086
-rw-r--r--man/man1/fzf.16
-rw-r--r--src/options.go8
-rw-r--r--src/options_test.go7
3 files changed, 17 insertions, 4 deletions
diff --git a/man/man1/fzf.1 b/man/man1/fzf.1
index 2b32d38c..ee64375e 100644
--- a/man/man1/fzf.1
+++ b/man/man1/fzf.1
@@ -331,10 +331,12 @@ Comma-separated list of keys that can be used to complete fzf in addition to
the default enter key. When this option is set, fzf will print the name of the
key pressed as the first line of its output (or as the second line if
\fB--print-query\fR is also used). The line will be empty if fzf is completed
-with the default enter key.
+with the default enter key. If \fB--expect\fR option is specified multiple
+times, fzf will expect the union of the keys. \fB--no-expect\fR will clear the
+list.
.RS
-e.g. \fBfzf --expect=ctrl-v,ctrl-t,alt-s,f1,f2,~,@\fR
+e.g. \fBfzf --expect=ctrl-v,ctrl-t,alt-s --expect=f1,f2,~,@\fR
.RE
.TP
.B "--read0"
diff --git a/src/options.go b/src/options.go
index afd46b9e..e2f33f81 100644
--- a/src/options.go
+++ b/src/options.go
@@ -962,7 +962,9 @@ func parseOptions(opts *Options, allArgs []string) {
case "--algo":
opts.FuzzyAlgo = parseAlgo(nextString(allArgs, &i, "algorithm required (v1|v2)"))
case "--expect":
- opts.Expect = parseKeyChords(nextString(allArgs, &i, "key names required"), "key names required")
+ for k, v := range parseKeyChords(nextString(allArgs, &i, "key names required"), "key names required") {
+ opts.Expect[k] = v
+ }
case "--no-expect":
opts.Expect = make(map[int]string)
case "--tiebreak":
@@ -1140,7 +1142,9 @@ func parseOptions(opts *Options, allArgs []string) {
} else if match, value := optString(arg, "--toggle-sort="); match {
parseToggleSort(opts.Keymap, value)
} else if match, value := optString(arg, "--expect="); match {
- opts.Expect = parseKeyChords(value, "key names required")
+ for k, v := range parseKeyChords(value, "key names required") {
+ opts.Expect[k] = v
+ }
} else if match, value := optString(arg, "--tiebreak="); match {
opts.Criteria = parseTiebreak(value)
} else if match, value := optString(arg, "--color="); match {
diff --git a/src/options_test.go b/src/options_test.go
index d3c93450..22f4e4ee 100644
--- a/src/options_test.go
+++ b/src/options_test.go
@@ -414,3 +414,10 @@ func TestPreviewOpts(t *testing.T) {
t.Error(opts.Preview)
}
}
+
+func TestAdditiveExpect(t *testing.T) {
+ opts := optsFor("--expect=a", "--expect", "b", "--expect=c")
+ if len(opts.Expect) != 3 {
+ t.Error(opts.Expect)
+ }
+}