branch: elpa/magit commit 5469cbcf40fa542adbb9e9ca5b529a06d62cc607 Author: Jonas Bernoulli <jo...@bernoul.li> Commit: Jonas Bernoulli <jo...@bernoul.li>
Call magit-status-goto-initial-section before highlighting `magit-post-create-buffer-hook' is called right after `magit-refresh-buffer' returned, i.e., after that called `magit-section-update-highlight'. Move `magit-status-goto-initial-section' from that hook to the new `magit--initial-section-hook', which `magit-refresh-buffer' calls, but only when the buffer is being created, not merely refreshed. This avoids highlighting the wrong section before highlighting the correct one. Using such a hook is a bit of a hack. It might be better to instead add an option that maps modes to initial sections, instead of a hook, but let's not commit to that just yet. --- lisp/magit-mode.el | 9 +++++++-- lisp/magit-status.el | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lisp/magit-mode.el b/lisp/magit-mode.el index 56eb7585cb..0ddfc10717 100644 --- a/lisp/magit-mode.el +++ b/lisp/magit-mode.el @@ -662,7 +662,7 @@ The buffer's major-mode should derive from `magit-section-mode'." (magit-display-buffer buffer) (with-current-buffer buffer (run-hooks 'magit-setup-buffer-hook) - (magit-refresh-buffer) + (magit-refresh-buffer created) (when created (run-hooks 'magit-post-create-buffer-hook))) buffer)) @@ -1065,7 +1065,9 @@ Run hooks `magit-pre-refresh-hook' and `magit-post-refresh-hook'." (defvar-local magit--refresh-start-time nil) -(defun magit-refresh-buffer () +(defvar magit--initial-section-hook nil) + +(defun magit-refresh-buffer (&optional created) "Refresh the current Magit buffer." (interactive) (let ((magit--refresh-start-time (current-time)) @@ -1108,6 +1110,9 @@ Run hooks `magit-pre-refresh-hook' and `magit-post-refresh-hook'." (with-current-buffer buffer (let ((magit-section-movement-hook nil)) (apply #'magit-section-goto-successor args))))) + (when created + (run-hooks 'magit--initial-section-hook) + (setq-local magit--initial-section-hook nil)) (let ((magit-section-cache-visibility nil)) (magit-section-show magit-root-section)) (run-hooks 'magit-refresh-buffer-hook) diff --git a/lisp/magit-status.el b/lisp/magit-status.el index ff8d458136..970d727416 100644 --- a/lisp/magit-status.el +++ b/lisp/magit-status.el @@ -434,7 +434,7 @@ Type \\[magit-commit] to create a commit. :group 'magit-status (magit-hack-dir-local-variables) (when magit-status-initial-section - (add-hook 'magit-post-create-buffer-hook + (add-hook 'magit--initial-section-hook #'magit-status-goto-initial-section nil t)) (setq magit--imenu-group-types '(not branch commit)))