コード例 #1
0
ファイル: termios.go プロジェクト: posix4e/capstan
func RawTerm() (*termios.TermSettings, error) {
	tio, err := termios.NewTermSettings(0)
	if err != nil {
		return nil, err
	}
	err = tio.Raw()
	if err != nil {
		return nil, err
	}
	return tio, err
}
コード例 #2
0
ファイル: gotty.go プロジェクト: sanderhahn/gotty
func main() {

	tio, err := termios.NewTermSettings(syscall.Stdin)
	defer tio.Reset()
	if err != nil {
		log.Fatal(err)
	}

	width, height, err := tio.GetSize()
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Console size: %dx%d\n", width, height)

	tio.Raw()
	if err != nil {
		log.Fatal(err)
	}

	// Restore tty on kill/interrupt signals

	c := make(chan os.Signal, 1)
	signal.Notify(c,
		os.Interrupt,
		os.Kill,
		syscall.SIGHUP,
		syscall.SIGINT,
		syscall.SIGTERM,
		syscall.SIGKILL,
		syscall.SIGQUIT)

	go func() {
		sig := <-c
		// fmt.Printf("%v", sig)
		tio.Reset()
		signal.Stop(c)
		syscall.Kill(os.Getpid(), sig.(syscall.Signal))
	}()

	var b []byte = make([]byte, 5)
	for {
		n, err := os.Stdin.Read(b)
		if err != nil {
			log.Fatal(err)
			break
		}
		if bytes.Equal(b[0:n], CTRL_C) || bytes.Equal(b[0:n], CTRL_D) || bytes.Equal(b[0:n], CTRL_Z) {
			break
		}
		if n > 0 {
			fmt.Printf("% x\n\r", b[0:n])
		}
	}
}
コード例 #3
0
ファイル: goat.go プロジェクト: hotei/goat
func main() {
	flag.Parse()

	tio, err := termios.NewTermSettings(0)
	if err != nil {
		log.Fatalf("terminal: %s", err)
	}
	if err := tio.Raw(); err != nil {
		log.Fatalf("rawterm: %s", err)
	}
	defer tio.Reset()

	if *frame {
		frameDemo(tio)
	} else {
		lineDemo()
	}
}