2015-12-02 14:23:39 +00:00
#+TITLE : Version-Control layer
2015-06-10 16:44:30 +00:00
2016-03-31 02:59:55 +00:00
* Table of Contents :TOC_4_gh:noexport:
2017-05-22 14:16:12 +00:00
- [[#description ][Description ]]
2017-08-28 21:58:10 +00:00
- [[#features ][Features: ]]
2017-05-22 14:16:12 +00:00
- [[#install ][Install ]]
- [[#layer ][Layer ]]
- [[#configuration ][Configuration ]]
- [[#differences-between-margin-programs ][Differences between margin programs ]]
- [[#key-bindings ][Key Bindings ]]
2016-02-22 18:18:48 +00:00
- [[#vc-directory-buffer-commands ][VC Directory buffer commands ]]
- [[#commit-message-editing-buffer ][Commit message editing buffer ]]
diff-mode: define key bindings with leader key for vim editing style
This patch defines key bindings with leader key instead of evilified state to
make it easier for people those who edit in vim style to use diff-mode for both
of editing and reviewing files/buffers.
There are two use cases for diff-mode:
(1) to manually edit diff in a patch file
(2) to review diff that is generated by `vc-diff' or similar commands
The evilified state is useful for the case (2), but is confusing for the
case (1). Usually, users of vim editing style expect that they are in normal
state when a new buffer is created. However, when evilified state is used for
the case (1), some keys insert their character in a buffer, which let the users
think they are in insert state and keep hitting keys to edit the buffer, while
other keys invoke commands or change contents of buffer, which let them think
they are in normal state, so finally the user get lost what state they are in if
they don't know evilified state is used for diff-mode.
The changeset 58d521af5 "Unbreak diff-mode", originally written on Apr 2 2017,
tried to avoid the confusion by removing the evilified state configuration.
However, it is overwritten by the other and older changeset 8009e1bf5 "evilify
vc-* buffers", which is written on Feb 22 2016, for some reason.
This patch respects both of the use cases listed above, thus defines key
bindings with leader key instead of just removing the evilified state
configuration.
2018-06-19 14:41:18 +00:00
- [[#diff-mode ][Diff mode ]]
2016-02-22 18:18:48 +00:00
- [[#log-view-buffer ][Log view buffer ]]
- [[#annotation-buffer ][Annotation buffer ]]
2017-05-22 14:16:12 +00:00
- [[#version-control-transient-state ][Version Control Transient-state ]]
- [[#smerge-mode-transient-state ][Smerge Mode Transient-state ]]
2016-02-22 18:18:48 +00:00
- [[#toggles ][Toggles ]]
2015-06-10 16:44:30 +00:00
* Description
This layers adds general configuration for [[http://www.gnu.org/software/emacs/manual/html_node/emacs/Version-Control.html ][Emacs VC ]].
It should work with all VC backends such as Git, Mercurial, Bazaar, SVN, etc...
2017-08-28 21:58:10 +00:00
** Features:
- highlights uncommitted changes in the fringe or margin with [[https://github.com/dgutov/diff-hl ][diff-hl ]], [[https://github.com/syohex/emacs-git-gutter ][git-gutter ]], or [[https://github.com/nonsequitur/git-gutter-plus ][git-gutter+ ]]
- adds vcs transient-state ~SPC g.~ to allow quick navigation and modification of buffer hunks.
2015-11-15 19:01:58 +00:00
2015-06-10 16:44:30 +00:00
* Install
** Layer
2016-01-06 05:21:55 +00:00
To use this configuration layer, add it to your =~/.spacemacs= . You will need to
add =version-control= to the existing =dotspacemacs-configuration-layers= list in this
file.
2015-06-10 16:44:30 +00:00
2015-11-15 19:01:58 +00:00
* Configuration
2016-01-30 11:32:53 +00:00
You can choose the package to facilitate the diff transient-state and show margins
2015-11-15 19:01:58 +00:00
by setting =version-control-diff-tool=
#+BEGIN_SRC emacs-lisp
'(version-control :variables
version-control-diff-tool 'diff-hl)
#+END_SRC
2016-11-01 09:27:45 +00:00
You can choose the side on which the diff appears (by default it's the right side)
#+BEGIN_SRC emacs-lisp
'(version-control :variables
2016-11-05 11:03:23 +00:00
version-control-diff-side 'left)
2016-11-01 09:27:45 +00:00
#+END_SRC
2015-11-30 04:00:57 +00:00
To automatically enable diff margins in all buffers, set
=version-control-global-margin=
2015-11-15 19:01:58 +00:00
#+BEGIN_SRC emacs-lisp
'(version-control :variables
2015-12-03 12:49:09 +00:00
version-control-global-margin t)
2015-11-15 19:01:58 +00:00
#+END_SRC
2015-12-07 18:46:48 +00:00
** Differences between margin programs
2015-11-30 04:00:57 +00:00
This layer contains generalized mappings for three diff margin packages:
diff-hl, git-gutter, and git-gutter+.
2015-11-15 19:01:58 +00:00
2015-11-30 04:00:57 +00:00
There are some differences between packages that might have some people prefer
one over the other:
2015-11-15 19:01:58 +00:00
| Feature | diff-hl | git-gutter | git-gutter+ |
|-------------------------------------+---------+------------+-------------|
| Show in fringe | X | X | X |
| Extended VCS support (e.g. hg, svn) | X | X | |
| Stage hunks from buffer | | X | X |
| Dired support | X | | |
2015-06-10 16:44:30 +00:00
* Key Bindings
2016-02-22 18:18:48 +00:00
VC commands:
| Key Binding | Description |
|-------------+--------------------------------------------------------|
| ~SPC g .~ | version control transient-state |
| ~SPC g r~ | smerge mode transient-state |
| ~SPC g h o~ | browser at remote |
| ~SPC g v =~ | open a hunk under the point in the diff buffer |
| ~SPC g v D~ | compare the entire working tree with head |
| ~SPC g v e~ | show diff against current head using ediff |
| ~SPC g v g~ | visually annotate the current file |
| ~SPC g v d~ | open the VC Directory buffer |
| ~SPC g v +~ | update the working copy |
| ~SPC g v i~ | register (add) into a version control system |
| ~SPC g v u~ | revert working copy to their repository contents |
| ~SPC g v l~ | list the change log |
| ~SPC g v L~ | list the change log for the current VC controlled tree |
| ~SPC g v v~ | do the next logical VC operation (=vc-next-action=) |
| ~SPC g v I~ | ignore file (=vc-ignore=) |
| ~SPC g v r~ | resolve conflicts in file |
** VC Directory buffer commands
You can hit ~SPC pv~ from the current project to open the VC Directory buffer,
or use ~SPC g v d~ for specifying a root directory.
Then you may mark (=m= key) files you are interested in, to form a fileset.
Most commands described above are applicable to filesets too.
To some of them are given shortcuts:
| Key | Description |
|-----+-----------------------------------|
| ~=~ | compare selected files with head |
| ~c~ | open a =commit message buffer= |
| ~l~ | list changes |
| ~a~ | annotate selected files |
| ~i~ | add into a version control system |
| ~r~ | refresh directory view |
| ~E~ | ignore file under cursor |
Navigation and interaction commands in the VC Directory buffer:
| Key Bindings | Description |
|-----------------+--------------------|
| ~j~ or ~M-n~ | next file |
| ~k~ or ~M-p~ | previous file |
| ~gj~ or ~TAB~ | next directory |
| ~gk~ or ~S-TAB~ | previous directory |
| ~m~ | mark a file |
| ~u~ | unmark a file |
** Commit message editing buffer
In a commit message buffer press ~C-c C-c~ to commit the changes with the entered message.
Pressing ~C-c C-k~ will discard the commit message and close this buffer.
diff-mode: define key bindings with leader key for vim editing style
This patch defines key bindings with leader key instead of evilified state to
make it easier for people those who edit in vim style to use diff-mode for both
of editing and reviewing files/buffers.
There are two use cases for diff-mode:
(1) to manually edit diff in a patch file
(2) to review diff that is generated by `vc-diff' or similar commands
The evilified state is useful for the case (2), but is confusing for the
case (1). Usually, users of vim editing style expect that they are in normal
state when a new buffer is created. However, when evilified state is used for
the case (1), some keys insert their character in a buffer, which let the users
think they are in insert state and keep hitting keys to edit the buffer, while
other keys invoke commands or change contents of buffer, which let them think
they are in normal state, so finally the user get lost what state they are in if
they don't know evilified state is used for diff-mode.
The changeset 58d521af5 "Unbreak diff-mode", originally written on Apr 2 2017,
tried to avoid the confusion by removing the evilified state configuration.
However, it is overwritten by the other and older changeset 8009e1bf5 "evilify
vc-* buffers", which is written on Feb 22 2016, for some reason.
This patch respects both of the use cases listed above, thus defines key
bindings with leader key instead of just removing the evilified state
configuration.
2018-06-19 14:41:18 +00:00
** Diff mode
| Key Bindings | Description |
|--------------+------------------------------------------------|
| ~SPC m a~ | apply a hunk |
| ~SPC m d~ | kill the hunk at point |
| ~SPC m D~ | kill the current file's hunk |
| ~SPC m e~ | call =ediff-patch-file= on current buffer |
| ~SPC m f c~ | convert unified diffs to context diffs |
| ~SPC m f r~ | reverse the direction of the diffs |
2018-06-24 06:51:41 +00:00
| ~SPC m f u~ | convert context diffs to unified diffs |
| ~SPC m g~ | jump to the corresponding source line |
| ~SPC m j~ | next hunk |
| ~SPC m J~ | next file |
| ~SPC m k~ | previous hunk |
| ~SPC m K~ | previous file |
diff-mode: define key bindings with leader key for vim editing style
This patch defines key bindings with leader key instead of evilified state to
make it easier for people those who edit in vim style to use diff-mode for both
of editing and reviewing files/buffers.
There are two use cases for diff-mode:
(1) to manually edit diff in a patch file
(2) to review diff that is generated by `vc-diff' or similar commands
The evilified state is useful for the case (2), but is confusing for the
case (1). Usually, users of vim editing style expect that they are in normal
state when a new buffer is created. However, when evilified state is used for
the case (1), some keys insert their character in a buffer, which let the users
think they are in insert state and keep hitting keys to edit the buffer, while
other keys invoke commands or change contents of buffer, which let them think
they are in normal state, so finally the user get lost what state they are in if
they don't know evilified state is used for diff-mode.
The changeset 58d521af5 "Unbreak diff-mode", originally written on Apr 2 2017,
tried to avoid the confusion by removing the evilified state configuration.
However, it is overwritten by the other and older changeset 8009e1bf5 "evilify
vc-* buffers", which is written on Feb 22 2016, for some reason.
This patch respects both of the use cases listed above, thus defines key
bindings with leader key instead of just removing the evilified state
configuration.
2018-06-19 14:41:18 +00:00
| ~SPC m q~ | close the diff window |
2018-06-24 06:51:41 +00:00
| ~SPC m r~ | revert a hunk |
| ~SPC m s~ | split the current hunk at point into two hunks |
| ~SPC m u~ | undo |
diff-mode: define key bindings with leader key for vim editing style
This patch defines key bindings with leader key instead of evilified state to
make it easier for people those who edit in vim style to use diff-mode for both
of editing and reviewing files/buffers.
There are two use cases for diff-mode:
(1) to manually edit diff in a patch file
(2) to review diff that is generated by `vc-diff' or similar commands
The evilified state is useful for the case (2), but is confusing for the
case (1). Usually, users of vim editing style expect that they are in normal
state when a new buffer is created. However, when evilified state is used for
the case (1), some keys insert their character in a buffer, which let the users
think they are in insert state and keep hitting keys to edit the buffer, while
other keys invoke commands or change contents of buffer, which let them think
they are in normal state, so finally the user get lost what state they are in if
they don't know evilified state is used for diff-mode.
The changeset 58d521af5 "Unbreak diff-mode", originally written on Apr 2 2017,
tried to avoid the confusion by removing the evilified state configuration.
However, it is overwritten by the other and older changeset 8009e1bf5 "evilify
vc-* buffers", which is written on Feb 22 2016, for some reason.
This patch respects both of the use cases listed above, thus defines key
bindings with leader key instead of just removing the evilified state
configuration.
2018-06-19 14:41:18 +00:00
A transient buffer is also defined, start it with ~SPC m .~ or ~, .~
| Key Bindings | Description |
|--------------+---------------|
| ~j~ | next hunk |
| ~J~ | next file |
2018-06-24 06:51:41 +00:00
| ~k~ | previous hunk |
diff-mode: define key bindings with leader key for vim editing style
This patch defines key bindings with leader key instead of evilified state to
make it easier for people those who edit in vim style to use diff-mode for both
of editing and reviewing files/buffers.
There are two use cases for diff-mode:
(1) to manually edit diff in a patch file
(2) to review diff that is generated by `vc-diff' or similar commands
The evilified state is useful for the case (2), but is confusing for the
case (1). Usually, users of vim editing style expect that they are in normal
state when a new buffer is created. However, when evilified state is used for
the case (1), some keys insert their character in a buffer, which let the users
think they are in insert state and keep hitting keys to edit the buffer, while
other keys invoke commands or change contents of buffer, which let them think
they are in normal state, so finally the user get lost what state they are in if
they don't know evilified state is used for diff-mode.
The changeset 58d521af5 "Unbreak diff-mode", originally written on Apr 2 2017,
tried to avoid the confusion by removing the evilified state configuration.
However, it is overwritten by the other and older changeset 8009e1bf5 "evilify
vc-* buffers", which is written on Feb 22 2016, for some reason.
This patch respects both of the use cases listed above, thus defines key
bindings with leader key instead of just removing the evilified state
configuration.
2018-06-19 14:41:18 +00:00
| ~K~ | previous file |
2016-02-22 18:18:48 +00:00
** Log view buffer
| Key Bindings | Description |
|------------------------+----------------------------------------------------------------------------|
| ~C-j~ or ~M-n~ | next message |
| ~C-k~ or ~M-p~ | previous message |
| ~gj~ or ~J~ or ~TAB~ | next file |
| ~gk~ or ~K~ or ~S-TAB~ | previous file |
| ~f~ or ~ENTER~ | visit the version at point |
| ~d~ | display a diff between the revision at point and the next earlier revision |
| ~o~ | use for jumping to links |
| ~H~ | toggle hiding of the full message |
** Annotation buffer
| Key Bindings | Description |
|--------------+--------------------------------------------------------------------------------|
| ~J~ | visit the annotation of the revision after this one |
| ~K~ | visit the annotation of the revision previous to this one |
| ~L~ | Visit the log of the revision at line |
| ~H~ | toggle whether or not the annotation is visible |
| ~a~ | visit the annotation of the revision identified in the current line |
| ~p~ | visit the annotation of the revision before the revision at line |
| ~d~ | display the diff between the current line’ s revision and the previous revision |
| ~f~ | show in a buffer the file revision indicated by the current line |
2015-11-15 19:01:58 +00:00
2016-01-30 11:32:53 +00:00
** Version Control Transient-state
2015-11-15 19:01:58 +00:00
| Key Binding | Description |
|-------------+------------------------------|
| ~SPC g . h~ | Show diff of hunk |
| ~SPC g . n~ | Next hunk |
| ~SPC g . N~ | Previous hunk |
2015-12-07 18:46:48 +00:00
| ~SPC g . p~ | Previous hunk |
2015-11-15 19:01:58 +00:00
| ~SPC g . r~ | Revert hunk |
| ~SPC g . s~ | Stage hunk |
| ~SPC g . t~ | Toggle margin indicators |
| ~SPC g . w~ | Stage file |
| ~SPC g . u~ | Unstage file |
| ~SPC g . d~ | Repo diff popup |
| ~SPC g . D~ | Show diffs of unstaged hunks |
| ~SPC g . c~ | Commit with popup |
| ~SPC g . C~ | Commit |
| ~SPC g . P~ | Push repo with popup |
| ~SPC g . f~ | Fetch for repo with popup |
| ~SPC g . F~ | Pull repo with popup |
| ~SPC g . l~ | Show repo log |
2017-03-12 13:22:03 +00:00
** Smerge Mode Transient-state
| Key Binding | Description |
|-------------+--------------------------|
| ~SPC g r n~ | Next hunk |
| ~SPC g r N~ | Previous hunk |
| ~SPC g r p~ | Previous hunk |
| ~SPC g r j~ | Go to next line |
| ~SPC g r k~ | Go to previous line |
| ~SPC g r b~ | Smerge keep base |
| ~SPC g r m~ | Smerge keep mine |
| ~SPC g r a~ | Smerge keep all |
| ~SPC g r o~ | Smerge keep other |
| ~SPC g r c~ | Smerge keep current |
| ~SPC g r C~ | Smerge combine with next |
| ~SPC g r u~ | Undo |
| ~SPC g r r~ | Smerge refine |
| ~SPC g r q~ | Quit transient state |
2016-02-22 18:18:48 +00:00
** Toggles
2018-01-27 14:08:07 +00:00
2016-02-22 18:18:48 +00:00
| Key Binding | Description |
|-------------+------------------------------|
| ~SPC T d~ | toggle diff margins |
| ~SPC T C-d~ | toggle diff margins globally |