GNU bug report logs - #9639
24.0.90; Problem with bury-buffer in minibuffer-hide-completions

Previous Next

Package: emacs;

Reported by: Stephen Berman <stephen.berman <at> gmx.net>

Date: Fri, 30 Sep 2011 22:12:02 UTC

Severity: normal

Merged with 9724

Found in version 24.0.90

Done: martin rudalics <rudalics <at> gmx.at>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Stephen Berman <stephen.berman <at> gmx.net>
To: martin rudalics <rudalics <at> gmx.at>
Cc: 9639 <at> debbugs.gnu.org
Subject: bug#9639: 24.0.90; Problem with bury-buffer in minibuffer-hide-completions
Date: Sat, 01 Oct 2011 12:03:06 +0200
On Sat, 01 Oct 2011 11:08:09 +0200 martin rudalics <rudalics <at> gmx.at> wrote:

>> 1. emacs -Q
>> 2. Type `M-x glo TAB' and at the completion "M-x global-" type TAB again,
>>    making a *Completions* buffer pop up.
>> 3. Type `v TAB', yielding the completion "M-x global-visual-line-mode".
>> => The window that had been displaying the *Completions* buffer now
>> displays the *Messages* buffer.
>>
>> AFAICT this is due to the following cond clause in bury-buffer (which is
>> called by minibuffer-hide-completions):
>>
>>      ((not (window-dedicated-p))
>>       (switch-to-prev-buffer nil 'bury))
>
> ... plus the fact that switching buffers should not delete windows ...
>
>> Only after typing RET in the minibuffer to accept the completion is the
>> window that had been displaying the *Completions* buffer and now
>> displays the *Messages* buffer deleted; in Emacs 23.2 it is deleted as
>> soon as the sole completion is displayed in the minibuffer.  Commenting
>> out the above clause restores the 23.2 behavior.  But this presumably
>> has bad effects elsewhere.
>
> Presumably `minibuffer-hide-completions' should iconify a standalone
> completions frame while deleting a split-off completions window.  So
> maybe the following DTRT:
>
> (defun minibuffer-hide-completions ()
>   "Get rid of an out-of-date *Completions* buffer."
>   ;; FIXME: We could/should use minibuffer-scroll-window here, but it
>   ;; can also point to the minibuffer-parent-window, so it's a bit tricky.
>   (let* ((window (get-buffer-window "*Completions*" 0))
> 	 (buffer (window-buffer window)))
>     (when window
>       (let ((deletable (window-deletable-p window)))
> 	(cond
> 	 ((eq deletable 'frame)
> 	  ;; Iconify frame.
> 	  (iconify-frame (window-frame window))
> 	  (bury-buffer-internal buffer))
> 	 (deletable
> 	  ;; Delete window
> 	  (delete-window window)
> 	  (bury-buffer-internal buffer))
> 	 (t
> 	  ;; Switch to another buffer.
> 	  (switch-to-prev-buffer window 'bury)))))))

I confirm this DTRT for my case.

Steve Berman




This bug report was last modified 13 years and 282 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.