2011-01-12 70 views
14

當調用ls時,我想根據它們的顛覆狀態使用不同顏色的文件名。例如,添加的文件將是青色,修改後的文件是紅色等等。 bash的裸機有可能嗎?這方面有沒有準備好?根據svn狀態着色文件名

回答

4

據我所知,用純bash(放在腳本旁邊)是無法實現的。

你可以很容易地使用腳本(bash,python,perl,無論你的毒藥)獲得着色文件列表。下面是用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

對於那些仍在使用svn。 有python的svn綁定,可能比運行子進程更優雅,你也可以着色其他命令。 – 2016-09-01 03:06:18

3

Here's a Gist與第三代小腳本的上色SVN輸出。它適用於svn status命令。我剛剛將alias svns="/path/to/svn-color.py status"添加到我的.bash_profile,現在我可以輸入svns並查看顏色編碼輸出。作者建議將svn默認爲他的腳本。