Files
bl/common/utils/log/term/sizes_windows.go

58 lines
1.2 KiB
Go

// Copyright 2013 Apcera Inc. All rights reserved.
// +build windows
package term
// Used when we have no other source for getting platform-specific information
// about the terminal sizes available.
import (
"os"
"syscall"
"unsafe"
)
// Based on source from from golang.org/x/crypto/ssh/terminal/util_windows.go
var (
kernel32 = syscall.NewLazyDLL("kernel32.dll")
procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo")
)
type (
short int16
word uint16
coord struct {
x short
y short
}
smallRect struct {
left short
top short
right short
bottom short
}
consoleScreenBufferInfo struct {
size coord
cursorPosition coord
attributes word
window smallRect
maximumWindowSize coord
}
)
// GetTerminalWindowSize returns the width and height of a terminal in Windows.
func GetTerminalWindowSize(file *os.File) (*Size, error) {
var info consoleScreenBufferInfo
_, _, e := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, file.Fd(), uintptr(unsafe.Pointer(&info)), 0)
if e != 0 {
return nil, error(e)
}
return &Size{
Lines: int(info.size.y),
Columns: int(info.size.x),
}, nil
}