unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* patch gud-gdb to respect other-frame-window?
@ 2018-07-29 17:22 Stephen Leake
  2018-07-29 17:30 ` Eli Zaretskii
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Stephen Leake @ 2018-07-29 17:22 UTC (permalink / raw)
  To: emacs-devel

Currently, 'gud-gdb' has its own notion of where to put the *gud-<exec name>*
buffer. Since I use other-frame-window (a GNU ELPA package), I'd like to
override that. This patch works for me:

diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 6826674a94..1b5cf46231 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -2608,9 +2608,11 @@ gud-common-init
     (select-window
      (display-buffer
       (get-buffer-create (concat "*gud" filepart "*"))
-      '(display-buffer-reuse-window
-        display-buffer-in-previous-window
-        display-buffer-same-window display-buffer-pop-up-window)))
+      (if (featurep 'other-frame-window)
+          '(display-buffer-same-window)
+        '(display-buffer-reuse-window
+          display-buffer-in-previous-window
+          display-buffer-same-window display-buffer-pop-up-window))))
     (when (and existing-buffer (get-buffer-process existing-buffer))
       (error "This program is already being debugged"))
     ;; Set the dir, in case the buffer already existed with a different dir.

A similar pattern can be used for other commands that do not currently
respect other-frame-window.

Ok to commit to master?

-- 
-- Stephe



^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: patch gud-gdb to respect other-frame-window?
  2018-07-29 17:22 patch gud-gdb to respect other-frame-window? Stephen Leake
@ 2018-07-29 17:30 ` Eli Zaretskii
  2018-07-30  6:56   ` Stephen Leake
  2018-07-30  6:23 ` martin rudalics
  2018-07-30 17:17 ` Stefan Monnier
  2 siblings, 1 reply; 13+ messages in thread
From: Eli Zaretskii @ 2018-07-29 17:30 UTC (permalink / raw)
  To: Stephen Leake; +Cc: emacs-devel

> From: Stephen Leake <stephen_leake@stephe-leake.org>
> Date: Sun, 29 Jul 2018 12:22:55 -0500
> 
> diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
> index 6826674a94..1b5cf46231 100644
> --- a/lisp/progmodes/gud.el
> +++ b/lisp/progmodes/gud.el
> @@ -2608,9 +2608,11 @@ gud-common-init
>      (select-window
>       (display-buffer
>        (get-buffer-create (concat "*gud" filepart "*"))
> -      '(display-buffer-reuse-window
> -        display-buffer-in-previous-window
> -        display-buffer-same-window display-buffer-pop-up-window)))
> +      (if (featurep 'other-frame-window)
> +          '(display-buffer-same-window)
> +        '(display-buffer-reuse-window
> +          display-buffer-in-previous-window
> +          display-buffer-same-window display-buffer-pop-up-window))))
>      (when (and existing-buffer (get-buffer-process existing-buffer))
>        (error "This program is already being debugged"))
>      ;; Set the dir, in case the buffer already existed with a different dir.
> 
> A similar pattern can be used for other commands that do not currently
> respect other-frame-window.
> 
> Ok to commit to master?

Isn't there a more elegant way of doing this, without asking about a
feature explicitly?  Maybe other-frame-window needs some enhancement
to allow such protocols, otherwise we will need to test for each
similar feature by name, and that is both inelegant and a maintenance
burden, as both Emacs and those packages continue to evolve.

Thanks.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: patch gud-gdb to respect other-frame-window?
  2018-07-29 17:22 patch gud-gdb to respect other-frame-window? Stephen Leake
  2018-07-29 17:30 ` Eli Zaretskii
@ 2018-07-30  6:23 ` martin rudalics
  2018-07-30 17:17 ` Stefan Monnier
  2 siblings, 0 replies; 13+ messages in thread
From: martin rudalics @ 2018-07-30  6:23 UTC (permalink / raw)
  To: Stephen Leake, emacs-devel

 > A similar pattern can be used for other commands that do not currently
 > respect other-frame-window.
 >
 > Ok to commit to master?

