diff --git a/tools/cli/markup/prettify.go b/tools/cli/markup/prettify.go index 66a0639d2..bb6bb24bc 100644 --- a/tools/cli/markup/prettify.go +++ b/tools/cli/markup/prettify.go @@ -7,6 +7,7 @@ import ( "os" "path/filepath" "strings" + "unicode" "kitty" "kitty/tools/utils" @@ -50,6 +51,28 @@ func New(allow_escape_codes bool) *Context { return &ans } +func remove_backslash_escapes(text string) string { + // see https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#escaping-mechanism + out := strings.Builder{} + prev_was_slash := false + out.Grow(len(text)) + for _, ch := range text { + if prev_was_slash { + if !unicode.IsSpace(ch) { + out.WriteRune(ch) + } + prev_was_slash = false + } else { + if ch == '\\' { + prev_was_slash = true + } else { + out.WriteRune(ch) + } + } + } + return out.String() +} + func replace_all_rst_roles(str string, repl func(rst_format_match) string) string { var m rst_format_match rf := func(full_match string, groupdict map[string]utils.SubMatch) string { @@ -132,7 +155,7 @@ func (self *Context) Prettify(text string) string { case "term": return self.ref_hyperlink(val, "term-") case "code": - return self.Code(val) + return self.Code(remove_backslash_escapes(val)) case "option": idx := strings.LastIndex(val, "--") if idx < 0 {