From dc3b5c3710ac906afec00347061d42c4b744c512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ellis=20Keny=C5=91?= Date: Wed, 7 Sep 2022 22:23:34 +0100 Subject: [PATCH] fix(format): handle git-gutter nicely --- modules/editor/format/config.el | 21 ++++++++++----------- modules/ui/vc-gutter/config.el | 8 ++++++++ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/modules/editor/format/config.el b/modules/editor/format/config.el index d08e51373..94aa46dba 100644 --- a/modules/editor/format/config.el +++ b/modules/editor/format/config.el @@ -33,17 +33,16 @@ select buffers.") (funcall orig-fn))) (add-hook! 'apheleia-post-format-hook - ;; HACK `web-mode' doesn't update syntax highlighting after arbitrary buffer - ;; modifications, so we must trigger refontification manually. - (defun +format--fix-web-mode-fontification-h () - (when (eq major-mode 'web-mode) - (setq web-mode-fontification-off nil) - (when (and web-mode-scan-beg web-mode-scan-end global-font-lock-mode) - (save-excursion - (font-lock-fontify-region web-mode-scan-beg web-mode-scan-end))))) - (defun +format--refresh-git-gutter-h () - (when (bound-and-true-p git-gutter-mode) - (git-gutter)))) + ;; HACK `web-mode' doesn't update syntax highlighting after arbitrary buffer + ;; modifications, so we must trigger refontification manually. + (defun +format--fix-web-mode-fontification-h () + (when (eq major-mode 'web-mode) + (setq web-mode-fontification-off nil) + (when (and web-mode-scan-beg web-mode-scan-end global-font-lock-mode) + (save-excursion + (font-lock-fontify-region web-mode-scan-beg web-mode-scan-end))))) + (defun +format--refresh-git-gutter-h () + (+vc-gutter-init-maybe-h))) ;; diff --git a/modules/ui/vc-gutter/config.el b/modules/ui/vc-gutter/config.el index 0f3b2bea1..cd78a4f59 100644 --- a/modules/ui/vc-gutter/config.el +++ b/modules/ui/vc-gutter/config.el @@ -116,6 +116,11 @@ is deferred until the file is saved. Respects `git-gutter:disabled-modes'." ;; UX: update git-gutter on focus (in case I was using git externally) (add-hook 'focus-in-hook #'git-gutter:update-all-windows) + ;; Stop git-gutter doing things when we don't want + (remove-hook 'post-command-hook #'git-gutter:post-command-hook) + (advice-remove #'quit-window #'git-gutter:quit-window) + (advice-remove #'switch-to-buffer #'git-gutter:switch-to-buffer) + (add-hook! '(doom-escape-hook doom-switch-window-hook) :append (defun +vc-gutter-update-h (&rest _) "Refresh git-gutter on ESC. Return nil to prevent shadowing other @@ -130,6 +135,9 @@ is deferred until the file is saved. Respects `git-gutter:disabled-modes'." (advice-add #'magit-stage-file :after #'+vc-gutter-update-h) (advice-add #'magit-unstage-file :after #'+vc-gutter-update-h) + ;; UX: update git-gutter after reverting a buffer + (add-hook 'after-revert-hook #'+vc-gutter-update-h) + ;; FIX: stop git-gutter:{next,previous}-hunk from jumping to random hunks. (defadvice! +vc-gutter--fix-linearity-of-hunks-a (diffinfos is-reverse) :override #'git-gutter:search-near-diff-index