(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
;; the whole lot to stop right there and then, because it's bloody annoying.
-(defmacro trap (&rest forms)
- "Execute FORMS without allowing errors to propagate outside."
- (declare (indent 0)
- (debug t))
- `(condition-case err
- ,(if (cdr forms) (cons 'progn forms) (car forms))
- (error (message "Error (trapped): %s in %s"
- (error-message-string err)
- ',forms))))
+(eval-and-compile
+ (defmacro trap (&rest forms)
+ "Execute FORMS without allowing errors to propagate outside."
+ (declare (indent 0)
+ (debug t))
+ `(condition-case err
+ ,(if (cdr forms) (cons 'progn forms) (car forms))
+ (error (message "Error (trapped): %s in %s"
+ (error-message-string err)
+ ',forms)))))
;; Configuration reading.
(defvar mdw-designated-window nil
"The window chosen by `mdw-designate-window', or nil.")
+(defun mdw-display-buffer-in-designated-window (buffer alist)
+ "Display function to use the designated window."
+ (prog1 mdw-designated-window
+ (when mdw-designated-window
+ (with-selected-window mdw-designated-window
+ (switch-to-buffer buffer nil t)))
+ (setq mdw-designated-window nil)))
+
(defun mdw-designate-window (cancel)
"Use the selected window for the next pop-up buffer.
With a prefix argument, clear the designated window."
(setq mdw-designated-window (selected-window))
(message "Window designated."))))
-(defun mdw-display-buffer-in-designated-window (buffer alist)
- "Display function to use the designated window."
- (prog1 mdw-designated-window
- (when mdw-designated-window
- (select-window mdw-designated-window)
- (switch-to-buffer buffer nil t))
- (setq mdw-designated-window nil)))
-
(setq display-buffer-base-action
(let* ((action display-buffer-base-action)
(funcs (car action))
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)
+(defun mdw-display-magit-file-buffer (buffer)
+ "Show a file buffer from a diff."
+ (select-window (display-buffer buffer)))
+(setq magit-display-file-buffer-function 'mdw-display-magit-file-buffer)
+
;;;--------------------------------------------------------------------------
;;; GUD, and especially GDB.