Add --cursor-line to highlight the whole current line

Similar to 'set cursorline' of Vim.
This commit is contained in:
Junegunn Choi 2024-05-07 01:33:42 +09:00
parent 9e4780510e
commit c5fb0c43f9
No known key found for this signature in database
GPG Key ID: 254BC280FEF9C627
3 changed files with 23 additions and 3 deletions

View File

@ -534,6 +534,9 @@ color mappings.
--color='pointer:#E12672,marker:#E17899,prompt:#98BEDE,hl+:#98BC99'\fR
.RE
.TP
.B "--cursor-line"
Highlight the whole current line
.TP
.B "--no-bold"
Do not use bold text
.TP

View File

@ -92,6 +92,7 @@ const Usage = `usage: fzf [options]
--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
--cursor-line Highlight the whole current line
--no-bold Do not use bold text
History
@ -322,6 +323,7 @@ type Options struct {
MinHeight int
Layout layoutType
Cycle bool
CursorLine bool
KeepRight bool
Hscroll bool
HscrollOff int
@ -1948,6 +1950,10 @@ func parseOptions(opts *Options, allArgs []string) error {
opts.Layout = layoutDefault
case "--cycle":
opts.Cycle = true
case "--cursor-line":
opts.CursorLine = true
case "--no-cursor-line":
opts.CursorLine = false
case "--no-cycle":
opts.Cycle = false
case "--keep-right":

View File

@ -229,6 +229,7 @@ type Terminal struct {
printQuery bool
history *History
cycle bool
cursorLine bool
headerVisible bool
headerFirst bool
headerLines int
@ -754,6 +755,7 @@ func NewTerminal(opts *Options, eventBox *util.EventBox, executor *util.Executor
executor: executor,
paused: opts.Phony,
cycle: opts.Cycle,
cursorLine: opts.CursorLine,
headerVisible: true,
headerFirst: opts.HeaderFirst,
headerLines: opts.HeaderLines,
@ -1912,10 +1914,19 @@ func (t *Terminal) printItem(result Result, line int, i int, current bool, bar b
}
newLine.width = t.printHighlighted(result, tui.ColNormal, tui.ColMatch, false, true)
}
if current && t.cursorLine {
maxWidth := t.window.Width() - (t.pointerLen + t.markerLen + 1)
fillSpaces := maxWidth - newLine.width
newLine.width = maxWidth
if fillSpaces > 0 {
t.window.CPrint(tui.ColCurrent, strings.Repeat(" ", fillSpaces))
}
} else {
fillSpaces := prevLine.width - newLine.width
if fillSpaces > 0 {
t.window.Print(strings.Repeat(" ", fillSpaces))
}
}
printBar()
t.prevLines[i] = newLine
}