pyte Changelog
==============

Here you can see the full list of changes between each pyte release.

Version 0.8.2
-------------

Technical release, released on November 13th 2023.

- Added py.typed to the source archive and wheel files.

Version 0.8.1
-------------

Released on April 10th 2022.

- Yet another fix of ``Screen.set_margins`` for the case of CSI
  with no arguments. See issue #61 on GitHub.
- Changed ``Screen.erase_in_display`` to accept additional positional
  arguments as some some ``clear`` implementations include a ``;`` after
  the first parameter causing ``pyte`` to assume a ``0`` second parameter.
- Changed ``Stream`` FSM to reinit on error when parsing control sequence.
- Added support for blink to the SGR handler. See PR #120 on GitHub.
  Thanks to @eight04!
- Changed ``Stream`` to skip XTerm-specific ``ESC]...$[a-z]`` sequences.
  See issue #117 on GitHub.
- Dropped Python 2.X support. The minimal required version of Python is
  now 3.7.

Version 0.8.0
-------------

Released on April 6th, 2018.

This release is NOT backward compatible with 0.7.X branch!

- Modified the logic around tracking position in the ``HistoryScreen``,
  allowing the full history to be accessed. See PR #96 on GitHub.
- Send C0 encoded CSI instead of C1, avoiding compatibility issues with
  unicode. See issue #99 on GitHub.
- Changed ``Stream`` to really ignore ``SI`` in UTF-8 mode. See PR #106
  on GitHub. Thanks to @jwodder!
- Fixed `DECSCNM` handling bug. The attributes of ``Screen.default_char``
  were not reversed leaving all blank characters as-is. See PR #102 on
  GitHub. Thanks to @zblz!
- Correctly terminate OSC mode in ``Stream`` on receipt of a C0 encoded ``ST``
  character.
- Allowed resetting cursor attributes in the middle of the SGR sequence.
  See PR#109 on GiHub. Thanks @andreivasiliu!
- On exit from `DECCOLM` mode, restore the terminal width from before entering
  `DECCOLM` mode.
- Changed ``Screen.select_graphic_rendition`` to ignore malformed
  256/24bit colours. See issue #115 on GitHub.

Version 0.7.0
-------------

Released on October 7th 2017.

This release is NOT backward compatible with 0.6.X branch!

- Removed deprecated ``only`` parameter of ``Stream.attach``.
- Removed deprecated ``encoding`` parameter of ``ByteStream``.
- Fixed ``how == 3`` handling in ``DiffScreen.erase_in_display``.
- Deprecated ``DiffScreen``. Its functionality has been backported
  to the base ``Screen`` class.
- Fixed a bug in ``DiffScreen.draw`` which incorrectly handled the
  case when the input of ``draw`` required several lines.
- Fixed a bug in ``Screen`` which did not ignore ``ESC (`` argument in
  UTF8 mode. See issue #88 on GitHub.
- Changed ``Screen.resize`` to do nothing if the requested size matches
  the current one.
- Disallowed private mode for ``Screen.report_device_attributes``. This
  was causing an infinite loop in Emacs and Vim. See issue #81 on GitHub.
- Fixed a bug in `OSC` parsing, which caused ``Stream`` to hang upon
  receiving a palette reset request ``ESC ] R``.
- Changed ``Screen.reset`` not to reset `DECOM`. See discussion in issue
  #95 on Github.
- Changed the first tabstop to be at the 9-th column. See PR #98 on
  GitHub. Thanks to @gordon-quad!

Version 0.6.0
-------------

Released on May 28th 2017

This release is NOT backward compatible with 0.5.X branch!

- Optimized ``Stream.feed`` for plain-text input. The code was backported
  from ``pymux`` project by Jonathan Slenders.
- Optimized ``Screen`` by changing ``Screen.buffer`` to dict-of-dicts. The
  idea was borrowed from ``pymux`` project by Jonathan Slenders. The
  implementation was done by @istarion.
- Further optimized ``Stream._parser_fsm`` by forcing static binding between
  ``Stream`` events and ``Screen`` methods. The code was backported from
  ``pmux`` project by Jonathan Slenders.
