diff --git a/modules/feature/workspaces/autoload/workspaces.el b/modules/feature/workspaces/autoload/workspaces.el index af7b990ed..f0e0b610a 100644 --- a/modules/feature/workspaces/autoload/workspaces.el +++ b/modules/feature/workspaces/autoload/workspaces.el @@ -453,6 +453,12 @@ the next." ;; Hooks ;; +;;;###autoload +(defun +workspaces|protect-buffers-in-other-persps () + "Return nil if this buffer is present in other perspectives/workspaces (bury +it, don't kill it)." + (not (persp-other-persps-with-buffer-except-nil (current-buffer)))) + ;;;###autoload (defun +workspaces|delete-associated-workspace (&optional frame) "Delete workspace associated with current frame. diff --git a/modules/feature/workspaces/config.el b/modules/feature/workspaces/config.el index 947de9ed0..3bd18da39 100644 --- a/modules/feature/workspaces/config.el +++ b/modules/feature/workspaces/config.el @@ -114,6 +114,7 @@ Uses `+workspaces-main' to determine the name of the main workspace." ;; kill-buffer-query-functions (remove-hook 'kill-buffer-query-functions 'persp-kill-buffer-query-function) (add-hook 'kill-buffer-query-functions 'persp-kill-buffer-query-function t) + (add-hook 'kill-buffer-query-functions #'+workspaces|protect-buffers-in-other-persps) ;; Remap `buffer-list' to current workspace's buffers in ;; `doom-buffer-list' @@ -121,6 +122,7 @@ 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 'kill-buffer-query-functions #'+workspaces|protect-buffers-in-other-persps) (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))))