aboutsummaryrefslogtreecommitdiffstats
path: root/textproc/cdiff/src
diff options
context:
space:
mode:
authoreivind <eivind@FreeBSD.org>2000-09-20 19:37:28 +0800
committereivind <eivind@FreeBSD.org>2000-09-20 19:37:28 +0800
commitd773fb5e763490cbfd1806609b60c6e20f1d3800 (patch)
tree0a818a22ee513068b91d745fbaf06e2170a7c03c /textproc/cdiff/src
parent5a55a0f850ba51b463a62faf601f3190122018b9 (diff)
downloadfreebsd-ports-gnome-d773fb5e763490cbfd1806609b60c6e20f1d3800.tar.gz
freebsd-ports-gnome-d773fb5e763490cbfd1806609b60c6e20f1d3800.tar.zst
freebsd-ports-gnome-d773fb5e763490cbfd1806609b60c6e20f1d3800.zip
Colorizing diff viewing tool
Diffstat (limited to 'textproc/cdiff/src')
-rw-r--r--textproc/cdiff/src/cdiff.167
-rw-r--r--textproc/cdiff/src/cdiff.sh11
2 files changed, 78 insertions, 0 deletions
diff --git a/textproc/cdiff/src/cdiff.1 b/textproc/cdiff/src/cdiff.1
new file mode 100644
index 000000000000..8f4309741f5c
--- /dev/null
+++ b/textproc/cdiff/src/cdiff.1
@@ -0,0 +1,67 @@
+.\"-
+.\" Copyright (c) 2000 Eivind Eklund
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer
+.\" in this position and unchanged.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. The name of the author may not be used to endorse or promote products
+.\" derived from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd September 20, 2000
+.Dt CDIFF 1
+.Sh NAME
+.Nm cdiff
+.Nd show diffs with colors
+.Sh SYNOPSIS
+.Nm cdiff
+.Op Ar diff ...
+.Sh DESCRIPTION
+.Nm
+reads a unidiff or context diff from stdin or from a set of files, adds color
+codes, expands tabs to 8 spaces, and passes the results to
+.Xr less 1 .
+If used on a color terminal, it makes diffs much easier to read.
+.Sh AUTHORS
+.Nm
+was written by
+.An Eivind Eklund Aq eivind@FreeBSD.org .
+based on a sed line somebody passed around. The code is (much) smaller than
+this man page.
+.Sh SEE ALSO
+.Xr diff 1 ,
+.Xr less 1 .
+.Sh BUGS
+.Nm
+assumes standard ANSI color escape sequences (as used by xterm and most other
+commonly used terminals), rather than using
+.Xr curses 3 .
+
+.Nm
+should really be a large and complex C program based on
+.Xr less 1
+and a diff library. This would allow a more informative display, including
+collapsing pure deletions/insertions inside a single line to one line with
+colors for deleted/added material, avoiding the line-wrap problems in less
+due to less not knowing the effects or lengths of the color escape codes,
+and correct handling of shifted tabs (instead of just expanding them to
+spaces.)
diff --git a/textproc/cdiff/src/cdiff.sh b/textproc/cdiff/src/cdiff.sh
new file mode 100644
index 000000000000..690f28866cd0
--- /dev/null
+++ b/textproc/cdiff/src/cdiff.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+exec perl -pe '
+while (s/\t/" " x (8 - ((length($`)-1) % 8))/e) {}
+s/^(\+.*)$/\033[31m$1\033[m/o;
+s/^(-.*)$/\033[34m$1\033[m/o
+ if !s/^(--- \d+,\d+ ----.*)$/\033[1m$1\033[m/o;
+s/^(\*\*\* \d+,\d+ *\*\*\*.*)$/\033[1m$1\033[m/o;
+s/^(\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*)$/\033[1m$1\033[m/o;
+s/^(!.*)$/\033[35m$1\033[m/o;
+s/^(@@.*$)/\033[1m$1\033[m/o;
+' $@ | less -r