From 208178c799442c48e74914c12fe2fae4cf65f224 Mon Sep 17 00:00:00 2001 From: Ahmet Alp Balkan Date: Mon, 23 Mar 2015 18:38:43 +0000 Subject: [PATCH] Disable ANSI emulation in certain windows shells This disables recently added ANSI emulation feature in certain Windows shells (like ConEmu) where ANSI output is emulated by default with builtin functionality in the shell. MSYS (mingw) runs in cmd.exe window and it doesn't support emulation. Cygwin doesn't even pass terminal handles to docker.exe as far as I can tell, stdin/stdout/stderr handles are behaving like non-TTY. Therefore not even including that in the check. Signed-off-by: Ahmet Alp Balkan Docker-DCO-1.1-Signed-off-by: Jessie Frazelle (github: jfrazelle) Docker-DCO-1.1-Signed-off-by: Jessie Frazelle (github: jfrazelle) --- pkg/term/term_windows.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/pkg/term/term_windows.go b/pkg/term/term_windows.go index e6d9466a6..abda841cb 100644 --- a/pkg/term/term_windows.go +++ b/pkg/term/term_windows.go @@ -3,6 +3,7 @@ package term import ( "io" + "os" "github.com/docker/docker/pkg/term/winconsole" ) @@ -114,5 +115,23 @@ func GetFdInfo(in interface{}) (uintptr, bool) { } func StdStreams() (stdIn io.ReadCloser, stdOut, stdErr io.Writer) { - return winconsole.StdStreams() + var shouldEmulateANSI bool + switch { + case os.Getenv("ConEmuANSI") == "ON": + // ConEmu shell, ansi emulated by default and ConEmu does an extensively + // good emulation. + shouldEmulateANSI = false + case os.Getenv("MSYSTEM") != "": + // MSYS (mingw) cannot fully emulate well and still shows escape characters + // mostly because it's still running on cmd.exe window. + shouldEmulateANSI = true + default: + shouldEmulateANSI = true + } + + if shouldEmulateANSI { + return winconsole.StdStreams() + } + + return os.Stdin, os.Stdout, os.Stderr }