diff --git a/modules/feature/workspaces/autoload/workspaces.el b/modules/feature/workspaces/autoload/workspaces.el index 96fcfac82..f5ded5f1d 100644 --- a/modules/feature/workspaces/autoload/workspaces.el +++ b/modules/feature/workspaces/autoload/workspaces.el @@ -48,12 +48,6 @@ "Return non-nil if buffer is in workspace (defaults to current workspace)." (persp-contain-buffer-p buffer (or workspace (+workspace-current)) nil)) -;;;###autoload -(defun +workspace-alien-buffer-p (buffer) - "Return non-nil if BUFFER isn't a member of the current workspace." - (and (get-buffer-window buffer) - (not (+workspace-contains-buffer-p buffer)))) - ;; --- Getters ---------------------------- @@ -274,6 +268,8 @@ workspace to delete." (if (+workspace-exists-p +workspace--last) +workspace--last (car (+workspace-list-names)))) + (unless (doom-buffer-frame-predicate (current-buffer)) + (switch-to-buffer (doom-fallback-buffer))) (format "Deleted '%s' workspace" name)) ((= workspaces 1) (format "Can't delete the last workspace!")) diff --git a/modules/feature/workspaces/config.el b/modules/feature/workspaces/config.el index a1c3c9023..8499794fa 100644 --- a/modules/feature/workspaces/config.el +++ b/modules/feature/workspaces/config.el @@ -24,7 +24,14 @@ renamed.") (def-package! persp-mode :defer t :init + (defun +workspaces-buffer-predicate (buf) + (funcall (if persp-mode + (frame-parameter nil 'persp-buffer-predicate-generated) + #'doom-buffer-frame-predicate) + buf)) + (defun +workspaces|init () + (map-put default-frame-alist 'buffer-predicate #'+workspaces-buffer-predicate) (add-hook 'after-make-frame-functions #'+workspaces|init-frame) (require 'persp-mode) (unless (daemonp) @@ -70,7 +77,6 @@ Uses `+workspaces-main' to determine the name of the main workspace." persp-set-last-persp-for-new-frames t persp-switch-to-added-buffer nil persp-remove-buffers-from-nil-persp-behaviour nil - persp-set-frame-buffer-predicate #'doom-buffer-frame-predicate persp-auto-resume-time -1 ; Don't auto-load on startup persp-auto-save-opt (if noninteractive 0 1)) ; auto-save on kill @@ -99,7 +105,6 @@ Uses `+workspaces-main' to determine the name of the main workspace." ;; (defun +workspaces|init-persp-mode () (cond (persp-mode - (add-hook 'doom-unreal-buffer-functions #'+workspace-alien-buffer-p) ;; Ensure `persp-kill-buffer-query-function' is last in ;; kill-buffer-query-functions (remove-hook 'kill-buffer-query-functions 'persp-kill-buffer-query-function) @@ -111,7 +116,6 @@ Uses `+workspaces-main' to determine the name of the main workspace." (advice-add #'display-buffer :after #'+workspaces*auto-add-buffer) (advice-add #'doom-buffer-list :override #'+workspace-buffer-list)) (t - (remove-hook 'doom-unreal-buffer-functions #'+workspace-alien-buffer-p) (advice-remove #'switch-to-buffer #'+workspaces*auto-add-buffer) (advice-remove #'display-buffer #'+workspaces*auto-add-buffer) (advice-remove #'doom-buffer-list #'+workspace-buffer-list))))