# vim: set ft=awk : BEGIN { bright = "\033[1m" add = "\033[32m" # yellow del = "\033[31m" # blue hunk = "\033[1;36m" # cyan quote = "\033[0;34m" # magenta? reset = "\033[0m" hit_diff = 0 } { if (hit_diff == 0) { # Strip carriage returns from line gsub(/\r/, "", $0) if ($0 ~ /^diff /) { hit_diff = 1; print bright $0 reset } else if ($0 ~ /^.*\|.*(\+|-)/) { left = substr($0, 0, index($0, "|")-1) right = substr($0, index($0, "|")) gsub(/-+/, del "&" reset, right) gsub(/\++/, add "&" reset, right) print left right } else if ($0 ~ /^>/) { print quote $0 reset } else { print $0 } } else { # Strip carriage returns from line gsub(/\r/, "", $0) if ($0 ~ /^>/) { print quote $0 reset } else if ($0 ~ /^-/) { print del $0 reset } else if ($0 ~ /^\+/) { print add $0 reset } else if ($0 ~ /^ /) { print $0 } else if ($0 ~ /^@@ (-[0-9]+,[0-9]+ \+[0-9]+,[0-9]+) @@.*/) { sub(/^@@ (-[0-9]+,[0-9]+ \+[0-9]+,[0-9]+) @@/, hunk "&" reset) print $0 } else { print bright $0 reset } } }