feature/workspaces: create/delete persps when making/deleting frames

This commit is contained in:
Henrik Lissner 2017-02-25 01:36:41 -05:00
parent d27d19ba51
commit 7ed243a398

View file

@ -23,7 +23,9 @@
persp-save-dir (concat doom-cache-dir "workspaces/") persp-save-dir (concat doom-cache-dir "workspaces/")
persp-set-last-persp-for-new-frames nil persp-set-last-persp-for-new-frames nil
persp-switch-to-added-buffer 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 ;; Don't auto-load on startup
persp-auto-resume-time -1 persp-auto-resume-time -1
;; Don't auto-save ;; Don't auto-save
@ -33,6 +35,20 @@
(define-key persp-mode-map [remap delete-window] '+workspace/close-window-or-workspace) (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. ;; Auto-add buffers when opening them. Allows a perspective-specific buffer list.
(defun +workspaces*auto-add-buffer (buffer &rest _) (defun +workspaces*auto-add-buffer (buffer &rest _)
(when (and persp-mode (when (and persp-mode
@ -51,8 +67,6 @@
(+workspace/new project-name)))) (+workspace/new project-name))))
(add-hook 'projectile-before-switch-project-hook 'doom|new-workspace-on-project-change) (add-hook 'projectile-before-switch-project-hook 'doom|new-workspace-on-project-change)
;; TODO Test per-frame perspectives
;; Be quiet when saving ;; Be quiet when saving
(defun +workspace*silence (orig-fn &rest args) (quiet! (apply orig-fn args))) (defun +workspace*silence (orig-fn &rest args) (quiet! (apply orig-fn args)))
(advice-add 'persp-save-state-to-file :around '+workspace*silence) (advice-add 'persp-save-state-to-file :around '+workspace*silence)