DockerCLI/vendor/github.com/creack/pty
Sebastiaan van Stijn f3a05eb800
vendor dependencies with go1.17
Some warnings about go1.16 compatibility, so including them here:

     + go mod tidy -modfile=vendor.mod
     github.com/docker/cli/cli/registry/client imports
           github.com/docker/distribution/registry/api/v2 imports
           github.com/gorilla/mux loaded from github.com/gorilla/mux@v1.7.0,
        but go 1.16 would select v1.8.0
     github.com/docker/cli/cli/compose/loader imports
        gopkg.in/yaml.v2 tested by
        gopkg.in/yaml.v2.test imports
        gopkg.in/check.v1 loaded from gopkg.in/check.v1@v1.0.0-20200227125254-8fa46927fb4f,
        but go 1.16 would select v1.0.0-20201130134442-10cb98267c6c
     github.com/docker/cli/cli/command imports
        github.com/theupdateframework/notary/client tested by
        github.com/theupdateframework/notary/client.test imports
        github.com/theupdateframework/notary/server imports
        github.com/theupdateframework/notary/utils imports
        github.com/Shopify/logrus-bugsnag loaded from github.com/Shopify/logrus-bugsnag@v0.0.0-20170309145241-6dbc35f2c30d,
        but go 1.16 would select v0.0.0-20171204204709-577dee27f20d
     github.com/docker/cli/cli/command imports
        github.com/theupdateframework/notary/client tested by
        github.com/theupdateframework/notary/client.test imports
        github.com/theupdateframework/notary/server/storage imports
        gopkg.in/rethinkdb/rethinkdb-go.v6 imports
        github.com/opentracing/opentracing-go loaded from github.com/opentracing/opentracing-go@v1.1.0,
        but go 1.16 would select v1.2.0
     github.com/docker/cli/cli/command imports
        github.com/theupdateframework/notary/client tested by
        github.com/theupdateframework/notary/client.test imports
        github.com/theupdateframework/notary/server/storage imports
        gopkg.in/rethinkdb/rethinkdb-go.v6 imports
        github.com/opentracing/opentracing-go/ext loaded from github.com/opentracing/opentracing-go@v1.1.0,
        but go 1.16 would select v1.2.0
     github.com/docker/cli/cli/command imports
        github.com/theupdateframework/notary/client tested by
        github.com/theupdateframework/notary/client.test imports
        github.com/theupdateframework/notary/server/storage imports
        gopkg.in/rethinkdb/rethinkdb-go.v6 imports
        github.com/opentracing/opentracing-go/log loaded from github.com/opentracing/opentracing-go@v1.1.0,
        but go 1.16 would select v1.2.0
     github.com/docker/cli/cli/command imports
        github.com/theupdateframework/notary/client tested by
        github.com/theupdateframework/notary/client.test imports
        github.com/theupdateframework/notary/server imports
        github.com/theupdateframework/notary/utils imports
        github.com/spf13/viper imports
        github.com/spf13/afero loaded from github.com/spf13/afero@v1.1.2,
        but go 1.16 would select v1.2.2
     github.com/docker/cli/cli/command imports
        github.com/theupdateframework/notary/client tested by
        github.com/theupdateframework/notary/client.test imports
        github.com/theupdateframework/notary/server imports
        github.com/theupdateframework/notary/utils imports
        github.com/spf13/viper imports
        github.com/spf13/cast loaded from github.com/spf13/cast@v1.3.0,
        but go 1.16 would select v1.3.1
     github.com/docker/cli/cli/command imports
        github.com/theupdateframework/notary/client tested by
        github.com/theupdateframework/notary/client.test imports
        github.com/theupdateframework/notary/server imports
        github.com/theupdateframework/notary/utils imports
        github.com/spf13/viper imports
        github.com/spf13/jwalterweatherman loaded from github.com/spf13/jwalterweatherman@v1.0.0,
        but go 1.16 would select v1.1.0
     github.com/docker/cli/cli/command imports
        github.com/theupdateframework/notary/client tested by
        github.com/theupdateframework/notary/client.test imports
        github.com/theupdateframework/notary/server imports
        github.com/theupdateframework/notary/utils imports
        github.com/spf13/viper imports
        gopkg.in/ini.v1 loaded from gopkg.in/ini.v1@v1.51.0,
        but go 1.16 would select v1.56.0
     github.com/docker/cli/cli/command imports
        github.com/theupdateframework/notary/client tested by
        github.com/theupdateframework/notary/client.test imports
        github.com/theupdateframework/notary/server imports
        github.com/theupdateframework/notary/utils imports
        github.com/spf13/viper imports
        github.com/spf13/afero imports
        github.com/spf13/afero/mem loaded from github.com/spf13/afero@v1.1.2,
        but go 1.16 would select v1.2.2

     To upgrade to the versions selected by go 1.16:
        go mod tidy -go=1.16 && go mod tidy -go=1.17
     If reproducibility with go 1.16 is not needed:
        go mod tidy -compat=1.17
     For other options, see:
        https://golang.org/doc/modules/pruning

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-03-26 19:48:14 +01:00
..
.gitignore vendor with go mod 2021-12-16 21:16:01 +01:00
Dockerfile.riscv vendor with go mod 2021-12-16 21:16:01 +01:00
LICENSE switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
README.md switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
doc.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ioctl.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ioctl_bsd.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ioctl_solaris.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
mktypes.bash vendor with go mod 2021-12-16 21:16:01 +01:00
pty_darwin.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
pty_dragonfly.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
pty_freebsd.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
pty_linux.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
pty_openbsd.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
pty_solaris.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
pty_unsupported.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
run.go vendor: github.com/creack/pty v1.1.11 2020-11-03 13:44:13 +01:00
test_crosscompile.sh vendor with go mod 2021-12-16 21:16:01 +01:00
util.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
util_solaris.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_386.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_amd64.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_arm.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_arm64.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_dragonfly_amd64.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_freebsd_386.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_freebsd_amd64.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_freebsd_arm.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_freebsd_arm64.go vendor: github.com/creack/pty v1.1.11 2020-11-03 13:44:13 +01:00
ztypes_mipsx.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_openbsd_32bit_int.go vendor: github.com/creack/pty v1.1.11 2020-11-03 13:44:13 +01:00
ztypes_ppc64.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_ppc64le.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_riscvx.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
ztypes_s390x.go switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00

