* Sun Jan 21 2024 Peter Simons <psimons@suse.com>
- Update vty to version 6.2.
6.2
- --
Package changes:
* Update version bounds to support building with GHC 9.8
Bug fixes:
* Updated `PictureToSpans` module to implement its lenses manually to
avoid template haskell which has trouble on Windows and GHC 9.2 (#271)
6.1
- --
API changes:
* `ColorMode` got a `Read` instance.
* The `Config` type got a new `configPreferredColorMode` field for
specifying a preferred `ColorMode`. Backend packages should respect
this field, but note that `vty` itself does not (and cannot) enact
this preference since it's up to the backend driver to configure the
color mode.
* The Vty configuration file got a new `colorMode` field whose value is
a string literal compatible with the `ColorMode` `Read` instance.
6.0
- --
This release marks the beginning of multi-platform support in Vty.
Getting to this point involved removing Unix-specific functionality
from Vty and moving it to a new package, `vty-unix`. Windows support
is now provided via a `vty-windows` package. Another new package,
`vty-crossplatform`, is provided as a convenience for applications that
want to support both Unix and Windows platforms automatically at build
time. See the migration guide below for details on how to upgrade.
* *Migration guide for 6.0**
To upgrade to this version of Vty, most people will only need to take a
few steps:
1. Add a package dependency on `vty-unix`, `vty-windows,` or
`vty-crossplatform`, depending on the desired level of platform
support. For example, if an application only supports Unix systems,
it should depend on `vty-unix`. But if an application is intended to
work anywhere Vty works, then `vty-crossplatform` is the best choice.
2. Import `mkVty` from the platform package in step (1). (`mkVty` was
removed from the `vty` package and is now the responsibility of each
platform package.) Imports are as follows:
* `vty-unix`: `Graphics.Vty.Platform.Unix`
* `vty-windows`: `Graphics.Vty.Platform.Windows`
* `vty-crossplatform`: `Graphics.Vty.CrossPlatform`
3. Maintain any existing package dependency on `vty`; the core library
abstractions, types, and functions are still obtained from `vty`
itself. The platform packages do not re-export the core library's
modules.
4. If desired, call `Graphics.Vty.Config.userConfig` to load the Vty
user configuration since this step is no longer automatic.
5. Some configurations have been moved to `Graphics.Vty.Output`. For
example, `mouseMode` is no longer a field in `VtyUserConfig`.
Instead, use `setMode` to enable it.
For applications using more of Vty's API than just the basic
initialization and rendering API, the full change list is provided
below. For people who want to write their own Vty platform package like
`vty-unix`, see `PLATFORM-HOWTO.md`.
* *Detailed change list for 6.0**
* Package changes:
* The following modules got added to the `vty` library:
* `Graphics.Vty.UnicodeWidthTable.Main`
* The following modules got moved to `vty-unix`:
* `Data.Terminfo.Eval`
* `Data.Terminfo.Parse`
* The following modules got moved to `vty-unix` into the
`Graphics.Vty.Platform.Unix` module namespace (previously
`Graphics.Vty`):
* `Graphics.Vty.Input.Classify`
* `Graphics.Vty.Input.Classify.Parse`
* `Graphics.Vty.Input.Classify.Types`
* `Graphics.Vty.Input.Focus`
* `Graphics.Vty.Input.Loop`
* `Graphics.Vty.Input.Mouse`
* `Graphics.Vty.Input.Paste`
* `Graphics.Vty.Input.Terminfo`
* `Graphics.Vty.Output.TerminfoBased`
* `Graphics.Vty.Output.XTermColor`
* The following modules were removed entirely (with contents migrated
elsewhere as needed):
* `Graphics.Vty.Inline.Unsafe`
* `Graphics.Vty.Output.Interface` (migrated to
`Graphics.Vty.Output`)
* Removed library dependencies on the following packages:
* `ansi-terminal`
* `containers`
* `terminfo`
* `transformers`
* `unix`
* The following executables were moved to other packages:
* `vty-build-width-table` (moved to `vty-unix` as
`vty-unix-build-width-table`)
* `vty-mode-demo` (moved to `vty-crossplatform`)
* API changes:
* `Graphics.Vty.mkVty` moved to the `vty-unix` package's
`Graphics.Vty.Platform.Unix` module.
* Added `Graphics.Vty.mkVtyFromPair` for platform packages to
construct `Vty` handles.
* The contents of the `Graphics.Vty.Output.Interface` module were
merged into `Graphics.Vty.Output`.
* The `vty-build-width-table` tool was removed from the `vty` package,
but its core functionality is now exposed as a library for
platform packages to use to provide platform-specific tools using
`Graphics.Vty.UnicodeWidthTable.Main` and a new tool by the same
name was added to the `vty-unix` package.
* `Graphics.Vty.Events`: the `InternalEvent` type's
`ResumeAfterSignal` constructor was renamed to
`ResumeAfterInterrupt` to be a bit more abstract and
platform-agnostic.
* Removed the following lenses for fields of the `Input` type:
* `eventChannel` (was for `_eventChannel` which was then renamed to
`eventChannel`)
* `configRef` (was for `_configRef` which was then renamed to
`configRef`)
* The `Output` record type got a new field, `setOutputWindowTitle`.
* The `Input` record type got a new field, `inputLogMsg :: String ->
IO ()`, for logging to the Vty log.
* `Graphics.Vty.Config` now exposes `VtyUserConfig` instead of
`Config`. Many of its fields were Unix-specific and were
consequently moved to the `UnixSettings` type in `vty-unix`.
* The `VtyUserConfig` type's fields got a `config` field name prefix.
* Behavior changes:
* Since `vty` no longer implements `mkVty`, the Vty user configuration
is no longer implicitly loaded by Vty-based applications.
Instead, it is now up to the applications to call
`Graphics.Vty.Config.userConfig` to load any user-provided
configuration.
* Vty no longer implicitly attempts to load configured Unicode
width tables. It is now the responsibility of the platform packages
(such as `vty-unix`) and/or applications to load tables via
`Graphics.Vty.UnicodeWidthTable.IO` and install them via
`Graphics.Vty.UnicodeWidthTable.Install`.
* Changes to demonstration programs:
* `EventEcho`, `ModeDemo`, and `Rogue` demo programs moved to the
`vty-crossplatform` package.
* Changes to tests:
* Where appropriate, some test programs and test cases were moved to
`vty-unix` or `vty-crossplatform`.
5.39
- ---
Package changes:
* Now builds with `mtl-2.3.*`.
Bug fixes:
* Fixed a long-standing issue where unused input on stdin could cause a
memory error and a crash when Vty was being initialized. (#266)
5.38
- ---
This release includes numerous API changes, although none of them should
break your programs. If so, please open a ticket on the Vty issue
tracker.
Package changes:
* Support mtl 2.3 (thanks Daniel Firth)
* The test and example collections got completely overhauled to clean up
bit rot.
* Moved example programs into examples/ under a new vty-examples
package.
* Moved test suite programs out of vty.cabal and into tests/ under a
new vty-tests package.
* Cleaned up all build-depends lists in all three packages to remove
unused deps.
* Consolidated the test suite library modules into the vty-tests
library to avoid redundant compilation.
* Added build.sh to build everything in the development process to
help ensure that examples and tests don't get forgotten.
* Removeed lots of stale/unused modules in old test/ directory.
* Got vty-examples building again and resolved various warnings and
issues.
API changes:
* All modules got explicit export lists. Prior to this release, many
modules exported everything they contained, making it difficult to
know what was really intended to be part of the public API. The new
export lists should contain everything that applications need; the
risk of breakage exists but should be minor. Please open a ticket if
you were using something that is no longer exported. It might be that
it was never supposed to be exported to begin with, or it might be
just something we need to export once again.
* Moved the `attributeControl` function from `Graphics.Vty.Input.Loop`
to `Graphics.Vty.Input`.
* Removed the `Graphics.Vty.Image.DisplayText` alias for `Text`.
* Unified the `Image` cropping constructors (thanks Fraser Tweedale)
5.37
- ---
* The Xterm backend is now used when `TERM` matches `rxvt` or `tmux`.
* PictureToSpans now uses `error`, not `fail`, to avoid dependence on
soon-to-be-removed `MonadFail` instance for `ST` (#248)
5.36
- ---
* Raised `microlens` upper bound to allow building with 0.4.13.
* Replaced incomplete `Show` output for `Picture` with a derived
instance; derived `Show` for `Cursor` and `Background`, too.
5.35.1
- -----
Bug fixes:
* Fixed a build issue with a test program.
5.35
- ---
New features:
* Add support for 24-bit color (thanks @u-quark). This change
updates Vty to look at the `COLORTERM` environment variable that is
conventionally used to advertise support for truecolor escape
sequences. The change also updates the Vty demo to demonstrate
24-bit colors. This change also adds a new data type, `ColorMode`,
to represent the color mode in use, as well as an `Output` interface
field, `outputColorMode`, to track the active color mode and use it
to clamp emitted color escape sequences to the active color range.
API changes:
* All types in `Graphics.Vty.Input.Events` now have strict constructor
fields.
* Internal events are now wrapped in a new `InternalEvent` type to
improve how signal handling is done. This change modifies the `Input`
type's event channel API to produce `InternalEvents`, not `Events`.
The new `InternalEvent` either wraps `Event` with the `InputEvent`
constructor (the previous behavior) or indicates that Vty resumed
after handling a signal using the `ResumeAfterSignal` constructor.
This change avoids the previous use of `EvResize` with lazy exception
arguments as a sentinel value for `ResumeAfterSignal`.
Other enhancements:
* Bracketed paste parsing performance has been greatly improved thanks
to benchmarking and optimization work by @iphydf. As part of that
work, Vty now uses bytestrings rather than Strings internally when
parsing input to look for events.
* The `\b` value is now interpreted as `KBS` (thanks @vglfr)
5.34
- ---
API changes:
* Added an `NFData` instance for `Event` (thanks Mario Lang)
* Removed `Monoid` and `Semigroup` instances for `Attr` and
`MaybeDefault`. This change removed the instances because they were
misbehaved; merging `Attr` and `MaybeDefault` values with these
instances resulted in field value losses. For example, before this
change,
```
(defAttr `withForeColor` blue) <> (defAttr `withBackColor` green)
```
would result in just
```
(defAttr `withBackColor` green)
```
because the instances were designed to favor the right-hand
arguments' fields even if they had not been explicitly set
(a consequence of the `MaybeDefault` `Semigroup` instance).
While that behavior was sensible specifically in the context of
`Graphics.Vty.Inline`, it wasn't a useful user-facing API and it made
for surprising instance behavior. Since there is actually no good way
to handle this in a `Semigroup` instance for `Attr` -- some choices
have to be made about how to merge two attributes' foreground colors,
and that won't be much better than what we had -- the instance was
just removed.