2011-01-12 27 views
14

Khi gọi ls, tôi muốn có tên tệp có màu khác tùy thuộc vào trạng thái lật đổ của chúng. Ví dụ: một tệp được thêm vào sẽ là màu lục lam, một tệp được sửa đổi màu đỏ và cứ tiếp tục như vậy. Có thể với sức mạnh trần của bash? Có điều gì đó sẵn sàng về vấn đề này không?Colorize tên tập tin theo trạng thái svn

Trả lời

4

Theo như tôi biết, không thể đạt được điều đó với bash thuần túy (viết kịch bản sang một bên).

Bạn có thể dễ dàng nhận được danh sách tệp được tô màu bằng các tập lệnh (bash, python, perl, bất kể chất độc của bạn). Dưới đây là một bằng chứng của khái niệm thực hiện khá thô viết bằng 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

Đối với những người vẫn đang sử dụng svn. Có các ràng buộc svn cho python, có thể thanh lịch hơn so với chạy tiến trình con, và bạn cũng có thể tô màu các lệnh khác. –

3

Here's a Gist với thế hệ thứ 3 của một kịch bản nhỏ để tô màu đầu ra SVN. Nó hoạt động hoàn hảo cho các lệnh svn status. Tôi vừa thêm alias svns="/path/to/svn-color.py status" vào số .bash_profile và bây giờ tôi có thể nhập svns và xem đầu ra được mã hóa bằng màu. Tác giả khuyên bạn nên đặt svn mặc định thành tập lệnh của mình.

Các vấn đề liên quan