No.  If a user and/or 'other-frame-window' can't fix that
systematically on their side, we have a more deeply rooted bug in
'display-buffer'.  In the latter case your patch would only cover that
up.

Please explain why the various 'display-buffer' customization
facilities are not sufficient for handling the problem.

Thanks, martin



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: patch gud-gdb to respect other-frame-window?
  2018-07-29 17:30 ` Eli Zaretskii
@ 2018-07-30  6:56   ` Stephen Leake
  2018-07-30  7:34     ` martin rudalics
  0 siblings, 1 reply; 13+ messages in thread
From: Stephen Leake @ 2018-07-30  6:56 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Stephen Leake <stephen_leake@stephe-leake.org>
>> Date: Sun, 29 Jul 2018 12:22:55 -0500
>> 
>> diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
>> index 6826674a94..1b5cf46231 100644
>> --- a/lisp/progmodes/gud.el
>> +++ b/lisp/progmodes/gud.el
>> @@ -2608,9 +2608,11 @@ gud-common-init
>>      (select-window
>>       (display-buffer
>>        (get-buffer-create (concat "*gud" filepart "*"))
>> -      '(display-buffer-reuse-window
>> -        display-buffer-in-previous-window
>> -        display-buffer-same-window display-buffer-pop-up-window)))
>> +      (if (featurep 'other-frame-window)
>> +          '(display-buffer-same-window)
>> +        '(display-buffer-reuse-window
>> +          display-buffer-in-previous-window
>> +          display-buffer-same-window display-buffer-pop-up-window))))
>>      (when (and existing-buffer (get-buffer-process existing-buffer))
>>        (error "This program is already being debugged"))
>>      ;; Set the dir, in case the buffer already existed with a different dir.
>> 
>> A similar pattern can be used for other commands that do not currently
>> respect other-frame-window.
>> 
>> Ok to commit to master?
>
> Isn't there a more elegant way of doing this, without asking about a
> feature explicitly?  

Never mind; I realized I can set 'display-buffer-overriding-action' to
'display-buffer-same-window in my ~/.emacs; that overrides this code,
and still lets other-frame-window do its thing. So this patch, and
others like it, it unecessary.

I'll add this to the documentation in other-frame-window.

-- 
-- Stephe



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: patch gud-gdb to respect other-frame-window?
  2018-07-30  6:56   ` Stephen Leake
@ 2018-07-30  7:34     ` martin rudalics
  2018-07-30 16:49       ` Stephen Leake
  0 siblings, 1 reply; 13+ messages in thread
From: martin rudalics @ 2018-07-30  7:34 UTC (permalink / raw)
  To: Stephen Leake, emacs-devel

 > Never mind; I realized I can set 'display-buffer-overriding-action' to
 > 'display-buffer-same-window in my ~/.emacs; that overrides this code,
 > and still lets other-frame-window do its thing.

Please don't.

If 'other-frame-window' sets 'display-buffer-overriding-action'
itself, then it should _not_ be overridden by the user.  It's a simple
statement that 'other-frame-window' thinks that it is always right in
its decision and the user has to either take it or leave it.  If
'other-frame-window' does not set 'display-buffer-overriding-action'
itself, then customizing 'display-buffer-alist' should suffice.
That's the variable intended for users.  If this doesn't help we have
a bug we must investigate.

