Home

Awesome

git-gutter+.el

View, stage and revert Git changes straight from the buffer.

(This package is inspired by the GitGutter plugin for Sublime Text. It contains patches that haven't yet been added to Git-Gutter.)

git-gutter

Changelog

Jump to Changelog.

Get Started

Use the predefined use-package setup or follow these steps:

git-gutter-fringe+.el

git-gutter-fringe-minimal

(git-gutter-fringe+ with minimal skin)

git-gutter-fringe+.el uses the fringe to display diff markers, instead of the buffer margin.

These are the differences to the default margin display mode in git-gutter+:

git-gutter+.elgit-gutter-fringe+.el
Works in tty frame+-
Works with linum-mode-+
Gutter on the right side-+

Enable git-gutter-fringe+ like this:

M-x package-install git-gutter-fringe+
(require 'git-gutter-fringe+)

;; Optional: Activate minimal skin
(git-gutter-fr+-minimal)

To interactively disable/enable the fringe display mode, run M-x git-gutter+-toggle-fringe.

Commands

git-gutter+-mode

Enable/disable git-gutter+ in the current buffer.

global-git-gutter+-mode

Globally enable/disable git-gutter+ for all file buffers.

git-gutter+-next-hunk

Jump to the next hunk.

git-gutter+-previous-hunk

Jump to the previous hunk.

git-gutter+-show-hunk

Show detailed diff for the hunk at point.

The hunk info is updated when you call git-gutter+-next-hunk and git-gutter+-previous-hunk.

git-gutter+-show-hunk-inline-at-point

An alternative to git-gutter+-show-hunk. Shows the diff by expanding it at point, without opening a new buffer.

git-gutter+-revert-hunks

Revert hunk at point. If region is active, revert all hunks within the region.

git-gutter+-stage-hunks

Stage hunk at point. If region is active, stage all hunk lines within the region.

git-gutter+-commit

Commit staged changes. If nothing is staged, ask to stage the current buffer.

git-gutter+-stage-and-commit

Calls git-gutter+-stage-hunks followed by git-gutter+-commit.

git-gutter+-stage-and-commit-whole-buffer

Stages and commits the whole buffer.

git-gutter+-unstage-whole-buffer

Unstages all changes in the current buffer. Use this to undo any effects caused by git-gutter+-stage-hunks.

Committing

The commit message buffer is based on git-commit. Besides the default git-commit-mode bindings, the following bindings are provided:

git-commit-ack is re-bound to C-c C-b.

Changelog

0.4

0.3

0.2

0.1

0.02 (Changes since Git-Gutter 0.42)

Requirements

Tramp

Git-Gutter supports TRAMP for remote file support.

Use-Package Setup

(use-package git-gutter+
  :ensure t
  :init (global-git-gutter+-mode)
  :config (progn
            (define-key git-gutter+-mode-map (kbd "C-x n") 'git-gutter+-next-hunk)
            (define-key git-gutter+-mode-map (kbd "C-x p") 'git-gutter+-previous-hunk)
            (define-key git-gutter+-mode-map (kbd "C-x v =") 'git-gutter+-show-hunk)
            (define-key git-gutter+-mode-map (kbd "C-x r") 'git-gutter+-revert-hunks)
            (define-key git-gutter+-mode-map (kbd "C-x t") 'git-gutter+-stage-hunks)
            (define-key git-gutter+-mode-map (kbd "C-x c") 'git-gutter+-commit)
            (define-key git-gutter+-mode-map (kbd "C-x C") 'git-gutter+-stage-and-commit)
            (define-key git-gutter+-mode-map (kbd "C-x C-y") 'git-gutter+-stage-and-commit-whole-buffer)
            (define-key git-gutter+-mode-map (kbd "C-x U") 'git-gutter+-unstage-whole-buffer))
  :diminish (git-gutter+-mode . "gg"))

This section of the manual hasn't yet been cleaned up. (But it's factually correct.)

Customize

Look and feel

git-gutter-multichar

You can change the signs and those faces.

(setq git-gutter+-modified-sign "  ") ;; two space
(setq git-gutter+-added-sign "++")    ;; multiple character is OK
(setq git-gutter+-deleted-sign "--")

(set-face-background 'git-gutter+-modified "purple") ;; background color
(set-face-foreground 'git-gutter+-added "green")
(set-face-foreground 'git-gutter+-deleted "red")

You can change minor-mode name in mode-line to set git-gutter+-lighter. Default is " GitGutter"

;; first character should be a space
(setq git-gutter+-lighter " GG")

Using full width characters

git-gutter-fullwidth

Emacs has char-width function which returns character width. git-gutter+.el uses it for calculating character length of the signs. But char-width does not work for some full-width characters. So you should explicitly specify window width, if you use full-width character.

(setq git-gutter+-window-width 2)
(setq git-gutter+-modified-sign "☁")
(setq git-gutter+-added-sign "☀")
(setq git-gutter+-deleted-sign "☂")

Disabled modes

If you use global-git-gutter+-mode, you may want some modes to disable git-gutter+-mode. You can make it by setting git-gutter+-disabled-modes to non-nil.

;; inactivate git-gutter+-mode in asm-mode and image-mode
(setq git-gutter+-disabled-modes '(asm-mode image-mode))

Default is nil.

Show Unchanged Information

git-gutter-unchanged

git-gutter+.el can view unchanged information by setting git-gutter+-unchanged-sign. Like following.

(setq git-gutter+-unchanged-sign " ")
(set-face-background 'git-gutter+-unchanged "yellow")

Default value of git-gutter+-unchanged-sign is nil.

Show a separator column

git-gutter-separator

git-gutter+.el can display an additional separator character at the right of the changed signs. This is mostly useful when running emacs in a console.

(setq git-gutter+-separator-sign "|")
(set-face-foreground 'git-gutter+-separator "yellow")

Default value of git-gutter+-separator-sign is nil.

Hide gutter if there are no changes

Hide gutter when there are no changes if git-gutter+-hide-gutter is non-nil. (Default is nil)

(setq git-gutter+-hide-gutter t)

Extra arguments for 'git diff'

You can force extra arguments to be passed to git diff by setting git-gutter+-diff-options.

;; Ignore all spaces
(setq git-gutter+-diff-options '("-w"))

See Also

GitGutter

GitGutter is Sublime Text plugin.

diff-hl

diff-hl has more features than git-gutter+.el.

vim-gitgutter

Vim version of GitGutter