diff --git a/cwriter/writer.go b/cwriter/writer.go index ee717df..19fd90e 100644 --- a/cwriter/writer.go +++ b/cwriter/writer.go @@ -23,29 +23,27 @@ out io.Writer buf bytes.Buffer lines int // how much lines to clear before flushing new ones - termSize func() (int, int, error) -} - -func prepareTermSizeFunc(out io.Writer) func() (int, int, error) { - fn := func() (int, int, error) { - return -1, -1, ErrNotTTY - } - if f, ok := out.(*os.File); ok { - fd := int(f.Fd()) - if IsTerminal(fd) { - fn = func() (int, int, error) { - return GetSize(fd) - } - } - } - return fn + fd int + terminal bool + termSize func(int) (int, int, error) } // New returns a new Writer with defaults. func New(out io.Writer) *Writer { w := &Writer{ - out: out, - termSize: prepareTermSizeFunc(out), + out: out, + termSize: func(_ int) (int, int, error) { + return -1, -1, ErrNotTTY + }, + } + if f, ok := out.(*os.File); ok { + w.fd = int(f.Fd()) + if IsTerminal(w.fd) { + w.terminal = true + w.termSize = func(fd int) (int, int, error) { + return GetSize(fd) + } + } } return w } @@ -82,7 +80,7 @@ // GetTermSize returns WxH of underlying terminal. func (w *Writer) GetTermSize() (width, height int, err error) { - return w.termSize() + return w.termSize(w.fd) } func (w *Writer) ansiCuuAndEd() error { diff --git a/cwriter/writer_windows.go b/cwriter/writer_windows.go index 8f99dbe..2c4c370 100644 --- a/cwriter/writer_windows.go +++ b/cwriter/writer_windows.go @@ -16,7 +16,7 @@ ) func (w *Writer) clearLines() error { - if !w.isTerminal { + if !w.terminal { // hope it's cygwin or similar return w.ansiCuuAndEd() }