about summary refs log tree commit diff
path: root/emacs/.emacs.d/wpc/window-manager.el
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-10-03T13·49+0100
committerWilliam Carroll <wpcarro@gmail.com>2020-10-03T13·49+0100
commitb4b929a55b95cf569296aa8f2b0342fd90aa1586 (patch)
tree888fee2e1dd0d73a87e9755cdf893fcc5dd5bf72 /emacs/.emacs.d/wpc/window-manager.el
parent869bcf3fc84994b0074e735b2204fd7a180dfd44 (diff)
Define window-manager-swap-workspaces
This is a wrapper around the existing `exwm-workspace-swap` except it's aware of
my `window-manager-workspace` struct.
Diffstat (limited to 'emacs/.emacs.d/wpc/window-manager.el')
-rw-r--r--emacs/.emacs.d/wpc/window-manager.el16
1 files changed, 16 insertions, 0 deletions
diff --git a/emacs/.emacs.d/wpc/window-manager.el b/emacs/.emacs.d/wpc/window-manager.el
index cda66a296492..5a2ae0e186ed 100644
--- a/emacs/.emacs.d/wpc/window-manager.el
+++ b/emacs/.emacs.d/wpc/window-manager.el
@@ -375,6 +375,22 @@ predicate."
        cycle-current
        window-manager--named-workspace-label))
 
+(defun window-manager-swap-workspaces ()
+  "Prompt the user to switch the current workspace with another."
+  (interactive)
+  (let* ((selection (->> window-manager--named-workspaces
+                         (-map #'window-manager--named-workspace-label)
+                         (-reject
+                          (lambda (x)
+                            (s-equals? x (window-manager-current-workspace))))
+                         (completing-read
+                          (format "Swap current workspace (i.e. \"%s\") with: "
+                                  (window-manager-current-workspace)))))
+         (i (-find-index (lambda (x)
+                           (s-equals? selection (window-manager--named-workspace-label x)))
+                                 window-manager--named-workspaces)))
+    (exwm-workspace-swap exwm-workspace--current (elt exwm-workspace--list i))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Startup Applications in `window-manager--named-workspaces'
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;