2011-01-12 10 views
14

Al invocar ls, me gustaría tener nombres de archivo con un color diferente dependiendo de su estado de subversión. Por ejemplo, un archivo agregado será cian, un archivo modificado rojo y así sucesivamente. ¿Es posible con el simple poder de bash? ¿Hay algo listo a este respecto?Colorize nombre de archivo según estado svn

Respuesta

4

Por lo que yo sé, no es posible lograr eso con pure bash (scripts a un lado).

Puede obtener fácilmente listados de archivos coloreados usando scripts (bash, python, perl, cualquiera que 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) 
+0

Para aquellos que todavía usan svn. Hay enlaces svn para python, podría ser más elegante que ejecutar subprocesos, y también podría colorear otros comandos. –

3

Here's a 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 agregar alias svns="/path/to/svn-color.py status" a mi .bash_profile y ahora puedo escribir svns y ver la salida codificada por colores. El autor recomienda hacer svn por defecto a su secuencia de comandos.

Cuestiones relacionadas