emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/exwm 182ffbe 03/11: Use a hash table to cache result o


From: Adrián Medraño Calvo
Subject: [elpa] externals/exwm 182ffbe 03/11: Use a hash table to cache result of ‘exwm-workspace--client-p’
Date: Sat, 13 Nov 2021 16:51:01 -0500 (EST)

branch: externals/exwm
commit 182ffbed6c7334ee51cb5cd2645ba0ee42c4da13
Author: Matt Beshara <m@mfa.pw>
Commit: Adrián Medraño Calvo <adrian@medranocalvo.com>

    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'.
---
 exwm-workspace.el | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/exwm-workspace.el b/exwm-workspace.el
index cff17f3..c1de5da 100644
--- a/exwm-workspace.el
+++ b/exwm-workspace.el
@@ -165,10 +165,19 @@ NIL if FRAME is not a workspace"
   "Return t if FRAME is a workspace."
   (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)
   "Return non-nil if FRAME is an emacsclient frame."
-  (or (frame-parameter frame 'client)
-      (not (display-graphic-p frame))))
+  (let* ((frame (or frame (selected-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
   "Keymap used for interactively selecting workspace.")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]