Subject: Re: bug#8184: 23.1.90; `menu-bar-non-minibuffer-window-p' error in calls to `kill-this-buffer'

From: Stefan Monnier <[email-masked]>
Date: Sun, 06 Mar 2011 14:53:31 -0500

>> ??? This function is bound to the "Close" item in the "File" menu, so
>> it is definitely related to the menu bar.

> Am I right that the time for executing `kill-this-buffer-enabled-p' is
> currently always proportional to the number of live buffers?  In that
> case I'd rewrite his function as

> (defun kill-this-buffer-enabled-p ()
>   (or (not (menu-bar-non-minibuffer-window-p))
>       (let (found-1)
> 	(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))))))))

Probably a good change, yes.  It'd also be good to add a comment
explaining why we do this loop searching for some non-temp buffer.
IIUC this function is used to check whether kill-this-buffer can do its
job, and if (menu-bar-non-minibuffer-window-p) is nil, then we use
abort-recursive-edit, so we need to check if abort-recursive-edit can be
used, which seems related to minibuffer-depth rather than to
non-temp buffers.

        Stefan