Mercurial > hg
annotate hgext/color.py @ 9811:c92ac5a56f69
buildrpm: enable to start the script from anywhere
Previously the script worked only from the hg root.
author | Gilles Moris <gilles.moris@free.fr> |
---|---|
date | Fri, 06 Nov 2009 09:35:38 +0100 |
parents | d29bd00bbc50 |
children | af04a3dea4cd |
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 |
8894
868670dbc237
extensions: improve the consistency of synopses
Cédric Duval <cedricduval@free.fr>
parents:
8866
diff
changeset
|
19 '''colorize output from some commands |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
20 |
7988
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
21 This extension modifies the status command to add color to its output |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
22 to reflect file status, the qseries command to add color to reflect |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
23 patch status (applied, unapplied, missing), and to diff-related |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
24 commands to highlight additions, removals, diff headers, and trailing |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
25 whitespace. |
7457
a70fb83cbb9e
diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents:
7456
diff
changeset
|
26 |
7988
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
27 Other effects in addition to color, like bold and underlined text, are |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
28 also available. Effects are rendered with the ECMA-48 SGR control |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
29 function (aka ANSI escape codes). This module also provides the |
0447939b4b97
color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
30 render_text function, 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
|
31 |
9206
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
32 Default effects may be overridden from the .hgrc file:: |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
33 |
9206
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
34 [color] |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
35 status.modified = blue bold underline red_background |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
36 status.added = green bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
37 status.removed = red bold blue_background |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
38 status.deleted = cyan bold underline |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
39 status.unknown = magenta bold underline |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
40 status.ignored = black bold |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
41 |
9206
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
42 # 'none' turns off all effects |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
43 status.clean = none |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
44 status.copied = none |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
45 |
9206
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
46 qseries.applied = blue bold underline |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
47 qseries.unapplied = black bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
48 qseries.missing = red bold |
7456 | 49 |
9206
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
50 diff.diffline = bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
51 diff.extended = cyan bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
52 diff.file_a = red bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
53 diff.file_b = green bold |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
54 diff.hunk = magenta |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
55 diff.deleted = red |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
56 diff.inserted = green |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
57 diff.changed = white |
c1a1b49221e3
color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents:
9057
diff
changeset
|
58 diff.trailingwhitespace = bold red_background |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
59 ''' |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
60 |
8623
0c159aa7b329
color: replace re.split with ui.configlist
Martin Geisler <mg@lazybytes.net>
parents:
8622
diff
changeset
|
61 import os, sys |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
62 |
8963
a4ceae3aa7be
color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents:
8945
diff
changeset
|
63 from mercurial import cmdutil, commands, extensions, error |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
64 from mercurial.i18n import _ |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
65 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
66 # start and stop parameters for effects |
7459
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
67 _effect_params = {'none': 0, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
68 'black': 30, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
69 'red': 31, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
70 'green': 32, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
71 'yellow': 33, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
72 'blue': 34, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
73 'magenta': 35, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
74 'cyan': 36, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
75 'white': 37, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
76 'bold': 1, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
77 'italic': 3, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
78 'underline': 4, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
79 'inverse': 7, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
80 'black_background': 40, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
81 'red_background': 41, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
82 'green_background': 42, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
83 'yellow_background': 43, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
84 'blue_background': 44, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
85 'purple_background': 45, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
86 'cyan_background': 46, |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
87 'white_background': 47} |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
88 |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
89 def render_effects(text, effects): |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
90 'Wrap text in commands to turn on each effect.' |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
91 start = [str(_effect_params[e]) for e in ['none'] + effects] |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
92 start = '\033[' + ';'.join(start) + 'm' |
7459
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
93 stop = '\033[' + str(_effect_params['none']) + 'm' |
3fb5c142a9f0
color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents:
7457
diff
changeset
|
94 return ''.join([start, text, stop]) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
95 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
96 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
|
97 '''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
|
98 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
99 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
|
100 |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
101 nostatus = opts.get('no_status') |
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
102 opts['no_status'] = False |
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
103 # 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
|
104 ui.pushbuffer() |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
105 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
|
106 # filter out empty strings |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
107 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
|
108 |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
109 if nostatus: |
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
110 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
|
111 else: |
7419
efe31fbe6cf0
color: don't run status twice for -n
Brendan Cully <brendan@kublai.com>
parents:
7418
diff
changeset
|
112 lines = lines_with_status |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
113 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
114 # apply color to output and display it |
8624
2b3dec0ef3ae
replace xrange(0, n) with xrange(n)
Martin Geisler <mg@lazybytes.net>
parents:
8623
diff
changeset
|
115 for i in xrange(len(lines)): |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
116 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
|
117 effects = _status_effects[status] |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
118 if effects: |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
119 lines[i] = render_effects(lines[i], effects) |
7455 | 120 ui.write(lines[i] + delimiter) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
121 return retval |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
122 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
123 _status_abbreviations = { 'M': 'modified', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
124 'A': 'added', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
125 'R': 'removed', |
5796
7705d308eb5e
Fix status char in color extension for deleted (missing) files.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5792
diff
changeset
|
126 '!': 'deleted', |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
127 '?': 'unknown', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
128 'I': 'ignored', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
129 'C': 'clean', |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
130 ' ': 'copied', } |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
131 |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
132 _status_effects = { 'modified': ['blue', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
133 'added': ['green', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
134 'removed': ['red', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
135 'deleted': ['cyan', 'bold', 'underline'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
136 'unknown': ['magenta', 'bold', 'underline'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
137 'ignored': ['black', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
138 'clean': ['none'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
139 'copied': ['none'], } |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
140 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
141 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
|
142 '''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
|
143 ui.pushbuffer() |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
144 retval = orig(ui, repo, **opts) |
9311
e37e9904bf10
color: simplify & improve colorization of qseries
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9255
diff
changeset
|
145 patchlines = ui.popbuffer().splitlines() |
e37e9904bf10
color: simplify & improve colorization of qseries
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9255
diff
changeset
|
146 patchnames = repo.mq.series |
6855
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
147 |
9374
ad73f6986ef5
color: no need for itertools, zip() is good enough
Patrick Mezard <pmezard@gmail.com>
parents:
9311
diff
changeset
|
148 for patch, patchname in zip(patchlines, patchnames): |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
149 if opts['missing']: |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
150 effects = _patch_effects['missing'] |
6855
09db2b8236ec
Apply color to output of qseries --verbose
Kevin Christen <kevin.christen@gmail.com>
parents:
6854
diff
changeset
|
151 # Determine if patch is applied. |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
152 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
|
153 if patchname == applied.name ]: |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
154 effects = _patch_effects['applied'] |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
155 else: |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
156 effects = _patch_effects['unapplied'] |
9017
c24c9ce0cdcf
color: don't highlight the summary part of the qseries command
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
8963
diff
changeset
|
157 |
c24c9ce0cdcf
color: don't highlight the summary part of the qseries command
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
8963
diff
changeset
|
158 patch = patch.replace(patchname, render_effects(patchname, effects), 1) |
c24c9ce0cdcf
color: don't highlight the summary part of the qseries command
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
8963
diff
changeset
|
159 ui.write(patch + '\n') |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
160 return retval |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
161 |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
162 _patch_effects = { 'applied': ['blue', 'bold', 'underline'], |
9520
bcc27ee3a37b
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
8963
diff
changeset
|
163 'missing': ['red', 'bold'], |
bcc27ee3a37b
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
8963
diff
changeset
|
164 'unapplied': ['black', 'bold'], } |
9551
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
165 def colorwrap(orig, *args): |
7456 | 166 '''wrap ui.write for colored diff output''' |
9551
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
167 def _colorize(s): |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
168 lines = s.split('\n') |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
169 for i, line in enumerate(lines): |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
170 stripline = line |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
171 if line and line[0] in '+-': |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
172 # highlight trailing whitespace, but only in changed lines |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
173 stripline = line.rstrip() |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
174 for prefix, style in _diff_prefixes: |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
175 if stripline.startswith(prefix): |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
176 lines[i] = render_effects(stripline, _diff_effects[style]) |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
177 break |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
178 if line != stripline: |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
179 lines[i] += render_effects( |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
180 line[len(stripline):], _diff_effects['trailingwhitespace']) |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
181 return '\n'.join(lines) |
3e698434b990
color: allow multiple args to ui.write()
Kevin Bullock <kbullock@ringworld.org>
parents:
9550
diff
changeset
|
182 orig(*[_colorize(s) for s in args]) |
7456 | 183 |
184 def colorshowpatch(orig, self, node): | |
185 '''wrap cmdutil.changeset_printer.showpatch with colored output''' | |
186 oldwrite = extensions.wrapfunction(self.ui, 'write', colorwrap) | |
187 try: | |
188 orig(self, node) | |
189 finally: | |
190 self.ui.write = oldwrite | |
191 | |
9641 | 192 def colordiffstat(orig, s): |
193 lines = s.split('\n') | |
194 for i, line in enumerate(lines): | |
195 if line and line[-1] in '+-': | |
196 name, graph = line.rsplit(' ', 1) | |
197 graph = graph.replace('-', | |
198 render_effects('-', _diff_effects['deleted'])) | |
199 graph = graph.replace('+', | |
200 render_effects('+', _diff_effects['inserted'])) | |
201 lines[i] = ' '.join([name, graph]) | |
202 orig('\n'.join(lines)) | |
203 | |
7456 | 204 def colordiff(orig, ui, repo, *pats, **opts): |
205 '''run the diff command with colored output''' | |
9641 | 206 if opts.get('stat'): |
207 wrapper = colordiffstat | |
208 else: | |
209 wrapper = colorwrap | |
210 oldwrite = extensions.wrapfunction(ui, 'write', wrapper) | |
7456 | 211 try: |
212 orig(ui, repo, *pats, **opts) | |
213 finally: | |
214 ui.write = oldwrite | |
215 | |
216 _diff_prefixes = [('diff', 'diffline'), | |
217 ('copy', 'extended'), | |
218 ('rename', 'extended'), | |
7539
92c373f8135f
color: fix colorization of the 'old mode' git diff metadata
Gilles Moris <gilles.moris@free.fr>
parents:
7459
diff
changeset
|
219 ('old', 'extended'), |
7456 | 220 ('new', 'extended'), |
221 ('deleted', 'extended'), | |
222 ('---', 'file_a'), | |
223 ('+++', 'file_b'), | |
224 ('@', 'hunk'), | |
225 ('-', 'deleted'), | |
226 ('+', 'inserted')] | |
227 | |
8630
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
228 _diff_effects = {'diffline': ['bold'], |
8622
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
229 'extended': ['cyan', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
230 'file_a': ['red', 'bold'], |
0a4f6e1b78dc
color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents:
8278
diff
changeset
|
231 'file_b': ['green', 'bold'], |
8630
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
232 'hunk': ['magenta'], |
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
233 'deleted': ['red'], |
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
234 'inserted': ['green'], |
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
235 'changed': ['white'], |
8ff65f7e3273
color: cleanup extra commas
Martin Geisler <mg@lazybytes.net>
parents:
8624
diff
changeset
|
236 'trailingwhitespace': ['bold', 'red_background']} |
7456 | 237 |
9711 | 238 def extsetup(ui): |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
239 '''Initialize the extension.''' |
7456 | 240 _setupcmd(ui, 'diff', commands.table, colordiff, _diff_effects) |
241 _setupcmd(ui, 'incoming', commands.table, None, _diff_effects) | |
242 _setupcmd(ui, 'log', commands.table, None, _diff_effects) | |
243 _setupcmd(ui, 'outgoing', commands.table, None, _diff_effects) | |
244 _setupcmd(ui, 'tip', commands.table, None, _diff_effects) | |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
245 _setupcmd(ui, 'status', commands.table, colorstatus, _status_effects) |
8963
a4ceae3aa7be
color: wrap qdiff/qseries after all extensions are loaded
Brodie Rao <me+hg@dackz.net>
parents:
8945
diff
changeset
|
246 |
8278
1f9787de17d9
color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents:
7988
diff
changeset
|
247 try: |
1f9787de17d9
color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents:
7988
diff
changeset
|
248 mq = extensions.find('mq') |
9412
3a78bbc57660
color: do all setup in uisetup
Martin Geisler <mg@lazybytes.net>
parents:
9374
diff
changeset
|
249 _setupcmd(ui, 'qdiff', mq.cmdtable, colordiff, _diff_effects) |
3a78bbc57660
color: do all setup in uisetup
Martin Geisler <mg@lazybytes.net>
parents:
9374
diff
changeset
|
250 _setupcmd(ui, 'qseries', mq.cmdtable, colorqseries, _patch_effects) |
8278
1f9787de17d9
color: look for mq with extensions.find
Martin Geisler <mg@lazybytes.net>
parents:
7988
diff
changeset
|
251 except KeyError: |
9711 | 252 mq = None |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
253 |
9550
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
254 try: |
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
255 rec = extensions.find('record') |
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
256 _setupcmd(ui, 'record', rec.cmdtable, colordiff, _diff_effects) |
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
257 except KeyError: |
9711 | 258 rec = None |
259 | |
260 if mq and rec: | |
261 _setupcmd(ui, 'qrecord', rec.cmdtable, colordiff, _diff_effects) | |
262 | |
9550
3bcb28131bab
color: add support for record extension
TK Soh <teekaysoh@gmail.com>
parents:
9523
diff
changeset
|
263 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
264 def _setupcmd(ui, cmd, table, func, effectsmap): |
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
265 '''patch in command to command table and load effect map''' |
7455 | 266 def nocolor(orig, *args, **opts): |
267 | |
268 if (opts['no_color'] or opts['color'] == 'never' or | |
269 (opts['color'] == 'auto' and (os.environ.get('TERM') == 'dumb' | |
270 or not sys.__stdout__.isatty()))): | |
271 return orig(*args, **opts) | |
272 | |
7456 | 273 oldshowpatch = extensions.wrapfunction(cmdutil.changeset_printer, |
274 'showpatch', colorshowpatch) | |
275 try: | |
276 if func is not None: | |
277 return func(orig, *args, **opts) | |
278 return orig(*args, **opts) | |
279 finally: | |
280 cmdutil.changeset_printer.showpatch = oldshowpatch | |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
281 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7213
diff
changeset
|
282 entry = extensions.wrapcommand(table, cmd, nocolor) |
7455 | 283 entry[1].extend([ |
284 ('', 'color', 'auto', _("when to colorize (always, auto, or never)")), | |
9478
32ec70799172
color: mark --no-color as deprecated (--color=never has the same effect)
Brodie Rao <me+hg@dackz.net>
parents:
9412
diff
changeset
|
285 ('', 'no-color', None, _("don't colorize output (DEPRECATED)")), |
7455 | 286 ]) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
287 |
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
288 for status in effectsmap: |
8945
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
289 configkey = cmd + '.' + status |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
290 effects = ui.configlist('color', configkey) |
5787
b7b22a2ade2e
Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff
changeset
|
291 if effects: |
8945
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
292 good = [] |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
293 for e in effects: |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
294 if e in _effect_params: |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
295 good.append(e) |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
296 else: |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
297 ui.warn(_("ignoring unknown color/effect %r " |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
298 "(configured in color.%s)\n") |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
299 % (e, configkey)) |
7b3d837ca60e
color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents:
8894
diff
changeset
|
300 effectsmap[status] = good |