feature/workspaces: ignore nil perspective; fix +workspace/cycle

This commit is contained in:
Henrik Lissner 2017-04-12 11:27:31 -04:00
parent b1442cb4eb
commit 8e56c6c6a0
2 changed files with 18 additions and 12 deletions

View file

@ -22,9 +22,9 @@
"The face for selected tabs displayed by `+workspace/display'") "The face for selected tabs displayed by `+workspace/display'")
;;;###autoload ;;;###autoload
(defun +workspace-list (&optional exclude-nil-p) (defun +workspace-list ()
"Retrieve a list of names of open workspaces (strings)." "Retrieve a list of names of open workspaces (strings)."
(delete persp-nil-name (persp-names))) (delete persp-nil-name (persp-names-current-frame-fast-ordered)))
;;;###autoload ;;;###autoload
(defun +workspace-p (obj) (defun +workspace-p (obj)
@ -253,7 +253,7 @@ workspace to delete."
(defun +workspace/kill-session () (defun +workspace/kill-session ()
"Delete the current session, clears all workspaces, windows and buffers." "Delete the current session, clears all workspaces, windows and buffers."
(interactive) (interactive)
(unless (cl-every '+workspace-delete (+workspace-list t)) (unless (cl-every '+workspace-delete (+workspace-list))
(+workspace-error "Could not clear session")) (+workspace-error "Could not clear session"))
(+workspace-switch +workspaces-main t) (+workspace-switch +workspaces-main t)
(doom/kill-all-buffers) (doom/kill-all-buffers)
@ -327,15 +327,20 @@ end of the workspace list."
(defun +workspace/cycle (n) (defun +workspace/cycle (n)
"Cycle n workspaces to the right (default) or left." "Cycle n workspaces to the right (default) or left."
(interactive (list 1)) (interactive (list 1))
(condition-case ex (let ((current-name (+workspace-current-name)))
(let ((persp-switch-wrap t)) (if (equal current-name persp-nil-name)
(dotimes (i (abs n)) (+workspace-switch +workspaces-main t)
(if (> n 0) (condition-case ex
(persp-next) (let* ((persps (+workspace-list))
(persp-prev))) (perspc (length persps))
(unless (called-interactively-p 'interactive) (index (position current-name persps)))
(+workpace/display))) (when (= perspc 1)
('error (+workspace-error (cadr ex) t)))) (user-error "No other workspaces"))
(+workspace/switch-to (% (+ index n) perspc))
(unless (called-interactively-p 'interactive)
(+workspace/display)))
('user-error (+workspace-error (cadr ex) t))
('error (+workspace-error ex t))))))
;;;###autoload ;;;###autoload
(defun +workspace/switch-left () (interactive) (+workspace/cycle -1)) (defun +workspace/switch-left () (interactive) (+workspace/cycle -1))

View file

@ -28,6 +28,7 @@ renamed.")
:config :config
(setq persp-autokill-buffer-on-remove 'kill-weak (setq persp-autokill-buffer-on-remove 'kill-weak
persp-nil-name "nil" persp-nil-name "nil"
persp-nil-hidden t
persp-auto-save-fname "autosave" persp-auto-save-fname "autosave"
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