diff --git a/term.go b/term_darwin.go similarity index 100% rename from term.go rename to term_darwin.go diff --git a/term_windows.go b/term_windows.go new file mode 100644 index 0000000..e5e2767 --- /dev/null +++ b/term_windows.go @@ -0,0 +1,16 @@ +package main + +import ( + "syscall" + "unsafe" +) + +var kernel32 = syscall.NewLazyDLL("kernel32.dll") +var procGetConsoleMode = kernel32.NewProc("GetConsoleMode") + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd uintptr) bool { + var st uint32 + r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) + return r != 0 && e == 0 +}