2018-06-21 21:14:00 +02:00
|
|
|
;;; ui/vc-gutter/config.el -*- lexical-binding: t; -*-
|
|
|
|
|
|
|
|
(defvar +vc-gutter-in-margin nil
|
|
|
|
"If non-nil, use the margin for diffs instead of the fringe.")
|
|
|
|
|
|
|
|
(defvar +vc-gutter-in-remote-files nil
|
|
|
|
"If non-nil, enable the vc gutter in remote files (e.g. open through TRAMP).")
|
|
|
|
|
|
|
|
(defvar +vc-gutter-diff-unsaved-buffer nil
|
|
|
|
"If non-nil, `diff-hl-flydiff-mode' will be activated. This allows on-the-fly
|
|
|
|
diffing, even for unsaved buffers.")
|
|
|
|
|
|
|
|
(defvar +vc-gutter-default-style t
|
|
|
|
"If non-nil, enable the default look of the vc gutter. This means subtle thin
|
|
|
|
bitmaps on the left, an arrow bitmap for flycheck, and flycheck indicators moved
|
|
|
|
to the right fringe.")
|
|
|
|
|
|
|
|
|
|
|
|
;;
|
2018-09-07 19:36:16 -04:00
|
|
|
;; Packages
|
2018-06-21 21:14:00 +02:00
|
|
|
|
2018-10-03 19:01:06 -04:00
|
|
|
(def-package! git-gutter
|
2018-06-27 18:51:32 +02:00
|
|
|
:commands (git-gutter:revert-hunk git-gutter:stage-hunk)
|
2018-06-21 21:14:00 +02:00
|
|
|
:init
|
|
|
|
(defun +version-control|git-gutter-maybe ()
|
|
|
|
"Enable `git-gutter-mode' in non-remote buffers."
|
|
|
|
(when (and buffer-file-name
|
|
|
|
(or +vc-gutter-in-remote-files
|
2018-12-30 04:16:40 -08:00
|
|
|
(not (file-remote-p buffer-file-name)))
|
|
|
|
(vc-backend buffer-file-name))
|
2018-10-03 19:01:06 -04:00
|
|
|
(if (display-graphic-p)
|
|
|
|
(progn
|
|
|
|
(require 'git-gutter-fringe)
|
|
|
|
(setq-local git-gutter:init-function #'git-gutter-fr:init)
|
|
|
|
(setq-local git-gutter:view-diff-function #'git-gutter-fr:view-diff-infos)
|
|
|
|
(setq-local git-gutter:clear-function #'git-gutter-fr:clear)
|
|
|
|
(setq-local git-gutter:window-width -1))
|
|
|
|
(setq-local git-gutter:init-function 'nil)
|
|
|
|
(setq-local git-gutter:view-diff-function #'git-gutter:view-diff-infos)
|
|
|
|
(setq-local git-gutter:clear-function #'git-gutter:clear-diff-infos)
|
2018-12-05 22:10:02 -05:00
|
|
|
(setq-local git-gutter:window-width 1))
|
2018-06-21 21:14:00 +02:00
|
|
|
(git-gutter-mode +1)))
|
2019-03-13 19:20:07 -04:00
|
|
|
(add-hook! (text-mode prog-mode conf-mode)
|
2018-06-21 21:14:00 +02:00
|
|
|
#'+version-control|git-gutter-maybe)
|
|
|
|
;; standardize default fringe width
|
|
|
|
(if (fboundp 'fringe-mode) (fringe-mode '4))
|
|
|
|
:config
|
|
|
|
(set-popup-rule! "^\\*git-gutter" :select nil)
|
|
|
|
|
|
|
|
;; Update git-gutter on focus (in case I was using git externally)
|
|
|
|
(add-hook 'focus-in-hook #'git-gutter:update-all-windows)
|
|
|
|
|
|
|
|
(defun +version-control|update-git-gutter (&rest _)
|
|
|
|
"Refresh git-gutter on ESC. Return nil to prevent shadowing other
|
|
|
|
`doom-escape-hook' hooks."
|
|
|
|
(when git-gutter-mode
|
|
|
|
(ignore (git-gutter))))
|
|
|
|
(add-hook 'doom-escape-hook #'+version-control|update-git-gutter t)
|
|
|
|
|
2018-07-12 18:47:36 +02:00
|
|
|
;; update git-gutter when using magit commands
|
|
|
|
(advice-add #'magit-stage-file :after #'+version-control|update-git-gutter)
|
2018-10-03 19:01:06 -04:00
|
|
|
(advice-add #'magit-unstage-file :after #'+version-control|update-git-gutter))
|
2018-06-21 21:14:00 +02:00
|
|
|
|
2018-10-03 19:01:06 -04:00
|
|
|
|
|
|
|
;; subtle diff indicators in the fringe
|
|
|
|
(when +vc-gutter-default-style
|
|
|
|
(after! git-gutter-fringe
|
2018-06-21 21:14:00 +02:00
|
|
|
;; places the git gutter outside the margins.
|
|
|
|
(setq-default fringes-outside-margins t)
|
|
|
|
;; thin fringe bitmaps
|
|
|
|
(define-fringe-bitmap 'git-gutter-fr:added [224]
|
|
|
|
nil nil '(center repeated))
|
|
|
|
(define-fringe-bitmap 'git-gutter-fr:modified [224]
|
|
|
|
nil nil '(center repeated))
|
|
|
|
(define-fringe-bitmap 'git-gutter-fr:deleted [128 192 224 240]
|
|
|
|
nil nil 'bottom)
|
|
|
|
;; let diff have left fringe, flycheck can have right fringe
|
|
|
|
(after! flycheck
|
|
|
|
(setq flycheck-indication-mode 'right-fringe)
|
|
|
|
;; A non-descript, left-pointing arrow
|
|
|
|
(define-fringe-bitmap 'flycheck-fringe-bitmap-double-arrow
|
|
|
|
[16 48 112 240 112 48 16] nil nil 'center))))
|