@@ -330,6 +330,7 @@ Must be a positive integer."
330330(defvar-local eca-chat--history-index -1 )
331331(defvar-local eca-chat--id nil )
332332(defvar-local eca-chat--title nil )
333+ (defvar-local eca-chat--custom-title nil )
333334(defvar-local eca-chat--last-request-id 0 )
334335(defvar-local eca-chat--context-completion-cache (make-hash-table :test 'equal ))
335336(defvar-local eca-chat--command-completion-cache (make-hash-table :test 'equal ))
@@ -378,6 +379,7 @@ Must be a positive integer."
378379 (define-key map (kbd " C-c C-S-a" ) #'eca-chat-tool-call-accept-next )
379380 (define-key map (kbd " C-c C-s" ) #'eca-chat-tool-call-accept-all-and-remember )
380381 (define-key map (kbd " C-c C-r" ) #'eca-chat-tool-call-reject-next )
382+ (define-key map (kbd " C-c C-S-r" ) #'eca-chat-rename )
381383 (define-key map (kbd " C-c ." ) #'eca-transient-menu )
382384 (define-key map (kbd " C-c C-," ) #'eca-mcp-details )
383385 (define-key map (kbd " C-c C-<up>" ) #'eca-chat-go-to-prev-user-message )
@@ -854,8 +856,11 @@ Otherwise show plain integer."
854856 (concat
855857 (when eca-chat--closed
856858 (propertize " *Closed session*" 'font-lock-face 'eca-chat-system-messages-face ))
857- (when eca-chat--title
858- (propertize eca-chat--title 'font-lock-face 'eca-chat-title-face ))
859+ (cond
860+ (eca-chat--custom-title
861+ (propertize eca-chat--custom-title 'font-lock-face 'eca-chat-title-face ))
862+ (eca-chat--title
863+ (propertize eca-chat--title 'font-lock-face 'eca-chat-title-face )))
859864 fill-space
860865 usage-str)))
861866
@@ -1926,6 +1931,7 @@ string."
19261931 (setq-local eca-chat--session-cost nil )
19271932 (setq-local eca-chat--empty t )
19281933 (setq-local eca-chat--title nil )
1934+ (setq-local eca-chat--custom-title nil )
19291935 ; ; Reset per-buffer tool prepare counters to avoid leaking across sessions
19301936 (setq-local eca-chat--tool-call-prepare-counters (make-hash-table :test 'equal ))
19311937 (setq-local eca-chat--tool-call-prepare-content-cache (make-hash-table :test 'equal ))
@@ -2065,14 +2071,18 @@ if ARG is current prefix, ask for file, otherwise add current file."
20652071(defun eca-chat-select ()
20662072 " Select a chat."
20672073 (interactive )
2068- (let ((session (eca-session)))
2074+ (let ((session (eca-session))
2075+ (get-title-fn (lambda ()
2076+ (or eca-chat--custom-title
2077+ eca-chat--title
2078+ eca-chat--id))))
20692079 (eca-assert-session-running session)
20702080 (let ((items (append
20712081 (sort
20722082 (-keep (lambda (buffer )
20732083 (when (buffer-live-p buffer)
20742084 (with-current-buffer buffer
2075- (when-let ((item (or eca-chat-- title eca-chat--id )))
2085+ (when-let ((item (funcall get- title-fn )))
20762086 (propertize item
20772087 'face (when eca-chat--chat-loading 'warning ))))))
20782088 (eca-vals (eca--session-chats session)))
@@ -2089,13 +2099,21 @@ if ARG is current prefix, ask for file, otherwise add current file."
20892099 (if-let (buffer (-first (lambda (buffer )
20902100 (when (buffer-live-p buffer)
20912101 (with-current-buffer buffer
2092- (string= chosen-title (or eca-chat-- title eca-chat--id )))))
2102+ (string= chosen-title (funcall get- title-fn )))))
20932103 (eca-vals (eca--session-chats session))))
20942104 (progn
20952105 (setf (eca--session-last-chat-buffer session) buffer)
20962106 (eca-chat-open session))
20972107 (eca-chat-new))))))
20982108
2109+ ;;;### autoload
2110+ (defun eca-chat-rename (new-name )
2111+ " Rename last visited chat to a custom NEW-NAME."
2112+ (interactive " sInform the new chat title: " )
2113+ (eca-assert-session-running (eca-session))
2114+ (with-current-buffer (eca-chat--get-last-buffer (eca-session))
2115+ (setq eca-chat--custom-title new-name)))
2116+
20992117;;;### autoload
21002118(defun eca-chat-new ()
21012119 " Start a new ECA chat for same session."
0 commit comments