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.

What is Tig?

Tig is an ncurses-based text-mode interface for git. It functions mainly
as a Git repository browser, but can also assist in staging changes for
commit at chunk level and act as a pager for output from various Git
commands.

Release notes

Note to packagers:

  • Add .adoc extension to AsciiDoc files so they show correctly on GitHub.
    This includes README, INSTALL, and NEWS and files in doc/ directory.

  • BUGS file has been merged into README.adoc.

  • Default keybindings have been moved to a system-level tigrc file, which is
    installed to ${sysconfdir} by default. The content of the tigrc file is
    included inside the binary as a fall-back. Pass NO_BUILTIN_TIGRC=y to not
    include the system tigrc content and reduce the size of the binary.

  • The example contrib/tigrc file (made obsolete by tigrc) has been removed.

  • Source files have been moved to src and include and tig.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 and Down) 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 (@ 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 see contrib/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 system tigrc 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 :?^@@.

  • 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)
    system tigrc 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

Jonas Fonseca

Jonas Fonseca wrote on 30 Apr 2014

Advertisements