diff --git a/pkg/term/term_windows.go b/pkg/term/term_windows.go index e6d9466a63..abda841cb1 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 }