Remove :index field from exwm/named-workspace struct

I can compute the index use dash.el's -elem-index. I'm also removing some unused
EXWM workspaces.
This commit is contained in:
William Carroll 2020-04-02 18:36:51 +01:00
parent 099d88739b
commit d8f0f3daf3

View file

@ -71,40 +71,19 @@
(defconst exwm/named-workspaces (defconst exwm/named-workspaces
(list (make-exwm/named-workspace (list (make-exwm/named-workspace
:label "Web surfing" :label "Web surfing"
:index 0
:kbd "c") :kbd "c")
(make-exwm/named-workspace
:label "Project"
:index 1
:kbd "p")
(make-exwm/named-workspace (make-exwm/named-workspace
:label "Briefcase" :label "Briefcase"
:index 2
:kbd "d") :kbd "d")
(make-exwm/named-workspace
:label "Scratch"
:index 3
:kbd "s")
(make-exwm/named-workspace (make-exwm/named-workspace
:label "Terminal" :label "Terminal"
:index 4
:kbd "t") :kbd "t")
(make-exwm/named-workspace (make-exwm/named-workspace
:label "Todos" :label "Todos"
:index 5
:kbd "o") :kbd "o")
(make-exwm/named-workspace (make-exwm/named-workspace
:label "Chatter" :label "Chatter"
:index 6 :kbd "h"))
:kbd "h")
(make-exwm/named-workspace
:label "IRC"
:index 7
:kbd "i")
(make-exwm/named-workspace
:label "Work"
:index 8
:kbd "w"))
"List of `exwm/named-workspace' structs.") "List of `exwm/named-workspace' structs.")
;; Assert that no two workspaces share KBDs. ;; Assert that no two workspaces share KBDs.
@ -346,14 +325,8 @@ Ivy is used to capture the user's input."
(defun exwm/label->index (label workspaces) (defun exwm/label->index (label workspaces)
"Return the index of the workspace in WORKSPACES named LABEL." "Return the index of the workspace in WORKSPACES named LABEL."
(let ((workspace (->> workspaces (let ((index (-elem-index label (-map #'exwm/named-workspace-label workspaces))))
(list/find (if index index (error (format "No workspace found for label: %s" label)))))
(lambda (x)
(equal label
(exwm/named-workspace-label x)))))))
(if (prelude/set? workspace)
(exwm/named-workspace-index workspace)
(error (string/concat "No workspace found for label: " label)))))
(defun exwm/register-kbd (workspace) (defun exwm/register-kbd (workspace)
"Registers a keybinding for WORKSPACE struct. "Registers a keybinding for WORKSPACE struct.
@ -368,7 +341,9 @@ Currently using super- as the prefix for switching workspaces."
(defun exwm/change-workspace (workspace) (defun exwm/change-workspace (workspace)
"Switch EXWM workspaces to the WORKSPACE struct." "Switch EXWM workspaces to the WORKSPACE struct."
(exwm-workspace-switch (exwm/named-workspace-index workspace)) (exwm-workspace-switch
(exwm/label->index (exwm/named-workspace-label workspace)
exwm/named-workspaces))
(window-manager/alert (window-manager/alert
(string/format "Switched to: %s" (exwm/named-workspace-label workspace)))) (string/format "Switched to: %s" (exwm/named-workspace-label workspace))))
@ -425,29 +400,19 @@ This function asssumes that BUFFER passes the `exwm/exwm-buffer?' predicate."
'exwm-init-hook 'exwm-init-hook
(lambda () (lambda ()
;; TODO: Refactor this into a bigger solution where the named-workspaces are ;; TODO: Refactor this into a bigger solution where the named-workspaces are
;; coupled to their startup commands. Expedience wins this time. ;; coupled to their startup commands. Expedience wins this time.
(progn (progn
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Chrome ;; Web surfing
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(progn (progn
(exwm/switch "Web surfing") (exwm/switch "Web surfing"))
;; make sure this blocks.
;; TODO: Support shell-cmd.el that has `shell-cmd/{sync,async}'.
;; (call-process-shell-command "google-chrome")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Project ;; Briefcase
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(progn (progn
(exwm/switch "Project") (exwm/switch "Briefcase")
(find-file constants/current-project)) (dotfiles/find-emacs-file "init.el"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Scratch
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(progn
(exwm/switch "Scratch")
(switch-to-buffer "*scratch*"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Terminal ;; Terminal
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -459,38 +424,12 @@ This function asssumes that BUFFER passes the `exwm/exwm-buffer?' predicate."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(progn (progn
(exwm/switch "Todos") (exwm/switch "Todos")
(org-helpers/find-file "today-expected.org") (org-helpers/find-file "today-expected.org"))
(wpc/evil-window-vsplit-right)
(org-helpers/find-file "today-actual.org"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Dotfiles
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(progn
(exwm/switch "Briefcase")
(dotfiles/find-emacs-file "init.el"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Chatter ;; Chatter
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(progn (progn
(exwm/switch "Chatter") (exwm/switch "Chatter"))
;; TODO: Support the following chat applications:
;; - Slack teknql
;; - irccloud.net
;; - web.whatsapp.com
;; - Telegram
;; NOTE: Perhaps all of these should be borderless.
;; (call-process-shell-command "terminator")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Work
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(progn
(exwm/switch "Work")
;; TODO: Support opening the following in chrome:
;; - calendar
;; - gmail
;; - chat (in a horizontal split)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Reset to default ;; Reset to default
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;