|
@@ -1,9 +1,11 @@
|
|
|
from __future__ import unicode_literals
|
|
|
|
|
|
+import collections
|
|
|
import getpass
|
|
|
import optparse
|
|
|
import os
|
|
|
import re
|
|
|
+import shutil
|
|
|
import socket
|
|
|
import subprocess
|
|
|
import sys
|
|
@@ -364,6 +366,33 @@ def workaround_optparse_bug9161():
|
|
|
return real_add_option(self, *bargs, **bkwargs)
|
|
|
optparse.OptionGroup.add_option = _compat_add_option
|
|
|
|
|
|
+if hasattr(shutil, 'get_terminal_size'): # Python >= 3.3
|
|
|
+ compat_get_terminal_size = shutil.get_terminal_size
|
|
|
+else:
|
|
|
+ _terminal_size = collections.namedtuple('terminal_size', ['columns', 'lines'])
|
|
|
+
|
|
|
+ def compat_get_terminal_size():
|
|
|
+ columns = compat_getenv('COLUMNS', None)
|
|
|
+ if columns:
|
|
|
+ columns = int(columns)
|
|
|
+ else:
|
|
|
+ columns = None
|
|
|
+ lines = compat_getenv('LINES', None)
|
|
|
+ if lines:
|
|
|
+ lines = int(lines)
|
|
|
+ else:
|
|
|
+ lines = None
|
|
|
+
|
|
|
+ try:
|
|
|
+ sp = subprocess.Popen(
|
|
|
+ ['stty', 'size'],
|
|
|
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
|
+ out, err = sp.communicate()
|
|
|
+ lines, columns = map(int, out.split())
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+ return _terminal_size(columns, lines)
|
|
|
+
|
|
|
|
|
|
__all__ = [
|
|
|
'compat_HTTPError',
|
|
@@ -371,6 +400,7 @@ __all__ = [
|
|
|
'compat_chr',
|
|
|
'compat_cookiejar',
|
|
|
'compat_expanduser',
|
|
|
+ 'compat_get_terminal_size',
|
|
|
'compat_getenv',
|
|
|
'compat_getpass',
|
|
|
'compat_html_entities',
|