blob: fb5f01b7e3d87df3dd3ad18a669827a367f18e11 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package textutil
import (
"os"
"golang.org/x/term"
)
// TerminalSize returns the dimensions of the terminal, if it's available from
// the OS, otherwise returns an error.
func TerminalSize() (row, col int, _ error) {
// Try getting the terminal size from stdout, stderr and stdin respectively.
// We try each of these in turn because the mechanism we're using fails if any
// of the fds is redirected on the command line. E.g. "tool | less" redirects
// the stdout of tool to the stdin of less, and will mean tool cannot retrieve
// the terminal size from stdout.
if col, row, err := term.GetSize(int(os.Stdout.Fd())); err == nil {
return row, col, err
}
if col, row, err := term.GetSize(int(os.Stderr.Fd())); err == nil {
return row, col, err
}
col, row, err := term.GetSize(int(os.Stdin.Fd()))
return row, col, err
}