feature/workspaces: save to autosave if name is omitted

This commit is contained in:
Henrik Lissner 2017-03-13 14:21:42 -04:00
parent a127952f70
commit 6a026fade2
2 changed files with 20 additions and 14 deletions

View file

@ -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

View file

@ -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)