vt100

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Sep 16, 2019 License: MIT Imports: 10 Imported by: 16

README

VT100

Build Status GoDoc License Go Report Card

  • Supports colors and attributes.
  • Developed for Linux. May work on other systems, but there are no guarantees.
  • Can detect the terminal size.
  • Can get key-presses, including arrow keys.
  • Has a Canvas struct, for drawing only the updated characters to the terminal.
  • Uses the spec directly, but memoizes the commands sent to the terminal, for speed.
Images

shooter example

Screen recording of the shooter example, where you can control a small character with the arrow keys and shoot with space.


menu example

Screen recording of the menu example, which uses VT100 terminal codes and demonstrates a working menu.


VT100 terminal

A physical VT100 terminal. Photo by Jason Scott, CC BY 2.0

The vt100 Go Module
Simple use

Output "hi" in blue:

fmt.Println(vt100.BrightColor("hi", "Blue"))

Erase the current line:

vt100.Do("Erase Line")

Move the cursor 3 steps up (it's a bit verbose, but it's generated directly from spec, memoized for speed and is easy to wrap in a custom function):

vt100.Set("Cursor Up", map[string]string{"{COUNT}": "3"})

The full overview of possible commands are at the top of vt100.go.

Another example

See cmd/move for a more advanced example, where a character can be moved around with the arrow keys.

Features and limitations
  • Can detect letters, arrow keys and space. F12 and similar keys are not supported (they are supported by vt220 but not vt100).
  • Resizing the terminal when using the Canvas struct may cause artifacts, for a brief moment.
  • Holding down a key may trigger key repetition which may speed up the main loop.
