emacs-diffs
[Top][All Lists]
Advanced

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

master df49910: Create a buffer-local binding to improve performance


From: Dmitry Gutov
Subject: master df49910: Create a buffer-local binding to improve performance
Date: Thu, 28 May 2020 19:36:09 -0400 (EDT)

branch: master
commit df4991093b94ccc48255a0387a98c536962fd0a7
Author: Arnold Noronha <arnold@tdrhq.com>
Commit: Dmitry Gutov <dgutov@yandex.ru>

    Create a buffer-local binding to improve performance
    
    * lisp/ido.el (ido-make-buffer-list-1):
    Create a buffer-local binding to improve performance when a lot of
    buffers are open (bug#41029).
    
    Copyright-paperwork-exempt: yes
---
 lisp/ido.el | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/lisp/ido.el b/lisp/ido.el
index 4fb01c6..e834916 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -3410,13 +3410,18 @@ instead removed from the current item list."
 
 (defun ido-make-buffer-list-1 (&optional frame visible)
   "Return list of non-ignored buffer names."
-  (delq nil
-       (mapcar
-        (lambda (x)
-          (let ((name (buffer-name x)))
-            (if (not (or (ido-ignore-item-p name ido-ignore-buffers) (member 
name visible)))
-                name)))
-        (buffer-list frame))))
+  (with-temp-buffer
+    ;; Each call to ido-ignore-item-p LET-binds case-fold-search.
+    ;; That is slow if there's no buffer-local binding available,
+    ;; roughly O(number of buffers).  This hack avoids it.
+    (setq-local case-fold-search nil)
+    (delq nil
+         (mapcar
+          (lambda (x)
+            (let ((name (buffer-name x)))
+              (if (not (or (ido-ignore-item-p name ido-ignore-buffers) (member 
name visible)))
+                  name)))
+          (buffer-list frame)))))
 
 (defun ido-make-buffer-list (default)
   "Return the current list of buffers.



reply via email to

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