Mercurial > hg
annotate hgext/color.py @ 7457:a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
author | Georg Brandl <georg@python.org> |
---|---|
date | Wed, 26 Nov 2008 22:58:07 +0100 |
parents | 79eb16db5e4a |
children | 3fb5c142a9f0 |
rev | line source |
---|---|
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
1 # color.py color output for the status and qseries commands |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
2 # |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
3 # Copyright (C) 2007 Kevin Christen <kevin.christen@gmail.com> |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
4 # |
5792
956e01c31914
color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents:
5787
diff
changeset
|
5 # This program is free software; you can redistribute it and/or modify it |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
6 # under the terms of the GNU General Public License as published by the |
5792
956e01c31914
color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents:
5787
diff
changeset
|
7 # Free Software Foundation; either version 2 of the License, or (at your |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
8 # option) any later version. |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
9 # |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
10 # This program is distributed in the hope that it will be useful, but |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
11 # WITHOUT ANY WARRANTY; without even the implied warranty of |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
13 # Public License for more details. |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
14 # |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
15 # You should have received a copy of the GNU General Public License along |
5792
956e01c31914
color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents:
5787
diff
changeset
|
16 # with this program; if not, write to the Free Software Foundation, Inc., |
956e01c31914
color extension: change from GPL3 to 2
Kevin Christen <kevin.christen@gmail.com>
parents:
5787
diff
changeset
|
17 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
18 |
7456 | 19 '''add color output to status, qseries, and diff-related commands |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
20 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
21 This extension modifies the status command to add color to its output to |
7456 | 22 reflect file status, the qseries command to add color to reflect patch status |
23 (applied, unapplied, missing), and to diff-related commands to highlight | |
7457
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
24 additions, removals, diff headers, and trailing whitespace. |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
25 |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
26 Other effects in addition to color, like bold and underlined text, are also |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
27 available. Effects are rendered with the ECMA-48 SGR control function (aka |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
28 ANSI escape codes). This module also provides the render_text function, |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
29 which can be used to add effects to any text. |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
30 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
31 To enable this extension, add this to your .hgrc file: |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
32 [extensions] |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
33 color = |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
34 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
35 Default effects my be overriden from the .hgrc file: |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
36 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
37 [color] |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
38 status.modified = blue bold underline red_background |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
39 status.added = green bold |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
40 status.removed = red bold blue_background |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
41 status.deleted = cyan bold underline |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
42 status.unknown = magenta bold underline |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
43 status.ignored = black bold |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
44 |
6855
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
45 # 'none' turns off all effects |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
46 status.clean = none |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
47 status.copied = none |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
48 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
49 qseries.applied = blue bold underline |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
50 qseries.unapplied = black bold |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
51 qseries.missing = red bold |
7456 | 52 |
53 diff.diffline = bold | |
54 diff.extended = cyan bold | |
55 diff.file_a = red bold | |
56 diff.file_b = green bold | |
57 diff.hunk = magenta | |
58 diff.deleted = red | |
59 diff.inserted = green | |
60 diff.changed = white | |
7457
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
61 diff.trailingwhitespace = bold red_background |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
62 ''' |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
63 |
7455 | 64 import os, re, sys |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
65 |
7456 | 66 from mercurial import cmdutil, commands, extensions |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
67 from mercurial.i18n import _ |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
68 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
69 # start and stop parameters for effects |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
70 _effect_params = { 'none': (0, 0), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
71 'black': (30, 39), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
72 'red': (31, 39), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
73 'green': (32, 39), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
74 'yellow': (33, 39), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
75 'blue': (34, 39), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
76 'magenta': (35, 39), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
77 'cyan': (36, 39), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
78 'white': (37, 39), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
79 'bold': (1, 22), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
80 'italic': (3, 23), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
81 'underline': (4, 24), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
82 'inverse': (7, 27), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
83 'black_background': (40, 49), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
84 'red_background': (41, 49), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
85 'green_background': (42, 49), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
86 'yellow_background': (43, 49), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
87 'blue_background': (44, 49), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
88 'purple_background': (45, 49), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
89 'cyan_background': (46, 49), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
90 'white_background': (47, 49), } |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
91 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
92 def render_effects(text, *effects): |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
93 'Wrap text in commands to turn on each effect.' |
6856
c6890cfc2253
Add a reset before and after colorized output
Kevin Christen <kevin.christen@gmail.com>
parents:
6855
diff
changeset
|
94 start = [ str(_effect_params['none'][0]) ] |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
95 stop = [] |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
96 for effect in effects: |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
97 start.append(str(_effect_params[effect][0])) |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
98 stop.append(str(_effect_params[effect][1])) |
6856
c6890cfc2253
Add a reset before and after colorized output
Kevin Christen <kevin.christen@gmail.com>
parents:
6855
diff
changeset
|
99 stop.append(str(_effect_params['none'][1])) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
100 start = '\033[' + ';'.join(start) + 'm' |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
101 stop = '\033[' + ';'.join(stop) + 'm' |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
102 return start + text + stop |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
103 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
104 def colorstatus(orig, ui, repo, *pats, **opts): |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
105 '''run the status command with colored output''' |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
106 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
107 delimiter = opts['print0'] and '\0' or '\n' |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
108 |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
109 nostatus = opts.get('no_status') |
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
110 opts['no_status'] = False |
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
111 # run status and capture its output |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
112 ui.pushbuffer() |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
113 retval = orig(ui, repo, *pats, **opts) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
114 # filter out empty strings |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
115 lines_with_status = [ line for line in ui.popbuffer().split(delimiter) if line ] |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
116 |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
117 if nostatus: |
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
118 lines = [l[2:] for l in lines_with_status] |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
119 else: |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
120 lines = lines_with_status |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
121 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
122 # apply color to output and display it |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
123 for i in xrange(0, len(lines)): |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
124 status = _status_abbreviations[lines_with_status[i][0]] |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
125 effects = _status_effects[status] |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
126 if effects: |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
127 lines[i] = render_effects(lines[i], *effects) |
7455 | 128 ui.write(lines[i] + delimiter) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
129 return retval |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
130 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
131 _status_abbreviations = { 'M': 'modified', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
132 'A': 'added', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
133 'R': 'removed', |
5796
7705d308eb5e
Fix status char in color extension for deleted (missing) files.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5792
diff
changeset
|
134 '!': 'deleted', |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
135 '?': 'unknown', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
136 'I': 'ignored', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
137 'C': 'clean', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
138 ' ': 'copied', } |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
139 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
140 _status_effects = { 'modified': ('blue', 'bold'), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
141 'added': ('green', 'bold'), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
142 'removed': ('red', 'bold'), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
143 'deleted': ('cyan', 'bold', 'underline'), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
144 'unknown': ('magenta', 'bold', 'underline'), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
145 'ignored': ('black', 'bold'), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
146 'clean': ('none', ), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
147 'copied': ('none', ), } |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
148 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
149 def colorqseries(orig, ui, repo, *dummy, **opts): |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
150 '''run the qseries command with colored output''' |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
151 ui.pushbuffer() |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
152 retval = orig(ui, repo, **opts) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
153 patches = ui.popbuffer().splitlines() |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
154 for patch in patches: |
6855
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
155 patchname = patch |
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
156 if opts['summary']: |
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
157 patchname = patchname.split(': ')[0] |
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
158 if ui.verbose: |
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
159 patchname = patchname.split(' ', 2)[-1] |
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
160 |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
161 if opts['missing']: |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
162 effects = _patch_effects['missing'] |
6855
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
163 # Determine if patch is applied. |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
164 elif [ applied for applied in repo.mq.applied |
6855
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
165 if patchname == applied.name ]: |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
166 effects = _patch_effects['applied'] |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
167 else: |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
168 effects = _patch_effects['unapplied'] |
7455 | 169 ui.write(render_effects(patch, *effects) + '\n') |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
170 return retval |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
171 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
172 _patch_effects = { 'applied': ('blue', 'bold', 'underline'), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
173 'missing': ('red', 'bold'), |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
174 'unapplied': ('black', 'bold'), } |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
175 |
7456 | 176 def colorwrap(orig, s): |
177 '''wrap ui.write for colored diff output''' | |
178 lines = s.split('\n') | |
179 for i, line in enumerate(lines): | |
7457
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
180 stripline = line |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
181 if line and line[0] in '+-': |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
182 # highlight trailing whitespace, but only in changed lines |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
183 stripline = line.rstrip() |
7456 | 184 for prefix, style in _diff_prefixes: |
7457
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
185 if stripline.startswith(prefix): |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
186 lines[i] = render_effects(stripline, *_diff_effects[style]) |
7456 | 187 break |
7457
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
188 if line != stripline: |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
189 lines[i] += render_effects( |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
190 line[len(stripline):], *_diff_effects['trailingwhitespace']) |
7456 | 191 orig('\n'.join(lines)) |
192 | |
193 def colorshowpatch(orig, self, node): | |
194 '''wrap cmdutil.changeset_printer.showpatch with colored output''' | |
195 oldwrite = extensions.wrapfunction(self.ui, 'write', colorwrap) | |
196 try: | |
197 orig(self, node) | |
198 finally: | |
199 self.ui.write = oldwrite | |
200 | |
201 def colordiff(orig, ui, repo, *pats, **opts): | |
202 '''run the diff command with colored output''' | |
203 oldwrite = extensions.wrapfunction(ui, 'write', colorwrap) | |
204 try: | |
205 orig(ui, repo, *pats, **opts) | |
206 finally: | |
207 ui.write = oldwrite | |
208 | |
209 _diff_prefixes = [('diff', 'diffline'), | |
210 ('copy', 'extended'), | |
211 ('rename', 'extended'), | |
212 ('new', 'extended'), | |
213 ('deleted', 'extended'), | |
214 ('---', 'file_a'), | |
215 ('+++', 'file_b'), | |
216 ('@', 'hunk'), | |
217 ('-', 'deleted'), | |
218 ('+', 'inserted')] | |
219 | |
220 _diff_effects = {'diffline': ('bold',), | |
221 'extended': ('cyan', 'bold'), | |
222 'file_a': ('red', 'bold'), | |
223 'file_b': ('green', 'bold'), | |
224 'hunk': ('magenta',), | |
225 'deleted': ('red',), | |
226 'inserted': ('green',), | |
7457
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
227 'changed': ('white',), |
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
228 'trailingwhitespace': ('bold', 'red_background'),} |
7456 | 229 |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
230 def uisetup(ui): |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
231 '''Initialize the extension.''' |
7456 | 232 _setupcmd(ui, 'diff', commands.table, colordiff, _diff_effects) |
233 _setupcmd(ui, 'incoming', commands.table, None, _diff_effects) | |
234 _setupcmd(ui, 'log', commands.table, None, _diff_effects) | |
235 _setupcmd(ui, 'outgoing', commands.table, None, _diff_effects) | |
236 _setupcmd(ui, 'tip', commands.table, None, _diff_effects) | |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
237 _setupcmd(ui, 'status', commands.table, colorstatus, _status_effects) |
6854
9d11faecb0f1
color: improve mq extension detection
Patrick Mezard <pmezard@gmail.com>
parents:
6212
diff
changeset
|
238 if ui.config('extensions', 'hgext.mq') is not None or \ |
9d11faecb0f1
color: improve mq extension detection
Patrick Mezard <pmezard@gmail.com>
parents:
6212
diff
changeset
|
239 ui.config('extensions', 'mq') is not None: |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
240 from hgext import mq |
7456 | 241 _setupcmd(ui, 'qdiff', mq.cmdtable, colordiff, _diff_effects) |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
242 _setupcmd(ui, 'qseries', mq.cmdtable, colorqseries, _patch_effects) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
243 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
244 def _setupcmd(ui, cmd, table, func, effectsmap): |
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
245 '''patch in command to command table and load effect map''' |
7455 | 246 def nocolor(orig, *args, **opts): |
247 | |
248 if (opts['no_color'] or opts['color'] == 'never' or | |
249 (opts['color'] == 'auto' and (os.environ.get('TERM') == 'dumb' | |
250 or not sys.__stdout__.isatty()))): | |
251 return orig(*args, **opts) | |
252 | |
7456 | 253 oldshowpatch = extensions.wrapfunction(cmdutil.changeset_printer, |
254 'showpatch', colorshowpatch) | |
255 try: | |
256 if func is not None: | |
257 return func(orig, *args, **opts) | |
258 return orig(*args, **opts) | |
259 finally: | |
260 cmdutil.changeset_printer.showpatch = oldshowpatch | |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
261 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
262 entry = extensions.wrapcommand(table, cmd, nocolor) |
7455 | 263 entry[1].extend([ |
264 ('', 'color', 'auto', _("when to colorize (always, auto, or never)")), | |
265 ('', 'no-color', None, _("don't colorize output")), | |
266 ]) | |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
267 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
268 for status in effectsmap: |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
269 effects = ui.config('color', cmd + '.' + status) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
270 if effects: |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
271 effectsmap[status] = re.split('\W+', effects) |