Mercurial > public > mercurial-scm > hg
diff mercurial/scmposix.py @ 30309:4b1af1c867fa
scmutil: move util.termwidth()
I'm going to get rid of sys.stderr|out|in references from posix.termwidth().
In order to do that, termwidth() needs to take a ui, but functions in util.py
shouldn't depend on a ui object. So moves termwidth() to scmutil.py.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 20 Oct 2016 21:38:44 +0900 |
parents | c90a05124fae |
children | 5c379b1f56c7 |
line wrap: on
line diff
--- a/mercurial/scmposix.py Sun Nov 06 00:37:50 2016 -0700 +++ b/mercurial/scmposix.py Thu Oct 20 21:38:44 2016 +0900 @@ -1,5 +1,7 @@ from __future__ import absolute_import +import errno +import fcntl import os import sys @@ -38,3 +40,33 @@ return [encoding.environ['home'] + '/lib/hgrc'] else: return [os.path.expanduser('~/.hgrc')] + +def termwidth(): + try: + import array + import termios + for dev in (sys.stderr, sys.stdout, sys.stdin): + try: + try: + fd = dev.fileno() + except AttributeError: + continue + if not os.isatty(fd): + continue + try: + arri = fcntl.ioctl(fd, termios.TIOCGWINSZ, '\0' * 8) + width = array.array('h', arri)[1] + if width > 0: + return width + except AttributeError: + pass + except ValueError: + pass + except IOError as e: + if e[0] == errno.EINVAL: + pass + else: + raise + except ImportError: + pass + return 80