General info

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// Non-color attributes
	ResetAll   = NewAttributeColor("Reset all attributes")
	Bright     = NewAttributeColor("Bright")
	Dim        = NewAttributeColor("Dim")
	Underscore = NewAttributeColor("Underscore")
	Blink      = NewAttributeColor("Blink")
	Reverse    = NewAttributeColor("Reverse")
	Hidden     = NewAttributeColor("Hidden")

	None AttributeColor

	// Dark foreground colors (+ light gray)
	Black     = NewAttributeColor("Black")
	Red       = NewAttributeColor("Red")
	Green     = NewAttributeColor("Green")
	Yellow    = NewAttributeColor("Yellow")
	Blue      = NewAttributeColor("Blue")
	Magenta   = NewAttributeColor("Magenta")
	Cyan      = NewAttributeColor("Cyan")
	LightGray = NewAttributeColor("White")

	// Light foreground colors (+ dark gray)
	DarkGray     = NewAttributeColor("Bright", "Black")
	LightRed     = NewAttributeColor("Bright", "Red")
	LightGreen   = NewAttributeColor("Bright", "Green")
	LightYellow  = NewAttributeColor("Bright", "Yellow")
	LightBlue    = NewAttributeColor("Bright", "Blue")
	LightMagenta = NewAttributeColor("Bright", "Magenta")
	LightCyan    = NewAttributeColor("Bright", "Cyan")
	White        = NewAttributeColor("Bright", "White")

	// Aliases
	Pink = LightMagenta
	Gray = LightGray

	// Dark background colors (+ light gray)
	BackgroundBlack     = NewAttributeColor("40")
	BackgroundRed       = NewAttributeColor("41")
	BackgroundGreen     = NewAttributeColor("42")
	BackgroundYellow    = NewAttributeColor("43")
	BackgroundBlue      = NewAttributeColor("44")
	BackgroundMagenta   = NewAttributeColor("45")
	BackgroundCyan      = NewAttributeColor("46")
	BackgroundLightGray = NewAttributeColor("47")

	// Aliases
	BackgroundWhite = BackgroundLightGray
	BackgroundGray  = BackgroundLightGray

	// Default colors (usually gray)
	Default           = NewAttributeColor("39")
	BackgroundDefault = NewAttributeColor("49")

	DarkColorMap = map[string]AttributeColor{
		"black":        Black,
		"Black":        Black,
		"red":          Red,
		"Red":          Red,
		"green":        Green,
		"Green":        Green,
		"yellow":       Yellow,
		"Yellow":       Yellow,
		"blue":         Blue,
		"Blue":         Blue,
		"magenta":      Magenta,
		"Magenta":      Magenta,
		"cyan":         Cyan,
		"Cyan":         Cyan,
		"gray":         DarkGray,
		"Gray":         DarkGray,
		"white":        White,
		"White":        White,
		"darkred":      Red,
		"DarkRed":      Red,
		"darkgreen":    Green,
		"DarkGreen":    Green,
		"darkyellow":   Yellow,
		"DarkYellow":   Yellow,
		"darkblue":     Blue,
		"DarkBlue":     Blue,
		"darkmagenta":  Magenta,
		"DarkMagenta":  Magenta,
		"darkcyan":     Cyan,
		"DarkCyan":     Cyan,
		"darkgray":     DarkGray,
		"DarkGray":     DarkGray,
		"lightred":     LightRed,
		"LightRed":     LightRed,
		"lightgreen":   LightGreen,
		"LightGreen":   LightGreen,
		"lightyellow":  LightYellow,
		"LightYellow":  LightYellow,
		"lightblue":    LightBlue,
		"LightBlue":    LightBlue,
		"lightmagenta": LightMagenta,
		"LightMagenta": LightMagenta,
		"lightcyan":    LightCyan,
		"LightCyan":    LightCyan,
		"lightgray":    LightGray,
		"LightGray":    LightGray,
	}

	LightColorMap = map[string]AttributeColor{
		"black":        DarkGray,
		"Black":        DarkGray,
		"red":          LightRed,
		"Red":          LightRed,
		"green":        LightGreen,
		"Green":        LightGreen,
		"yellow":       LightYellow,
		"Yellow":       LightYellow,
		"blue":         LightBlue,
		"Blue":         LightBlue,
		"magenta":      LightMagenta,
		"Magenta":      LightMagenta,
		"cyan":         LightCyan,
		"Cyan":         LightCyan,
		"gray":         LightGray,
		"Gray":         LightGray,
		"white":        White,
		"White":        White,
		"lightred":     LightRed,
		"LightRed":     LightRed,
		"lightgreen":   LightGreen,
		"LightGreen":   LightGreen,
		"lightyellow":  LightYellow,
		"LightYellow":  LightYellow,
		"lightblue":    LightBlue,
		"LightBlue":    LightBlue,
		"lightmagenta": LightMagenta,
		"LightMagenta": LightMagenta,
		"lightcyan":    LightCyan,
		"LightCyan":    LightCyan,
		"lightgray":    LightGray,
		"LightGray":    LightGray,
		"darkred":      Red,
		"DarkRed":      Red,
		"darkgreen":    Green,
		"DarkGreen":    Green,
		"darkyellow":   Yellow,
		"DarkYellow":   Yellow,
		"darkblue":     Blue,
		"DarkBlue":     Blue,
		"darkmagenta":  Magenta,
		"DarkMagenta":  Magenta,
		"darkcyan":     Cyan,
		"DarkCyan":     Cyan,
		"darkgray":     DarkGray,
		"DarkGray":     DarkGray,
	}
)

Functions

func ASCIIOnce added in v0.2.1

func ASCIIOnce() int

func AttributeAndColor

func AttributeAndColor(attr, name string) string

Get the terminal command for setting a terminal attribute and a color

func AttributeNumber added in v0.5.0

func AttributeNumber(name string) string

Returns the number (as a string) for a given attribute name. Returns the given string if the attribute was not found in the spec.

func AttributeOrColor

func AttributeOrColor(name string) string

Execute the terminal command for setting a given display attribute name, like "Bright" or "Blink"

func BrightColor

func BrightColor(text, color string) string

Return text with a bright color applied

func Clear

func Clear()

Clear screen

func Close added in v0.7.0

func Close()

func ColorNum

func ColorNum(colorNum int) string

Get the terminal command for setting a given color number

func Colors

func Colors() []string

Return all available colors

func Commands

func Commands() []string

Return all available commands

func DarkColor added in v0.3.0

func DarkColor(text, color string) string

Return text with a dark color applied

func Do

func Do(command string)

Do the given command, with no parameters

func Down

func Down(n uint)

Move the cursor down

func EchoOff added in v0.9.0

