diff --git a/modules/ui/workspaces/autoload/workspaces.el b/modules/ui/workspaces/autoload/workspaces.el index 72fd29292..6289cb8e4 100644 --- a/modules/ui/workspaces/autoload/workspaces.el +++ b/modules/ui/workspaces/autoload/workspaces.el @@ -68,13 +68,14 @@ error if NAME doesn't exist." "Return a list of workspace structs (satisifes `+workspace-p')." ;; We don't use `hash-table-values' because it doesn't ensure order in older ;; versions of Emacs - (cdr (cl-loop for persp being the hash-values of *persp-hash* - collect persp))) + (cl-loop for name in persp-names-cache + if (gethash name *persp-hash*) + collect it)) ;;;###autoload (defun +workspace-list-names () "Return the list of names of open workspaces." - (mapcar #'safe-persp-name (+workspace-list))) + persp-names-cache) ;;;###autoload (defun +workspace-buffer-list (&optional persp) diff --git a/modules/ui/workspaces/config.el b/modules/ui/workspaces/config.el index c7581a44b..d54107f29 100644 --- a/modules/ui/workspaces/config.el +++ b/modules/ui/workspaces/config.el @@ -76,10 +76,13 @@ stored in `persp-save-dir'.") "Ensure a main workspace exists." (when persp-mode (let (persp-before-switch-functions) - ;; The default perspective persp-mode creates (`persp-nil-name') is - ;; special and doesn't represent a real persp object, so buffers can't - ;; really be assigned to it, among other quirks. We create a *real* main - ;; workspace to fill this role. + ;; The default perspective persp-mode creates is special and doesn't + ;; represent a real persp object, so buffers can't really be assigned + ;; to it, among other quirks. We hide the nil persp... + (when (equal (car persp-names-cache) persp-nil-name) + (pop persp-names-cache)) + ;; ...and create a *real* main workspace to fill this role, and hide + ;; the nil perspective. (unless (or (persp-get-by-name +workspaces-main) ;; Start from 2 b/c persp-mode counts the nil workspace (> (hash-table-count *persp-hash*) 2))