summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md3
-rw-r--r--man/man1/fzf.16
-rw-r--r--src/options.go15
-rw-r--r--src/terminal.go28
4 files changed, 38 insertions, 14 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e67bf165..09297f49 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,9 @@ CHANGELOG
--preview 'bat --style=numbers --color=always --highlight-line {2} {1}' \
--preview-window +{2}-/2
```
+- Added `--preview-window` option for sharp edges (`--preview-window sharp`)
+- Reduced vertical padding around the preview window when `--preview-window
+ noborder` is used
0.22.0
------
diff --git a/man/man1/fzf.1 b/man/man1/fzf.1
index 6408a4bb..2a668b2f 100644
--- a/man/man1/fzf.1
+++ b/man/man1/fzf.1
@@ -381,7 +381,7 @@ 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[%]][:noborder][:wrap][:hidden][:+SCROLL[-OFFSET]]"
+.BI "--preview-window=" "[POSITION][:SIZE[%]][:rounded|sharp|noborder][:wrap][:hidden][:+SCROLL[-OFFSET]]"
Determines 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.
@@ -390,6 +390,10 @@ Line wrap can be enabled with \fB:wrap\fR flag.
If size is given as 0, preview window will not be visible, but fzf will still
execute the command in the background.
+To change the style of the border of the preview window, specify one of
+\fBrounded\fR (border with rounded edges, default), \fBsharp\fR (border with
+sharp edges), or \fBnoborder\fR (no border).
+
\fB+SCROLL[-OFFSET]\fR determines the initial scroll offset of the preview
window. \fBSCROLL\fR can be either a numeric integer or a single-field index
expression that refers to a numeric integer. The optional \fB-OFFSET\fR part is
diff --git a/src/options.go b/src/options.go
index a916e806..38558771 100644
--- a/src/options.go
+++ b/src/options.go
@@ -81,6 +81,7 @@ const usage = `usage: fzf [options]
--preview=COMMAND Command to preview highlighted line ({})
--preview-window=OPT Preview window layout (default: right:50%)
[up|down|left|right][:SIZE[%]][:wrap][:hidden][:+SCROLL[-OFFSET]]
+ [:rounded|sharp|noborder]
Scripting
-q, --query=STR Start the finder with the given query
@@ -162,7 +163,7 @@ type previewOpts struct {
scroll string
hidden bool
wrap bool
- border bool
+ border tui.BorderShape
}
// Options stores the values of command-line options
@@ -261,7 +262,7 @@ func defaultOptions() *Options {
ToggleSort: false,
Expect: make(map[int]string),
Keymap: make(map[int][]action),
- Preview: previewOpts{"", posRight, sizeSpec{50, true}, "", false, false, true},
+ Preview: previewOpts{"", posRight, sizeSpec{50, true}, "", false, false, tui.BorderRounded},
PrintQuery: false,
ReadZero: false,
Printer: func(str string) { fmt.Println(str) },
@@ -1011,10 +1012,12 @@ func parsePreviewWindow(opts *previewOpts, input string) {
opts.position = posLeft
case "right":
opts.position = posRight
- case "border":
- opts.border = true
+ case "rounded", "border":
+ opts.border = tui.BorderRounded
+ case "sharp":
+ opts.border = tui.BorderSharp
case "noborder":
- opts.border = false
+ opts.border = tui.BorderNone
default:
if sizeRegex.MatchString(token) {
opts.size = parseSize(token, 99, "window size")
@@ -1274,7 +1277,7 @@ func parseOptions(opts *Options, allArgs []string) {
opts.Preview.command = ""
case "--preview-window":
parsePreviewWindow(&opts.Preview,
- nextString(allArgs, &i, "preview window layout required: [up|down|left|right][:SIZE[%]][:noborder][:wrap][:hidden][:+SCROLL[-OFFSET]]"))
+ nextString(allArgs, &i, "preview window layout required: [up|down|left|right][:SIZE[%]][:rounded|sharp|noborder][:wrap][:hidden][:+SCROLL[-OFFSET]]"))
case "--height":
opts.Height = parseHeight(nextString(allArgs, &i, "height required: HEIGHT[%]"))
case "--min-height":
diff --git a/src/terminal.go b/src/terminal.go
index 2fa13984..b683c459 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -676,6 +676,8 @@ func (t *Terminal) resizeWindows() {
}
if t.pborder != nil {
t.pborder.Close()
+ }
+ if t.pwindow != nil {
t.pwindow.Close()
}
@@ -700,19 +702,28 @@ func (t *Terminal) resizeWindows() {
noBorder := tui.MakeBorderStyle(tui.BorderNone, t.unicode)
if previewVisible {
createPreviewWindow := func(y int, x int, w int, h int) {
- previewBorder := tui.MakeBorderStyle(tui.BorderRounded, t.unicode)
- if !t.preview.border {
- previewBorder = tui.MakeTransparentBorder()
+ pwidth := w
+ pheight := h
+ if t.preview.border != tui.BorderNone {
+ previewBorder := tui.MakeBorderStyle(t.preview.border, t.unicode)
+ t.pborder = t.tui.NewWindow(y, x, w, h, true, previewBorder)
+ pwidth -= 4
+ pheight -= 2
+ x += 2
+ y += 1
+ } else {
+ previewBorder := tui.MakeTransparentBorder()
+ t.pborder = t.tui.NewWindow(y, x, w, h, true, previewBorder)
+ pwidth -= 2
+ x += 1
}
- t.pborder = t.tui.NewWindow(y, x, w, h, true, previewBorder)
- pwidth := w - 4
// ncurses auto-wraps the line when the cursor reaches the right-end of
// the window. To prevent unintended line-wraps, we use the width one
// column larger than the desired value.
if !t.preview.wrap && t.tui.DoesAutoWrap() {
pwidth += 1
}
- t.pwindow = t.tui.NewWindow(y+1, x+2, pwidth, h-2, true, noBorder)
+ t.pwindow = t.tui.NewWindow(y, x, pwidth, pheight, true, noBorder)
}
switch t.preview.position {
case posUp:
@@ -1210,7 +1221,10 @@ func (t *Terminal) refresh() {
windows = append(windows, t.border)
}
if t.hasPreviewWindow() {
- windows = append(windows, t.pborder, t.pwindow)
+ if t.pborder != nil {
+ windows = append(windows, t.pborder)
+ }
+ windows = append(windows, t.pwindow)
}
windows = append(windows, t.window)
t.tui.RefreshWindows(windows)