MCPcopy Index your code
hub / github.com/buger/goterm

github.com/buger/goterm @v1.0.4

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.4 ↗ · + Follow
66 symbols 151 edges 14 files 27 documented · 41% 21 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Description

This library provides basic building blocks for building advanced console UIs.

Initially created for Gor.

Full API documentation: http://godoc.org/github.com/buger/goterm

Basic usage

Full screen console app, printing current time:

import (
    tm "github.com/buger/goterm"
    "time"
)

func main() {
    tm.Clear() // Clear current screen

    for {
        // By moving cursor to top-left position we ensure that console output
        // will be overwritten each time, instead of adding new.
        tm.MoveCursor(1,1)

        tm.Println("Current Time:", time.Now().Format(time.RFC1123))

        tm.Flush() // Call it every time at the end of rendering

        time.Sleep(time.Second)
    }
}

This can be seen in examples/time_example.go. To run it yourself, go into your $GOPATH/src/github.com/buger/goterm directory and run go run ./examples/time_example.go

Print red bold message on white background:

tm.Println(tm.Background(tm.Color(tm.Bold("Important header"), tm.RED), tm.WHITE))

Create box and move it to center of the screen:

tm.Clear()

// Create Box with 30% width of current screen, and height of 20 lines
box := tm.NewBox(30|tm.PCT, 20, 0)

// Add some content to the box
// Note that you can add ANY content, even tables
fmt.Fprint(box, "Some box content")

// Move Box to approx center of the screen
tm.Print(tm.MoveTo(box.String(), 40|tm.PCT, 40|tm.PCT))

tm.Flush()

This can be found in examples/box_example.go.

Draw table:

// Based on http://golang.org/pkg/text/tabwriter
totals := tm.NewTable(0, 10, 5, ' ', 0)
fmt.Fprintf(totals, "Time\tStarted\tActive\tFinished\n")
fmt.Fprintf(totals, "%s\t%d\t%d\t%d\n", "All", started, started-finished, finished)
tm.Println(totals)
tm.Flush()

This can be found in examples/table_example.go.

Line charts

Chart example:

screen shot 2013-07-09 at 5 05 37 pm

    import (
        tm "github.com/buger/goterm"
    )

    chart := tm.NewLineChart(100, 20)

    data := new(tm.DataTable)
    data.AddColumn("Time")
    data.AddColumn("Sin(x)")
    data.AddColumn("Cos(x+1)")

    for i := 0.1; i < 10; i += 0.1 {
    data.AddRow(i, math.Sin(i), math.Cos(i+1))
    }

    tm.Println(chart.Draw(data))

This can be found in examples/chart_example.go.

Drawing 2 separate graphs in different scales. Each graph have its own Y axe.

chart.Flags = tm.DRAW_INDEPENDENT

Drawing graph with relative scale (Grapwh draw starting from min value instead of zero)

chart.Flags = tm.DRAW_RELATIVE

Extension points exported contracts — how you extend this code

Chart (Interface)
(no doc) [1 implementers]
plot.go

Core symbols most depended-on inside this repo

AddColumn
called by 17
plot.go
ff
called by 10
plot.go
writeText
called by 10
plot.go
String
called by 9
box.go
AddRow
called by 7
plot.go
applyTransform
called by 5
terminal.go
Draw
called by 5
plot.go
DrawLine
called by 5
plot.go

Shape

Function 49
Method 10
Struct 5
FuncType 1
Interface 1

Languages

Go100%

Modules by API surface

terminal.go26 symbols
plot.go16 symbols
plot_test.go4 symbols
box.go4 symbols
table.go3 symbols
terminal_windows.go2 symbols
terminal_sysioctl.go2 symbols
terminal_nosysioctl.go2 symbols
box_test.go2 symbols
examples/time_example.go1 symbols
examples/table_example.go1 symbols
examples/file_output_example.go1 symbols

For agents

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

⬇ download graph artifact