@@ -171,6 +171,8 @@ func (m *editorCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
172 m.attachments = append(m.attachments, msg.Attachment)
172 m.attachments = append(m.attachments, msg.Attachment)
173 return m, nil
173 return m, nil
174+ case completions.CompletionsOpenedMsg:
175+ m.isCompletionsOpen = true
174 case completions.CompletionsClosedMsg:
176 case completions.CompletionsClosedMsg:
175 m.isCompletionsOpen = false
177 m.isCompletionsOpen = false
176 m.currentQuery = ""
178 m.currentQuery = ""
@@ -183,9 +185,6 @@ func (m *editorCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
183 // If the selected item is a file, insert its path into the textarea
185 // If the selected item is a file, insert its path into the textarea
184 value := m.textarea.Value()
186 value := m.textarea.Value()
185 value = value[:m.completionsStartIndex]
187 value = value[:m.completionsStartIndex]
186− if len(value) > 0 && value[len(value)-1] != ' ' {
189 value += item.Path
188 value += item.Path
190 m.textarea.SetValue(value)
189 m.textarea.SetValue(value)
191 m.isCompletionsOpen = false
190 m.isCompletionsOpen = false
@@ -199,37 +198,15 @@ func (m *editorCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
199 case tea.KeyPressMsg:
198 case tea.KeyPressMsg:
201 // Completions
200 // Completions
202− case msg.String() == "/" && !m.isCompletionsOpen:
201+ case msg.String() == "/" && !m.isCompletionsOpen &&
202+ // only show if beginning of prompt, or if previous char is a space:
203+ (len(m.textarea.Value()) == 0 || m.textarea.Value()[len(m.textarea.Value())-1] == ' '):
203 m.isCompletionsOpen = true
204 m.isCompletionsOpen = true
204 m.currentQuery = ""
205 m.currentQuery = ""
205− cmds = append(cmds, m.startCompletions)
206 m.completionsStartIndex = len(m.textarea.Value())
206 m.completionsStartIndex = len(m.textarea.Value())
207− case msg.String() == "space" && m.isCompletionsOpen:
207+ cmds = append(cmds, m.startCompletions)
208− m.isCompletionsOpen = false
210− m.completionsStartIndex = 0
211− cmds = append(cmds, util.CmdHandler(completions.CloseCompletionsMsg{}))
212 case m.isCompletionsOpen && m.textarea.Cursor().X <= m.completionsStartIndex:
208 case m.isCompletionsOpen && m.textarea.Cursor().X <= m.completionsStartIndex:
213 cmds = append(cmds, util.CmdHandler(completions.CloseCompletionsMsg{}))
209 cmds = append(cmds, util.CmdHandler(completions.CloseCompletionsMsg{}))
214− case msg.String() == "backspace" && m.isCompletionsOpen:
215− if len(m.currentQuery) > 0 {
216− m.currentQuery = m.currentQuery[:len(m.currentQuery)-1]
217− cmds = append(cmds, util.CmdHandler(completions.FilterCompletionsMsg{
218− Query: m.currentQuery,
221− m.isCompletionsOpen = false
223− m.completionsStartIndex = 0
224− cmds = append(cmds, util.CmdHandler(completions.CloseCompletionsMsg{}))
227− if m.isCompletionsOpen {
228− m.currentQuery += msg.String()
229− cmds = append(cmds, util.CmdHandler(completions.FilterCompletionsMsg{
230− Query: m.currentQuery,
234 if key.Matches(msg, DeleteKeyMaps.AttachmentDeleteMode) {
211 if key.Matches(msg, DeleteKeyMaps.AttachmentDeleteMode) {
235 m.deleteMode = true
212 m.deleteMode = true
@@ -281,6 +258,36 @@ func (m *editorCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
282 m.textarea, cmd = m.textarea.Update(msg)
259 m.textarea, cmd = m.textarea.Update(msg)
283 cmds = append(cmds, cmd)
260 cmds = append(cmds, cmd)
262+ if m.textarea.Focused() {
263+ kp, ok := msg.(tea.KeyPressMsg)
265+ if kp.String() == "space" || m.textarea.Value() == "" {
266+ m.isCompletionsOpen = false
268+ m.completionsStartIndex = 0
269+ cmds = append(cmds, util.CmdHandler(completions.CloseCompletionsMsg{}))
271+ word := m.textarea.Word()
272+ if strings.HasPrefix(word, "/") {
273+ // XXX: wont' work if editing in the middle of the field.
274+ m.completionsStartIndex = strings.LastIndex(m.textarea.Value(), word)
275+ m.currentQuery = word[1:]
276+ m.isCompletionsOpen = true
277+ cmds = append(cmds, util.CmdHandler(completions.FilterCompletionsMsg{
278+ Query: m.currentQuery,
279+ Reopen: m.isCompletionsOpen,
282+ m.isCompletionsOpen = false
284+ m.completionsStartIndex = 0
285+ cmds = append(cmds, util.CmdHandler(completions.CloseCompletionsMsg{}))
284 return m, tea.Batch(cmds...)
291 return m, tea.Batch(cmds...)