38 lines
513 B
Go
38 lines
513 B
Go
package main
|
|
|
|
import "github.com/eiannone/keyboard"
|
|
|
|
type Keyboard struct {
|
|
Events chan byte
|
|
}
|
|
|
|
func NewKeyboard() (*Keyboard, error) {
|
|
err := keyboard.Open()
|
|
return &Keyboard{
|
|
Events: make(chan byte),
|
|
}, err
|
|
}
|
|
|
|
func (k *Keyboard) Listen() {
|
|
defer func() {
|
|
recover()
|
|
}()
|
|
for {
|
|
r, _, err := keyboard.GetKey()
|
|
if err != nil {
|
|
continue
|
|
}
|
|
b := byte(r)
|
|
k.Events <- b
|
|
}
|
|
}
|
|
|
|
func (k *Keyboard) Next() byte {
|
|
return <-k.Events
|
|
}
|
|
|
|
func (k *Keyboard) Close() {
|
|
keyboard.Close()
|
|
close(k.Events)
|
|
}
|