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.)
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+ 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
- Added
- 2 fixes:
- Fixed
git-gutter+-unstage-whole-buffer
to only unstage changes from the current buffer - Various code cleanups
- Fixed
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
andgit-gutter+-unstage-whole-buffer
- Refresh gutter when a buffer is staged or unstaged in Magit
- New interactive functions
- 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
togit-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
togit-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
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
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+.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+.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