From d9752a4c21ba8a98e26dcf2199f22581d3946dfa Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Fri, 9 Oct 2020 19:53:51 +0900 Subject: [PATCH] Reset preview window flags that are not style-related Fix #2203 --- CHANGELOG.md | 6 ++++++ man/man1/fzf.1 | 37 ++++++++++++++++++++++++++----------- src/options.go | 4 ++++ src/options_test.go | 8 +++++--- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97d877d..8aae9e5 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 cfa4adb..22171be 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. @@ -401,14 +411,6 @@ for adjusting the base offset so that you can see the text above it. It should 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 @@ -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 35220ba..c7354b3 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 457c6c1..3887373 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)