box

package module
v2.0.1 Latest Latest
Warning

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

Go to latest
Published: Nov 9, 2020 License: MIT Imports: 7 Imported by: 28

README

Box CLI Maker 📦

Box CLI Maker is a Highly Customized Terminal Box Creator.

go.dev reference CI Go Report Card GolangCI GitHub release

Features

  • Make Terminal Box in 8️⃣ inbuilt different styles
  • 16 Inbuilt Colors and Custom (24 bit) Colors Support 🎨
  • Custom Title Positions
  • Make your own Terminal Box style 📦
  • Align the text according to the need
  • Unicode, Emoji and Windows Console Support 😋
  • Written in 🇬 🇴

Installation

 go get github.com/Delta456/box-cli-maker

Usage

In main.go

package main

import "github.com/Delta456/box-cli-maker/v2"

func main() {
	Box := box.New(box.Config{Px: 2, Py: 5, Type: "Single", Color: "Cyan"})
	Box.Print("Box CLI Maker", "Highly Customized Terminal Box Maker")
}

box.New(config Config) accepts a Config struct with following parameters and returns a Box struct.

Box struct Methods

Box.Print(title, lines string) prints Box from the specified arguments.

  • Parameters
    • title : Title of the Box
    • lines : Content to be written inside the Box

Box.Println(title, lines string) prints Box in a newline from the specified arguments.

  • Parameters
    • title : Title of the Box
    • lines : Content to be written inside the Box

Box.String(title, lines string) string return string representation of Box.

  • Parameters
    • title : Title of the Box
    • lines : Content to be written inside the Box

Box Types

  • Single
single
  • Single Double
single_double
  • Double
double
  • Double Single
double_single
  • Bold
bold
  • Round
round
  • Hidden
hidden
  • Classic
classic

Title Positions

  • Inside
single
  • Top
top
  • Bottom
bottom

Making custom Box

You can make your custom Box by using the inbuilt Box struct provided by the module.

type Box struct {
	TopRight    string // TopRight corner used for Symbols
	TopLeft     string // TopLeft corner used for Symbols
	Vertical    string // Symbols used for Vertical Bars
	BottomRight string // BottomRight corner used for Symbols
	BottomLeft  string // BotromLeft corner used for Symbols
	Horizontal  string // Symbols used for Horizontal Bars
	Config // Configuration for the Box to be made
}

Using it:

package main

import "github.com/Delta456/box-cli-maker/v2"

func main() {
    config := box.Config{Px: 2, Py: 3, Type: "", TitlePos: "Inside"}
    boxNew := box.Box{TopRight: "*", TopLeft: "*", BottomRight: "*", BottomLeft: "*", Horizontal: "-", Vertical: "|", Config: config}
    boxNew.Print("Box CLI Maker", "Make Highly Customized Terminal Boxes")
}

Output:

custom

Color Types

It has color support from fatih/color module from which this module uses FgColor and FgHiColor. Color is a key for the following maps:

var fgColors = map[string]color.Attribute{
	"Black":   color.FgBlack,
	"Blue":    color.FgBlue,
	"Red":     color.FgRed,
	"Green":   color.FgGreen,
	"Yellow":  color.FgYellow,
	"Cyan":    color.FgCyan,
	"Magenta": color.FgMagenta,
}

var fgHiColors = map[string]color.Attribute{
	"HiBlack":   color.FgHiBlack,
	"HiBlue":    color.FgHiBlue,
	"HiRed":     color.FgHiRed,
	"HiGreen":   color.FgHiGreen,
	"HiYellow":  color.FgHiYellow,
	"HiCyan":    color.FgHiCyan,
	"HiMagenta": color.FgHiMagenta,
}

If you want High Intensity Colors then the Color name should start with Hi. If Color option is empty or invalid then Box with default Color is formed.

It can even have custom color which can be provided in [3]uint and uint though the elements of the array must be in a range of [0x0, 0xFF] and uint must be in a range of [0x000000, 0xFFFFFF].

If you want to use the string representation of the Box and print them for Windows Console then you would have to use box.Output as the passing stream to the respective functions.

Windows Console is 4 bit (16 colors) so Custom Colors will not work for them but the Box will be printed correctly without the Color effect.

Note

Vertical Alignment

As different terminals have different font by default so the right vertical alignment may not be aligned well. You will have to change your font accordingly to make it work.

Limitations of Unicode and Emoji

It uses mattn/go-runewidth for Unicode and Emoji support though there are some limitations:

  • Windows Terminal and Windows System Linux are the only know terminals which can render Unicode and Emojis properly on Windows.
  • Marathi Text only works on very few Terminals as less support it.
  • It is recommended not to use Online Playgrounds like Go Playground and Repl.it because they use a font that only has ASCII support and other Character Set is used which becomes problematic for finding the length as the font changes during runtime.
  • Change your font which supports Unicode and Emojis else the right vertical alignment will break.

Acknowledgements

I thank the following people and their packages whom I have studied and was able to port to Go accordingly.

Special thanks to @elimsteve who helped me to optimize the code and told me the best possible ways to fix my problems and @JalonSolov for tab lines support.

Kudos to moul/golang-repo-template for their Go template.

License

Licensed under MIT

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (

	// Output is an io.Writer and instance of
	// color.Output which is needed
	// for outputting in windows console
	Output = color.Output
)

Functions

This section is empty.

Types

type Box

type Box struct {
	TopRight    string // TopRight corner used for Symbols
	TopLeft     string // TopLeft corner used for Symbols
	Vertical    string // Symbols used for Vertical Bars
	BottomRight string // BottomRight corner used for Symbols
	BottomLeft  string // BotromLeft corner used for Symbols
	Horizontal  string // Symbols used for Horizontal Bars
	Config             // Config for the Box struct
}

Box struct defines the Box to be made.

func New

func New(config Config) Box

New takes struct Config and returns the specified Box struct.

func (Box) Print

func (b Box) Print(title, lines string)

Print prints the Box

func (Box) Println

func (b Box) Println(title, lines string)

Println adds a newline before and after the Box

func (Box) String

func (b Box) String(title, lines string) string

String returns the string representation of Box.

type Config

type Config struct {
	Py           int         // Horizontal Padding
	Px           int         // Vertical Padding
	ContentAlign string      // Content Alignment inside Box
	Type         string      // Type of Box
	TitlePos     string      // Title Position
	Color        interface{} // Color of Box
}

Config is the configuration for the Box struct

Jump to

Keyboard shortcuts

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