From 7ed243a398dcf99f3e1b9e0ce207e3b8d7a2b45b Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sat, 25 Feb 2017 01:36:41 -0500 Subject: [PATCH] feature/workspaces: create/delete persps when making/deleting frames --- modules/feature/workspaces/config.el | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/modules/feature/workspaces/config.el b/modules/feature/workspaces/config.el index 451038c4f..e9767c8cf 100644 --- a/modules/feature/workspaces/config.el +++ b/modules/feature/workspaces/config.el @@ -23,7 +23,9 @@ persp-save-dir (concat doom-cache-dir "workspaces/") persp-set-last-persp-for-new-frames nil persp-switch-to-added-buffer nil - + ;; Don't restore winconf on new frames + persp-init-frame-behaviour t + persp-init-new-frame-behaviour-override 'auto-temp ;; Don't auto-load on startup persp-auto-resume-time -1 ;; Don't auto-save @@ -33,6 +35,20 @@ (define-key persp-mode-map [remap delete-window] '+workspace/close-window-or-workspace) + ;; Per-frame perspectives + (setq persp-init-new-frame-behaviour-override nil + persp-interactive-init-frame-behaviour-override + (lambda (frame &optional new-frame-p) + (select-frame frame) + (+workspace/new) + (set-frame-parameter frame 'assoc-persp (+workspace-current-name)))) + ;; Delete workspace associated with current frame IF it has no real buffers. + (defun +workspaces*delete-frame-and-persp (frame) + (when (and (string= (or (frame-parameter frame 'assoc-persp) "") (+workspace-current-name)) + (not (delq (doom-fallback-buffer) (doom-real-buffers-list)))) + (+workspace/delete persp-name))) + (add-hook 'delete-frame-functions '+workspaces*delete-frame-and-persp) + ;; Auto-add buffers when opening them. Allows a perspective-specific buffer list. (defun +workspaces*auto-add-buffer (buffer &rest _) (when (and persp-mode @@ -51,8 +67,6 @@ (+workspace/new project-name)))) (add-hook 'projectile-before-switch-project-hook 'doom|new-workspace-on-project-change) - ;; TODO Test per-frame perspectives - ;; Be quiet when saving (defun +workspace*silence (orig-fn &rest args) (quiet! (apply orig-fn args))) (advice-add 'persp-save-state-to-file :around '+workspace*silence)