9fans.net/go@v0.0.5/draw/keyboard.go (about)

     1  package draw
     2  
     3  import "log"
     4  
     5  const (
     6  	KeyFn = '\uF000'
     7  
     8  	KeyHome      = KeyFn | 0x0D
     9  	KeyUp        = KeyFn | 0x0E
    10  	KeyPageUp    = KeyFn | 0xF
    11  	KeyPrint     = KeyFn | 0x10
    12  	KeyLeft      = KeyFn | 0x11
    13  	KeyRight     = KeyFn | 0x12
    14  	KeyDown      = 0x80
    15  	KeyView      = 0x80
    16  	KeyPageDown  = KeyFn | 0x13
    17  	KeyInsert    = KeyFn | 0x14
    18  	KeyEnd       = KeyFn | 0x18
    19  	KeyAlt       = KeyFn | 0x15
    20  	KeyShift     = KeyFn | 0x16
    21  	KeyCtl       = KeyFn | 0x17
    22  	KeyBackspace = 0x08
    23  	KeyDelete    = 0x7F
    24  	KeyEscape    = 0x1b
    25  	KeyEOF       = 0x04
    26  	KeyCmd       = 0xF100
    27  )
    28  
    29  // Keyboardctl is the source of keyboard events.
    30  type Keyboardctl struct {
    31  	C <-chan rune // Channel on which keyboard characters are delivered.
    32  }
    33  
    34  // InitKeyboard connects to the keyboard and returns a Keyboardctl to listen to it.
    35  func (d *Display) InitKeyboard() *Keyboardctl {
    36  	ch := make(chan rune, 20)
    37  	go kbdproc(d, ch)
    38  	return &Keyboardctl{ch}
    39  }
    40  
    41  func kbdproc(d *Display, ch chan rune) {
    42  	for {
    43  		r, err := d.conn.ReadKbd()
    44  		if err != nil {
    45  			log.Fatal("readkbd: ", err)
    46  		}
    47  		ch <- r
    48  	}
    49  }