All notable changes to this project are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.20.0 - 10-Mar-2024
- Support for an alternative way of splitting containers where the size or percentage is specified for the right (or bottom) container and the left (or top) is calculated.
- Bump github.com/gdamore/tcell/v2 from 2.7.0 to 2.7.4.
0.19.0 - 29-Jan-2024
- Support for "Backtab" (a.k.a. Shift+Tab) as a supported keystroke for tcell widgets.
- Migrated CI from Travis to Github Actions.
- Bump github.com/gdamore/tcell/v2 from 2.5.4 to 2.7.0.
- Change the Go version in
go.mod
to 1.21. - Executed
go mod tidy
. - CI now executes tests with Golang v1.20 and v1.21.
0.18.0 - 08-Feb-2023
- The
gauge
widget now supports drawing of a vertical threshold bar. - The
TextInput
widget now supports an OnChange handler that allows user code to be notified when the content of the text input changes.
- Bump github.com/gdamore/tcell/v2 from 2.5.1 to 2.5.4.
- Bump github.com/mattn/go-runewidth from 0.0.13 to 0.0.14.
- Bump github.com/gdamore/tcell/v2 from 2.5.1 to 2.5.3.
- Bump github.com/gdamore/tcell/v2 from 2.5.1 to 2.5.2
- Change the Go version in
go.mod
to 1.20. - Executed
go mod tidy
. - CI now executes tests with Golang v1.20 only.
- Removed the
Sourcegraph
badge from the main page.
- Formatted all Go files with
gofmt
from Golang v1.20. - Fixed line coverage reporting.
0.17.0 - 07-Jul-2022
- Added support for
tcell
'sDim
text style.
- Bump github.com/gdamore/tcell from 2.4.0 to 2.5.1.
- Bump github.com/nsf/termbox-go to v1.1.1.
- Change the Go version in
go.mod
to 1.17. - Executed
go mod tidy
.
- Fixed invalid path to the
autogen_licences.sh
script in.travis.ci
.
0.16.1 - 13-Jan-2022
- Change the Go versions the CI builds with up to 1.17.
- Bump github.com/gdamore/tcell from 2.2.0 to 2.4.0.
- Bump github.com/mattn/go-runewidth from 0.0.12 to 0.0.13.
0.16.0 - 03-Apr-2021
- The
Text
widget has a new optionMaxTextCells
which can be used to limit the maximum number of cells the widget keeps in memory.
- Bump github.com/mattn/go-runewidth from 0.0.10 to 0.0.12.
0.15.0 - 06-Mar-2021
- Bump github.com/gdamore/tcell/v2 from 2.0.0 to 2.2.0.
- Bump github.com/mattn/go-runewidth from 0.0.9 to 0.0.10.
- Allowing CI to modify go.mod and go.sum when necessary.
- Executed
go mod tidy
.
- TitleColor and TitleFocusedColor options for border title which enables the setting of separate colors for border and title on a container.
0.14.0 - 30-Dec-2020
-
The
widgetapi.Widget.Keyboard
andwidgetapi.Widget.Mouse
methods now accepts a second argument which provides widgets with additional metadata. All widgets implemented outside of thetermdash
repository will need to be updated similarly to theBarchart
example below. Change the original method signatures:func (*BarChart) Keyboard(k *terminalapi.Keyboard) error { ... } func (*BarChart) Mouse(m *terminalapi.Mouse) error { ... }
By adding the new
*widgetapi.EventMeta
argument as follows:func (*BarChart) Keyboard(k *terminalapi.Keyboard, meta *widgetapi.EventMeta) error { ... } func (*BarChart) Mouse(m *terminalapi.Mouse, meta *widgetapi.EventMeta) error { ... }
termdash
no longer crashes whentcell
is used and the terminal window downsizes while content is being drawn.
- added a new
formdemo
that demonstrates a text input form with keyboard navigation.
container
now allows users to configure keyboard keys that move focus to the next or the previous container.- containers can request to be skipped when focus is moved using keyboard keys.
- containers can register into separate focus groups and specific keyboard keys can be configured to move the focus within each focus group.
- widgets can now request keyboard events exclusively when focused.
- users can now set a
container
as focused using the newcontainer.Focused
option.
- the
button
widget allows users to specify multiple trigger keys. - the
button
widget now supports different keys for the global and focused scope. - the
button
widget can now be drawn without the shadow or the press animation. - the
button
widget can now be drawn without horizontal padding around its text. - the
button
widget now allows specifying cell options for each cell of the displayed text. Separate cell options can be specified for each of button's main states (up, focused and up, down). - the
button
widget allows specifying separate fill color values for each of its main states (up, focused and up, down). - the
button
widget now has a methodSetCallback
that allows updating the callback function on an existingbutton
instance.
- the
textinput
widget can now be configured to request keyboard events exclusively when focused. - the
textinput
widget can now be initialized with a default text in the input box.
0.13.0 - 17-Nov-2020
- the
Text
widget now allows user to specify custom scroll marker runes.
- terminal cells now support font modifier options (bold, italic, underline, strike through).
tcell
dependency was upgraded to v2.0.0.- upgraded versions of all other dependencies.
- aligned the definition of the first 16 colors with the definition used by
Xterm and
tcell
. Defined two non-standard colorsColorMagenta
andColorCyan
to make this change backward compatible for users that usetermbox-go
. - made
tcell
terminal implementation the default in examples, demos and documentation.
- coveralls again triggers and reports on PRs.
- addressed some lint issues.
- improved test coverage in some modules.
- changed the Blue color in demos to a more visible shade.
- fixed a bug where segment display text in
termdashdemo
appeared to be jumping.
0.12.2 - 31-Aug-2020
- advanced the CI Go versions up to Go 1.15.
- fixed the build status badge to correctly point to travis-ci.com instead of travis-ci.org.
0.12.1 - 20-Jun-2020
- the
tcell
unit test can now pass in headless mode (when TERM="") which happens under bazel. - switching coveralls integration to Github application.
0.12.0 - 10-Apr-2020
- Migrating to Go modules.
- Renamed directory
internal
toprivate
so that external widget development is possible. Noted in README.md that packages in theprivate
directory don't have any API stability guarantee.
0.11.0 - 7-Mar-2020
- Termdash now requires at least Go version 1.11.
- New
tcell
based terminal implementation which implements theterminalapi.Terminal
interface. - tcell implementation supports two initialization
Option
s:ColorMode
the terminal color output mode (defaults to 256 color mode)ClearStyle
the foreground and background color style to use when clearing the screen (defaults to the global ColorDefault for both foreground and background)
- Improved test coverage of the
Gauge
widget.
0.10.0 - 5-Jun-2019
- Added
time.Duration
basedValueFormatter
for theLineChart
Y-axis labels. - Added round and suffix
ValueFormatter
for theLineChart
Y-axis labels. - Added decimal and suffix
ValueFormatter
for theLineChart
Y-axis labels. - Added a
container.SplitOption
that allows fixed size container splits. - Added
grid
functions that allow fixed size rows and columns.
- The
LineChart
can format the labels on the Y-axis with aValueFormatter
. - The
SegmentDisplay
can now display dots and colons ('.' and ':'). - The
Donut
widget now guarantees spacing between the donut and its label. - The continuous build on Travis CI now builds with cgo explicitly disabled to ensure both Termdash and its dependencies use pure Go.
- Lint issues found on the Go report card.
- An internal library belonging to the
Text
widget was incorrectly passingmath.MaxUint32
as an int argument.
0.9.1 - 15-May-2019
- Termdash could deadlock when a
Button
or aTextInput
was configured to call theContainer.Update
method.
0.9.0 - 28-Apr-2019
- The
TextInput
widget, an input field allowing interactive text input. - The
Donut
widget can now display an optional text label under the donut.
- Widgets now get information whether their container is focused when Draw is executed.
- The SegmentDisplay widget now has a method that returns the observed character capacity the last time Draw was called.
- The grid.Builder API now allows users to specify options for intermediate containers, i.e. containers that don't have widgets, but represent rows and columns.
- Line chart widget now allows
math.NaN
values to represent "no value" (values that will not be rendered) in the values slice.
- The widgetapi.Widget.Draw method now accepts a second argument which provides widgets with additional metadata. This affects all implemented widgets.
- Termdash now requires at least Go version 1.10, which allows us to utilize
math.Round
instead of our own implementation andstrings.Builder
instead ofbytes.Buffer
. - Terminal shortcuts like
Ctrl-A
no longer come as two separate events, Termdash now mirrors termbox-go and sends these as one event.
0.8.0 - 30-Mar-2019
- New API for building layouts, a grid.Builder. Allows defining the layout iteratively as repetitive Elements, Rows and Columns.
- Containers now support margin around them and padding of their content.
- Container now supports dynamic layout changes via the new Update method.
- The Text widget now supports content wrapping on word boundaries.
- The BarChart and SparkLine widgets now have a method that returns the observed value capacity the last time Draw was called.
- Moving widgetapi out of the internal directory to allow external users to develop their own widgets.
- Event delivery to widgets now has a stable defined order and happens when the container is unlocked so that widgets can trigger dynamic layout changes.
- The termdash_test now correctly waits until all subscribers processed events, not just received them.
- Container focus tracker now correctly tracks focus changes in enlarged areas, i.e. when the terminal size increased.
- The BarChart, LineChart and SegmentDisplay widgets now protect against external mutation of the values passed into them by copying the data they receive.
0.7.2 - 25-Feb-2019
- Test coverage for data only packages.
- Refactoring packages that contained a mix of public and internal identifiers.
The following packages were refactored, no impact is expected as the removed identifiers shouldn't be used externally.
- Functions align.Text and align.Rectangle were moved to a new internal/alignfor package.
- Types cell.Cell and cell.Buffer were moved into a new internal/canvas/buffer package.
0.7.1 - 24-Feb-2019
- Some of the packages that were moved into internal are required externally. This release makes them available again.
-
The draw.LineStyle enum was refactored into its own package linestyle.LineStyle. Users will have to replace:
- draw.LineStyleNone -> linestyle.None
- draw.LineStyleLight -> linestyle.Light
- draw.LineStyleDouble -> linestyle.Double
- draw.LineStyleRound -> linestyle.Round
0.7.0 - 24-Feb-2019
- The Button widget.
- Clearly marked the public API surface by moving private packages into internal directory.
- Started a GitHub wiki for Termdash.
- The LineChart widget can display X axis labels in vertical orientation.
- The LineChart widget allows the user to specify a custom scale for the Y axis.
- The LineChart widget now has an option that disables scaling of the X axis. Useful for applications that want to continuously feed data and make them "roll" through the linechart.
- The LineChart widget now has a method that returns the observed capacity of the LineChart the last time Draw was called.
- The LineChart widget now supports zoom of the content triggered by mouse events.
- The Text widget now has a Write option that atomically replaces the entire text content.
- A function that draws text vertically.
- A non-blocking event distribution system that can throttle repetitive events.
- Generalized mouse button FSM for use in widgets that need to track mouse button clicks.
- Termbox is now initialized in 256 color mode by default.
- The infrastructure now uses the non-blocking event distribution system to distribute events to subscribers. Each widget is now an individual subscriber.
- The infrastructure now throttles event driven screen redraw rather than redrawing for each input event.
- Widgets can now specify the scope at which they want to receive keyboard and mouse events.
- The constructors of all the widgets now also return an error so that they can validate the options. This is a breaking change for the following widgets: BarChart, Gauge, LineChart, SparkLine, Text. The callers will have to handle the returned error.
- The container package no longer exports separate methods to receive Keyboard and Mouse events which were replaced by a Subscribe method for the event distribution system. This shouldn't affect users as the removed methods aren't needed by container users.
- The widgetapi.Options struct now uses an enum instead of a boolean when widget specifies if it wants keyboard or mouse events. This only impacts development of new widgets.
- The LineChart widget now correctly determines the Y axis scale when multiple series are provided.
- Lint issues in the codebase, and updated Travis configuration so that golint is executed on every run.
- Termdash now correctly starts in locales like zh_CN.UTF-8 where some of the characters it uses internally can have ambiguous width.
0.6.1 - 12-Feb-2019
- The LineChart widget now correctly places custom labels.
0.6.0 - 07-Feb-2019
- The SegmentDisplay widget.
- A CHANGELOG.
- New line styles for borders.
- Better recordings of the individual demos.
- The LineChart now has an option to change the behavior of the Y axis from zero anchored to adaptive.
- Lint errors reported on the Go report card.
- Widgets now correctly handle a race when new user data are supplied between calls to their Options() and Draw() methods.
0.5.0 - 21-Jan-2019
- Draw primitives for drawing circles.
- The Donut widget.
- Bugfixes in the braille canvas.
- Lint errors reported on the Go report card.
- Flaky behavior in termdash_test.
0.4.0 - 15-Jan-2019
- 256 color support.
- Variable size container splits.
- A more complete demo of the functionality.
- Updated documentation and README.
0.3.0 - 13-Jan-2019
- Primitives for drawing lines.
- Implementation of a Braille canvas.
- The LineChart widget.
0.2.0 - 02-Jul-2018
- The SparkLine widget.
- The BarChart widget.
- Manually triggered redraw.
- Travis now checks for presence of licence headers.
- Fixing races in termdash_test.
- Documentation of the project and its goals.
- Drawing infrastructure.
- Testing infrastructure.
- The Gauge widget.
- The Text widget.