Files
aptly/vendor/github.com/wsxiaoys/terminal/terminal.go
T
2017-03-22 19:24:06 +03:00

92 lines
1.7 KiB
Go

package terminal
import (
"fmt"
"github.com/wsxiaoys/terminal/color"
"io"
"log"
"os"
)
type TerminalWriter struct {
io.Writer
}
var (
Stdout = &TerminalWriter{os.Stdout}
Stderr = &TerminalWriter{os.Stderr}
)
func (w *TerminalWriter) checkOutput(s string) {
if _, err := io.WriteString(w, s); err != nil {
log.Fatal("Write to %v failed.", w)
}
}
func (w *TerminalWriter) Color(syntax string) *TerminalWriter {
escapeCode := color.Colorize(syntax)
w.checkOutput(escapeCode)
return w
}
func (w *TerminalWriter) Reset() *TerminalWriter {
w.checkOutput(color.ResetCode)
return w
}
func (w *TerminalWriter) Print(a ...interface{}) *TerminalWriter {
fmt.Fprint(w, a...)
return w
}
func (w *TerminalWriter) Nl(a ...interface{}) *TerminalWriter {
length := 1
if len(a) > 0 {
length = a[0].(int)
}
for i := 0; i < length; i++ {
w.checkOutput("\n")
}
return w
}
func (w *TerminalWriter) Colorf(format string, a ...interface{}) *TerminalWriter {
w.checkOutput(color.Sprintf(format, a...))
return w
}
func (w *TerminalWriter) Clear() *TerminalWriter {
w.checkOutput("\033[2J")
return w
}
func (w *TerminalWriter) ClearLine() *TerminalWriter {
w.checkOutput("\033[2K")
return w
}
func (w *TerminalWriter) Move(x, y int) *TerminalWriter {
w.checkOutput(fmt.Sprintf("\033[%d;%dH", x, y))
return w
}
func (w *TerminalWriter) Up(x int) *TerminalWriter {
w.checkOutput(fmt.Sprintf("\033[%dA", x))
return w
}
func (w *TerminalWriter) Down(x int) *TerminalWriter {
w.checkOutput(fmt.Sprintf("\033[%dB", x))
return w
}
func (w *TerminalWriter) Right(x int) *TerminalWriter {
w.checkOutput(fmt.Sprintf("\033[%dC", x))
return w
}
func (w *TerminalWriter) Left(x int) *TerminalWriter {
w.checkOutput(fmt.Sprintf("\033[%dD", x))
return w
}