Use a hash table to cache result of ‘exwm-workspace--client-p’

* exwm-workspace.el (exwm--client-p-hash-table): New variable.
(exwm-workspace--client-p): Use `exwm--client-p-hash-table' to
store which workspace frames are client frames instead of
frequently invoking `frame-parameter'.
This commit is contained in:
Matt Beshara 2021-09-06 14:46:16 +10:00 committed by Adrián Medraño Calvo
parent 1863361674
commit 182ffbed6c

View file

@ -165,10 +165,19 @@ NIL if FRAME is not a workspace"
"Return t if FRAME is a workspace." "Return t if FRAME is a workspace."
(memq frame exwm-workspace--list)) (memq frame exwm-workspace--list))
(defvar exwm--client-p-hash-table
(make-hash-table :test 'eq :weakness 'key))
(defsubst exwm-workspace--client-p (&optional frame) (defsubst exwm-workspace--client-p (&optional frame)
"Return non-nil if FRAME is an emacsclient frame." "Return non-nil if FRAME is an emacsclient frame."
(or (frame-parameter frame 'client) (let* ((frame (or frame (selected-frame)))
(not (display-graphic-p frame)))) (cached-value (gethash frame exwm--client-p-hash-table 'absent)))
(if (eq cached-value 'absent)
(puthash frame
(or (frame-parameter frame 'client)
(not (display-graphic-p frame)))
exwm--client-p-hash-table)
cached-value)))
(defvar exwm-workspace--switch-map nil (defvar exwm-workspace--switch-map nil
"Keymap used for interactively selecting workspace.") "Keymap used for interactively selecting workspace.")