fix windows lines
Vladimir Bauer
3 years ago
| 30 | 30 |
type Writer struct {
|
| 31 | 31 |
*bytes.Buffer
|
| 32 | 32 |
out io.Writer
|
|
33 |
lines int // used by writer_windows only
|
| 33 | 34 |
fd int
|
| 34 | 35 |
terminal bool
|
| 35 | 36 |
termSize func(int) (int, int, error)
|
| 14 | 14 |
procFillConsoleOutputCharacter = kernel32.NewProc("FillConsoleOutputCharacterW")
|
| 15 | 15 |
)
|
| 16 | 16 |
|
| 17 | |
var linesCleaner = makeLinesCleaner()
|
| 18 | |
|
| 19 | |
func makeLinesCleaner() func(*Writer, int) error {
|
| 20 | |
var lastLines int
|
| 21 | |
return func(w *Writer, n int) (err error) {
|
| 22 | |
if lastLines > 0 {
|
| 23 | |
err = w.clearLines(lastLines)
|
| 24 | |
}
|
| 25 | |
lastLines = n
|
| 26 | |
return err
|
| 27 | |
}
|
| 28 | |
}
|
| 29 | |
|
| 30 | 17 |
// Flush flushes the underlying buffer.
|
| 31 | 18 |
func (w *Writer) Flush(lines int) error {
|
| 32 | |
err := linesCleaner(w, lines)
|
| 33 | |
if err == nil {
|
| 34 | |
_, err = w.WriteTo(w.out)
|
|
19 |
if w.lines > 0 {
|
|
20 |
err := w.clearLines(w.lines)
|
|
21 |
if err != nil {
|
|
22 |
return err
|
|
23 |
}
|
| 35 | 24 |
}
|
|
25 |
w.lines = lines
|
|
26 |
_, err := w.WriteTo(w.out)
|
| 36 | 27 |
return err
|
| 37 | 28 |
}
|
| 38 | 29 |
|