func EchoOff()

func Get

func Get(command string, replacemap map[string]string) string

Return the terminal command, given a map to replace the values mentioned in the spec. If "dummy" is true, the terminal command will be printed instead of executed.

func Home

func Home()

func Init added in v0.7.0

func Init()

func KeyCodeOnce added in v0.2.1

func KeyCodeOnce() int

func KeyOnce added in v0.2.1

func KeyOnce() int

func Left

func Left(n uint)

Move the cursor to the left

func NoColor

func NoColor() string

Get the terminal command for setting no colors or other display attributes

func Reset

func Reset()
func Right(n uint)

Move the cursor to the right

func ScreenHeight added in v0.6.0

func ScreenHeight() int

Convenience function

func ScreenWidth added in v0.6.0

func ScreenWidth() int

Convenience function

func Set

func Set(command string, replacemap map[string]string)

Do the terminal command, given a map to replace the values mentioned in the spec. If "dummy" is true, the terminal command will be printed instead of executed.

func SetAttribute

func SetAttribute(name string)

Execute the terminal command for setting a given display attribute name, like "Bright" or "Blink"

func SetAttributeAndColor

func SetAttributeAndColor(attr, name string)

Execute the terminal command for setting a terminal attribute and a color

func SetColorNum

func SetColorNum(colorNum int)

Execute the terminal command for setting a given color number

func SetLineWrap

func SetLineWrap(enable bool)

func SetNoColor

func SetNoColor()

Execute the terminal command for setting no colors or other display attributes

func SetXY

func SetXY(x, y uint)

Move cursor to the given position (from 0 and up, the terminal code is from 1 and up)

func ShowCursor

func ShowCursor(enable bool)

func Stop added in v0.6.0

func Stop() string

Return a string for resetting the attributes

func TrueColor added in v0.4.0

func TrueColor(fg color.Color, text string) string

This is not part of the VT100 spec, but an easteregg for displaying 24-bit "true color" on some terminals. Example use: fmt.Println(vt100.TrueColor(color.RGBA{0xa0, 0xe0, 0xff, 0xff}, "TrueColor"))

func Up

func Up(n uint)

Move the cursor up

func WaitForKey added in v0.6.0

func WaitForKey()

Wait for Esc, Enter or Space to be pressed

func Words added in v0.7.0

func Words(line string, colors ...string) string

func Write added in v0.6.0

func Write(x, y int, text string, fg, bg AttributeColor)

Output a string at x, y with the given colors

func WriteRune added in v0.6.0

func WriteRune(x, y int, r rune, fg, bg AttributeColor)

Output a rune at x, y with the given colors

Types

type AttributeColor added in v0.3.0

type AttributeColor []byte

func NewAttributeColor added in v0.5.0

func NewAttributeColor(attributes ...string) AttributeColor

func (AttributeColor) Background added in v0.7.0

func (ac AttributeColor) Background() AttributeColor

Modify color attributes so that they become background color attributes instead

func (AttributeColor) Bright added in v0.6.0

func (ac AttributeColor) Bright() AttributeColor

Return a new AttributeColor that has "Bright" added to the list of attributes

func (AttributeColor) Combine added in v0.5.0

func (ac AttributeColor) Combine(other AttributeColor) AttributeColor

func (AttributeColor) Get added in v0.3.0

func (ac AttributeColor) Get(text string) string

An alias for StartStop

func (AttributeColor) Head added in v0.6.0

func (ac AttributeColor) Head() byte

func (AttributeColor) Ints added in v0.7.0

func (ac AttributeColor) Ints() []int

func (AttributeColor) Output added in v0.3.0

func (ac AttributeColor) Output(text string)

Use this color to output the given text. Will reset the attributes at the end of the string.

func (AttributeColor) Start added in v0.6.0

func (ac AttributeColor) Start(text string) string

Get the full string needed for outputting colored text, with the text, but don't reset the attributes at the end of the string

func (AttributeColor) StartStop added in v0.6.0

func (ac AttributeColor) StartStop(text string) string

Get the full string needed for outputting colored texti, with the text and stopping the color attribute

func (AttributeColor) Stop added in v0.6.0

func (ac AttributeColor) Stop(text string) string

