tui: revamp footer (some more)
Simplified layout logic, reorganized elements
This commit is contained in:
@@ -61,22 +61,52 @@ func Width(str string) int {
|
||||
return ansi.PrintableRuneWidth(str)
|
||||
}
|
||||
|
||||
// truncate a string until its rendered cell width + the provided tail fits
|
||||
// within the given width
|
||||
func TruncateToCellWidth(str string, width int, tail string) string {
|
||||
cellWidth := ansi.PrintableRuneWidth(str)
|
||||
if cellWidth <= width {
|
||||
return str
|
||||
}
|
||||
tailWidth := ansi.PrintableRuneWidth(tail)
|
||||
for {
|
||||
str = str[:len(str)-((cellWidth+tailWidth)-width)]
|
||||
cellWidth = ansi.PrintableRuneWidth(str)
|
||||
if cellWidth+tailWidth <= max(width, 0) {
|
||||
break
|
||||
}
|
||||
}
|
||||
return str + tail
|
||||
func TruncateRightToCellWidth(str string, width int, tail string) string {
|
||||
cellWidth := ansi.PrintableRuneWidth(str)
|
||||
if cellWidth <= width {
|
||||
return str
|
||||
}
|
||||
|
||||
tailWidth := ansi.PrintableRuneWidth(tail)
|
||||
if width <= tailWidth {
|
||||
return tail[:width]
|
||||
}
|
||||
|
||||
targetWidth := width - tailWidth
|
||||
runes := []rune(str)
|
||||
|
||||
for i := len(runes) - 1; i >= 0; i-- {
|
||||
str = string(runes[:i])
|
||||
if ansi.PrintableRuneWidth(str) <= targetWidth {
|
||||
return str + tail
|
||||
}
|
||||
}
|
||||
|
||||
return tail
|
||||
}
|
||||
|
||||
func TruncateLeftToCellWidth(str string, width int, tail string) string {
|
||||
cellWidth := ansi.PrintableRuneWidth(str)
|
||||
if cellWidth <= width {
|
||||
return str
|
||||
}
|
||||
|
||||
tailWidth := ansi.PrintableRuneWidth(tail)
|
||||
if width <= tailWidth {
|
||||
return tail[:width]
|
||||
}
|
||||
|
||||
targetWidth := width - tailWidth
|
||||
runes := []rune(str)
|
||||
|
||||
for i := 0; i < len(runes); i++ {
|
||||
str = string(runes[i:])
|
||||
if ansi.PrintableRuneWidth(str) <= targetWidth {
|
||||
return tail + str
|
||||
}
|
||||
}
|
||||
|
||||
return tail
|
||||
}
|
||||
|
||||
func ScrollIntoView(vp *viewport.Model, offset int, edge int) {
|
||||
@@ -105,4 +135,3 @@ func ErrorBanner(err error, width int) string {
|
||||
Foreground(lipgloss.Color("1")).
|
||||
Render(fmt.Sprintf("%s", err))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user