Mercurial > hg
annotate mercurial/color.py @ 41971:99e00e5c4746
py3: convert to/from bytes/unicode for json.(dump|load)s in debugcallconduit
Differential Revision: https://phab.mercurial-scm.org/D6113
author | Ian Moody <moz-ian@perix.co.uk> |
---|---|
date | Sat, 09 Mar 2019 02:18:49 +0000 |
parents | a91615b71679 |
children | 2372284d9457 |
rev | line source |
---|---|
30652
1ec42bdd7874
color: move hgext.color._styles to mercurial.color.style
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
1 # utility for color output for Mercurial commands |
1ec42bdd7874
color: move hgext.color._styles to mercurial.color.style
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
2 # |
1ec42bdd7874
color: move hgext.color._styles to mercurial.color.style
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
3 # Copyright (C) 2007 Kevin Christen <kevin.christen@gmail.com> and other |
1ec42bdd7874
color: move hgext.color._styles to mercurial.color.style
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
4 # |
1ec42bdd7874
color: move hgext.color._styles to mercurial.color.style
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
1ec42bdd7874
color: move hgext.color._styles to mercurial.color.style
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
1ec42bdd7874
color: move hgext.color._styles to mercurial.color.style
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
7 |
1ec42bdd7874
color: move hgext.color._styles to mercurial.color.style
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
8 from __future__ import absolute_import |
1ec42bdd7874
color: move hgext.color._styles to mercurial.color.style
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
9 |
31521
44c591f63458
templater: make pad() strip color codes before computing width (issue5416)
Yuya Nishihara <yuya@tcha.org>
parents:
31518
diff
changeset
|
10 import re |
44c591f63458
templater: make pad() strip color codes before computing width (issue5416)
Yuya Nishihara <yuya@tcha.org>
parents:
31518
diff
changeset
|
11 |
30971
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
12 from .i18n import _ |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
13 |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
14 from . import ( |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
15 encoding, |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
16 pycompat, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36502
diff
changeset
|
17 ) |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36502
diff
changeset
|
18 |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36502
diff
changeset
|
19 from .utils import ( |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36502
diff
changeset
|
20 stringutil, |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
21 ) |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
22 |
30968
0d2a58a04080
color: move '_terminfo_params' into the core 'color' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30967
diff
changeset
|
23 try: |
0d2a58a04080
color: move '_terminfo_params' into the core 'color' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30967
diff
changeset
|
24 import curses |
0d2a58a04080
color: move '_terminfo_params' into the core 'color' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30967
diff
changeset
|
25 # Mapping from effect name to terminfo attribute name (or raw code) or |
0d2a58a04080
color: move '_terminfo_params' into the core 'color' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30967
diff
changeset
|
26 # color number. This will also force-load the curses module. |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
27 _baseterminfoparams = { |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
28 'none': (True, 'sgr0', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
29 'standout': (True, 'smso', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
30 'underline': (True, 'smul', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
31 'reverse': (True, 'rev', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
32 'inverse': (True, 'rev', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
33 'blink': (True, 'blink', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
34 'dim': (True, 'dim', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
35 'bold': (True, 'bold', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
36 'invisible': (True, 'invis', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
37 'italic': (True, 'sitm', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
38 'black': (False, curses.COLOR_BLACK, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
39 'red': (False, curses.COLOR_RED, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
40 'green': (False, curses.COLOR_GREEN, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
41 'yellow': (False, curses.COLOR_YELLOW, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
42 'blue': (False, curses.COLOR_BLUE, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
43 'magenta': (False, curses.COLOR_MAGENTA, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
44 'cyan': (False, curses.COLOR_CYAN, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
45 'white': (False, curses.COLOR_WHITE, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
46 } |
30968
0d2a58a04080
color: move '_terminfo_params' into the core 'color' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30967
diff
changeset
|
47 except ImportError: |
0d2a58a04080
color: move '_terminfo_params' into the core 'color' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30967
diff
changeset
|
48 curses = None |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
49 _baseterminfoparams = {} |
30968
0d2a58a04080
color: move '_terminfo_params' into the core 'color' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30967
diff
changeset
|
50 |
30967
20990991d384
color: move '_effect' mapping into core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30653
diff
changeset
|
51 # start and stop parameters for effects |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
52 _effects = { |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
53 'none': 0, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
54 'black': 30, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
55 'red': 31, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
56 'green': 32, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
57 'yellow': 33, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
58 'blue': 34, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
59 'magenta': 35, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
60 'cyan': 36, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
61 'white': 37, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
62 'bold': 1, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
63 'italic': 3, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
64 'underline': 4, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
65 'inverse': 7, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
66 'dim': 2, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
67 'black_background': 40, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
68 'red_background': 41, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
69 'green_background': 42, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
70 'yellow_background': 43, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
71 'blue_background': 44, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
72 'purple_background': 45, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
73 'cyan_background': 46, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
74 'white_background': 47, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
75 } |
30967
20990991d384
color: move '_effect' mapping into core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30653
diff
changeset
|
76 |
31116
6483e49204ee
color: rename '_styles' to '_defaultstyles' for clarity
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31115
diff
changeset
|
77 _defaultstyles = { |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
78 'grep.match': 'red bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
79 'grep.linenumber': 'green', |
41741
a91615b71679
color: change color of grep.rev label (BC)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41740
diff
changeset
|
80 'grep.rev': 'blue', |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
81 'grep.sep': 'cyan', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
82 'grep.filename': 'magenta', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
83 'grep.user': 'magenta', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
84 'grep.date': 'magenta', |
41740
ee77a6dd8fb8
color: give colours to the grep.inserted and grep.deleted labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41532
diff
changeset
|
85 'grep.inserted': 'green bold', |
ee77a6dd8fb8
color: give colours to the grep.inserted and grep.deleted labels
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
41532
diff
changeset
|
86 'grep.deleted': 'red bold', |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
87 'bookmarks.active': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
88 'branches.active': 'none', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
89 'branches.closed': 'black bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
90 'branches.current': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
91 'branches.inactive': 'none', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
92 'diff.changed': 'white', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
93 'diff.deleted': 'red', |
37799
1770d8b3e554
diff: restore original color scheme for worddiff
Yuya Nishihara <yuya@tcha.org>
parents:
37732
diff
changeset
|
94 'diff.deleted.changed': 'red bold underline', |
1770d8b3e554
diff: restore original color scheme for worddiff
Yuya Nishihara <yuya@tcha.org>
parents:
37732
diff
changeset
|
95 'diff.deleted.unchanged': 'red', |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
96 'diff.diffline': 'bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
97 'diff.extended': 'cyan bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
98 'diff.file_a': 'red bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
99 'diff.file_b': 'green bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
100 'diff.hunk': 'magenta', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
101 'diff.inserted': 'green', |
37799
1770d8b3e554
diff: restore original color scheme for worddiff
Yuya Nishihara <yuya@tcha.org>
parents:
37732
diff
changeset
|
102 'diff.inserted.changed': 'green bold underline', |
1770d8b3e554
diff: restore original color scheme for worddiff
Yuya Nishihara <yuya@tcha.org>
parents:
37732
diff
changeset
|
103 'diff.inserted.unchanged': 'green', |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
104 'diff.tab': '', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
105 'diff.trailingwhitespace': 'bold red_background', |
34486
a57c938e7ac8
style: never use a space before a colon or comma
Alex Gaynor <agaynor@mozilla.com>
parents:
34131
diff
changeset
|
106 'changeset.public': '', |
a57c938e7ac8
style: never use a space before a colon or comma
Alex Gaynor <agaynor@mozilla.com>
parents:
34131
diff
changeset
|
107 'changeset.draft': '', |
a57c938e7ac8
style: never use a space before a colon or comma
Alex Gaynor <agaynor@mozilla.com>
parents:
34131
diff
changeset
|
108 'changeset.secret': '', |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
109 'diffstat.deleted': 'red', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
110 'diffstat.inserted': 'green', |
35338
bd326f3e0e14
debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
111 'formatvariant.name.mismatchconfig': 'red', |
bd326f3e0e14
debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
112 'formatvariant.name.mismatchdefault': 'yellow', |
bd326f3e0e14
debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
113 'formatvariant.name.uptodate': 'green', |
bd326f3e0e14
debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
114 'formatvariant.repo.mismatchconfig': 'red', |
bd326f3e0e14
debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
115 'formatvariant.repo.mismatchdefault': 'yellow', |
bd326f3e0e14
debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
116 'formatvariant.repo.uptodate': 'green', |
bd326f3e0e14
debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
117 'formatvariant.config.special': 'yellow', |
bd326f3e0e14
debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
118 'formatvariant.config.default': 'green', |
bd326f3e0e14
debugformat: update label depending on value difference
Boris Feld <boris.feld@octobus.net>
parents:
35277
diff
changeset
|
119 'formatvariant.default': '', |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
120 'histedit.remaining': 'red bold', |
40367
824b687ff6af
addremove: add "ui." prefix to message color keys
Yuya Nishihara <yuya@tcha.org>
parents:
40223
diff
changeset
|
121 'ui.addremove.added': 'green', |
824b687ff6af
addremove: add "ui." prefix to message color keys
Yuya Nishihara <yuya@tcha.org>
parents:
40223
diff
changeset
|
122 'ui.addremove.removed': 'red', |
38768
afc4ad706f9c
dispatch: making all hg abortions be output with a specific label
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
37799
diff
changeset
|
123 'ui.error': 'red', |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
124 'ui.prompt': 'yellow', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
125 'log.changeset': 'yellow', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
126 'patchbomb.finalsummary': '', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
127 'patchbomb.from': 'magenta', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
128 'patchbomb.to': 'cyan', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
129 'patchbomb.subject': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
130 'patchbomb.diffstats': '', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
131 'rebase.rebased': 'blue', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
132 'rebase.remaining': 'red bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
133 'resolve.resolved': 'green bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
134 'resolve.unresolved': 'red bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
135 'shelve.age': 'cyan', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
136 'shelve.newest': 'green bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
137 'shelve.name': 'blue bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
138 'status.added': 'green bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
139 'status.clean': 'none', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
140 'status.copied': 'none', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
141 'status.deleted': 'cyan bold underline', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
142 'status.ignored': 'black bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
143 'status.modified': 'blue bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
144 'status.removed': 'red bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
145 'status.unknown': 'magenta bold underline', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
146 'tags.normal': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
147 'tags.local': 'black bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
148 } |
30653
b2be4ccaff1d
color: load 'colortable' from extension using an 'extraloader'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30652
diff
changeset
|
149 |
b2be4ccaff1d
color: load 'colortable' from extension using an 'extraloader'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30652
diff
changeset
|
150 def loadcolortable(ui, extname, colortable): |
31116
6483e49204ee
color: rename '_styles' to '_defaultstyles' for clarity
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31115
diff
changeset
|
151 _defaultstyles.update(colortable) |
30969
ddc80d1777a6
color: move 'valideffect' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30968
diff
changeset
|
152 |
33680
f9f28ee41cac
color: remove warnings if term is not formatted (==dumb or !ui.formatted())
Kyle Lippincott <spectral@google.com>
parents:
33522
diff
changeset
|
153 def _terminfosetup(ui, mode, formatted): |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
154 '''Initialize terminfo data and the terminal if we're in terminfo mode.''' |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
155 |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
156 # If we failed to load curses, we go ahead and return. |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
157 if curses is None: |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
158 return |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
159 # Otherwise, see what the config file says. |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
160 if mode not in ('auto', 'terminfo'): |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
161 return |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
162 ui._terminfoparams.update(_baseterminfoparams) |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
163 |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
164 for key, val in ui.configitems('color'): |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
165 if key.startswith('color.'): |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
166 newval = (False, int(val), '') |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
167 ui._terminfoparams[key[6:]] = newval |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
168 elif key.startswith('terminfo.'): |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
169 newval = (True, '', val.replace('\\E', '\x1b')) |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
170 ui._terminfoparams[key[9:]] = newval |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
171 try: |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
172 curses.setupterm() |
41365
876494fd967d
cleanup: delete lots of unused local variables
Martin von Zweigbergk <martinvonz@google.com>
parents:
40970
diff
changeset
|
173 except curses.error: |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
174 ui._terminfoparams.clear() |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
175 return |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
176 |
37662
5340daa85c62
py3: iterate over a copy of dict while changing it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37084
diff
changeset
|
177 for key, (b, e, c) in ui._terminfoparams.copy().items(): |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
178 if not b: |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
179 continue |
37664
483cafc3762a
py3: make sure curses.tigetstr() first argument is a str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37662
diff
changeset
|
180 if not c and not curses.tigetstr(pycompat.sysstr(e)): |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
181 # Most terminals don't support dim, invis, etc, so don't be |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
182 # noisy and use ui.debug(). |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
183 ui.debug("no terminfo entry for %s\n" % e) |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
184 del ui._terminfoparams[key] |
37664
483cafc3762a
py3: make sure curses.tigetstr() first argument is a str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37662
diff
changeset
|
185 if not curses.tigetstr(r'setaf') or not curses.tigetstr(r'setab'): |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
186 # Only warn about missing terminfo entries if we explicitly asked for |
33680
f9f28ee41cac
color: remove warnings if term is not formatted (==dumb or !ui.formatted())
Kyle Lippincott <spectral@google.com>
parents:
33522
diff
changeset
|
187 # terminfo mode and we're in a formatted terminal. |
f9f28ee41cac
color: remove warnings if term is not formatted (==dumb or !ui.formatted())
Kyle Lippincott <spectral@google.com>
parents:
33522
diff
changeset
|
188 if mode == "terminfo" and formatted: |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
189 ui.warn(_("no terminfo entry for setab/setaf: reverting to " |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
190 "ECMA-48 color\n")) |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
191 ui._terminfoparams.clear() |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
192 |
31110
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
193 def setup(ui): |
31105
45be7590301d
color: move triggering of the initialisation logic in core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31103
diff
changeset
|
194 """configure color on a ui |
45be7590301d
color: move triggering of the initialisation logic in core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31103
diff
changeset
|
195 |
31110
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
196 That function both set the colormode for the ui object and read |
31105
45be7590301d
color: move triggering of the initialisation logic in core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31103
diff
changeset
|
197 the configuration looking for custom colors and effect definitions.""" |
31110
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
198 mode = _modesetup(ui) |
31106
a185b903bda3
color: have the 'ui' object carry the '_colormode' directly
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31105
diff
changeset
|
199 ui._colormode = mode |
31105
45be7590301d
color: move triggering of the initialisation logic in core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31103
diff
changeset
|
200 if mode and mode != 'debug': |
45be7590301d
color: move triggering of the initialisation logic in core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31103
diff
changeset
|
201 configstyles(ui) |
45be7590301d
color: move triggering of the initialisation logic in core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31103
diff
changeset
|
202 |
31110
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
203 def _modesetup(ui): |
35181
d4805a5e7e70
color: respect HGPLAINEXCEPT=color to allow colors while scripting (issue5749)
Augie Fackler <augie@google.com>
parents:
34645
diff
changeset
|
204 if ui.plain('color'): |
31103
c1997c5d1ae3
color: handle 'ui.plain()' directly in mode setup
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31101
diff
changeset
|
205 return None |
33522
62b29ca72d1a
configitems: register the 'ui.color' config
Boris Feld <boris.feld@octobus.net>
parents:
33521
diff
changeset
|
206 config = ui.config('ui', 'color') |
31110
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
207 if config == 'debug': |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
208 return 'debug' |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
209 |
31110
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
210 auto = (config == 'auto') |
32102
9a85ea1daf49
color: turn 'ui.color' into a boolean (auto or off)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32027
diff
changeset
|
211 always = False |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36502
diff
changeset
|
212 if not auto and stringutil.parsebool(config): |
32103
9a98023ac8db
color: special case 'always' in 'ui.color'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32102
diff
changeset
|
213 # We want the config to behave like a boolean, "on" is actually auto, |
9a98023ac8db
color: special case 'always' in 'ui.color'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32102
diff
changeset
|
214 # but "always" value is treated as a special case to reduce confusion. |
9a98023ac8db
color: special case 'always' in 'ui.color'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32102
diff
changeset
|
215 if ui.configsource('ui', 'color') == '--color' or config == 'always': |
32102
9a85ea1daf49
color: turn 'ui.color' into a boolean (auto or off)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32027
diff
changeset
|
216 always = True |
9a85ea1daf49
color: turn 'ui.color' into a boolean (auto or off)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32027
diff
changeset
|
217 else: |
9a85ea1daf49
color: turn 'ui.color' into a boolean (auto or off)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32027
diff
changeset
|
218 auto = True |
9a85ea1daf49
color: turn 'ui.color' into a boolean (auto or off)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32027
diff
changeset
|
219 |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
220 if not always and not auto: |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
221 return None |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
222 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
223 formatted = (always or (encoding.environ.get('TERM') != 'dumb' |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
224 and ui.formatted())) |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
225 |
33179
95c57596b380
configitems: register the 'color.mode' config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32665
diff
changeset
|
226 mode = ui.config('color', 'mode') |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
227 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
228 # If pager is active, color.pagermode overrides color.mode. |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
229 if getattr(ui, 'pageractive', False): |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
230 mode = ui.config('color', 'pagermode', mode) |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
231 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
232 realmode = mode |
34645 | 233 if pycompat.iswindows: |
32665
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
234 from . import win32 |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
235 |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
236 term = encoding.environ.get('TERM') |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
237 # TERM won't be defined in a vanilla cmd.exe environment. |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
238 |
32665
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
239 # UNIX-like environments on Windows such as Cygwin and MSYS will |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
240 # set TERM. They appear to make a best effort attempt at setting it |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
241 # to something appropriate. However, not all environments with TERM |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
242 # defined support ANSI. |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
243 ansienviron = term and 'xterm' in term |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
244 |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
245 if mode == 'auto': |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
246 # Since "ansi" could result in terminal gibberish, we error on the |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
247 # side of selecting "win32". However, if w32effects is not defined, |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
248 # we almost certainly don't support "win32", so don't even try. |
40970
7654291091cf
color: fix a documentation typo
Matt Harbison <matt_harbison@yahoo.com>
parents:
40522
diff
changeset
|
249 # w32effects is not populated when stdout is redirected, so checking |
32665
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
250 # it first avoids win32 calls in a state known to error out. |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
251 if ansienviron or not w32effects or win32.enablevtmode(): |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
252 realmode = 'ansi' |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
253 else: |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
254 realmode = 'win32' |
32665
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
255 # An empty w32effects is a clue that stdout is redirected, and thus |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
256 # cannot enable VT mode. |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
257 elif mode == 'ansi' and w32effects and not ansienviron: |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
258 win32.enablevtmode() |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
259 elif mode == 'auto': |
98c2b44bdf9a
color: enable ANSI support on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
32291
diff
changeset
|
260 realmode = 'ansi' |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
261 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
262 def modewarn(): |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
263 # only warn if color.mode was explicitly set and we're in |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
264 # a formatted terminal |
33680
f9f28ee41cac
color: remove warnings if term is not formatted (==dumb or !ui.formatted())
Kyle Lippincott <spectral@google.com>
parents:
33522
diff
changeset
|
265 if mode == realmode and formatted: |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
266 ui.warn(_('warning: failed to set color mode to %s\n') % mode) |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
267 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
268 if realmode == 'win32': |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
269 ui._terminfoparams.clear() |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
270 if not w32effects: |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
271 modewarn() |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
272 return None |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
273 elif realmode == 'ansi': |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
274 ui._terminfoparams.clear() |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
275 elif realmode == 'terminfo': |
33680
f9f28ee41cac
color: remove warnings if term is not formatted (==dumb or !ui.formatted())
Kyle Lippincott <spectral@google.com>
parents:
33522
diff
changeset
|
276 _terminfosetup(ui, mode, formatted) |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
277 if not ui._terminfoparams: |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
278 ## FIXME Shouldn't we return None in this case too? |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
279 modewarn() |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
280 realmode = 'ansi' |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
281 else: |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
282 return None |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
283 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
284 if always or (auto and formatted): |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
285 return realmode |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
286 return None |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
287 |
30971
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
288 def configstyles(ui): |
31116
6483e49204ee
color: rename '_styles' to '_defaultstyles' for clarity
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31115
diff
changeset
|
289 ui._styles.update(_defaultstyles) |
30971
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
290 for status, cfgeffects in ui.configitems('color'): |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
291 if '.' not in status or status.startswith(('color.', 'terminfo.')): |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
292 continue |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
293 cfgeffects = ui.configlist('color', status) |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
294 if cfgeffects: |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
295 good = [] |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
296 for e in cfgeffects: |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
297 if valideffect(ui, e): |
30971
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
298 good.append(e) |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
299 else: |
40223
cabf09dbc6e0
py3: use stringutil.pprint() in color.py instead of '%r'
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39644
diff
changeset
|
300 ui.warn(_("ignoring unknown color/effect %s " |
30971
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
301 "(configured in color.%s)\n") |
40223
cabf09dbc6e0
py3: use stringutil.pprint() in color.py instead of '%r'
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39644
diff
changeset
|
302 % (stringutil.pprint(e), status)) |
31115
f5131d4f512a
color: move 'styles' definition on the 'ui' object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31114
diff
changeset
|
303 ui._styles[status] = ' '.join(good) |
30971
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
304 |
31689
57a22f699179
color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents:
31521
diff
changeset
|
305 def _activeeffects(ui): |
57a22f699179
color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents:
31521
diff
changeset
|
306 '''Return the effects map for the color mode set on the ui.''' |
57a22f699179
color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents:
31521
diff
changeset
|
307 if ui._colormode == 'win32': |
57a22f699179
color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents:
31521
diff
changeset
|
308 return w32effects |
57a22f699179
color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents:
31521
diff
changeset
|
309 elif ui._colormode is not None: |
57a22f699179
color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents:
31521
diff
changeset
|
310 return _effects |
57a22f699179
color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents:
31521
diff
changeset
|
311 return {} |
57a22f699179
color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents:
31521
diff
changeset
|
312 |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
313 def valideffect(ui, effect): |
30969
ddc80d1777a6
color: move 'valideffect' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30968
diff
changeset
|
314 'Determine if the effect is valid or not.' |
31689
57a22f699179
color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents:
31521
diff
changeset
|
315 return ((not ui._terminfoparams and effect in _activeeffects(ui)) |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
316 or (effect in ui._terminfoparams |
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
317 or effect[:-11] in ui._terminfoparams)) |
30972
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
318 |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
319 def _effect_str(ui, effect): |
30972
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
320 '''Helper function for render_effects().''' |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
321 |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
322 bg = False |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
323 if effect.endswith('_background'): |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
324 bg = True |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
325 effect = effect[:-11] |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
326 try: |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
327 attr, val, termcode = ui._terminfoparams[effect] |
30972
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
328 except KeyError: |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
329 return '' |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
330 if attr: |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
331 if termcode: |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
332 return termcode |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
333 else: |
37664
483cafc3762a
py3: make sure curses.tigetstr() first argument is a str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37662
diff
changeset
|
334 return curses.tigetstr(pycompat.sysstr(val)) |
30972
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
335 elif bg: |
37664
483cafc3762a
py3: make sure curses.tigetstr() first argument is a str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37662
diff
changeset
|
336 return curses.tparm(curses.tigetstr(r'setab'), val) |
30972
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
337 else: |
37664
483cafc3762a
py3: make sure curses.tigetstr() first argument is a str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37662
diff
changeset
|
338 return curses.tparm(curses.tigetstr(r'setaf'), val) |
30973
e5363cb96233
color: move the '_render_effects' function to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30972
diff
changeset
|
339 |
31518
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
340 def _mergeeffects(text, start, stop): |
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
341 """Insert start sequence at every occurrence of stop sequence |
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
342 |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
33680
diff
changeset
|
343 >>> s = _mergeeffects(b'cyan', b'[C]', b'|') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
33680
diff
changeset
|
344 >>> s = _mergeeffects(s + b'yellow', b'[Y]', b'|') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
33680
diff
changeset
|
345 >>> s = _mergeeffects(b'ma' + s + b'genta', b'[M]', b'|') |
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
33680
diff
changeset
|
346 >>> s = _mergeeffects(b'red' + s, b'[R]', b'|') |
31518
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
347 >>> s |
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
348 '[R]red[M]ma[Y][C]cyan|[R][M][Y]yellow|[R][M]genta|' |
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
349 """ |
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
350 parts = [] |
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
351 for t in text.split(stop): |
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
352 if not t: |
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
353 continue |
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
354 parts.extend([start, t, stop]) |
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
355 return ''.join(parts) |
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
356 |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
357 def _render_effects(ui, text, effects): |
30973
e5363cb96233
color: move the '_render_effects' function to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30972
diff
changeset
|
358 'Wrap text in commands to turn on each effect.' |
e5363cb96233
color: move the '_render_effects' function to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30972
diff
changeset
|
359 if not text: |
e5363cb96233
color: move the '_render_effects' function to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30972
diff
changeset
|
360 return text |
31113
268caf97c38f
color: move the dict with terminfo parameters on the ui object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31112
diff
changeset
|
361 if ui._terminfoparams: |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
362 start = ''.join(_effect_str(ui, effect) |
31071
350d737e059d
color: minor reversal of two conditional clause for clarity
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31067
diff
changeset
|
363 for effect in ['none'] + effects.split()) |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
364 stop = _effect_str(ui, 'none') |
31071
350d737e059d
color: minor reversal of two conditional clause for clarity
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31067
diff
changeset
|
365 else: |
31689
57a22f699179
color: stop mutating the default effects map
Matt Harbison <matt_harbison@yahoo.com>
parents:
31521
diff
changeset
|
366 activeeffects = _activeeffects(ui) |
31716
439a387ca6f1
color: replace str() with pycompat.bytestr()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31689
diff
changeset
|
367 start = [pycompat.bytestr(activeeffects[e]) |
439a387ca6f1
color: replace str() with pycompat.bytestr()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31689
diff
changeset
|
368 for e in ['none'] + effects.split()] |
30973
e5363cb96233
color: move the '_render_effects' function to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30972
diff
changeset
|
369 start = '\033[' + ';'.join(start) + 'm' |
31716
439a387ca6f1
color: replace str() with pycompat.bytestr()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
31689
diff
changeset
|
370 stop = '\033[' + pycompat.bytestr(activeeffects['none']) + 'm' |
31518
43d6ef658874
color: insert color code after every "\e[0m" (issue5413)
Yuya Nishihara <yuya@tcha.org>
parents:
31499
diff
changeset
|
371 return _mergeeffects(text, start, stop) |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
372 |
31521
44c591f63458
templater: make pad() strip color codes before computing width (issue5416)
Yuya Nishihara <yuya@tcha.org>
parents:
31518
diff
changeset
|
373 _ansieffectre = re.compile(br'\x1b\[[0-9;]*m') |
44c591f63458
templater: make pad() strip color codes before computing width (issue5416)
Yuya Nishihara <yuya@tcha.org>
parents:
31518
diff
changeset
|
374 |
44c591f63458
templater: make pad() strip color codes before computing width (issue5416)
Yuya Nishihara <yuya@tcha.org>
parents:
31518
diff
changeset
|
375 def stripeffects(text): |
44c591f63458
templater: make pad() strip color codes before computing width (issue5416)
Yuya Nishihara <yuya@tcha.org>
parents:
31518
diff
changeset
|
376 """Strip ANSI control codes which could be inserted by colorlabel()""" |
44c591f63458
templater: make pad() strip color codes before computing width (issue5416)
Yuya Nishihara <yuya@tcha.org>
parents:
31518
diff
changeset
|
377 return _ansieffectre.sub('', text) |
44c591f63458
templater: make pad() strip color codes before computing width (issue5416)
Yuya Nishihara <yuya@tcha.org>
parents:
31518
diff
changeset
|
378 |
31086
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
379 def colorlabel(ui, msg, label): |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
380 """add color control code according to the mode""" |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
381 if ui._colormode == 'debug': |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
382 if label and msg: |
36502
faaabe0dc4d1
py3: use bytes.endswith('\n') to strip off '\n' from debug color output
Yuya Nishihara <yuya@tcha.org>
parents:
35351
diff
changeset
|
383 if msg.endswith('\n'): |
31086
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
384 msg = "[%s|%s]\n" % (label, msg[:-1]) |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
385 else: |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
386 msg = "[%s|%s]" % (label, msg) |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
387 elif ui._colormode is not None: |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
388 effects = [] |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
389 for l in label.split(): |
31115
f5131d4f512a
color: move 'styles' definition on the 'ui' object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31114
diff
changeset
|
390 s = ui._styles.get(l, '') |
31086
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
391 if s: |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
392 effects.append(s) |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
393 elif valideffect(ui, l): |
31086
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
394 effects.append(l) |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
395 effects = ' '.join(effects) |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
396 if effects: |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
397 msg = '\n'.join([_render_effects(ui, line, effects) |
31086
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
398 for line in msg.split('\n')]) |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
399 return msg |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
400 |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
401 w32effects = None |
34645 | 402 if pycompat.iswindows: |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
403 import ctypes |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
404 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
405 _kernel32 = ctypes.windll.kernel32 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
406 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
407 _WORD = ctypes.c_ushort |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
408 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
409 _INVALID_HANDLE_VALUE = -1 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
410 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
411 class _COORD(ctypes.Structure): |
39644
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
412 _fields_ = [(r'X', ctypes.c_short), |
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
413 (r'Y', ctypes.c_short)] |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
414 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
415 class _SMALL_RECT(ctypes.Structure): |
39644
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
416 _fields_ = [(r'Left', ctypes.c_short), |
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
417 (r'Top', ctypes.c_short), |
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
418 (r'Right', ctypes.c_short), |
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
419 (r'Bottom', ctypes.c_short)] |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
420 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
421 class _CONSOLE_SCREEN_BUFFER_INFO(ctypes.Structure): |
39644
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
422 _fields_ = [(r'dwSize', _COORD), |
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
423 (r'dwCursorPosition', _COORD), |
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
424 (r'wAttributes', _WORD), |
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
425 (r'srWindow', _SMALL_RECT), |
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
426 (r'dwMaximumWindowSize', _COORD)] |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
427 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
428 _STD_OUTPUT_HANDLE = 0xfffffff5 # (DWORD)-11 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
429 _STD_ERROR_HANDLE = 0xfffffff4 # (DWORD)-12 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
430 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
431 _FOREGROUND_BLUE = 0x0001 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
432 _FOREGROUND_GREEN = 0x0002 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
433 _FOREGROUND_RED = 0x0004 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
434 _FOREGROUND_INTENSITY = 0x0008 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
435 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
436 _BACKGROUND_BLUE = 0x0010 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
437 _BACKGROUND_GREEN = 0x0020 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
438 _BACKGROUND_RED = 0x0040 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
439 _BACKGROUND_INTENSITY = 0x0080 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
440 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
441 _COMMON_LVB_REVERSE_VIDEO = 0x4000 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
442 _COMMON_LVB_UNDERSCORE = 0x8000 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
443 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
444 # http://msdn.microsoft.com/en-us/library/ms682088%28VS.85%29.aspx |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
445 w32effects = { |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
446 'none': -1, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
447 'black': 0, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
448 'red': _FOREGROUND_RED, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
449 'green': _FOREGROUND_GREEN, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
450 'yellow': _FOREGROUND_RED | _FOREGROUND_GREEN, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
451 'blue': _FOREGROUND_BLUE, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
452 'magenta': _FOREGROUND_BLUE | _FOREGROUND_RED, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
453 'cyan': _FOREGROUND_BLUE | _FOREGROUND_GREEN, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
454 'white': _FOREGROUND_RED | _FOREGROUND_GREEN | _FOREGROUND_BLUE, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
455 'bold': _FOREGROUND_INTENSITY, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
456 'black_background': 0x100, # unused value > 0x0f |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
457 'red_background': _BACKGROUND_RED, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
458 'green_background': _BACKGROUND_GREEN, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
459 'yellow_background': _BACKGROUND_RED | _BACKGROUND_GREEN, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
460 'blue_background': _BACKGROUND_BLUE, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
461 'purple_background': _BACKGROUND_BLUE | _BACKGROUND_RED, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
462 'cyan_background': _BACKGROUND_BLUE | _BACKGROUND_GREEN, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
463 'white_background': (_BACKGROUND_RED | _BACKGROUND_GREEN | |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
464 _BACKGROUND_BLUE), |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
465 'bold_background': _BACKGROUND_INTENSITY, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
466 'underline': _COMMON_LVB_UNDERSCORE, # double-byte charsets only |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
467 'inverse': _COMMON_LVB_REVERSE_VIDEO, # double-byte charsets only |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
468 } |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
469 |
32291
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32103
diff
changeset
|
470 passthrough = {_FOREGROUND_INTENSITY, |
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32103
diff
changeset
|
471 _BACKGROUND_INTENSITY, |
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32103
diff
changeset
|
472 _COMMON_LVB_UNDERSCORE, |
bd872f64a8ba
cleanup: use set literals
Martin von Zweigbergk <martinvonz@google.com>
parents:
32103
diff
changeset
|
473 _COMMON_LVB_REVERSE_VIDEO} |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
474 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
475 stdout = _kernel32.GetStdHandle( |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
476 _STD_OUTPUT_HANDLE) # don't close the handle returned |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
477 if stdout is None or stdout == _INVALID_HANDLE_VALUE: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
478 w32effects = None |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
479 else: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
480 csbi = _CONSOLE_SCREEN_BUFFER_INFO() |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
481 if not _kernel32.GetConsoleScreenBufferInfo( |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
482 stdout, ctypes.byref(csbi)): |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
483 # stdout may not support GetConsoleScreenBufferInfo() |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
484 # when called from subprocess or redirected |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
485 w32effects = None |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
486 else: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
487 origattr = csbi.wAttributes |
41532
bd3f03d8cc9f
global: use raw strings for regular expressions with escapes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41365
diff
changeset
|
488 ansire = re.compile(br'\033\[([^m]*)m([^\033]*)(.*)', |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
489 re.MULTILINE | re.DOTALL) |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
490 |
40522
51091816a355
ui: simply concatenate messages before applying color labels
Yuya Nishihara <yuya@tcha.org>
parents:
40521
diff
changeset
|
491 def win32print(ui, writefunc, text, **opts): |
35351
a4478f74ad56
py3: handle keyword arguments correctly in color.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35338
diff
changeset
|
492 label = opts.get(r'label', '') |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
493 attr = origattr |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
494 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
495 def mapcolor(val, attr): |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
496 if val == -1: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
497 return origattr |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
498 elif val in passthrough: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
499 return attr | val |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
500 elif val > 0x0f: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
501 return (val & 0x70) | (attr & 0x8f) |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
502 else: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
503 return (val & 0x07) | (attr & 0xf8) |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
504 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
505 # determine console attributes based on labels |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
506 for l in label.split(): |
31115
f5131d4f512a
color: move 'styles' definition on the 'ui' object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31114
diff
changeset
|
507 style = ui._styles.get(l, '') |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
508 for effect in style.split(): |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
509 try: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
510 attr = mapcolor(w32effects[effect], attr) |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
511 except KeyError: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
512 # w32effects could not have certain attributes so we skip |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
513 # them if not found |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
514 pass |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
515 # hack to ensure regexp finds data |
39644
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
516 if not text.startswith(b'\033['): |
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
517 text = b'\033[m' + text |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
518 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
519 # Look for ANSI-like codes embedded in text |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
520 m = re.match(ansire, text) |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
521 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
522 try: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
523 while m: |
39644
3b421154d2ca
py3: fix str vs bytes in enough places to run `hg version` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39091
diff
changeset
|
524 for sattr in m.group(1).split(b';'): |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
525 if sattr: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
526 attr = mapcolor(int(sattr), attr) |
31499
31d2ddfd338c
color: sync text attributes and buffered text output on Windows (issue5508)
Matt Harbison <matt_harbison@yahoo.com>
parents:
31123
diff
changeset
|
527 ui.flush() |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
528 _kernel32.SetConsoleTextAttribute(stdout, attr) |
40521
49746e53ac92
ui: simplify interface of low-level write() functions
Yuya Nishihara <yuya@tcha.org>
parents:
40367
diff
changeset
|
529 writefunc(m.group(2)) |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
530 m = re.match(ansire, m.group(3)) |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
531 finally: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
532 # Explicitly reset original attributes |
31499
31d2ddfd338c
color: sync text attributes and buffered text output on Windows (issue5508)
Matt Harbison <matt_harbison@yahoo.com>
parents:
31123
diff
changeset
|
533 ui.flush() |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
534 _kernel32.SetConsoleTextAttribute(stdout, origattr) |