tig-2.0
A little over 8 years ago the first version of Tig was released. To celebrate the many years with this cursed Git interface, here is a fresh new installment. Version 2.0 of Tig brings several configuration improvements, some of which unfortunately also breaks backwards compatibility with respect to the configuration file. Among view related changes, the branch view has been renamed to the refs view and now also shows tags, the log view now highlights diff stats and supports --graph, and the new grep view allows to quickly jump between matching files. This release also adds mouse support, improvements to the graph rendering, and readline support in the prompt. Please read the release notes below for more information and upgrade instructions.
Thanks to everybody who contributed to this release.
Release notes
Note to packagers:
- Add
.adoc
extension to AsciiDoc files so they show correctly on GitHub.
This includesREADME
,INSTALL
, andNEWS
and files indoc/
directory. BUGS
file has been merged intoREADME.adoc
.- Default keybindings have been moved to a system-level
tigrc
file, which is
installed to ${sysconfdir} by default. The content of thetigrc
file is
included inside the binary as a fall-back. PassNO_BUILTIN_TIGRC=y
to not
include the systemtigrc
content and reduce the size of the binary. - The example
contrib/tigrc
file (made obsolete bytigrc
) has been removed. - Source files have been moved to
src
andinclude
andtig.c
was split up. - Build output is less verbose by default; use
make V=1
for old output.
Incompatibilities:
- In preparation for key combo support, key mappings for symbolic keys (e.g.
Up
andDown
) must now start with<
and end with>
, e.g.<Up>
and
<Down>
. Furthermore, escape key combos must now use<Esc>key
instead of
^[key
, and control key mappings must now use<Ctrl-key>
instead of
^key
. - Only use 'diff-options' for the diff view and introduce '%(cmdlineargs)' to
hold non-file and non-revision flags passed on the command line. Affects all
user-defined commands that expect '%(diffargs)' to hold both 'diff-options'
arguments and those passed on the command line. (GH #228) - Remove built-in keybinding for
git gc
. Add the following line to~/.tigrc
to restore it:bind generic G ?git gc
. - To support view specific colors, '.' can no longer be used interchangeably
with '-' and '_' in settings names and in particular color names. - Replace 'stage-next' action with prompt command using a predefined search
(see below) and add binding (<at>
by default) to also work in the diff view. - Most view display options must now be set via the new
*-view
options in
tigrc. Existing options are no longer recognized, but a warning is shown. - Remap default bindings to have more consistent convention: use lower-case
keys primarily for view switching and non-destructive actions, use upper-case
keys for view-specific actions including user-defined commands. To preserve
old default key bindings seecontrib/bindings-v1.x.tigrc
. (GH #257)
Improvements:
- Add mouse support: scroll view, click line to move cursor, double click line
(or click again) to "Enter" cursor line, e.g. open commit diff. Disabled by
default, since it makes text selection less intuitive. If you enable this
remember to hold down Shift (or Option on Mac) when selecting text. - Rewrite and improve the rendering of the commit graph. (GH #144, #46)
- Add completion and history support to the prompt via readline. (GH #185)
- Options can be configured and toggled individually for each view. Use the new
view settings to configure the order and display options for each view
columns. See system tigrc and tigrc(5) for examples. (GH #89, #222) - Add grep view as a front-end to git-grep(1):
tig grep -p strchr
. From
within Tig, the key for switching or grepping is bound to 'g' by default. - Rename 'branch' view to 'refs' view and show tags. (GH #134)
- Add main view pager mode that reads git-log's '--pretty=raw' data
from stdin, e.g.git reflog --pretty=raw | tig --pretty=raw
. - Add support for
--graph
and highlight diff stats in the log view. - Add default command bindings:
!
to delete branch,!
to drop stash. - Add 'stage-split-chunk' action for splitting chunks in the stage view.
Bound to '' by default. (GH #107) - Add 'back' action bound to '<' by default, which will return the blame view
to the previous revision and line after moving e.g. to the parent. (GH #124) - Auto-refresh views based on watched repository changes. Configure by setting
refresh-mode
to 'manual', 'auto', 'after-command', or 'periodic'. (GH #190) - All default settings are in well-documented system
tigrc
. - Add
:toggle
prompt command to manipulate options using keybindings. For
example:bind diff D :toggle diff-options --patience --notes
. (GH #69) - Add a new "auto" value for the 'vertical-split' option to let Tig choose the
split orientation (this is the new default behavior). Can be toggled. - Make it possible to toggle the display of files in untracked directories.
- Allow Tig to be started with no default configuration by specifying an
alternative systemtigrc
file, e.g.:TIGRC_SYSTEM=~/.tigrc.safe tig
. Set
TIGRC_SYSTEM
to the empty string to use built-in configuration instead of - Key mappings can contain UTF-8 multibyte unicode keys.
- Warn about conflicting keybindings using Ctrl, e.g.
<Ctrl-f>
and
<Ctrl-F>
. (GH #218) - Extend key bindings for prompt commands (ie.
bind <keymap> <key> :<prompt>
)
to support predefined searches, eg.:bind stage 2 :?^ <at> <at>
. - Git color mappings can be configured in tigrc.
- More informative configuration error messages.
- Make reference label formatting configurable, for example:
set reference-format = (branch) <tags> remote
. (GH #201) - Adjust author width and other view columns automatically. (GH #49)
- Support view specific colors:
color stage.diff-add yellow default
. - Copy
-S
,-G
and--grep=
pattern to search buffer so 'find-next' and
'find-prev' work as expected. - Optionally specify custom prompt for
%(prompt)
in shell commands, e.g.
bind main B ?git checkout -b "%(prompt Enter new branch name: )"
. - Add
%(remote)
and%(tag)
symbols to complement%(branch)
. - User-defined commands can now be prefixed with any of the supported flags,
e.g.?git checkout -b %(branch)
. - Open editor at line number for combined diffs e.g. diffs of unmerged files.
- Add build configuration for Cygwin (OS name: CYGWIN_NT-6.1). (GH #92)
- Document the Git commands supported by the pager mode. (GH #1)
systemtigrc
configuration. (GH #235)
Bug fixes:
- Fix stash diff display when reloading the stash view after a deleting.
- Set the commit reference when opening the blame view from the blob view.
- Correctly identify and highlight the remote branch tracked by HEAD.
- Pass --no-color after user defined arguments to ensure that colors do not
break the output parsing. (GH #191) - Close stdin when pager mode is not supported.
- Show newly created branches in the main view. (GH #196)
- File with 0 changes breaks diffstat highlighting (GH #215)
- Update %(branch) variable in the main view. (GH #223)
- Disable graph rendering when either of
--reverse
,-S
,-G
, and--grep
are passed to the main view. (GH #127) - Only refresh views that support it.
- Fix author and date annotation of renamed entries in the tree view.
- Fix use of unsafe methods in the signal handler. (GH #245)
- Fix rendering in non-UTF8 terminals.
- Fix stage-update-line by rewriting the diff chunk containing the line instead
of using--unidiff-zero
and a diff context of zero. (GH #130) - Fix status-update to work for untracked directories. (GH #236)
- Don't pass log parameters given on the command line to the diff view.
Change summary
The diffstat and log summary for changes made in this release.
.gitignore | 26 +-
.travis.yml | 18 +
BUGS | 8 -
INSTALL => INSTALL.adoc | 15 +-
Makefile | 241 +-
NEWS => NEWS.adoc | 118 +
README | 24 -
README.adoc | 40 +
autogen.sh | 8 +-
compat/ansidecl.h | 313 +
compat/compat.h | 3 +-
compat/hashtab.c | 1001 +
compat/hashtab.h | 209 +
compat/mkstemps.c | 2 +-
compat/setenv.c | 2 +-
config.make.in | 3 +-
configure.ac | 10 +-
contrib/bindings-v1.x.tigrc | 23 +
contrib/config.make | 11 +-
contrib/config.make-CYGWIN_NT-6.1 | 19 +
contrib/config.make-Darwin | 8 +
contrib/tig-completion.bash | 9 +-
contrib/tig.spec.in | 10 +-
contrib/tigrc | 76 -
doc/{manual.asciidoc => manual.adoc} | 30 +-
doc/{tig.1.asciidoc => tig.1.adoc} | 107 +-
doc/{tigmanual.7.asciidoc => tigmanual.7.adoc} | 2 +-
doc/tigrc.5.adoc | 963 +
doc/tigrc.5.asciidoc | 757 -
graph.c | 412 -
include/tig/argv.h | 73 +
contrib/header.h => include/tig/blame.h | 18 +-
contrib/header.h => include/tig/blob.h | 18 +-
include/tig/diff.h | 43 +
include/tig/display.h | 62 +
include/tig/draw.h | 45 +
git.h => include/tig/git.h | 26 +-
graph.h => include/tig/graph.h | 41 +-
contrib/header.h => include/tig/grep.h | 13 +-
contrib/header.h => include/tig/help.h | 18 +-
io.h => include/tig/io.h | 46 +-
include/tig/keys.h | 84 +
include/tig/line.h | 130 +
contrib/header.h => include/tig/log.h | 18 +-
include/tig/main.h | 56 +
include/tig/options.h | 194 +
include/tig/pager.h | 34 +
include/tig/parse.h | 67 +
include/tig/prompt.h | 47 +
refs.h => include/tig/refdb.h | 36 +-
contrib/header.h => include/tig/refs.h | 18 +-
include/tig/repo.h | 37 +
include/tig/request.h | 116 +
contrib/header.h => include/tig/stage.h | 16 +-
contrib/header.h => include/tig/stash.h | 18 +-
include/tig/status.h | 53 +
include/tig/string.h | 123 +
include/tig/tig.h | 151 +
include/tig/tree.h | 30 +
include/tig/types.h | 165 +
include/tig/util.h | 126 +
include/tig/view.h | 356 +
include/tig/watch.h | 58 +
refs.c | 250 -
src/argv.c | 487 +
src/blame.c | 518 +
src/blob.c | 133 +
src/diff.c | 440 +
src/display.c | 527 +
src/draw.c | 661 +
src/graph.c | 999 +
src/grep.c | 263 +
src/help.c | 301 +
io.c => src/io.c | 373 +-
src/keys.c | 438 +
src/line.c | 208 +
src/log.c | 156 +
src/main.c | 514 +
src/options.c | 1067 +
src/pager.c | 233 +
src/parse.c | 330 +
src/prompt.c | 892 +
src/refdb.c | 398 +
src/refs.c | 202 +
src/repo.c | 136 +
src/request.c | 69 +
src/stage.c | 562 +
src/stash.c | 57 +
src/status.c | 748 +
src/string.c | 372 +
src/tig.c | 735 +
src/tree.c | 486 +
src/types.c | 116 +
src/util.c | 325 +
src/view.c | 1488 ++
src/watch.c | 276 +
test/builtin-config.sh | 18 +
.../10_shorter_merge_than_branch.in | 22 +
.../10_shorter_merge_than_branch.out | 11 +
test/test-graph-samples/11_new_branch_in_middle.in | 18 +
.../test-graph-samples/11_new_branch_in_middle.out | 9 +
test/test-graph-samples/12_cross_over_collapse.in | 18 +
test/test-graph-samples/12_cross_over_collapse.out | 9 +
...rallel_branches_with_different_middle_branch.in | 20 +
...allel_branches_with_different_middle_branch.out | 10 +
test/test-graph-samples/14_long_collapse_line.in | 40 +
test/test-graph-samples/14_long_collapse_line.out | 20 +
test/test-graph-samples/16_changes.in | 8 +
test/test-graph-samples/16_changes.out | 4 +
test/test-graph-samples/1_merge_from_left.in | 10 +
test/test-graph-samples/1_merge_from_left.out | 5 +
test/test-graph-samples/2_duplicate_parent.in | 18 +
test/test-graph-samples/2_duplicate_parent.out | 9 +
test/test-graph-samples/3_octo_merge.in | 10 +
test/test-graph-samples/3_octo_merge.out | 5 +
test/test-graph-samples/4_missing_bar.in | 14 +
test/test-graph-samples/4_missing_bar.out | 7 +
test/test-graph-samples/5_extra_pipe.in | 12 +
test/test-graph-samples/5_extra_pipe.out | 6 +
test/test-graph-samples/6_extra_bars.in | 115 +
test/test-graph-samples/6_extra_bars.out | 57 +
test/test-graph-samples/7_multi_collapse.in | 16 +
test/test-graph-samples/7_multi_collapse.out | 8 +
test/test-graph-samples/8_multi_collapse_2.in | 18 +
test/test-graph-samples/8_multi_collapse_2.out | 9 +
test/test-graph-samples/9_parallel_siblings.in | 18 +
test/test-graph-samples/9_parallel_siblings.out | 9 +
test/test-graph-samples/many_merges.in | 65 +
test/test-graph-samples/many_merges.out | 20 +
test/test-graph-samples/more.in | 72 +
test/test-graph-samples/more.out | 36 +
test/test-graph-samples/simple.in | 22 +
test/test-graph-samples/simple.out | 6 +
test/test-graph-samples/tig-all-long.in |14986 ++++++++++++
test/test-graph-samples/tig-all-long.out | 1517 ++
test/test-graph-samples/tig-all.in | 286 +
test/test-graph-samples/tig-all.out | 35 +
test/test-graph-samples/tig.in | 28 +
test/test-graph-samples/tig.out | 8 +
test-graph.c => test/test-graph.c | 23 +-
test/unit-test-graph.sh | 19 +
tig.c | 9043 -------
tig.h | 622 -
tigrc | 386 +
{contrib => tools}/announcement.sh | 8 +-
{contrib => tools}/aspell.dict | 16 +-
tools/ax_lib_readline.m4 | 223 +
{contrib => tools}/ax_with_curses.m4 | 0
tools/doc-gen.c | 84 +
{contrib => tools}/header.h | 2 +-
tools/install.sh | 49 +
tools/make-builtin-config.sh | 40 +
{contrib => tools}/release.sh | 11 +-
{contrib => tools}/update-release-docs.sh | 2 +-
154 files changed, 38086 insertions(+), 11640 deletions(-)
1 Andreas Schlick
1 Beat Bolli
1 Benjamin Bergman
1 Ciro Santilli
1 Dmitry Malikov
1 Ed Bruck
3 Jeff King
399 Jonas Fonseca
3 Kumar Appaiah
1 LCD 47
1 Lau Ching Jun
1 Michael Barlow
1 Oliver Chang
1 Pat Tullmann
4 Sven Wegener
3 Vivien Didelot
1 hasufell