diff --git a/modules/config/default/+evil-bindings.el b/modules/config/default/+evil-bindings.el index aeeb9373a..e57fabe41 100644 --- a/modules/config/default/+evil-bindings.el +++ b/modules/config/default/+evil-bindings.el @@ -395,15 +395,17 @@ :desc "Sudo this file" "U" #'doom/sudo-this-file :desc "Yank filename" "y" #'+default/yank-buffer-filename) - ;;; g --- git + ;;; g --- git/version control (:prefix-map ("g" . "git") - :desc "Git revert file" "R" #'vc-revert + :desc "Revert file" "R" #'vc-revert :desc "Copy link to remote" "y" #'+vc/browse-at-remote-kill-file-or-region :desc "Copy link to homepage" "Y" #'+vc/browse-at-remote-kill-homepage (:when (featurep! :ui hydra) :desc "SMerge" "m" #'+vc/smerge-hydra/body) (:when (featurep! :ui vc-gutter) - :desc "Git revert hunk" "r" #'git-gutter:revert-hunk + (:when (featurep! :ui hydra) + :desc "VCGutter" "." #'+vc/gutter-hydra/body) + :desc "Revert hunk" "r" #'git-gutter:revert-hunk :desc "Git stage hunk" "s" #'git-gutter:stage-hunk :desc "Git time machine" "t" #'git-timemachine-toggle :desc "Jump to next hunk" "]" #'git-gutter:next-hunk diff --git a/modules/emacs/vc/config.el b/modules/emacs/vc/config.el index 3fea39ef2..26115b56c 100644 --- a/modules/emacs/vc/config.el +++ b/modules/emacs/vc/config.el @@ -3,18 +3,31 @@ (when IS-WINDOWS (setenv "GIT_ASKPASS" "git-gui--askpass")) +(after! log-view + (set-evil-initial-state! + '(log-view-mode + vc-git-log-view-mode + vc-hg-log-view-mode + vc-bzr-log-view-mode + vc-svn-log-view-mode) + 'emacs) + (evil-define-key* '(emacs) log-view-mode-map (kbd doom-leader-key) 'doom/leader) + (map! :mode log-view-mode + "j" #'log-view-msg-next + "k" #'log-view-msg-prev)) (after! vc-annotate (set-popup-rules! - '(("^\\vc-d" :select nil) ; *vc-diff* - ("^\\vc-c" :select t))) ; *vc-change-log* + '(("^\\*vc-diff" :select nil) ; *vc-diff* + ("^\\*vc-change" :select t))) ; *vc-change-log* (set-evil-initial-state! - '(vc-annotate-mode vc-git-log-view-mode) + '(vc-annotate-mode) 'normal) ;; Clean up after itself (define-key vc-annotate-mode-map [remap quit-window] #'kill-current-buffer)) +(after! vc-dir (set-evil-initial-state! '(vc-dir-mode) 'emacs)) (after! git-timemachine ;; Sometimes I forget `git-timemachine' is enabled in a buffer, so instead of diff --git a/modules/ui/vc-gutter/autoload.el b/modules/ui/vc-gutter/autoload.el index 741080d86..28d9de652 100644 --- a/modules/ui/vc-gutter/autoload.el +++ b/modules/ui/vc-gutter/autoload.el @@ -23,5 +23,12 @@ ("m" git-gutter:mark-hunk) ("p" git-gutter:popup-hunk) ("R" git-gutter:set-start-revision) - ("q" nil :color blue) - ("Q" (git-gutter-mode -1) :color blue)) + ("q" + (when (get-buffer git-gutter:popup-buffer) + (kill-buffer (get-buffer git-gutter:popup-buffer))) + :color blue) + ("Q" + (progn (git-gutter-mode -1) + (when (get-buffer git-gutter:popup-buffer) + (kill-buffer (get-buffer git-gutter:popup-buffer)))) + :color blue)) diff --git a/modules/ui/vc-gutter/config.el b/modules/ui/vc-gutter/config.el index 075fb0005..8a8a3b096 100644 --- a/modules/ui/vc-gutter/config.el +++ b/modules/ui/vc-gutter/config.el @@ -51,6 +51,7 @@ is deferred until the file is saved. Respects `git-gutter:disabled-modes'." (git-gutter-mode +1) (remove-hook 'after-save-hook #'+vc-gutter-init-maybe-h 'local))))))) + (setq git-gutter:handled-backends '(git hg svn bzr)) ;; Disable in Org mode, as per ;; and ;; . Apparently, the