github.com/xyproto/u-root@v6.0.1-0.20200302025726-5528e0c77a3c+incompatible/cmds/core/elvish/edit/tty/setup_windows.go (about) 1 package tty 2 3 import ( 4 "os" 5 6 "github.com/u-root/u-root/cmds/core/elvish/util" 7 "golang.org/x/sys/windows" 8 ) 9 10 const ( 11 wantedInMode = windows.ENABLE_WINDOW_INPUT | 12 windows.ENABLE_MOUSE_INPUT | windows.ENABLE_PROCESSED_INPUT 13 wantedOutMode = windows.ENABLE_PROCESSED_OUTPUT | 14 windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING 15 ) 16 17 func setup(in, out *os.File) (func() error, error) { 18 hIn := windows.Handle(in.Fd()) 19 hOut := windows.Handle(out.Fd()) 20 21 var oldInMode, oldOutMode uint32 22 err := windows.GetConsoleMode(hIn, &oldInMode) 23 if err != nil { 24 return nil, err 25 } 26 err = windows.GetConsoleMode(hOut, &oldOutMode) 27 if err != nil { 28 return nil, err 29 } 30 31 errSetIn := windows.SetConsoleMode(hIn, wantedInMode) 32 errSetOut := windows.SetConsoleMode(hOut, wantedOutMode) 33 errVT := setupVT(out) 34 35 return func() error { 36 return util.Errors( 37 windows.SetConsoleMode(hIn, oldInMode), 38 windows.SetConsoleMode(hOut, oldOutMode), 39 restoreVT(out)) 40 }, util.Errors(errSetIn, errSetOut, errVT) 41 }