Colorear nombrearchivo según el estado SVN
Pregunta
Cuando se invoca ls
, me gustaría tener nombres de archivo con un color diferente dependiendo de su estado de subversión. Por ejemplo, un archivo añadido será cian, un archivo modificado rojo y así sucesivamente. ¿Es posible con el poder desnudo de fiesta? ¿Hay algo listo en este sentido?
Solución
Por lo que yo sé, no es posible lograr que la fiesta pura (scripting de lado).
Se puede llegar a ser muy fácil de archivos colorised lista mediante secuencias de comandos (Bash, Python, Perl, sea cual sea su veneno). He aquí una aplicación bastante cruda prueba de concepto escrito en Python: https://gist.github.com/776093
#!/usr/bin/env python
import re
from subprocess import Popen, PIPE
colormap = {
"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 line
def 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] = status
if __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)
Otros consejos
He aquí una Gist con la tercera generación de un pequeño script para colorear de salida de subversion. Funciona perfectamente para los comandos svn status
. Acabo de añadir a mi alias svns="/path/to/svn-color.py status"
.bash_profile
y ahora puedo escribir svns
y ver la salida de un código de colores. El autor recomienda hacer por defecto svn
a su guión.