Get the text and the terminal codes for resetting the attributes

func (AttributeColor) String added in v0.6.0

func (ac AttributeColor) String() string

Return the VT100 terminal codes for setting this combination of attributes and color attributes

func (AttributeColor) Tail added in v0.6.0

func (ac AttributeColor) Tail() []byte

type Canvas

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

func NewCanvas

func NewCanvas() *Canvas

func (*Canvas) At added in v0.2.1

func (c *Canvas) At(x, y uint) (rune, error)

At returns the rune at the given coordinates, or an error if out of bounds

func (*Canvas) Clear

func (c *Canvas) Clear()

Clear canvas

func (*Canvas) Draw

func (c *Canvas) Draw()

func (*Canvas) Fill added in v0.6.0

func (c *Canvas) Fill(fg AttributeColor)

Change the foreground color for each character

func (*Canvas) FillBackground added in v0.6.0

func (c *Canvas) FillBackground(bg AttributeColor)

Change the background color for each character

func (*Canvas) H

func (c *Canvas) H() uint

func (*Canvas) Plot

func (c *Canvas) Plot(x, y uint, s rune)

func (*Canvas) PlotAC added in v0.6.0

func (c *Canvas) PlotAC(x, y uint, ac AttributeColor, s rune)

Plot a foreground color and a rune

func (*Canvas) PlotC

func (c *Canvas) PlotC(x, y uint, fg string, s rune)

Plot a bright color

func (*Canvas) PlotDC

func (c *Canvas) PlotDC(x, y uint, fg string, s rune)

Plot a dark color

func (*Canvas) Redraw

func (c *Canvas) Redraw()

func (*Canvas) Resize

func (c *Canvas) Resize()

func (*Canvas) Resized

func (c *Canvas) Resized() *Canvas

Check if the canvas was resized, and adjust values accordingly. Returns a new canvas, or nil.

func (*Canvas) Size

func (c *Canvas) Size() (uint, uint)

Return the size of the current canvas

func (*Canvas) String added in v0.2.1

func (c *Canvas) String() string

Bytes returns only the characters, as a long string with a newline after each row

func (*Canvas) W

func (c *Canvas) W() uint

func (*Canvas) Write added in v0.8.0

func (c *Canvas) Write(x, y uint, fg, bg AttributeColor, s string)

Write will write a string to the canvas, without conversion of the background color bg to a background color (use bg.Background()). Beware that strings that consists of multi-byte runes may not be written correctly! For those cases, use WriteRune instead.

func (*Canvas) WriteRune added in v0.9.0

func (c *Canvas) WriteRune(x, y uint, fg, bg AttributeColor, r rune)

WriteRune will write a colored rune to the canvas, without conversion of the bg color to a background color (use bg.Background()).

type Char

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

type TTY added in v0.2.1

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

func NewTTY added in v0.2.1

func NewTTY() (*TTY, error)

NewTTY opens /dev/tty in raw and cbreak mode as a term.Term

func (*TTY) ASCII added in v0.2.1

func (tty *TTY) ASCII() int

func (*TTY) Close added in v0.2.1

func (tty *TTY) Close()

Close will Restore and close the raw terminal

func (*TTY) Key added in v0.2.1

func (tty *TTY) Key() int

Return the keyCode or ascii, but ignore repeated keys

func (*TTY) KeyCode added in v0.2.1

func (tty *TTY) KeyCode() int

func (*TTY) NoBlock added in v0.2.1

func (tty *TTY) NoBlock()

NoBlock leaves "cooked" mode and enters "cbreak" mode

func (*TTY) RawMode added in v0.2.1

func (tty *TTY) RawMode()

RawMode will switch the terminal to raw mode

func (*TTY) Restore added in v0.2.1

func (tty *TTY) Restore()

Restore will restore the terminal

func (*TTY) SetTimeout added in v0.2.1

func (tty *TTY) SetTimeout(d time.Duration)

SetTimeout sets a timeout for reading a key

func (*TTY) Term added in v0.2.1

func (tty *TTY) Term() *term.Term

Term will return the underlying term.Term

Directories

Path Synopsis
cmd
bg
key
ok

Jump to

Keyboard shortcuts

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