Skip to content

Instantly share code, notes, and snippets.

@tifletcher
Last active December 16, 2015 07:38
Show Gist options
  • Save tifletcher/5399815 to your computer and use it in GitHub Desktop.
Save tifletcher/5399815 to your computer and use it in GitHub Desktop.
Colorize Unified Diff

Colorize Unified Diff

USAGE

diff -u <fileA> <fileB> | colorize-unified-diff

NOTES

  • Tested mostly on output from 'fossil diff' -- YMMV
  • color-demo.sh was useful when writing this. Not needed in any way for this to work, but preserved here for posterity.
#!/bin/sh
# ANSI Color Reference -- more info here:
# https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
# \x1b[ -- escape sequence
# m -- trailing "m" indicates prev. parameters were SGR color specs
COLOR_CLR='\x1b[0m' # 0 -- reset
COLOR_BLACK_BRIGHT='\x1b[1;30m'
COLOR_BLACK='\x1b[30m'
COLOR_RED_BRIGHT='\x1b[1;31m'
COLOR_RED='\x1b[31m'
COLOR_GREEN_BRIGHT='\x1b[1;32m'
COLOR_GREEN='\x1b[32m'
COLOR_YELLOW_BRIGHT='\x1b[1;33m'
COLOR_YELLOW='\x1b[33m'
COLOR_BLUE_BRIGHT='\x1b[1;34m'
COLOR_BLUE='\x1b[34m'
COLOR_MAGENTA_BRIGHT='\x1b[1;35m'
COLOR_MAGENTA='\x1b[35m'
COLOR_CYAN_BRIGHT='\x1b[1;36m'
COLOR_CYAN='\x1b[36m'
COLOR_WHITE_BRIGHT='\x1b[1;37m'
COLOR_WHITE='\x1b[37m'
(
echo "BLACK bright";
echo "RED bright";
echo "GREEN bright";
echo "YELLOW bright";
echo "BLUE bright";
echo "MAGENTA bright";
echo "CYAN bright";
echo "WHITE bright";
) | sed -e "s/^\(BLACK\)\( *\)\(bright\)$/$COLOR_BLACK\1$COLOR_BLACK_BRIGHT\2\3$COLOR_CLR/" \
-e "s/^\(RED\)\( *\)\(bright\)$/$COLOR_RED\1$COLOR_RED_BRIGHT\2\3$COLOR_CLR/" \
-e "s/^\(GREEN\)\( *\)\(bright\)$/$COLOR_GREEN\1$COLOR_GREEN_BRIGHT\2\3$COLOR_CLR/" \
-e "s/^\(BLUE\)\( *\)\(bright\)$/$COLOR_BLUE\1$COLOR_BLUE_BRIGHT\2\3$COLOR_CLR/" \
-e "s/^\(YELLOW\)\( *\)\(bright\)$/$COLOR_YELLOW\1$COLOR_YELLOW_BRIGHT\2\3$COLOR_CLR/" \
-e "s/^\(MAGENTA\)\( *\)\(bright\)$/$COLOR_MAGENTA\1$COLOR_MAGENTA_BRIGHT\2\3$COLOR_CLR/" \
-e "s/^\(CYAN\)\( *\)\(bright\)$/$COLOR_CYAN\1$COLOR_CYAN_BRIGHT\2\3$COLOR_CLR/" \
-e "s/^\(WHITE\)\( *\)\(bright\)$/$COLOR_WHITE\1$COLOR_WHITE_BRIGHT\2\3$COLOR_CLR/"
#!/bin/sh
# ANSI Color Reference -- more info here:
# https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
# \x1b[ -- escape sequence
# m -- trailing "m" indicates prev. parameters were SGR color specs
COLOR_CLR='\x1b[0m' # 0 -- reset
COLOR_INS='\x1b[1;32m' # 1;32 -- bright;green -- Lines Added
COLOR_DEL='\x1b[1;31m' # 1;31 -- bright;red -- Lines Removed
COLOR_HI='\x1b[1;33m' # 1;33 -- bright;yellow -- File Path / Highlight
COLOR_AT='\x1b[1;35m' # 1;35 -- bright;magenta -- Line Numbers
COLOR_FSM='\x1b[1;36m' # 1;36 -- bright;cyan -- File Status Message (ADDED, etc)
# COLOR_INS='\x1b[1;32;100m' # adds a gray background to inserted/deleted lines
# COLOR_DEL='\x1b[1;31;100m' # very much not standard ANSI, so ymmv ...
sed -e "s/^\(+++\)\(.*\)$/$COLOR_HI\1\2$COLOR_CLR/" \
-e "s/^\(---\)\(.*\)$/$COLOR_HI\1\2$COLOR_CLR/" \
-e "s/^\(=======\)\(.*\)$/$COLOR_HI\1\2$COLOR_CLR/" \
-e "s/^\(Index: \)\(.*\)$/$COLOR_HI\1\2$COLOR_CLR/" \
-e "s/^\(ADDED\)\(.*\)$/$COLOR_FSM\1$COLOR_INS\2$COLOR_CLR/" \
-e "s/^\(DELETED\|MISSING\)\(.*\)$/$COLOR_FSM\1$COLOR_DEL\2$COLOR_CLR/" \
-e "s/^\(CHANGED\)\(.*\)$/$COLOR_FSM\1$COLOR_HI\2$COLOR_CLR/" \
-e "s/^\(@@\)\(.*\)$/$COLOR_AT\1\2$COLOR_CLR/" \
-e "s/^\+\(.*\)$/$COLOR_INS+\1$COLOR_CLR/" \
-e "s/^\-\(.*\)$/$COLOR_DEL-\1$COLOR_CLR/"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment