I use this code in my project, but keyboard.GetSingleKey() waiting keystroke. How to make the function not wait for a keypress and return nil (for example, after 1 second)?
package main
import (
"fmt"
"github.com/eiannone/keyboard"
)
func main() {
char, _, err := keyboard.GetSingleKey()
if (err != nil) {
panic(err)
}
fmt.Printf("You pressed: %q\r\n", char)
}
If key was not pressed output "Key was not pressed",but in another case output "You pressed: " and key name
func getKeyTimeout(tm time.Duration) (ch rune, err error) {
if err = keyboard.Open(); err != nil {
return
}
defer keyboard.Close()
var (
chChan = make(chan rune, 1)
errChan = make(chan error, 1)
)
go func(chChan chan<- rune, errChan chan<- error) {
ch, _, err := keyboard.GetSingleKey()
if err != nil {
errChan <- err
return
}
chChan <- ch
}(chChan, errChan)
select {
case <-time.After(tm):
return 0, err
case ch = <-chChan:
case err = <-errChan:
}
return
}
ch, err := tools.GetKey(time.Millisecond * n)
if err != nil {
panic(err)
}
if ch != rune(0) {
fmt.Printf("You pressed: %q\r\n", ch)
} else {
fmt.Printf("Key was not pressed")
}