diff -u <fileA> <fileB> | colorize-unified-diff
- 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/" |