diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2023-12-21 18:41:01 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2023-12-21 18:42:23 +0900 |
commit | d7b61ede07ab20ba106191968f12aaf600b6ede4 (patch) | |
tree | f86613d7e0ef3ec06aa44890d81bd5ab991e6b67 /src | |
parent | 87fc1c84b8700e694ec341b36ac3ce29a7a30e6b (diff) |
Add support for negative --height
fzf --height=-1
Close #3487
Diffstat (limited to 'src')
-rw-r--r-- | src/core.go | 2 | ||||
-rw-r--r-- | src/options.go | 10 | ||||
-rw-r--r-- | src/terminal.go | 13 |
3 files changed, 21 insertions, 4 deletions
diff --git a/src/core.go b/src/core.go index e21e8c0a..ed56a879 100644 --- a/src/core.go +++ b/src/core.go @@ -200,7 +200,7 @@ func Run(opts *Options, version string, revision string) { padHeight := 0 heightUnknown := opts.Height.auto if heightUnknown { - maxFit, padHeight = terminal.MaxFitAndPad(opts) + maxFit, padHeight = terminal.MaxFitAndPad() } deferred := opts.Select1 || opts.Exit0 go terminal.Loop() diff --git a/src/options.go b/src/options.go index 57f2f1e1..ca8b2476 100644 --- a/src/options.go +++ b/src/options.go @@ -57,6 +57,8 @@ const usage = `usage: fzf [options] Layout --height=[~]HEIGHT[%] Display fzf window below the cursor with the given height instead of using fullscreen. + A negative value is calcalated as the terminal height + minus the given value. If prefixed with '~', fzf will determine the height according to the input size. --min-height=HEIGHT Minimum height when --height is given in percent @@ -157,6 +159,7 @@ type heightSpec struct { size float64 percent bool auto bool + inverse bool } type sizeSpec struct { @@ -1386,6 +1389,13 @@ func parseHeight(str string) heightSpec { heightSpec.auto = true str = str[1:] } + if strings.HasPrefix(str, "-") { + if heightSpec.auto { + errorExit("negative(-) height is not compatible with adaptive(~) height") + } + heightSpec.inverse = true + str = str[1:] + } size := parseSize(str, 100, "height") heightSpec.size = size.size diff --git a/src/terminal.go b/src/terminal.go index 4a4498bb..394be4fc 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -594,10 +594,17 @@ func makeSpinner(unicode bool) []string { } func evaluateHeight(opts *Options, termHeight int) int { + size := opts.Height.size if opts.Height.percent { - return util.Max(int(opts.Height.size*float64(termHeight)/100.0), opts.MinHeight) + if opts.Height.inverse { + size = 100 - size + } + return util.Max(int(size*float64(termHeight)/100.0), opts.MinHeight) + } + if opts.Height.inverse { + size = float64(termHeight) - size } - return int(opts.Height.size) + return int(size) } // NewTerminal returns new Terminal object @@ -819,7 +826,7 @@ func (t *Terminal) extraLines() int { return extra } -func (t *Terminal) MaxFitAndPad(opts *Options) (int, int) { +func (t *Terminal) MaxFitAndPad() (int, int) { _, screenHeight, marginInt, paddingInt := t.adjustMarginAndPadding() padHeight := marginInt[0] + marginInt[2] + paddingInt[0] + paddingInt[2] fit := screenHeight - padHeight - t.extraLines() |