keybinding.go

  1// Copyright 2014 The gocui Authors. All rights reserved.
  2// Use of this source code is governed by a BSD-style
  3// license that can be found in the LICENSE file.
  4
  5package gocui
  6
  7import "github.com/nsf/termbox-go"
  8
  9// Keybidings are used to link a given key-press event with a handler.
 10type keybinding struct {
 11	viewName string
 12	key      Key
 13	ch       rune
 14	mod      Modifier
 15	handler  func(*Gui, *View) error
 16}
 17
 18// newKeybinding returns a new Keybinding object.
 19func newKeybinding(viewname string, key Key, ch rune, mod Modifier, handler func(*Gui, *View) error) (kb *keybinding) {
 20	kb = &keybinding{
 21		viewName: viewname,
 22		key:      key,
 23		ch:       ch,
 24		mod:      mod,
 25		handler:  handler,
 26	}
 27	return kb
 28}
 29
 30// matchKeypress returns if the keybinding matches the keypress.
 31func (kb *keybinding) matchKeypress(key Key, ch rune, mod Modifier) bool {
 32	return kb.key == key && kb.ch == ch && kb.mod == mod
 33}
 34
 35// matchView returns if the keybinding matches the current view.
 36func (kb *keybinding) matchView(v *View) bool {
 37	if kb.viewName == "" {
 38		return true
 39	}
 40	return v != nil && kb.viewName == v.name
 41}
 42
 43// Key represents special keys or keys combinations.
 44type Key termbox.Key
 45
 46// Special keys.
 47const (
 48	KeyF1         Key = Key(termbox.KeyF1)
 49	KeyF2             = Key(termbox.KeyF2)
 50	KeyF3             = Key(termbox.KeyF3)
 51	KeyF4             = Key(termbox.KeyF4)
 52	KeyF5             = Key(termbox.KeyF5)
 53	KeyF6             = Key(termbox.KeyF6)
 54	KeyF7             = Key(termbox.KeyF7)
 55	KeyF8             = Key(termbox.KeyF8)
 56	KeyF9             = Key(termbox.KeyF9)
 57	KeyF10            = Key(termbox.KeyF10)
 58	KeyF11            = Key(termbox.KeyF11)
 59	KeyF12            = Key(termbox.KeyF12)
 60	KeyInsert         = Key(termbox.KeyInsert)
 61	KeyDelete         = Key(termbox.KeyDelete)
 62	KeyHome           = Key(termbox.KeyHome)
 63	KeyEnd            = Key(termbox.KeyEnd)
 64	KeyPgup           = Key(termbox.KeyPgup)
 65	KeyPgdn           = Key(termbox.KeyPgdn)
 66	KeyArrowUp        = Key(termbox.KeyArrowUp)
 67	KeyArrowDown      = Key(termbox.KeyArrowDown)
 68	KeyArrowLeft      = Key(termbox.KeyArrowLeft)
 69	KeyArrowRight     = Key(termbox.KeyArrowRight)
 70
 71	MouseLeft      = Key(termbox.MouseLeft)
 72	MouseMiddle    = Key(termbox.MouseMiddle)
 73	MouseRight     = Key(termbox.MouseRight)
 74	MouseRelease   = Key(termbox.MouseRelease)
 75	MouseWheelUp   = Key(termbox.MouseWheelUp)
 76	MouseWheelDown = Key(termbox.MouseWheelDown)
 77)
 78
 79// Keys combinations.
 80const (
 81	KeyCtrlTilde      Key = Key(termbox.KeyCtrlTilde)
 82	KeyCtrl2              = Key(termbox.KeyCtrl2)
 83	KeyCtrlSpace          = Key(termbox.KeyCtrlSpace)
 84	KeyCtrlA              = Key(termbox.KeyCtrlA)
 85	KeyCtrlB              = Key(termbox.KeyCtrlB)
 86	KeyCtrlC              = Key(termbox.KeyCtrlC)
 87	KeyCtrlD              = Key(termbox.KeyCtrlD)
 88	KeyCtrlE              = Key(termbox.KeyCtrlE)
 89	KeyCtrlF              = Key(termbox.KeyCtrlF)
 90	KeyCtrlG              = Key(termbox.KeyCtrlG)
 91	KeyBackspace          = Key(termbox.KeyBackspace)
 92	KeyCtrlH              = Key(termbox.KeyCtrlH)
 93	KeyTab                = Key(termbox.KeyTab)
 94	KeyCtrlI              = Key(termbox.KeyCtrlI)
 95	KeyCtrlJ              = Key(termbox.KeyCtrlJ)
 96	KeyCtrlK              = Key(termbox.KeyCtrlK)
 97	KeyCtrlL              = Key(termbox.KeyCtrlL)
 98	KeyEnter              = Key(termbox.KeyEnter)
 99	KeyCtrlM              = Key(termbox.KeyCtrlM)
100	KeyCtrlN              = Key(termbox.KeyCtrlN)
101	KeyCtrlO              = Key(termbox.KeyCtrlO)
102	KeyCtrlP              = Key(termbox.KeyCtrlP)
103	KeyCtrlQ              = Key(termbox.KeyCtrlQ)
104	KeyCtrlR              = Key(termbox.KeyCtrlR)
105	KeyCtrlS              = Key(termbox.KeyCtrlS)
106	KeyCtrlT              = Key(termbox.KeyCtrlT)
107	KeyCtrlU              = Key(termbox.KeyCtrlU)
108	KeyCtrlV              = Key(termbox.KeyCtrlV)
109	KeyCtrlW              = Key(termbox.KeyCtrlW)
110	KeyCtrlX              = Key(termbox.KeyCtrlX)
111	KeyCtrlY              = Key(termbox.KeyCtrlY)
112	KeyCtrlZ              = Key(termbox.KeyCtrlZ)
113	KeyEsc                = Key(termbox.KeyEsc)
114	KeyCtrlLsqBracket     = Key(termbox.KeyCtrlLsqBracket)
115	KeyCtrl3              = Key(termbox.KeyCtrl3)
116	KeyCtrl4              = Key(termbox.KeyCtrl4)
117	KeyCtrlBackslash      = Key(termbox.KeyCtrlBackslash)
118	KeyCtrl5              = Key(termbox.KeyCtrl5)
119	KeyCtrlRsqBracket     = Key(termbox.KeyCtrlRsqBracket)
120	KeyCtrl6              = Key(termbox.KeyCtrl6)
121	KeyCtrl7              = Key(termbox.KeyCtrl7)
122	KeyCtrlSlash          = Key(termbox.KeyCtrlSlash)
123	KeyCtrlUnderscore     = Key(termbox.KeyCtrlUnderscore)
124	KeySpace              = Key(termbox.KeySpace)
125	KeyBackspace2         = Key(termbox.KeyBackspace2)
126	KeyCtrl8              = Key(termbox.KeyCtrl8)
127)
128
129// Modifier allows to define special keys combinations. They can be used
130// in combination with Keys or Runes when a new keybinding is defined.
131type Modifier termbox.Modifier
132
133// Modifiers.
134const (
135	ModNone Modifier = Modifier(0)
136	ModAlt           = Modifier(termbox.ModAlt)
137)