diff --git a/README.md b/README.md new file mode 100644 index 0000000..cf52036 --- /dev/null +++ b/README.md @@ -0,0 +1,65 @@ +# Go Pty + +
+ +Go-Pty is a package for using pseudo-terminal interfaces in Go. It supports Unix PTYs and Windows through [ConPty](https://learn.microsoft.com/en-us/windows/console/creating-a-pseudoconsole-session). + +## Usage + +```sh +go get github.com/aymanbagabas/go-pty +``` + +Example running `grep` + +```go +package main + +import ( + "io" + "log" + "os" + + "github.com/aymanbagabas/go-pty" +) + +func main() { + pty, err := pty.New() + if err != nil { + log.Fatalf("failed to open pty: %s", err) + } + + defer pty.Close() + c := pty.Command("grep", "--color=auto", "bar") + if err := c.Start(); err != nil { + log.Fatalf("failed to start: %s", err) + } + + go func() { + pty.Write([]byte("foo\n")) + pty.Write([]byte("bar\n")) + pty.Write([]byte("baz\n")) + pty.Write([]byte{4}) // EOT + }() + go io.Copy(os.Stdout, pty) + + if err := c.Wait(); err != nil { + panic(err) + } +} +``` + +Refer to [./examples](./examples) for more examples. + +## Credits + +- [creack/pty](https://github.com/creack/pty/): support for Unix PTYs +- [microsoft/hcsshim](https://github.com/microsoft/hcsshim): Windows ConPty implementation + +## License + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) for details.