mirror of https://github.com/mum4k/termdash.git
6823abe349 | ||
---|---|---|
area | ||
canvas | ||
cell | ||
container | ||
doc | ||
draw | ||
eventqueue | ||
experimental | ||
keyboard | ||
mouse | ||
scripts | ||
terminal | ||
terminalapi | ||
widgetapi | ||
widgets/fakewidget | ||
.gitignore | ||
CONTRIBUTING.md | ||
LICENSE | ||
README.md |
README.md
termdash
This project implements a terminal based dashboard. The feature set is inspired by the gizak/termui project, which in turn was inspired by a javascript based yaronn/blessed-contrib. Why the rewrite you ask?
- The above mentioned gizak/termui is abandoned and isn't maintained anymore.
- The project doesn't follow the design goals outlined below.
- The project is released under a licence I cannot use.
Design goals
This effort is focused on good software design and maintainability. By good design I mean:
- Write readable, well documented code.
- Only beautiful, simple APIs, no exposed concurrency, channels, internals, etc.
- Follow Effective Go.
- Provide an infrastructure that allows development of individual dashboard components in separation.
- The infrastructure must enforce consistency in how the dashboard components are implemented.
- Focus on maintainability, the infrastructure and dashboard components must have good test coverage, the repository must have CI/CD enabled.
On top of that - let's have fun, learn something and become better developers together.
Requirements
- Native support of the UTF-8 encoding.
- Simple container management to position the widgets and set their size.
- Mouse and keyboard input.
- Cross-platform terminal based output.
- Unit testing framework for simple and readable tests of dashboard elements.
- Tooling to streamline addition of new widgets.
- Apache-2.0 licence for the project.
High-Level design
See the design document.
Project status
- High-Level Design.
- Submit the APIs.
- Implement the terminal layer.
- Implement unit test helpers.
- Implement the container.
- Implement the input event pre-processing.
- Add support for tracking mouse and keyboard focus.
- Implement the first widget.
- Implement the infrastructure layer.
- Documentation and tooling for widget development.
- Launch and iterate.