Thanks, martin



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: patch gud-gdb to respect other-frame-window?
  2018-07-30  7:34     ` martin rudalics
@ 2018-07-30 16:49       ` Stephen Leake
  2018-07-31  6:37         ` martin rudalics
  0 siblings, 1 reply; 13+ messages in thread
From: Stephen Leake @ 2018-07-30 16:49 UTC (permalink / raw)
  To: emacs-devel

martin rudalics <rudalics@gmx.at> writes:

>> Never mind; I realized I can set 'display-buffer-overriding-action' to
>> 'display-buffer-same-window in my ~/.emacs; that overrides this code,
>> and still lets other-frame-window do its thing.
>
> Please don't.
>
> If 'other-frame-window' sets 'display-buffer-overriding-action'
> itself, then it should _not_ be overridden by the user.  

It's not quite that simple.

The current design of 'other-frame-window' only defines the behavior
when the other-frame or other-window prefixes are invoked; the behavior
with no prefix is left to the default Emacs code, or to a user-provided
'display-buffer-overriding-action'.

I don't remember if that was a concious decision, but in retrospect it
looks like the right one.

In more detail, 'other-frame-window' pushes overriding values in front
of user-set values in 'display-buffer-overriding-action' when the
other-window and other-frame prefixes are invoked, and pops them off
when the command is done, leaving the user-set values intact.

> It's a simple statement that 'other-frame-window' thinks that it is
> always right in its decision and the user has to either take it or
> leave it. 

Not quite; it is only right when the prefixes are invoked.

We could change 'other-frame-window' to set the no-prefix
'display-buffer-overriding-action' as well, but I think it is better to
leave that to the user; some might like the current Emacs default
behavior (I did, until I ran into this gud-gdb behavior).

-- 
-- Stephe



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: patch gud-gdb to respect other-frame-window?
  2018-07-29 17:22 patch gud-gdb to respect other-frame-window? Stephen Leake
  2018-07-29 17:30 ` Eli Zaretskii
  2018-07-30  6:23 ` martin rudalics
@ 2018-07-30 17:17 ` Stefan Monnier
  2018-07-30 20:23   ` Stephen Leake
  2 siblings, 1 reply; 13+ messages in thread
From: Stefan Monnier @ 2018-07-30 17:17 UTC (permalink / raw)
  To: emacs-devel

> Currently, 'gud-gdb' has its own notion of where to put the *gud-<exec name>*
> buffer. Since I use other-frame-window (a GNU ELPA package), I'd like to
> override that.

Could you explain in more detail what's the problem you're seeing?

> Never mind; I realized I can set 'display-buffer-overriding-action' to
> 'display-buffer-same-window in my ~/.emacs; that overrides this code,

[ ... Trying to infer what was the problem, based on this apparently
  working workaround ... Nope, sorry, I still don't see what is the
  problem you're trying to solve.  ]

Just a wild guess: maybe the better solution would be for
other-frame-window to provide another command to force displaying the
buffer in the current window?


        Stefan




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: patch gud-gdb to respect other-frame-window?
  2018-07-30 17:17 ` Stefan Monnier
@ 2018-07-30 20:23   ` Stephen Leake
  2018-07-30 20:28     ` Stefan Monnier
  2018-07-30 20:30     ` Stephen Leake
  0 siblings, 2 replies; 13+ messages in thread
From: Stephen Leake @ 2018-07-30 20:23 UTC (permalink / raw)
  To: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> Currently, 'gud-gdb' has its own notion of where to put the *gud-<exec name>*
>> buffer. Since I use other-frame-window (a GNU ELPA package), I'd like to
>> override that.
>
> Could you explain in more detail what's the problem you're seeing?

Sorry, I was not very clear.

If I type "M-x gud-gdb ...", the window in which the *gdb-<exec>* buffer
is shown is usually not the currently selected window, but sometimes it
is, depending on what buffer/window is currently selected. There is a
logic to it, but it's not what I want.

Since I'm used to other-frame-window, I expect newly created buffers to
appear in the currently selected window; that's what happens for
find-file and most other commands.

>> Never mind; I realized I can set 'display-buffer-overriding-action' to
>> 'display-buffer-same-window in my ~/.emacs; that overrides this code,
>
> [ ... Trying to infer what was the problem, based on this apparently
>   working workaround ... Nope, sorry, I still don't see what is the
>   problem you're trying to solve.  ]
>
> Just a wild guess: maybe the better solution would be for
> other-frame-window to provide another command to force displaying the
> buffer in the current window?

As I said in my response to Martin, I think setting the default value of
'display-buffer-overriding-action' to 'display-buffer-same-window is the
appropriate solution. That variable is intended to allow the user to
override Emac's choices about buffer display, and other-frame-window's
use of it is consistent with that intent.


On further examining the list of available display-buffer actions,
perhaps this would be a better default:

'(display-buffer-reuse-window
  display-buffer--maybe-same-window
  display-buffer-use-some-window)

I'll try that.


It might make sense for other-frame-window to set this as the default
for 'display-buffer-overriding-action' when it is loaded, but only if
the user has not already set it. 

-- 
-- Stephe



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: patch gud-gdb to respect other-frame-window?
  2018-07-30 20:23   ` Stephen Leake
