tui

package module
v1.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 1, 2026 License: MIT Imports: 15 Imported by: 0

README

go-tui: Text User Interface на Go

Latest release Go Reference

Обзор

Лёгкая библиотека для TUI на Go. Может:

  • Создавать надписи
  • Создавать и настраивать кнопки
  • Обрабатывать нажатия клавиатуры
  • Красить текст

Установка

go get -u github.com/romanSPB15/go-tui

Пример использования

package main

import (
	"github.com/eiannone/keyboard"
	"github.com/romanSPB15/go-tui"
)

func main() {
	a := tui.NewApp()
	a.AddWidgets(tui.NewStaticLabel("Привет, Go!"))
	btn := tui.NewButton("Нажми ↑", keyboard.KeyArrowUp)
	btn.OnClick = a.Quit
	a.AddWidgets(btn)
	a.Run()
}

Documentation

Overview

func main() {
	a := tui.NewApp()
	a.AddWidgets(tui.NewStaticLabel("Привет, Go!"))
	btn := tui.NewButton("Нажми ↑", keyboard.KeyArrowUp)
	btn.OnClick = a.Quit
	a.AddWidgets(btn)
	a.Run()
}

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func EnableANSI

func EnableANSI()

EnableANSI() включает поддержку ANSI в терминале в случае если нет(Windows)

Types

type App

type App interface {
	Widgets() []Widget    // Widgets() возвращает список компонентов, добавленных в приложение.
	AddWidgets(...Widget) // AddWidgets() добавляет компонент в приложение.
	Clear()               // Clear() очищает список компонентов приложения без перерисовки.

	Redraw()          // Redraw() перерисовывает все компоненты. Важно: такая перерисовка вызывает мерцание.
	RedrawWidget(int) // RedrawWidget() перерисовывает конкретный компонент. index — это номер компонента, который нужно перерисовать.

	Run()           // Run() — это блокирующий запуск TUI-приложения. Если пользователь закроет окно, то будет произведён graceful shutdown и выход из метода.
	IsRunned() bool // IsRunned() возращает true, если приложение запущено. Иначе возвращает false.

	Quit()                   // Quit() — это принудительный выход из приложения.
	OnQuit() <-chan struct{} // Run() возвращает канал сигнализации о выходе.

	Window() Window // Window() возвращает интерфейс окна приложения. Из него можно получить длину и ширину окна в символах.

	AddKeyHandler(key keyboard.Key, h func()) // AddKeyHandler() регистрирует обработчик нажатия указанной клавиши

	LogInfo(message string, args ...any)  // LogInfo() логирует указанное сообщение подобно fmt.Printf() в файл, если приложение создано как Debug.
	LogFatal(message string, args ...any) // LogFatal() логирует указанное сообщение подобно fmt.Printf() в файл, если приложение создано как Debug. Потом в любом случае выходит
}

App — это объект приложения.

func NewApp

func NewApp() App

NewApp() создаёт объект приложения без логирования.

func NewDebugApp

func NewDebugApp() App

NewDebugApp() создаёт объект приложения с логированием.

type Button

type Button struct {
	OnClick func()
	Widget
	// contains filtered or unexported fields
}

Button это объект кнопки, нажимающейся от нажатия её клавиши. Обработчик в OnClick.

func NewButton

func NewButton(text string, key keyboard.Key) *Button

NewButton() создаёт кнопку. key это её клавиша.

func (*Button) SetIndex added in v1.5.0

func (btn *Button) SetIndex(idx int)

type Canvas added in v1.4.0

type Canvas struct {
	// contains filtered or unexported fields
}

Canvas — это многострочный виджет, на котором можно "рисовать". В символах Canvas в 2 раза шире чем указано при создании, чтобы пиксели были квадратные а не прямоугольные.

func NewCanvas added in v1.4.0

func NewCanvas(width, height int) *Canvas

NewCanvas() создаёт виждет Canvas.ы

func (*Canvas) DisplayMode added in v1.4.0

func (*Canvas) DisplayMode() DisplayMode

DisplayMode() реализует интерфейс Widget

func (*Canvas) Draw added in v1.4.0

func (c *Canvas) Draw(x, y int, clr Color)

Draw() устанавливает указанный цвет в указанном месте Canvas.

func (*Canvas) DrawAndRender added in v1.4.0

func (c *Canvas) DrawAndRender(x, y int, clr Color)

Draw() устанавливает указанный цвет в указанном месте Canvas, и перерисовывает.

func (*Canvas) InnerText added in v1.5.0

func (c *Canvas) InnerText() (res string)

InnerText() реализует интерфейс Widget

func (*Canvas) MaxLength added in v1.4.0

func (c *Canvas) MaxLength() int

MaxLength() реализует интерфейс Widget

func (*Canvas) SetIndex added in v1.5.0

func (c *Canvas) SetIndex(idx int)

SetIndex() реализует интерфейс Widget

type Color

type Color int

Color — это код цвета.

const (
	Black Color = iota + 30
	Red
	Green
	Yellow
	Blue
	Magenta
	Cyan
	White
)

Обычные цвета.

const (
	BrightBlack Color = iota + 90
	BrightRed
	BrightGreen
	BrightYellow
	BrightBlue
	BrightMagenta
	BrightCyan
	BrightWhite
)

