1
0
mirror of https://github.com/fatih/color.git synced 2024-11-24 08:02:14 +02:00

color: add Windows support via ansicolor

This commit is contained in:
Fatih Arslan 2015-03-12 14:00:06 +02:00
parent 253e0f98bf
commit 969c0f0b28
3 changed files with 22 additions and 31 deletions

View File

@ -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...))

View File

@ -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"))
}

View File

@ -1,11 +0,0 @@
// +build windows
package color
import "syscall"
var (
kernel32 = syscall.NewLazyDLL("kernel32.dll")
procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute")
procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo")
)