From 159daf87947f31a0e7f82769f1a3861500ea08e0 Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Sun, 29 May 2011 15:11:23 -0400 Subject: [PATCH] * menu-bar.el (kill-this-buffer-enabled-p): Avoid looping over entire buffer list (Bug#8184). --- lisp/ChangeLog | 5 +++++ lisp/menu-bar.el | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6c21786bce8..c54e48ef52a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-05-29 Martin Rudalics + + * menu-bar.el (kill-this-buffer-enabled-p): Avoid looping over + entire buffer list (Bug#8184). + 2011-05-29 Chong Yidong * image.el (imagemagick-types-inhibit) diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index 8a33381b618..343a9c6dd0c 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -1823,14 +1823,17 @@ using `abort-recursive-edit'." (abort-recursive-edit))) (defun kill-this-buffer-enabled-p () - (let ((count 0) - (buffers (buffer-list))) - (while buffers - (or (string-match "^ " (buffer-name (car buffers))) - (setq count (1+ count))) - (setq buffers (cdr buffers))) - (or (not (menu-bar-non-minibuffer-window-p)) - (> count 1)))) + "Return non-nil if the `kill-this-buffer' menu item should be enabled." + (or (not (menu-bar-non-minibuffer-window-p)) + (let (found-1) + ;; Instead of looping over entire buffer list, stop once we've + ;; found two "killable" buffers (Bug#8184). + (catch 'found-2 + (dolist (buffer (buffer-list)) + (unless (string-match-p "^ " (buffer-name buffer)) + (if (not found-1) + (setq found-1 t) + (throw 'found-2 t)))))))) (put 'dired 'menu-enable '(menu-bar-non-minibuffer-window-p)) -- 2.39.2