From 8e56c6c6a03e47ec2a4c81bbbf383f2492a51b99 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Wed, 12 Apr 2017 11:27:31 -0400 Subject: [PATCH] feature/workspaces: ignore nil perspective; fix +workspace/cycle --- .../feature/workspaces/autoload/workspaces.el | 29 +++++++++++-------- modules/feature/workspaces/config.el | 1 + 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/modules/feature/workspaces/autoload/workspaces.el b/modules/feature/workspaces/autoload/workspaces.el index 1b1178b13..c3ba3d2af 100644 --- a/modules/feature/workspaces/autoload/workspaces.el +++ b/modules/feature/workspaces/autoload/workspaces.el @@ -22,9 +22,9 @@ "The face for selected tabs displayed by `+workspace/display'") ;;;###autoload -(defun +workspace-list (&optional exclude-nil-p) +(defun +workspace-list () "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 (defun +workspace-p (obj) @@ -253,7 +253,7 @@ workspace to delete." (defun +workspace/kill-session () "Delete the current session, clears all workspaces, windows and buffers." (interactive) - (unless (cl-every '+workspace-delete (+workspace-list t)) + (unless (cl-every '+workspace-delete (+workspace-list)) (+workspace-error "Could not clear session")) (+workspace-switch +workspaces-main t) (doom/kill-all-buffers) @@ -327,15 +327,20 @@ end of the workspace list." (defun +workspace/cycle (n) "Cycle n workspaces to the right (default) or left." (interactive (list 1)) - (condition-case ex - (let ((persp-switch-wrap t)) - (dotimes (i (abs n)) - (if (> n 0) - (persp-next) - (persp-prev))) - (unless (called-interactively-p 'interactive) - (+workpace/display))) - ('error (+workspace-error (cadr ex) t)))) + (let ((current-name (+workspace-current-name))) + (if (equal current-name persp-nil-name) + (+workspace-switch +workspaces-main t) + (condition-case ex + (let* ((persps (+workspace-list)) + (perspc (length persps)) + (index (position current-name persps))) + (when (= perspc 1) + (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 (defun +workspace/switch-left () (interactive) (+workspace/cycle -1)) diff --git a/modules/feature/workspaces/config.el b/modules/feature/workspaces/config.el index f07e7e195..c6a7e3b3d 100644 --- a/modules/feature/workspaces/config.el +++ b/modules/feature/workspaces/config.el @@ -28,6 +28,7 @@ renamed.") :config (setq persp-autokill-buffer-on-remove 'kill-weak persp-nil-name "nil" + persp-nil-hidden t persp-auto-save-fname "autosave" persp-save-dir (concat doom-cache-dir "workspaces/") persp-set-last-persp-for-new-frames nil