@@ -3,7 +3,6 @@ package messages
33import (
44 "encoding/json"
55 "fmt"
6− "strconv"
76 "strings"
87 "time"
98
@@ -657,7 +656,6 @@ func joinHeaderBody(header, body string) string {
657656func renderPlainContent(v *toolCallCmp, content string) string {
658657 t := styles.CurrentTheme()
659658 content = strings.TrimSpace(content)
660− content = escapeContent(t, content)
661659 lines := strings.Split(content, "\n")
662660
663661 width := v.textWidth() - 2 // -2 for left padding
@@ -696,7 +694,6 @@ func pad(v any, width int) string {
696694
697695func renderCodeContent(v *toolCallCmp, path, content string, offset int) string {
698696 t := styles.CurrentTheme()
699− content = escapeContent(t, content)
700697 truncated := truncateHeight(content, responseContextHeight)
701698
702699 highlighted, _ := highlight.SyntaxHighlight(truncated, path, t.BgBase)
@@ -769,45 +766,3 @@ func prettifyToolName(name string) string {
769766 return name
770767 }
771768}
772−
773−// escapeContent escapes ANSI escape sequences and control characters in the
774−// content and styles it for display in the terminal.
775−func escapeContent(t *styles.Theme, content string) string {
776− content = strings.ReplaceAll(content, "\r\n", "\n")
777− lines := strings.Split(content, "\n")
778− for i, line := range lines {
779− lines[i] = escapeLine(t, line)
780− }
781−
782− content = strings.Join(lines, "\n")
783− return content
784−}
785−
786−// escapeLine escapes ANSI escape sequences and control characters and styles
787−// them for display in the terminal.
788−func escapeLine(t *styles.Theme, text string) string {
789− var (
790− sb strings.Builder
791− state byte
792− seq string
793− n int
794− w int
795− )
796− var faint lipgloss.Style
797− if t != nil {
798− faint = t.S().Muted.Faint(true)
799− }
800− for len(text) > 0 {
801− seq, w, n, state = ansi.DecodeSequence(text, state, nil)
802− if w > 0 {
803− sb.WriteString(seq)
804− } else {
805− quote := strconv.Quote(seq)
806− quote = strings.TrimPrefix(quote, "\"")
807− quote = strings.TrimSuffix(quote, "\"")
808− sb.WriteString(faint.Render(quote))
809− }
810− text = text[n:]
811− }
812− return sb.String()
813−}