Simple library to listen for keystrokes from the keyboard
Go
637
39 commits
updated Jul 3, 2024
Simple library to listen for keystrokes from the keyboard
The code is inspired by termbox-go library.
Install and update this go package with go get -u github.com/eiannone/keyboard
Example of getting a single keystroke:
char, _, err := keyboard.GetSingleKey()
if (err != nil) {
panic(err)
}
fmt.Printf("You pressed: %q\r\n", char)
Example of getting a series of keystrokes with a blocking GetKey() function:
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")
for {
char, key, err := keyboard.GetKey()
if err != nil {
panic(err)
}
fmt.Printf("You pressed: rune %q, key %X\r\n", char, key)
if key == keyboard.KeyEsc {
break
}
}
}
Example of getting a series of keystrokes using a channel:
package main
import (
"fmt"
"github.com/eiannone/keyboard"
)
func main() {
keysEvents, err := keyboard.GetKeys(10)
if err != nil {
panic(err)
}
defer func() {
_ = keyboard.Close()
}()
fmt.Println("Press ESC to quit")
for {
event := <-keysEvents
if event.Err != nil {
panic(event.Err)
}
fmt.Printf("You pressed: rune %q, key %X\r\n", event.Rune, event.Key)
if event.Key == keyboard.KeyEsc {
break
}
}
}
284 followers · starred Feb 2021
16,681 followers · starred Feb 2021
652 followers · starred Aug 2025
80 followers · starred Jun 2026
Simple library to listen for keystrokes from the keyboard
Go
637
39 commits
updated Jul 3, 2024
Simple library to listen for keystrokes from the keyboard
The code is inspired by termbox-go library.
Install and update this go package with go get -u github.com/eiannone/keyboard
Example of getting a single keystroke:
char, _, err := keyboard.GetSingleKey()
if (err != nil) {
panic(err)
}
fmt.Printf("You pressed: %q\r\n", char)
Example of getting a series of keystrokes with a blocking GetKey() function:
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")
for {
char, key, err := keyboard.GetKey()
if err != nil {
panic(err)
}
fmt.Printf("You pressed: rune %q, key %X\r\n", char, key)
if key == keyboard.KeyEsc {
break
}
}
}
Example of getting a series of keystrokes using a channel:
package main
import (
"fmt"
"github.com/eiannone/keyboard"
)
func main() {
keysEvents, err := keyboard.GetKeys(10)
if err != nil {
panic(err)
}
defer func() {
_ = keyboard.Close()
}()
fmt.Println("Press ESC to quit")
for {
event := <-keysEvents
if event.Err != nil {
panic(event.Err)
}
fmt.Printf("You pressed: rune %q, key %X\r\n", event.Rune, event.Key)
if event.Key == keyboard.KeyEsc {
break
}
}
}
284 followers · starred Feb 2021
16,681 followers · starred Feb 2021
652 followers · starred Aug 2025
80 followers · starred Jun 2026