Go wrapper for ANSI escape code.
go get github.com/morikuni/aec
ANSI escape codes depend on terminal environment.
Some of these features may not work.
Check supported Font-Style/Font-Color features with checkansi.
Wikipedia for more detail.
Up(n)Down(n)Right(n)Left(n)NextLine(n)PreviousLine(n)Column(col)Position(row, col)SaveRestoreHideShowReportEraseDisplay(mode)EraseLine(mode)ScrollUp(n)ScrollDown(n)BoldFaintItalicUnderlineBlinkSlowBlinkRapidInverseConcealCrossOutFrameEncircleOverlineForeground color.
DefaultFBlackFRedFGreenFYellowFBlueFMagentaFCyanFWhiteFLightBlackFLightRedFLightGreenFLightYellowFLightBlueFLightMagentaFLightCyanFLightWhiteFColor3BitF(color)Color8BitF(color)FullColorF(r, g, b)Background color.
DefaultBBlackBRedBGreenBYellowBBlueBMagentaBCyanBWhiteBLightBlackBLightRedBLightGreenBLightYellowBLightBlueBLightMagentaBLightCyanBLightWhiteBColor3BitB(color)Color8BitB(color)FullColorB(r, g, b)24bit RGB color to ANSI color.
NewRGB3Bit(r, g, b)NewRGB8Bit(r, g, b)To mix these features.
custom := aec.EmptyBuilder.Right(2).RGB8BitF(128, 255, 64).RedB().ANSI
custom.Apply("Hello World")
aec.XXX().With(aec.YYY()) or aec.EmptyBuilder.XXX().YYY().ANSIfmt.Print(ansi, "some string", aec.Reset) or fmt.Print(ansi.Apply("some string"))aec.Reset should be added when using font style or font color features.
Simple progressbar.
package main import ( "fmt" "strings" "time" "github.com/morikuni/aec" ) func main() { const n = 20 builder := aec.EmptyBuilder up2 := aec.Up(2) col := aec.Column(n + 2) bar := aec.Color8BitF(aec.NewRGB8Bit(64, 255, 64)) label := builder.LightRedF().Underline().With(col).Right(1).ANSI // for up2 fmt.Println() fmt.Println() for i := 0; i <= n; i++ { fmt.Print(up2) fmt.Println(label.Apply(fmt.Sprint(i, "/", n))) fmt.Print("[") fmt.Print(bar.Apply(strings.Repeat("=", i))) fmt.Println(col.Apply("]")) time.Sleep(100 * time.Millisecond) } }