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.
17 package term
18 19 // State contains the state of a terminal.
20 type State struct {
21 state
22 }
23 24 // IsTerminal returns whether the given file descriptor is a terminal.
25 func 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.
32 func 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.
38 func 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.
44 func 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.
51 func 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.
58 func ReadPassword(fd int) ([]byte, error) {
59 return readPassword(fd)
60 }
61