~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-12-04 10:59:49 UTC
  • mfrom: (4862.1.1 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20091204105949-cp822ctg4bp7vgd4
(vila) BZR_COLUMNS can override terminal_width()

Show diffs side-by-side

added added

removed removed

Lines of Context:
1330
1330
    normalized_filename = _inaccessible_normalized_filename
1331
1331
 
1332
1332
 
 
1333
default_terminal_width = 80
 
1334
"""The default terminal width for ttys.
 
1335
 
 
1336
This is defined so that higher levels can share a common fallback value when
 
1337
terminal_width() returns None.
 
1338
"""
 
1339
 
 
1340
 
1333
1341
def terminal_width():
1334
 
    """Return estimated terminal width."""
 
1342
    """Return terminal width.
 
1343
 
 
1344
    None is returned if the width can't established precisely.
 
1345
    """
 
1346
 
 
1347
    # If BZR_COLUMNS is set, take it, user is always right
 
1348
    try:
 
1349
        return int(os.environ['BZR_COLUMNS'])
 
1350
    except (KeyError, ValueError):
 
1351
        pass
 
1352
 
 
1353
    isatty = getattr(sys.stdout, 'isatty', None)
 
1354
    if  isatty is None or not isatty():
 
1355
        # Don't guess, setting BZR_COLUMNS is the recommended way to override.
 
1356
        return None
 
1357
 
1335
1358
    if sys.platform == 'win32':
1336
 
        return win32utils.get_console_size()[0]
1337
 
    width = 0
 
1359
        return win32utils.get_console_size(defaultx=None)[0]
 
1360
 
1338
1361
    try:
1339
1362
        import struct, fcntl, termios
1340
1363
        s = struct.pack('HHHH', 0, 0, 0, 0)
1341
1364
        x = fcntl.ioctl(1, termios.TIOCGWINSZ, s)
1342
1365
        width = struct.unpack('HHHH', x)[1]
1343
 
    except IOError:
1344
 
        pass
1345
 
    if width <= 0:
 
1366
    except (IOError, AttributeError):
 
1367
        # If COLUMNS is set, take it
1346
1368
        try:
1347
 
            width = int(os.environ['COLUMNS'])
1348
 
        except:
1349
 
            pass
 
1369
            return int(os.environ['COLUMNS'])
 
1370
        except (KeyError, ValueError):
 
1371
            return None
 
1372
 
1350
1373
    if width <= 0:
1351
 
        width = 80
 
1374
        # Consider invalid values as meaning no width
 
1375
        return None
1352
1376
 
1353
1377
    return width
1354
1378