30 lines
800 B
Go
30 lines
800 B
Go
/*
|
|
* Copyright 2024 the KubeSphere Authors.
|
|
* Please refer to the LICENSE file in the root directory of the project.
|
|
* https://github.com/kubesphere/kubesphere/blob/master/LICENSE
|
|
*/
|
|
|
|
package term
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/moby/term"
|
|
)
|
|
|
|
// TerminalSize returns the current width and height of the user's terminal. If it isn't a terminal,
|
|
// nil is returned. On error, zero values are returned for width and height.
|
|
// Usually w must be the stdout of the process. Stderr won't work.
|
|
func TerminalSize(w io.Writer) (int, int, error) {
|
|
outFd, isTerminal := term.GetFdInfo(w)
|
|
if !isTerminal {
|
|
return 0, 0, fmt.Errorf("given writer is no terminal")
|
|
}
|
|
winsize, err := term.GetWinsize(outFd)
|
|
if err != nil {
|
|
return 0, 0, err
|
|
}
|
|
return int(winsize.Width), int(winsize.Height), nil
|
|
}
|