Skip to content

Commit

Permalink
Add support for hiding diff signs (leading + and -)
Browse files Browse the repository at this point in the history
The `+` and `-` signs in diff views can be removed by changing the new
option `diff-show-signs`. When set, only the color of the lines
distinguishes added, removed and context lines.

Empty added or removed lines are indicated by a space in column 0 with
the "diff highlight" colors which has the `reverse` property by default.

Closes jonas#855
  • Loading branch information
andebjor committed Mar 8, 2019
1 parent 93ea970 commit 54d0e72
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 1 deletion.
7 changes: 7 additions & 0 deletions doc/tigrc.5.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,13 @@ The following variables can be set:
Number of context lines to show for diffs.
'diff-show-signs' (bool)::
Show (or hide) the leading `+` and `-` signs in diff output. Copy-paste
of lines from the diff view may be aided by hiding these signs. Note
that disabling signs only makes sense when coloring is used to
distinguish added and removed lines. On by default.
'diff-highlight' (mixed)::
Whether to highlight diffs using Git's 'diff-highlight' program. Defaults
Expand Down
1 change: 1 addition & 0 deletions include/tig/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ typedef struct view_column *view_settings;
_(commit_order, enum commit_order, VIEW_LOG_LIKE) \
_(diff_context, int, VIEW_DIFF_LIKE) \
_(diff_noprefix, bool, VIEW_NO_FLAGS) \
_(diff_show_signs, bool, VIEW_NO_FLAGS) \
_(diff_options, const char **, VIEW_DIFF_LIKE) \
_(diff_highlight, const char *, VIEW_DIFF_LIKE) \
_(diff_view, view_settings, VIEW_NO_FLAGS) \
Expand Down
20 changes: 19 additions & 1 deletion src/draw.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,25 @@ draw_chars(struct view *view, enum line_type type, const char *string, int lengt

set_view_attr(view, type);
if (len > 0)
waddnstr(view->win, string, len);
{
if (!opt_diff_show_signs &&
view->col == 0 &&
(type == LINE_DIFF_ADD || type == LINE_DIFF_DEL)
) {
/* Mark first column by color-only for add/del line */
if (type == LINE_DIFF_ADD)
set_view_attr(view, LINE_DIFF_ADD_HIGHLIGHT);
else if (type == LINE_DIFF_DEL)
set_view_attr(view, LINE_DIFF_DEL_HIGHLIGHT);
waddnstr(view->win, " ", 1);

/* Add the actual diff line */
set_view_attr(view, type);
waddnstr(view->win, string+1, len-1);
} else {
waddnstr(view->win, string, len);
}
}

if (trimmed && use_tilde) {
set_view_attr(view, LINE_DELIMITER);
Expand Down
48 changes: 48 additions & 0 deletions test/diff/diff-hide-signs-test
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/bin/sh

. libtest.sh
. libgit.sh

tigrc <<EOF
set diff-show-signs = false
EOF

steps '
:save-display diff-hide-signs.screen
'

in_work_dir create_repo_from_tgz "$base_dir/files/scala-js-benchmarks.tgz"

test_tig show master^

assert_equals 'diff-hide-signs.screen' <<EOF
commit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff
Author: Jonas Fonseca <jonas.fonseca@gmail.com>
AuthorDate: Sat Mar 1 15:59:02 2014 -0500
Commit: Jonas Fonseca <jonas.fonseca@gmail.com>
CommitDate: Sat Mar 1 15:59:02 2014 -0500
Add type parameter for js.Dynamic
---
common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo
index 65f914a..3aa4320 100644
--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala
+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala
@@ -15,7 +15,7 @@ object Benchmark {
val benchmarks = js.Array[Benchmark]()
val benchmarkApps = js.Array[BenchmarkApp]()
val global = js.Dynamic.global.asInstanceOf[js.Dictionary]
val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]]
global("runScalaJSBenchmarks") = runBenchmarks _
global("initScalaJSBenchmarkApps") = initBenchmarkApps _
[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24 100%
EOF
1 change: 1 addition & 0 deletions tigrc
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ set show-notes = yes # When non-bool passed as `--show-notes=...` (diff)
#set diff-options = -C # User-defined options for `tig show` (git-diff)
#set diff-highlight = true # String (or bool): Path to diff-highlight script,
# defaults to `diff-highlight`.
set diff-show-signs = yes # Show diff signs (+ and -) at the start of diff lines
#set blame-options = -C -C -C # User-defined options for `tig blame` (git-blame)
#set log-options = --pretty=raw # User-defined options for `tig log` (git-log)
#set main-options = -n 1000 # User-defined options for `tig` (git-log)
Expand Down

0 comments on commit 54d0e72

Please sign in to comment.