From b8dc30fe5264a9a5869528aa826884d1ca143b36 Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Mon, 2 May 2022 23:18:00 +0100 Subject: [PATCH] el/dot-emacs.el: Open non-Magit buffers in new windows. Organization: Straylight/Edgeware From: Mark Wooding Emacs doesn't have a function for asking whether a named major mode is derived from a given mode, so I've had to write one. --- el/dot-emacs.el | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/el/dot-emacs.el b/el/dot-emacs.el index 9088736..12c3b21 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -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) ;;;-------------------------------------------------------------------------- -- [mdw]