@@ -10,16 +10,21 @@ import (
1010
1111func init () {
1212 var inMode , outMode uint32
13- if err := windows .GetConsoleMode (windows .Stdin , & inMode ); err == nil {
14- inMode |= windows .ENABLE_VIRTUAL_TERMINAL_INPUT
15- if err := windows .SetConsoleMode (windows .Stdin , inMode ); err != nil {
16- fmt .Fprintf (os .Stderr , "Failed to set console mode: %v" , err )
13+ maj , _ , build := windows .RtlGetNtVersionNumbers ()
14+ if maj < 10 || (maj == 10 && build <= 14393 ) {
15+ // the Windows 10 Anniversary Edition added VT100 support
16+ // enable vterm support in older versions of the Windows terminal
17+ if err := windows .GetConsoleMode (windows .Stdin , & inMode ); err == nil {
18+ inMode |= windows .ENABLE_VIRTUAL_TERMINAL_INPUT
19+ if err := windows .SetConsoleMode (windows .Stdin , inMode ); err != nil {
20+ fmt .Fprintf (os .Stderr , "Failed to set console mode: %v" , err )
21+ }
1722 }
18- }
19- if err : = windows .GetConsoleMode ( windows . Stdout , & outMode ); err == nil {
20- outMode | = windows .ENABLE_VIRTUAL_TERMINAL_PROCESSING
21- if err := windows . SetConsoleMode ( windows . Stdout , outMode ); err != nil {
22- fmt . Fprintf ( os . Stderr , "Failed to set console mode: %v" , err )
23+ if err := windows . GetConsoleMode ( windows . Stdout , & outMode ); err == nil {
24+ outMode | = windows .ENABLE_VIRTUAL_TERMINAL_PROCESSING
25+ if err : = windows .SetConsoleMode ( windows . Stdout , outMode ); err != nil {
26+ fmt . Fprintf ( os . Stderr , "Failed to set console mode: %v" , err )
27+ }
2328 }
2429 }
2530}
0 commit comments