GNU bug report logs -
#9639
24.0.90; Problem with bury-buffer in minibuffer-hide-completions
Previous Next
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
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.