Mercurial > public > mercurial-scm > hg
annotate mercurial/color.py @ 31113:268caf97c38f
color: move the dict with terminfo parameters on the ui object
This dictionnary is affected by the content of the config, so we should have
one for each ui config.
We rename the global dict to '_baseterminfoparams' to make the situation
clearer.
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Sat, 25 Feb 2017 15:00:51 +0100 |
parents | 7f056fdbe37e |
children | 1613c55ad3d6 |
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 |
30971
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
10 from .i18n import _ |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
11 |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
12 from . import ( |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
13 encoding, |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
14 pycompat, |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
15 util |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
16 ) |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
17 |
30968
0d2a58a04080
color: move '_terminfo_params' into the core 'color' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30967
diff
changeset
|
18 try: |
0d2a58a04080
color: move '_terminfo_params' into the core 'color' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30967
diff
changeset
|
19 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
|
20 # 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
|
21 # 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
|
22 _baseterminfoparams = { |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
23 'none': (True, 'sgr0', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
24 'standout': (True, 'smso', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
25 'underline': (True, 'smul', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
26 'reverse': (True, 'rev', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
27 'inverse': (True, 'rev', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
28 'blink': (True, 'blink', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
29 'dim': (True, 'dim', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
30 'bold': (True, 'bold', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
31 'invisible': (True, 'invis', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
32 'italic': (True, 'sitm', ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
33 'black': (False, curses.COLOR_BLACK, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
34 'red': (False, curses.COLOR_RED, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
35 'green': (False, curses.COLOR_GREEN, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
36 'yellow': (False, curses.COLOR_YELLOW, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
37 'blue': (False, curses.COLOR_BLUE, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
38 'magenta': (False, curses.COLOR_MAGENTA, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
39 'cyan': (False, curses.COLOR_CYAN, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
40 'white': (False, curses.COLOR_WHITE, ''), |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
41 } |
30968
0d2a58a04080
color: move '_terminfo_params' into the core 'color' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30967
diff
changeset
|
42 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
|
43 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
|
44 _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
|
45 |
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
|
46 # allow the extensions to change the default |
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
47 _enabledbydefault = False |
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
48 |
30967
20990991d384
color: move '_effect' mapping into core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30653
diff
changeset
|
49 # start and stop parameters for effects |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
50 _effects = { |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
51 'none': 0, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
52 'black': 30, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
53 'red': 31, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
54 'green': 32, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
55 'yellow': 33, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
56 'blue': 34, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
57 'magenta': 35, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
58 'cyan': 36, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
59 'white': 37, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
60 'bold': 1, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
61 'italic': 3, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
62 'underline': 4, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
63 'inverse': 7, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
64 'dim': 2, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
65 'black_background': 40, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
66 'red_background': 41, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
67 'green_background': 42, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
68 'yellow_background': 43, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
69 'blue_background': 44, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
70 'purple_background': 45, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
71 'cyan_background': 46, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
72 'white_background': 47, |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
73 } |
30967
20990991d384
color: move '_effect' mapping into core
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30653
diff
changeset
|
74 |
31109
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
75 _styles = { |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
76 'grep.match': 'red bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
77 'grep.linenumber': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
78 'grep.rev': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
79 'grep.change': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
80 'grep.sep': 'cyan', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
81 'grep.filename': 'magenta', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
82 'grep.user': 'magenta', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
83 'grep.date': 'magenta', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
84 'bookmarks.active': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
85 'branches.active': 'none', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
86 'branches.closed': 'black bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
87 'branches.current': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
88 'branches.inactive': 'none', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
89 'diff.changed': 'white', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
90 'diff.deleted': 'red', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
91 'diff.diffline': 'bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
92 'diff.extended': 'cyan bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
93 'diff.file_a': 'red bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
94 'diff.file_b': 'green bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
95 'diff.hunk': 'magenta', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
96 'diff.inserted': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
97 'diff.tab': '', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
98 'diff.trailingwhitespace': 'bold red_background', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
99 'changeset.public' : '', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
100 'changeset.draft' : '', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
101 'changeset.secret' : '', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
102 'diffstat.deleted': 'red', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
103 'diffstat.inserted': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
104 'histedit.remaining': 'red bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
105 'ui.prompt': 'yellow', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
106 'log.changeset': 'yellow', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
107 'patchbomb.finalsummary': '', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
108 'patchbomb.from': 'magenta', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
109 'patchbomb.to': 'cyan', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
110 'patchbomb.subject': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
111 'patchbomb.diffstats': '', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
112 'rebase.rebased': 'blue', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
113 'rebase.remaining': 'red bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
114 'resolve.resolved': 'green bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
115 'resolve.unresolved': 'red bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
116 'shelve.age': 'cyan', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
117 'shelve.newest': 'green bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
118 'shelve.name': 'blue bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
119 'status.added': 'green bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
120 'status.clean': 'none', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
121 'status.copied': 'none', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
122 'status.deleted': 'cyan bold underline', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
123 'status.ignored': 'black bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
124 'status.modified': 'blue bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
125 'status.removed': 'red bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
126 'status.unknown': 'magenta bold underline', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
127 'tags.normal': 'green', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
128 'tags.local': 'black bold', |
53230c5bb273
color: reinvent dictionary
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31106
diff
changeset
|
129 } |
30653
b2be4ccaff1d
color: load 'colortable' from extension using an 'extraloader'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30652
diff
changeset
|
130 |
b2be4ccaff1d
color: load 'colortable' from extension using an 'extraloader'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30652
diff
changeset
|
131 def loadcolortable(ui, extname, colortable): |
b2be4ccaff1d
color: load 'colortable' from extension using an 'extraloader'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30652
diff
changeset
|
132 _styles.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
|
133 |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
134 def _terminfosetup(ui, mode): |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
135 '''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
|
136 |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
137 # 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
|
138 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
|
139 return |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
140 # 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
|
141 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
|
142 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
|
143 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
|
144 |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
145 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
|
146 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
|
147 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
|
148 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
|
149 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
|
150 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
|
151 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
|
152 try: |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
153 curses.setupterm() |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
154 except curses.error as 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
|
155 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
|
156 return |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
157 |
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
|
158 for key, (b, e, c) in ui._terminfoparams.items(): |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
159 if not b: |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
160 continue |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
161 if not c and not curses.tigetstr(e): |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
162 # 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
|
163 # 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
|
164 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
|
165 del ui._terminfoparams[key] |
31100
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
166 if not curses.tigetstr('setaf') or not curses.tigetstr('setab'): |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
167 # Only warn about missing terminfo entries if we explicitly asked for |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
168 # terminfo mode. |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
169 if mode == "terminfo": |
8903f67b9ca8
color: move 'terminfosetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31089
diff
changeset
|
170 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
|
171 "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
|
172 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
|
173 |
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
|
174 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
|
175 """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
|
176 |
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
|
177 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
|
178 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
|
179 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
|
180 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
|
181 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
|
182 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
|
183 |
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
|
184 def _modesetup(ui): |
31103
c1997c5d1ae3
color: handle 'ui.plain()' directly in mode setup
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31101
diff
changeset
|
185 if ui.plain(): |
c1997c5d1ae3
color: handle 'ui.plain()' directly in mode setup
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31101
diff
changeset
|
186 return None |
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
|
187 default = 'never' |
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
188 if _enabledbydefault: |
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
189 default = 'auto' |
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
190 # experimental config: ui.color |
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
191 config = ui.config('ui', 'color', default) |
7fec37746417
color: add a 'ui.color' option to control color behavior
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31109
diff
changeset
|
192 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
|
193 return 'debug' |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
194 |
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
|
195 auto = (config == 'auto') |
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 always = not auto and util.parsebool(config) |
31101
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
197 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
|
198 return None |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
199 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
200 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
|
201 and ui.formatted())) |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
202 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
203 mode = ui.config('color', 'mode', 'auto') |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
204 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
205 # 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
|
206 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
|
207 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
|
208 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
209 realmode = mode |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
210 if mode == 'auto': |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
211 if pycompat.osname == 'nt': |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
212 term = encoding.environ.get('TERM') |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
213 # TERM won't be defined in a vanilla cmd.exe environment. |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
214 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
215 # UNIX-like environments on Windows such as Cygwin and MSYS will |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
216 # set TERM. They appear to make a best effort attempt at setting it |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
217 # to something appropriate. However, not all environments with TERM |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
218 # defined support ANSI. Since "ansi" could result in terminal |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
219 # gibberish, we error on the side of selecting "win32". However, if |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
220 # w32effects is not defined, we almost certainly don't support |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
221 # "win32", so don't even try. |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
222 if (term and 'xterm' in term) or not w32effects: |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
223 realmode = 'ansi' |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
224 else: |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
225 realmode = 'win32' |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
226 else: |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
227 realmode = 'ansi' |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
228 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
229 def modewarn(): |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
230 # 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
|
231 # a formatted terminal |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
232 if mode == realmode and ui.formatted(): |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
233 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
|
234 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
235 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
|
236 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
|
237 if not w32effects: |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
238 modewarn() |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
239 return None |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
240 _effects.update(w32effects) |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
241 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
|
242 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
|
243 elif realmode == 'terminfo': |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
244 _terminfosetup(ui, mode) |
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
|
245 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
|
246 ## 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
|
247 modewarn() |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
248 realmode = 'ansi' |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
249 else: |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
250 return None |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
251 |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
252 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
|
253 return realmode |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
254 return None |
9021a94a7dbf
color: move 'modesetup' into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31100
diff
changeset
|
255 |
30971
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
256 def configstyles(ui): |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
257 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
|
258 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
|
259 continue |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
260 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
|
261 if cfgeffects: |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
262 good = [] |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
263 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
|
264 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
|
265 good.append(e) |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
266 else: |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
267 ui.warn(_("ignoring unknown color/effect %r " |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
268 "(configured in color.%s)\n") |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
269 % (e, status)) |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
270 _styles[status] = ' '.join(good) |
bb6385882cfa
color: move configstyles into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30970
diff
changeset
|
271 |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
272 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
|
273 'Determine if the effect is valid or not.' |
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 return ((not ui._terminfoparams and effect in _effects) |
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
|
275 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
|
276 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
|
277 |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
278 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
|
279 '''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
|
280 |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
281 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
|
282 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
|
283 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
|
284 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
|
285 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
|
286 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
|
287 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
|
288 return '' |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
289 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
|
290 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
|
291 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
|
292 else: |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
293 return curses.tigetstr(val) |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
294 elif bg: |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
295 return curses.tparm(curses.tigetstr('setab'), val) |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
296 else: |
a3c7e42c7a1f
color: move '_effect_str' function into the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30971
diff
changeset
|
297 return curses.tparm(curses.tigetstr('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
|
298 |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
299 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
|
300 '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
|
301 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
|
302 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
|
303 if ui._terminfoparams: |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
304 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
|
305 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
|
306 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
|
307 else: |
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
|
308 start = [str(_effects[e]) for e in ['none'] + effects.split()] |
e5363cb96233
color: move the '_render_effects' function to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30972
diff
changeset
|
309 start = '\033[' + ';'.join(start) + 'm' |
e5363cb96233
color: move the '_render_effects' function to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30972
diff
changeset
|
310 stop = '\033[' + str(_effects['none']) + 'm' |
e5363cb96233
color: move the '_render_effects' function to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30972
diff
changeset
|
311 return ''.join([start, text, stop]) |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
312 |
31086
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
313 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
|
314 """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
|
315 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
|
316 if label and msg: |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
317 if msg[-1] == '\n': |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
318 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
|
319 else: |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
320 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
|
321 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
|
322 effects = [] |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
323 for l in label.split(): |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
324 s = _styles.get(l, '') |
e6082078c853
color: move the 'colorlabel' function in the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31071
diff
changeset
|
325 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
|
326 effects.append(s) |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
327 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
|
328 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
|
329 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
|
330 if effects: |
31112
7f056fdbe37e
color: add ui to effect rendering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31110
diff
changeset
|
331 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
|
332 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
|
333 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
|
334 |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
335 w32effects = None |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
336 if pycompat.osname == 'nt': |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
337 import ctypes |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
338 import re |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
339 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
340 _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
|
341 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
342 _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
|
343 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
344 _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
|
345 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
346 class _COORD(ctypes.Structure): |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
347 _fields_ = [('X', ctypes.c_short), |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
348 ('Y', ctypes.c_short)] |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
349 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
350 class _SMALL_RECT(ctypes.Structure): |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
351 _fields_ = [('Left', ctypes.c_short), |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
352 ('Top', ctypes.c_short), |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
353 ('Right', ctypes.c_short), |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
354 ('Bottom', ctypes.c_short)] |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
355 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
356 class _CONSOLE_SCREEN_BUFFER_INFO(ctypes.Structure): |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
357 _fields_ = [('dwSize', _COORD), |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
358 ('dwCursorPosition', _COORD), |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
359 ('wAttributes', _WORD), |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
360 ('srWindow', _SMALL_RECT), |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
361 ('dwMaximumWindowSize', _COORD)] |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
362 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
363 _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
|
364 _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
|
365 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
366 _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
|
367 _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
|
368 _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
|
369 _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
|
370 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
371 _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
|
372 _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
|
373 _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
|
374 _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
|
375 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
376 _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
|
377 _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
|
378 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
379 # 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
|
380 w32effects = { |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
381 'none': -1, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
382 'black': 0, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
383 '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
|
384 '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
|
385 '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
|
386 '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
|
387 '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
|
388 '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
|
389 '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
|
390 '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
|
391 '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
|
392 '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
|
393 '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
|
394 '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
|
395 '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
|
396 '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
|
397 '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
|
398 '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
|
399 _BACKGROUND_BLUE), |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
400 '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
|
401 '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
|
402 '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
|
403 } |
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 passthrough = set([_FOREGROUND_INTENSITY, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
406 _BACKGROUND_INTENSITY, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
407 _COMMON_LVB_UNDERSCORE, |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
408 _COMMON_LVB_REVERSE_VIDEO]) |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
409 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
410 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
|
411 _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
|
412 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
|
413 w32effects = None |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
414 else: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
415 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
|
416 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
|
417 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
|
418 # 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
|
419 # 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
|
420 w32effects = None |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
421 else: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
422 origattr = csbi.wAttributes |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
423 ansire = re.compile('\033\[([^m]*)m([^\033]*)(.*)', |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
424 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
|
425 |
31089
a2ee25ff75e5
color: add multiple messages input support to 'win32print'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31088
diff
changeset
|
426 def win32print(writefunc, *msgs, **opts): |
a2ee25ff75e5
color: add multiple messages input support to 'win32print'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31088
diff
changeset
|
427 for text in msgs: |
a2ee25ff75e5
color: add multiple messages input support to 'win32print'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31088
diff
changeset
|
428 _win32print(text, writefunc, **opts) |
a2ee25ff75e5
color: add multiple messages input support to 'win32print'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31088
diff
changeset
|
429 |
a2ee25ff75e5
color: add multiple messages input support to 'win32print'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31088
diff
changeset
|
430 def _win32print(text, writefunc, **opts): |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
431 label = opts.get('label', '') |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
432 attr = origattr |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
433 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
434 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
|
435 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
|
436 return origattr |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
437 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
|
438 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
|
439 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
|
440 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
|
441 else: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
442 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
|
443 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
444 # 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
|
445 for l in label.split(): |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
446 style = _styles.get(l, '') |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
447 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
|
448 try: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
449 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
|
450 except KeyError: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
451 # 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
|
452 # 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
|
453 pass |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
454 # hack to ensure regexp finds data |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
455 if not text.startswith('\033['): |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
456 text = '\033[m' + text |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
457 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
458 # 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
|
459 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
|
460 |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
461 try: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
462 while m: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
463 for sattr in m.group(1).split(';'): |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
464 if sattr: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
465 attr = mapcolor(int(sattr), attr) |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
466 _kernel32.SetConsoleTextAttribute(stdout, attr) |
31088
75c4aafee490
color: clarify name of an argument of 'win32print'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31086
diff
changeset
|
467 writefunc(m.group(2), **opts) |
31067
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
468 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
|
469 finally: |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
470 # Explicitly reset original attributes |
a0bde5ec3a46
color: move 'win32' declaration to the core module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30973
diff
changeset
|
471 _kernel32.SetConsoleTextAttribute(stdout, origattr) |