From 6a026fade2f4b8be87ec9049499a562b27d8caae Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 13 Mar 2017 14:21:42 -0400 Subject: [PATCH] feature/workspaces: save to autosave if name is omitted --- .../feature/workspaces/autoload/workspaces.el | 21 ++++++++++++------- modules/feature/workspaces/config.el | 13 ++++++------ 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/modules/feature/workspaces/autoload/workspaces.el b/modules/feature/workspaces/autoload/workspaces.el index 99802687d..f950912e7 100644 --- a/modules/feature/workspaces/autoload/workspaces.el +++ b/modules/feature/workspaces/autoload/workspaces.el @@ -91,8 +91,11 @@ Returns t on success, nil otherwise." (defun +workspace-save-session (&optional name) "Save a whole session as NAME. If NAME is nil, use `persp-auto-save-fname'. Return t on success, nil otherwise." - (let ((fname (or name persp-auto-save-fname))) - (and (persp-save-state-to-file fname) t))) + (when (or (not name) + (equal name persp-auto-save-fname)) + (setq name persp-auto-save-fname + persp-auto-save-opt 0)) + (and (persp-save-state-to-file name) t)) ;;;###autoload (defun +workspace-new (name) @@ -169,9 +172,11 @@ session." "Session to load: " (directory-files persp-save-dir nil "^[^_.]") nil t)))) - (let ((name (or name "last"))) - (+workspace-load-session name) - (+workspace-message (format "'%s' workspace loaded" name) 'success))) + (condition-case ex + (let ((name (or name persp-auto-save-fname))) + (+workspace-load-session name) + (+workspace-message (format "'%s' workspace loaded" name) 'success)) + '(error (+workspace-error (cadr ex) t)))) ;;;###autoload (defun +workspace/save (name) @@ -197,10 +202,10 @@ the session as." "Save session as: " (directory-files persp-save-dir nil "^[^_.]"))))) (condition-case ex - (let ((name (or name "last"))) + (let ((name (or name persp-auto-save-fname))) (if (+workspace-save-session name) - (+workspace-message (format "Saved session as %s" name) 'success) - (error "Couldn't save session as %s" name))) + (+workspace-message (format "Saved session as '%s'" name) 'success) + (error "Couldn't save session as '%s'" name))) '(error (+workspace-error (cadr ex) t)))) ;;;###autoload diff --git a/modules/feature/workspaces/config.el b/modules/feature/workspaces/config.el index e9767c8cf..ed50c206e 100644 --- a/modules/feature/workspaces/config.el +++ b/modules/feature/workspaces/config.el @@ -1,13 +1,14 @@ ;;; feature/workspaces/config.el ;; `persp-mode' gives me workspaces, a workspace-restricted `buffer-list', and -;; file-based session persistence. I had used workgroups2 for this, but +;; file-based session persistence. I had used workgroups2 before this, but ;; abandoned it because of its instability and impact on performance. ;; `persp-mode' has proven faster and more reliable (and it's still maintained). ;; -;; I've disabled auto-load/save. I prefer that session persistence be manual. -;; You can save a session with :ss or `+workspace/save-session', and load the -;; last saved session with :sl or `+workspace/load-session'. +;; By default, sessions are auto-saved, but not auto-loaded. Use :ss or +;; `+workspace/save-session' to save, and :sl or `+workspace/load-session' to +;; load the last autosaved session. You can give sessions a custom name so they +;; can be loaded much later. ;; ;; Note: persp-mode requires `workgroups' for file persistence in Emacs 24.4. @@ -28,8 +29,8 @@ persp-init-new-frame-behaviour-override 'auto-temp ;; Don't auto-load on startup persp-auto-resume-time -1 - ;; Don't auto-save - persp-auto-save-opt 0) + ;; auto-save on kill + persp-auto-save-opt 1) (add-hook 'after-init-hook 'persp-mode)