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) 138