Colorize filename according to svn status Colorize filename according to svn status bash bash

Colorize filename according to svn status


As far as I know, it is not possible to achieve that with pure bash (scripting aside).

You can quite easily get colorised file listing using scripts (bash, python, perl, whatever your poison). Here's a rather crude proof-of-concept implementation written in python : https://gist.github.com/776093

#!/usr/bin/env pythonimport refrom subprocess import Popen, PIPEcolormap = {    "M" : "31", # red    "?" : "37;41", # grey    "A" : "32", # green    "X" : "33", # yellow    "C" : "30;41", # black on red    "-" : "31", # red    "D" : "31;1", # bold red    "+" : "32", # green}re_svnout = re.compile(r'(.)\s+(.+)$')file_status = {}def colorise(line, key):    if key in colormap.keys():        return "\001\033[%sm%s\033[m\002" % (colormap[key], line)    else:        return linedef get_svn_status():    cmd = "svn status"    output = Popen(cmd, shell=True, stdout=PIPE)    for line in output.stdout:        match = re_svnout.match(line)        if match:            status, f = match.group(1), match.group(2)            # if sub directory has changes, mark it as modified            if "/" in f:                f = f.split("/")[0]                status = "M"            file_status[f] = statusif __name__ == "__main__":    get_svn_status()    for L in Popen("ls", shell=True, stdout=PIPE).stdout:        line = L.strip()        status = file_status.get(line, False)        print colorise(line, status)


Here's a Gist with the 3rd generation of a small script to colorize SVN output. It works perfectly for svn status commands. I just added alias svns="/path/to/svn-color.py status" to my .bash_profile and now I can type svns and see the color-coded output. The author recommends making svn default to his script.