summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2012-11-25 21:17:41 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-11-25 21:34:36 +0000
commit4548a8f037eaf8d47a77052acc3e9ec264ac41e0 (patch)
treeeb9f4f460b6895ab2f0e932ab9126e7651bb7841
parent0db80d57d4d2b1bb97375444c439827450ff33d1 (diff)
downloadbitbake-4548a8f037eaf8d47a77052acc3e9ec264ac41e0.tar.gz
knotty/msg: Avoid usage of curses initscr/endwin to avoid terminal corruption
Using curses initscr/endwin causes screen corruption if for example you suspend bitbake and resume it. This changes the code to use a less invasive approach to determining colour availability on the terminal. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/msg.py12
-rw-r--r--lib/bb/ui/knotty.py8
2 files changed, 5 insertions, 15 deletions
diff --git a/lib/bb/msg.py b/lib/bb/msg.py
index 007c95a4e..e70daee92 100644
--- a/lib/bb/msg.py
+++ b/lib/bb/msg.py
@@ -106,17 +106,7 @@ class BBLogFormatter(logging.Formatter):
return record
def enable_color(self):
- import curses
- try:
- win = None
- win = curses.initscr()
- if curses.has_colors():
- self.color_enabled = True
- except:
- pass
- finally:
- if win is not None:
- curses.endwin()
+ self.color_enabled = True
class BBLogFilter(object):
def __init__(self, handler, level, debug_domains):
diff --git a/lib/bb/ui/knotty.py b/lib/bb/ui/knotty.py
index a63d8b120..be63e730f 100644
--- a/lib/bb/ui/knotty.py
+++ b/lib/bb/ui/knotty.py
@@ -157,6 +157,8 @@ class TerminalFilter(object):
new[3] = new[3] & ~termios.ECHO
termios.tcsetattr(fd, termios.TCSADRAIN, new)
curses.setupterm()
+ if curses.tigetnum("colors") > 2:
+ format.enable_color()
self.ed = curses.tigetstr("ed")
if self.ed:
self.cuu = curses.tigetstr("cuu")
@@ -240,17 +242,15 @@ def main(server, eventHandler, tf = TerminalFilter):
console = logging.StreamHandler(sys.stdout)
format_str = "%(levelname)s: %(message)s"
format = bb.msg.BBLogFormatter(format_str)
- if interactive:
- format.enable_color()
bb.msg.addDefaultlogFilter(console)
console.setFormatter(format)
logger.addHandler(console)
if consolelogfile:
bb.utils.mkdirhier(os.path.dirname(consolelogfile))
- format = bb.msg.BBLogFormatter(format_str)
+ conlogformat = bb.msg.BBLogFormatter(format_str)
consolelog = logging.FileHandler(consolelogfile)
bb.msg.addDefaultlogFilter(consolelog)
- consolelog.setFormatter(format)
+ consolelog.setFormatter(conlogformat)
logger.addHandler(consolelog)
try: