# HG changeset patch # User Martin Rudalics # Date 1232006218 0 # Node ID 7eba5f48f79fe0bd70ddf88892b8cd9f0895178b # Parent 0de30bea2375f6abc576d5d0121a366ce83799c9 (special-display-p): Revert 2009-01-14 change. diff -r 0de30bea2375 -r 7eba5f48f79f lisp/ChangeLog --- a/lisp/ChangeLog Thu Jan 15 07:13:39 2009 +0000 +++ b/lisp/ChangeLog Thu Jan 15 07:56:58 2009 +0000 @@ -1,3 +1,7 @@ +2009-01-15 Martin Rudalics + + * window.el (special-display-p): Revert 2009-01-14 change. + 2009-01-15 Glenn Morris * emacs-lisp/authors.el (authors-aliases, authors-fixed-case): diff -r 0de30bea2375 -r 7eba5f48f79f lisp/window.el --- a/lisp/window.el Thu Jan 15 07:13:39 2009 +0000 +++ b/lisp/window.el Thu Jan 15 07:56:58 2009 +0000 @@ -685,20 +685,22 @@ `special-display-regexps' contain a list entry whose car equals or matches BUFFER-NAME, the return value is the cdr of that entry." - (cond - ((not (stringp buffer-name))) - ((member buffer-name special-display-buffer-names) t) - ((let ((temp (assoc buffer-name special-display-buffer-names))) - (cdr temp))) - ((catch 'found - (dolist (regexp special-display-regexps) - (cond - ((stringp regexp) - (when (string-match-p regexp buffer-name) - (throw 'found t))) - ((and (consp regexp) (stringp (car regexp)) - (string-match-p (car regexp) buffer-name)) - (throw 'found (cdr regexp))))))))) + (let (tmp) + (cond + ((not (stringp buffer-name))) + ((member buffer-name special-display-buffer-names) + t) + ((setq tmp (assoc buffer-name special-display-buffer-names)) + (cdr tmp)) + ((catch 'found + (dolist (regexp special-display-regexps) + (cond + ((stringp regexp) + (when (string-match-p regexp buffer-name) + (throw 'found t))) + ((and (consp regexp) (stringp (car regexp)) + (string-match-p (car regexp) buffer-name)) + (throw 'found (cdr regexp)))))))))) (defcustom special-display-function 'special-display-popup-frame "Function to call for displaying special buffers. @@ -955,6 +957,59 @@ (enlarge-window (/ (- (window-height window) (window-height)) 2)) (error nil))))) +(defun display-buffer-specially (buffer locus) + (cond + ((window-minibuffer-p (selected-window)) + nil) + ((eq locus 'this) + (condition-case nil + (switch-to-buffer buffer) + (error nil))) + ((memq locus '(below below-split right right-split)) + (let ((edges (window-edges))) + (cond + ((and (eq locus 'below) + (let* ((other-window (next-window)) + (other-edges (window-edges other-window))) + (and (= (nth 0 edges) (nth 0 other-edges)) + (< (nth 3 edges) (nth 3 other-edges)) + other-window)))) + ((and (eq locus 'right) + (let* ((other-window (next-window)) + (other-edges (window-edges other-window))) + (and (= (nth 1 edges) (nth 1 other-edges)) + (< (nth 2 edges) (nth 2 other-edges)) + other-window)))) + ((and (memq locus '(below below-split)) + (let ((split-height-threshold 0)) + (and (window--splittable-p (selected-window)) + (split-window))))) + ((and (memq locus '(right right-split)) + (let ((split-width-threshold 0)) + (window--splittable-p (selected-window) t) + (split-window nil nil t))))))) + ((memq locus '(bottom bottom-split)) + (let ((edges (window-edges)) + (other-edges (window-edges (next-window))) + (window (selected-window)) + window-to-display window-to-split) + ;; Wrong -- our window must be better than the last we found. + (while (or (> (nth 2 other-edges) (nth 2 edges)) + (> (nth 3 other-edges) (nth 3 edges))) + (setq window (next-window window)) + (when (> (nth 3 other-edges) (nth 3 edges)) + (setq window-to-display window) + (setq window-to-split + (and (eq locus 'bottom-split) + (let ((split-height-threshold 0)) + (and (window--splittable-p window) + window))))) + (setq other-edges (window-edges (next-window window)))) + (if (eq locus 'bottom) + window-to-display + (let ((split-height-threshold 0)) + (split-window window-to-split))))))) + (defun window--display-buffer-1 (window) "Raise the frame containing WINDOW. Do not raise the selected frame. Return WINDOW." @@ -1066,6 +1121,9 @@ (when pars (funcall special-display-function buffer (if (listp pars) pars)))))) + ((not (memq not-this-window '(nil t))) + (window--display-buffer-2 + buffer (display-buffer-specially buffer not-this-window))) ((or use-pop-up-frames (not frame-to-use)) ;; We want or need a new frame. (window--display-buffer-2