Subject: RE: bug#11939: 24.1; `save-buffers-kill-emacs' losesminibufferfocuswhenitcalls`list-processes'

From: "Drew Adams" <[email-masked]>
Date: Sun, 12 Aug 2012 08:03:02 -0700

>  >> > I do not especially _like_ redefinining vanilla functions...
>  >>
>  >> I don't understand why you insist on using, advising, or 
>  >> redefining `special-display-popup-frame'.  Customizing
>  >> `display-buffer-base-action' should be all you want.
>  >
>  > What part of must-work-with-releases-other-than-just-24 
>  > did you not get?
> 
> Changing `special-display-popup-frame' for >= 24.2 would not 
> affect its behavior with < 24.2.

Fair enough.  I could provide a separate solution for >= 24.2.
Agreed.  And I'd be glad to learn how.

Perhaps I will provide a separate 24.2+ solution, once we have 24.2.  By that
time, based on past experience, it's quite possible that Emacs Dev will have
changed things in this area once again - perhaps even radically (again).  But
I'm certainly open to finding a solution that does not require redefining
`special-display-popup-frame'.

However:

1. `display-buffer-base-action' is a user option.  Users can set it to anything,
including things that do not do what my redefinition of `s-d-p-f' does, which is
to invoke `fit-frame'.  Advising me to customize `display-buffer-base-action'
does not speak to providing such functionality in a library for other users.

2. I do not yet understand `display-buffer-base-action' enough to know _how_ it
might be changed to DTRT here. [*]

3. Wrt #2, in particular, redefining `s-d-p-f' affects only those places in
Emacs that call `s-d-p-f', in particular, special-display stuff.  IIUC,
`display-buffer-base-action' is general and affects _all_ calls (and only calls)
to `display-buffer'.  How to make it affect only what `s-d-p-f' affects?

4. Wrt #2 & #3: Please let me know precisely how you think I could, now (e.g.,
for recent Emacs 24 builds plus your code, which I hope you will merge soon),
use `display-buffer-base-action' to get the effect of my redefinition of
`s-d-p-f'.

I'm open to your suggestion, but so far it is not concrete enough for me to see
how `display-buffer-base-action' might replace redefining `s-d-p-f', even for
Emacs >= 24.2.  What is no doubt obvious to you is not at all clear to me.

---

[*] FWIW, the `display-buffer-base-action' doc string is not very helpful:

 "It should be a cons cell (FUNCTION . ALIST), where FUNCTION is a
  function or a list of functions.  Each function should accept two
  arguments: a buffer to display and an alist similar to ALIST."

What does "similar" to ALIST mean here?  Plus, all the doc tells us is the
_form_ of the option value, not what the value means or how it is used.  Yes, it
sends us off to the doc for `display-buffer', but that is a labyrinthine jungle.