all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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





  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.