Codebase list golang-github-moby-term / 3289119f-004b-4e51-bb36-c853ca165036/upstream/0.0_git20230502.9c3c875 termios_windows.go
3289119f-004b-4e51-bb36-c853ca165036/upstream/0.0_git20230502.9c3c875

Tree @3289119f-004b-4e51-bb36-c853ca165036/upstream/0.0_git20230502.9c3c875 (Download .tar.gz)

termios_windows.go @3289119f-004b-4e51-bb36-c853ca165036/upstream/0.0_git20230502.9c3c875raw · history · blame

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
}