Colorize filename selon le statut svn
Question
Lors de l'appel ls
, je voudrais avoir des noms de fichiers avec une couleur différente en fonction de leur état de subversion. Par exemple, un fichier sera ajouté cyan, un rouge fichier modifié et ainsi de suite. Est-il possible avec la puissance nue de bash? Y at-il quelque chose de prêt à cet égard?
La solution
Pour autant que je sache, il est impossible d'y parvenir avec bash pur (scripts côté).
Vous pouvez obtenir facilement le fichier Colorised liste en utilisant des scripts (bash, python, perl, quel que soit votre poison). Voici une preuve de concept plutôt la mise en œuvre brut écrit 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)
Autres conseils
Voici un Contenu essentiel avec la 3ème génération d'un petit script pour coloriser sortie SVN. Il fonctionne parfaitement pour les commandes de svn status
. Je viens d'ajouter alias svns="/path/to/svn-color.py status"
à mon .bash_profile
et maintenant je peux taper svns
et voir la sortie code couleur. L'auteur recommande de faire défaut svn
à son script.