termios_windows.go 905 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package term
  2. import "golang.org/x/sys/windows"
  3. func makeRaw(fd uintptr) (*State, error) {
  4. state, err := SaveState(fd)
  5. if err != nil {
  6. return nil, err
  7. }
  8. mode := state.mode
  9. // See
  10. // -- https://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx
  11. // -- https://msdn.microsoft.com/en-us/library/windows/desktop/ms683462(v=vs.85).aspx
  12. // Disable these modes
  13. mode &^= windows.ENABLE_ECHO_INPUT
  14. mode &^= windows.ENABLE_LINE_INPUT
  15. mode &^= windows.ENABLE_MOUSE_INPUT
  16. mode &^= windows.ENABLE_WINDOW_INPUT
  17. mode &^= windows.ENABLE_PROCESSED_INPUT
  18. // Enable these modes
  19. mode |= windows.ENABLE_EXTENDED_FLAGS
  20. mode |= windows.ENABLE_INSERT_MODE
  21. mode |= windows.ENABLE_QUICK_EDIT_MODE
  22. if vtInputSupported {
  23. mode |= windows.ENABLE_VIRTUAL_TERMINAL_INPUT
  24. }
  25. err = windows.SetConsoleMode(windows.Handle(fd), mode)
  26. if err != nil {
  27. return nil, err
  28. }
  29. return state, nil
  30. }