[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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master df49910: Create a buffer-local binding to improve performance,
Dmitry Gutov <=