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/cycle.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/cycle.el')
-rw-r--r-- | configs/shared/.emacs.d/wpc/cycle.el | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/configs/shared/.emacs.d/wpc/cycle.el b/configs/shared/.emacs.d/wpc/cycle.el index d469ee34c705..9475ddd99659 100644 --- a/configs/shared/.emacs.d/wpc/cycle.el +++ b/configs/shared/.emacs.d/wpc/cycle.el @@ -75,6 +75,19 @@ (nth i (cycle-xs cycle)) nil))) +;; TODO: Consider adding "!" to the function name herein since many of them +;; mutate the collection, and the APIs are beginning to confuse me. +(defun cycle/focus-previous! (xs) + "Jump to the item in XS that was most recently focused; return the cycle. +This will error when previous-index is nil. This function mutates the +underlying struct." + (let ((i (cycle-previous-index xs))) + (if (maybe/some? i) + (progn + (cycle/jump i xs) + (cycle/current xs)) + (error "Cannot focus the previous element since cycle-previous-index is nil")))) + (defun cycle/next (xs) "Return the next value in `XS' and update `current-index'." (let* ((current-index (cycle-current-index xs)) @@ -135,7 +148,8 @@ (prelude/assert (= 1 (->> xs (cycle/jump 0) cycle/current))) (prelude/assert (= 2 (->> xs (cycle/jump 1) cycle/current))) (prelude/assert (= 3 (->> xs (cycle/jump 2) cycle/current))) - (prelude/assert (= 2 (cycle/previous-focus xs))))) + (prelude/assert (= 2 (cycle/previous-focus xs))) + (prelude/assert (= 2 (cycle/focus-previous! xs))))) (provide 'cycle) ;;; cycle.el ends here |