diff --git a/modules/tools/magit/autoload.el b/modules/tools/magit/autoload.el index f18ffad11..3f682675b 100644 --- a/modules/tools/magit/autoload.el +++ b/modules/tools/magit/autoload.el @@ -130,17 +130,27 @@ modified." ;;;###autoload (defun +magit/quit (&optional kill-buffer) - "Clean up magit buffers after quitting `magit-status' and refresh version -control in buffers." + "Bury the current magit buffer. + +If KILL-BUFFER, kill this buffer instead of burying it. +If the buried/killed magit buffer was the last magit buffer open for this repo, +kill all magit buffers for this repo." (interactive "P") - (funcall magit-bury-buffer-function kill-buffer) - (unless (delq nil - (mapcar (lambda (win) - (with-selected-window win - (eq major-mode 'magit-status-mode))) - (window-list))) - (mapc #'+magit--kill-buffer (magit-mode-get-buffers)) - (+magit-mark-stale-buffers-h))) + (let ((topdir (magit-toplevel))) + (funcall magit-bury-buffer-function kill-buffer) + (or (cl-find-if (lambda (win) + (with-selected-window win + (and (derived-mode-p 'magit-mode) + (equal magit--default-directory topdir)))) + (window-list)) + (+magit/quit-all)))) + +;;;###autoload +(defun +magit/quit-all () + "Kill all magit buffers for the current repository." + (interactive) + (mapc #'+magit--kill-buffer (magit-mode-get-buffers)) + (+magit-mark-stale-buffers-h)) (defun +magit--kill-buffer (buf) "TODO" diff --git a/modules/tools/magit/config.el b/modules/tools/magit/config.el index 42acda822..6edc4de59 100644 --- a/modules/tools/magit/config.el +++ b/modules/tools/magit/config.el @@ -100,7 +100,8 @@ For example, diffs and log buffers. Accepts `left', `right', `up', and `down'.") ;; Clean up after magit by killing leftover magit buffers and reverting ;; affected buffers (or at least marking them as need-to-be-reverted). - (define-key magit-status-mode-map [remap magit-mode-bury-buffer] #'+magit/quit) + (define-key magit-mode-map "q" #'+magit/quit) + (define-key magit-mode-map "Q" #'+magit/quit-all) ;; Close transient with ESC (define-key transient-map [escape] #'transient-quit-one) @@ -216,6 +217,8 @@ ensure it is built when we actually use Forge." ;; REVIEW There must be a better way to exclude particular evil-collection ;; modules from the blacklist. (map! (:map magit-mode-map + :nv "q" #'+magit/quit + :nv "Q" #'+magit/quit-all :nv "]" #'magit-section-forward-sibling :nv "[" #'magit-section-backward-sibling :nv "gr" #'magit-refresh