When truncating descriptions for completion truncate at word boundaries

This commit is contained in:
Kovid Goyal 2022-11-17 08:29:01 +05:30
parent a2f022d166
commit 5ad2ac259b
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 10 additions and 5 deletions

View File

@ -8,6 +8,7 @@ import (
"kitty/tools/cli/markup" "kitty/tools/cli/markup"
"kitty/tools/tty" "kitty/tools/tty"
"kitty/tools/utils" "kitty/tools/utils"
"kitty/tools/utils/style"
"kitty/tools/wcswidth" "kitty/tools/wcswidth"
"strings" "strings"
) )
@ -67,7 +68,7 @@ func (self *Match) FormatForCompletionList(max_word_len int, f *markup.Context,
word += strings.Repeat(" ", max_word_len-word_len) word += strings.Repeat(" ", max_word_len-word_len)
} }
if wcswidth.Stringwidth(desc) > max_desc_len { if wcswidth.Stringwidth(desc) > max_desc_len {
desc = wcswidth.TruncateToVisualLength(desc, max_desc_len-2) + "\x1b[m\x1b]8;;\x1b\\…" desc = style.WrapTextAsLines(desc, "", max_desc_len-2)[0] + "…"
} }
if multiline { if multiline {
return word + "\n" + strings.Repeat(" ", max_word_len+2) + desc return word + "\n" + strings.Repeat(" ", max_word_len+2) + desc

View File

@ -448,9 +448,9 @@ func (self *wrapper) handle_osc(raw []byte) error {
return nil return nil
} }
func (self *wrapper) wrap_text(text string) string { func (self *wrapper) wrap_text(text string) []string {
if text == "" { if text == "" {
return text return []string{""}
} }
self.current_line.reset() self.current_line.reset()
self.current_word.reset() self.current_word.reset()
@ -467,7 +467,7 @@ func (self *wrapper) wrap_text(text string) string {
last_line = "" last_line = ""
} }
self.append_line(last_line) self.append_line(last_line)
return strings.Join(self.lines, "\n") return self.lines
} }
func new_wrapper(indent string, width int) *wrapper { func new_wrapper(indent string, width int) *wrapper {
@ -480,8 +480,12 @@ func new_wrapper(indent string, width int) *wrapper {
return &ans return &ans
} }
func WrapText(text string, indent string, width int, ignore_lines_containing ...string) string { func WrapTextAsLines(text string, indent string, width int, ignore_lines_containing ...string) []string {
w := new_wrapper(indent, width) w := new_wrapper(indent, width)
w.ignore_lines_containing = ignore_lines_containing w.ignore_lines_containing = ignore_lines_containing
return w.wrap_text(text) return w.wrap_text(text)
} }
func WrapText(text string, indent string, width int, ignore_lines_containing ...string) string {
return strings.Join(WrapTextAsLines(text, indent, width, ignore_lines_containing...), "\n")
}