Яркие цвета(работают не во всем терминалах).

type ColorProgress added in v1.2.1

type ColorProgress struct {
	// contains filtered or unexported fields
}

ColorProgress — это виджет шкалы прогресса. Добавлено в TUI v1.2.0

func NewColorProgress added in v1.2.1

func NewColorProgress(len int, on, off Color) *ColorProgress

NewColorProgress() cоздаёт виджет шкалы прогресса. len — максимальная длина в пикселях on — цвет "включенных" пикселей off — цвет "выключенных" пикселей Добавлено в TUI v1.2.0

func (*ColorProgress) DisplayMode added in v1.2.1

func (p *ColorProgress) DisplayMode() DisplayMode

func (*ColorProgress) InnerText added in v1.5.0

func (p *ColorProgress) InnerText() string

func (*ColorProgress) MaxLength added in v1.4.0

func (p *ColorProgress) MaxLength() int

func (*ColorProgress) SetIndex added in v1.5.0

func (p *ColorProgress) SetIndex(idx int)

func (*ColorProgress) SetValue added in v1.2.1

func (p *ColorProgress) SetValue(f float64)

SetValue() устанавливает значение прогресса. Диапазон 0-1 Добавлено в TUI v1.2.0

type DisplayMode

type DisplayMode int

DisplayMode — это режим отображения виджета.

const (
	DisplayInline  DisplayMode = iota // В одну строку.
	DisplayBlock                      // На отдельной строке.
	DisplayNewLine                    // Перенос строки.
)

type Label

type Label struct {
	ANSI string // Приставка ANSI escape последовательности
	Text string // Текст виджета.

	Block bool // Отображение в блочном режиме.
	// contains filtered or unexported fields
}

Label — это виджет текстовой метки.

func NewDynamicLabel

func NewDynamicLabel(txt string, maxLength int) *Label

NewDynamicLabel() создаёт виджет текста с возможностью изменения содержимого в будущем. maxLength это место, зарезервированное под метку в символах.

func NewStaticLabel

func NewStaticLabel(txt string) *Label

NewStaticLabel() создаёт виджет текста.

func (lbl *Label) Blink() *Label

Blink() делает текст мигающим(работает не во всем терминалах). Добавлено в TUI v1.1.0

func (*Label) Bold

func (lbl *Label) Bold() *Label

Bold() делает текст жирным.

func (*Label) ColorizeBackground added in v1.1.0

func (lbl *Label) ColorizeBackground(clr Color) *Label

ColorizeBackground() окрашивает фон текста в один из стандартных цветов. Добавлено в TUI v1.1.0

func (*Label) ColorizeBackgroundRGB added in v1.1.0

func (lbl *Label) ColorizeBackgroundRGB(r, g, b uint8) *Label

ColorizeBackgroundRGB() окрашивает фон текста в RGB. Добавлено в TUI v1.1.0

func (*Label) ColorizeForeground added in v1.1.0

func (lbl *Label) ColorizeForeground(clr Color) *Label

ColorizeForeground() окрашивает текст в один из стандартных цветов. Добавлено в TUI v1.1.0

func (*Label) ColorizeForegroundRGB added in v1.1.0

func (lbl *Label) ColorizeForegroundRGB(r, g, b uint8) *Label

ColorizeForegroundRGB() окрашивает текст в RGB. Добавлено в TUI v1.1.0

func (*Label) DisplayMode

func (lbl *Label) DisplayMode() DisplayMode

DisplayMode() реализует интерфейс Widget

func (*Label) InnerText added in v1.5.0

func (l *Label) InnerText() string

func (*Label) Italic

func (lbl *Label) Italic() *Label

Italic() делает текст курсивом.

func (*Label) MaxLength added in v1.4.0

func (lbl *Label) MaxLength() int

MaxLength() реализует интерфейс Widget

func (*Label) Reset added in v1.5.0

func (lbl *Label) Reset() *Label

Reset() убирает все декорации текста. Добавлено в TUI v1.5.0

func (*Label) Reverse

func (lbl *Label) Reverse() *Label

Reverse() реверсирует цвет текста.

func (*Label) SetIndex added in v1.5.0

func (l *Label) SetIndex(int)

SetIndex() реализует интерфейс Widget

func (*Label) Underline

func (lbl *Label) Underline() *Label

Underline() подчеркивает текст.

type Widget added in v1.5.0

type Widget interface {
	InnerText() string // InnerText() возращает текст виджета
	SetIndex(int)      // SetIndex() устанавливает индекс компонента для перерисовки только его.

	MaxLength() int // MaxLength() возращает длину текста виджета без учёта ANSI Escape последовательностей
	DisplayMode() DisplayMode
}

Widget — это интерфейс для любого TUI-виджета.

func NewLine

func NewLine() Widget

NewLine() создаёт компонент, занимающий весь остаток его строки, что переносит следующие на новую строку.

func Spaser

func Spaser() Widget

Spaser() создаёт пустой компонент, занимающий всю строку для визуального разделения.

type Window

type Window interface {
	Width() int  // Ширина окна в символах
	Height() int // Высота окна в символах
}

Window — это объект окна приложения.

Directories

Path Synopsis
examples
simple command
keyboard module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL