copy escOpen once
Vladimir Bauer
3 years ago
| 20 | 20 | // contents of writer will be flushed when Flush is called. |
| 21 | 21 | type Writer struct { |
| 22 | 22 | *bytes.Buffer |
| 23 | out io.Writer | |
| 23 | 24 | ew escWriter |
| 24 | out io.Writer | |
| 25 | 25 | lines int // used by writer_windows only |
| 26 | 26 | fd int |
| 27 | 27 | terminal bool |
| 32 | 32 | func New(out io.Writer) *Writer { |
| 33 | 33 | w := &Writer{ |
| 34 | 34 | Buffer: new(bytes.Buffer), |
| 35 | ew: escWriter(make([]byte, 8, 16)), | |
| 36 | 35 | out: out, |
| 37 | 36 | termSize: func(_ int) (int, int, error) { |
| 38 | 37 | return -1, -1, ErrNotTTY |
| 47 | 46 | } |
| 48 | 47 | } |
| 49 | 48 | } |
| 49 | bb := make([]byte, 8, 16) | |
| 50 | w.ew = escWriter(bb[:copy(bb, []byte(escOpen))]) | |
| 50 | 51 | return w |
| 51 | 52 | } |
| 52 | 53 | |
| 58 | 59 | type escWriter []byte |
| 59 | 60 | |
| 60 | 61 | func (b escWriter) ansiCuuAndEd(out io.Writer, n int) error { |
| 61 | b = strconv.AppendInt(b[:copy(b, escOpen)], int64(n), 10) | |
| 62 | b = strconv.AppendInt(b, int64(n), 10) | |
| 62 | 63 | _, err := out.Write(append(b, cuuAndEd...)) |
| 63 | 64 | return err |
| 64 | 65 | } |