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