ui/vc-gutter: defer git-gutter until file exists

If the current buffer doesn't represent a real file, defer enabling
git-gutter-mode until the file is saved.
This commit is contained in:
Henrik Lissner 2019-05-06 02:14:14 -04:00
parent e0e82ffbeb
commit 1d40602c3e
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -23,23 +23,28 @@ to the right fringe.")
:commands (git-gutter:revert-hunk git-gutter:stage-hunk) :commands (git-gutter:revert-hunk git-gutter:stage-hunk)
:init :init
(defun +version-control|git-gutter-maybe () (defun +version-control|git-gutter-maybe ()
"Enable `git-gutter-mode' in non-remote buffers." "Enable `git-gutter-mode' in the current buffer.
(when (and buffer-file-name
(or +vc-gutter-in-remote-files If the buffer doesn't represent an existing file, `git-gutter-mode's activation
(not (file-remote-p buffer-file-name))) is deferred until the file is saved."
(vc-backend buffer-file-name)) (when (or +vc-gutter-in-remote-files
(if (display-graphic-p) (not (file-remote-p (or buffer-file-name default-directory))))
(progn (if (not buffer-file-name)
(require 'git-gutter-fringe) (add-hook 'after-save-hook #'+version-control|git-gutter-maybe nil t)
(setq-local git-gutter:init-function #'git-gutter-fr:init) (when (vc-backend buffer-file-name)
(setq-local git-gutter:view-diff-function #'git-gutter-fr:view-diff-infos) (if (display-graphic-p)
(setq-local git-gutter:clear-function #'git-gutter-fr:clear) (progn
(setq-local git-gutter:window-width -1)) (require 'git-gutter-fringe)
(setq-local git-gutter:init-function 'nil) (setq-local git-gutter:init-function #'git-gutter-fr:init)
(setq-local git-gutter:view-diff-function #'git-gutter:view-diff-infos) (setq-local git-gutter:view-diff-function #'git-gutter-fr:view-diff-infos)
(setq-local git-gutter:clear-function #'git-gutter:clear-diff-infos) (setq-local git-gutter:clear-function #'git-gutter-fr:clear)
(setq-local git-gutter:window-width 1)) (setq-local git-gutter:window-width -1))
(git-gutter-mode +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)
(setq-local git-gutter:window-width 1))
(git-gutter-mode +1)
(remove-hook 'after-save-hook #'+version-control|git-gutter-maybe t)))))
(add-hook! (text-mode prog-mode conf-mode) (add-hook! (text-mode prog-mode conf-mode)
#'+version-control|git-gutter-maybe) #'+version-control|git-gutter-maybe)
;; standardize default fringe width ;; standardize default fringe width