Einfärben Dateinamen nach Svn Status
Frage
Wenn ls
Aufruf, würde Ich mag mit einer anderen Farbe Dateinamen haben, je nach ihrem Subversion-Status. Zum Beispiel wird eine zusätzliche Datei Cyan, eine geänderte Datei rot und so weiter. Ist es möglich, mit der bloßen Kraft der bash? Gibt es etwas, bereit, auf dieser Hinsicht?
Lösung
Soweit ich weiß, ist es nicht möglich ist, dass mit reinem bash zu erreichen (scripting beiseite).
Sie können ganz einfach colorised Datei erhalten die Auflistung mithilfe von Skripts (bash, Python, Perl, was auch immer Ihr Gift). Hier ist eine eher grobe Proof-of-Concept-Implementierung in Python geschrieben: 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)
Andere Tipps
hier ein Gist mit der 3. Generation eines kleinen Skript SVN Ausgabe kolorieren. Es funktioniert perfekt für svn status
Befehle. Habe ich nur noch alias svns="/path/to/svn-color.py status"
meinen .bash_profile
und jetzt kann ich svns
geben und die farbcodierten Ausgabe. Der Autor empfiehlt, die svn
Standard seinen Skript.