package utils import ( "os" ) const STDIN uint = 0 const STDOUT uint = 1 const STDERR uint = 2 const ( NONE = iota BLACK RED GREEN BLUE BROWN // YELLOW CYAN MAGENTA WHITE ) type TTYContext struct { isTTY [3]bool } func (self *TTYContext) Init() { for i, _ := range self.isTTY { self.isTTY[i] = StreamIsTerminal(getStream(uint(i))) } } func (self *TTYContext) IsTTY(fd uint) bool { if fd == STDERR || fd == STDOUT { return self.isTTY[fd] } return false } func (self *TTYContext) Clean() { for i, _ := range self.isTTY { self.isTTY[i] = false } } func (self *TTYContext) Bold(fd uint) string { if self.isTTY[fd] { return "\x1b[1m" } return "" } func (self *TTYContext) BoldOff(fd uint) string { if self.isTTY[fd] { return "\x1b[22m" } return "" } func (self *TTYContext) Underline(fd uint) string { if self.isTTY[fd] { return "\x1b[4m" } return "" } func (self *TTYContext) UnderlineOff(fd uint) string { if self.isTTY[fd] { return "\x1b[24m" } return "" } func (self *TTYContext) Italic(fd uint) string { if self.isTTY[fd] { return "\x1b[3m" } return "" } func (self *TTYContext) ItalicOff(fd uint) string { if self.isTTY[fd] { return "\x1b[23m" } return "" } func (self *TTYContext) BlackFg(fd uint) string { if self.isTTY[fd] { return "\x1b[30m" } return "" } func (self *TTYContext) RedFg(fd uint) string { if self.isTTY[fd] { return "\x1b[31m" } return "" } func (self *TTYContext) GreenFg(fd uint) string { if self.isTTY[fd] { return "\x1b[32m" } return "" } func (self *TTYContext) BrownFg(fd uint) string { if self.isTTY[fd] { return "\x1b[33m" } return "" } func (self *TTYContext) BlueFg(fd uint) string { if self.isTTY[fd] { return "\x1b[34m" } return "" } func (self *TTYContext) MagentaFg(fd uint) string { if self.isTTY[fd] { return "\x1b[35m" } return "" } func (self *TTYContext) CyanFg(fd uint) string { if self.isTTY[fd] { return "\x1b[36m" } return "" } func (self *TTYContext) WhiteFg(fd uint) string { if self.isTTY[fd] { return "\x1b[37m" } return "" } func (self *TTYContext) FgColor(fd uint, n uint) string { var color string switch n { case BLACK: color = self.BlackFg(fd) case WHITE: color = self.WhiteFg(fd) case RED: color = self.RedFg(fd) case GREEN: color = self.GreenFg(fd) case BLUE: color = self.BlueFg(fd) case BROWN: color = self.BrownFg(fd) case CYAN: color = self.CyanFg(fd) case MAGENTA: color = self.MagentaFg(fd) } return color } // func (self *TTYContext) BgColor(fd uint, n int) string { // var color string // switch n { // case BLACK: // color = self.BlackBg(fd) // case WHITE: // color = self.WhiteBg(fd) // case RED: // color = self.RedBg(fd) // case GREEN: // color = self.GreenBg(fd) // case CYAN: // color = self.CyanBg(fd) // case MAGENTA: // color = self.MagentaBg(fd) // } // return color // } func (self *TTYContext) Reset(fd uint) string { if StreamIsTerminal(getStream(fd)) { return "\x1b[0m" } return "" } func getStream(fd uint) *os.File { var s *os.File = nil switch fd { case STDOUT: s = os.Stdout case STDERR: s = os.Stderr } return s }