Version History¶
- 1.17
- introduced: 24-bit color support, detected by
term.number_of_colors == 1 << 24, and 24-bit color foreground methodcolor_rgb()and background methodon_color_rgb(), as well as 676 common X11 color attribute names are now possible, such asterm.aquamarine_on_wheat, #60. - introduced:
term.move_xy, recommended over built-inmovecapability, as the argument order,(x, y)matches the return value ofget_location(), and all other common graphics library calls, #65. - introduced:
move_up(),move_down(),Terminal.move_left(),move_right()which are strings that move the cursor one cell in the respective direction, are now also callables for moving n cells to the given direction, such asterm.move_right(9). - bugfix: prevent error condition,
ValueError: underlying buffer has been detachedin rare conditions where sys.__stdout__ has been detached in test frameworks. #126. - bugfix: off-by-one error in
get_location(), now accounts for%iin cursor_report, #94. - bugfix
split_seqs()and related functions failed to match when the color index was greater than 15, #101. - bugfix: Context Managers,
fullscreen(),hidden_cursor(), andkeypad()now flush the stream after writing their sequences. - bugfix:
chr(127),\x7fhas changed from keycodeterm.DELETEto the more common match,term.BACKSPACE, :ghissue:115` by jwezel. - deprecated: the curses
move()capability is no longer recommended, suggest to usemove_xy(), which matches the return value ofget_location(). - deprecated:
superscript,subscript,shadow, anddimare no longer “compoundable” with colors, such as in phraseTerminal.blue_subscript('a'). These attributes are not typically supported, anyway. Use Unicode text or 256 or 24-bit color codes instead. - deprecated: additional key names, such as
KEY_TAB, are no longer “injected” into the curses module namespace. - deprecated:
curses.setupterm()is now called withos.devnullas the file descriptor, let us know if this causes any issues. #59. - deprecated:
inkey()no longer raises RuntimeError whenstreamis not a terminal, programs usinginkey()to block indefinitely if a keyboard is not attached. #69. - deprecated: using argument
_intr_continueto methodkbhit(), behavior is as though such value is always True since 1.9.
- introduced: 24-bit color support, detected by
- 1.16
- 1.15
- 1.14
- 1.13
- enhancement:
split_seqs()introduced, and 4x cost reduction in related sequence-aware functions, #29. - deprecated:
blessed.sequences.measure_lengthfunction superseded byiter_parse()if necessary. - deprecated: warnings about “binary-packed capabilities” are no longer emitted on strange terminal types, making best effort.
- enhancement:
- 1.12
- enhancement:
get_location()returns the(row, col)position of the cursor at the time of call for attached terminal. - enhancement: a keyboard now detected as stdin when
streamissys.stderr.
- enhancement:
- 1.11
- enhancement:
inkey()can return more quickly for combinations such asAlt + ZwhenMetaSendsEscapeis enabled, #30. - enhancement:
FormattingStringmay now be nested, such ast.red('red', t.underline('rum')), #61
- enhancement:
- 1.10
- workaround: provide
scandrcfor Terminals ofkind='ansi', repairinglocation()#44. - bugfix: length of simple SGR reset sequence
\x1b[mwas not correctly determined on all terminal types, #45. - deprecated:
_intr_continuearguments introduced in 1.8 are now marked deprecated in 1.10: beginning with python 3.5, the default behavior is as though this argument is always True, PEP-475, blessed does the same.
- workaround: provide
- 1.9
- enhancement:
break_long_wordsnow supported byTerminal.wrap() - Ignore
curses.errormessage'tparm() returned NULL': this occurs on win32 or other platforms using a limited curses implementation, such as PDCurses, wherecurses.tparm()is not implemented, or no terminal capability database is available. - Context manager
keypad()emits sequences that enable “application keys” such as the diagonal keys on the numpad. This is equivalent tocurses.window.keypad(). - bugfix: translate keypad application keys correctly.
- enhancement: no longer depend on the ‘2to3’ tool for python 3 support.
- enhancement: allow
civisandcnorm(hide_cursor, normal_hide) to work with terminal-type ansi by emulating support by proxy. - enhancement: new public attribute:
kind: the very same as givenTerminal.__init__.kindkeyword argument. Or, when not given, determined by and equivalent to theTERMEnvironment variable.
- enhancement:
- 1.8
- enhancement: export keyboard-read function as public method
getch(), so that it may be overridden by custom terminal implementers. - enhancement: allow
inkey()andkbhit()to return early when interrupted by signal by passing argument_intr_continue=False. - enhancement: allow
hpaandvpa(move_x, move_y) to work on tmux(1) or screen(1) by emulating support by proxy. - enhancement: add
rstrip()andlstrip(), strips both sequences and trailing or leading whitespace, respectively. - enhancement: include wcwidth library support for
length(): the printable width of many kinds of CJK (Chinese, Japanese, Korean) ideographs and various combining characters may now be determined. - enhancement: better support for detecting the length or sequences of
externally-generated ecma-48 codes when using
xtermoraixterm. - bugfix: when
locale.getpreferredencoding()returns empty string or an encoding that is not valid forcodecs.getincrementaldecoder, fallback to ASCII and emit a warning. - bugfix: ensure
FormattingStringandParameterizingStringmay be pickled. - bugfix: allow ~.inkey and related to be called without a keyboard.
- change:
term.keyboard_fdis setNoneifstreamorsys.stdoutis not a tty, makingterm.inkey(),term.cbreak(),term.raw(), no-op. - bugfix:
\x1bOH(KEY_HOME) was incorrectly mapped as KEY_LEFT.
- enhancement: export keyboard-read function as public method
- 1.7
- Forked github project erikrose/blessings to jquast/blessed, this project was previously known as blessings version 1.6 and prior.
- introduced: context manager
cbreak(), which is equivalent to entering terminal state bytty.setcbreak()and returning on exit, as well as the lesser recommendedraw(), pairing fromtty.setraw(). - introduced:
inkey(), which will return one or more characters received by the keyboard as a unicode sequence, with additional attributescodeandname. This allows application keys (such as the up arrow, or home key) to be detected. Optional valuetimeoutallows for timed poll. - introduced:
center(),rjust(),ljust(), allowing text containing sequences to be aligned to detected horizontal screen width, or bywidthspecified. - introduced:
wrap()method. Allows text containing sequences to be word-wrapped without breaking mid-sequence, honoring their printable width. - introduced:
strip(), strips all sequences and whitespace. - introduced:
strip_seqs()strip only sequences. - introduced:
rstrip()andlstrip()strips both sequences and trailing or leading whitespace, respectively. - bugfix: cannot call
curses.setupterm()more than once per process (fromTerminal.__init__()): Previously, blessed pretended to support several instances of different Terminalkind, but was actually using thekindspecified by the first instantiation ofTerminal. A warning is now issued. Although this is misbehavior is still allowed, awarnings.WarningMessageis now emitted to notify about subsequent terminal misbehavior. - bugfix: resolved issue where
number_of_colorsfails whendoes_stylingisFalse. Resolves issue where piping tests output would fail. - bugfix: warn and set
does_stylingtoFalsewhen the givenkindis not found in the terminal capability database. - bugfix: allow unsupported terminal capabilities to be callable just as
supported capabilities, so that the return value of
color(n) may be called on terminals without color capabilities. - bugfix: for terminals without underline, such as vt220,
term.underline('text')would emit'text' + term.normal. Now it emits only'text'. - enhancement: some attributes are now properties, raise exceptions when assigned.
- enhancement: pypy is now a supported python platform implementation.
- enhancement: removed pokemon
curses.errorexceptions. - enhancement: do not ignore
curses.errorexceptions, unhandled curses errors are legitimate errors and should be reported as a bug. - enhancement: converted nose tests to pytest, merged travis and tox.
- enhancement: pytest fixtures, paired with a new
@as_subprocessdecorator are used to test a multitude of terminal types. - enhancement: test accessories
@as_subprocessresolves various issues with different terminal types that previously went untested. - deprecation: python2.5 is no longer supported (as tox does not supported).
- 1.6
- Add
does_styling. This takesforce_stylinginto account and should replace most uses ofis_a_tty. - Make
is_a_ttya read-only property likedoes_styling. Writing to it never would have done anything constructive. - Add
fullscreen`()andhidden_cursor()to the auto-generated docs.
- Add
- 1.5.1
- Clean up fabfile, removing the redundant
testcommand. - Add Travis support.
- Make
python setup.py testwork without spurious errors on 2.6. - Work around a tox parsing bug in its config file.
- Make context managers clean up after themselves even if there’s an exception (Vitja Makarov PR #29).
- Parameterizing a capability no longer crashes when there is no tty (Vitja Makarov PR #31)
- Clean up fabfile, removing the redundant
- 1.5
- Add syntactic sugar and documentation for
enter_fullscreenandexit_fullscreen. - Add context managers
fullscreen()andhidden_cursor(). - Now you can force a
Terminalto never to emit styles by passing keyword argumentforce_styling=None.
- Add syntactic sugar and documentation for
- 1.4
- Add syntactic sugar for cursor visibility control and single-space-movement capabilities.
- Endorse the
location()context manager for restoring cursor position after a series of manual movements. - Fix a bug in which
location()that wouldn’t do anything when passed zeros. - Allow tests to be run with
python setup.py test.
- 1.3
- Added
number_of_colors, which tells you how many colors the terminal supports. - Made
color(n) andon_color(n) callable to wrap a string, like the named colors can. Also, make them both fall back to thesetfandsetbcapabilities (like the named colors do) if the termcap entries forsetafandsetabare not available. - Allowed
colorto act as an unparametrized string, not just a callable. - Made
heightandwidthexamine any passed-in stream before falling back to stdout (This rarely if ever affects actual behavior; it’s mostly philosophical). - Made caching simpler and slightly more efficient.
- Got rid of a reference cycle between
TerminalandFormattingString. - Updated docs to reflect that terminal addressing (as in
location()) is 0-based.
- Added
- 1.2
- Added support for Python 3! We need 3.2.3 or greater, because the curses library couldn’t decide whether to accept strs or bytes before that (http://bugs.python.org/issue10570).
- Everything that comes out of the library is now unicode. This lets us support Python 3 without making a mess of the code, and Python 2 should continue to work unless you were testing types (and badly). Please file a bug if this causes trouble for you.
- Changed to the MIT License for better world domination.
- Added Sphinx docs.
- 1.1
- Added nicely named attributes for colors.
- Introduced compound formatting.
- Added wrapper behavior for styling and colors.
- Let you force capabilities to be non-empty, even if the output stream is not a terminal.
- Added
is_a_ttyto determine whether the output stream is a terminal. - Sugared the remaining interesting string capabilities.
- Allow
location()to operate on just an x or y coordinate.
- 1.0
- Extracted Blessed from nose-progressive.