summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2023-06-10 23:11:05 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2023-06-10 23:11:05 +0900
commite627ca6bd7fa40ef3f9077aa49f7c9019b474997 (patch)
treeee0b60112991927caa2364863362aba2f5eee663
parentc97172bdd477725c35034526e35a518a61df7e58 (diff)
Add --info=inline-right
Close #3322
-rw-r--r--CHANGELOG.md3
-rw-r--r--man/man1/fzf.12
-rw-r--r--src/options.go7
-rw-r--r--src/terminal.go22
4 files changed, 28 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fbc8222b..28db9dce 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,9 @@
CHANGELOG
=========
-0.41.2
+0.42.0
------
+- Added new info style: `--info=inline-right`
- Added new border style `thinblock` which uses symbols for legacy computing
[one eighth block elements](https://en.wikipedia.org/wiki/Symbols_for_Legacy_Computing)
- Similarly to `block`, this style is suitable when using a different
diff --git a/man/man1/fzf.1 b/man/man1/fzf.1
index 518f1a6e..cde02951 100644
--- a/man/man1/fzf.1
+++ b/man/man1/fzf.1
@@ -361,6 +361,8 @@ Determines the display style of finder info (match counters).
.br
.BR inline:SEPARATOR " Display on the same line with a non-default separator"
.br
+.BR inline-right " Display on the right end of the same line
+.br
.BR hidden " Do not display finder info"
.br
diff --git a/src/options.go b/src/options.go
index 69e5db91..f04d7f20 100644
--- a/src/options.go
+++ b/src/options.go
@@ -72,7 +72,7 @@ const usage = `usage: fzf [options]
(default: 0 or center)
--margin=MARGIN Screen margin (TRBL | TB,RL | T,RL,B | T,R,B,L)
--padding=PADDING Padding inside border (TRBL | TB,RL | T,RL,B | T,R,B,L)
- --info=STYLE Finder info style [default|hidden|inline|inline:SEPARATOR]
+ --info=STYLE Finder info style [default|hidden|inline[:SEPARATOR]|inline-right]
--separator=STR String to form horizontal separator on info line
--no-separator Hide info line separator
--scrollbar[=C1[C2]] Scrollbar character(s) (each for main and preview window)
@@ -195,6 +195,7 @@ type infoStyle int
const (
infoDefault infoStyle = iota
infoInline
+ infoInlineRight
infoHidden
)
@@ -1378,6 +1379,8 @@ func parseInfoStyle(str string) (infoStyle, string) {
return infoDefault, ""
case "inline":
return infoInline, defaultInfoSep
+ case "inline-right":
+ return infoInlineRight, ""
case "hidden":
return infoHidden, ""
default:
@@ -1385,7 +1388,7 @@ func parseInfoStyle(str string) (infoStyle, string) {
if strings.HasPrefix(str, prefix) {
return infoInline, strings.ReplaceAll(str[len(prefix):], "\n", " ")
}
- errorExit("invalid info style (expected: default|hidden|inline|inline:SEPARATOR)")
+ errorExit("invalid info style (expected: default|hidden|inline[:SEPARATOR]|inline-right)")
}
return infoDefault, ""
}
diff --git a/src/terminal.go b/src/terminal.go
index b80fc303..08ea253b 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -1464,9 +1464,7 @@ func (t *Terminal) trimMessage(message string, maxWidth int) string {
func (t *Terminal) printInfo() {
pos := 0
line := t.promptLine()
- switch t.infoStyle {
- case infoDefault:
- t.move(line+1, 0, t.separatorLen == 0)
+ printSpinner := func() {
if t.reading {
duration := int64(spinnerDuration)
idx := (time.Now().UnixNano() % (duration * int64(len(t.spinner)))) / duration
@@ -1474,8 +1472,16 @@ func (t *Terminal) printInfo() {
} else {
t.window.Print(" ") // Clear spinner
}
+ }
+ switch t.infoStyle {
+ case infoDefault:
+ t.move(line+1, 0, t.separatorLen == 0)
+ printSpinner()
t.move(line+1, 2, false)
pos = 2
+ case infoInlineRight:
+ pos = t.promptLen + t.queryLen[0] + t.queryLen[1] + 1
+ t.move(line, pos, true)
case infoInline:
pos = t.promptLen + t.queryLen[0] + t.queryLen[1] + 1
str := t.infoSep
@@ -1523,6 +1529,16 @@ func (t *Terminal) printInfo() {
if t.failed != nil && t.count == 0 {
output = fmt.Sprintf("[Command failed: %s]", *t.failed)
}
+ if t.infoStyle == infoInlineRight {
+ pos = util.Max(pos, t.window.Width()-util.StringWidth(output)-3)
+ if pos >= t.window.Width() {
+ return
+ }
+ t.move(line, pos, false)
+ printSpinner()
+ t.window.Print(" ")
+ pos += 2
+ }
maxWidth := t.window.Width() - pos
output = t.trimMessage(output, maxWidth)
t.window.CPrint(tui.ColInfo, output)