snipplrCallback({"id":28748,"title":"colorcoded-svn-status-v3","source":"
  1. #!\/usr\/bin\/env python<\/span><\/div><\/li>
  2.  <\/div><\/li>
  3. """<\/span><\/div><\/li>
  4. Author: Saophalkun Ponlu (http:\/\/phalkunz.com)<\/span><\/div><\/li>
  5. Contact: phalkunz@gmail.com<\/span><\/div><\/li>
  6. Date: May 23, 2009<\/span><\/div><\/li>
  7. Modified: June 15, 2009<\/span><\/div><\/li>
  8.  <\/div><\/li>
  9. Additional modifications:<\/span><\/div><\/li>
  10. Author: Phil Christensen (http:\/\/bubblehouse.org)<\/span><\/div><\/li>
  11. Contact: phil@bubblehouse.org<\/span><\/div><\/li>
  12. Date: February 22, 2010<\/span><\/div><\/li>
  13. """<\/span><\/div><\/li>
  14.  <\/div><\/li>
  15. import<\/span> os<\/span>,<\/span> sys<\/span>,<\/span> re<\/span>,<\/span> subprocess<\/span><\/div><\/li>
  16.  <\/div><\/li>
  17. tabsize =<\/span> 4<\/span><\/div><\/li>
  18.  <\/div><\/li>
  19. colorizedSubcommands =<\/span> (<\/span><\/div><\/li>
  20. \t'status'<\/span>,<\/span><\/div><\/li>
  21. \t'add'<\/span>,<\/span><\/div><\/li>
  22. \t'remove'<\/span>,<\/span><\/div><\/li>
  23. \t'diff'<\/span>,<\/span><\/div><\/li>
  24. )<\/span><\/div><\/li>
  25.  <\/div><\/li>
  26. statusColors =<\/span> {<\/span><\/div><\/li>
  27. "M"<\/span> : "31"<\/span>,<\/span> # red <\/span><\/div><\/li>
  28. "\\?<\/span>"<\/span> : "37"<\/span>,<\/span> # grey<\/span><\/div><\/li>
  29. "A"<\/span> : "32"<\/span>,<\/span> # green<\/span><\/div><\/li>
  30. "X"<\/span> : "33"<\/span>,<\/span> # yellow<\/span><\/div><\/li>
  31. "C"<\/span> : "30;41"<\/span>,<\/span> # black on red<\/span><\/div><\/li>
  32. "-"<\/span> : "31"<\/span>,<\/span> # red<\/span><\/div><\/li>
  33. "D"<\/span> : "31;1"<\/span>,<\/span> # bold red<\/span><\/div><\/li>
  34. "\\+<\/span>"<\/span> : "32"<\/span>,<\/span> # green<\/span><\/div><\/li>
  35. }<\/span><\/div><\/li>
  36.  <\/div><\/li>
  37. def<\/span> colorize(<\/span>line)<\/span>: <\/div><\/li>
  38. for<\/span> color in<\/span> statusColors:<\/div><\/li>
  39. if<\/span> re<\/span>.match<\/span>(<\/span>color,<\/span> line)<\/span>:<\/div><\/li>
  40. return<\/span> ''<\/span>.join<\/span>(<\/span>(<\/span>"\\0<\/span>01\\0<\/span>33["<\/span>,<\/span> statusColors[<\/span>color]<\/span>,<\/span> "m"<\/span>,<\/span> line,<\/span> "\\0<\/span>33[m\\0<\/span>02"<\/span>)<\/span>)<\/span><\/div><\/li>
  41. else<\/span>:<\/div><\/li>
  42. return<\/span> line<\/div><\/li>
  43.  <\/div><\/li>
  44. def<\/span> escape(<\/span>s)<\/span>:<\/div><\/li>
  45. s =<\/span> s.replace<\/span>(<\/span>'$'<\/span>,<\/span> r'\\$<\/span>'<\/span>)<\/span><\/div><\/li>
  46. s =<\/span> s.replace<\/span>(<\/span>'"'<\/span>,<\/span> r'\\"<\/span>'<\/span>)<\/span><\/div><\/li>
  47. s =<\/span> s.replace<\/span>(<\/span>'`'<\/span>,<\/span> r'\\`<\/span>'<\/span>)<\/span><\/div><\/li>
  48. return<\/span> s<\/div><\/li>
  49.  <\/div><\/li>
  50. passthru =<\/span> lambda<\/span> x: x<\/div><\/li>
  51. quoted =<\/span> lambda<\/span> x: '"%s"'<\/span> % escape(<\/span>x)<\/span><\/div><\/li>
  52.  <\/div><\/li>
  53. if<\/span> __name__ ==<\/span> "__main__"<\/span>:<\/div><\/li>
  54. cmd<\/span> =<\/span> ' '<\/span>.join<\/span>(<\/span>[<\/span>'svn'<\/span>]<\/span>+[<\/span>(<\/span>passthru,<\/span> quoted)<\/span>[<\/span>' '<\/span> in<\/span> arg]<\/span>(<\/span>arg)<\/span> for<\/span> arg in<\/span> sys<\/span>.argv<\/span>[<\/span>1<\/span>:]<\/span>]<\/span>)<\/span><\/div><\/li>
  55. output =<\/span> subprocess<\/span>.Popen<\/span>(<\/span>cmd<\/span>,<\/span> shell=<\/span>True<\/span>,<\/span> stdout=<\/span>subprocess<\/span>.PIPE<\/span>)<\/span><\/div><\/li>
  56. cancelled =<\/span> False<\/span><\/div><\/li>
  57. for<\/span> line in<\/span> output.stdout<\/span>:<\/div><\/li>
  58. line =<\/span> line.expandtabs<\/span>(<\/span>tabsize)<\/span><\/div><\/li>
  59. if<\/span>(<\/span>sys<\/span>.argv<\/span>[<\/span>1<\/span>]<\/span> in<\/span> colorizedSubcommands)<\/span>:<\/div><\/li>
  60. line =<\/span> colorize(<\/span>line)<\/span><\/div><\/li>
  61. try<\/span>:<\/div><\/li>
  62. sys<\/span>.stdout<\/span>.write<\/span>(<\/span>line)<\/span><\/div><\/li>
  63. except<\/span>:<\/div><\/li>
  64. sys<\/span>.exit<\/span>(<\/span>1<\/span>)<\/span><\/div><\/li><\/ol><\/pre>","link":"https:\/\/snipplr.com\/view\/28748\/colorcoded-svn-status-v3"});