summaryrefslogtreecommitdiffstats
path: root/python/mozterm/mozterm/terminal.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozterm/mozterm/terminal.py')
-rw-r--r--python/mozterm/mozterm/terminal.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/python/mozterm/mozterm/terminal.py b/python/mozterm/mozterm/terminal.py
new file mode 100644
index 0000000000..f82daa67fd
--- /dev/null
+++ b/python/mozterm/mozterm/terminal.py
@@ -0,0 +1,50 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import os
+import sys
+
+import six
+
+
+class NullTerminal(object):
+ """Replacement for `blessed.Terminal()` that does no formatting."""
+
+ number_of_colors = 0
+ width = 0
+ height = 0
+
+ def __init__(self, stream=None, **kwargs):
+ self.stream = stream or sys.__stdout__
+ try:
+ self.is_a_tty = os.isatty(self.stream.fileno())
+ except Exception:
+ self.is_a_tty = False
+
+ class NullCallableString(six.text_type):
+ """A dummy callable Unicode stolen from blessings"""
+
+ def __new__(cls):
+ new = six.text_type.__new__(cls, "")
+ return new
+
+ def __call__(self, *args):
+ if len(args) != 1 or isinstance(args[0], int):
+ return ""
+ return args[0]
+
+ def __getattr__(self, attr):
+ return self.NullCallableString()
+
+
+def Terminal(raises=False, disable_styling=False, **kwargs):
+ if disable_styling:
+ return NullTerminal(**kwargs)
+ try:
+ import blessed
+ except Exception:
+ if raises:
+ raise
+ return NullTerminal(**kwargs)
+ return blessed.Terminal(**kwargs)