README.md

pty

Pty is a Go package for using unix pseudo-terminals.

Install

go get github.com/creack/pty

Example

Command

package main

import (
	"github.com/creack/pty"
	"io"
	"os"
	"os/exec"
)

func main() {
	c := exec.Command("grep", "--color=auto", "bar")
	f, err := pty.Start(c)
	if err != nil {
		panic(err)
	}

	go func() {
		f.Write([]byte("foo\n"))
		f.Write([]byte("bar\n"))
		f.Write([]byte("baz\n"))
		f.Write([]byte{4}) // EOT
	}()
	io.Copy(os.Stdout, f)
}

Shell

package main

import (
        "io"
        "log"
        "os"
        "os/exec"
        "os/signal"
        "syscall"

        "github.com/creack/pty"
        "golang.org/x/crypto/ssh/terminal"
)

func test() error {
        // Create arbitrary command.
        c := exec.Command("bash")

        // Start the command with a pty.
        ptmx, err := pty.Start(c)
        if err != nil {
                return err
        }
        // Make sure to close the pty at the end.
        defer func() { _ = ptmx.Close() }() // Best effort.

        // Handle pty size.
        ch := make(chan os.Signal, 1)
        signal.Notify(ch, syscall.SIGWINCH)
        go func() {
                for range ch {
                        if err := pty.InheritSize(os.Stdin, ptmx); err != nil {
                                log.Printf("error resizing pty: %s", err)
                        }
                }
        }()
        ch <- syscall.SIGWINCH // Initial resize.

        // Set stdin in raw mode.
        oldState, err := terminal.MakeRaw(int(os.Stdin.Fd()))
        if err != nil {
                panic(err)
        }
        defer func() { _ = terminal.Restore(int(os.Stdin.Fd()), oldState) }() // Best effort.

        // Copy stdin to the pty and the pty to stdout.
        go func() { _, _ = io.Copy(ptmx, os.Stdin) }()
        _, _ = io.Copy(os.Stdout, ptmx)

        return nil
}

func main() {
        if err := test(); err != nil {
                log.Fatal(err)
        }
}