]> code.delx.au - gnu-emacs/blobdiff - lisp/ediff-wind.el
(x-select-enable-clipboard): Customize (per lispref).
[gnu-emacs] / lisp / ediff-wind.el
index 7fec54975b2b321b29393b3599b06e71b54a28be..46d56595511680e7b8bd29f9b7e85639fd1d69d9 100644 (file)
@@ -151,6 +151,7 @@ In this case, Ediff will use those frames to display these buffers."
    '(vertical-scroll-bars . nil)  ; Emacs only
    '(scrollbar-width . 0)         ; XEmacs only
    '(menu-bar-lines . 0)          ; Emacs only
+   '(tool-bar-lines . 0)          ; Emacs 21+ only
    ;; don't lower and auto-raise
    '(auto-lower . nil)
    '(auto-raise . t)
@@ -830,14 +831,17 @@ into icons, regardless of the window manager."
 ;; create a new splittable frame if none is found
 (defun ediff-skip-unsuitable-frames (&optional ok-unsplittable)
   (if (ediff-window-display-p)
-      (let (last-window)
-       (while (and (not (eq (selected-window) last-window))
+      ;;(let (last-window)
+      (let (seen-windows)
+       ;; (memq ... seen-windows) has quadratic behavior,
+       ;; but (eq ... last-window) runs into an emacs bug where next-window
+       ;; gets stuck in a loop if the only frame is the minibuffer.
+       ;;
+       ;;(while (and (not (eq (selected-window) last-window))
+       (while (and (not (memq (selected-window) seen-windows))
                    (or
                     (ediff-frame-has-dedicated-windows (selected-frame))
                     (ediff-frame-iconified-p (selected-frame))
-                    ;; skip small frames
-                    (< (frame-height (selected-frame))
-                       (* 3 window-min-height))
                     ;; skip small windows
                     (< (window-height (selected-window))
                        (* 3 window-min-height))
@@ -845,10 +849,12 @@ into icons, regardless of the window manager."
                         nil
                       (ediff-frame-unsplittable-p (selected-frame)))))
          ;; remember where started
-         (or last-window (setq last-window (selected-window)))
+         ;;(or last-window (setq last-window (selected-window)))
+         (setq seen-windows (cons (selected-window) seen-windows))
          ;; try new window
          (other-window 1 t))
-       (if (eq (selected-window) last-window)
+       ;;(if (eq (selected-window) last-window)
+       (if (memq (selected-window) seen-windows)
            ;; fed up, no appropriate frame
            (progn
              (select-frame (make-frame '((unsplittable)))))))))
@@ -897,7 +903,13 @@ into icons, regardless of the window manager."
       (setq ctl-frame (if (frame-live-p old-ctl-frame)
                          old-ctl-frame
                        (make-frame ediff-control-frame-parameters))
-           ediff-control-frame ctl-frame))
+           ediff-control-frame ctl-frame)
+      ;; protect against undefined face-attribute
+      (condition-case nill
+         (when (and ediff-emacs-p (face-attribute 'mode-line :box))
+           (set-face-attribute 'mode-line ctl-frame :box nil))
+       (error))
+      )
     
     (setq ctl-frame-iconified-p (ediff-frame-iconified-p ctl-frame))
     (select-frame ctl-frame)