1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331
|
.. py:currentmodule:: blessed.terminal
Version History
===============
1.21
* bugfix infinite loop in :meth:`~Terminal.wrap` when "Wide" characters of
width 2 (East-Asian or Emoji) are used with a wrap width of 1, and a small
performance enhancement, :ghissue:`273` and :ghpull:`274` by :ghuser:`grayjk`
merged as :ghpull:`275`.
1.20
* introduced :meth:`~Terminal.get_fgcolor` and :meth:`~Terminal.get_bgcolor` to query
the terminal for the currently set colors. :ghissue:`237` by :ghuser:`stefanholek`
* bugfix: Copy globals dict before iterating to avoid RuntimeError in multithreaded
applications, :ghissue:`248` by :ghuser:`adamnovak`
1.19
* introduced :meth:`~Terminal.truncate` to truncate a string while
retaining the sequences, :ghissue:`211` by :ghuser:`fishermans-friend`
* enhancement: Add small sleep in :meth:`~Terminal.kbhit` on Windows
to reduce CPU load :ghissue:`209` by :ghuser:`numerlor`
* enhancement: :meth:`~Terminal.rjust`, :meth:`~Terminal.ljust`,
and :meth:`~Terminal.center` now accept :class:`~typing.SupportsIndex` types, :ghissue:`234`
* enhancement: When 88 colors is detected, it is now interpreted as 16 colors rather than raising
an :exc:`AssertionError`, :ghissue:`235`
* bugfix: Fix global variable declarations in type annotations, :ghissue:`230` by
:ghuser:`mwchase`
1.18
* bugfix: :meth:`~Terminal.split_seqs` for some sequences
like ``term.move_left(3)``, :ghissue:`197`.
* introduced: type annotations, :ghissue:`192` by :ghuser:`dlax`.
* bugfix: do not fail when ``sys.stdin`` is unset, :ghissue:`195` by
:ghuser:`Olen`
* docfix: correct "Bottom of the screen" example to use ``end=''`` and
document about it in location.rst, :ghissue:`188` by :ghuser:`pyfisch`
1.17
* introduced: :ref:`hyperlinks`, method :meth:`~Terminal.link`, :ghissue:`116`.
* introduced: 24-bit color support, detected by ``term.number_of_colors == 1 << 24``, and 24-bit
color foreground method :meth:`~Terminal.color_rgb` and background method
:meth:`~Terminal.on_color_rgb`, as well as 676 common X11 color attribute names are now
possible, such as ``term.aquamarine_on_wheat``, :ghissue:`60`.
* introduced: ``term.move_xy``, recommended over built-in ``move`` capability, as the
argument order, ``(x, y)`` matches the return value of :meth:`~.Terminal.get_location`, and all
other common graphics library calls, :ghissue:`65`.
* introduced: :meth:`~.Terminal.move_up`, :meth:`~Terminal.move_down`, :meth:`Terminal.move_left`,
:meth:`~Terminal.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 as
``term.move_right(9)``.
* introduced: :attr:`~Terminal.pixel_width` and :attr:`~Terminal.pixel_height` for libsixel
support or general curiosity.
* introduced: :meth:`~.Terminal.formatter` which returns callable formatters for valid text
formatters such as 'red' or 'bold_on_red', returning a
:class:`~blessed.formatters.NullCallableString` if passed an invalid text formatter.
* bugfix: prevent ``ValueError: I/O operation on closed file`` on ``sys.stdin`` in multiprocessing
environments, where the keyboard wouldn't work, anyway.
* bugfix: prevent error condition, ``ValueError: underlying buffer has been detached`` in rare
conditions where sys.__stdout__ has been detached in test frameworks. :ghissue:`126`.
* bugfix: off-by-one error in :meth:`~.Terminal.get_location`, now accounts for ``%i`` in
cursor_report, :ghissue:`94`.
* bugfix :meth:`~Terminal.split_seqs` and related functions failed to match when the color index
was greater than 15, :ghissue:`101`.
* bugfix: Context Managers, :meth:`~.Terminal.fullscreen`, :meth:`~.Terminal.hidden_cursor`, and
:meth:`~Terminal.keypad` now flush the stream after writing their sequences.
* bugfix: ``chr(127)``, ``\x7f`` has changed from keycode ``term.DELETE`` to the more common
match, ``term.BACKSPACE``, :ghissue:`115` by :ghuser:`jwezel`.
* bugfix: ensure :class:`~.FormattingOtherString` may be pickled.
* bugfix: Use ``UTF-8`` for keyboard if input encoding cannot be determined.
* deprecated: the curses ``move()`` capability is no longer recommended, suggest to use
:meth:`~.Terminal.move_xy()`, which matches the return value of :meth:`~.Terminal.get_location`.
* deprecated: ``superscript``, ``subscript``, ``shadow``, and ``dim`` are no longer "compoundable"
with colors, such as in phrase ``Terminal.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.
* bugfix: briefly tried calling :func:`curses.setupterm` with :attr:`os.devnull` as the file
descriptor, reverted. :ghissue:`59`.
* deprecated: :meth:`~Terminal.inkey` no longer raises RuntimeError when :attr:`~Terminal.stream`
is not a terminal, programs using :meth:`~Terminal.inkey` to block indefinitely if a keyboard is
not attached. :ghissue:`69`.
* deprecated: using argument ``_intr_continue`` to method :meth:`~Terminal.kbhit`, behavior is as
though such value is always True since 1.9.
* bugfix: Now imports on 3.10+
* bugfix: Fix detection of shift+arrow keys when using tmux. :ghissue:`178`.
* enhancement: Instantiate SequenceTextWrapper only once in
:meth:`~.Terminal.wrap`. :ghissue:`184`.
1.16
* introduced: Windows support?! :ghpull:`110` by :ghuser:`avylove`.
1.15
* enhancement: disable timing integration tests for keyboard routines.
* enhancement: Support python 3.7. :ghpull:`102`.
* enhancement: Various fixes to test automation :ghpull:`108`
1.14
* bugfix: :meth:`~.Terminal.wrap` misbehaved for text containing newlines,
:ghissue:`74`.
* bugfix: TypeError when using ``PYTHONOPTIMIZE=2`` environment variable,
:ghissue:`84`.
* bugfix: define ``blessed.__version__`` value,
:ghissue:`92`.
* bugfix: detect sequences ``\x1b[0K`` and ``\x1b2K``,
:ghissue:`95`.
1.13
* enhancement: :meth:`~.Terminal.split_seqs` introduced, and 4x cost
reduction in related sequence-aware functions, :ghissue:`29`.
* deprecated: ``blessed.sequences.measure_length`` function superseded by
:func:`~.iter_parse` if necessary.
* deprecated: warnings about "binary-packed capabilities" are no longer
emitted on strange terminal types, making best effort.
1.12
* enhancement: :meth:`~.Terminal.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
:paramref:`~.Terminal.__init__.stream` is :obj:`sys.stderr`.
1.11
* enhancement: :meth:`~.Terminal.inkey` can return more quickly for
combinations such as ``Alt + Z`` when ``MetaSendsEscape`` is enabled,
:ghissue:`30`.
* enhancement: :class:`~.FormattingString` may now be nested, such as
``t.red('red', t.underline('rum'))``, :ghissue:`61`
1.10
* workaround: provide ``sc`` and ``rc`` for Terminals of ``kind='ansi'``,
repairing :meth:`~.Terminal.location` :ghissue:`44`.
* bugfix: length of simple SGR reset sequence ``\x1b[m`` was not correctly
determined on all terminal types, :ghissue:`45`.
* deprecated: ``_intr_continue`` arguments 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
<https://www.python.org/dev/peps/pep-0475/>`_, blessed does the same.
1.9
* enhancement: :paramref:`~.Terminal.wrap.break_long_words` now supported by
:meth:`Terminal.wrap`
* Ignore :class:`curses.error` message ``'tparm() returned NULL'``:
this occurs on win32 or other platforms using a limited curses
implementation, such as PDCurses_, where :func:`curses.tparm` is
not implemented, or no terminal capability database is available.
* Context manager :meth:`~.keypad` emits sequences that enable
"application keys" such as the diagonal keys on the numpad.
This is equivalent to :meth:`curses.window.keypad`.
* bugfix: translate keypad application keys correctly.
* enhancement: no longer depend on the '2to3' tool for python 3 support.
* enhancement: allow ``civis`` and ``cnorm`` (*hide_cursor*, *normal_hide*)
to work with terminal-type *ansi* by emulating support by proxy.
* enhancement: new public attribute: :attr:`~.kind`: the very same as given
:paramref:`Terminal.__init__.kind` keyword argument. Or, when not given,
determined by and equivalent to the ``TERM`` Environment variable.
1.8
* enhancement: export keyboard-read function as public method ``getch()``,
so that it may be overridden by custom terminal implementers.
* enhancement: allow :meth:`~.inkey` and :meth:`~.kbhit` to return early
when interrupted by signal by passing argument ``_intr_continue=False``.
* enhancement: allow ``hpa`` and ``vpa`` (*move_x*, *move_y*) to work on
tmux(1) or screen(1) by emulating support by proxy.
* enhancement: add :meth:`~.Terminal.rstrip` and :meth:`~.Terminal.lstrip`,
strips both sequences and trailing or leading whitespace, respectively.
* enhancement: include wcwidth_ library support for
:meth:`~.Terminal.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 ``xterm`` or ``aixterm``.
* bugfix: when :func:`locale.getpreferredencoding` returns empty string or
an encoding that is not valid for ``codecs.getincrementaldecoder``,
fallback to ASCII and emit a warning.
* bugfix: ensure :class:`~.FormattingString` and
:class:`~.ParameterizingString` may be pickled.
* bugfix: allow `~.inkey` and related to be called without a keyboard.
* **change**: ``term.keyboard_fd`` is set ``None`` if ``stream`` or
``sys.stdout`` is not a tty, making ``term.inkey()``, ``term.cbreak()``,
``term.raw()``, no-op.
* bugfix: ``\x1bOH`` (KEY_HOME) was incorrectly mapped as KEY_LEFT.
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 :meth:`~.cbreak`, which is equivalent to
entering terminal state by :func:`tty.setcbreak` and returning
on exit, as well as the lesser recommended :meth:`~.raw`,
pairing from :func:`tty.setraw`.
* introduced: :meth:`~.inkey`, which will return one or more characters
received by the keyboard as a unicode sequence, with additional attributes
:attr:`~.Keystroke.code` and :attr:`~.Keystroke.name`. This allows
application keys (such as the up arrow, or home key) to be detected.
Optional value :paramref:`~.inkey.timeout` allows for timed poll.
* introduced: :meth:`~.Terminal.center`, :meth:`~.Terminal.rjust`,
:meth:`~.Terminal.ljust`, allowing text containing sequences to be aligned
to detected horizontal screen width, or by
:paramref:`~.Terminal.center.width` specified.
* introduced: :meth:`~.wrap` method. Allows text containing sequences to be
word-wrapped without breaking mid-sequence, honoring their printable width.
* introduced: :meth:`~.Terminal.strip`, strips all sequences *and*
whitespace.
* introduced: :meth:`~.Terminal.strip_seqs` strip only sequences.
* introduced: :meth:`~.Terminal.rstrip` and :meth:`~.Terminal.lstrip` strips
both sequences and trailing or leading whitespace, respectively.
* bugfix: cannot call :func:`curses.setupterm` more than once per process
(from :meth:`Terminal.__init__`): Previously, blessed pretended
to support several instances of different Terminal :attr:`~.kind`, but was
actually using the :attr:`~.kind` specified by the first instantiation of
:class:`~.Terminal`. A warning is now issued. Although this is
misbehavior is still allowed, a :class:`warnings.WarningMessage` is now
emitted to notify about subsequent terminal misbehavior.
* bugfix: resolved issue where :attr:`~.number_of_colors` fails when
:attr:`~.does_styling` is ``False``. Resolves issue where piping tests
output would fail.
* bugfix: warn and set :attr:`~.does_styling` to ``False`` when the given
:attr:`~.kind` is 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
:attr:`~.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.error`` exceptions.
* enhancement: do not ignore :class:`curses.error` exceptions, 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_subprocess``
decorator
are used to test a multitude of terminal types.
* enhancement: test accessories ``@as_subprocess`` resolves 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 :attr:`~.does_styling`. This takes :attr:`~.force_styling`
into account and should replace most uses of :attr:`~.is_a_tty`.
* Make :attr:`~.is_a_tty` a read-only property like :attr:`~.does_styling`.
Writing to it never would have done anything constructive.
* Add :meth:`~.fullscreen`` and :meth:`hidden_cursor` to the
auto-generated docs.
1.5.1
* Clean up fabfile, removing the redundant ``test`` command.
* Add Travis support.
* Make ``python setup.py test`` work 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 #29 <https://github.com/erikrose/blessings/pull/29>`).
* Parameterizing a capability no longer crashes when there is no tty
(`<Vitja Makarov #31 <https://github.com/erikrose/blessings/pull/31>`)
1.5
* Add syntactic sugar and documentation for ``enter_fullscreen``
and ``exit_fullscreen``.
* Add context managers :meth:`~.fullscreen` and :meth:`~.hidden_cursor`.
* Now you can force a :class:`~.Terminal` to never to emit styles by
passing keyword argument ``force_styling=None``.
1.4
* Add syntactic sugar for cursor visibility control and single-space-movement
capabilities.
* Endorse the :meth:`~.location` context manager for restoring cursor
position after a series of manual movements.
* Fix a bug in which :meth:`~.location` that wouldn't do anything when
passed zeros.
* Allow tests to be run with ``python setup.py test``.
1.3
* Added :attr:`~.number_of_colors`, which tells you how many colors the
terminal supports.
* Made :attr:`~.color`\(n) and :attr:`~.on_color`\(n) callable to wrap a
string, like the named colors can. Also, make them both fall back to the
``setf`` and ``setb`` capabilities (like the named colors do) if the
termcap entries for ``setaf`` and ``setab`` are not available.
* Allowed :attr:`~.color` to act as an unparametrized string, not just a
callable.
* Made :attr:`~.height` and :attr:`~.width` examine 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 :class:`~.Terminal` and
:class:`~.FormattingString`.
* Updated docs to reflect that terminal addressing (as in :meth:`~location`)
is 0-based.
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
(https://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 :attr:`~.is_a_tty` to determine whether the output stream is a
terminal.
* Sugared the remaining interesting string capabilities.
* Allow :meth:`~.location` to operate on just an x *or* y coordinate.
1.0
* Extracted Blessed from `nose-progressive`_.
.. _`nose-progressive`: https://pypi.org/project/nose-progressive/
.. _`erikrose/blessings`: https://github.com/erikrose/blessings
.. _`jquast/blessed`: https://github.com/jquast/blessed
.. _`issue tracker`: https://github.com/jquast/blessed/issues/
.. _curses: https://docs.python.org/library/curses.html
.. _colorama: https://pypi.python.org/pypi/colorama
.. _wcwidth: https://pypi.org/project/wcwidth/
.. _`cbreak(3)`: http://www.openbsd.org/cgi-bin/man.cgi?query=cbreak&apropos=0&sektion=3
.. _`curs_getch(3)`: http://www.openbsd.org/cgi-bin/man.cgi?query=curs_getch&apropos=0&sektion=3
.. _`termios(4)`: http://www.openbsd.org/cgi-bin/man.cgi?query=termios&apropos=0&sektion=4
.. _`terminfo(5)`: http://www.openbsd.org/cgi-bin/man.cgi?query=terminfo&apropos=0&sektion=5
.. _tigetstr: http://www.openbsd.org/cgi-bin/man.cgi?query=tigetstr&sektion=3
.. _tparm: http://www.openbsd.org/cgi-bin/man.cgi?query=tparm&sektion=3
.. _`API Documentation`: http://blessed.rtfd.org
.. _`PDCurses`: https://www.lfd.uci.edu/~gohlke/pythonlibs/#curses
.. _`ansi`: https://github.com/tehmaze/ansi
|