Go to file
Jakub Sobon b42236a117
Adding missing licences.
2018-04-23 14:26:26 +01:00
area Adding licences and a script to automate the same. 2018-04-14 23:06:57 +01:00
canvas Adding licences and a script to automate the same. 2018-04-14 23:06:57 +01:00
cell Adding licences and a script to automate the same. 2018-04-14 23:06:57 +01:00
container Implementing the infrastructure layer. 2018-04-23 01:05:54 +01:00
doc Notes about design guidelines in the docs. 2018-04-23 00:44:32 +01:00
draw Adding licences and a script to automate the same. 2018-04-14 23:06:57 +01:00
eventqueue Don't pop from the queue after context expiry. 2018-04-23 00:46:36 +01:00
experimental Implementing the infrastructure layer. 2018-04-23 01:05:54 +01:00
keyboard Adding licences and a script to automate the same. 2018-04-14 23:06:57 +01:00
mouse Adding licences and a script to automate the same. 2018-04-14 23:06:57 +01:00
scripts Licence for the autogen script. 2018-04-14 23:08:34 +01:00
terminal Implementing the infrastructure layer. 2018-04-23 01:05:54 +01:00
terminalapi Adding licences and a script to automate the same. 2018-04-14 23:06:57 +01:00
widgetapi Adding licences and a script to automate the same. 2018-04-14 23:06:57 +01:00
widgets/fakewidget Adding an informative MinimumSize for the Fake widget. 2018-04-23 00:47:49 +01:00
.gitignore Renaming display to terminal. 2018-03-26 16:31:20 +01:00
CONTRIBUTING.md Adding a CONTRIBUTING.md file. 2018-04-14 23:02:18 +01:00
LICENSE Initial commit 2018-03-24 12:01:49 +00:00
README.md Removing redundant word. 2018-04-23 01:36:27 +01:00
termdash.go Adding missing licences. 2018-04-23 14:26:26 +01:00
termdash_test.go Adding missing licences. 2018-04-23 14:26:26 +01:00

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?

  1. The above mentioned gizak/termui is abandoned and isn't maintained anymore.
  2. The project doesn't follow the design goals outlined below.

Design goals

This effort is focused on good software design and maintainability. By good design I mean:

  1. Write readable, well documented code.
  2. Only beautiful, simple APIs, no exposed concurrency, channels, internals, etc.
  3. Follow Effective Go.
  4. Provide an infrastructure that allows development of individual dashboard components in separation.
  5. The infrastructure must enforce consistency in how the dashboard components are implemented.
  6. 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

  1. Native support of the UTF-8 encoding.
  2. Simple container management to position the widgets and set their size.
  3. Mouse and keyboard input.
  4. Cross-platform terminal based output.
  5. Unit testing framework for simple and readable tests of dashboard elements.
  6. Tooling to streamline addition of new widgets.
  7. Apache-2.0 licence for the project.

High-Level design

See the design document.

Contributing

If you are willing to contribute, improve the infrastructure or develop a widget, first of all Thank You! Your help is appreciated.

Please see the CONTRIBUTING.md file for guidelines related to the Google's CLA, and code review requirements.

As stated above the primary goal of this project is to develop readable, well designed code, the functionality and efficiency comes second. With that please expect rather more detailed code review. Please read the design guidelines before contributing.

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.
  • Write the design guidelines document.
  • Documentation and tooling for widget development.
  • Implement the first widget.
  • Move internal libraries to internal/ directory.
  • Launch and iterate.