25 lines
386 B
Go
25 lines
386 B
Go
|
package utils
|
||
|
|
||
|
import (
|
||
|
rw "github.com/mattn/go-runewidth"
|
||
|
)
|
||
|
|
||
|
func TruncateFront(s string, w int, prefix string) string {
|
||
|
if rw.StringWidth(s) <= w {
|
||
|
return s
|
||
|
}
|
||
|
r := []rune(s)
|
||
|
pw := rw.StringWidth(prefix)
|
||
|
w -= pw
|
||
|
width := 0
|
||
|
i := len(r) - 1
|
||
|
for ; i >= 0; i-- {
|
||
|
cw := rw.RuneWidth(r[i])
|
||
|
width += cw
|
||
|
if width > w {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
return prefix + string(r[i+1:len(r)])
|
||
|
}
|