@ 2018-07-30 20:28     ` Stefan Monnier
  2018-07-30 20:30     ` Stephen Leake
  1 sibling, 0 replies; 13+ messages in thread
From: Stefan Monnier @ 2018-07-30 20:28 UTC (permalink / raw)
  To: emacs-devel

>> Just a wild guess: maybe the better solution would be for
>> other-frame-window to provide another command to force displaying the
>> buffer in the current window?
>
> As I said in my response to Martin, I think setting the default value of
> 'display-buffer-overriding-action' to 'display-buffer-same-window is the
> appropriate solution. That variable is intended to allow the user to
> override Emac's choices about buffer display, and other-frame-window's
> use of it is consistent with that intent.

No.  That's what `display-buffer-alist` is for.

`display-buffer-overriding-action` is intended for use of Elisp packages
like other-frame-window (notice it's not a defcustom, for example).


        Stefan




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: patch gud-gdb to respect other-frame-window?
  2018-07-30 20:23   ` Stephen Leake
  2018-07-30 20:28     ` Stefan Monnier
@ 2018-07-30 20:30     ` Stephen Leake
  2018-07-30 21:22       ` Stephen Leake
  1 sibling, 1 reply; 13+ messages in thread
From: Stephen Leake @ 2018-07-30 20:30 UTC (permalink / raw)
  To: emacs-devel

Stephen Leake <stephen_leake@stephe-leake.org> writes:

> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>
>>> Currently, 'gud-gdb' has its own notion of where to put the *gud-<exec name>*
>>> buffer. Since I use other-frame-window (a GNU ELPA package), I'd like to
>>> override that.
>>
>> Could you explain in more detail what's the problem you're seeing?
>
> Sorry, I was not very clear.
>
> If I type "M-x gud-gdb ...", the window in which the *gdb-<exec>* buffer
> is shown is usually not the currently selected window, but sometimes it
> is, depending on what buffer/window is currently selected. There is a
> logic to it, but it's not what I want.
>
> Since I'm used to other-frame-window, I expect newly created buffers to
> appear in the currently selected window; that's what happens for
> find-file and most other commands.


I just typed "C-h k ...", and the *Help* window appeared in a window
that is not the selected window. So there's more work to do ...

-- 
-- Stephe



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: patch gud-gdb to respect other-frame-window?
  2018-07-30 20:30     ` Stephen Leake
@ 2018-07-30 21:22       ` Stephen Leake
  0 siblings, 0 replies; 13+ messages in thread
From: Stephen Leake @ 2018-07-30 21:22 UTC (permalink / raw)
  To: emacs-devel


Another data point. In a package I'm working on,
'wisi-show-parse-errors' shows errors found by the indent parser in a
small window at the bottom of the screen, using a display action of:

(cons #'display-buffer-at-bottom
			      (list (cons 'window-height
                              #'shrink-window-if-larger-than-buffer))).

But the default setting of 'display-buffer-overriding-action' overrides
that, and now the window takes half the screen.

So sometimes I want the default value that Emacs provides
(for wisi-show-parse-errors etc), and sometimes I don't (for gud-gdb etc).

So I need an exception mechanism; apply my default value for
display-buffer-overriding-action, except in the following buffers/modes.

Or invert that, only apply a default value for the following
buffers/modes/commands.

Ah; that's what 'display-buffer-alist is for. I'll try that.



Stephen Leake <stephen_leake@stephe-leake.org> writes:

> Stephen Leake <stephen_leake@stephe-leake.org> writes:
>
>> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>
>>>> Currently, 'gud-gdb' has its own notion of where to put the *gud-<exec name>*
>>>> buffer. Since I use other-frame-window (a GNU ELPA package), I'd like to
>>>> override that.
>>>
>>> Could you explain in more detail what's the problem you're seeing?
>>
>> Sorry, I was not very clear.
>>
>> If I type "M-x gud-gdb ...", the window in which the *gdb-<exec>* buffer
>> is shown is usually not the currently selected window, but sometimes it
>> is, depending on what buffer/window is currently selected. There is a
>> logic to it, but it's not what I want.
>>
>> Since I'm used to other-frame-window, I expect newly created buffers to
>> appear in the currently selected window; that's what happens for
>> find-file and most other commands.
>
>
> I just typed "C-h k ...", and the *Help* window appeared in a window
> that is not the selected window. So there's more work to do ...

-- 
-- Stephe



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: patch gud-gdb to respect other-frame-window?
  2018-07-30 16:49       ` Stephen Leake
@ 2018-07-31  6:37         ` martin rudalics
  2018-07-31  9:21           ` [SPAM UNSURE] " Stephen Leake
  0 siblings, 1 reply; 13+ messages in thread
From: martin rudalics @ 2018-07-31  6:37 UTC (permalink / raw)
  To: Stephen Leake, emacs-devel

 > The current design of 'other-frame-window' only defines the behavior
 > when the other-frame or other-window prefixes are invoked;

In that case the special behavior specified by 'other-frame-window' is
supposed to prevail any preferences stored in 'display-buffer-alist'.
This is precisely one of the cases 'display-buffer-overriding-action'
has been added for.

 > the behavior
 > with no prefix is left to the default Emacs code,

Which means that in such case 'other-frame-window' should refrain from
touching 'display-buffer-overriding-action' and leave the decision of
what to do to 'display-buffer-alist'.

 > or to a user-provided
 > 'display-buffer-overriding-action'.

There should be no such thing.  If someone sees an absolute need for
it, we have a design bug.

 >> It's a simple statement that 'other-frame-window' thinks that it is
 >> always right in its decision and the user has to either take it or
 >> leave it.
 >
 > Not quite; it is only right when the prefixes are invoked.

Then 'other-frame-window' does something it should not do when no
prefixes are invoked.

martin



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [SPAM UNSURE] Re: patch gud-gdb to respect other-frame-window?
  2018-07-31  6:37         ` martin rudalics
@ 2018-07-31  9:21           ` Stephen Leake
  0 siblings, 0 replies; 13+ messages in thread
From: Stephen Leake @ 2018-07-31  9:21 UTC (permalink / raw)
  To: emacs-devel

martin rudalics <rudalics@gmx.at> writes:

>> or to a user-provided
>> 'display-buffer-overriding-action'.
>
> There should be no such thing.  If someone sees an absolute need for
> it, we have a design bug.

Right; that's what 'display-buffer-alist' is for; I was unaware of that
until now.


-- 
-- Stephe



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2018-07-31  9:21 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-07-29 17:22 patch gud-gdb to respect other-frame-window? Stephen Leake
2018-07-29 17:30 ` Eli Zaretskii
2018-07-30  6:56   ` Stephen Leake
2018-07-30  7:34     ` martin rudalics
2018-07-30 16:49       ` Stephen Leake
2018-07-31  6:37         ` martin rudalics
2018-07-31  9:21           ` [SPAM UNSURE] " Stephen Leake
2018-07-30  6:23 ` martin rudalics
2018-07-30 17:17 ` Stefan Monnier
2018-07-30 20:23   ` Stephen Leake
2018-07-30 20:28     ` Stefan Monnier
2018-07-30 20:30     ` Stephen Leake
2018-07-30 21:22       ` Stephen Leake

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).