//go:build windows // Copyright (c) 2026. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package ui import ( "os" "golang.org/x/sys/windows" ) func terminalSize() (int, int) { handle := windows.Handle(os.Stdout.Fd()) var info windows.ConsoleScreenBufferInfo if err := windows.GetConsoleScreenBufferInfo(handle, &info); err != nil { return 80, 24 } width := int(info.Window.Right - info.Window.Left + 1) height := int(info.Window.Bottom - info.Window.Top + 1) if width <= 0 || height <= 0 { return 80, 24 } return width, height } func enableVirtualTerminalProcessing() { handle := windows.Handle(os.Stdout.Fd()) var mode uint32 if err := windows.GetConsoleMode(handle, &mode); err != nil { return } mode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING _ = windows.SetConsoleMode(handle, mode) }