From 5ad2ac259b09de62f9454616c21b4344bab52aaf Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 17 Nov 2022 08:29:01 +0530 Subject: [PATCH] When truncating descriptions for completion truncate at word boundaries --- tools/cli/zsh.go | 3 ++- tools/utils/style/indent-and-wrap.go | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/tools/cli/zsh.go b/tools/cli/zsh.go index d1bac727a..18199b97a 100644 --- a/tools/cli/zsh.go +++ b/tools/cli/zsh.go @@ -8,6 +8,7 @@ import ( "kitty/tools/cli/markup" "kitty/tools/tty" "kitty/tools/utils" + "kitty/tools/utils/style" "kitty/tools/wcswidth" "strings" ) @@ -67,7 +68,7 @@ func (self *Match) FormatForCompletionList(max_word_len int, f *markup.Context, word += strings.Repeat(" ", max_word_len-word_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 { return word + "\n" + strings.Repeat(" ", max_word_len+2) + desc diff --git a/tools/utils/style/indent-and-wrap.go b/tools/utils/style/indent-and-wrap.go index 8d083514f..f2d2761cf 100644 --- a/tools/utils/style/indent-and-wrap.go +++ b/tools/utils/style/indent-and-wrap.go @@ -448,9 +448,9 @@ func (self *wrapper) handle_osc(raw []byte) error { return nil } -func (self *wrapper) wrap_text(text string) string { +func (self *wrapper) wrap_text(text string) []string { if text == "" { - return text + return []string{""} } self.current_line.reset() self.current_word.reset() @@ -467,7 +467,7 @@ func (self *wrapper) wrap_text(text string) string { last_line = "" } self.append_line(last_line) - return strings.Join(self.lines, "\n") + return self.lines } func new_wrapper(indent string, width int) *wrapper { @@ -480,8 +480,12 @@ func new_wrapper(indent string, width int) *wrapper { 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.ignore_lines_containing = ignore_lines_containing 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") +}