Fix crash on startup when terminal doesnt support colors

This commit is contained in:
Michael Lazar
2017-11-04 14:10:50 -04:00
parent 331492c766
commit 00df45bd34
3 changed files with 15 additions and 4 deletions

View File

@@ -83,6 +83,7 @@ def curses_session():
# return from C start_color() is ignorable. # return from C start_color() is ignorable.
try: try:
curses.start_color() curses.start_color()
curses.use_default_colors()
except: except:
_logger.warning('Curses failed to initialize color support') _logger.warning('Curses failed to initialize color support')
@@ -92,9 +93,6 @@ def curses_session():
except: except:
_logger.warning('Curses failed to initialize the cursor mode') _logger.warning('Curses failed to initialize the cursor mode')
# Assign the terminal's default (background) color to code -1
curses.use_default_colors()
yield stdscr yield stdscr
finally: finally:

View File

@@ -849,7 +849,7 @@ class Terminal(object):
""" """
monochrome = (not curses.has_colors()) monochrome = (not curses.has_colors())
if theme is None: if theme is None or monochrome:
theme = Theme(monochrome=monochrome) theme = Theme(monochrome=monochrome)
theme.bind_curses() theme.bind_curses()

View File

@@ -596,3 +596,16 @@ def test_set_theme(terminal, stdscr):
terminal.set_theme(theme=theme) terminal.set_theme(theme=theme)
assert terminal.theme.monochrome assert terminal.theme.monochrome
stdscr.bkgd.assert_called_once_with(' ', 0) stdscr.bkgd.assert_called_once_with(' ', 0)
def test_set_theme_no_colors(terminal, stdscr):
with mock.patch('curses.has_colors') as has_colors:
has_colors.return_value = False
terminal.set_theme()
assert terminal.theme.monochrome
theme = Theme(monochrome=False)
terminal.set_theme(theme=theme)
assert terminal.theme.monochrome