Extend backend-agnostic vc functionality

this commit adds a default keybinding for the vc-gutter hydra (leader-g
.) if both vc-gutter and hydra are enabled. It ensures that the various
vc-*-log-view-modes open up in emacs state, and it adds hg, svn and bzr
to the list of vc backends handled by git-gutter
This commit is contained in:
Sebastian Sturm 2020-02-29 13:55:45 +01:00
parent ac87afe34b
commit 2ce58c6df3
4 changed files with 31 additions and 8 deletions

View file

@ -395,15 +395,17 @@
:desc "Sudo this file" "U" #'doom/sudo-this-file :desc "Sudo this file" "U" #'doom/sudo-this-file
:desc "Yank filename" "y" #'+default/yank-buffer-filename) :desc "Yank filename" "y" #'+default/yank-buffer-filename)
;;; <leader> g --- git ;;; <leader> g --- git/version control
(:prefix-map ("g" . "git") (: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 remote" "y" #'+vc/browse-at-remote-kill-file-or-region
:desc "Copy link to homepage" "Y" #'+vc/browse-at-remote-kill-homepage :desc "Copy link to homepage" "Y" #'+vc/browse-at-remote-kill-homepage
(:when (featurep! :ui hydra) (:when (featurep! :ui hydra)
:desc "SMerge" "m" #'+vc/smerge-hydra/body) :desc "SMerge" "m" #'+vc/smerge-hydra/body)
(:when (featurep! :ui vc-gutter) (: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 stage hunk" "s" #'git-gutter:stage-hunk
:desc "Git time machine" "t" #'git-timemachine-toggle :desc "Git time machine" "t" #'git-timemachine-toggle
:desc "Jump to next hunk" "]" #'git-gutter:next-hunk :desc "Jump to next hunk" "]" #'git-gutter:next-hunk

View file

@ -3,18 +3,31 @@
(when IS-WINDOWS (when IS-WINDOWS
(setenv "GIT_ASKPASS" "git-gui--askpass")) (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 (after! vc-annotate
(set-popup-rules! (set-popup-rules!
'(("^\\vc-d" :select nil) ; *vc-diff* '(("^\\*vc-diff" :select nil) ; *vc-diff*
("^\\vc-c" :select t))) ; *vc-change-log* ("^\\*vc-change" :select t))) ; *vc-change-log*
(set-evil-initial-state! (set-evil-initial-state!
'(vc-annotate-mode vc-git-log-view-mode) '(vc-annotate-mode)
'normal) 'normal)
;; Clean up after itself ;; Clean up after itself
(define-key vc-annotate-mode-map [remap quit-window] #'kill-current-buffer)) (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 (after! git-timemachine
;; Sometimes I forget `git-timemachine' is enabled in a buffer, so instead of ;; Sometimes I forget `git-timemachine' is enabled in a buffer, so instead of

View file

@ -23,5 +23,12 @@
("m" git-gutter:mark-hunk) ("m" git-gutter:mark-hunk)
("p" git-gutter:popup-hunk) ("p" git-gutter:popup-hunk)
("R" git-gutter:set-start-revision) ("R" git-gutter:set-start-revision)
("q" nil :color blue) ("q"
("Q" (git-gutter-mode -1) :color blue)) (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))

View file

@ -51,6 +51,7 @@ is deferred until the file is saved. Respects `git-gutter:disabled-modes'."
(git-gutter-mode +1) (git-gutter-mode +1)
(remove-hook 'after-save-hook #'+vc-gutter-init-maybe-h 'local))))))) (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 ;; Disable in Org mode, as per
;; <https://github.com/syl20bnr/spacemacs/issues/10555> and ;; <https://github.com/syl20bnr/spacemacs/issues/10555> and
;; <https://github.com/syohex/emacs-git-gutter/issues/24>. Apparently, the ;; <https://github.com/syohex/emacs-git-gutter/issues/24>. Apparently, the