Subject: bug#33870: 27.0.50; xref-goto-xref not configurable

From: Stefan Monnier <[email-masked]>
Date: Wed, 09 Jan 2019 08:14:53 -0500

>> I haven't looked in detail, but this seems to make it less trivial to
>> just add a new action alist parameter: it should default to `t` if we
>> matched in display-buffer-alist but to nil if we only rely on
>> display-buffer-base-action?
> I'm missing you here.  An ALIST argument is equally passed to all
> buffer display actions regardless of whether they are specifed by
> 'display-buffer-base-action' or by someone else.  It's their choice
> whether they want to obey or disregard it.  The same currently holds
> for 'display-buffer-mark-dedicated'.

Never mind, I was confused.

>> Also, some (all?) let-bindings of display-buffer-mark-dedicated should
> I don't see any such bindings in our current code base.

    lisp/dired.el:    (display-buffer-mark-dedicated 'soft))
    lisp/epa.el:      (let ((display-buffer-mark-dedicated 'soft))
    lisp/minibuffer.el:             (display-buffer-mark-dedicated 'soft))

> I attach a patch of my proposed changes.  After applying that I have
> no more objections against renaming 'window--display-buffer' any way
> people want.

LGTM.  See some comment/question below.

        Stefan

> @@ -958,7 +957,11 @@ window--make-major-side-window
>  	 ;; window and not make a new parent window unless needed.
>  	 (window-combination-resize 'side)
>  	 (window-combination-limit nil)
> -	 (window (split-window-no-error next-to nil on-side)))
> +	 (window (split-window-no-error next-to nil on-side))
> +         (alist (if (or display-buffer-mark-dedicated
> +                        (assq 'dedicated alist))
> +                    alist
> +                  (cons '(dedicated . side) alist))))

Hmm... the old code used (or display-buffer-mark-dedicated 'side),
so when display-buffer-mark-dedicated is non-nil but (assq 'dedicated
alist) is nil, I think we need to use (cons `(dedicated
. ,display-buffer-mark-dedicated) alist), no?
Or rather:

         (alist (if (assq 'dedicated alist)
                    alist
                  (cons `(dedicated . ,(or display-buffer-mark-dedicated 'side))
                        alist))))

WDYT?

BTW, this code reappears a second time in your patch, but I haven't
checked if the same reasoning applies there.