Help us shape the future of Go! Take the 2026 Go Developer Survey

vt10x

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Jul 27, 2026 License: Apache-2.0, MIT Imports: 16 Imported by: 0

Documentation

Overview

Package terminal is a vt10x terminal emulation backend, influenced largely by st, rxvt, xterm, and iTerm as reference. Use it for terminal muxing, a terminal emulation frontend, or wherever else you need terminal emulation.

In development, but very usable.

Index

Constants

This section is empty.

Variables

View Source
var (
	RGBPattern  = regexp.MustCompile(`^([\da-f]{1})\/([\da-f]{1})\/([\da-f]{1})$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$`)
	HashPattern = regexp.MustCompile(`[\da-f]`)
)

Functions

func ResizePty

func ResizePty(pty *os.File, cols, rows int) error

Types

type ChangeFlag

type ChangeFlag uint32

ChangeFlag represents possible state changes of the terminal.

const (
	ChangedScreen ChangeFlag = 1 << iota
	ChangedTitle
)

Terminal changes to occur in VT.ReadState

type Color

type Color uint32

Color maps to the ANSI colors [0, 16) and the xterm colors [16, 256).

const (
	Black Color = iota
	Red
	Green
	Yellow
	Blue
	Magenta
	Cyan
	LightGrey
	DarkGrey
	LightRed
	LightGreen
	LightYellow
	LightBlue
	LightMagenta
	LightCyan
	White
)

ANSI color values

const (
	DefaultFG Color = 1<<24 + iota
	DefaultBG
	DefaultCursor
)

Default colors are potentially distinct to allow for special behavior. For example, a transparent background. Otherwise, the simple case is to map default colors to another color.

func (Color) ANSI

func (c Color) ANSI() bool

ANSI returns true if Color is within [0, 16).

type Cursor

type Cursor struct {
	Attr  Glyph
	X, Y  int
	State uint8
}

type Glyph

type Glyph struct {
	Char   rune
	Mode   int16
	FG, BG Color
}

type ModeFlag

type ModeFlag uint32

ModeFlag represents various terminal mode states.

const (
	ModeWrap ModeFlag = 1 << iota
	ModeInsert
	ModeAppKeypad
	ModeAltScreen
	ModeCRLF
	ModeMouseButton
	ModeMouseMotion
	ModeReverse
	ModeKeyboardLock
	ModeHide
	ModeEcho
	ModeAppCursor
	ModeMouseSgr
	Mode8bit
	ModeBlink
	ModeFBlink
	ModeFocus
	ModeMouseX10
	ModeMouseMany
	ModeMouseMask = ModeMouseButton | ModeMouseMotion | ModeMouseX10 | ModeMouseMany
)

Terminal modes

type State

type State struct {
	DebugLogger *log.Logger
	// contains filtered or unexported fields
}

State represents the terminal emulation state. Use Lock/Unlock methods to synchronize data access with VT.

func (*State) Cell

func (t *State) Cell(x, y int) Glyph

Cell returns the glyph containing the character code, foreground color, and background color at position (x, y) relative to the top left of the terminal.

func (*State) Changed

func (t *State) Changed(change ChangeFlag) bool

Changed returns true if change has occured.

func (*State) ClearScrollback

func (t *State) ClearScrollback()

ClearScrollback discards all retained scrollback lines. Takes t.mu.

func (*State) Cursor

func (t *State) Cursor() Cursor

Cursor returns the current position of the cursor.

func (*State) CursorVisible

func (t *State) CursorVisible() bool

CursorVisible returns the visible state of the cursor.

func (*State) Lock

func (t *State) Lock()

Lock locks the state object's mutex.

func (*State) Mode

func (t *State) Mode() ModeFlag

Mode returns the current terminal mode.

func (*State) Scrollback

func (t *State) Scrollback() [][]Glyph

