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 | }
|
---|