1package ui 2 3import ( 4 "fmt" 5 "io" 6 "os" 7 8 "github.com/mattn/go-colorable" 9 "github.com/mattn/go-isatty" 10) 11 12type UI interface { 13 Print(a ...interface{}) (n int, err error) 14 Printf(format string, a ...interface{}) (n int, err error) 15 Println(a ...interface{}) (n int, err error) 16 Errorf(format string, a ...interface{}) (n int, err error) 17 Errorln(a ...interface{}) (n int, err error) 18} 19 20var ( 21 Stdout = colorable.NewColorableStdout() 22 Stderr = colorable.NewColorableStderr() 23 Default UI = Console{Stdout: Stdout, Stderr: Stderr} 24) 25 26func Print(a ...interface{}) (n int) { 27 n, err := Default.Print(a...) 28 if err != nil { 29 // If something as basic as printing to stdout fails, just panic and exit 30 os.Exit(1) 31 } 32 return 33} 34 35func Printf(format string, a ...interface{}) (n int) { 36 n, err := Default.Printf(format, a...) 37 if err != nil { 38 // If something as basic as printing to stdout fails, just panic and exit 39 os.Exit(1) 40 } 41 return 42} 43 44func Println(a ...interface{}) (n int) { 45 n, err := Default.Println(a...) 46 if err != nil { 47 // If something as basic as printing to stdout fails, just panic and exit 48 os.Exit(1) 49 } 50 return 51} 52 53func Errorf(format string, a ...interface{}) (n int) { 54 n, err := Default.Errorf(format, a...) 55 if err != nil { 56 // If something as basic as printing to stderr fails, just panic and exit 57 os.Exit(1) 58 } 59 return 60} 61 62func Errorln(a ...interface{}) (n int) { 63 n, err := Default.Errorln(a...) 64 if err != nil { 65 // If something as basic as printing to stderr fails, just panic and exit 66 os.Exit(1) 67 } 68 return 69} 70 71func IsTerminal(f *os.File) bool { 72 return isatty.IsTerminal(f.Fd()) 73} 74 75type Console struct { 76 Stdout io.Writer 77 Stderr io.Writer 78} 79 80func (c Console) Print(a ...interface{}) (n int, err error) { 81 return fmt.Fprint(c.Stdout, a...) 82} 83 84func (c Console) Printf(format string, a ...interface{}) (n int, err error) { 85 return fmt.Fprintf(c.Stdout, format, a...) 86} 87 88func (c Console) Println(a ...interface{}) (n int, err error) { 89 return fmt.Fprintln(c.Stdout, a...) 90} 91 92func (c Console) Errorf(format string, a ...interface{}) (n int, err error) { 93 return fmt.Fprintf(c.Stderr, format, a...) 94} 95 96func (c Console) Errorln(a ...interface{}) (n int, err error) { 97 return fmt.Fprintln(c.Stderr, a...) 98} 99