summaryrefslogtreecommitdiff
path: root/src/options.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2022-10-30 00:12:01 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2022-11-01 13:27:00 +0900
commite61585f2f37c6b1ead971f448af8db26dff1502c (patch)
tree4c8df98b88b9577da95e9300e345aaaa27517e6d /src/options.go
parent0de1aacb0cea3a559e07b84e922eb2aea61b8c96 (diff)
downloadfzf-e61585f2f37c6b1ead971f448af8db26dff1502c.tar.gz
Add --border-label and --border-label-pos
Close #3022
Diffstat (limited to 'src/options.go')
-rw-r--r--src/options.go180
1 files changed, 103 insertions, 77 deletions
diff --git a/src/options.go b/src/options.go
index acf67281..80ca3e11 100644
--- a/src/options.go
+++ b/src/options.go
@@ -18,97 +18,101 @@ import (
const usage = `usage: fzf [options]
Search
- -x, --extended Extended-search mode
- (enabled by default; +x or --no-extended to disable)
- -e, --exact Enable Exact-match
- -i Case-insensitive match (default: smart-case match)
- +i Case-sensitive match
- --scheme=SCHEME Scoring scheme [default|path|history]
- --literal Do not normalize latin script letters before matching
- -n, --nth=N[,..] Comma-separated list of field index expressions
- for limiting search scope. Each can be a non-zero
- integer or a range expression ([BEGIN]..[END]).
- --with-nth=N[,..] Transform the presentation of each line using
- field index expressions
- -d, --delimiter=STR Field delimiter regex (default: AWK-style)
- +s, --no-sort Do not sort the result
- --tac Reverse the order of the input
- --disabled Do not perform search
- --tiebreak=CRI[,..] Comma-separated list of sort criteria to apply
- when the scores are tied [length|chunk|begin|end|index]
- (default: length)
+ -x, --extended Extended-search mode
+ (enabled by default; +x or --no-extended to disable)
+ -e, --exact Enable Exact-match
+ -i Case-insensitive match (default: smart-case match)
+ +i Case-sensitive match
+ --scheme=SCHEME Scoring scheme [default|path|history]
+ --literal Do not normalize latin script letters before matching
+ -n, --nth=N[,..] Comma-separated list of field index expressions
+ for limiting search scope. Each can be a non-zero
+ integer or a range expression ([BEGIN]..[END]).
+ --with-nth=N[,..] Transform the presentation of each line using
+ field index expressions
+ -d, --delimiter=STR Field delimiter regex (default: AWK-style)
+ +s, --no-sort Do not sort the result
+ --tac Reverse the order of the input
+ --disabled Do not perform search
+ --tiebreak=CRI[,..] Comma-separated list of sort criteria to apply
+ when the scores are tied [length|chunk|begin|end|index]
+ (default: length)
Interface
- -m, --multi[=MAX] Enable multi-select with tab/shift-tab
- --no-mouse Disable mouse
- --bind=KEYBINDS Custom key bindings. Refer to the man page.
- --cycle Enable cyclic scroll
- --keep-right Keep the right end of the line visible on overflow
- --scroll-off=LINES Number of screen lines to keep above or below when
- scrolling to the top or to the bottom (default: 0)
- --no-hscroll Disable horizontal scroll
- --hscroll-off=COLS Number of screen columns to keep to the right of the
- highlighted substring (default: 10)
- --filepath-word Make word-wise movements respect path separators
- --jump-labels=CHARS Label characters for jump and jump-accept
+ -m, --multi[=MAX] Enable multi-select with tab/shift-tab
+ --no-mouse Disable mouse
+ --bind=KEYBINDS Custom key bindings. Refer to the man page.
+ --cycle Enable cyclic scroll
+ --keep-right Keep the right end of the line visible on overflow
+ --scroll-off=LINES Number of screen lines to keep above or below when
+ scrolling to the top or to the bottom (default: 0)
+ --no-hscroll Disable horizontal scroll
+ --hscroll-off=COLS Number of screen columns to keep to the right of the
+ highlighted substring (default: 10)
+ --filepath-word Make word-wise movements respect path separators
+ --jump-labels=CHARS Label characters for jump and jump-accept
Layout
- --height=[~]HEIGHT[%] Display fzf window below the cursor with the given
- height instead of using fullscreen.
- If prefixed with '~', fzf will determine the height
- according to the input size.
- --min-height=HEIGHT Minimum height when --height is given in percent
- (default: 10)
- --layout=LAYOUT Choose layout: [default|reverse|reverse-list]
- --border[=STYLE] Draw border around the finder
- [rounded|sharp|horizontal|vertical|
- top|bottom|left|right|none] (default: rounded)
- --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|inline|hidden]
- --prompt=STR Input prompt (default: '> ')
- --pointer=STR Pointer to the current line (default: '>')
- --marker=STR Multi-select marker (default: '>')
- --header=STR String to print as header
- --header-lines=N The first N lines of the input are treated as header
- --header-first Print header before the prompt line
- --ellipsis=STR Ellipsis to show when line is truncated (default: '..')
+ --height=[~]HEIGHT[%] Display fzf window below the cursor with the given
+ height instead of using fullscreen.
+ If prefixed with '~', fzf will determine the height
+ according to the input size.
+ --min-height=HEIGHT Minimum height when --height is given in percent
+ (default: 10)
+ --layout=LAYOUT Choose layout: [default|reverse|reverse-list]
+ --border[=STYLE] Draw border around the finder
+ [rounded|sharp|horizontal|vertical|
+ top|bottom|left|right|none] (default: rounded)
+ --border-label=LABEL Label to print on the border
+ --border-label-pos=COL Position of the border label
+ [POSITIVE_INTEGER: columns from left|
+ NEGATIVE_INTEGER: columns from right] (default: 0)
+ --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|inline|hidden]
+ --prompt=STR Input prompt (default: '> ')
+ --pointer=STR Pointer to the current line (default: '>')
+ --marker=STR Multi-select marker (default: '>')
+ --header=STR String to print as header
+ --header-lines=N The first N lines of the input are treated as header
+ --header-first Print header before the prompt line
+ --ellipsis=STR Ellipsis to show when line is truncated (default: '..')
Display
- --ansi Enable processing of ANSI color codes
- --tabstop=SPACES Number of spaces for a tab character (default: 8)
- --color=COLSPEC Base scheme (dark|light|16|bw) and/or custom colors
- --no-bold Do not use bold text
+ --ansi Enable processing of ANSI color codes
+ --tabstop=SPACES Number of spaces for a tab character (default: 8)
+ --color=COLSPEC Base scheme (dark|light|16|bw) and/or custom colors
+ --no-bold Do not use bold text
History
- --history=FILE History file
- --history-size=N Maximum number of history entries (default: 1000)
+ --history=FILE History file
+ --history-size=N Maximum number of history entries (default: 1000)
Preview
- --preview=COMMAND Command to preview highlighted line ({})
- --preview-window=OPT Preview window layout (default: right:50%)
- [up|down|left|right][,SIZE[%]]
- [,[no]wrap][,[no]cycle][,[no]follow][,[no]hidden]
- [,border-BORDER_OPT]
- [,+SCROLL[OFFSETS][/DENOM]][,~HEADER_LINES]
- [,default][,<SIZE_THRESHOLD(ALTERNATIVE_LAYOUT)]
+ --preview=COMMAND Command to preview highlighted line ({})
+ --preview-window=OPT Preview window layout (default: right:50%)
+ [up|down|left|right][,SIZE[%]]
+ [,[no]wrap][,[no]cycle][,[no]follow][,[no]hidden]
+ [,border-BORDER_OPT]
+ [,+SCROLL[OFFSETS][/DENOM]][,~HEADER_LINES]
+ [,default][,<SIZE_THRESHOLD(ALTERNATIVE_LAYOUT)]
Scripting
- -q, --query=STR Start the finder with the given query
- -1, --select-1 Automatically select the only match
- -0, --exit-0 Exit immediately when there's no match
- -f, --filter=STR Filter mode. Do not start interactive finder.
- --print-query Print query as the first line
- --expect=KEYS Comma-separated list of keys to complete fzf
- --read0 Read input delimited by ASCII NUL characters
- --print0 Print output delimited by ASCII NUL characters
- --sync Synchronous search for multi-staged filtering
- --version Display version information and exit
+ -q, --query=STR Start the finder with the given query
+ -1, --select-1 Automatically select the only match
+ -0, --exit-0 Exit immediately when there's no match
+ -f, --filter=STR Filter mode. Do not start interactive finder.
+ --print-query Print query as the first line
+ --expect=KEYS Comma-separated list of keys to complete fzf
+ --read0 Read input delimited by ASCII NUL characters
+ --print0 Print output delimited by ASCII NUL characters
+ --sync Synchronous search for multi-staged filtering
+ --version Display version information and exit
Environment variables
- FZF_DEFAULT_COMMAND Default command to use when input is tty
- FZF_DEFAULT_OPTS Default options
- (e.g. '--layout=reverse --inline-info')
+ FZF_DEFAULT_COMMAND Default command to use when input is tty
+ FZF_DEFAULT_OPTS Default options
+ (e.g. '--layout=reverse --inline-info')
`
@@ -188,6 +192,13 @@ type previewOpts struct {
alternative *previewOpts
}
+func parseLabelPosition(arg string) int {
+ if strings.ToLower(arg) == "center" {
+ return 0
+ }
+ return atoi(arg)
+}
+
func (a previewOpts) aboveOrBelow() bool {
return a.size.size > 0 && (a.position == posUp || a.position == posDown)
}
@@ -258,6 +269,8 @@ type Options struct {
Margin [4]sizeSpec
Padding [4]sizeSpec
BorderShape tui.BorderShape
+ Label string
+ LabelPos int
Unicode bool
Tabstop int
ClearOnExit bool
@@ -324,6 +337,8 @@ func defaultOptions() *Options {
Padding: defaultMargin(),
Unicode: true,
Tabstop: 8,
+ Label: "",
+ LabelPos: 0,
ClearOnExit: true,
Version: false}
}
@@ -798,6 +813,8 @@ func parseTheme(defaultTheme *tui.ColorTheme, str string) *tui.ColorTheme {
mergeAttr(&theme.CurrentMatch)
case "border":
mergeAttr(&theme.Border)
+ case "label":
+ mergeAttr(&theme.BorderLabel)
case "prompt":
mergeAttr(&theme.Prompt)
case "spinner":
@@ -1556,6 +1573,11 @@ func parseOptions(opts *Options, allArgs []string) {
case "--border":
hasArg, arg := optionalNextString(allArgs, &i)
opts.BorderShape = parseBorder(arg, !hasArg)
+ case "--border-label":
+ opts.Label = nextString(allArgs, &i, "label required")
+ case "--border-label-pos":
+ pos := nextString(allArgs, &i, "label position required (positive or negative integer or 'center')")
+ opts.LabelPos = parseLabelPosition(pos)
case "--no-unicode":
opts.Unicode = false
case "--unicode":
@@ -1591,6 +1613,10 @@ func parseOptions(opts *Options, allArgs []string) {
opts.Delimiter = delimiterRegexp(value)
} else if match, value := optString(arg, "--border="); match {
opts.BorderShape = parseBorder(value, false)
+ } else if match, value := optString(arg, "--border-label="); match {
+ opts.Label = value
+ } else if match, value := optString(arg, "--border-label-pos="); match {
+ opts.LabelPos = parseLabelPosition(value)
} else if match, value := optString(arg, "--prompt="); match {
opts.Prompt = value
} else if match, value := optString(arg, "--pointer="); match {