| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- //go:build windows
- // +build windows
- package tea
- import (
- "os"
- "github.com/containerd/console"
- )
- func (p *Program) initInput() error {
- // If input's a file, use console to manage it
- if f, ok := p.input.(*os.File); ok {
- // Save a reference to the current stdin then replace stdin with our
- // input. We do this so we can hand input off to containerd/console to
- // set raw mode, and do it in this fashion because the method
- // console.ConsoleFromFile isn't supported on Windows.
- p.windowsStdin = os.Stdin
- os.Stdin = f
- // Note: this will panic if it fails.
- c := console.Current()
- p.console = c
- }
- return nil
- }
- // restoreInput restores stdout in the event that we placed it aside to handle
- // input with CONIN$, above.
- func (p *Program) restoreInput() error {
- if p.windowsStdin != nil {
- os.Stdin = p.windowsStdin
- }
- return nil
- }
- // Open the Windows equivalent of a TTY.
- func openInputTTY() (*os.File, error) {
- f, err := os.OpenFile("CONIN$", os.O_RDWR, 0644)
- if err != nil {
- return nil, err
- }
- return f, nil
- }
|