| // +build windows |
| |
| package windowsconsole // import "github.com/docker/docker/pkg/term/windows" |
| |
| import ( |
| "os" |
| |
| "github.com/Azure/go-ansiterm/winterm" |
| ) |
| |
| // GetHandleInfo returns file descriptor and bool indicating whether the file is a console. |
| func GetHandleInfo(in interface{}) (uintptr, bool) { |
| switch t := in.(type) { |
| case *ansiReader: |
| return t.Fd(), true |
| case *ansiWriter: |
| return t.Fd(), true |
| } |
| |
| var inFd uintptr |
| var isTerminal bool |
| |
| if file, ok := in.(*os.File); ok { |
| inFd = file.Fd() |
| isTerminal = IsConsole(inFd) |
| } |
| return inFd, isTerminal |
| } |
| |
| // IsConsole returns true if the given file descriptor is a Windows Console. |
| // The code assumes that GetConsoleMode will return an error for file descriptors that are not a console. |
| func IsConsole(fd uintptr) bool { |
| _, e := winterm.GetConsoleMode(fd) |
| return e == nil |
| } |