From 6fd4be580b65913299f2306998fc3f133c259fb2 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 4 Mar 2017 14:09:36 +0900 Subject: [PATCH] Use alternate screen only when the value of height is 100% Do not automatically decide to use alternate screen when the value of height exceeds the height of the terminal. # Use alternate screen fzf fzf --height 100% fzf --no-height # Still use current screen fzf --height 10000 --- src/terminal.go | 16 +++++++++------- src/tui/light.go | 19 +++++-------------- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/terminal.go b/src/terminal.go index 3a83bad..197ab6b 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -295,7 +295,14 @@ func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal { strongAttr = tui.AttrRegular } var renderer tui.Renderer - if opts.Height.size > 0 { + if opts.Height.size == 0 || opts.Height.percent && opts.Height.size == 100 { + if tui.HasFullscreenRenderer() { + renderer = tui.NewFullscreenRenderer(opts.Theme, opts.Black, opts.Mouse) + } else { + renderer = tui.NewLightRenderer(opts.Theme, opts.Black, opts.Mouse, opts.Tabstop, opts.ClearOnExit, + true, func(h int) int { return h }) + } + } else { maxHeightFunc := func(termHeight int) int { var maxHeight int if opts.Height.percent { @@ -316,12 +323,7 @@ func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal { } return util.Min(termHeight, util.Max(maxHeight, effectiveMinHeight)) } - renderer = tui.NewLightRenderer(opts.Theme, opts.Black, opts.Mouse, opts.Tabstop, opts.ClearOnExit, maxHeightFunc) - } else if tui.HasFullscreenRenderer() { - renderer = tui.NewFullscreenRenderer(opts.Theme, opts.Black, opts.Mouse) - } else { - renderer = tui.NewLightRenderer(opts.Theme, opts.Black, opts.Mouse, opts.Tabstop, opts.ClearOnExit, - func(h int) int { return h }) + renderer = tui.NewLightRenderer(opts.Theme, opts.Black, opts.Mouse, opts.Tabstop, opts.ClearOnExit, false, maxHeightFunc) } wordRubout := "[^[:alnum:]][[:alnum:]]" wordNext := "[[:alnum:]][^[:alnum:]]|(.$)" diff --git a/src/tui/light.go b/src/tui/light.go index 2af31c4..3f6985f 100644 --- a/src/tui/light.go +++ b/src/tui/light.go @@ -107,7 +107,7 @@ type LightWindow struct { bg Color } -func NewLightRenderer(theme *ColorTheme, forceBlack bool, mouse bool, tabstop int, clearOnExit bool, maxHeightFunc func(int) int) Renderer { +func NewLightRenderer(theme *ColorTheme, forceBlack bool, mouse bool, tabstop int, clearOnExit bool, fullscreen bool, maxHeightFunc func(int) int) Renderer { r := LightRenderer{ theme: theme, forceBlack: forceBlack, @@ -116,7 +116,7 @@ func NewLightRenderer(theme *ColorTheme, forceBlack bool, mouse bool, tabstop in ttyin: openTtyIn(), yoffset: 0, tabstop: tabstop, - fullscreen: false, + fullscreen: fullscreen, upOneLine: false, maxHeightFunc: maxHeightFunc} return &r @@ -176,11 +176,7 @@ func (r *LightRenderer) Init() { } r.origState = origState terminal.MakeRaw(fd) - terminalHeight, capHeight := r.updateTerminalSize() - if capHeight == terminalHeight { - r.fullscreen = true - r.height = terminalHeight - } + r.updateTerminalSize() initTheme(r.theme, r.defaultTheme(), r.forceBlack) if r.fullscreen { @@ -242,20 +238,15 @@ func getEnv(name string, defaultValue int) int { return atoi(env, defaultValue) } -func (r *LightRenderer) updateTerminalSize() (int, int) { +func (r *LightRenderer) updateTerminalSize() { width, height, err := terminal.GetSize(r.fd()) if err == nil { r.width = width - if r.fullscreen { - r.height = height - } else { - r.height = r.maxHeightFunc(height) - } + r.height = r.maxHeightFunc(height) } else { r.width = getEnv("COLUMNS", defaultWidth) r.height = r.maxHeightFunc(getEnv("LINES", defaultHeight)) } - return height, r.height } func (r *LightRenderer) getch(nonblock bool) (int, bool) {