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.