Cope with terminals that don't support colour
[FeedLint.git] / display.py
blob3cc697ecebca818dc84a792747af6f4e5cfc3a4a
1 import sys
2 import curses
4 curses.setupterm()
6 cursor_pos = 0
7 n_cols = curses.tigetnum('cols') or 80
9 COLOURS = {
10 'BLACK' : 0,
11 'BLUE' : 1,
12 'GREEN' : 2,
13 'CYAN' : 3,
14 'RED' : 4,
15 'MAGENTA' : 5,
16 'YELLOW' : 6,
17 'WHITE' : 7,
20 set_fg = curses.tigetstr('setf') or None
21 normal = curses.tigetstr('sgr0') or None
23 def checking(msg, indent = 2):
24 global cursor_pos
25 if cursor_pos:
26 result('!', 'RED')
27 msg = (' ' * indent) + msg
28 cursor_pos = len(msg)
29 sys.stdout.write(msg)
30 sys.stdout.flush()
32 def result(msg, colour = 'GREEN'):
33 global cursor_pos
34 result_col = n_cols - max(15, len(msg) + 5)
35 if cursor_pos > result_col:
36 print
37 cursor_pos = 0
38 if colour:
39 msg = highlight(msg, colour)
40 print " " * (result_col - cursor_pos), "[ %s ]" % msg
41 cursor_pos = 0
43 def error(msg):
44 result(msg, 'RED')
46 def error_new_line(msg, colour = 'RED'):
47 if cursor_pos:
48 error('ERROR')
49 print highlight(msg, colour)
51 def highlight(msg, colour):
52 if set_fg and normal:
53 return curses.tparm(set_fg, COLOURS[colour]) + msg + curses.tparm(normal)
54 else:
55 return msg