zsh breaks when there are escape codes in completion descriptions
This commit is contained in:
parent
3e4df7d812
commit
d4c103e53e
@ -60,12 +60,11 @@ func (self *Match) FormatForCompletionList(max_word_len int, f *markup.Context,
|
|||||||
desc = f.Prettify(line)
|
desc = f.Prettify(line)
|
||||||
|
|
||||||
multiline := false
|
multiline := false
|
||||||
max_desc_len := screen_width - 2
|
max_desc_len := screen_width - max_word_len - 3
|
||||||
if word_len > max_word_len {
|
if word_len > max_word_len {
|
||||||
multiline = true
|
multiline = true
|
||||||
} else {
|
} else {
|
||||||
word += strings.Repeat(" ", max_word_len-word_len)
|
word += strings.Repeat(" ", max_word_len-word_len)
|
||||||
max_desc_len = screen_width - max_word_len - 3
|
|
||||||
}
|
}
|
||||||
if wcswidth.Stringwidth(desc) > max_desc_len {
|
if wcswidth.Stringwidth(desc) > max_desc_len {
|
||||||
desc = wcswidth.TruncateToVisualLength(desc, max_desc_len-2) + "\x1b[m…"
|
desc = wcswidth.TruncateToVisualLength(desc, max_desc_len-2) + "\x1b[m…"
|
||||||
@ -108,7 +107,7 @@ func serialize(completions *Completions, f *markup.Context, screen_width int) ([
|
|||||||
fmt.Fprintln(&output, "compdescriptions=(")
|
fmt.Fprintln(&output, "compdescriptions=(")
|
||||||
limit := mg.max_visual_word_length(16)
|
limit := mg.max_visual_word_length(16)
|
||||||
for _, m := range mg.Matches {
|
for _, m := range mg.Matches {
|
||||||
fmt.Fprintln(&output, utils.QuoteStringForSH(m.FormatForCompletionList(limit, f, screen_width)))
|
fmt.Fprintln(&output, utils.QuoteStringForSH(wcswidth.StripEscapeCodes(m.FormatForCompletionList(limit, f, screen_width))))
|
||||||
}
|
}
|
||||||
fmt.Fprintln(&output, ")")
|
fmt.Fprintln(&output, ")")
|
||||||
cmd.WriteString(" -l -d compdescriptions")
|
cmd.WriteString(" -l -d compdescriptions")
|
||||||
|
|||||||
@ -5,6 +5,7 @@ package wcswidth
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"kitty/tools/utils"
|
"kitty/tools/utils"
|
||||||
)
|
)
|
||||||
@ -125,3 +126,16 @@ func Stringwidth(text string) int {
|
|||||||
w := CreateWCWidthIterator()
|
w := CreateWCWidthIterator()
|
||||||
return w.Parse(utils.UnsafeStringToBytes(text))
|
return w.Parse(utils.UnsafeStringToBytes(text))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func StripEscapeCodes(text string) string {
|
||||||
|
out := strings.Builder{}
|
||||||
|
out.Grow(len(text))
|
||||||
|
|
||||||
|
p := EscapeCodeParser{}
|
||||||
|
p.HandleRune = func(ch rune) error {
|
||||||
|
out.WriteRune(ch)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
p.ParseString(text)
|
||||||
|
return out.String()
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user