diff --git a/modules/feature/workspaces/autoload/evil.el b/modules/feature/workspaces/autoload/evil.el
index 651ec193a..2b387fd14 100644
--- a/modules/feature/workspaces/autoload/evil.el
+++ b/modules/feature/workspaces/autoload/evil.el
@@ -1,14 +1,18 @@
;;; feature/workspaces/autoload/evil.el
;;;###autoload (autoload '+workspace:save-session "feature/workspaces/autoload/evil" nil t)
-(evil-define-command +workspace:save-session (&optional name)
- "Ex wrapper around `+workspace/save-session'."
- (interactive "") (+workspace/save-session name))
+(evil-define-command +workspace:save-session (&optional bang name)
+ "Ex wrapper around `+workspace/save-session'. If BANG, then autosave
+(pointless if autosaving/loading is off). If NAME is nil, default to 'last'."
+ (interactive "")
+ (+workspace/save-session (if bang persp-auto-save-fname name)))
;;;###autoload (autoload '+workspace:load-session "feature/workspaces/autoload/evil" nil t)
-(evil-define-command +workspace:load-session (&optional name)
- "Ex wrapper around `+workspace/load-session'."
- (interactive "") (+workspace/load-session name))
+(evil-define-command +workspace:load-session (&optional bang name)
+ "Ex wrapper around `+workspace/load-session'. If BANG, then load last autosave
+(pointless if autosaving/loading is off). If NAME is nil, defaults to 'last'."
+ (interactive "")
+ (+workspace/load-session (if bang persp-auto-save-fname name)))
;;;###autoload (autoload '+workspace:save "feature/workspaces/autoload/evil" nil t)
(evil-define-command +workspace:save (&optional name)
diff --git a/modules/feature/workspaces/autoload/workspaces.el b/modules/feature/workspaces/autoload/workspaces.el
index 05f3a893a..73c0df68a 100644
--- a/modules/feature/workspaces/autoload/workspaces.el
+++ b/modules/feature/workspaces/autoload/workspaces.el
@@ -156,7 +156,7 @@ current workspace (by name) from session files."
(+workspace/display)))
;;;###autoload
-(defun +workspace/load-session (name)
+(defun +workspace/load-session (&optional name)
"Load a session and switch to it. If called with C-u, try to load the last
session."
(interactive
@@ -164,9 +164,9 @@ session."
(unless current-prefix-arg
(completing-read
"Session to load: "
- (directory-files persp-save-dir nil "^[^_]")
+ (directory-files persp-save-dir nil "^[^_.]")
nil t))))
- (+workspace-load-session name)
+ (+workspace-load-session (or name "last"))
(+workspace/display))
;;;###autoload
@@ -191,9 +191,9 @@ the session as."
(when current-prefix-arg
(completing-read
"Save session as: "
- (directory-files persp-save-dir nil "^[^_]")))))
+ (directory-files persp-save-dir nil "^[^_.]")))))
(condition-case ex
- (let ((name (or name (+workspace-current-name))))
+ (let ((name (or name "last")))
(if (+workspace-save-session name)
(+workspace-message (format "Saved session as %s" name) 'success)
(error "Couldn't save session as %s" name)))
diff --git a/modules/feature/workspaces/config.el b/modules/feature/workspaces/config.el
index e6abac8a5..7acf10dde 100644
--- a/modules/feature/workspaces/config.el
+++ b/modules/feature/workspaces/config.el
@@ -5,6 +5,10 @@
;; 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'.
+;;
;; Note: persp-mode requires `workgroups' for file persistence in Emacs 24.4.
(defvar +workspaces-load-session-hook nil
@@ -18,8 +22,12 @@
persp-auto-save-fname "autosave"
persp-save-dir (concat doom-cache-dir "workspaces/")
persp-set-last-persp-for-new-frames nil
+ persp-switch-to-added-buffer nil
+
+ ;; Don't auto-load on startup
persp-auto-resume-time -1
- persp-switch-to-added-buffer nil)
+ ;; Don't auto-save
+ persp-auto-save-opt 0)
(add-hook 'after-init-hook 'persp-mode)