diff options
author | William Carroll <wpcarro@gmail.com> | 2020-01-09T14·01+0000 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-01-17T10·56+0000 |
commit | 71c24104eb1de3e86feca3fb547d73df75481660 (patch) | |
tree | 8ef6af723f892457c3de6d1c4870a8e9e498ab89 /configs/shared/.emacs.d/wpc/window-manager.el | |
parent | 1399eae319a56c3867110118252f1253ad8fd50c (diff) |
Refactor MRU EXWM workspace using cycle/focus-previous!
Instead of consuming `cycle/previous-focus`, define a function `cycle/focus-previous!` that "focuses" the element at `previous-index` and returns that element. This function greatly simplified the code in window-manager.el and eliminated the unnecessary `exwm/previous-workspace` variable that was managing the state.
Diffstat (limited to 'configs/shared/.emacs.d/wpc/window-manager.el')
-rw-r--r-- | configs/shared/.emacs.d/wpc/window-manager.el | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/configs/shared/.emacs.d/wpc/window-manager.el b/configs/shared/.emacs.d/wpc/window-manager.el index 9f7beeecfafa..4e9770a40cdb 100644 --- a/configs/shared/.emacs.d/wpc/window-manager.el +++ b/configs/shared/.emacs.d/wpc/window-manager.el @@ -249,22 +249,12 @@ (defun exwm/next-workspace () "Cycle forwards to the next workspace." (interactive) - (exwm-workspace-switch - (exwm/named-workspace-index (cycle/next exwm/workspaces))) - (window-manager/alert - (string/concat - "Current workspace: " - (exwm/named-workspace-label (cycle/current exwm/workspaces))))) + (exwm/change-workspace (cycle/next exwm/workspaces))) (defun exwm/prev-workspace () "Cycle backwards to the previous workspace." (interactive) - (exwm-workspace-switch - (exwm/named-workspace-index (cycle/prev exwm/workspaces))) - (window-manager/alert - (string/concat - "Current workspace: " - (exwm/named-workspace-label (cycle/current exwm/workspaces))))) + (exwm/change-workspace (cycle/prev exwm/workspaces))) ;; TODO: Create friendlier API for working with EXWM. @@ -534,17 +524,26 @@ Currently using super- as the prefix for switching workspaces." (kbd/for 'workspace (s-capitalize key)) handler))) +(defun exwm/change-workspace (workspace) + "Switch EXWM workspaces to the WORKSPACE struct." + (exwm-workspace-switch (exwm/named-workspace-index workspace)) + (window-manager/alert + (string/format "Switched to: %s" (exwm/named-workspace-label workspace)))) + (defun exwm/switch (label) "Switch to a named workspaces using LABEL." - (cycle/focus - (lambda (x) - (equal label - (exwm/named-workspace-label x))) - exwm/workspaces) - (exwm-workspace-switch - (exwm/named-workspace-index (cycle/current exwm/workspaces))) - (window-manager/alert - (string/concat "Switched to: " label))) + (cycle/focus (lambda (x) + (equal label + (exwm/named-workspace-label x))) + exwm/workspaces) + (exwm/change-workspace (cycle/current exwm/workspaces))) + +;; TODO: Assign an easy-to-remember keybinding to this. +(exwm-input-set-key (kbd "C-S-f") #'exwm/toggle-previous) +(defun exwm/toggle-previous () + "Focus the previously active EXWM workspace." + (interactive) + (exwm/change-workspace (cycle/focus-previous! exwm/workspaces))) (defun exwm/ivy-switch () "Use ivy to switched between named workspaces." |