Skip to content

Commit

Permalink
Fall back to env vars to find height and width. Make the height-and-w…
Browse files Browse the repository at this point in the history
…idth test run. Close erikrose#46.
  • Loading branch information
erikrose committed Nov 6, 2013
2 parents 536396a + 776f272 commit e104550
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 5 deletions.
2 changes: 2 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -439,6 +439,8 @@ Version History
* Make ``is_a_tty`` a read-only property, like ``does_styling``. Writing to
it never would have done anything constructive.
* Add ``fullscreen()`` and ``hidden_cursor()`` to the auto-generated docs.
* Fall back to ``LINES`` and ``COLUMNS`` environment vars to find height and
width. (jquast)

1.5.1
* Clean up fabfile, removing the redundant ``test`` command.
Expand Down
16 changes: 14 additions & 2 deletions blessings/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,16 +217,28 @@ def width(self):
return self._height_and_width()[1]

def _height_and_width(self):
"""Return a tuple of (terminal height, terminal width)."""
"""Return a tuple of (terminal height, terminal width).
Start by trying TIOCGWINSZ (Terminal I/O-Control: Get Window Size),
falling back to environment variables (LINES, COLUMNS), and returning
(None, None) if those are unavailable or invalid.
"""
# tigetnum('lines') and tigetnum('cols') update only if we call
# setupterm() again.
for descriptor in self._init_descriptor, sys.__stdout__:
try:
return struct.unpack(
'hhhh', ioctl(descriptor, TIOCGWINSZ, '\000' * 8))[0:2]
except IOError:
# when the output stream or init descriptor is not a tty, such
# as when when stdout is piped to another program, fe. tee(1),
# these ioctls will raise IOError
pass
return None, None # Should never get here
try:
return int(environ.get('LINES')), int(environ.get('COLUMNS'))
except TypeError:
return None, None

@contextmanager
def location(self, x=None, y=None):
Expand Down
6 changes: 3 additions & 3 deletions blessings/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,11 @@ def test_parametrization():
eq_(TestTerminal().cup(3, 4), unicode_parm('cup', 3, 4))


def height_and_width():
def test_height_and_width():
"""Assert that ``height_and_width()`` returns ints."""
t = TestTerminal() # kind shouldn't matter.
assert isinstance(int, t.height)
assert isinstance(int, t.width)
assert isinstance(t.height, int)
assert isinstance(t.width, int)


def test_stream_attr():
Expand Down

0 comments on commit e104550

Please sign in to comment.