38 lines
905 B
Go
38 lines
905 B
Go
|
package term
|
||
|
|
||
|
import "golang.org/x/sys/windows"
|
||
|
|
||
|
func makeRaw(fd uintptr) (*State, error) {
|
||
|
state, err := SaveState(fd)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
mode := state.mode
|
||
|
|
||
|
// See
|
||
|
// -- https://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx
|
||
|
// -- https://msdn.microsoft.com/en-us/library/windows/desktop/ms683462(v=vs.85).aspx
|
||
|
|
||
|
// Disable these modes
|
||
|
mode &^= windows.ENABLE_ECHO_INPUT
|
||
|
mode &^= windows.ENABLE_LINE_INPUT
|
||
|
mode &^= windows.ENABLE_MOUSE_INPUT
|
||
|
mode &^= windows.ENABLE_WINDOW_INPUT
|
||
|
mode &^= windows.ENABLE_PROCESSED_INPUT
|
||
|
|
||
|
// Enable these modes
|
||
|
mode |= windows.ENABLE_EXTENDED_FLAGS
|
||
|
mode |= windows.ENABLE_INSERT_MODE
|
||
|
mode |= windows.ENABLE_QUICK_EDIT_MODE
|
||
|
if vtInputSupported {
|
||
|
mode |= windows.ENABLE_VIRTUAL_TERMINAL_INPUT
|
||
|
}
|
||
|
|
||
|
err = windows.SetConsoleMode(windows.Handle(fd), mode)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return state, nil
|
||
|
}
|