【问题标题】:Colorize filename according to svn status根据 svn 状态为文件名着色
【发布时间】:2011-06-07 18:17:12
【问题描述】:

在调用ls 时,我希望文件名具有不同的颜色,具体取决于它们的颠覆状态。例如,添加的文件将为青色,修改的文件为红色等。 bash 的强大功能是否有可能?在这方面有什么准备吗?

【问题讨论】:

    标签: svn bash colors ls


    【解决方案1】:

    据我所知,纯 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)
    

    【讨论】:

    • 对于那些仍在使用 svn 的人。有python的svn绑定,可能比运行子进程更优雅,你也可以为其他命令着色。
    【解决方案2】:

    Here's a Gist 使用第三代小脚本为 SVN 输出着色。它非常适合svn status 命令。我刚刚将alias svns="/path/to/svn-color.py status" 添加到我的.bash_profile,现在我可以输入svns 并查看颜色编码的输出。作者建议将svn 默认设置为他的脚本。

    【讨论】:

      猜你喜欢
      • 2015-03-10
      • 2012-05-18
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多