summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2023-12-21 18:41:01 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2023-12-21 18:42:23 +0900
commitd7b61ede07ab20ba106191968f12aaf600b6ede4 (patch)
treef86613d7e0ef3ec06aa44890d81bd5ab991e6b67 /src
parent87fc1c84b8700e694ec341b36ac3ce29a7a30e6b (diff)
Add support for negative --height
fzf --height=-1 Close #3487
Diffstat (limited to 'src')
-rw-r--r--src/core.go2
-rw-r--r--src/options.go10
-rw-r--r--src/terminal.go13
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()