35 lines
663 B
Go
35 lines
663 B
Go
// +build !windows
|
|
// Copyright 2021-2024 Sebastian Lederer. See the file LICENSE.md for details
|
|
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
"golang.org/x/term"
|
|
)
|
|
|
|
type ConsoleState struct {
|
|
state term.State
|
|
}
|
|
|
|
func SetRawConsole() (*ConsoleState, error) {
|
|
oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
|
|
|
|
return &ConsoleState{*oldState}, err
|
|
}
|
|
|
|
func RestoreConsole(st *ConsoleState) error {
|
|
return term.Restore(int(os.Stdin.Fd()), &st.state)
|
|
}
|
|
|
|
func ConsoleRead(buf []byte) (count int, err error) {
|
|
n, e := os.Stdin.Read(buf)
|
|
return n, e
|
|
}
|
|
|
|
func ConsoleWrite(char byte) (err error) {
|
|
buf := make([] byte, 1)
|
|
buf[0] = char
|
|
_ , e := os.Stdout.Write(buf)
|
|
return e
|
|
}
|