From 045a135786082d9a11cabc91a04e24db781abbd3 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Wed, 13 May 2009 13:06:32 +0200 Subject: [PATCH] apply and generalize patch from Ronny regarding dumb terminals, add doc note --HG-- branch : trunk --- py/io/terminalwriter.py | 8 ++++++-- py/io/testing/test_terminalwriter.py | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/py/io/terminalwriter.py b/py/io/terminalwriter.py index aa68fed08..98eeb7c78 100644 --- a/py/io/terminalwriter.py +++ b/py/io/terminalwriter.py @@ -129,6 +129,10 @@ def ansi_print(text, esc, file=None, newline=True, flush=False): if flush: file.flush() +def should_do_markup(file): + return hasattr(file, 'isatty') and file.isatty() \ + and os.environ.get('TERM') != 'dumb' + class TerminalWriter(object): _esctable = dict(black=30, red=31, green=32, yellow=33, blue=34, purple=35, cyan=36, white=37, @@ -146,7 +150,7 @@ class TerminalWriter(object): file = WriteFile(file) self._file = file self.fullwidth = get_terminal_width() - self.hasmarkup = hasattr(file, 'isatty') and file.isatty() + self.hasmarkup = should_do_markup(file) def _escaped(self, text, esc): if esc and self.hasmarkup: @@ -217,7 +221,7 @@ class Win32ConsoleWriter(object): file = WriteFile(file) self._file = file self.fullwidth = get_terminal_width() - self.hasmarkup = hasattr(file, 'isatty') and file.isatty() + self.hasmarkup = should_do_markup(file) def sep(self, sepchar, title=None, fullwidth=None, **kw): if fullwidth is None: diff --git a/py/io/testing/test_terminalwriter.py b/py/io/testing/test_terminalwriter.py index e34583609..4bd796ab6 100644 --- a/py/io/testing/test_terminalwriter.py +++ b/py/io/testing/test_terminalwriter.py @@ -1,6 +1,7 @@ import py import os, sys from py.__.io import terminalwriter +import StringIO def skip_win32(): if sys.platform == 'win32': @@ -20,6 +21,14 @@ def test_terminalwriter_default_instantiation(): tw = py.io.TerminalWriter(stringio=True) assert hasattr(tw, 'stringio') +def test_terminalwriter_dumb_term_no_markup(monkeypatch): + monkeypatch.setattr(os, 'environ', {'TERM': 'dumb', 'PATH': ''}) + monkeypatch.setattr(sys, 'stdout', StringIO.StringIO()) + monkeypatch.setattr(sys.stdout, 'isatty', lambda:True) + assert sys.stdout.isatty() + tw = py.io.TerminalWriter() + assert not tw.hasmarkup + class BaseTests: def test_line(self): tw = self.getwriter()