Scrollback returns a copy of the scrollback history, oldest line first. Each line is a copy of the evicted glyphs (trailing blanks trimmed). Caller must hold the lock (via Lock/Unlock) or otherwise serialize access.

func (*State) ScrollbackEvictedTotal

func (t *State) ScrollbackEvictedTotal() int64

ScrollbackEvictedTotal returns the monotonic count of lines ever captured into scrollback (continues past ring trimming). Caller must serialize access.

func (*State) ScrollbackLen

func (t *State) ScrollbackLen() int

ScrollbackLen returns the number of lines currently in the scrollback ring. Caller must hold the lock (via Lock/Unlock) or otherwise serialize access.

func (*State) ScrollbackTail

func (t *State) ScrollbackTail(n int) [][]Glyph

ScrollbackTail returns copies of the last n scrollback lines (fewer if the ring holds fewer), oldest of the returned set first. Caller must serialize access.

func (*State) SetScrollbackMax

func (t *State) SetScrollbackMax(n int)

SetScrollbackMax sets the maximum number of scrolled-off lines retained. A value <= 0 disables (and clears) scrollback capture. Takes t.mu.

func (*State) Size

func (t *State) Size() (cols, rows int)

func (*State) String

func (t *State) String() string

func (*State) Title

func (t *State) Title() string

Title returns the current title set via the tty.

func (*State) Unlock

func (t *State) Unlock()

Unlock resets change flags and unlocks the state object's mutex.

type Terminal

type Terminal interface {
	// View displays the virtual terminal.
	View

	// Write parses input and writes terminal changes to state.
	io.Writer

	// Parse blocks on read on pty or io.Reader, then parses sequences until
	// buffer empties. State is locked as soon as first rune is read, and unlocked
	// when buffer is empty.
	Parse(bf *bufio.Reader) error
}

Terminal represents the virtual terminal emulator.

func New

func New(opts ...TerminalOption) Terminal

New returns a new virtual terminal emulator.

type TerminalInfo

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

type TerminalOption

type TerminalOption func(*TerminalInfo)

func WithSize

func WithSize(cols, rows int) TerminalOption

func WithWriter

func WithWriter(w io.Writer) TerminalOption

type View

type View interface {
	// String dumps the virtual terminal contents.
	fmt.Stringer

	// Size returns the size of the virtual terminal.
	Size() (cols, rows int)

	// Resize changes the size of the virtual terminal.
	Resize(cols, rows int)

	// Mode returns the current terminal mode.//
	Mode() ModeFlag

	// Title represents the title of the console window.
	Title() string

	// Cell returns the glyph containing the character code, foreground color, and
	// background color at position (x, y) relative to the top left of the terminal.
	Cell(x, y int) Glyph

	// Cursor returns the current position of the cursor.
	Cursor() Cursor

	// CursorVisible returns the visible state of the cursor.
	CursorVisible() bool

	// Lock locks the state object's mutex.
	Lock()

	// Unlock resets change flags and unlocks the state object's mutex.
	Unlock()

	// SetScrollbackMax sets the maximum number of scrolled-off main-screen
	// lines retained for scrollback. <= 0 disables and clears capture.
	SetScrollbackMax(n int)

	// ScrollbackLen returns the number of retained scrollback lines. Caller
	// must serialize access (Lock/Unlock).
	ScrollbackLen() int

	// Scrollback returns a copy of the scrollback history, oldest first.
	// Caller must serialize access (Lock/Unlock).
	Scrollback() [][]Glyph

	// ScrollbackEvictedTotal returns the monotonic count of lines ever captured
	// into scrollback (keeps growing past ring trimming). Serialize access.
	ScrollbackEvictedTotal() int64

	// ScrollbackTail returns copies of the last n scrollback lines, oldest of
	// the returned set first. Serialize access.
	ScrollbackTail(n int) [][]Glyph

	// ClearScrollback discards all retained scrollback lines.
	ClearScrollback()
}

View represents the view of the virtual terminal emulator.

Jump to

Keyboard shortcuts

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