-
-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathgit-diff-syntaxhl
executable file
·58 lines (53 loc) · 1.7 KB
/
git-diff-syntaxhl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/perl
# abstract: prettier git diff
use strict;
use Syntax::Highlight::Engine::Kate;
use Term::ExtendedColor qw(:attributes);
local $ENV{GIT_PAGER} = '';
open(my $popen, '-|', qq{git diff @ARGV}) or die($!);
chomp(my @input = <$popen>);
if(scalar(@input) == 0) {
print "No changes made.\n" and exit;
}
my $h = Syntax::Highlight::Engine::Kate->new(
language => 'Diff',
substitutions => {
#'+' => fg('green20', bold('+')),
#'-' => fg('red1', bold('+')),
#'@' => fg('blue4', '@'),
},
format_table => {
Alert => [ fg(148), clear() ],
BaseN => [ fg(196), clear() ],
BString => [ fg(100), clear() ],
Char => [ fg(111), clear() ],
Comment => [ fg(137). italic(), clear() ],
DataType => [ fg(148), clear() ],
DecVal => [ fg(240), clear() ],
Error => [ fg(160), clear() ],
Float => [ fg(135). bold(), clear() ],
Function => [ fg(202), clear() ],
IString => [ fg(179), clear() ],
Keyword => [ fg(244). bold(), clear() ],
Normal => [ "", "" ],
Operator => [ fg(148), clear() ],
Others => [ fg(225), clear() ],
RegionMarker => [ fg(246), clear() ],
Reserved => [ fg(178), clear() ],
String => [ fg(143), clear() ],
Variable => [ fg(148), clear() ],
Warning => [ fg(160), clear() ],
},
);
for(@input) {
s{^([+])(.+)}{fg('green26', [ bold($1), $2 ])}e;
s{^([-])(.+)}{fg('red3', [ bold($1), $2 ])}e;
s{
^(@@)\s+([-,0-9]+)\s+([+,0-9]+)\s+(@@)
}
{
"\n" . fg('dodgerblue1', $1) . fg('deeppink4', bold(" $2 "))
. fg('yellow18', bold($3))
}ex;
print $h->highlightText( $_ ), "\n";
}