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)