diff --git a/modules/tools/magit/autoload.el b/modules/tools/magit/autoload.el index 9645426e8..4bc336c7c 100644 --- a/modules/tools/magit/autoload.el +++ b/modules/tools/magit/autoload.el @@ -1,5 +1,39 @@ ;;; tools/magit/autoload.el -*- lexical-binding: t; -*- +;;;###autoload +(defun +magit-display-buffer-fullscreen (buffer) + "Like `magit-display-buffer-fullframe-status-v1' with two differences: + +1. Magit sub-buffers that aren't spawned from a status screen are opened as + popups. +2. The status screen isn't buried when viewing diffs or logs from the status + screen." + (display-buffer + buffer (cond ((derived-mode-p 'magit-mode) + (when (eq major-mode 'magit-status-mode) + (display-buffer-in-side-window + (current-buffer) '((side . left) + (window-width . 0.35) + (window-parameters (quit))))) + '(display-buffer-same-window)) + ((bound-and-true-p git-commit-mode) + '(display-buffer-below-selected)) + ((buffer-local-value 'git-commit-mode buffer) + '(magit--display-buffer-fullframe)) + ((memq (buffer-local-value 'major-mode buffer) + '(magit-process-mode + magit-revision-mode + magit-log-mode + magit-diff-mode + magit-stash-mode)) + '(display-buffer-in-side-window)) + ('(magit--display-buffer-fullframe))))) + + +;; +;; Commands +;; + ;;;###autoload (defun +magit/quit (&optional _kill-buffer) "Clean up magit buffers after quitting `magit-status'." diff --git a/modules/tools/magit/config.el b/modules/tools/magit/config.el index ecaaa75c8..720e957e0 100644 --- a/modules/tools/magit/config.el +++ b/modules/tools/magit/config.el @@ -23,25 +23,11 @@ load everything.") #'magit-builtin-completing-read) magit-revision-show-gravatars '("^Author: " . "^Commit: ") magit-diff-refine-hunk t ;; Show word-granularity on the currently selected hunk - magit-display-buffer-function - #'+magit-display-buffer-fullscreen) - - (defun +magit-display-buffer-fullscreen (buffer) - (cond ((eq (with-current-buffer buffer major-mode) - 'magit-status-mode) - (display-buffer buffer '(magit--display-buffer-fullframe))) - ((if-let* ((status (magit-mode-get-buffer 'magit-status-mode t nil nil))) - (when-let* ((window (get-buffer-window status))) - (unless (window-parameter window 'side) - (delete-other-windows window) - (display-buffer-in-side-window status '((side . left))))) - (magit-display-buffer-traditional buffer))))) + magit-display-buffer-function #'+magit-display-buffer-fullscreen) (set! :popup "^\\(?:\\*magit\\|magit:\\)" :ignore) ;; Consider magit buffers real (so they can switched to) - (defun +magit-buffer-p (buf) - (with-current-buffer buf (derived-mode-p 'magit-mode))) - (add-to-list 'doom-real-buffer-functions #'+magit-buffer-p nil #'eq) + (add-hook 'magit-mode-hook #'doom|mark-buffer-as-real) ;; no mode-line in magit popups (add-hook! '(magit-mode-hook magit-popup-mode-hook) #'hide-mode-line-mode)