From 44a4faf7cb41c1201cf614f67fbf6e0f093716a9 Mon Sep 17 00:00:00 2001 From: Diego Berrocal Date: Mon, 21 Sep 2015 11:32:23 -0500 Subject: [PATCH] Add next/previous functionality for workspaces Also supports wrapping when there is an overflow. Closes #68 --- exwm-workspace.el | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/exwm-workspace.el b/exwm-workspace.el index 03972b4..ba9fa62 100644 --- a/exwm-workspace.el +++ b/exwm-workspace.el @@ -159,6 +159,36 @@ The optional FORCE option is for internal use only." :window exwm--root :data index)) (xcb:flush exwm--connection))))) +(defvar exwm-workspace-switch-wrap t + "Whether `exwm-workspace-next' and `exwm-workspace-prev' should wrap.") + +;;;###autoload +(defun exwm-workspace-next () + "Switch to next exwm-workspace." + (interactive) + (let* ((only-workspace? (equal exwm-workspace-number 1)) + (at-edge? (= exwm-workspace-current-index + (1- exwm-workspace-number)))) + (cond + (only-workspace? nil) + (at-edge? + (when exwm-workspace-switch-wrap + (exwm-workspace-switch 0))) + (t (exwm-workspace-switch (1+ exwm-workspace-current-index)))))) + +;;;###autoload +(defun exwm-workspace-prev () + "Switch to next exwm-workspace." + (interactive) + (let* ((only-workspace? (equal exwm-workspace-number 1)) + (at-edge? (= exwm-workspace-current-index 0))) + (cond + (only-workspace? nil) + (at-edge? + (when exwm-workspace-switch-wrap + (exwm-workspace-switch (1- exwm-workspace-number)))) + (t (exwm-workspace-switch (1- exwm-workspace-current-index)))))) + (defun exwm-workspace--on-focus-in () "Fix unexpected frame switch." (let ((index (cl-position (selected-frame) exwm-workspace--list)))