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