Quando si richiama ls
, mi piacerebbe avere nomi di file con un colore diverso a seconda del loro stato di sovversione. Ad esempio, un file aggiunto sarà cyan, un file modificato rosso e così via. E 'possibile con il potere nudo di bash? C'è qualcosa pronto a riguardo?Colorize nome file in base allo stato svn
14
A
risposta
4
Per quanto ne so, non è possibile ottenere ciò con puro bash (script a parte).
È possibile ottenere facilmente elenchi di file colorati utilizzando script (bash, python, perl, qualunque sia il veleno). Ecco un'implementazione piuttosto grezzo proof-of-concept scritto in 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)
3
Here's a Gist con il 3 ° generazione di un piccolo script per colorare uscita SVN. Funziona perfettamente per i comandi svn status
. Ho appena aggiunto alias svns="/path/to/svn-color.py status"
al mio .bash_profile
e ora posso digitare svns
e vedere l'output con codice colore. L'autore raccomanda di impostare il valore predefinito svn
nel suo script.
Per quelli che usano ancora svn. Ci sono collegamenti svn per Python, potrebbero essere più eleganti rispetto all'esecuzione del sottoprocesso e potresti anche colorare altri comandi. –