diff --git a/color.go b/color.go index 1306824..968dcfa 100644 --- a/color.go +++ b/color.go @@ -6,6 +6,8 @@ import ( "os" "strconv" "strings" + + "github.com/shiena/ansicolor" ) // Color defines a custom color object which is defined by SGR parameters. @@ -92,7 +94,7 @@ func (c *Color) prepend(value Attribute) { // Output defines the standard output of the print functions. By default // os.Stdout is used. -var Output io.Writer = os.Stdout +var Output io.Writer = ansicolor.NewAnsiColorWriter(os.Stdout) // Print formats using the default formats for its operands and writes to // standard output. Spaces are added between operands when neither is a @@ -148,7 +150,10 @@ func (c *Color) PrintlnFunc() func(a ...interface{}) { // SprintFunc returns a new function that returns colorized strings for the // given arguments with fmt.Sprint(). Useful to put into or mix into other -// string. +// string. Windows users should use this in conjuction with color.Output, example: +// +// put := New(FgYellow).SprintFunc() +// fmt.Ffprintf(color.Output, "This is a %s", put("warning")) func (c *Color) SprintFunc() func(a ...interface{}) string { return func(a ...interface{}) string { return c.wrap(fmt.Sprint(a...)) @@ -157,7 +162,7 @@ func (c *Color) SprintFunc() func(a ...interface{}) string { // SprintfFunc returns a new function that returns colorized strings for the // given arguments with fmt.Sprintf(). Useful to put into or mix into other -// string. +// string. Windows users should use this in conjuction with color.Output. func (c *Color) SprintfFunc() func(format string, a ...interface{}) string { return func(format string, a ...interface{}) string { return c.wrap(fmt.Sprintf(format, a...)) @@ -166,7 +171,7 @@ func (c *Color) SprintfFunc() func(format string, a ...interface{}) string { // SprintlnFunc returns a new function that returns colorized strings for the // given arguments with fmt.Sprintln(). Useful to put into or mix into other -// string. +// string. Windows users should use this in conjuction with color.Output. func (c *Color) SprintlnFunc() func(a ...interface{}) string { return func(a ...interface{}) string { return c.wrap(fmt.Sprintln(a...)) diff --git a/color_test.go b/color_test.go index bd47d45..c977e11 100644 --- a/color_test.go +++ b/color_test.go @@ -4,18 +4,15 @@ import ( "bytes" "fmt" "os" - "runtime" "testing" + + "github.com/shiena/ansicolor" ) // Testing colors is kinda different. First we test for given colors and their // escaped formatted results. Next we create some visual tests to be tested. // Each visual test includes the color name to be compared. func TestColor(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip("Windows is not supported") - } - rb := new(bytes.Buffer) Output = rb @@ -50,7 +47,7 @@ func TestColor(t *testing.T) { // First Visual Test fmt.Println("") - Output = os.Stdout + Output = ansicolor.NewAnsiColorWriter(os.Stdout) New(FgRed).Printf("red\t") New(BgRed).Print(" ") @@ -112,21 +109,21 @@ func TestColor(t *testing.T) { put := New(FgYellow).SprintFunc() warn := New(FgRed).SprintFunc() - fmt.Printf("this is a %s and this is %s.\n", put("warning"), warn("error")) + fmt.Fprintf(Output, "this is a %s and this is %s.\n", put("warning"), warn("error")) info := New(FgWhite, BgGreen).SprintFunc() - fmt.Printf("this %s rocks!\n", info("package")) + fmt.Fprintf(Output, "this %s rocks!\n", info("package")) // Fifth Visual Test fmt.Println() - fmt.Println(BlackString("black")) - fmt.Println(RedString("red")) - fmt.Println(GreenString("green")) - fmt.Println(YellowString("yellow")) - fmt.Println(BlueString("blue")) - fmt.Println(MagentaString("magenta")) - fmt.Println(CyanString("cyan")) - fmt.Println(WhiteString("white")) + fmt.Fprintln(Output, BlackString("black")) + fmt.Fprintln(Output, RedString("red")) + fmt.Fprintln(Output, GreenString("green")) + fmt.Fprintln(Output, YellowString("yellow")) + fmt.Fprintln(Output, BlueString("blue")) + fmt.Fprintln(Output, MagentaString("magenta")) + fmt.Fprintln(Output, CyanString("cyan")) + fmt.Fprintln(Output, WhiteString("white")) } diff --git a/color_windows.go b/color_windows.go deleted file mode 100644 index b4e57f0..0000000 --- a/color_windows.go +++ /dev/null @@ -1,11 +0,0 @@ -// +build windows - -package color - -import "syscall" - -var ( - kernel32 = syscall.NewLazyDLL("kernel32.dll") - procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute") - procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo") -)