eiannone / keyboard

Simple library to listen for keystrokes from the keyboard
MIT License
581 stars 57 forks source link

Keyboard

Simple library to listen for keystrokes from the keyboard

The code is inspired by termbox-go library.

Installation

Install and update this go package with go get -u github.com/eiannone/keyboard

Usage

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
        }
    }
}