Browse Source

fix(editor): handle UTF-8 characters properly in SetValueWithAttachments (#1469)

neolooong 6 months ago
parent
commit
e4e0b8fd34
1 changed files with 12 additions and 7 deletions
  1. 12 7
      packages/tui/internal/components/chat/editor.go

+ 12 - 7
packages/tui/internal/components/chat/editor.go

@@ -8,6 +8,7 @@ import (
 	"path/filepath"
 	"strconv"
 	"strings"
+	"unicode/utf8"
 
 	"github.com/charmbracelet/bubbles/v2/spinner"
 	tea "github.com/charmbracelet/bubbletea/v2"
@@ -524,14 +525,18 @@ func (m *editorComponent) SetValueWithAttachments(value string) {
 
 	i := 0
 	for i < len(value) {
+		r, size := utf8.DecodeRuneInString(value[i:])
 		// Check if filepath and add attachment
-		if value[i] == '@' {
-			start := i + 1
+		if r == '@' {
+			start := i + size
 			end := start
-			for end < len(value) && value[end] != ' ' && value[end] != '\t' && value[end] != '\n' && value[end] != '\r' {
-				end++
+			for end < len(value) {
+				nextR, nextSize := utf8.DecodeRuneInString(value[end:])
+				if nextR == ' ' || nextR == '\t' || nextR == '\n' || nextR == '\r' {
+					break
+				}
+				end += nextSize
 			}
-
 			if end > start {
 				filePath := value[start:end]
 				slog.Debug("test", "filePath", filePath)
@@ -548,8 +553,8 @@ func (m *editorComponent) SetValueWithAttachments(value string) {
 		}
 
 		// Not a valid file path, insert the character normally
-		m.textarea.InsertRune(rune(value[i]))
-		i++
+		m.textarea.InsertRune(r)
+		i += size
 	}
 }