feat(editor): if completed item is image path, attach

tauraamui created

Change summary

internal/tui/components/chat/editor/editor.go | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)

Detailed changes

internal/tui/components/chat/editor/editor.go 🔗

@@ -176,6 +176,7 @@ func (m *editorCmp) repositionCompletions() tea.Msg {
 }
 
 func onCompletionItemSelect(fsys fs.FS, item FileCompletionItem, insert bool, m *editorCmp) (tea.Model, tea.Cmd) {
+	var cmd tea.Cmd
 	path := item.Path
 	// check if item is an image
 	if isExtOfAllowedImageType(path) {
@@ -192,7 +193,7 @@ func onCompletionItemSelect(fsys fs.FS, item FileCompletionItem, insert bool, m
 		mimeType := http.DetectContentType(content[:mimeBufferSize])
 		fileName := filepath.Base(path)
 		attachment := message.Attachment{FilePath: path, FileName: fileName, MimeType: mimeType, Content: content}
-		return m, util.CmdHandler(filepicker.FilePickedMsg{
+		cmd = util.CmdHandler(filepicker.FilePickedMsg{
 			Attachment: attachment,
 		})
 	}
@@ -200,9 +201,11 @@ func onCompletionItemSelect(fsys fs.FS, item FileCompletionItem, insert bool, m
 	word := m.textarea.Word()
 	// If the selected item is a file, insert its path into the textarea
 	value := m.textarea.Value()
-	value = value[:m.completionsStartIndex] + // Remove the current query
-		item.Path + // Insert the file path
-		value[m.completionsStartIndex+len(word):] // Append the rest of the value
+	value = value[:m.completionsStartIndex] // Remove the current query
+	if cmd == nil {
+		value += path // insert the file path
+	}
+	value += value[m.completionsStartIndex+len(word):] // Append the rest of the value
 	// XXX: This will always move the cursor to the end of the textarea.
 	m.textarea.SetValue(value)
 	m.textarea.MoveToEnd()
@@ -212,7 +215,7 @@ func onCompletionItemSelect(fsys fs.FS, item FileCompletionItem, insert bool, m
 		m.completionsStartIndex = 0
 	}
 	
-	return m, nil
+	return m, cmd
 }
 
 func isExtOfAllowedImageType(path string) bool {
@@ -291,7 +294,7 @@ func (m *editorCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 			return m, nil
 		}
 		if item, ok := msg.Value.(FileCompletionItem); ok {
-			onCompletionItemSelect(item, msg.Insert, m)
+			onCompletionItemSelect(os.DirFS("."), item, msg.Insert, m)
 		}
 	case commands.OpenExternalEditorMsg:
 		if m.app.CoderAgent.IsSessionBusy(m.session.ID) {