1// Copyright 2019 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// Package term provides support functions for dealing with terminals, as
6// commonly found on UNIX systems.
7//
8// Putting a terminal into raw mode is the most common requirement:
9//
10// 	oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
11// 	if err != nil {
12// 	        panic(err)
13// 	}
14// 	defer term.Restore(int(os.Stdin.Fd()), oldState)
15//
16// Note that on non-Unix systems os.Stdin.Fd() may not be 0.
17package term
18
19// State contains the state of a terminal.
20type State struct {
21	state
22}
23
24// IsTerminal returns whether the given file descriptor is a terminal.
25func IsTerminal(fd int) bool {
26	return isTerminal(fd)
27}
28
29// MakeRaw puts the terminal connected to the given file descriptor into raw
30// mode and returns the previous state of the terminal so that it can be
31// restored.
32func MakeRaw(fd int) (*State, error) {
33	return makeRaw(fd)
34}
35
36// GetState returns the current state of a terminal which may be useful to
37// restore the terminal after a signal.
38func GetState(fd int) (*State, error) {
39	return getState(fd)
40}
41
42// Restore restores the terminal connected to the given file descriptor to a
43// previous state.
44func Restore(fd int, oldState *State) error {
45	return restore(fd, oldState)
46}
47
48// GetSize returns the visible dimensions of the given terminal.
49//
50// These dimensions don't include any scrollback buffer height.
51func GetSize(fd int) (width, height int, err error) {
52	return getSize(fd)
53}
54
55// ReadPassword reads a line of input from a terminal without local echo.  This
56// is commonly used for inputting passwords and other sensitive data. The slice
57// returned does not include the \n.
58func ReadPassword(fd int) ([]byte, error) {
59	return readPassword(fd)
60}
61