(use-package persp-mode :ensure t :diminish persp-mode :init (setq wg-morph-on nil ;; switch off animation persp-add-buffer-on-after-change-major-mode t persp-auto-resume-time -1 persp-autokill-buffer-on-remove 'kill-weak persp-save-dir (expand-file-name "persp-confs/" !/savefile-dir)) (add-hook 'after-init-hook (lambda () (persp-mode 1))) :config (defvar !//persp-last-selected-perspective persp-nil-name "Previously selected perspective.") (defun !//persp-save-last-selected-perspective (_ _ &optional _) (setq !//persp-last-selected-perspective persp-last-persp-name)) (advice-add 'persp-activate :before #'!//persp-save-last-selected-perspective)) ;; from: https://github.com/Bad-ptr/persp-mode.el/issues/93#issuecomment-392282950 (with-eval-after-load "persp-mode" (defvar persp-indirrect-buffers-to-restore nil) (persp-def-buffer-save/load :tag-symbol 'def-indirect-buffer :predicate #'buffer-base-buffer :save-function #'(lambda (buf tag vars) (list tag (buffer-name buf) vars (buffer-name (buffer-base-buffer)))) :load-function #'(lambda (savelist) (destructuring-bind (buf-name vars base-buf-name &rest _rest) (cdr savelist) (push (cons buf-name base-buf-name) persp-indirrect-buffers-to-restore) nil))) (add-hook 'persp-after-load-state-functions #'(lambda (&rest _args) (dolist (ibc persp-indirrect-buffers-to-restore) (let* ((nbn (car ibc)) (bbn (cdr ibc)) (bb (get-buffer bbn))) (when bb (when (get-buffer nbn) (setq nbn (generate-new-buffer-name nbn))) (make-indirect-buffer bb nbn t)))) (setq persp-indirrect-buffers-to-restore nil))))