From: Stefan Monnier <monnier@IRO.UMontreal.CA>
To: martin rudalics <rudalics@gmx.at>
Cc: 4914@emacsbugs.donarmstrong.com, David Reitter <david.reitter@gmail.com>
Subject: bug#4914: completions - remove window after use?
Date: Tue, 17 Nov 2009 18:00:31 -0500 [thread overview]
Message-ID: <jwvtywsn4fo.fsf-monnier+gnus-read-ephemeral-bug@gnu.org> (raw)
In-Reply-To: <4AFC6176.3010306@gmx.at> (martin rudalics's message of "Thu, 12 Nov 2009 20:26:46 +0100")
>> That would be good. Quite generally, those windows/frames that are
>> created (e.g. via pop-to-buffer) for a specific window should be
>> removed after we're done with the interaction (see also quit-window).
>> I've had a kludge for this in Aquamacs for a long time (via an advice
>> to bury-buffer), but it's quite difficult to do consistently when
>> Emacs and 3rd-part packages aren't aware that this is happening.
> It's practically impossible to find a solution that satisfies all needs
> in this area. Basically, `display-buffer' would set a special slot for
> any window it pops up and `quit-window' would try to delete a window if
> it has that slot set and still shows the argument of `display-buffer'.
How 'bout the patch below?
Stefan "whose .emacs would have
(setq display-buffer-mark-dedicated 'soft)"
Index: lisp/minibuffer.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/minibuffer.el,v
retrieving revision 1.96
diff -u -r1.96 minibuffer.el
--- lisp/minibuffer.el 12 Nov 2009 23:10:06 -0000 1.96
+++ lisp/minibuffer.el 17 Nov 2009 22:56:12 -0000
@@ -965,9 +965,14 @@
(if (and completions
(or (consp (cdr completions))
(not (equal (car completions) string))))
- (with-output-to-temp-buffer "*Completions*"
(let* ((last (last completions))
- (base-size (cdr last)))
+ (base-size (cdr last))
+ ;; If the *Completions* buffer is shown in a new
+ ;; 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))
+ (with-output-to-temp-buffer "*Completions*"
;; Remove the base-size tail because `sort' requires a properly
;; nil-terminated list.
(when last (setcdr last nil))
Index: lisp/window.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/window.el,v
retrieving revision 1.185
diff -u -r1.185 window.el
--- lisp/window.el 13 Nov 2009 22:19:56 -0000 1.185
+++ lisp/window.el 17 Nov 2009 22:56:12 -0000
@@ -1042,6 +1042,11 @@
(set-window-buffer window buffer)
(window--display-buffer-1 window)))
+(defvar display-buffer-mark-dedicated nil
+ "If non-nil, `display-buffer' marks the windows it creates as dedicated.
+The actual non-nil value of this variable will be copied to the
+`window-dedicated-p' flag.")
+
(defun display-buffer (buffer-or-name &optional not-this-window frame)
"Make buffer BUFFER-OR-NAME appear in some window but don't select it.
BUFFER-OR-NAME must be a buffer or the name of an existing
@@ -1133,8 +1133,10 @@
buffer (if (listp pars) pars))))))
((or use-pop-up-frames (not frame-to-use))
;; We want or need a new frame.
- (window--display-buffer-2
- buffer (frame-selected-window (funcall pop-up-frame-function))))
+ (let ((win (frame-selected-window (funcall pop-up-frame-function))))
+ (when display-buffer-mark-dedicated
+ (set-window-dedicated-p win display-buffer-mark-dedicated))
+ (window--display-buffer-2 buffer win)))
((and pop-up-windows
;; Make a new window.
(or (not (frame-parameter frame-to-use 'unsplittable))
@@ -1149,8 +1149,10 @@
(or (window--try-to-split-window
(get-largest-window frame-to-use t))
(window--try-to-split-window
- (get-lru-window frame-to-use t))))
- (window--display-buffer-2 buffer window-to-use)))
+ (get-lru-window frame-to-use t)))))
+ (when display-buffer-mark-dedicated
+ (set-window-dedicated-p window-to-use display-buffer-mark-dedicated))
+ (window--display-buffer-2 buffer window-to-use))
((let ((window-to-undedicate
;; When NOT-THIS-WINDOW is non-nil, temporarily dedicate
;; the selected window to its buffer, to avoid that some of
next prev parent reply other threads:[~2009-11-17 23:00 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-11 19:45 completions - remove window after use? David Reitter
2009-11-11 20:28 ` Stefan Monnier
2009-11-11 21:26 ` Štěpán Němec
2009-11-11 23:21 ` Stefan Monnier
2009-11-12 9:57 ` Vertical completions (was: completions - remove window after use?) Juri Linkov
2009-11-12 10:09 ` Deniz Dogan
2009-11-17 17:45 ` Vertical completions Juri Linkov
2009-11-18 8:11 ` martin rudalics
2009-11-18 9:59 ` Juri Linkov
2009-11-18 9:47 ` Backward completions (was: Vertical completions) Juri Linkov
2009-11-18 15:06 ` Drew Adams
2009-11-18 15:47 ` Lennart Borgman
2009-11-18 19:02 ` Backward completions Juri Linkov
2009-11-18 19:36 ` Lennart Borgman
2009-11-19 17:36 ` Juri Linkov
2009-11-19 17:58 ` Lennart Borgman
2009-11-19 18:24 ` Drew Adams
2009-11-20 9:27 ` Juri Linkov
2009-11-20 17:29 ` Juri Linkov
2009-11-20 17:49 ` Lennart Borgman
2009-11-20 21:26 ` Drew Adams
2009-11-18 15:45 ` Stefan Monnier
2009-11-18 19:01 ` Juri Linkov
2009-11-18 19:50 ` Backward completions (was: Vertical completions) Dan Nicolaescu
2009-11-19 17:32 ` Backward completions Juri Linkov
2009-11-19 18:29 ` Dan Nicolaescu
2009-11-19 18:36 ` Drew Adams
2009-11-19 19:26 ` Dan Nicolaescu
2009-11-19 19:30 ` Drew Adams
2009-11-18 9:52 ` switch-to-completions (was: Vertical completions) Juri Linkov
2009-11-18 15:48 ` switch-to-completions Stefan Monnier
2009-11-18 19:04 ` switch-to-completions Juri Linkov
2009-11-19 1:12 ` switch-to-completions Stefan Monnier
2009-11-12 10:29 ` Vertical completions (was: completions - remove window after use?) Štěpán Němec
2009-11-12 19:26 ` Eli Zaretskii
2009-11-12 22:00 ` Lennart Borgman
2009-11-12 13:30 ` completions - remove window after use? Lluís
2009-11-12 14:40 ` David Reitter
2009-11-12 15:15 ` Stefan Monnier
2009-11-14 0:30 ` Richard Stallman
2009-11-12 3:00 ` Xavier Maillard
2009-11-12 8:19 ` martin rudalics
2009-11-12 13:31 ` bug#4914: " David Reitter
2009-11-12 17:40 ` martin rudalics
2009-11-12 17:56 ` David Reitter
2009-11-12 19:26 ` martin rudalics
2009-11-17 23:00 ` Stefan Monnier [this message]
2009-11-18 8:11 ` martin rudalics
2009-11-23 13:58 ` David Reitter
2009-11-12 20:22 ` Stefan Monnier
2010-01-17 23:41 ` Chong Yidong
[not found] ` <5C420BAC-187B-4B19-BF13-CC1A71745D59@gmail.com>
2010-01-18 17:58 ` David Reitter
2010-01-18 15:09 ` bug#4914: marked as done (completions - remove window after use?) Emacs bug Tracking System
2009-11-12 22:36 ` completions - remove window after use? Xavier Maillard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jwvtywsn4fo.fsf-monnier+gnus-read-ephemeral-bug@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=4914@emacsbugs.donarmstrong.com \
--cc=david.reitter@gmail.com \
--cc=rudalics@gmx.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.