+2011-11-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.el: Make special-display like display-buffer-alist (bug#9532).
+ (display-buffer--special-action): New function, morphed
+ from display-buffer--special.
+ (display-buffer): Use it to handle special-display-buffers at higher
+ priority (just after display-buffer-alist).
+ (display-buffer-fallback-action, display-buffer--other-frame-action)
+ (pop-to-buffer-same-window): Remove display-buffer--special.
+
2011-11-07 Glenn Morris <rgm@gnu.org>
* calendar/cal-menu.el (cal-menu-set-date-title):
:group 'windows)
(defconst display-buffer-fallback-action
- '((display-buffer--maybe-same-window
+ '((display-buffer--maybe-same-window ;FIXME: why isn't this redundant?
display-buffer-reuse-window
- display-buffer--special
display-buffer--maybe-pop-up-frame-or-window
display-buffer-use-some-window
;; If all else fails, pop up a new frame.
(defvar display-buffer--other-frame-action
'((display-buffer-reuse-window
- display-buffer--special
display-buffer-pop-up-frame)
(reusable-frames . 0)
(inhibit-same-window . t))
(let* ((user-action
(display-buffer-assq-regexp (buffer-name buffer)
display-buffer-alist))
+ (special-action (display-buffer--special-action buffer))
;; Extra actions from the arguments to this function:
(extra-action
(cons nil (append (if inhibit-same-window
`((reusable-frames . ,frame))))))
;; Construct action function list and action alist.
(actions (list display-buffer-overriding-action
- user-action action extra-action
+ user-action special-action action extra-action
display-buffer-base-action
display-buffer-fallback-action))
(functions (apply 'append
(display-buffer-record-window 'reuse window buffer)
(window--display-buffer-1 window))))
-(defun display-buffer--special (buffer alist)
+(defun display-buffer--special-action (buffer)
"Try to display BUFFER using `special-display-function'.
Call `special-display-p' on BUFFER's name, and if that returns
non-nil, call `special-display-function' on BUFFER."
;; parameters to pass to `special-display-function'.
(let ((pars (special-display-p (buffer-name buffer))))
(when pars
- (funcall special-display-function
- buffer (if (listp pars) pars))))))
+ (list (list #'display-buffer-reuse-window
+ `(lambda (buffer _alist)
+ (funcall special-display-function
+ buffer ',(if (listp pars) pars)))))))))
(defun display-buffer-pop-up-frame (buffer alist)
"Display BUFFER in a new frame.
NORECORD, if non-nil means do not put this buffer at the front of
the list of recently selected ones."
(pop-to-buffer buffer
- '((display-buffer--special
- display-buffer-same-window)
+ '(display-buffer-same-window
(inhibit-same-window . nil))
norecord))
\f
;;; Scrolling commands.
-;;; Scrolling commands which does not signal errors at top/bottom
-;;; of buffer at first key-press (instead moves to top/bottom
+;;; Scrolling commands which do not signal errors at top/bottom
+;;; of buffer at first key-press (instead move to top/bottom
;;; of buffer).
(defcustom scroll-error-top-bottom nil