changeset 101199:7eba5f48f79f

(special-display-p): Revert 2009-01-14 change.
author Martin Rudalics <rudalics@gmx.at>
date Thu, 15 Jan 2009 07:56:58 +0000
parents 0de30bea2375
children bbf505632d29
files lisp/ChangeLog lisp/window.el
diffstat 2 files changed, 76 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- 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  <rudalics@gmx.at>
+
+	* window.el (special-display-p): Revert 2009-01-14 change.
+
 2009-01-15  Glenn Morris  <rgm@gnu.org>
 
 	* emacs-lisp/authors.el (authors-aliases, authors-fixed-case):
--- 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