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

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

[elpa] externals/marginalia ccefc57 052/241: marginalia-annotate-command


From: Stefan Monnier
Subject: [elpa] externals/marginalia ccefc57 052/241: marginalia-annotate-command-binding: add comment
Date: Fri, 28 May 2021 20:48:55 -0400 (EDT)

branch: externals/marginalia
commit ccefc57c574aea6babc7c0ce2363a734d83fce59
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    marginalia-annotate-command-binding: add comment
---
 marginalia.el | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/marginalia.el b/marginalia.el
index c0f4b37..98a8621 100644
--- a/marginalia.el
+++ b/marginalia.el
@@ -217,16 +217,22 @@ determine it."
   "Truncate string STR to WIDTH."
   (truncate-string-to-width (car (split-string str "\n")) width 0 32 "…"))
 
-(defvar-local marginalia-annotate-command-binding--hash nil)
+(defvar-local marginalia-annotate-command-binding--hash nil
+  "Hash table storing the keybinding of every command.
+This hash table is needed to speed up `marginalia-annotate-command-binding'.")
+
 (defun marginalia-annotate-command-binding (cand)
   "Annotate command CAND with keybinding."
   (with-current-buffer (window-buffer (minibuffer-selected-window))
+    ;; Precomputing the keybinding of every command is faster than looking it 
up every time using
+    ;; `where-is-internal'. `where-is-internal' generates a lot of garbage, 
leading to garbage
+    ;; collecting pauses when interacting with the minibuffer. See
+    ;; https://github.com/minad/marginalia/issues/16.
     (unless marginalia-annotate-command-binding--hash
       (setq marginalia-annotate-command-binding--hash (make-hash-table))
       (cl-do-all-symbols (sym)
-        (when (commandp sym)
-          (when-let (key (where-is-internal sym nil t))
-            (puthash sym key marginalia-annotate-command-binding--hash)))))
+        (when-let (key (and (commandp sym) (where-is-internal sym nil t)))
+          (puthash sym key marginalia-annotate-command-binding--hash))))
     (when-let (binding (gethash (intern cand) 
marginalia-annotate-command-binding--hash))
       (propertize (format " (%s)" (key-description binding)) 'face 
'marginalia-key))))
 



reply via email to

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