From: Zac Medico Date: Sun, 27 May 2007 06:17:58 +0000 (-0000) Subject: Add a get_term_size() function that uses the curses module if available and otherwise... X-Git-Tag: v2.2_pre1~1360 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=26722a60c214295187372ab1a319cdd5283f2a1f;p=portage.git 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 --- 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.