diff options
author | Zac Medico <zmedico@gentoo.org> | 2007-05-27 06:17:58 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2007-05-27 06:17:58 +0000 |
commit | 26722a60c214295187372ab1a319cdd5283f2a1f (patch) | |
tree | 818e374515c118ad6260981100f69ab8e0267951 | |
parent | 02417974e952f0c26e1a1c24ec42204be22bc1a2 (diff) | |
download | portage-26722a60c214295187372ab1a319cdd5283f2a1f.tar.gz portage-26722a60c214295187372ab1a319cdd5283f2a1f.tar.bz2 portage-26722a60c214295187372ab1a319cdd5283f2a1f.zip |
Add a get_term_size() function that uses the curses module if available and otherwise falls back to parsing the output of `stty size`.
svn path=/main/trunk/; revision=6638
-rw-r--r-- | pym/portage/output.py | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/pym/portage/output.py b/pym/portage/output.py index 75e9aad42..01595e5b1 100644 --- a/pym/portage/output.py +++ b/pym/portage/output.py @@ -237,6 +237,29 @@ def create_color_func(color_key): for c in compat_functions_colors: globals()[c] = create_color_func(c) +def get_term_size(): + """ + Get the number of lines and columns of the tty that is connected to + stdout. Returns a tuple of (lines, columns) or (-1, -1) if an error + occurs. The curses module is used if available, otherwise the output of + `stty size` is parsed. + """ + try: + import curses + curses.setupterm() + return curses.tigetnum('lines'), curses.tigetnum('cols') + except ImportError: + pass + st, out = commands.getstatusoutput('stty size') + if st == os.EX_OK: + out = out.split() + if len(out) == 2: + try: + return int(out[0]), int(out[1]) + except ValueError: + pass + return -1, -1 + class EOutput: """ Performs fancy terminal formatting for status and informational messages. @@ -264,17 +287,7 @@ class EOutput: self.__last_e_cmd = "" self.__last_e_len = 0 self.quiet = False - columns = 0 - try: - columns = int(os.getenv("COLUMNS", 0)) - except ValueError: - pass - if columns <= 0: - try: - columns = int(commands.getoutput( - 'set -- `stty size 2>/dev/null` ; echo "$2"')) - except ValueError: - pass + lines, columns = get_term_size() if columns <= 0: columns = 80 # Adjust columns so that eend works properly on a standard BSD console. |