annotate hgext/color.py @ 22771:d6274291fac1

color: update description of the extension The color extension long ago ceased to work only for the status and qseries commands.
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Mon, 06 Oct 2014 08:16:40 -0400
parents 7ebf91426f6a
children b186b3ef4b54
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22771
d6274291fac1 color: update description of the extension
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22763
diff changeset
1 # color.py color output for Mercurial commands
5787
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 #
15771
425c1309718f color: Use the same GPL boilerplate as most hg files
Augie Fackler <durin42@gmail.com>
parents: 15048
diff changeset
5 # This software may be used and distributed according to the terms of the
425c1309718f color: Use the same GPL boilerplate as most hg files
Augie Fackler <durin42@gmail.com>
parents: 15048
diff changeset
6 # GNU General Public License version 2 or any later version.
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
7
8894
868670dbc237 extensions: improve the consistency of synopses
Cédric Duval <cedricduval@free.fr>
parents: 8866
diff changeset
8 '''colorize output from some commands
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
9
22771
d6274291fac1 color: update description of the extension
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22763
diff changeset
10 The color extension colorizes output from several Mercurial commands.
d6274291fac1 color: update description of the extension
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22763
diff changeset
11 For example, the diff command shows additions in green and deletions
d6274291fac1 color: update description of the extension
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22763
diff changeset
12 in red, while the status command shows modified files in magenta. Many
d6274291fac1 color: update description of the extension
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22763
diff changeset
13 other commands have analogous colors. It is possible to customize
d6274291fac1 color: update description of the extension
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22763
diff changeset
14 these colors.
7457
a70fb83cbb9e diff colorization: finish highlighting trailing whitespace
Georg Brandl <georg@python.org>
parents: 7456
diff changeset
15
7988
0447939b4b97 color: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7983
diff changeset
16 Other effects in addition to color, like bold and underlined text, are
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
17 also available. By default, the terminfo database is used to find the
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
18 terminal codes used to change color and effect. If terminfo is not
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
19 available, then effects are rendered with the ECMA-48 SGR control
13635
c9ddc39c21b6 color: don't mention internal function in docstring
Martin Geisler <mg@aragost.com>
parents: 13361
diff changeset
20 function (aka ANSI escape codes).
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
21
22462
fbd67cf34799 color: document that labels are used for colorizing text
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 21991
diff changeset
22 Text receives color effects depending on the labels that it has. Many
fbd67cf34799 color: document that labels are used for colorizing text
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 21991
diff changeset
23 default Mercurial commands emit labelled text. You can also define
fbd67cf34799 color: document that labels are used for colorizing text
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 21991
diff changeset
24 your own labels in templates using the label function, see :hg:`help
fbd67cf34799 color: document that labels are used for colorizing text
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 21991
diff changeset
25 templates`. A single portion of text may have more than one label. In
fbd67cf34799 color: document that labels are used for colorizing text
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 21991
diff changeset
26 that case, effects given to the last label will override any other
fbd67cf34799 color: document that labels are used for colorizing text
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 21991
diff changeset
27 effects. This includes the special "none" effect, which nullifies
fbd67cf34799 color: document that labels are used for colorizing text
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 21991
diff changeset
28 other effects.
fbd67cf34799 color: document that labels are used for colorizing text
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 21991
diff changeset
29
22463
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
30 Labels are normally invisible. In order to see these labels and their
22711
60ac52a21512 color: update docstring for debug option
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22710
diff changeset
31 position in the text, use the global --color=debug option. The same
60ac52a21512 color: update docstring for debug option
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22710
diff changeset
32 anchor text may be associated to multiple labels, e.g.
22463
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
33
22711
60ac52a21512 color: update docstring for debug option
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22710
diff changeset
34 [log.changeset changeset.secret|changeset: 22611:6f0a53c8f587]
22463
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
35
22462
fbd67cf34799 color: document that labels are used for colorizing text
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 21991
diff changeset
36 The following are the default effects for some default labels. Default
fbd67cf34799 color: document that labels are used for colorizing text
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 21991
diff changeset
37 effects may be overridden from your configuration file::
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
38
9206
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
39 [color]
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
40 status.modified = blue bold underline red_background
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
41 status.added = green bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
42 status.removed = red bold blue_background
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
43 status.deleted = cyan bold underline
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
44 status.unknown = magenta bold underline
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
45 status.ignored = black bold
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
46
9206
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
47 # 'none' turns off all effects
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
48 status.clean = none
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
49 status.copied = none
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
50
9206
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
51 qseries.applied = blue bold underline
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
52 qseries.unapplied = black bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
53 qseries.missing = red bold
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
54
9206
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
55 diff.diffline = bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
56 diff.extended = cyan bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
57 diff.file_a = red bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
58 diff.file_b = green bold
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
59 diff.hunk = magenta
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
60 diff.deleted = red
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
61 diff.inserted = green
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
62 diff.changed = white
22710
b07fd3ac8882 color: document the possibility to colourise tabs in diffs
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22465
diff changeset
63 diff.tab =
9206
c1a1b49221e3 color: use reST syntax for literal block
Martin Geisler <mg@lazybytes.net>
parents: 9057
diff changeset
64 diff.trailingwhitespace = bold red_background
10046
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
65
22465
f8e2aebbb24c color: document that changeset phases have labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22464
diff changeset
66 # Blank so it inherits the style of the surrounding label
f8e2aebbb24c color: document that changeset phases have labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22464
diff changeset
67 changeset.public =
f8e2aebbb24c color: document that changeset phases have labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22464
diff changeset
68 changeset.draft =
f8e2aebbb24c color: document that changeset phases have labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22464
diff changeset
69 changeset.secret =
f8e2aebbb24c color: document that changeset phases have labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22464
diff changeset
70
10223
51421ab573de color: colorize output of hg resolve -l
Georg Brandl <georg@python.org>
parents: 10222
diff changeset
71 resolve.unresolved = red bold
51421ab573de color: colorize output of hg resolve -l
Georg Brandl <georg@python.org>
parents: 10222
diff changeset
72 resolve.resolved = green bold
51421ab573de color: colorize output of hg resolve -l
Georg Brandl <georg@python.org>
parents: 10222
diff changeset
73
10046
0c23b0b3516b color: Add support for bookmarks
David Soria Parra <dsp@php.net>
parents: 10045
diff changeset
74 bookmarks.current = green
10870
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
75
11969
52ec5c813723 color: enable branches support
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 11750
diff changeset
76 branches.active = none
52ec5c813723 color: enable branches support
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 11750
diff changeset
77 branches.closed = black bold
52ec5c813723 color: enable branches support
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 11750
diff changeset
78 branches.current = green
52ec5c813723 color: enable branches support
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 11750
diff changeset
79 branches.inactive = none
52ec5c813723 color: enable branches support
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 11750
diff changeset
80
15048
2f0a3977c939 color: add styles for tags
Marc Simpson <marc@0branch.com>
parents: 14989
diff changeset
81 tags.normal = green
2f0a3977c939 color: add styles for tags
Marc Simpson <marc@0branch.com>
parents: 14989
diff changeset
82 tags.local = black bold
2f0a3977c939 color: add styles for tags
Marc Simpson <marc@0branch.com>
parents: 14989
diff changeset
83
19214
0250047a365e summary: indicate if a rebase is underway
Bryan O'Sullivan <bryano@fb.com>
parents: 19073
diff changeset
84 rebase.rebased = blue
0250047a365e summary: indicate if a rebase is underway
Bryan O'Sullivan <bryano@fb.com>
parents: 19073
diff changeset
85 rebase.remaining = red bold
0250047a365e summary: indicate if a rebase is underway
Bryan O'Sullivan <bryano@fb.com>
parents: 19073
diff changeset
86
19854
49d4919d21c2 shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents: 19298
diff changeset
87 shelve.age = cyan
49d4919d21c2 shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents: 19298
diff changeset
88 shelve.newest = green bold
49d4919d21c2 shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents: 19298
diff changeset
89 shelve.name = blue bold
49d4919d21c2 shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents: 19298
diff changeset
90
19215
f184fe1e2ac5 summary: add a histedit hook
Bryan O'Sullivan <bryano@fb.com>
parents: 19214
diff changeset
91 histedit.remaining = red bold
f184fe1e2ac5 summary: add a histedit hook
Bryan O'Sullivan <bryano@fb.com>
parents: 19214
diff changeset
92
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
93 The available effects in terminfo mode are 'blink', 'bold', 'dim',
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
94 'inverse', 'invisible', 'italic', 'standout', and 'underline'; in
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
95 ECMA-48 mode, the options are 'bold', 'inverse', 'italic', and
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
96 'underline'. How each is rendered depends on the terminal emulator.
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
97 Some may not be available for a given terminal type, and will be
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
98 silently ignored.
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
99
14769
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
100 Note that on some systems, terminfo mode may cause problems when using
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
101 color with the pager extension and less -R. less with the -R option
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
102 will only display ECMA-48 color codes, and terminfo mode may sometimes
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
103 emit codes that less doesn't understand. You can work around this by
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
104 either using ansi mode (or auto mode), or by using less -r (which will
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
105 pass through all terminal control codes, not just color control
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
106 codes).
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
107
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
108 Because there are only eight standard colors, this module allows you
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
109 to define color names for other color slots which might be available
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
110 for your terminal type, assuming terminfo mode. For instance::
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
111
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
112 color.brightblue = 12
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
113 color.pink = 207
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
114 color.orange = 202
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
115
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
116 to set 'brightblue' to color slot 12 (useful for 16 color terminals
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
117 that have brighter colors defined in the upper eight) and, 'pink' and
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
118 'orange' to colors in 256-color xterm's default color cube. These
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
119 defined colors may then be used as any of the pre-defined eight,
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
120 including appending '_background' to set the background to that color.
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
121
14769
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
122 By default, the color extension will use ANSI mode (or win32 mode on
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
123 Windows) if it detects a terminal. To override auto mode (to enable
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
124 terminfo mode, for example), set the following configuration option::
10870
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
125
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
126 [color]
14769
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
127 mode = terminfo
10870
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
128
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
129 Any value other than 'ansi', 'win32', 'terminfo', or 'auto' will
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
130 disable color.
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
131 '''
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
132
14139
4e5a36eeefd1 remove unused imports
timeless <timeless@mozdev.org>
parents: 14103
diff changeset
133 import os
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
134
21249
2b8697e20978 color: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21227
diff changeset
135 from mercurial import cmdutil, commands, dispatch, extensions, ui as uimod, util
18921
ac31f586eff7 color: add missing import of error
Bryan O'Sullivan <bryano@fb.com>
parents: 18829
diff changeset
136 from mercurial import templater, error
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
137 from mercurial.i18n import _
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
138
21249
2b8697e20978 color: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21227
diff changeset
139 cmdtable = {}
2b8697e20978 color: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21227
diff changeset
140 command = cmdutil.command(cmdtable)
16743
38caf405d010 hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents: 15771
diff changeset
141 testedwith = 'internal'
38caf405d010 hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents: 15771
diff changeset
142
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
143 # start and stop parameters for effects
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
144 _effects = {'none': 0, 'black': 30, 'red': 31, 'green': 32, 'yellow': 33,
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
145 'blue': 34, 'magenta': 35, 'cyan': 36, 'white': 37, 'bold': 1,
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
146 'italic': 3, 'underline': 4, 'inverse': 7,
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
147 'black_background': 40, 'red_background': 41,
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
148 'green_background': 42, 'yellow_background': 43,
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
149 'blue_background': 44, 'purple_background': 45,
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
150 'cyan_background': 46, 'white_background': 47}
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
151
14495
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
152 def _terminfosetup(ui, mode):
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
153 '''Initialize terminfo data and the terminal if we're in terminfo mode.'''
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
154
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
155 global _terminfo_params
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
156 # If we failed to load curses, we go ahead and return.
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
157 if not _terminfo_params:
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
158 return
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
159 # Otherwise, see what the config file says.
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
160 if mode not in ('auto', 'terminfo'):
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
161 return
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
162
13998
14c7526fed89 color: code simplification
Patrick Mezard <pmezard@gmail.com>
parents: 13987
diff changeset
163 _terminfo_params.update((key[6:], (False, int(val)))
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
164 for key, val in ui.configitems('color')
13998
14c7526fed89 color: code simplification
Patrick Mezard <pmezard@gmail.com>
parents: 13987
diff changeset
165 if key.startswith('color.'))
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
166
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
167 try:
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
168 curses.setupterm()
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
169 except curses.error, e:
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
170 _terminfo_params = {}
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
171 return
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
172
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
173 for key, (b, e) in _terminfo_params.items():
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
174 if not b:
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
175 continue
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
176 if not curses.tigetstr(e):
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
177 # Most terminals don't support dim, invis, etc, so don't be
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
178 # noisy and use ui.debug().
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
179 ui.debug("no terminfo entry for %s\n" % e)
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
180 del _terminfo_params[key]
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
181 if not curses.tigetstr('setaf') or not curses.tigetstr('setab'):
14758
1e6661e09818 color: be silent when falling back to ECMA-48 mode if "auto" mode was desired
Danek Duvall <duvall@comfychair.org>
parents: 14516
diff changeset
182 # Only warn about missing terminfo entries if we explicitly asked for
1e6661e09818 color: be silent when falling back to ECMA-48 mode if "auto" mode was desired
Danek Duvall <duvall@comfychair.org>
parents: 14516
diff changeset
183 # terminfo mode.
1e6661e09818 color: be silent when falling back to ECMA-48 mode if "auto" mode was desired
Danek Duvall <duvall@comfychair.org>
parents: 14516
diff changeset
184 if mode == "terminfo":
1e6661e09818 color: be silent when falling back to ECMA-48 mode if "auto" mode was desired
Danek Duvall <duvall@comfychair.org>
parents: 14516
diff changeset
185 ui.warn(_("no terminfo entry for setab/setaf: reverting to "
1e6661e09818 color: be silent when falling back to ECMA-48 mode if "auto" mode was desired
Danek Duvall <duvall@comfychair.org>
parents: 14516
diff changeset
186 "ECMA-48 color\n"))
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
187 _terminfo_params = {}
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
188
19297
8ddc3cd962ba color: only provide the required opt to _modesetup
Simon Heimberg <simohe@besonet.ch>
parents: 19215
diff changeset
189 def _modesetup(ui, coloropt):
14495
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
190 global _terminfo_params
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
191
22463
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
192 if coloropt == 'debug':
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
193 return 'debug'
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
194
21723
35eb333d61d5 color: add parenthesis to help readability
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21249
diff changeset
195 auto = (coloropt == 'auto')
14495
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
196 always = not auto and util.parsebool(coloropt)
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
197 if not always and not auto:
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
198 return None
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
199
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
200 formatted = always or (os.environ.get('TERM') != 'dumb' and ui.formatted())
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
201
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
202 mode = ui.config('color', 'mode', 'auto')
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
203 realmode = mode
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
204 if mode == 'auto':
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
205 if os.name == 'nt' and 'TERM' not in os.environ:
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
206 # looks line a cmd.exe console, use win32 API or nothing
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
207 realmode = 'win32'
14769
9adce4b38ed1 color: for the sake of "less -R", default to ansi in auto mode (issue2792)
Brodie Rao <brodie@bitheap.org>
parents: 14768
diff changeset
208 else:
14495
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
209 realmode = 'ansi'
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
210
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
211 if realmode == 'win32':
14989
9e9d4a762586 color.py - clear _terminfo_params in win32 mode
Andrei Vermel <avermel@mail.ru>
parents: 14769
diff changeset
212 _terminfo_params = {}
14768
55db12e54450 color: fix TypeError with auto mode on win32 when colors aren't available (issue2871)
Brodie Rao <brodie@bitheap.org>
parents: 14758
diff changeset
213 if not w32effects:
55db12e54450 color: fix TypeError with auto mode on win32 when colors aren't available (issue2871)
Brodie Rao <brodie@bitheap.org>
parents: 14758
diff changeset
214 if mode == 'win32':
55db12e54450 color: fix TypeError with auto mode on win32 when colors aren't available (issue2871)
Brodie Rao <brodie@bitheap.org>
parents: 14758
diff changeset
215 # only warn if color.mode is explicitly set to win32
55db12e54450 color: fix TypeError with auto mode on win32 when colors aren't available (issue2871)
Brodie Rao <brodie@bitheap.org>
parents: 14758
diff changeset
216 ui.warn(_('warning: failed to set color mode to %s\n') % mode)
14495
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
217 return None
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
218 _effects.update(w32effects)
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
219 elif realmode == 'ansi':
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
220 _terminfo_params = {}
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
221 elif realmode == 'terminfo':
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
222 _terminfosetup(ui, mode)
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
223 if not _terminfo_params:
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
224 if mode == 'terminfo':
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
225 ## FIXME Shouldn't we return None in this case too?
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
226 # only warn if color.mode is explicitly set to win32
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
227 ui.warn(_('warning: failed to set color mode to %s\n') % mode)
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
228 realmode = 'ansi'
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
229 else:
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
230 return None
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
231
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
232 if always or (auto and formatted):
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
233 return realmode
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
234 return None
ad6ad51cc0dd color: fix --color=always when output is piped
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14145
diff changeset
235
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
236 try:
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
237 import curses
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
238 # Mapping from effect name to terminfo attribute name or color number.
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
239 # This will also force-load the curses module.
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
240 _terminfo_params = {'none': (True, 'sgr0'),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
241 'standout': (True, 'smso'),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
242 'underline': (True, 'smul'),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
243 'reverse': (True, 'rev'),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
244 'inverse': (True, 'rev'),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
245 'blink': (True, 'blink'),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
246 'dim': (True, 'dim'),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
247 'bold': (True, 'bold'),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
248 'invisible': (True, 'invis'),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
249 'italic': (True, 'sitm'),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
250 'black': (False, curses.COLOR_BLACK),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
251 'red': (False, curses.COLOR_RED),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
252 'green': (False, curses.COLOR_GREEN),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
253 'yellow': (False, curses.COLOR_YELLOW),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
254 'blue': (False, curses.COLOR_BLUE),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
255 'magenta': (False, curses.COLOR_MAGENTA),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
256 'cyan': (False, curses.COLOR_CYAN),
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
257 'white': (False, curses.COLOR_WHITE)}
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
258 except ImportError:
21227
75aaae8ad660 color: don't fail on error messages when no curses (issue4237)
Mads Kiilerich <madski@unity3d.com>
parents: 21190
diff changeset
259 _terminfo_params = {}
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
260
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
261 _styles = {'grep.match': 'red bold',
17806
dc7010ed0101 grep: colorize all fields
Idan Kamara <idankk86@gmail.com>
parents: 17424
diff changeset
262 'grep.linenumber': 'green',
dc7010ed0101 grep: colorize all fields
Idan Kamara <idankk86@gmail.com>
parents: 17424
diff changeset
263 'grep.rev': 'green',
dc7010ed0101 grep: colorize all fields
Idan Kamara <idankk86@gmail.com>
parents: 17424
diff changeset
264 'grep.change': 'green',
dc7010ed0101 grep: colorize all fields
Idan Kamara <idankk86@gmail.com>
parents: 17424
diff changeset
265 'grep.sep': 'cyan',
dc7010ed0101 grep: colorize all fields
Idan Kamara <idankk86@gmail.com>
parents: 17424
diff changeset
266 'grep.filename': 'magenta',
dc7010ed0101 grep: colorize all fields
Idan Kamara <idankk86@gmail.com>
parents: 17424
diff changeset
267 'grep.user': 'magenta',
dc7010ed0101 grep: colorize all fields
Idan Kamara <idankk86@gmail.com>
parents: 17424
diff changeset
268 'grep.date': 'magenta',
13361
5b4252364ff9 bookmarks: move color style to color
Matt Mackall <mpm@selenic.com>
parents: 12807
diff changeset
269 'bookmarks.current': 'green',
11969
52ec5c813723 color: enable branches support
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 11750
diff changeset
270 'branches.active': 'none',
52ec5c813723 color: enable branches support
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 11750
diff changeset
271 'branches.closed': 'black bold',
52ec5c813723 color: enable branches support
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 11750
diff changeset
272 'branches.current': 'green',
52ec5c813723 color: enable branches support
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 11750
diff changeset
273 'branches.inactive': 'none',
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
274 'diff.changed': 'white',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
275 'diff.deleted': 'red',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
276 'diff.diffline': 'bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
277 'diff.extended': 'cyan bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
278 'diff.file_a': 'red bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
279 'diff.file_b': 'green bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
280 'diff.hunk': 'magenta',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
281 'diff.inserted': 'green',
22710
b07fd3ac8882 color: document the possibility to colourise tabs in diffs
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22465
diff changeset
282 'diff.tab': '',
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
283 'diff.trailingwhitespace': 'bold red_background',
22465
f8e2aebbb24c color: document that changeset phases have labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22464
diff changeset
284 'changeset.public' : '',
f8e2aebbb24c color: document that changeset phases have labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22464
diff changeset
285 'changeset.draft' : '',
f8e2aebbb24c color: document that changeset phases have labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22464
diff changeset
286 'changeset.secret' : '',
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
287 'diffstat.deleted': 'red',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
288 'diffstat.inserted': 'green',
19215
f184fe1e2ac5 summary: add a histedit hook
Bryan O'Sullivan <bryano@fb.com>
parents: 19214
diff changeset
289 'histedit.remaining': 'red bold',
13774
1ce0e80799c0 ui: label prompts, default to yellow prompts
Martin Geisler <mg@lazybytes.net>
parents: 13648
diff changeset
290 'ui.prompt': 'yellow',
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
291 'log.changeset': 'yellow',
19214
0250047a365e summary: indicate if a rebase is underway
Bryan O'Sullivan <bryano@fb.com>
parents: 19073
diff changeset
292 'rebase.rebased': 'blue',
0250047a365e summary: indicate if a rebase is underway
Bryan O'Sullivan <bryano@fb.com>
parents: 19073
diff changeset
293 'rebase.remaining': 'red bold',
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
294 'resolve.resolved': 'green bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
295 'resolve.unresolved': 'red bold',
19854
49d4919d21c2 shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents: 19298
diff changeset
296 'shelve.age': 'cyan',
49d4919d21c2 shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents: 19298
diff changeset
297 'shelve.newest': 'green bold',
49d4919d21c2 shelve: add a shelve extension to save/restore working changes
David Soria Parra <dsp@experimentalworks.net>
parents: 19298
diff changeset
298 'shelve.name': 'blue bold',
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
299 'status.added': 'green bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
300 'status.clean': 'none',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
301 'status.copied': 'none',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
302 'status.deleted': 'cyan bold underline',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
303 'status.ignored': 'black bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
304 'status.modified': 'blue bold',
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
305 'status.removed': 'red bold',
15048
2f0a3977c939 color: add styles for tags
Marc Simpson <marc@0branch.com>
parents: 14989
diff changeset
306 'status.unknown': 'magenta bold underline',
2f0a3977c939 color: add styles for tags
Marc Simpson <marc@0branch.com>
parents: 14989
diff changeset
307 'tags.normal': 'green',
2f0a3977c939 color: add styles for tags
Marc Simpson <marc@0branch.com>
parents: 14989
diff changeset
308 'tags.local': 'black bold'}
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
309
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
310
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
311 def _effect_str(effect):
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
312 '''Helper function for render_effects().'''
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
313
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
314 bg = False
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
315 if effect.endswith('_background'):
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
316 bg = True
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
317 effect = effect[:-11]
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
318 attr, val = _terminfo_params[effect]
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
319 if attr:
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
320 return curses.tigetstr(val)
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
321 elif bg:
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
322 return curses.tparm(curses.tigetstr('setab'), val)
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
323 else:
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
324 return curses.tparm(curses.tigetstr('setaf'), val)
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
325
8622
0a4f6e1b78dc color: use lists instead of tuples for effects
Martin Geisler <mg@lazybytes.net>
parents: 8278
diff changeset
326 def render_effects(text, effects):
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
327 'Wrap text in commands to turn on each effect.'
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
328 if not text:
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
329 return text
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
330 if not _terminfo_params:
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
331 start = [str(_effects[e]) for e in ['none'] + effects.split()]
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
332 start = '\033[' + ';'.join(start) + 'm'
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
333 stop = '\033[' + str(_effects['none']) + 'm'
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
334 else:
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
335 start = ''.join(_effect_str(effect)
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
336 for effect in ['none'] + effects.split())
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
337 stop = _effect_str('none')
7459
3fb5c142a9f0 color: replace effect-specific reset control codes with general purpose one
Brodie Rao <me+hg@dackz.net>
parents: 7457
diff changeset
338 return ''.join([start, text, stop])
5787
b7b22a2ade2e Add colored output to status and qseries commands
Kevin Christen <kevin.christen@gmail.com>
parents:
diff changeset
339
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
340 def extstyles():
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
341 for name, ext in extensions.extensions():
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
342 _styles.update(getattr(ext, 'colortable', {}))
7456
79eb16db5e4a color: diff colorization
Brodie Rao <me+hg@dackz.net>
parents: 7455
diff changeset
343
20992
05086b56b564 color: extract method for determining a valid effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20670
diff changeset
344 def valideffect(effect):
05086b56b564 color: extract method for determining a valid effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20670
diff changeset
345 'Determine if the effect is valid or not.'
05086b56b564 color: extract method for determining a valid effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20670
diff changeset
346 good = False
05086b56b564 color: extract method for determining a valid effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20670
diff changeset
347 if not _terminfo_params and effect in _effects:
05086b56b564 color: extract method for determining a valid effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20670
diff changeset
348 good = True
05086b56b564 color: extract method for determining a valid effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20670
diff changeset
349 elif effect in _terminfo_params or effect[:-11] in _terminfo_params:
05086b56b564 color: extract method for determining a valid effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20670
diff changeset
350 good = True
05086b56b564 color: extract method for determining a valid effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20670
diff changeset
351 return good
05086b56b564 color: extract method for determining a valid effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20670
diff changeset
352
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
353 def configstyles(ui):
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
354 for status, cfgeffects in ui.configitems('color'):
13987
e0f07847f8de color: add support for terminfo-based attributes and color
Danek Duvall <duvall@comfychair.org>
parents: 13919
diff changeset
355 if '.' not in status or status.startswith('color.'):
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
356 continue
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
357 cfgeffects = ui.configlist('color', status)
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
358 if cfgeffects:
8945
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
359 good = []
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
360 for e in cfgeffects:
20992
05086b56b564 color: extract method for determining a valid effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20670
diff changeset
361 if valideffect(e):
8945
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
362 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
363 else:
7b3d837ca60e color: don't blow up if configured with unknown color (just warn).
Greg Ward <greg-hg@gerg.ca>
parents: 8894
diff changeset
364 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
365 "(configured in color.%s)\n")
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
366 % (e, status))
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
367 _styles[status] = ' '.join(good)
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
368
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
369 class colorui(uimod.ui):
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
370 def popbuffer(self, labeled=False):
19072
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
371 if self._colormode is None:
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
372 return super(colorui, self).popbuffer(labeled)
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
373
21190
2606e7f227f6 color: add missing handling of stderr capture introduced by 350dc24a553d
Yuya Nishihara <yuya@tcha.org>
parents: 21037
diff changeset
374 self._bufferstates.pop()
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
375 if labeled:
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
376 return ''.join(self.label(a, label) for a, label
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
377 in self._buffers.pop())
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
378 return ''.join(a for a, label in self._buffers.pop())
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
379
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
380 _colormode = 'ansi'
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
381 def write(self, *args, **opts):
19072
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
382 if self._colormode is None:
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
383 return super(colorui, self).write(*args, **opts)
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
384
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
385 label = opts.get('label', '')
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
386 if self._buffers:
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
387 self._buffers[-1].extend([(str(a), label) for a in args])
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
388 elif self._colormode == 'win32':
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
389 for a in args:
11727
c34a1ab80550 color: pass write/write_err to win32print correctly (issue2312)
Brodie Rao <brodie@bitheap.org>
parents: 11555
diff changeset
390 win32print(a, super(colorui, self).write, **opts)
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
391 else:
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
392 return super(colorui, self).write(
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
393 *[self.label(str(a), label) for a in args], **opts)
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
394
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
395 def write_err(self, *args, **opts):
19072
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
396 if self._colormode is None:
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
397 return super(colorui, self).write_err(*args, **opts)
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
398
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
399 label = opts.get('label', '')
21190
2606e7f227f6 color: add missing handling of stderr capture introduced by 350dc24a553d
Yuya Nishihara <yuya@tcha.org>
parents: 21037
diff changeset
400 if self._bufferstates and self._bufferstates[-1]:
2606e7f227f6 color: add missing handling of stderr capture introduced by 350dc24a553d
Yuya Nishihara <yuya@tcha.org>
parents: 21037
diff changeset
401 return self.write(*args, **opts)
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
402 if self._colormode == 'win32':
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
403 for a in args:
11727
c34a1ab80550 color: pass write/write_err to win32print correctly (issue2312)
Brodie Rao <brodie@bitheap.org>
parents: 11555
diff changeset
404 win32print(a, super(colorui, self).write_err, **opts)
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
405 else:
11732
386e56ecfb78 color: call correct superclass method in write_err
Brodie Rao <brodie@bitheap.org>
parents: 11727
diff changeset
406 return super(colorui, self).write_err(
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
407 *[self.label(str(a), label) for a in args], **opts)
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
408
22463
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
409 def showlabel(self, msg, label):
22763
7ebf91426f6a color: omit debug label output on empty strings
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22711
diff changeset
410 if label and msg:
7ebf91426f6a color: omit debug label output on empty strings
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22711
diff changeset
411 if msg[-1] == '\n':
22464
964dd1c491ca color: change the debug output format
Matt Mackall <mpm@selenic.com>
parents: 22463
diff changeset
412 return "[%s|%s]\n" % (label, msg[:-1])
22463
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
413 else:
22464
964dd1c491ca color: change the debug output format
Matt Mackall <mpm@selenic.com>
parents: 22463
diff changeset
414 return "[%s|%s]" % (label, msg)
22463
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
415 else:
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
416 return msg
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
417
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
418 def label(self, msg, label):
19072
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
419 if self._colormode is None:
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
420 return super(colorui, self).label(msg, label)
b7b50a54bec9 color: turn colorui functions into forwards when color is None
Siddharth Agarwal <sid0@fb.com>
parents: 19063
diff changeset
421
22463
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
422 if self._colormode == 'debug':
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
423 return self.showlabel(msg, label)
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
424
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
425 effects = []
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
426 for l in label.split():
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
427 s = _styles.get(l, '')
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
428 if s:
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
429 effects.append(s)
20993
a8db48e997b5 color: fallback and test label as an effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20992
diff changeset
430 elif valideffect(l):
a8db48e997b5 color: fallback and test label as an effect
Sean Farley <sean.michael.farley@gmail.com>
parents: 20992
diff changeset
431 effects.append(l)
14145
4b7e4b9db8fb color: fix using multiple effects
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 14139
diff changeset
432 effects = ' '.join(effects)
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
433 if effects:
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
434 return '\n'.join([render_effects(s, effects)
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
435 for s in msg.split('\n')])
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
436 return msg
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
437
18290
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
438 def templatelabel(context, mapping, args):
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
439 if len(args) != 2:
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
440 # i18n: "label" is a keyword
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
441 raise error.ParseError(_("label expects two arguments"))
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
442
21037
b775a2029e8d color: add effect to the template symbol table
Sean Farley <sean.michael.farley@gmail.com>
parents: 21024
diff changeset
443 # add known effects to the mapping so symbols like 'red', 'bold',
b775a2029e8d color: add effect to the template symbol table
Sean Farley <sean.michael.farley@gmail.com>
parents: 21024
diff changeset
444 # etc. don't need to be quoted
b775a2029e8d color: add effect to the template symbol table
Sean Farley <sean.michael.farley@gmail.com>
parents: 21024
diff changeset
445 mapping.update(dict([(k, k) for k in _effects]))
b775a2029e8d color: add effect to the template symbol table
Sean Farley <sean.michael.farley@gmail.com>
parents: 21024
diff changeset
446
20067
3d8bfe2ecf6d templater: only recursively evaluate string literals as templates (issue4103)
Matt Mackall <mpm@selenic.com>
parents: 19854
diff changeset
447 thing = templater._evalifliteral(args[1], context, mapping)
18290
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
448
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
449 # apparently, repo could be a string that is the favicon?
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
450 repo = mapping.get('repo', '')
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
451 if isinstance(repo, str):
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
452 return thing
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
453
20661
7e627fe63e5e templater: avoid recursive evaluation of string literals completely
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20067
diff changeset
454 label = templater._evalifliteral(args[0], context, mapping)
18290
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
455
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
456 thing = templater.stringify(thing)
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
457 label = templater.stringify(label)
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
458
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
459 return repo.ui.label(thing, label)
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
460
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
461 def uisetup(ui):
10871
3f30190781a3 color: respect HGPLAIN
Steve Borho <steve@borho.org>
parents: 10870
diff changeset
462 if ui.plain():
3f30190781a3 color: respect HGPLAIN
Steve Borho <steve@borho.org>
parents: 10870
diff changeset
463 return
19298
6cd8403e070f color: use pythons isinstance method instead of reprogramming it
Simon Heimberg <simohe@besonet.ch>
parents: 19297
diff changeset
464 if not isinstance(ui, colorui):
19063
7ae12ce87594 color: set the ui class in reposetup, before a repo is created
Simon Heimberg <simohe@besonet.ch>
parents: 18921
diff changeset
465 colorui.__bases__ = (ui.__class__,)
7ae12ce87594 color: set the ui class in reposetup, before a repo is created
Simon Heimberg <simohe@besonet.ch>
parents: 18921
diff changeset
466 ui.__class__ = colorui
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
467 def colorcmd(orig, ui_, opts, cmd, cmdfunc):
19297
8ddc3cd962ba color: only provide the required opt to _modesetup
Simon Heimberg <simohe@besonet.ch>
parents: 19215
diff changeset
468 mode = _modesetup(ui_, opts['color'])
19073
d78d0256198e color: set _colormode to None when mode is unset (issue3895)
Siddharth Agarwal <sid0@fb.com>
parents: 19072
diff changeset
469 colorui._colormode = mode
22463
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
470 if mode and mode != 'debug':
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
471 extstyles()
11555
d8d0fc3988ca color/progress: subclass ui instead of using wrapfunction (issue2096)
Brodie Rao <brodie@bitheap.org>
parents: 11326
diff changeset
472 configstyles(ui_)
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
473 return orig(ui_, opts, cmd, cmdfunc)
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
474 extensions.wrapfunction(dispatch, '_runcommand', colorcmd)
18290
323e1267de36 color: add template label function
Sean Farley <sean.michael.farley@gmail.com>
parents: 17806
diff changeset
475 templater.funcs['label'] = templatelabel
10826
717c35d55fb3 color: colorize based on output labels instead of parsing output
Brodie Rao <brodie@bitheap.org>
parents: 10477
diff changeset
476
12693
33f0682ba8b1 color: add global option in extsetup() instead of globally
Brodie Rao <brodie@bitheap.org>
parents: 12278
diff changeset
477 def extsetup(ui):
33f0682ba8b1 color: add global option in extsetup() instead of globally
Brodie Rao <brodie@bitheap.org>
parents: 12278
diff changeset
478 commands.globalopts.append(
33f0682ba8b1 color: add global option in extsetup() instead of globally
Brodie Rao <brodie@bitheap.org>
parents: 12278
diff changeset
479 ('', 'color', 'auto',
22463
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
480 # i18n: 'always', 'auto', 'never', and 'debug' are keywords
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
481 # and should not be translated
1c4ae0f6a30f color: enable debug option to show labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22462
diff changeset
482 _("when to colorize (boolean, always, auto, never, or debug)"),
12693
33f0682ba8b1 color: add global option in extsetup() instead of globally
Brodie Rao <brodie@bitheap.org>
parents: 12278
diff changeset
483 _('TYPE')))
10870
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
484
21249
2b8697e20978 color: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21227
diff changeset
485 @command('debugcolor', [], 'hg debugcolor')
20455
a2c08adbb86e color: add debugcolor command (issue4094)
Olle Lundberg <geek@nerd.sh>
parents: 20067
diff changeset
486 def debugcolor(ui, repo, **opts):
a2c08adbb86e color: add debugcolor command (issue4094)
Olle Lundberg <geek@nerd.sh>
parents: 20067
diff changeset
487 global _styles
a2c08adbb86e color: add debugcolor command (issue4094)
Olle Lundberg <geek@nerd.sh>
parents: 20067
diff changeset
488 _styles = {}
a2c08adbb86e color: add debugcolor command (issue4094)
Olle Lundberg <geek@nerd.sh>
parents: 20067
diff changeset
489 for effect in _effects.keys():
a2c08adbb86e color: add debugcolor command (issue4094)
Olle Lundberg <geek@nerd.sh>
parents: 20067
diff changeset
490 _styles[effect] = effect
21024
7731a2281cf0 spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents: 20993
diff changeset
491 ui.write(('color mode: %s\n') % ui._colormode)
20455
a2c08adbb86e color: add debugcolor command (issue4094)
Olle Lundberg <geek@nerd.sh>
parents: 20067
diff changeset
492 ui.write(_('available colors:\n'))
a2c08adbb86e color: add debugcolor command (issue4094)
Olle Lundberg <geek@nerd.sh>
parents: 20067
diff changeset
493 for label, colors in _styles.items():
a2c08adbb86e color: add debugcolor command (issue4094)
Olle Lundberg <geek@nerd.sh>
parents: 20067
diff changeset
494 ui.write(('%s\n') % colors, label=label)
a2c08adbb86e color: add debugcolor command (issue4094)
Olle Lundberg <geek@nerd.sh>
parents: 20067
diff changeset
495
13641
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
496 if os.name != 'nt':
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
497 w32effects = None
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
498 else:
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
499 import re, ctypes
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
500
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
501 _kernel32 = ctypes.windll.kernel32
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
502
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
503 _WORD = ctypes.c_ushort
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
504
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
505 _INVALID_HANDLE_VALUE = -1
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
506
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
507 class _COORD(ctypes.Structure):
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
508 _fields_ = [('X', ctypes.c_short),
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
509 ('Y', ctypes.c_short)]
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
510
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
511 class _SMALL_RECT(ctypes.Structure):
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
512 _fields_ = [('Left', ctypes.c_short),
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
513 ('Top', ctypes.c_short),
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
514 ('Right', ctypes.c_short),
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
515 ('Bottom', ctypes.c_short)]
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
516
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
517 class _CONSOLE_SCREEN_BUFFER_INFO(ctypes.Structure):
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
518 _fields_ = [('dwSize', _COORD),
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
519 ('dwCursorPosition', _COORD),
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
520 ('wAttributes', _WORD),
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
521 ('srWindow', _SMALL_RECT),
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
522 ('dwMaximumWindowSize', _COORD)]
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
523
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
524 _STD_OUTPUT_HANDLE = 0xfffffff5L # (DWORD)-11
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
525 _STD_ERROR_HANDLE = 0xfffffff4L # (DWORD)-12
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
526
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
527 _FOREGROUND_BLUE = 0x0001
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
528 _FOREGROUND_GREEN = 0x0002
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
529 _FOREGROUND_RED = 0x0004
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
530 _FOREGROUND_INTENSITY = 0x0008
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
531
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
532 _BACKGROUND_BLUE = 0x0010
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
533 _BACKGROUND_GREEN = 0x0020
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
534 _BACKGROUND_RED = 0x0040
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
535 _BACKGROUND_INTENSITY = 0x0080
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
536
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
537 _COMMON_LVB_REVERSE_VIDEO = 0x4000
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
538 _COMMON_LVB_UNDERSCORE = 0x8000
10870
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
539
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
540 # http://msdn.microsoft.com/en-us/library/ms682088%28VS.85%29.aspx
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
541 w32effects = {
12277
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
542 'none': -1,
10870
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
543 'black': 0,
13641
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
544 'red': _FOREGROUND_RED,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
545 'green': _FOREGROUND_GREEN,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
546 'yellow': _FOREGROUND_RED | _FOREGROUND_GREEN,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
547 'blue': _FOREGROUND_BLUE,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
548 'magenta': _FOREGROUND_BLUE | _FOREGROUND_RED,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
549 'cyan': _FOREGROUND_BLUE | _FOREGROUND_GREEN,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
550 'white': _FOREGROUND_RED | _FOREGROUND_GREEN | _FOREGROUND_BLUE,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
551 'bold': _FOREGROUND_INTENSITY,
12278
c4c2ba553401 merge with stable
Sune Foldager <cryo@cyanite.org>
parents: 12089 12277
diff changeset
552 'black_background': 0x100, # unused value > 0x0f
13641
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
553 'red_background': _BACKGROUND_RED,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
554 'green_background': _BACKGROUND_GREEN,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
555 'yellow_background': _BACKGROUND_RED | _BACKGROUND_GREEN,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
556 'blue_background': _BACKGROUND_BLUE,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
557 'purple_background': _BACKGROUND_BLUE | _BACKGROUND_RED,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
558 'cyan_background': _BACKGROUND_BLUE | _BACKGROUND_GREEN,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
559 'white_background': (_BACKGROUND_RED | _BACKGROUND_GREEN |
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
560 _BACKGROUND_BLUE),
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
561 'bold_background': _BACKGROUND_INTENSITY,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
562 'underline': _COMMON_LVB_UNDERSCORE, # double-byte charsets only
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
563 'inverse': _COMMON_LVB_REVERSE_VIDEO, # double-byte charsets only
10870
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
564 }
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
565
13641
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
566 passthrough = set([_FOREGROUND_INTENSITY,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
567 _BACKGROUND_INTENSITY,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
568 _COMMON_LVB_UNDERSCORE,
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
569 _COMMON_LVB_REVERSE_VIDEO])
12277
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
570
13641
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
571 stdout = _kernel32.GetStdHandle(
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
572 _STD_OUTPUT_HANDLE) # don't close the handle returned
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
573 if stdout is None or stdout == _INVALID_HANDLE_VALUE:
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
574 w32effects = None
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
575 else:
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
576 csbi = _CONSOLE_SCREEN_BUFFER_INFO()
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
577 if not _kernel32.GetConsoleScreenBufferInfo(
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
578 stdout, ctypes.byref(csbi)):
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
579 # stdout may not support GetConsoleScreenBufferInfo()
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
580 # when called from subprocess or redirected
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
581 w32effects = None
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
582 else:
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
583 origattr = csbi.wAttributes
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
584 ansire = re.compile('\033\[([^m]*)m([^\033]*)(.*)',
2420cb1ea1d6 color: port to using ctypes (issue2687)
Adrian Buehlmann <adrian@cadifra.com>
parents: 13635
diff changeset
585 re.MULTILINE | re.DOTALL)
10870
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
586
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
587 def win32print(text, orig, **opts):
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
588 label = opts.get('label', '')
12277
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
589 attr = origattr
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
590
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
591 def mapcolor(val, attr):
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
592 if val == -1:
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
593 return origattr
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
594 elif val in passthrough:
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
595 return attr | val
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
596 elif val > 0x0f:
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
597 return (val & 0x70) | (attr & 0x8f)
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
598 else:
a7d3147bd4b3 color: add win32 support for non-black background
Sune Foldager <cryo@cyanite.org>
parents: 12083
diff changeset
599 return (val & 0x07) | (attr & 0xf8)
10870
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
600
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
601 # determine console attributes based on labels
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
602 for l in label.split():
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
603 style = _styles.get(l, '')
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
604 for effect in style.split():
21991
aca137619a45 color: pass on key error for win32 (issue4298)
Sean Farley <sean.michael.farley@gmail.com>
parents: 21723
diff changeset
605 try:
aca137619a45 color: pass on key error for win32 (issue4298)
Sean Farley <sean.michael.farley@gmail.com>
parents: 21723
diff changeset
606 attr = mapcolor(w32effects[effect], attr)
aca137619a45 color: pass on key error for win32 (issue4298)
Sean Farley <sean.michael.farley@gmail.com>
parents: 21723
diff changeset
607 except KeyError:
aca137619a45 color: pass on key error for win32 (issue4298)
Sean Farley <sean.michael.farley@gmail.com>
parents: 21723
diff changeset
608 # w32effects could not have certain attributes so we skip
aca137619a45 color: pass on key error for win32 (issue4298)
Sean Farley <sean.michael.farley@gmail.com>
parents: 21723
diff changeset
609 # them if not found
aca137619a45 color: pass on key error for win32 (issue4298)
Sean Farley <sean.michael.farley@gmail.com>
parents: 21723
diff changeset
610 pass
10870
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
611 # hack to ensure regexp finds data
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
612 if not text.startswith('\033['):
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
613 text = '\033[m' + text
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
614
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
615 # Look for ANSI-like codes embedded in text
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
616 m = re.match(ansire, text)
a4944b430417 color: add support for Windows consoles
Steve Borho <steve@borho.org>
parents: 10869
diff changeset
617
13919
67f20625703f color: reset win32 console color in a finally block
Idan Kamara <idankk86@gmail.com>
parents: 13774
diff changeset
618 try:
67f20625703f color: reset win32 console color in a finally block
Idan Kamara <idankk86@gmail.com>
parents: 13774
diff changeset
619 while m:
67f20625703f color: reset win32 console color in a finally block
Idan Kamara <idankk86@gmail.com>
parents: 13774
diff changeset
620 for sattr in m.group(1).split(';'):
67f20625703f color: reset win32 console color in a finally block
Idan Kamara <idankk86@gmail.com>
parents: 13774
diff changeset
621 if sattr:
67f20625703f color: reset win32 console color in a finally block
Idan Kamara <idankk86@gmail.com>
parents: 13774
diff changeset
622 attr = mapcolor(int(sattr), attr)
67f20625703f color: reset win32 console color in a finally block
Idan Kamara <idankk86@gmail.com>
parents: 13774
diff changeset
623 _kernel32.SetConsoleTextAttribute(stdout, attr)
67f20625703f color: reset win32 console color in a finally block
Idan Kamara <idankk86@gmail.com>
parents: 13774
diff changeset
624 orig(m.group(2), **opts)
67f20625703f color: reset win32 console color in a finally block
Idan Kamara <idankk86@gmail.com>
parents: 13774
diff changeset
625 m = re.match(ansire, m.group(3))
67f20625703f color: reset win32 console color in a finally block
Idan Kamara <idankk86@gmail.com>
parents: 13774
diff changeset
626 finally:
17424
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 16743
diff changeset
627 # Explicitly reset original attributes
13919
67f20625703f color: reset win32 console color in a finally block
Idan Kamara <idankk86@gmail.com>
parents: 13774
diff changeset
628 _kernel32.SetConsoleTextAttribute(stdout, origattr)