Giter Club home page Giter Club logo

go-terminal's Introduction

go-terminal

Go Report Card GoDoc MIT Licensed

A package that facilitates the creation of command line applications with custom colors and fonts and cursor manipulation

Installing

go get https://github.com/leandroveronezi/go-terminal

Examples

SGR (Select Graphic Rendition)

package main

import (
	"fmt"
	"github.com/leandroveronezi/go-terminal"
)

func main() {

	goTerminal.Clean()
	goTerminal.CursorLineColumn(1, 1)

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Bold)
	fmt.Println("Bold")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Faint)
	fmt.Println("Faint")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Italic)
	fmt.Println("Italic")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Underlined)
	fmt.Println("Underlined")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BlinkSlow)
	fmt.Println("BlinkSlow")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Reverse)
	fmt.Println("Reverse")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Invisible)
	fmt.Println("Invisible")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Strike)
	fmt.Println("Strike")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Overline)
	fmt.Println("Overline")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Strike, goTerminal.Italic)
	fmt.Println("Strike + Italic")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Strike, goTerminal.Italic, goTerminal.Reverse)
	fmt.Println("Strike + Italic + Reverse")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Bold, goTerminal.Italic)
	fmt.Println("Bold + Italic")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Italic, goTerminal.Underlined)
	fmt.Println("Italic + Underlined")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.Italic, goTerminal.Underlined, goTerminal.Reverse, goTerminal.BlinkSlow)
	fmt.Print("Italic + Underlined + Reverse + BlinkSlow")

	goTerminal.SetSGR(goTerminal.Reset)

	pos, err := goTerminal.Size()

	if err == nil {		
		fmt.Println("x:", pos.X)
		fmt.Println("y:", pos.Y)
	} else {
		fmt.Println(err)
	}

	goTerminal.CursorNextLine()

	goTerminal.SetSGR(goTerminal.Reset)
	goTerminal.SetSGR(goTerminal.BackgroundDefault)

}

Standard colors

package main

import (
	"fmt"
	"github.com/leandroveronezi/go-terminal"
)

func main() {

	goTerminal.Clean()
	goTerminal.CursorLineColumn(1, 1)

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundDefault)
	fmt.Println("Default")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundBlack)
	fmt.Println("Black")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundRed)
	fmt.Println("Red")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundGreen)
	fmt.Println("Green")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundYellow)
	fmt.Println("Yellow")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundBlue)
	fmt.Println("Blue")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundMagenta)
	fmt.Println("Magenta")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundCyan)
	fmt.Println("Cyan")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundLightGray)
	fmt.Println("LightGray")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundDarkGray)
	fmt.Println("DarkGray")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundLightRed)
	fmt.Println("LightRed")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundLightGreen)
	fmt.Println("LightGreen")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundLightYellow)
	fmt.Println("LightYellow")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundLightBlue)
	fmt.Println("LightBlue")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundLightMagenta)
	fmt.Println("LightMagenta")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundLightCyan)
	fmt.Println("LightCyan")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundWhite)
	fmt.Println("White")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.ForegroundDefault)

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundDefault)
	fmt.Println("Default")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundBlack)
	fmt.Println("Black")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundRed)
	fmt.Println("Red")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundGreen)
	fmt.Println("Green")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundYellow)
	fmt.Println("Yellow")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundBlue)
	fmt.Println("Blue")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundMagenta)
	fmt.Println("Magenta")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundCyan)
	fmt.Println("Cyan")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundLightGray)
	fmt.Println("LightGray")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundDarkGray)
	fmt.Println("DarkGray")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundLightRed)
	fmt.Println("LightRed")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundLightGreen)
	fmt.Println("LightGreen")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundLightYellow)
	fmt.Println("LightYellow")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundLightBlue)
	fmt.Println("LightBlue")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundLightMagenta)
	fmt.Println("LightMagenta")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundLightCyan)
	fmt.Println("LightCyan")
	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundWhite)
	fmt.Println("White")

	goTerminal.SetSGR(goTerminal.Reset, goTerminal.BackgroundDefault)

}

RGB colors

package main

import (
	"fmt"
	"github.com/leandroveronezi/go-terminal"
)

func main() {

	goTerminal.Clean()
	goTerminal.CursorLineColumn(1, 1)
	goTerminal.SetSGR(goTerminal.Reset)

	x := 1
	y := 1

	for i := 0; i < 256; i++ {

		goTerminal.ColorRGBBackground(i, 0, 0)
		goTerminal.CursorLineColumn(x, y)
		fmt.Print(" ")

		goTerminal.ColorRGBBackground(0, i, 0)
		goTerminal.CursorLineColumn(x, y+20)
		fmt.Print(" ")

		goTerminal.ColorRGBBackground(0, 0, i)
		goTerminal.CursorLineColumn(x, y+40)
		fmt.Print(" ")

		y = y + 1

		if y >= 16 {
			y = 1
			x = x + 1
		}

	}

	goTerminal.CursorNextLine()

	goTerminal.SetSGR(goTerminal.Reset)
	goTerminal.SetSGR(goTerminal.BackgroundDefault)

}

256 colors

package main

import (
	"fmt"
	"github.com/leandroveronezi/go-terminal"
)

func main() {

	goTerminal.Clean()
	goTerminal.CursorLineColumn(1, 1)
	goTerminal.SetSGR(goTerminal.Reset)

	for i := 0; i <= 16; i++ {

		for j := 0; j <= 16; j++ {

			code := i*16 + j
			goTerminal.Color256Background(code)
			goTerminal.CursorLineColumn(i, j)
			fmt.Print(" ")

		}

	}

	goTerminal.CursorNextLine()

	goTerminal.SetSGR(goTerminal.Reset)
	goTerminal.SetSGR(goTerminal.BackgroundDefault)

}

Cursor Control

package main

import (
	"fmt"
	"github.com/leandroveronezi/go-terminal"
)

func main() {

    goTerminal.Clean()
    goTerminal.CursorLineColumn(1, 1)
    goTerminal.SetSGR(goTerminal.Reset)
    
    //A moves cursor up by n
    goTerminal.CursorUp(1)
    
    //moves cursor down by n
    goTerminal.CursorDown(1)
            
    //moves cursor right by n
    goTerminal.CursorRight(1)
            
    //moves cursor left by n
    goTerminal.CursorLeft(1)
            
    //Save cursor position and attributes
    goTerminal.SaveCursorAttrs()
            
    //Restore cursor position and attributes
    goTerminal.RestoreCursorAttrs()
    
    //Save cursor position
    goTerminal.SaveCursor()
    
    //Restore cursor position
    goTerminal.RestoreCursor()
    
    //Move to next line
    goTerminal.CursorNextLine()
    
    //moves cursor to column n
    goTerminal.CursorColumn(10)
            
    //Move cursor to screen location v,h
    goTerminal.CursorLineColumn(4, 1)
    
    //Move cursor to upper left corner
    goTerminal.CursorHome()
    
    //Move cursor to upper left corner
    goTerminal.CursorLeftHome()
    
    //CursorHide hide the cursor.
    goTerminal.CursorHide()
    
    //CursorShow shows the cursor.
    goTerminal.CursorShow()

}

go-terminal's People

Contributors

leandroveronezi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

go-terminal's Issues

type Coord is missing in file cursor_windows.go

Hi,

Thanks for a great module!
It works fine on ubuntu, but when I'm compiling on windows, I get an error saying "Coord" is missing.
If I look into types_linux.go, I can see:
type Coord struct {
X int
Y int
}
But Coord type is not present in types_windows.go.
Would you be so kind and add it to types_windows.go?

Best regards

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.