Browse code

Windows: Native console disableNewlineAutoReturn

Signed-off-by: John Howard <jhoward@microsoft.com>

John Howard authored on 2016/03/25 07:37:47
Showing 1 changed files
... ...
@@ -31,6 +31,7 @@ const (
31 31
 	// https://msdn.microsoft.com/en-us/library/windows/desktop/ms683167(v=vs.85).aspx
32 32
 	enableVirtualTerminalInput      = 0x0200
33 33
 	enableVirtualTerminalProcessing = 0x0004
34
+	disableNewlineAutoReturn        = 0x0008
34 35
 )
35 36
 
36 37
 // usingNativeConsole is true if we are using the Windows native console
... ...
@@ -146,8 +147,14 @@ func probeNativeConsole(state State) error {
146 146
 
147 147
 // enableNativeConsole turns on native console mode
148 148
 func enableNativeConsole(state State) error {
149
-	if err := winterm.SetConsoleMode(uintptr(state.outHandle), state.outMode|enableVirtualTerminalProcessing); err != nil {
150
-		return err
149
+	// First attempt both enableVirtualTerminalProcessing and disableNewlineAutoReturn
150
+	if err := winterm.SetConsoleMode(uintptr(state.outHandle),
151
+		state.outMode|(enableVirtualTerminalProcessing|disableNewlineAutoReturn)); err != nil {
152
+
153
+		// That may fail, so fallback to trying just enableVirtualTerminalProcessing
154
+		if err := winterm.SetConsoleMode(uintptr(state.outHandle), state.outMode|enableVirtualTerminalProcessing); err != nil {
155
+			return err
156
+		}
151 157
 	}
152 158
 
153 159
 	if err := winterm.SetConsoleMode(uintptr(state.inHandle), state.inMode|enableVirtualTerminalInput); err != nil {