Skip to content

Commit eb8b176

Browse files
committed
Add eca-chat-cycle-behavior and update keymap for it
1 parent 9bd2f91 commit eb8b176

File tree

1 file changed

+41
-23
lines changed

1 file changed

+41
-23
lines changed

eca-chat.el

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,8 @@ Must be a positive integer."
397397
(define-key map (kbd "C-c C-k") #'eca-chat-reset)
398398
(define-key map (kbd "C-c C-l") #'eca-chat-clear)
399399
(define-key map (kbd "C-c C-t") #'eca-chat-talk)
400-
(define-key map (kbd "C-c C-b") #'eca-chat-select-behavior)
400+
(define-key map (kbd "C-c C-S-b") #'eca-chat-select-behavior)
401+
(define-key map (kbd "C-c C-b") #'eca-chat-cycle-behavior)
401402
(define-key map (kbd "C-c C-m") #'eca-chat-select-model)
402403
(define-key map (kbd "C-c C-n") #'eca-chat-new)
403404
(define-key map (kbd "C-c C-f") #'eca-chat-select)
@@ -1743,21 +1744,21 @@ Calls CB with the resulting message."
17431744
:annotation-function annotation-fn
17441745
:exit-function exit-fn)))
17451746

1746-
(defun eca-chat-config-updated (session chat-config)
1747-
"Update chat based on the CHAT-CONFIG for SESSION."
1748-
(-some->> (plist-get chat-config :welcomeMessage)
1749-
(setf (eca--session-chat-welcome-message session)))
1750-
(-some->> (plist-get chat-config :models)
1751-
(setf (eca--session-models session)))
1752-
(-some->> (plist-get chat-config :behaviors)
1753-
(setf (eca--session-chat-behaviors session)))
1754-
(-some->> (plist-get chat-config :selectModel)
1755-
(setf (eca--session-chat-selected-model session)))
1756-
(-some->> (plist-get chat-config :selectBehavior)
1757-
(setf (eca--session-chat-selected-behavior session))))
1747+
(defun eca-chat--handle-mcp-server-updated (session _server)
1748+
"Handle mcp SERVER updated for SESSION."
1749+
;; TODO do for all chats
1750+
(eca-chat--with-current-buffer (eca-chat--get-last-buffer session)
1751+
(force-mode-line-update)))
1752+
1753+
(defun eca-chat--set-behavior (session new-behavior)
1754+
"Set new behavior to NEW-BEHAVIOR notifying server for SESSION."
1755+
(setf (eca--session-chat-selected-behavior session) new-behavior)
1756+
(eca-api-notify session
1757+
:method "chat/selectedBehaviorChanged"
1758+
:params (list :behavior new-behavior)))
17581759

17591760
(defun eca-chat--tool-call-file-change-details
1760-
(content label approval-text time status tool-call-next-line-spacing roots)
1761+
(content label approval-text time status tool-call-next-line-spacing roots)
17611762
"Update tool call UI based showing file change details.
17621763
LABEL is the tool call label.
17631764
CONTENT is the tool call content.
@@ -2033,11 +2034,18 @@ Append STATUS, TOOL-CALL-NEXT-LINE-SPACING and ROOTS"
20332034
(setq-local eca-chat--session-cost (plist-get content :sessionCost)))
20342035
(_ nil)))))
20352036

2036-
(defun eca-chat--handle-mcp-server-updated (session _server)
2037-
"Handle mcp SERVER updated for SESSION."
2038-
;; TODO do for all chats
2039-
(eca-chat--with-current-buffer (eca-chat--get-last-buffer session)
2040-
(force-mode-line-update)))
2037+
(defun eca-chat-config-updated (session chat-config)
2038+
"Update chat based on the CHAT-CONFIG for SESSION."
2039+
(-some->> (plist-get chat-config :welcomeMessage)
2040+
(setf (eca--session-chat-welcome-message session)))
2041+
(-some->> (plist-get chat-config :models)
2042+
(setf (eca--session-models session)))
2043+
(-some->> (plist-get chat-config :behaviors)
2044+
(setf (eca--session-chat-behaviors session)))
2045+
(-some->> (plist-get chat-config :selectModel)
2046+
(setf (eca--session-chat-selected-model session)))
2047+
(-some->> (plist-get chat-config :selectBehavior)
2048+
(setf (eca--session-chat-selected-behavior session))))
20412049

20422050
(defun eca-chat-open (session)
20432051
"Open or create dedicated eca chat window for SESSION."
@@ -2143,10 +2151,20 @@ Append STATUS, TOOL-CALL-NEXT-LINE-SPACING and ROOTS"
21432151
(interactive)
21442152
(eca-assert-session-running (eca-session))
21452153
(when-let* ((behavior (completing-read "Select a behavior:" (append (eca--session-chat-behaviors (eca-session)) nil) nil t)))
2146-
(setf (eca--session-chat-selected-behavior (eca-session)) behavior)
2147-
(eca-api-notify (eca-session)
2148-
:method "chat/selectedBehaviorChanged"
2149-
:params (list :behavior behavior))))
2154+
(eca-chat--set-behavior (eca-session) behavior)))
2155+
2156+
;;;###autoload
2157+
(defun eca-chat-cycle-behavior ()
2158+
"Cycle between existing chat behaviors to use."
2159+
(interactive)
2160+
(eca-assert-session-running (eca-session))
2161+
(let* ((session (eca-session))
2162+
(current-behavior (eca--session-chat-selected-behavior session))
2163+
(all-behaviors (append (eca--session-chat-behaviors session) nil))
2164+
(current-behavior-index (seq-position all-behaviors current-behavior))
2165+
(next-behavior (or (nth (1+ current-behavior-index) all-behaviors)
2166+
(nth 0 all-behaviors))))
2167+
(eca-chat--set-behavior session next-behavior)))
21502168

21512169
;;;###autoload
21522170
(defun eca-chat-reset ()

0 commit comments

Comments
 (0)