Explorar o código

Merge pull request #21493 from Microsoft/jjh/nativeconsole2

Windows: Native console disableNewlineAutoReturn
David Calavera %!s(int64=9) %!d(string=hai) anos
pai
achega
73f8654759
Modificáronse 1 ficheiros con 9 adicións e 2 borrados
  1. 9 2
      pkg/term/term_windows.go

+ 9 - 2
pkg/term/term_windows.go

@@ -31,6 +31,7 @@ const (
 	// https://msdn.microsoft.com/en-us/library/windows/desktop/ms683167(v=vs.85).aspx
 	// https://msdn.microsoft.com/en-us/library/windows/desktop/ms683167(v=vs.85).aspx
 	enableVirtualTerminalInput      = 0x0200
 	enableVirtualTerminalInput      = 0x0200
 	enableVirtualTerminalProcessing = 0x0004
 	enableVirtualTerminalProcessing = 0x0004
+	disableNewlineAutoReturn        = 0x0008
 )
 )
 
 
 // usingNativeConsole is true if we are using the Windows native console
 // usingNativeConsole is true if we are using the Windows native console
@@ -146,8 +147,14 @@ func probeNativeConsole(state State) error {
 
 
 // enableNativeConsole turns on native console mode
 // enableNativeConsole turns on native console mode
 func enableNativeConsole(state State) error {
 func enableNativeConsole(state State) error {
-	if err := winterm.SetConsoleMode(uintptr(state.outHandle), state.outMode|enableVirtualTerminalProcessing); err != nil {
-		return err
+	// First attempt both enableVirtualTerminalProcessing and disableNewlineAutoReturn
+	if err := winterm.SetConsoleMode(uintptr(state.outHandle),
+		state.outMode|(enableVirtualTerminalProcessing|disableNewlineAutoReturn)); err != nil {
+
+		// That may fail, so fallback to trying just enableVirtualTerminalProcessing
+		if err := winterm.SetConsoleMode(uintptr(state.outHandle), state.outMode|enableVirtualTerminalProcessing); err != nil {
+			return err
+		}
 	}
 	}
 
 
 	if err := winterm.SetConsoleMode(uintptr(state.inHandle), state.inMode|enableVirtualTerminalInput); err != nil {
 	if err := winterm.SetConsoleMode(uintptr(state.inHandle), state.inMode|enableVirtualTerminalInput); err != nil {