diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index 143b9bc49..a26fd531c 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -746,7 +746,18 @@ compelling reason, so..." (use-package! toc-org ; auto-table of contents :hook (org-mode . toc-org-enable) - :config (setq toc-org-hrefify-default "gh")) + :config + (setq toc-org-hrefify-default "gh") + + (defadvice! +org-inhibit-scrolling-a (orig-fn &rest args) + "Prevent the jarring scrolling that occurs when the-ToC is regenerated." + :around #'toc-org-insert-toc + (let ((p (set-marker (make-marker) (point))) + (s (window-start))) + (prog1 (apply orig-fn args) + (goto-char p) + (set-window-start nil s t) + (set-marker p nil))))) (use-package! org-bullets ; "prettier" bullets diff --git a/modules/tools/magit/config.el b/modules/tools/magit/config.el index 8205a4aa3..35decef8e 100644 --- a/modules/tools/magit/config.el +++ b/modules/tools/magit/config.el @@ -42,6 +42,20 @@ "~/.cache/") "git/credential/socket"))) + ;; Prevent scrolling when manipulating magit-status hunks. Otherwise you must + ;; reorient yourself every time you stage/unstage/discard/etc a hunk. + ;; Especially so on larger projects." + (defvar +magit--pos nil) + (add-hook! 'magit-pre-refresh-hook + (defun +magit--set-window-state-h () + (setq-local +magit--pos (list (current-buffer) (point) (window-start))))) + (add-hook! 'magit-post-refresh-hook + (defun +magit--restore-window-state-h () + (when (and +magit--pos (eq (current-buffer) (car +magit--pos))) + (goto-char (cadr +magit--pos)) + (set-window-start nil (caddr +magit--pos) t) + (kill-local-variable '+magit--pos)))) + ;; Magit uses `magit-display-buffer-traditional' to display windows, by ;; default, which is a little primitive. `+magit-display-buffer' marries ;; `magit-display-buffer-fullcolumn-most-v1' with