utils.go 544 B

123456789101112131415161718192021222324252627
  1. package rcli
  2. import (
  3. "github.com/dotcloud/docker/term"
  4. "os"
  5. "os/signal"
  6. )
  7. //FIXME: move these function to utils.go (in rcli to avoid import loop)
  8. func SetRawTerminal() (*term.State, error) {
  9. oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
  10. if err != nil {
  11. return nil, err
  12. }
  13. c := make(chan os.Signal, 1)
  14. signal.Notify(c, os.Interrupt)
  15. go func() {
  16. _ = <-c
  17. term.Restore(int(os.Stdin.Fd()), oldState)
  18. os.Exit(0)
  19. }()
  20. return oldState, err
  21. }
  22. func RestoreTerminal(state *term.State) {
  23. term.Restore(int(os.Stdin.Fd()), state)
  24. }