Categorygithub.com/jroimartin/gocui
modulepackage
0.5.0
Repository: https://github.com/jroimartin/gocui.git
Documentation: pkg.go.dev

# README

GOCUI - Go Console User Interface

Go Reference

Minimalist Go package aimed at creating Console User Interfaces.

Features

  • Minimalist API.
  • Views (the "windows" in the GUI) implement the interface io.ReadWriter.
  • Support for overlapping views.
  • The GUI can be modified at runtime (concurrent-safe).
  • Global and view-level keybindings.
  • Mouse support.
  • Colored text.
  • Customizable edition mode.
  • Easy to build reusable widgets, complex layouts...

Installation

Execute:

$ go get github.com/jroimartin/gocui

Documentation

Execute:

$ go doc github.com/jroimartin/gocui

Or visit pkg.go.dev to read it online.

Example

package main

import (
	"fmt"
	"log"

	"github.com/jroimartin/gocui"
)

func main() {
	g, err := gocui.NewGui(gocui.OutputNormal)
	if err != nil {
		log.Panicln(err)
	}
	defer g.Close()

	g.SetManagerFunc(layout)

	if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil {
		log.Panicln(err)
	}

	if err := g.MainLoop(); err != nil && err != gocui.ErrQuit {
		log.Panicln(err)
	}
}

func layout(g *gocui.Gui) error {
	maxX, maxY := g.Size()
	if v, err := g.SetView("hello", maxX/2-7, maxY/2, maxX/2+7, maxY/2+2); err != nil {
		if err != gocui.ErrUnknownView {
			return err
		}
		fmt.Fprintln(v, "Hello world!")
	}
	return nil
}

func quit(g *gocui.Gui, v *gocui.View) error {
	return gocui.ErrQuit
}

Screenshots

r2cui

_examples/demo.go

_examples/dynamic.go

Projects using gocui

  • komanda-cli: IRC Client For Developers.
  • vuls: Agentless vulnerability scanner for Linux/FreeBSD.
  • wuzz: Interactive cli tool for HTTP inspection.
  • httplab: Interactive web server.
  • domainr: Tool that checks the availability of domains based on keywords.
  • gotime: Time tracker for projects and tasks.
  • claws: Interactive command line client for testing websockets.
  • terminews: Terminal based RSS reader.
  • diagram: Tool to convert ascii arts into hand drawn diagrams.
  • pody: CLI app to manage Pods in a Kubernetes cluster.
  • kubexp: Kubernetes client.
  • kcli: Tool for inspecting kafka topics/partitions/messages.
  • fac: git merge conflict resolver
  • jsonui: Interactive JSON explorer for your terminal.
  • cointop: Interactive terminal based UI application for tracking cryptocurrencies.

Note: if your project is not listed here, let us know! :)

# Functions

NewGui returns a new Gui object with a given output mode.

# Constants

Text style attributes.
Text style attributes.
Text style attributes.
Color attributes.
Color attributes.
Color attributes.
Color attributes.
Color attributes.
Color attributes.
Color attributes.
Color attributes.
Color attributes.
Special keys.
Special keys.
Special keys.
Special keys.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Keys combinations.
Special keys.
Special keys.
Keys combinations.
Keys combinations.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Keys combinations.
Keys combinations.
Modifiers.
Modifiers.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Special keys.
Output256 provides 256-colors terminal mode.
OutputNormal provides 8-colors terminal mode.

# Variables

DefaultEditor is the default editor.
ErrQuit is used to decide if the MainLoop finished successfully.
ErrUnknownView allows to assert if a View must be initialized.

# Structs

Gui represents the whole User Interface, including the views, layouts and keybindings.
A View is a window.

# Interfaces

Editor interface must be satisfied by gocui editors.
A Manager is in charge of GUI's layout and can be used to build widgets.

# Type aliases

Attribute represents a terminal attribute, like color, font style, etc.
The EditorFunc type is an adapter to allow the use of ordinary functions as Editors.
Key represents special keys or keys combinations.
The ManagerFunc type is an adapter to allow the use of ordinary functions as Managers.
Modifier allows to define special keys combinations.
OutputMode represents the terminal's output mode (8 or 256 colors).