chiark / gitweb /
el/dot-emacs.el: Open non-Magit buffers in new windows.
[profile] / el / dot-emacs.el
index 9088736fcd183a9c504756dd9b20cbcb456c4d42..12c3b21c7ab9cb27586e81fd1fb63a9aa7762d2f 100644 (file)
@@ -75,6 +75,13 @@ (defun mdw-emacs-version-p (major &optional minor)
       (and (= emacs-major-version major)
           (>= emacs-minor-version (or minor 0)))))
 
+(defun mdw-submode-p (mode parent)
+  "Return non-nil if MODE is indirectly derived from PARENT."
+  (let ((answer nil))
+    (while (cond ((eq mode parent) (setq answer t) nil)
+                (t (setq mode (get mode 'derived-mode-parent)))))
+    answer))
+
 ;; Some error trapping.
 ;;
 ;; If individual bits of this file go tits-up, we don't particularly want
@@ -5189,12 +5196,13 @@ (defun mdw-display-magit-buffer (buffer)
 But uses `mdw-magit-new-window-modes' for its list of modes
 rather than baking the list into the function."
   (display-buffer buffer
-                 (if (and (not mdw-designated-window)
-                          (derived-mode-p 'magit-mode)
-                          (not (memq (with-current-buffer buffer major-mode)
-                                     mdw-magit-new-window-modes)))
-                     '(display-buffer-same-window . nil)
-                   nil)))
+                 (let ((mode (with-current-buffer buffer major-mode)))
+                   (if (and (not mdw-designated-window)
+                            (derived-mode-p 'magit-mode)
+                            (mdw-submode-p mode 'magit-mode)
+                            (not (memq mode mdw-magit-new-window-modes)))
+                       '(display-buffer-same-window . nil)
+                     nil))))
 (setq magit-display-buffer-function 'mdw-display-magit-buffer)
 
 ;;;--------------------------------------------------------------------------