MCPcopy Index your code
hub / github.com/jroimartin/gocui

github.com/jroimartin/gocui @v0.5.0 sqlite

repository ↗ · DeepWiki ↗ · release v0.5.0 ↗
192 symbols 535 edges 26 files 89 documented · 46%
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! :)

Extension points exported contracts — how you extend this code

Manager (Interface)
A Manager is in charge of GUI's layout and can be used to build widgets. [4 implementers]
gui.go
Editor (Interface)
Editor interface must be satisfied by gocui editors.
edit.go
ManagerFunc (FuncType)
The ManagerFunc type is an adapter to allow the use of ordinary functions as Managers. If f is a function with the appro
gui.go
EditorFunc (FuncType)
The EditorFunc type is an adapter to allow the use of ordinary functions as Editors. If f is a function with the appropr
edit.go

Core symbols most depended-on inside this repo

SetView
called by 62
gui.go
SetKeybinding
called by 49
gui.go
Size
called by 22
gui.go
Close
called by 21
gui.go
NewGui
called by 19
gui.go
MainLoop
called by 19
gui.go
SetManagerFunc
called by 17
gui.go
SetCurrentView
called by 14
gui.go

Shape

Function 94
Method 77
Struct 11
TypeAlias 6
FuncType 2
Interface 2

Languages

Go100%

Modules by API surface

gui.go39 symbols
view.go28 symbols
_examples/widgets.go17 symbols
edit.go13 symbols
_examples/demo.go11 symbols
escape.go8 symbols
_examples/dynamic.go7 symbols
keybinding.go6 symbols
_examples/stdin.go6 symbols
_examples/mouse.go6 symbols
_examples/flow_layout.go6 symbols
_examples/goroutine.go5 symbols

Dependencies from manifests, versioned

For agents

$ claude mcp add gocui \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact