jesseduffield.lazygit/vendor/github.com/jesseduffield/gocui
Stefan Haller 06a9ff12ab Bump gocui
This brings in https://github.com/jesseduffield/gocui/pull/98 with the following
fix:

Fix rendering of CRLF sequence ('\r\n')

The FirstGraphemeCluster call returns this as a single character; we want to
treat it the same way as a single \n.

This would be a problem if e.g. a progress bar used \r repeatedly to paint over
the same line, and then printed a \n to move on to the next line; the last pair
of \r and \n was swallowed.

Another scenario where this was a problem was if you stream output of a command
to the log, and the command used \r\n as line feeds. This happens for example
for a background fetch that fails with an error; in that case we print the
combined output (stdout plus stderr) to the log after the command finished, and
for some reason it uses \r\n in that case (I can't actually explain why; when I
do `git fetch --all | xxd` I see only bare \n characters). All output would
appear on one line then.

Also, filter out escape sequences for character set designation; there's nothing
useful we can do with them. In practice, the only one that you are likely to see
is `ESC ( B`, which is sent as part of tput sgr0, which is sometimes used in
scripts to reset all graphics attributes to defaults.
2026-01-28 20:57:09 +01:00
..
.gitignore switch to Go modules 2019-09-01 21:24:03 +10:00
attribute.go Bump gocui 2024-01-10 09:39:25 +01:00
AUTHORS use dep 2018-08-06 00:38:38 +10:00
CHANGES_tcell.md use tcell via porting over code from awesome-gocui 2021-04-06 19:34:32 +10:00
CODE_OF_CONDUCT.md use tcell via porting over code from awesome-gocui 2021-04-06 19:34:32 +10:00
CONTRIBUTING.md use tcell via porting over code from awesome-gocui 2021-04-06 19:34:32 +10:00
doc.go use tcell via porting over code from awesome-gocui 2021-04-06 19:34:32 +10:00
edit.go Bump gocui 2026-01-03 14:39:03 +01:00
escape.go Bump gocui 2026-01-28 20:57:09 +01:00
gui.go Bump gocui 2026-01-11 18:07:30 +01:00
gui_others.go Bump gocui (and tcell) 2025-12-23 16:49:16 +01:00
gui_windows.go Bump gocui (and tcell) 2025-12-23 16:49:16 +01:00
keybinding.go Bump gocui (and tcell) 2025-12-23 16:49:16 +01:00
LICENSE use dep 2018-08-06 00:38:38 +10:00
loader.go Bump gocui (and tcell) 2025-12-23 16:49:16 +01:00
README.md use tcell via porting over code from awesome-gocui 2021-04-06 19:34:32 +10:00
scrollbar.go Use slimmer scrollbars 2024-01-30 08:44:03 +11:00
task.go Use an interface for tasks instead of a concrete struct 2023-07-10 17:12:21 +10:00
task_manager.go Use an interface for tasks instead of a concrete struct 2023-07-10 17:12:21 +10:00
tcell_driver.go Bump gocui (and tcell) 2025-12-23 16:49:16 +01:00
text_area.go Bump gocui 2026-01-25 11:23:05 +01:00
view.go Bump gocui 2026-01-28 20:57:09 +01:00

GOCUI - Go Console User Interface

CircleCI CodeCov Go Report Card GolangCI GoDoc GitHub tag (latest SemVer)

Minimalist Go package aimed at creating Console User Interfaces. A community fork based on the amazing work of jroimartin

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 editing mode.
  • Easy to build reusable widgets, complex layouts...

About fork

This fork has many improvements over the original work from jroimartin.

  • Written ontop of TCell
  • Better wide character support
  • Support for 1 Line height views
  • Better support for running in docker container
  • Customize frame colors
  • Improved code comments and quality
  • Many small improvements
  • Change Visibility of views

For information about this org see: awesome-gocui/about.

Installation

Execute:

$ go get github.com/awesome-gocui/gocui

Documentation

Execute:

$ go doc github.com/awesome-gocui/gocui

Or visit godoc.org to read it online.

Example

See the _example folder for more examples

package main

import (
	"fmt"
	"log"

	"github.com/awesome-gocui/gocui"
)

func main() {
	g, err := gocui.NewGui(gocui.OutputNormal, true)
	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 && !gocui.IsQuit(err) {
		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, 0); err != nil {
		if !gocui.IsUnknownView(err) {
			return err
		}

		if _, err := g.SetCurrentView("hello"); err != nil {
			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.
  • lazygit: simple terminal UI for git commands.
  • lazydocker: The lazier way to manage everything docker.

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