termenv
lets you safely use advanced styling options on the terminal. It
gathers information about the terminal environment in terms of its ANSI & color
support and offers you convenient methods to colorize and style your output,
without you having to deal with all kinds of weird ANSI escape sequences and
color conversions.
go get github.com/muesli/termenv
// returns supported color profile: Ascii, ANSI, ANSI256, or TrueColor
termenv.ColorProfile()
// returns default foreground color
termenv.ForegroundColor()
// returns default background color
termenv.BackgroundColor()
// returns whether terminal uses a dark-ish background
termenv.HasDarkBackground()
termenv
supports multiple color profiles: ANSI (16 colors), ANSI Extended
(256 colors), and TrueColor (24-bit RGB). Colors will automatically be degraded
to the best matching available color in the desired profile:
TrueColor
=> ANSI 256 Colors
=> ANSI 16 Colors
=> Ascii
out := termenv.String("Hello World")
// retrieve color profile supported by terminal
p := termenv.ColorProfile()
// supports hex values
// will automatically degrade colors on terminals not supporting RGB
out = out.Foreground(p.Color("#abcdef"))
// but also supports ANSI colors (0-255)
out = out.Background(p.Color("69"))
// ...or the color.Color interface
out = out.Foreground(p.FromColor(color.RGBA{255, 128, 0, 255}))
fmt.Println(out)
out := termenv.String("foobar")
// text styles
out.Bold()
out.Faint()
out.Italic()
out.CrossOut()
out.Underline()
out.Overline()
// reverse swaps current fore- & background colors
out.Reverse()
// blinking text
out.Blink()
// combine multiple options
out.Bold().Underline()
// load template helpers
f := termenv.TemplateFuncs(termenv.ColorProfile())
tpl := template.New("tpl").Funcs(f)
// apply bold style in a template
bold := `{{ Bold "Hello World" }}`
// examples for colorized templates
col := `{{ Color "#ff0000" "#0000ff" "Red on Blue" }}`
fg := `{{ Foreground "#ff0000" "Red Foreground" }}`
bg := `{{ Background "#0000ff" "Blue Background" }}`
// wrap styles
wrap := `{{ Bold (Underline "Hello World") }}`
// parse and render
tpl, err = tpl.Parse(bold)
var buf bytes.Buffer
tpl.Execute(&buf, nil)
fmt.Println(&buf)
Other available helper functions are: Faint
, Italic
, CrossOut
,
Underline
, Overline
, Reverse
, and Blink
.
// Reset the terminal to its default style, removing any active styles
termenv.Reset()
// Switch to the altscreen. The former view can be restored with ExitAltScreen()
termenv.AltScreen()
// Exit the altscreen and return to the former terminal view
termenv.ExitAltScreen()
// Clear the visible portion of the terminal
termenv.ClearScreen()
// Move the cursor to a given position
termenv.MoveCursor(row, column)
// Hide the cursor
termenv.HideCursor()
// Show the cursor
termenv.ShowCursor()
// Move the cursor up a given number of lines
termenv.CursorUp(n)
// Move the cursor down a given number of lines
termenv.CursorDown(n)
// Move the cursor down a given number of lines and place it at the beginning
// of the line
termenv.CursorNextLine(n)
// Move the cursor up a given number of lines and place it at the beginning of
// the line
termenv.CursorPrevLine(n)
// Clear the current line
termenv.ClearLine()
// Clear a given number of lines
termenv.ClearLines(n)
You can find the source code used to create this chart in termenv
's examples.
Check out Glow, a markdown renderer for
the command-line, which uses termenv
.