- Restricted ``Stream`` to a single listener and deprecated ``attach`` and
  ``detach``. The old logic can be emulated by a fanout proxy, forwarding
  events to a list of its listeners.
- Replaced ``DebugStream`` with ``DebugScreen`` to workaround the single
  listener limitation (previsouly ``DebugStream`` implicitly added a
  listener when instantiated). Unlike other screens ``DebugScreen`` does
  not maintain any state.
- Changed ``DebugScreen`` to emit JSON instead of custom text format.
- Removed overly generic ``Screen.__before__`` and ``Screen.__after__``.
- Renamed ``Screen.set_charset`` to a more appropriate
  ``Screen.define_charset``.
- Added support for ECMA-035 `DOCS` command to ``ByteStream`` which no longer
  accepts ``encoding`` as an argument and instead sets it as instructed by
  `DOCS`. The default encoding is assumed to be UTF-8.
- Added support for OSC sequences allowing to set terminal title and
  icon name.
- Allowed 256 and 24bit colours in ``Screen.select_graphic_rendition``.
- Added support for ``aixterm`` colours in ``Screen.select_graphic_rendition``,
  see issue #57 on GitHub.
- Changed ``Screen.select_graphic_rendition`` to ignore 0 if it is
  given along with other attributes, ie ``"0;1;2"`` is now equivalent
  to ``"1;2"``.
- Fixed rendering of multicolumn characters at ``Screen` boundaries.
  Thanks to @shaform! See PR #55 on GitHub.
- Fixed ``Screen.display`` in the case of multicolumn characters. See
  issue #52 on GitHub.
- Fixed `DECSTBM` handling in case of missing arguments. See issue #61 on
  GitHub.
- Fixed the way ``Screen.cursor_up`` and ``Screen.cursor_down`` interact
  with the scrolling region. See #63 on GitHub.
- Added a minimal web terminal example by @demiurg906. For a faster and
  more fully-featured version, see
  `demiurg906/pyte_gui <https://github.com/demiurg906/pyte_gui>`_.
- Fixed ``Screen.cursor_back`` when called after the draw in the last column.
- Fixed ``Screen.inser_characters`` when called with an argument larger
  than the number of columns. Thanks to @istarion! See PR #74 on GitHub.
- Fixed ``Screen.erase_in_display`` which did not handle all values supported
  by ``TERM=linux``. See #80 on GitHub.

Version 0.5.2
-------------

Pi Day bugfix release, released on March 14th, 2016

- Fixed a bug in handling DA request. See issue #46 on GitHub.

Version 0.5.1
-------------

Bugfix release, released on January 10th 2015

- Fixed dependencies in setup.py.

Version 0.5.0
-------------

Released on January 10th 2015

- Deprecated ``Stream.consume`` in favour of ``Stream.feed``. The latter
  allows for a more efficient implementation because it operates on the
  whole input string.
- Improved ``Stream`` performance by converting FSM to a coroutine as
  suggested by Jonathan Slenders in issue #41 on GitHub.
- Added support for `DA` (device attributes) and `DSR` (device status report).
  The implementation is based on the code by Jonathan Slenders. See issue
  #41 on GitHub.
- ``Screen.draw`` now properly handles full/ambiguous-width characters.
  Thanks to the excellent `wcwidth <https://github.com/jquast/wcwidth>`_
  library by Jeff Quast.
- Removed re-exports of abbreviated modules (e.g. ``mo`` as a synonym for
  ``modes``) from ``pyte``.
- Removed ``Screen.size`` which misleadingly returned constructor arguments
  in reverse order. Please use ``Screen.columns`` and ``Screen.lines``
  instead.
- Fixed a bug in ``ByteStream`` which suppressed the exception if all of
  the decoders failed to process the input.

Version 0.4.10
--------------

Bugfix release, released on August 4th 2015

- Fixed a bug in ``DiffScreen.draw`` which marked the wrong
  line as changed when `DECAWM` was enabled.
- ``Stream`` now recognizes ESC % sequences for selecting control
  character set. However, these operations are no-op in the current version
  in a sense that ``ByteStream`` does not handle them to change encoding.

Version 0.4.9
-------------

Bugfix release, released on December 3rd 2014

