Update modules/feature/workspaces

This commit is contained in:
Henrik Lissner 2017-02-19 18:40:39 -05:00
parent 2f75a81716
commit 43d0247d61
3 changed files with 117 additions and 125 deletions

View file

@ -12,18 +12,18 @@
(@def-package persp-mode :demand t
:init
:config
(setq persp-autokill-buffer-on-remove 'kill-weak
persp-nil-name "main"
persp-auto-save-fname "autosave"
persp-save-dir (concat doom-cache-dir "workspaces/")
persp-set-last-persp-for-new-frames nil
persp-auto-resume-time (if (display-graphic-p) 0.01 -1)
persp-auto-save-opt 0
persp-auto-resume-time -1
persp-switch-to-added-buffer nil)
:config
(@add-hook emacs-startup (persp-mode 1))
(add-hook 'after-init-hook 'persp-mode)
(define-key persp-mode-map [remap delete-window] '+workspace/close-window-or-workspace)
;; Ensure unreal/popup buffers aren't saved
(push (lambda (buf) (doom-popup-p (get-buffer-window buf)))
@ -33,8 +33,11 @@
;; Auto-add buffers when opening them. Allows a perspective-specific buffer list.
(defun +workspaces*auto-add-buffer (buffer &rest _)
(when (and persp-mode (not persp-temporarily-display-buffer))
(persp-add-buffer buffer (get-current-persp) nil)))
(when (and persp-mode
(not persp-temporarily-display-buffer)
(doom-real-buffer-p buffer))
(persp-add-buffer buffer (get-current-persp) nil)
(redisplay)))
(advice-add 'switch-to-buffer :after '+workspaces*auto-add-buffer)
(advice-add 'display-buffer :after '+workspaces*auto-add-buffer)
@ -46,14 +49,11 @@
;; TODO Test per-frame perspectives
;; We use this instead of persp's native autosave. Why? So the "Wrote
;; .../_autosave" message appears AFTER the quit confirmation prompt!
;;
;; ...I need help.
(defun +workspace|save-on-quit ()
(when persp-mode (@quiet (persp-save-state-to-file))))
(add-hook 'kill-emacs-hook '+workspace|save-on-quit)
;; 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)
;; Add a hook to session loading
(defun +workspaces*reinit-popups (&rest _)
(run-hook-with-args '+workspaces-load-session-hook (window-list)))
(advice-add 'persp-load-state-from-file :after '+workspaces*reinit-popups)
@ -61,16 +61,16 @@
;; Restore popups on load
(defun +workspaces|restore-popups (windows)
(dolist (window windows)
(let ((plist (window-parameter window 'popup)))
(when plist (doom-popup--init window plist)))))
(when-let (plist (window-parameter window 'popup))
(doom-popup--init window plist))))
(add-hook '+workspaces-load-session-hook '+workspaces|restore-popups))
(@after ivy
(defun +workspaces|ivy-ignore-non-persp-buffers (b)
(when persp-mode
(let ((persp (get-current-persp)))
(and persp (not (persp-contain-buffer-p b persp))))))
(pushnew '+workspaces|ivy-ignore-non-persp-buffers ivy-ignore-buffers)
;; (defun +workspaces|ivy-ignore-non-persp-buffers (b)
;; (when persp-mode
;; (let ((persp (get-current-persp)))
;; (and persp (not (persp-contain-buffer-p b persp))))))
;; (pushnew '+workspaces|ivy-ignore-non-persp-buffers ivy-ignore-buffers)
(setq ivy-sort-functions-alist
(append ivy-sort-functions-alist