4545my $normal_color = $repo -> get_color(" " , " reset" );
4646
4747my $diff_algorithm = $repo -> config(' diff.algorithm' );
48+ my $diff_filter = $repo -> config(' interactive.difffilter' );
4849
4950my $use_readkey = 0;
5051my $use_termcap = 0;
@@ -754,7 +755,14 @@ sub parse_diff {
754755 my @diff = run_cmd_pipe(" git" , @diff_cmd , " --" , $path );
755756 my @colored = ();
756757 if ($diff_use_color ) {
757- @colored = run_cmd_pipe(" git" , @diff_cmd , qw( --color --) , $path );
758+ my @display_cmd = (" git" , @diff_cmd , qw( --color --) , $path );
759+ if (defined $diff_filter ) {
760+ # quotemeta is overkill, but sufficient for shell-quoting
761+ my $diff = join (' ' , map { quotemeta } @display_cmd );
762+ @display_cmd = (" $diff | $diff_filter " );
763+ }
764+
765+ @colored = run_cmd_pipe(@display_cmd );
758766 }
759767 my (@hunk ) = { TEXT => [], DISPLAY => [], TYPE => ' header' };
760768
@@ -765,7 +773,7 @@ sub parse_diff {
765773 }
766774 push @{$hunk [-1]{TEXT }}, $diff [$i ];
767775 push @{$hunk [-1]{DISPLAY }},
768- ($diff_use_color ? $colored [$i ] : $diff [$i ]);
776+ (@colored ? $colored [$i ] : $diff [$i ]);
769777 }
770778 return @hunk ;
771779}
0 commit comments