No description, website, or topics provided.
Emacs Lisp Makefile
Switch branches/tags
Latest commit b772699 Nov 21, 2015 @ajschumacher ajschumacher committed with Support newer versions of Magit

README.md

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:

  • Install with package.el

    Add MELPA as a package source. Run M-x package-install git-gutter+

  • Add the following to your .emacs file

      (global-git-gutter+-mode)
    

    If you want to disable git-gutter+ for some modes, set the variable git-gutter+-disabled-modes.

    As an alternative to global-git-gutter+-mode you can enable git-gutter+ only for specific modes, like this:

      (add-hook 'ruby-mode-hook 'git-gutter+-mode)
      (add-hook 'python-mode-hook 'git-gutter+-mode)
    
  • Add keybindings

      (global-set-key (kbd "C-x g") 'git-gutter+-mode) ; Turn on/off in the current buffer
      (global-set-key (kbd "C-x G") 'global-git-gutter+-mode) ; Turn on/off globally
    
      (eval-after-load 'git-gutter+
        '(progn
           ;;; Jump between hunks
           (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)
    
           ;;; Act on hunks
           (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)
           ;; Stage hunk at point.
           ;; If region is active, stage all hunk lines within the region.
           (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)))
    

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+.el git-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:

  • C-c C-a toggles the option to amend the previous commit.

  • C-c C-e toggles the option to allow an empty commit that includes no changes.

  • C-c C-u toggles the option to edit the commit author.

  • C-c C-d toggles the option to edit the commit date.

  • M-p/M-n insert previous/next history commit message.

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

Changelog

0.4

  • 2 enhancements:
    • Added git-gutter+-show-hunk-inline-at-point
    • The Readme now contains a use-package quick-start setup
  • 2 fixes:
    • Fixed git-gutter+-unstage-whole-buffer to only unstage changes from the current buffer
    • Various code cleanups

0.3

  • 3 fixes:
    • Fixed staging and committing with Tramp
    • Fixed errors with symlinked files
    • Support the latest version of `git-commit'

0.2

  • 2 enhancements:
    • New interactive functions git-gutter+-stage-and-commit-whole-buffer and git-gutter+-unstage-whole-buffer
    • Refresh gutter when a buffer is staged or unstaged in Magit
  • 4 fixes:
    • M-p is now guaranteed to insert the message of the previous commit
    • Fixed compatibility with current versions of git-commit-mode
    • git-gutter+-diff-args is now properly handled as a list of strings
    • Fixed extraneous window splits that occured when displaying staged changes before committing

0.1

  • New commit interface based on git-commit-mode. See section 'Committing' to learn more.
  • Added git-gutter+-mode-map. Consider migrating some of your global git-gutter+ bindings to the local keymap. See section 'Add keybindings' for an example.
  • Properly support narrowed buffers
  • Revert hunks within region (or hunk at point) with git-gutter+-revert-hunks Please update your key binding. (The old name 'git-gutter+-revert-hunk' is still accessible by an alias.)
  • Renamed git-gutter+-popup-hunk to git-gutter+-show-hunk Please update your key binding. (The old name is still accessible by an alias.)
  • Added customizable variable 'git-gutter+-git-executable'
  • Package git-gutter-fringe+: Added git-gutter+-toggle-fringe to enable/disable the fringe display mode.

0.02 (Changes since Git-Gutter 0.42)

  • Improved performance
  • Staging and committing hunks
  • A bug-free git-gutter-fringe.el and other fixes
  • The following interactive commands have been removed. They are superseded by git-gutter+-mode.
    • git-gutter
    • git-gutter-toggle
    • git-gutter-clear
  • Removed mode-on/off-hook variables
  • Renamed git-gutter-diff-option to git-gutter-diff-options

Requirements

  • Emacs 23 or higher
  • Git 1.7.0 or higher

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