# pyte Changelog

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

## 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.

- 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 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.