]> jfr.im git - z_archive/twitter.git/blame - twitter/ansi.py
Be explicit about what twitter package imports from api.
[z_archive/twitter.git] / twitter / ansi.py
CommitLineData
7522aa11
MV
1"""
2Support for ANSI colours in command-line client.
3
a90963cc
HN
4.. data:: ESC
5 ansi escape character
6
7.. data:: RESET
8 ansi reset colour (ansi value)
9
10.. data:: COLOURS_NAMED
11 dict of colour names mapped to their ansi value
12
13.. data:: COLOURS_MIDS
14 A list of ansi values for Mid Spectrum Colours
7522aa11
MV
15"""
16
17import itertools
91a895c6 18import sys
7522aa11
MV
19
20ESC = chr(0x1B)
21RESET = "0"
22
a90963cc
HN
23COLOURS_NAMED = dict(zip(
24 ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'],
25 [str(x) for x in range(30, 38)]
26))
27COLOURS_MIDS = [
28 colour for name, colour in COLOURS_NAMED.items()
29 if name not in ('black', 'white')
30]
31
32class AnsiColourException(Exception):
33 ''' Exception while processing ansi colours '''
34 pass
7522aa11
MV
35
36class ColourMap(object):
a90963cc
HN
37 '''
38 Object that allows for mapping strings to ansi colour values.
39 '''
40 def __init__(self, colors=COLOURS_MIDS):
41 ''' uses the list of ansi `colors` values to initialize the map '''
7522aa11 42 self._cmap = {}
a90963cc
HN
43 self._colourIter = itertools.cycle(colors)
44
0b9960a3 45 def colourFor(self, string):
a90963cc
HN
46 '''
47 Returns an ansi colour value given a `string`.
48 The same ansi colour value is always returned for the same string
49 '''
7522aa11
MV
50 if not self._cmap.has_key(string):
51 self._cmap[string] = self._colourIter.next()
52 return self._cmap[string]
53
54def cmdReset():
b15b92f0 55 ''' Returns the ansi cmd colour for a RESET '''
91a895c6
MV
56 if sys.stdout.isatty():
57 return ESC + "[0m"
58 else:
59 return ""
7522aa11
MV
60
61def cmdColour(colour):
a90963cc
HN
62 '''
63 Return the ansi cmd colour (i.e. escape sequence)
64 for the ansi `colour` value
65 '''
91a895c6
MV
66 if sys.stdout.isatty():
67 return ESC + "[" + colour + "m"
68 else:
69 return ""
a90963cc
HN
70
71def cmdColourNamed(colour):
72 ''' Return the ansi cmdColour for a given named `colour` '''
73 try:
74 return cmdColour(COLOURS_NAMED[colour])
75 except KeyError:
76 raise AnsiColourException('Unknown Colour %s' %(colour))