- Notifications
You must be signed in to change notification settings - Fork33
Compositional widgets for terminal user interfaces, written in Go, inspired by urwid.
License
gcla/gowid
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Gowid provides widgets and a framework for making terminal user interfaces. It's written in Go and inspired byurwid.
Widgets out-of-the-box include:
- input components like button, checkbox and an editable text field with support for passwords
- layout components for arranging widgets in columns, rows and a grid
- structured components - a tree, an infinite list and a table
- pre-canned widgets - a progress bar, a modal dialog, a bar graph and a menu
- a VT220-compatible terminal widget, heavily cribbed from urwid 😃
All widgets support interaction with the mouse when the terminal allows.
Gowid is built on top of the fantastictcell package.
There are many alternatives to gowid - seeSimilar Projects
The most developed gowid application is currentlytermshark, a terminal UI for tshark.
go get github.com/gcla/gowid/...
Make sure$GOPATH/bin
is in your PATH (or~/go/bin
ifGOPATH
isn't set), then tab complete "gowid-" e.g.
gowid-fib
Here is a port of urwid'spalette example:
Here is urwid'sgraph example:
And urwid'sfibonacci example:
A demonstration of gowid's terminal widget, a port of urwid'sterminal widget:
Finally, here is an animation of termshark in action:
This example is an attempt to mimic urwid's"Hello World" example.
package mainimport ("github.com/gcla/gowid""github.com/gcla/gowid/widgets/divider""github.com/gcla/gowid/widgets/pile""github.com/gcla/gowid/widgets/styled""github.com/gcla/gowid/widgets/text""github.com/gcla/gowid/widgets/vpadding")//======================================================================funcmain() {palette:= gowid.Palette{"banner":gowid.MakePaletteEntry(gowid.ColorWhite,gowid.MakeRGBColor("#60d")),"streak":gowid.MakePaletteEntry(gowid.ColorNone,gowid.MakeRGBColor("#60a")),"inside":gowid.MakePaletteEntry(gowid.ColorNone,gowid.MakeRGBColor("#808")),"outside":gowid.MakePaletteEntry(gowid.ColorNone,gowid.MakeRGBColor("#a06")),"bg":gowid.MakePaletteEntry(gowid.ColorNone,gowid.MakeRGBColor("#d06")),}div:=divider.NewBlank()outside:=styled.New(div,gowid.MakePaletteRef("outside"))inside:=styled.New(div,gowid.MakePaletteRef("inside"))helloworld:=styled.New(text.NewFromContentExt(text.NewContent([]text.ContentSegment{text.StyledContent("Hello World",gowid.MakePaletteRef("banner")),}),text.Options{Align: gowid.HAlignMiddle{},},),gowid.MakePaletteRef("streak"),)f:= gowid.RenderFlow{}view:=styled.New(vpadding.New(pile.New([]gowid.IContainerWidget{&gowid.ContainerWidget{IWidget:outside,D:f},&gowid.ContainerWidget{IWidget:inside,D:f},&gowid.ContainerWidget{IWidget:helloworld,D:f},&gowid.ContainerWidget{IWidget:inside,D:f},&gowid.ContainerWidget{IWidget:outside,D:f},}),gowid.VAlignMiddle{},f),gowid.MakePaletteRef("bg"),)app,_:=gowid.NewApp(gowid.AppArgs{View:view,Palette:&palette,})app.SimpleMainLoop()}
Running the example above displays this:
- The beginnings of atutorial
- A list of most of thewidgets
- SomeFAQs (which I guessed at...)
- Some gowidprogramming tricks
Gowid is late to the TUI party. There are many options from which to choose - please readhttps://appliedgo.net/tui/ for a nice summary for the Go language. Here is a selection:
- urwid - one of the oldest, for those working in python
- tview - active, polished, concise, lots of widgets, Go
- termui - focus on graphing and dataviz, Go
- gocui - focus on layout, good input options, mouse support, Go
- clui - active, many widgets, mouse support, Go
- tui-go - QT-inspired, experimental, nice examples, Go
Gowid depends on these great open-source packages:
- urwid - not a Go-dependency, but the model for most of gowid's design
- tcell - a cell based view for text terminals, like xterm, inspired by termbox
- asciigraph - lightweight ASCII line-graphs for Go
- logrus - structured pluggable logging for Go
- testify - tools for testifying that your code will behave as you intend
- The author - Graham Clark (grclark@gmail.com)
About
Compositional widgets for terminal user interfaces, written in Go, inspired by urwid.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors9
Uh oh!
There was an error while loading.Please reload this page.