m/fzf
1
0
mirror of https://github.com/junegunn/fzf.git synced 2025-11-15 06:43:47 -05:00

Do not reserve a single column at the end when scrollbar is hidden

Close #4410

Example:
    fzf --pointer '' --marker '' --no-scrollbar --wrap --wrap-sign ''
This commit is contained in:
Junegunn Choi
2025-06-20 08:22:58 +09:00
parent 575bc0768c
commit 549ce3cf6c

View File

@@ -1479,11 +1479,18 @@ func getScrollbar(perLine int, total int, height int, offset int) (int, int) {
return barLength, barStart return barLength, barStart
} }
func (t *Terminal) barCol() int {
if len(t.scrollbar) == 0 && !t.listBorderShape.HasRight() && !t.borderShape.HasRight() && !t.hasPreviewWindowOnRight() {
return 0
}
return 1
}
func (t *Terminal) wrapCols() int { func (t *Terminal) wrapCols() int {
if !t.wrap { if !t.wrap {
return 0 // No wrap return 0 // No wrap
} }
return util.Max(t.window.Width()-(t.pointerLen+t.markerLen+1), 1) return util.Max(t.window.Width()-(t.pointerLen+t.markerLen+t.barCol()), 1)
} }
func (t *Terminal) clearNumLinesCache() { func (t *Terminal) clearNumLinesCache() {
@@ -3070,9 +3077,11 @@ func (t *Terminal) printList() {
func (t *Terminal) printBar(lineNum int, forceRedraw bool, barRange [2]int) bool { func (t *Terminal) printBar(lineNum int, forceRedraw bool, barRange [2]int) bool {
hasBar := lineNum >= barRange[0] && lineNum < barRange[1] hasBar := lineNum >= barRange[0] && lineNum < barRange[1]
if (hasBar != t.prevLines[lineNum].hasBar || forceRedraw) && t.window.Width() > 0 { if (hasBar != t.prevLines[lineNum].hasBar || forceRedraw) && t.window.Width() > 0 {
t.move(lineNum, t.window.Width()-1, true) if len(t.scrollbar) > 0 {
if len(t.scrollbar) > 0 && hasBar { t.move(lineNum, t.window.Width()-1, true)
t.window.CPrint(tui.ColScrollbar, t.scrollbar) if hasBar {
t.window.CPrint(tui.ColScrollbar, t.scrollbar)
}
} }
} }
return hasBar return hasBar
@@ -3128,7 +3137,7 @@ func (t *Terminal) printItem(result Result, line int, maxLine int, index int, cu
return line + numLines - 1 return line + numLines - 1
} }
maxWidth := t.window.Width() - (t.pointerLen + t.markerLen + 1) maxWidth := t.window.Width() - (t.pointerLen + t.markerLen + t.barCol())
postTask := func(lineNum int, width int, wrapped bool, forceRedraw bool) { postTask := func(lineNum int, width int, wrapped bool, forceRedraw bool) {
width += extraWidth width += extraWidth
if (current || selected || alt) && t.highlightLine { if (current || selected || alt) && t.highlightLine {
@@ -3447,7 +3456,7 @@ func (t *Terminal) printHighlighted(result Result, colBase tui.ColorPair, colMat
indentSize = preTask(marker) indentSize = preTask(marker)
} }
maxWidth := t.window.Width() - (indentSize + 1) maxWidth := t.window.Width() - (indentSize + t.barCol())
wasWrapped := false wasWrapped := false
if wrapped { if wrapped {
wrapSign := t.wrapSign wrapSign := t.wrapSign
@@ -4539,6 +4548,10 @@ func (t *Terminal) hasPreviewWindow() bool {
return t.pwindow != nil return t.pwindow != nil
} }
func (t *Terminal) hasPreviewWindowOnRight() bool {
return t.hasPreviewWindow() && t.activePreviewOpts.position == posRight
}
func (t *Terminal) currentItem() *Item { func (t *Terminal) currentItem() *Item {
cnt := t.merger.Length() cnt := t.merger.Length()
if t.cy >= 0 && cnt > 0 && cnt > t.cy { if t.cy >= 0 && cnt > 0 && cnt > t.cy {