github.com/jxskiss/gopkg/v2@v2.14.9-0.20240514120614-899f3e7952b4/zlog/internal/terminal/terminal_check_windows.go (about)

     1  //go:build !appengine && !js && windows
     2  
     3  package terminal
     4  
     5  import (
     6  	"io"
     7  	"os"
     8  
     9  	"golang.org/x/sys/windows"
    10  )
    11  
    12  func checkIfTerminal(w io.Writer) bool {
    13  	switch v := w.(type) {
    14  	case *os.File:
    15  		handle := windows.Handle(v.Fd())
    16  		var mode uint32
    17  		if err := windows.GetConsoleMode(handle, &mode); err != nil {
    18  			return false
    19  		}
    20  		mode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING
    21  		if err := windows.SetConsoleMode(handle, mode); err != nil {
    22  			return false
    23  		}
    24  		return true
    25  	}
    26  	return false
    27  }