- Fixed a bug in ``Char`` initialization, see issue #24 on GitHub for details.
- Updated error message in ``Stream``, referencing ``str`` is relevant
  for Python 3, but not Python 2.

Version 0.4.8
-------------

Released on January 13th 2014

- ``Screen`` does NOT inherit from builtin ``list``, use ``Screen.buffer``
  to access individual characters directly. This is a backward INCOMPATIBLE
  change.
- ``Char._asdict`` was broken on Python 3.3 because of the
  changes in ``namedtuple`` implementation.
- ``LAT1_MAP`` was an iterator because of the change in map semantics
  in Python 3.
- Changed ``Screen`` to issues a CR in addition to LF when
  `DECAWM` mode is set and the cursor is at the right border of the
  screen. See http://www.vt100.net/docs/vt510-rm/DECAWM and issue #20
  on GitHub for details.

Version 0.4.7
-------------

Bugfix release, released on March 28th 2013

- Updated ``pyte`` and tests suite to work under Python 3.3.
- Changed ``Screen`` so that `LNM` mode is reset by default,
  see http://www.vt100.net/docs/vt510-rm/LNM and issue #11 on GitHub for
  details.

Version 0.4.6
-------------

Bugfix release, released on February 29th 2012

Version 0.4.5
-------------

Technical release, released on September 1st 2011

- Added MANIFEST.in and CenOS spec file

Version 0.4.4
-------------

Bugfix release, released on July 17th 2011

- Removed ``pdb`` calls, left from ``HistoryScreen`` debugging -- silly,
  I know :)

Version 0.4.3
-------------

Bugfix release, released on July 12th 2011

- Fixed encoding issues in ``DebugStream`` -- Unicode was not converted
  to bytes properly.
- Fixed G0-1 charset handling and added VAX42 charset for the ancient
  stuff to work correctly.

Version 0.4.2
-------------

Bugfix release, released on June 27th 2011

- Added a tiny debugging helper: ``python -m pyte your escape codes``
- Added ``Screen.__{before,after}__()`` hooks to ``Screen`` -- now
  subclasses can extend more than one command easily.
- Fixed ``HistoryScreen`` -- now not as buggy as it used to be:
  and allows for custom ratio aspect when browsing history, see
  ``HistoryScreen`` documentation for details.
- Fixed `DECTCEM` private mode handling -- when the mode is reset
  ``Screen.cursor.hidden`` is ``True`` otherwise it's ``False``.

Version 0.4.1
-------------

Bugfix release, released on June 21st 2011

- Minor examples and documentation update before the first public
  release.

Version 0.4.0
-------------

Released on June 21st 2011

- Improved cursor movement -- ``Screen`` passes all but one tests
  in `vttest`.
- Changed the way ``Stream`` interacts with ``Screen`` -- event
  handlers are now implicitly looked up in screen's ``__dict__``,
  not connected manually.
- Changed cursor API -- cursor position and attributes are encapsulated
  in a separate ``Cursor`` class.
- Added support for `DECSCNM` -- toggle screen-wide reverse-video mode.
- Added a couple of useful ``Screen`` subclasses: ``HistoryScreen``
  which allows screen pagination and ``DiffScreen`` which tracks
  the changed lines.

Version 0.3.9
-------------

Released on May 31st 2011

- Added initial support for G0-1 charsets (mappings taken from ``tty``
  kernel driver) and SI, SO escape sequences.
- Changed ``ByteStream`` to support fallback encodings -- it now
  takes a list of ``(encoding, errors)`` pairs and traverses it
  left to right on ``feed()``.
- Switched to ``unicode_literals`` -- one step closer to Python3.

Version 0.3.8
-------------

Released on May 23rd 2011

- Major rewrite of ``Screen`` internals -- highlights: inherits from
  ``list``; each character is represented by ``namedtuple`` which
  also holds SGR data.
- Numerous bugfixes, especially in methods, dealing with manipulating
  character attributes.

Version 0.3.7
-------------

First release after the adoption -- skipped a few version to reflect that.
Released on May 16th 2011

- Added support for ANSI color codes, as listed in ``man console_codes``.
  Not implemented yet: setting alternate font, setting and resetting
  mappings, blinking text.
- Added a couple of trivial usage examples in the `examples/` dir.
