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 Double
Double
Double Single
Bold
Round
Hidden
Classic
Title Positions
Inside
Top
Bottom
Making custom Box
You can make your custom Box by using the inbuilt Box struct provided by the module.
typeBoxstruct{TopRightstring// TopRight corner used for SymbolsTopLeftstring// TopLeft corner used for SymbolsVerticalstring// Symbols used for Vertical BarsBottomRightstring// BottomRight corner used for SymbolsBottomLeftstring// BotromLeft corner used for SymbolsHorizontalstring// Symbols used for Horizontal BarsConfig// Configuration for the Box to be made}
If you want High Intensity Colors then the Color name must start with Hi. If Color option is empty or invalid then Box with default Color is formed.
True Color is possible though you need to provide it as uint or [3]uint and make sure that the terminals which will be targetted must have it supported.
[3]uint's element all must be in a range of [0, 0xFF] and uint in range of [0x000000, 0xFFFFFF].
As convenience, if the terminal's doesn't support True Color then it will round off according to the terminal's max supported colors which makes it easier for the users not to worry about other terminal for most of the cases.
4 bit Color are now supported by every terminal now so there is no list for them unlike the above ones.
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 Mintty are the only know terminal emulators which can render Unicode and Emojis properly on Windows.
Indic Text only works on very few Terminals as less support it.
It is recommended not to use this for Online Playgrounds like Go Playground and Repl.it, CI/CDs etc. 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.
Terminal Color Detection
It is possible to round off true color provided to 8 bit or 16 bit according to your terminal's maximum capacity.
There is no standardized way of detecting the terminal's maximum color capacity so the way of detecting your terminal might not work for you. If this can be fixed for you then you can always make a PR.
If you think that the module can't detect True Color of the terminal then you must set your environment variable COLORTERM to truecolor or 24bit for True Color support.
If you are targetting 8 bit color based terminals and if the module couln't detect it then set your environment variable TERM to name of the terminal emulator with 256color as suffix like xterm-256color.
There might be no color effect for very old terminals like Windows Console (Legacy Mode) or environment variable TERM give DUMB so it will output some garbage value or a warning if used.
In Online Playgrounds, CI/CDs, Browsers etc, it is recommended not to use this module with color effect as few may have it but this is hard to detect in general. If you think that it's possible then open an issue and address the solution!
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.