Skip to content

Commit 794f067

Browse files
committed
Update web search ux
1 parent 1a42062 commit 794f067

File tree

1 file changed

+29
-12
lines changed

1 file changed

+29
-12
lines changed

eca-chat.el

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ Must be a valid model supported by server, check `eca-chat-select-model`."
118118
(defvar-local eca-chat--spinner-string "")
119119
(defvar-local eca-chat--spinner-timer nil)
120120
(defvar-local eca-chat--progress-text "")
121+
(defvar-local eca-chat--last-user-message-pos nil)
121122

122123
(defvar eca-chat-buffer-name "<eca-chat>")
123124

@@ -309,13 +310,28 @@ This is similar to `backward-delete-char' but protects the prompt/context line."
309310
(select-window (get-buffer-window buffer))
310311
(set-window-buffer (get-buffer-window buffer) buffer)))
311312

312-
(defun eca-chat--add-content (content)
313-
"Add CONTENT to the chat."
313+
(defun eca-chat--mark-header ()
314+
"Mark last messages header."
314315
(let ((context-start (eca-chat--prompt-area-start-point)))
315316
(save-excursion
316317
(goto-char context-start)
317318
(goto-char (1- (point)))
318-
(insert content)
319+
(setq-local eca-chat--last-user-message-pos (point)))))
320+
321+
(defun eca-chat--add-header (content)
322+
"Add CONTENT to the chat just after last user input."
323+
(when eca-chat--last-user-message-pos
324+
(save-excursion
325+
(goto-char eca-chat--last-user-message-pos)
326+
(insert content))))
327+
328+
(defun eca-chat--add-text (text)
329+
"Add TEXT to the chat current position."
330+
(let ((context-start (eca-chat--prompt-area-start-point)))
331+
(save-excursion
332+
(goto-char context-start)
333+
(goto-char (1- (point)))
334+
(insert text)
319335
(point))))
320336

321337
(defun eca-chat--relativize-filename-for-workspace-root (filename roots)
@@ -482,29 +498,30 @@ This is similar to `backward-delete-char' but protects the prompt/context line."
482498
("text" (when-let* ((text (plist-get content :text)))
483499
(pcase role
484500
("user" (progn
485-
(eca-chat--add-content
501+
(eca-chat--add-text
486502
(propertize text
487503
'font-lock-face 'eca-chat-user-messages-face
488504
'line-prefix (propertize eca-chat-prompt-prefix 'font-lock-face 'eca-chat-user-messages-face)
489505
'line-spacing 10))
506+
(eca-chat--mark-header)
490507
(font-lock-ensure)))
491508
("system" (progn
492-
(eca-chat--add-content
509+
(eca-chat--add-text
493510
(propertize text
494511
'line-height 20
495512
'font-lock-face 'eca-chat-system-messages-face))))
496-
(_ (eca-chat--add-content text)))))
497-
("url" (eca-chat--add-content
513+
(_ (eca-chat--add-text text)))))
514+
("url" (eca-chat--add-header
498515
(concat
499-
"\n"
516+
"🌐 "
500517
(buttonize
501-
(concat "🌐" (plist-get content :title))
518+
(plist-get content :title)
502519
(lambda(_) (browse-url (plist-get content :url)))
503520
nil
504521
(plist-get content :url))
505-
"\n")))
522+
"\n\n")))
506523
("mcpToolCall" (let ((name (plist-get content :name)))
507-
(eca-chat--add-content
524+
(eca-chat--add-text
508525
(format (propertize "\n%s %s\n"
509526
'line-spacing 10)
510527
(propertize "Calling MCP tool"
@@ -519,7 +536,7 @@ This is similar to `backward-delete-char' but protects the prompt/context line."
519536
(setq-local eca-chat--progress-text (propertize (plist-get content :text) 'font-lock-face 'eca-chat-system-messages-face))))
520537
("finished" (progn
521538
(eca-chat--spinner-stop)
522-
(eca-chat--add-content (propertize "\n" 'line-spacing 10))
539+
(eca-chat--add-text (propertize "\n" 'line-spacing 10))
523540
(setq-local eca-chat--progress-text "")))))))))
524541

525542
(defun eca-chat-open ()

0 commit comments

Comments
 (0)