2011-01-12 9 views
14

Wenn ich ls aufrufen, würde ich gerne Dateinamen mit einer anderen Farbe je nach Subversion Status haben. Zum Beispiel wird eine hinzugefügte Datei Cyan, eine modifizierte Datei rot und so weiter. Ist es möglich mit der bloßen Macht der Bash? Ist diesbezüglich etwas bereit?Colorize Dateiname nach SVN-Status

Antwort

4

Soweit ich weiß, ist das mit reinem Bash nicht möglich (Scripting beiseite).

Sie können sehr leicht eingefärbte Datei Auflistung mit Skripten (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) 
+0

Für diejenigen, die immer noch svn verwenden. Es gibt Svn-Bindungen für Python, könnte eleganter sein als das Ausführen von Subprozessen, und Sie könnten auch andere Befehle färben. –

3

Here's a Gist mit der 3. Generation eines kleinen Skript SVN Ausgabe kolorieren. Es funktioniert perfekt für svn status Befehle. Ich habe gerade alias svns="/path/to/svn-color.py status" zu meinem .bash_profile hinzugefügt und kann jetzt svns eingeben und den farbcodierten Ausgang sehen. Der Autor empfiehlt, svn standardmäßig zu seinem Skript zu machen.