branch: externals/ellama commit 88400ce33685971c00ef7d509b247d9a3a1ebefe Author: Sergey Kostyaev <sskosty...@gmail.com> Commit: Sergey Kostyaev <sskosty...@gmail.com>
Rename session functionality improvements Refactored `ellama-session-rename` function to improve variable handling and add auto-save feature. Ensured proper renaming of buffers, files, and session data, with checks for existence before performing file operations. Added condition to save buffer if `ellama-session-auto-save` is enabled. --- ellama.el | 53 +++++++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/ellama.el b/ellama.el index 4b5dedd5eb..2250673ce8 100644 --- a/ellama.el +++ b/ellama.el @@ -1001,35 +1001,40 @@ If EPHEMERAL non nil new session will not be associated with any file." (defun ellama-session-rename () "Rename current ellama session." (interactive) - (when-let* ((id (if ellama--current-session - (ellama-session-id ellama--current-session) - ellama--current-session-id)) - (buffer (ellama-get-session-buffer id)) - (session (with-current-buffer buffer - ellama--current-session)) - (file-name (buffer-file-name buffer)) - (file-ext (file-name-extension file-name)) - (dir (file-name-directory file-name)) - (session-file-name (ellama--get-session-file-name file-name)) - (new-id (read-string - "New session name: " - id)) - (new-file-name (file-name-concat - dir - (concat new-id "." file-ext))) - (new-session-file-name - (ellama--get-session-file-name new-file-name))) - (with-current-buffer buffer - (set-visited-file-name new-file-name)) - (when (file-exists-p file-name) + (let* ((id (if ellama--current-session + (ellama-session-id ellama--current-session) + ellama--current-session-id)) + (buffer (when id (ellama-get-session-buffer id))) + (session (when buffer (with-current-buffer buffer + ellama--current-session))) + (file-name (when buffer (buffer-file-name buffer))) + (file-ext (when file-name (file-name-extension file-name))) + (dir (when file-name (file-name-directory file-name))) + (session-file-name (when file-name (ellama--get-session-file-name file-name))) + (new-id (read-string + "New session name: " + id)) + (new-file-name (when dir (file-name-concat + dir + (concat new-id "." file-ext)))) + (new-session-file-name + (when new-file-name (ellama--get-session-file-name new-file-name)))) + (when new-file-name (with-current-buffer buffer + (set-visited-file-name new-file-name))) + (when buffer (with-current-buffer buffer + (rename-buffer (or new-file-name new-id)))) + (when (and file-name (file-exists-p file-name)) (rename-file file-name new-file-name)) - (when (file-exists-p session-file-name) + (when (and session-file-name (file-exists-p session-file-name)) (rename-file session-file-name new-session-file-name)) - (setf (ellama-session-id session) new-id) + (when session (setf (ellama-session-id session) new-id)) (when (equal ellama--current-session-id id) (setq ellama--current-session-id new-id)) (remhash id ellama--active-sessions) - (puthash new-id buffer ellama--active-sessions))) + (puthash new-id buffer ellama--active-sessions) + (when (and buffer ellama-session-auto-save) + (with-current-buffer buffer + (save-buffer))))) (defvar ellama--context-buffer " *ellama-context*")