mirror of
https://github.com/junegunn/fzf.git
synced 2025-08-26 09:53:49 -07:00
Clear previous non-Sixel text before rendering Sixel image (#2544)
This commit is contained in:
@@ -125,6 +125,7 @@ type previewed struct {
|
|||||||
numLines int
|
numLines int
|
||||||
offset int
|
offset int
|
||||||
filled bool
|
filled bool
|
||||||
|
sixel bool
|
||||||
wipe bool
|
wipe bool
|
||||||
wireframe bool
|
wireframe bool
|
||||||
}
|
}
|
||||||
@@ -691,7 +692,7 @@ func NewTerminal(opts *Options, eventBox *util.EventBox) *Terminal {
|
|||||||
initialPreviewOpts: opts.Preview,
|
initialPreviewOpts: opts.Preview,
|
||||||
previewOpts: opts.Preview,
|
previewOpts: opts.Preview,
|
||||||
previewer: previewer{0, []string{}, 0, false, true, disabledState, "", []bool{}},
|
previewer: previewer{0, []string{}, 0, false, true, disabledState, "", []bool{}},
|
||||||
previewed: previewed{0, 0, 0, false, false, false},
|
previewed: previewed{0, 0, 0, false, false, false, false},
|
||||||
previewBox: previewBox,
|
previewBox: previewBox,
|
||||||
eventBox: eventBox,
|
eventBox: eventBox,
|
||||||
mutex: sync.Mutex{},
|
mutex: sync.Mutex{},
|
||||||
@@ -1994,6 +1995,8 @@ func (t *Terminal) renderPreviewText(height int, lines []string, lineNo int, unc
|
|||||||
maxWidth := t.pwindow.Width()
|
maxWidth := t.pwindow.Width()
|
||||||
var ansi *ansiState
|
var ansi *ansiState
|
||||||
spinnerRedraw := t.pwindow.Y() == 0
|
spinnerRedraw := t.pwindow.Y() == 0
|
||||||
|
sixel := false
|
||||||
|
wireframe := false
|
||||||
Loop:
|
Loop:
|
||||||
for _, line := range lines {
|
for _, line := range lines {
|
||||||
var lbg tui.Color = -1
|
var lbg tui.Color = -1
|
||||||
@@ -2022,7 +2025,8 @@ Loop:
|
|||||||
for _, passThrough := range passThroughs {
|
for _, passThrough := range passThroughs {
|
||||||
// Handling Sixel output
|
// Handling Sixel output
|
||||||
requiredLines := 0
|
requiredLines := 0
|
||||||
if strings.HasPrefix(passThrough, "\x1bP") {
|
isSixel := strings.HasPrefix(passThrough, "\x1bP")
|
||||||
|
if isSixel {
|
||||||
t.previewed.wipe = true
|
t.previewed.wipe = true
|
||||||
if t.termSize.PxHeight > 0 {
|
if t.termSize.PxHeight > 0 {
|
||||||
rows := util.Max(0, strings.Count(passThrough, "-")-1)
|
rows := util.Max(0, strings.Count(passThrough, "-")-1)
|
||||||
@@ -2030,7 +2034,7 @@ Loop:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overflow
|
// Render wireframe when Sixel image cannot be displayed entirely
|
||||||
if requiredLines > 0 && y+requiredLines > height {
|
if requiredLines > 0 && y+requiredLines > height {
|
||||||
top := true
|
top := true
|
||||||
for ; y < height; y++ {
|
for ; y < height; y++ {
|
||||||
@@ -2038,18 +2042,19 @@ Loop:
|
|||||||
t.pwindow.CFill(tui.ColPreview.Fg(), tui.ColPreview.Bg(), tui.AttrRegular, t.makeImageBorder(maxWidth, top))
|
t.pwindow.CFill(tui.ColPreview.Fg(), tui.ColPreview.Bg(), tui.AttrRegular, t.makeImageBorder(maxWidth, top))
|
||||||
top = false
|
top = false
|
||||||
}
|
}
|
||||||
t.previewed.wireframe = true
|
wireframe = true
|
||||||
t.previewed.filled = true
|
t.previewed.filled = true
|
||||||
t.previewer.scrollable = true
|
t.previewer.scrollable = true
|
||||||
continue
|
break Loop
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.previewed.wireframe {
|
// Clear previous wireframe or any other text
|
||||||
t.previewed.wireframe = false
|
if t.previewed.wireframe || isSixel && !t.previewed.sixel {
|
||||||
for i := y + 1; i < height; i++ {
|
for i := y + 1; i < height; i++ {
|
||||||
t.pwindow.MoveAndClear(i, 0)
|
t.pwindow.MoveAndClear(i, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sixel = sixel || isSixel
|
||||||
t.pwindow.MoveAndClear(y, x)
|
t.pwindow.MoveAndClear(y, x)
|
||||||
t.tui.PassThrough(passThrough)
|
t.tui.PassThrough(passThrough)
|
||||||
|
|
||||||
@@ -2057,7 +2062,6 @@ Loop:
|
|||||||
if y+requiredLines == height {
|
if y+requiredLines == height {
|
||||||
t.pwindow.Move(y+requiredLines, 0)
|
t.pwindow.Move(y+requiredLines, 0)
|
||||||
t.previewed.filled = true
|
t.previewed.filled = true
|
||||||
t.previewer.scrollable = true
|
|
||||||
break Loop
|
break Loop
|
||||||
} else {
|
} else {
|
||||||
t.pwindow.MoveAndClear(y+requiredLines, 0)
|
t.pwindow.MoveAndClear(y+requiredLines, 0)
|
||||||
@@ -2109,6 +2113,8 @@ Loop:
|
|||||||
}
|
}
|
||||||
lineNo++
|
lineNo++
|
||||||
}
|
}
|
||||||
|
t.previewed.sixel = sixel
|
||||||
|
t.previewed.wireframe = wireframe
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Terminal) renderPreviewScrollbar(yoff int, barLength int, barStart int) {
|
func (t *Terminal) renderPreviewScrollbar(yoff int, barLength int, barStart int) {
|
||||||
|
Reference in New Issue
Block a user