2018-05-09 01:58:49 +08:00
[![Doc Status ](https://godoc.org/github.com/mum4k/termdash?status.png )](https://godoc.org/github.com/mum4k/termdash)
2020-09-01 10:34:49 +08:00
[![Build Status ](https://travis-ci.com/mum4k/termdash.svg?branch=master )](https://travis-ci.com/mum4k/termdash)
2019-02-18 15:30:41 +08:00
[![Sourcegraph ](https://sourcegraph.com/github.com/mum4k/termdash/-/badge.svg )](https://sourcegraph.com/github.com/mum4k/termdash?badge)
2018-05-09 01:58:49 +08:00
[![Coverage Status ](https://coveralls.io/repos/github/mum4k/termdash/badge.svg?branch=master )](https://coveralls.io/github/mum4k/termdash?branch=master)
2018-05-28 02:40:08 +08:00
[![Go Report Card ](https://goreportcard.com/badge/github.com/mum4k/termdash )](https://goreportcard.com/report/github.com/mum4k/termdash)
2018-05-28 02:41:21 +08:00
[![License ](https://img.shields.io/badge/License-Apache%202.0-blue.svg )](https://github.com/mum4k/termdash/blob/master/LICENSE)
2019-01-25 10:04:57 +08:00
[![Mentioned in Awesome Go ](https://awesome.re/mentioned-badge.svg )](https://github.com/avelino/awesome-go)
2018-05-09 01:58:49 +08:00
2019-03-07 13:28:30 +08:00
# [<img src="./doc/images/termdash.png" alt="termdashlogo" type="image/png" width="30%">](http://github.com/mum4k/termdash/wiki)
Termdash is a cross-platform customizable terminal based dashboard.
2018-03-24 20:14:06 +08:00
2019-04-27 14:50:13 +08:00
[<img src="./doc/images/termdashdemo_0_9_0.gif" alt="termdashdemo" type="image/gif"> ](termdashdemo/termdashdemo.go )
2019-01-16 11:40:44 +08:00
2019-01-16 12:12:08 +08:00
The feature set is inspired by the
[gizak/termui ](http://github.com/gizak/termui ) project, which in turn was
2019-02-24 09:59:51 +08:00
inspired by
2019-01-16 12:12:08 +08:00
[yaronn/blessed-contrib ](http://github.com/yaronn/blessed-contrib ).
2018-03-24 20:14:06 +08:00
2019-01-16 12:12:08 +08:00
This rewrite focuses on code readability, maintainability and testability, see
the [design goals ](doc/design_goals.md ). It aims to achieve the following
[requirements ](doc/requirements.md ). See the [high-level design ](doc/hld.md )
for more details.
2018-03-24 20:14:06 +08:00
2019-02-24 09:59:51 +08:00
# Public API and status
2019-02-24 10:01:17 +08:00
The public API surface is documented in the
[wiki ](http://github.com/mum4k/termdash/wiki ).
2019-02-24 09:59:51 +08:00
2020-04-11 03:26:45 +08:00
Private packages can be identified by the presence of the ** /private/**
2019-02-24 09:59:51 +08:00
directory in their import path. Stability of the private packages isn't
guaranteed and changes won't be backward compatible.
There might still be breaking changes to the public API, at least until the
project reaches version 1.0.0. Any breaking changes will be published in the
[changelog ](CHANGELOG.md ).
2019-01-16 12:12:08 +08:00
# Current feature set
2018-03-24 20:14:06 +08:00
2019-01-16 12:17:13 +08:00
- Full support for terminal window resizing throughout the infrastructure.
2019-03-03 16:18:23 +08:00
- Customizable layout, widget placement, borders, margins, padding, colors, etc.
2019-03-30 13:43:13 +08:00
- Dynamic layout changes at runtime.
2019-03-11 10:59:44 +08:00
- Binary tree and Grid forms of setting up the layout.
2019-01-16 12:12:08 +08:00
- Focusable containers and widgets.
- Processing of keyboard and mouse events.
- Periodic and event driven screen redraw.
- A library of widgets, see below.
- UTF-8 for all text elements.
2019-01-16 12:17:13 +08:00
- Drawing primitives (Go functions) for widget development with character and
sub-character resolution.
2018-03-24 20:14:06 +08:00
2019-01-16 12:12:08 +08:00
# Installation
2018-03-24 20:14:06 +08:00
2019-01-16 12:12:08 +08:00
To install this library, run the following:
2018-03-24 20:31:33 +08:00
2019-03-19 11:24:01 +08:00
```go
2019-01-16 12:12:08 +08:00
go get -u github.com/mum4k/termdash
2020-12-30 15:18:41 +08:00
cd github.com/mum4k/termdash
2019-01-16 12:12:08 +08:00
```
2018-03-25 01:09:34 +08:00
2019-01-16 12:12:08 +08:00
# Usage
2018-03-25 01:09:34 +08:00
2019-01-16 12:12:08 +08:00
The usage of most of these elements is demonstrated in
[termdashdemo.go ](termdashdemo/termdashdemo.go ). To execute the demo:
2018-04-23 07:44:32 +08:00
2019-03-19 11:24:01 +08:00
```go
2020-12-30 15:18:41 +08:00
go run termdashdemo/termdashdemo.go
2019-01-16 12:12:08 +08:00
```
2018-04-23 07:44:32 +08:00
2019-01-16 12:12:08 +08:00
# Documentation
2018-05-07 02:28:52 +08:00
2019-02-24 12:52:31 +08:00
Please refer to the [Termdash wiki ](http://github.com/mum4k/termdash/wiki ) for
all documentation and resources.
2018-03-27 01:22:07 +08:00
2019-02-24 12:54:10 +08:00
# Implemented Widgets
2018-05-07 19:39:45 +08:00
2019-02-24 12:54:10 +08:00
## The Button
2019-02-24 08:38:47 +08:00
Allows users to interact with the application, each button press runs a callback function.
Run the
[buttondemo ](widgets/button/buttondemo/buttondemo.go ).
```go
2020-12-30 15:18:41 +08:00
go run widgets/button/buttondemo/buttondemo.go
2019-02-24 08:38:47 +08:00
```
2019-02-24 10:13:40 +08:00
[<img src="./doc/images/buttondemo.gif" alt="buttondemo" type="image/gif" width="50%"> ](widgets/button/buttondemo/buttondemo.go )
2019-02-24 08:38:47 +08:00
2019-04-27 14:10:03 +08:00
## The TextInput
Allows users to interact with the application by entering, editing and
submitting text data. Run the
[textinputdemo ](widgets/textinput/textinputdemo/textinputdemo.go ).
```go
2020-12-30 15:18:41 +08:00
go run widgets/textinput/textinputdemo/textinputdemo.go
2019-04-27 14:10:03 +08:00
```
2019-04-27 15:17:17 +08:00
[<img src="./doc/images/textinputdemo.gif" alt="textinputdemo" type="image/gif" width="80%"> ](widgets/textinput/textinputdemo/textinputdemo.go )
2019-04-27 14:10:03 +08:00
2020-12-30 15:11:37 +08:00
Can be used to create text input forms that support keyboard navigation:
```go
2020-12-30 15:18:41 +08:00
go run widgets/textinput/formdemo/formdemo.go
2020-12-30 15:11:37 +08:00
```
2020-12-30 15:14:01 +08:00
[<img src="./doc/images/formdemo.gif" alt="formdemo" type="image/gif" width="50%"> ](widgets/textinput/formdemo/formdemo.go )
2020-12-30 15:11:37 +08:00
2019-02-24 12:54:10 +08:00
## The Gauge
2018-05-07 19:39:45 +08:00
2018-05-21 06:27:57 +08:00
Displays the progress of an operation. Run the
2019-01-16 12:12:08 +08:00
[gaugedemo ](widgets/gauge/gaugedemo/gaugedemo.go ).
```go
2020-12-30 15:18:41 +08:00
go run widgets/gauge/gaugedemo/gaugedemo.go
2019-01-16 12:12:08 +08:00
```
2018-05-08 08:12:36 +08:00
2019-02-24 10:13:40 +08:00
[<img src="./doc/images/gaugedemo.gif" alt="gaugedemo" type="image/gif"> ](widgets/gauge/gaugedemo/gaugedemo.go )
2018-05-21 06:27:57 +08:00
2019-02-24 12:54:10 +08:00
## The Donut
2019-01-22 06:43:35 +08:00
2019-01-22 06:57:12 +08:00
Visualizes progress of an operation as a partial or a complete donut. Run the
2019-01-22 06:43:35 +08:00
[donutdemo ](widgets/donut/donutdemo/donutdemo.go ).
```go
2020-12-30 15:18:41 +08:00
go run widgets/donut/donutdemo/donutdemo.go
2019-01-22 06:43:35 +08:00
```
2019-02-24 10:13:40 +08:00
[<img src="./doc/images/donutdemo.gif" alt="donutdemo" type="image/gif"> ](widgets/donut/donutdemo/donutdemo.go )
2019-01-22 06:43:35 +08:00
2019-02-24 12:54:10 +08:00
## The Text
2018-05-21 06:27:57 +08:00
Displays text content, supports trimming and scrolling of content. Run the
2019-01-16 12:12:08 +08:00
[textdemo ](widgets/text/textdemo/textdemo.go ).
```go
2020-12-30 15:18:41 +08:00
go run widgets/text/textdemo/textdemo.go
2019-01-16 12:12:08 +08:00
```
2018-05-15 04:42:25 +08:00
2019-02-24 10:13:40 +08:00
[<img src="./doc/images/textdemo.gif" alt="textdemo" type="image/gif"> ](widgets/text/textdemo/textdemo.go )
2018-07-03 11:17:05 +08:00
2019-02-24 12:54:10 +08:00
## The SparkLine
2018-07-03 11:17:05 +08:00
Draws a graph showing a series of values as vertical bars. The bars can have
sub-cell height. Run the
[sparklinedemo ](widgets/sparkline/sparklinedemo/sparklinedemo.go ).
2019-01-16 12:12:08 +08:00
```go
2020-12-30 15:18:41 +08:00
go run widgets/sparkline/sparklinedemo/sparklinedemo.go
2019-01-16 12:12:08 +08:00
```
2019-02-24 10:13:40 +08:00
[<img src="./doc/images/sparklinedemo.gif" alt="sparklinedemo" type="image/gif" width="50%"> ](widgets/sparkline/sparklinedemo/sparklinedemo.go )
2018-07-03 11:17:05 +08:00
2019-02-24 12:54:10 +08:00
## The BarChart
2018-07-03 11:21:23 +08:00
Displays multiple bars showing relative ratios of values. Run the
[barchartdemo ](widgets/barchart/barchartdemo/barchartdemo.go ).
2019-01-16 12:12:08 +08:00
```go
2020-12-30 15:18:41 +08:00
go run widgets/barchart/barchartdemo/barchartdemo.go
2019-01-16 12:12:08 +08:00
```
2019-02-24 10:13:40 +08:00
[<img src="./doc/images/barchartdemo.gif" alt="barchartdemo" type="image/gif" width="50%"> ](widgets/barchart/barchartdemo/barchartdemo.go )
2018-07-03 11:21:23 +08:00
2019-02-24 12:54:10 +08:00
## The LineChart
2019-01-13 14:40:24 +08:00
2019-02-18 14:35:12 +08:00
Displays series of values on a line chart, supports zoom triggered by mouse
events. Run the
2019-01-13 14:40:24 +08:00
[linechartdemo ](widgets/linechart/linechartdemo/linechartdemo.go ).
2019-01-16 12:12:08 +08:00
```go
2020-12-30 15:18:41 +08:00
go run widgets/linechart/linechartdemo/linechartdemo.go
2019-01-16 12:12:08 +08:00
```
2019-02-24 10:13:40 +08:00
[<img src="./doc/images/linechartdemo.gif" alt="linechartdemo" type="image/gif" width="70%"> ](widgets/linechart/linechartdemo/linechartdemo.go )
2019-01-13 14:40:24 +08:00
2019-02-24 12:54:10 +08:00
## The SegmentDisplay
2019-02-07 12:18:56 +08:00
Displays text by simulating a 16-segment display. Run the
2019-02-07 13:35:17 +08:00
[segmentdisplaydemo ](widgets/segmentdisplay/segmentdisplaydemo/segmentdisplaydemo.go ).
2019-02-07 12:18:56 +08:00
```go
2020-12-30 15:18:41 +08:00
go run widgets/segmentdisplay/segmentdisplaydemo/segmentdisplaydemo.go
2019-02-07 12:18:56 +08:00
```
2019-02-24 10:13:40 +08:00
[<img src="./doc/images/segmentdisplaydemo.gif" alt="segmentdisplaydemo" type="image/gif"> ](widgets/segmentdisplay/segmentdisplaydemo/segmentdisplaydemo.go )
2019-02-07 12:18:56 +08:00
2019-01-16 12:12:08 +08:00
# 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 ](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 come second. This is achieved
through detailed code reviews, design discussions and following of the [design
guidelines](doc/design_guidelines.md). Please familiarize yourself with these
before contributing.
If you're developing a new widget, please see the [widget
development](doc/widget_development.md) section.
2019-05-14 10:42:50 +08:00
Termdash uses [this branching model ](https://nvie.com/posts/a-successful-git-branching-model/ ). When you fork the repository, base your changes off the [devel ](https://github.com/mum4k/termdash/tree/devel ) branch and the pull request should merge it back to the devel branch. Commits to the master branch are limited to releases, major bug fixes and documentation updates.
# Similar projects in Go
2019-05-19 13:07:21 +08:00
- [clui ](https://github.com/VladimirMarkelov/clui )
2019-05-14 10:42:50 +08:00
- [gocui ](https://github.com/jroimartin/gocui )
- [gowid ](https://github.com/gcla/gowid )
2019-05-19 13:07:21 +08:00
- [termui ](https://github.com/gizak/termui )
2019-05-14 10:42:50 +08:00
- [tui-go ](https://github.com/marcusolsson/tui-go )
2019-05-19 13:07:21 +08:00
- [tview ](https://github.com/rivo/tview )
2019-05-14 10:42:50 +08:00
# Projects using Termdash
2019-05-19 13:07:21 +08:00
- [datadash ](https://github.com/keithknott26/datadash ): Visualize streaming or tabular data inside the terminal.
2019-05-14 13:11:52 +08:00
- [grafterm ](https://github.com/slok/grafterm ): Metrics dashboards visualization on the terminal.
2020-07-30 12:00:44 +08:00
- [perfstat ](https://github.com/flaviostutz/perfstat ): Analyze and show tips about possible bottlenecks in Linux systems.
2020-10-13 10:24:03 +08:00
- [gex ](https://github.com/Tosch110/gex ): Cosmos SDK explorer in-terminal.
2021-03-19 07:41:29 +08:00
- [ali ](https://github.com/nakabonne/ali ): ALI HTTP load testing tool with realtime analysis.
2018-06-05 00:46:21 +08:00
2019-02-24 12:54:10 +08:00
# Disclaimer
2018-05-15 04:42:25 +08:00
This is not an official Google product.