summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2020-10-09 19:53:51 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2020-10-09 19:53:51 +0900
commitd9752a4c21ba8a98e26dcf2199f22581d3946dfa (patch)
treefc37e3e8e5cfe82b0f7e248966f91e51e7e3e335
parentdba14d26303297322dc4426d38ebfbf1d76a6011 (diff)
Reset preview window flags that are not style-related
Fix #2203
-rw-r--r--CHANGELOG.md6
-rw-r--r--man/man1/fzf.137
-rw-r--r--src/options.go4
-rw-r--r--src/options_test.go8
4 files changed, 41 insertions, 14 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 97d877d7..8aae9e54 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,12 @@
CHANGELOG
=========
+0.23.1
+------
+- Reset `hidden` flag and scroll offset of `--preview-window` if another
+ `--preview-window` is found. We should only keep style-related flags across
+ multiple `--preview-window` options.
+
0.23.0
------
- Support preview scroll offset relative to window height
diff --git a/man/man1/fzf.1 b/man/man1/fzf.1
index cfa4adb6..22171be3 100644
--- a/man/man1/fzf.1
+++ b/man/man1/fzf.1
@@ -381,11 +381,21 @@ Preview window will be updated even when there is no match for the current
query if any of the placeholder expressions evaluates to a non-empty string.
.RE
.TP
-.BI "--preview-window=" "[POSITION][:SIZE[%]][:rounded|sharp|noborder][:wrap][:hidden][:+SCROLL[-OFFSET]]"
-Determines the layout of the preview window. If the argument contains
+.BI "--preview-window=" "[POSITION][:SIZE[%]][:rounded|sharp|noborder][:wrap][:cycle][:hidden][:+SCROLL[-OFFSET]]"
+
+.RS
+.B POSITION: (default: right)
+ \fBup
+ \fBdown
+ \fBleft
+ \fBright
+.RE
+
+\fRDetermines the layout of the preview window. If the argument contains
\fB:hidden\fR, the preview window will be hidden by default until
\fBtoggle-preview\fR action is triggered. Long lines are truncated by default.
-Line wrap can be enabled with \fB:wrap\fR flag.
+Line wrap can be enabled with \fB:wrap\fR flag. Cyclic scrolling is enabled
+with \fB:cycle\fR flag.
If size is given as 0, preview window will not be visible, but fzf will still
execute the command in the background.
@@ -402,14 +412,6 @@ be given as a numeric integer (\fB-INTEGER\fR), or as a denominator form
(\fB-/INTEGER\fR) for specifying a fraction of the preview window height.
.RS
-.B POSITION: (default: right)
- \fBup
- \fBdown
- \fBleft
- \fBright
-.RE
-
-.RS
e.g.
\fB# Non-default scroll window positions and sizes
fzf --preview="head {}" --preview-window=up:30%
@@ -427,6 +429,19 @@ e.g.
--preview-window +{2}-/2\fR
.RE
+
+You can write style-related flags across multiple \fB--preview-window\fR
+options. But flags that are not style-related such as \fBhidden\fR and scroll
+offset are only allowed in the last \fB--preview-window\fR.
+
+.RS
+e.g.
+ export FZF_DEFAULT_OPTS='--preview-window sharp:cycle'
+
+ # sharp + cycle + up + 50%
+ fzf --preview-window 'up' --preview-window '50%' --preview 'bat {}'
+.RE
+
.SS Scripting
.TP
.BI "-q, --query=" "STR"
diff --git a/src/options.go b/src/options.go
index 35220bae..c7354b35 100644
--- a/src/options.go
+++ b/src/options.go
@@ -994,6 +994,10 @@ func parseInfoStyle(str string) infoStyle {
}
func parsePreviewWindow(opts *previewOpts, input string) {
+ // We should reset flags that are not style-related.
+ opts.hidden = false
+ opts.scroll = ""
+
tokens := strings.Split(input, ":")
sizeRegex := regexp.MustCompile("^[0-9]+%?$")
offsetRegex := regexp.MustCompile("^\\+([0-9]+|{-?[0-9]+})(-[0-9]+|-/[1-9][0-9]*)?$")
diff --git a/src/options_test.go b/src/options_test.go
index 457c6c15..38873738 100644
--- a/src/options_test.go
+++ b/src/options_test.go
@@ -387,21 +387,23 @@ func TestPreviewOpts(t *testing.T) {
opts.Preview.size.size == 50) {
t.Error()
}
- opts = optsFor("--preview", "cat {}", "--preview-window=left:15:hidden:wrap")
+ opts = optsFor("--preview", "cat {}", "--preview-window=left:15:hidden:wrap:+{1}-/2")
if !(opts.Preview.command == "cat {}" &&
opts.Preview.hidden == true &&
opts.Preview.wrap == true &&
opts.Preview.position == posLeft &&
+ opts.Preview.scroll == "{1}-/2" &&
opts.Preview.size.percent == false &&
opts.Preview.size.size == 15) {
t.Error(opts.Preview)
}
- opts = optsFor("--preview-window=up:15:wrap:hidden", "--preview-window=down", "--preview-window=cycle")
+ opts = optsFor("--preview-window=up:15:wrap:hidden:+{1}-/2", "--preview-window=down", "--preview-window=cycle")
if !(opts.Preview.command == "" &&
- opts.Preview.hidden == true &&
+ opts.Preview.hidden == false &&
opts.Preview.wrap == true &&
opts.Preview.cycle == true &&
opts.Preview.position == posDown &&
+ opts.Preview.scroll == "" &&
opts.Preview.size.percent == false &&
opts.Preview.size.size == 15) {
t.Error(opts.Preview.size.size)