GNU bug report logs -
#17809
24.4.50; Completions display
Previous Next
Reported by: Juri Linkov <juri <at> jurta.org>
Date: Thu, 19 Jun 2014 07:12:03 UTC
Severity: wishlist
Tags: patch
Merged with 12618
Found in version 24.2.50
Fixed in version 24.4.50
Done: Juri Linkov <juri <at> jurta.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
>> But the problem will still remain, and to solve it we need to fill the buffer
>> after displaying that would be possible only after changing the order of calls
>> in `with-output-to-temp-buffer' from
>>
>> (prog1 (progn ,@body)
>> (internal-temp-output-buffer-show ,buf))
>>
>> to
>>
>> (progn
>> (internal-temp-output-buffer-show ,buf)
>> (progn ,@body)
>>
>
> I miss you here. My order would be:
>
> (1) Get the buffer ready in BODY.
>
> (2) Display it in `internal-temp-output-buffer-show'.
>
> (3) Fill it in `temp-buffer-show-hook'.
This is possible, but then (window-height . fit-window-to-buffer)
is called on an empty buffer.
I found a way to achieve a good result by calling
`with-output-to-temp-buffer' twice: first with
empty body that displays the buffer, and the second call
finds the displayed window, fills it, and calls
(window-height . fit-window-to-buffer) at the end:
=== modified file 'lisp/minibuffer.el'
--- lisp/minibuffer.el 2014-06-02 00:18:22 +0000
+++ lisp/minibuffer.el 2014-06-27 23:47:38 +0000
@@ -1796,7 +1796,22 @@ (defun minibuffer-completion-help (&opti
;; window, mark it as softly-dedicated, so bury-buffer in
;; minibuffer-hide-completions will know whether to
;; delete the window or not.
- (display-buffer-mark-dedicated 'soft))
+ (display-buffer-mark-dedicated 'soft)
+ (display-buffer-base-action
+ ;; This is a copy of `display-buffer-fallback-action'
+ ;; where `display-buffer-use-some-window' is replaced
+ ;; with `display-buffer-at-bottom'.
+ '((display-buffer--maybe-same-window
+ display-buffer-reuse-window
+ display-buffer--maybe-pop-up-frame-or-window
+ display-buffer-at-bottom)
+ (window-height . fit-window-to-buffer))))
+ ;; Display the *Completions* buffer before inserting
+ ;; completion candidates to be able to fill the contents
+ ;; evenly using the final window width in the second call
+ ;; to `with-output-to-temp-buffer'.
+ (with-output-to-temp-buffer "*Completions*"
+ ;; Empty body
+ )
(with-output-to-temp-buffer "*Completions*"
;; Remove the base-size tail because `sort' requires a properly
;; nil-terminated list.
This bug report was last modified 10 years and 229 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.