Box CLI Maker 📦

Box CLI Maker is a Highly Customized Terminal Box Creator.
Features
- Make terminal box in 8️⃣ inbuilt different style
- Color Support 🎨
- Custom Title Positions
- Make your own Box style 📦
- Align the text according to the need
- Limited Unicode and Emoji 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"
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 arguements.
- 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 arguements.
- 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
Title Positions
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
Con Config // Configuration for the Box to be made
}
Using it:
package main
import "github.com/Delta456/box-cli-maker"
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:
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.
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.
Limited Unicode Suppport
It uses rivo/uniseg for Unicode support though there are some limitations:
-
Different terminals render Unicode differently.
-
No known terminal support characters like Japanese, Korean and Chinese ones because their width is 1.5 not 1.
-
Windows CMD and Powershell doesn't render emojis well at all so the right vertical alignment will break so it prefered to use Git Bash in IDEs like VSCode. On Linux some terminal can render and some cannot.
-
Online Go Compilers like Go Playground don't support Unicode for this package and repl.it supports Unicode but not all characters as stated above.
If you want to use Unicode then do it at your own risk. I will try to find a solution for this soon or if you have a solution for this then please do a PR or so!
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 and tell me the best ways possible to fix my problems.
License
Licensed under MIT