summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--man/man1/fzf.16
-rw-r--r--src/options.go6
-rw-r--r--src/terminal.go4
-rw-r--r--src/tui/light.go24
4 files changed, 30 insertions, 10 deletions
diff --git a/man/man1/fzf.1 b/man/man1/fzf.1
index 59710d5e..dde187df 100644
--- a/man/man1/fzf.1
+++ b/man/man1/fzf.1
@@ -339,6 +339,12 @@ Read input delimited by ASCII NUL characters instead of newline characters
.B "--print0"
Print output delimited by ASCII NUL characters instead of newline characters
.TP
+.B "--no-clear"
+Do not clear finder interface on exit. If fzf was started in full screen mode,
+it will not switch back to the original screen, so you'll have to manually run
+\fBtput rmcup\fR to return. This option can be used to avoid flickering of the
+screen when your application needs to start fzf multiple times in order.
+.TP
.B "--sync"
Synchronous search for multi-staged filtering. If specified, fzf will launch
ncurses finder only after the input stream is complete.
diff --git a/src/options.go b/src/options.go
index c78d2bfe..7a3d60cb 100644
--- a/src/options.go
+++ b/src/options.go
@@ -186,6 +186,7 @@ type Options struct {
Margin [4]sizeSpec
Bordered bool
Tabstop int
+ ClearOnExit bool
Version bool
}
@@ -234,6 +235,7 @@ func defaultOptions() *Options {
HeaderLines: 0,
Margin: defaultMargin(),
Tabstop: 8,
+ ClearOnExit: true,
Version: false}
}
@@ -1099,6 +1101,10 @@ func parseOptions(opts *Options, allArgs []string) {
nextString(allArgs, &i, "margin required (TRBL / TB,RL / T,RL,B / T,R,B,L)"))
case "--tabstop":
opts.Tabstop = nextInt(allArgs, &i, "tab stop required")
+ case "--clear":
+ opts.ClearOnExit = true
+ case "--no-clear":
+ opts.ClearOnExit = false
case "--version":
opts.Version = true
default:
diff --git a/src/terminal.go b/src/terminal.go
index f556badd..3a83bad2 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -316,11 +316,11 @@ 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, maxHeightFunc)
+ 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,
+ renderer = tui.NewLightRenderer(opts.Theme, opts.Black, opts.Mouse, opts.Tabstop, opts.ClearOnExit,
func(h int) int { return h })
}
wordRubout := "[^[:alnum:]][[:alnum:]]"
diff --git a/src/tui/light.go b/src/tui/light.go
index fb8f4f03..2af31c4b 100644
--- a/src/tui/light.go
+++ b/src/tui/light.go
@@ -74,6 +74,7 @@ type LightRenderer struct {
theme *ColorTheme
mouse bool
forceBlack bool
+ clearOnExit bool
prevDownTime time.Time
clickY []int
ttyin *os.File
@@ -106,11 +107,12 @@ type LightWindow struct {
bg Color
}
-func NewLightRenderer(theme *ColorTheme, forceBlack bool, mouse bool, tabstop int, maxHeightFunc func(int) int) Renderer {
+func NewLightRenderer(theme *ColorTheme, forceBlack bool, mouse bool, tabstop int, clearOnExit bool, maxHeightFunc func(int) int) Renderer {
r := LightRenderer{
theme: theme,
forceBlack: forceBlack,
mouse: mouse,
+ clearOnExit: clearOnExit,
ttyin: openTtyIn(),
yoffset: 0,
tabstop: tabstop,
@@ -571,14 +573,20 @@ func (r *LightRenderer) Refresh() {
func (r *LightRenderer) Close() {
// r.csi("u")
- if r.fullscreen {
- r.rmcup()
- } else {
- r.origin()
- if r.upOneLine {
- r.csi("A")
+ if r.clearOnExit {
+ if r.fullscreen {
+ r.rmcup()
+ } else {
+ r.origin()
+ if r.upOneLine {
+ r.csi("A")
+ }
+ r.csi("J")
}
- r.csi("J")
+ } else if r.fullscreen {
+ r.csi("G")
+ } else {
+ r.move(r.height, 0)
}
if r.mouse {
r.csi("?1000l")