diff --git a/README.md b/README.md index 653b0e4..25fd1fe 100644 --- a/README.md +++ b/README.md @@ -78,4 +78,42 @@ func main() { } } } + +``` +Example of getting continuous keystrokes with `GetAllKeys()` function: +```go +package main + +import ( + "fmt" + "github.com/eiannone/keyboard" +) + +func main() { + if err := keyboard.Open(); err != nil { + panic(err) + } + + defer func() { + _ = keyboard.Close() + }() + + fmt.Println("Press ESC to quit") + + keyEvents := keyboard.GetAllKeys() // return's a channel of "KeyEvent" + + for ev := range keyEvents { + if ev.Err != nil { + panic(err) + } + + fmt.Printf("You pressed: rune %q, key %X\r\n", ev.Rune, ev.Key) + + if key == keyboard.KeyEsc { + break + } + + } + +} ``` \ No newline at end of file diff --git a/keyboard_common.go b/keyboard_common.go index 20bd570..978b02f 100644 --- a/keyboard_common.go +++ b/keyboard_common.go @@ -229,3 +229,26 @@ func GetSingleKey() (ch rune, key Key, err error) { } return } + +func GetAllKeys() <-chan KeyEvent { + keyEventChan := make(chan KeyEvent) + + go func(chan<- KeyEvent) { + for { + ke := KeyEvent{} + + ke.Rune, ke.Key, ke.Err = GetKey() + + if ke.Err != nil { + keyEventChan <- ke + close(keyEventChan) + return + } + + keyEventChan <- ke + + } + }(keyEventChan) + + return keyEventChan +}