mirror of
https://github.com/mum4k/termdash.git
synced 2025-04-25 13:48:50 +08:00
Don't split keyboard shortcuts.
It makes it hard to recognize when a shortcut is pressed and when a single character is pressed. Do what termbox does and identify these separately. Obsoletes #20.
This commit is contained in:
parent
23c4ced3b0
commit
bda6223690
@ -26,6 +26,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Termdash now requires at least Go version 1.10, which allows us to utilize
|
||||
`math.Round` instead of our own implementation and `strings.Builder` instead
|
||||
of `bytes.Buffer`.
|
||||
- Terminal shortcuts like `Ctrl-A` no longer come as two separate events,
|
||||
Termdash now mirrors termbox-go and sends these as one event.
|
||||
|
||||
## [0.8.0] - 30-Mar-2019
|
||||
|
||||
|
@ -55,11 +55,40 @@ var buttonNames = map[Key]string{
|
||||
KeyArrowDown: "KeyArrowDown",
|
||||
KeyArrowLeft: "KeyArrowLeft",
|
||||
KeyArrowRight: "KeyArrowRight",
|
||||
KeyCtrlTilde: "KeyCtrlTilde",
|
||||
KeyCtrlA: "KeyCtrlA",
|
||||
KeyCtrlB: "KeyCtrlB",
|
||||
KeyCtrlC: "KeyCtrlC",
|
||||
KeyCtrlD: "KeyCtrlD",
|
||||
KeyCtrlE: "KeyCtrlE",
|
||||
KeyCtrlF: "KeyCtrlF",
|
||||
KeyCtrlG: "KeyCtrlG",
|
||||
KeyBackspace: "KeyBackspace",
|
||||
KeyTab: "KeyTab",
|
||||
KeyCtrlJ: "KeyCtrlJ",
|
||||
KeyCtrlK: "KeyCtrlK",
|
||||
KeyCtrlL: "KeyCtrlL",
|
||||
KeyEnter: "KeyEnter",
|
||||
KeyCtrlN: "KeyCtrlN",
|
||||
KeyCtrlO: "KeyCtrlO",
|
||||
KeyCtrlP: "KeyCtrlP",
|
||||
KeyCtrlQ: "KeyCtrlQ",
|
||||
KeyCtrlR: "KeyCtrlR",
|
||||
KeyCtrlS: "KeyCtrlS",
|
||||
KeyCtrlT: "KeyCtrlT",
|
||||
KeyCtrlU: "KeyCtrlU",
|
||||
KeyCtrlV: "KeyCtrlV",
|
||||
KeyCtrlW: "KeyCtrlW",
|
||||
KeyCtrlX: "KeyCtrlX",
|
||||
KeyCtrlY: "KeyCtrlY",
|
||||
KeyCtrlZ: "KeyCtrlZ",
|
||||
KeyEsc: "KeyEsc",
|
||||
KeyCtrl: "KeyCtrl",
|
||||
KeyCtrl4: "KeyCtrl4",
|
||||
KeyCtrl5: "KeyCtrl5",
|
||||
KeyCtrl6: "KeyCtrl6",
|
||||
KeyCtrl7: "KeyCtrl7",
|
||||
KeySpace: "KeySpace",
|
||||
KeyBackspace2: "KeyBackspace2",
|
||||
}
|
||||
|
||||
// Printable characters, but worth having constants for them.
|
||||
@ -91,9 +120,53 @@ const (
|
||||
KeyArrowDown
|
||||
KeyArrowLeft
|
||||
KeyArrowRight
|
||||
KeyCtrlTilde
|
||||
KeyCtrlA
|
||||
KeyCtrlB
|
||||
KeyCtrlC
|
||||
KeyCtrlD
|
||||
KeyCtrlE
|
||||
KeyCtrlF
|
||||
KeyCtrlG
|
||||
KeyBackspace
|
||||
KeyTab
|
||||
KeyCtrlJ
|
||||
KeyCtrlK
|
||||
KeyCtrlL
|
||||
KeyEnter
|
||||
KeyCtrlN
|
||||
KeyCtrlO
|
||||
KeyCtrlP
|
||||
KeyCtrlQ
|
||||
KeyCtrlR
|
||||
KeyCtrlS
|
||||
KeyCtrlT
|
||||
KeyCtrlU
|
||||
KeyCtrlV
|
||||
KeyCtrlW
|
||||
KeyCtrlX
|
||||
KeyCtrlY
|
||||
KeyCtrlZ
|
||||
KeyEsc
|
||||
KeyCtrl
|
||||
KeyCtrl4
|
||||
KeyCtrl5
|
||||
KeyCtrl6
|
||||
KeyCtrl7
|
||||
KeyBackspace2
|
||||
)
|
||||
|
||||
// Keys declared as duplicates by termbox.
|
||||
const (
|
||||
KeyCtrl2 Key = KeyCtrlTilde
|
||||
KeyCtrlSpace Key = KeyCtrlTilde
|
||||
KeyCtrlH Key = KeyBackspace
|
||||
KeyCtrlI Key = KeyTab
|
||||
KeyCtrlM Key = KeyEnter
|
||||
KeyCtrlLsqBracket Key = KeyEsc
|
||||
KeyCtrl3 Key = KeyEsc
|
||||
KeyCtrlBackslash Key = KeyCtrl4
|
||||
KeyCtrlRsqBracket Key = KeyCtrl5
|
||||
KeyCtrlSlash Key = KeyCtrl7
|
||||
KeyCtrlUnderscore Key = KeyCtrl7
|
||||
KeyCtrl8 Key = KeyBackspace2
|
||||
)
|
||||
|
@ -25,146 +25,84 @@ import (
|
||||
tbx "github.com/nsf/termbox-go"
|
||||
)
|
||||
|
||||
// newKeyboard creates a new termdash keyboard events with the provided keys.
|
||||
func newKeyboard(keys ...keyboard.Key) []terminalapi.Event {
|
||||
var evs []terminalapi.Event
|
||||
for _, k := range keys {
|
||||
evs = append(evs, &terminalapi.Keyboard{Key: k})
|
||||
}
|
||||
return evs
|
||||
// tbxToTd maps termbox key values to the termdash format.
|
||||
var tbxToTd = map[tbx.Key]keyboard.Key{
|
||||
tbx.KeySpace: keyboard.KeySpace,
|
||||
tbx.KeyF1: keyboard.KeyF1,
|
||||
tbx.KeyF2: keyboard.KeyF2,
|
||||
tbx.KeyF3: keyboard.KeyF3,
|
||||
tbx.KeyF4: keyboard.KeyF4,
|
||||
tbx.KeyF5: keyboard.KeyF5,
|
||||
tbx.KeyF6: keyboard.KeyF6,
|
||||
tbx.KeyF7: keyboard.KeyF7,
|
||||
tbx.KeyF8: keyboard.KeyF8,
|
||||
tbx.KeyF9: keyboard.KeyF9,
|
||||
tbx.KeyF10: keyboard.KeyF10,
|
||||
tbx.KeyF11: keyboard.KeyF11,
|
||||
tbx.KeyF12: keyboard.KeyF12,
|
||||
tbx.KeyInsert: keyboard.KeyInsert,
|
||||
tbx.KeyDelete: keyboard.KeyDelete,
|
||||
tbx.KeyHome: keyboard.KeyHome,
|
||||
tbx.KeyEnd: keyboard.KeyEnd,
|
||||
tbx.KeyPgup: keyboard.KeyPgUp,
|
||||
tbx.KeyPgdn: keyboard.KeyPgDn,
|
||||
tbx.KeyArrowUp: keyboard.KeyArrowUp,
|
||||
tbx.KeyArrowDown: keyboard.KeyArrowDown,
|
||||
tbx.KeyArrowLeft: keyboard.KeyArrowLeft,
|
||||
tbx.KeyArrowRight: keyboard.KeyArrowRight,
|
||||
tbx.KeyCtrlTilde: keyboard.KeyCtrlTilde,
|
||||
tbx.KeyCtrlA: keyboard.KeyCtrlA,
|
||||
tbx.KeyCtrlB: keyboard.KeyCtrlB,
|
||||
tbx.KeyCtrlC: keyboard.KeyCtrlC,
|
||||
tbx.KeyCtrlD: keyboard.KeyCtrlD,
|
||||
tbx.KeyCtrlE: keyboard.KeyCtrlE,
|
||||
tbx.KeyCtrlF: keyboard.KeyCtrlF,
|
||||
tbx.KeyCtrlG: keyboard.KeyCtrlG,
|
||||
tbx.KeyBackspace: keyboard.KeyBackspace,
|
||||
tbx.KeyTab: keyboard.KeyTab,
|
||||
tbx.KeyCtrlJ: keyboard.KeyCtrlJ,
|
||||
tbx.KeyCtrlK: keyboard.KeyCtrlK,
|
||||
tbx.KeyCtrlL: keyboard.KeyCtrlL,
|
||||
tbx.KeyEnter: keyboard.KeyEnter,
|
||||
tbx.KeyCtrlN: keyboard.KeyCtrlN,
|
||||
tbx.KeyCtrlO: keyboard.KeyCtrlO,
|
||||
tbx.KeyCtrlP: keyboard.KeyCtrlP,
|
||||
tbx.KeyCtrlQ: keyboard.KeyCtrlQ,
|
||||
tbx.KeyCtrlR: keyboard.KeyCtrlR,
|
||||
tbx.KeyCtrlS: keyboard.KeyCtrlS,
|
||||
tbx.KeyCtrlT: keyboard.KeyCtrlT,
|
||||
tbx.KeyCtrlU: keyboard.KeyCtrlU,
|
||||
tbx.KeyCtrlV: keyboard.KeyCtrlV,
|
||||
tbx.KeyCtrlW: keyboard.KeyCtrlW,
|
||||
tbx.KeyCtrlX: keyboard.KeyCtrlX,
|
||||
tbx.KeyCtrlY: keyboard.KeyCtrlY,
|
||||
tbx.KeyCtrlZ: keyboard.KeyCtrlZ,
|
||||
tbx.KeyEsc: keyboard.KeyEsc,
|
||||
tbx.KeyCtrl4: keyboard.KeyCtrl4,
|
||||
tbx.KeyCtrl5: keyboard.KeyCtrl5,
|
||||
tbx.KeyCtrl6: keyboard.KeyCtrl6,
|
||||
tbx.KeyCtrl7: keyboard.KeyCtrl7,
|
||||
tbx.KeyBackspace2: keyboard.KeyBackspace2,
|
||||
}
|
||||
|
||||
// convKey converts a termbox keyboard event to the termdash format.
|
||||
func convKey(tbxEv tbx.Event) []terminalapi.Event {
|
||||
func convKey(tbxEv tbx.Event) terminalapi.Event {
|
||||
if tbxEv.Key != 0 && tbxEv.Ch != 0 {
|
||||
return []terminalapi.Event{
|
||||
terminalapi.NewErrorf("the key event contain both a key(%v) and a character(%v)", tbxEv.Key, tbxEv.Ch),
|
||||
}
|
||||
return terminalapi.NewErrorf("the key event contain both a key(%v) and a character(%v)", tbxEv.Key, tbxEv.Ch)
|
||||
}
|
||||
|
||||
if tbxEv.Ch != 0 {
|
||||
return []terminalapi.Event{&terminalapi.Keyboard{
|
||||
return &terminalapi.Keyboard{
|
||||
Key: keyboard.Key(tbxEv.Ch),
|
||||
}}
|
||||
}
|
||||
}
|
||||
|
||||
switch k := tbxEv.Key; k {
|
||||
case tbx.KeySpace:
|
||||
return newKeyboard(keyboard.KeySpace)
|
||||
case tbx.KeyF1:
|
||||
return newKeyboard(keyboard.KeyF1)
|
||||
case tbx.KeyF2:
|
||||
return newKeyboard(keyboard.KeyF2)
|
||||
case tbx.KeyF3:
|
||||
return newKeyboard(keyboard.KeyF3)
|
||||
case tbx.KeyF4:
|
||||
return newKeyboard(keyboard.KeyF4)
|
||||
case tbx.KeyF5:
|
||||
return newKeyboard(keyboard.KeyF5)
|
||||
case tbx.KeyF6:
|
||||
return newKeyboard(keyboard.KeyF6)
|
||||
case tbx.KeyF7:
|
||||
return newKeyboard(keyboard.KeyF7)
|
||||
case tbx.KeyF8:
|
||||
return newKeyboard(keyboard.KeyF8)
|
||||
case tbx.KeyF9:
|
||||
return newKeyboard(keyboard.KeyF9)
|
||||
case tbx.KeyF10:
|
||||
return newKeyboard(keyboard.KeyF10)
|
||||
case tbx.KeyF11:
|
||||
return newKeyboard(keyboard.KeyF11)
|
||||
case tbx.KeyF12:
|
||||
return newKeyboard(keyboard.KeyF12)
|
||||
case tbx.KeyInsert:
|
||||
return newKeyboard(keyboard.KeyInsert)
|
||||
case tbx.KeyDelete:
|
||||
return newKeyboard(keyboard.KeyDelete)
|
||||
case tbx.KeyHome:
|
||||
return newKeyboard(keyboard.KeyHome)
|
||||
case tbx.KeyEnd:
|
||||
return newKeyboard(keyboard.KeyEnd)
|
||||
case tbx.KeyPgup:
|
||||
return newKeyboard(keyboard.KeyPgUp)
|
||||
case tbx.KeyPgdn:
|
||||
return newKeyboard(keyboard.KeyPgDn)
|
||||
case tbx.KeyArrowUp:
|
||||
return newKeyboard(keyboard.KeyArrowUp)
|
||||
case tbx.KeyArrowDown:
|
||||
return newKeyboard(keyboard.KeyArrowDown)
|
||||
case tbx.KeyArrowLeft:
|
||||
return newKeyboard(keyboard.KeyArrowLeft)
|
||||
case tbx.KeyArrowRight:
|
||||
return newKeyboard(keyboard.KeyArrowRight)
|
||||
case tbx.KeyBackspace /*, tbx.KeyCtrlH */ :
|
||||
return newKeyboard(keyboard.KeyBackspace)
|
||||
case tbx.KeyTab /*, tbx.KeyCtrlI */ :
|
||||
return newKeyboard(keyboard.KeyTab)
|
||||
case tbx.KeyEnter /*, tbx.KeyCtrlM*/ :
|
||||
return newKeyboard(keyboard.KeyEnter)
|
||||
case tbx.KeyEsc /*, tbx.KeyCtrlLsqBracket, tbx.KeyCtrl3 */ :
|
||||
return newKeyboard(keyboard.KeyEsc)
|
||||
case tbx.KeyCtrl2 /*, tbx.KeyCtrlTilde, tbx.KeyCtrlSpace */ :
|
||||
return newKeyboard(keyboard.KeyCtrl, '2')
|
||||
case tbx.KeyCtrl4 /*, tbx.KeyCtrlBackslash */ :
|
||||
return newKeyboard(keyboard.KeyCtrl, '4')
|
||||
case tbx.KeyCtrl5 /*, tbx.KeyCtrlRsqBracket */ :
|
||||
return newKeyboard(keyboard.KeyCtrl, '5')
|
||||
case tbx.KeyCtrl6:
|
||||
return newKeyboard(keyboard.KeyCtrl, '6')
|
||||
case tbx.KeyCtrl7 /*, tbx.KeyCtrlSlash, tbx.KeyCtrlUnderscore */ :
|
||||
return newKeyboard(keyboard.KeyCtrl, '7')
|
||||
case tbx.KeyCtrl8:
|
||||
return newKeyboard(keyboard.KeyCtrl, '8')
|
||||
case tbx.KeyCtrlA:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'a')
|
||||
case tbx.KeyCtrlB:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'b')
|
||||
case tbx.KeyCtrlC:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'c')
|
||||
case tbx.KeyCtrlD:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'd')
|
||||
case tbx.KeyCtrlE:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'e')
|
||||
case tbx.KeyCtrlF:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'f')
|
||||
case tbx.KeyCtrlG:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'g')
|
||||
case tbx.KeyCtrlJ:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'j')
|
||||
case tbx.KeyCtrlK:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'k')
|
||||
case tbx.KeyCtrlL:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'l')
|
||||
case tbx.KeyCtrlN:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'n')
|
||||
case tbx.KeyCtrlO:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'o')
|
||||
case tbx.KeyCtrlP:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'p')
|
||||
case tbx.KeyCtrlQ:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'q')
|
||||
case tbx.KeyCtrlR:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'r')
|
||||
case tbx.KeyCtrlS:
|
||||
return newKeyboard(keyboard.KeyCtrl, 's')
|
||||
case tbx.KeyCtrlT:
|
||||
return newKeyboard(keyboard.KeyCtrl, 't')
|
||||
case tbx.KeyCtrlU:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'u')
|
||||
case tbx.KeyCtrlV:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'v')
|
||||
case tbx.KeyCtrlW:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'w')
|
||||
case tbx.KeyCtrlX:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'x')
|
||||
case tbx.KeyCtrlY:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'y')
|
||||
case tbx.KeyCtrlZ:
|
||||
return newKeyboard(keyboard.KeyCtrl, 'z')
|
||||
default:
|
||||
return []terminalapi.Event{
|
||||
terminalapi.NewErrorf("unknown keyboard key %v in a keyboard event", k),
|
||||
}
|
||||
k, ok := tbxToTd[tbxEv.Key]
|
||||
if !ok {
|
||||
return terminalapi.NewErrorf("unknown keyboard key '%v' in a keyboard event", k)
|
||||
}
|
||||
return &terminalapi.Keyboard{
|
||||
Key: k,
|
||||
}
|
||||
}
|
||||
|
||||
@ -230,7 +168,9 @@ func toTermdashEvents(tbxEv tbx.Event) []terminalapi.Event {
|
||||
case tbx.EventMouse:
|
||||
return []terminalapi.Event{convMouse(tbxEv)}
|
||||
case tbx.EventKey:
|
||||
return convKey(tbxEv)
|
||||
return []terminalapi.Event{
|
||||
convKey(tbxEv),
|
||||
}
|
||||
default:
|
||||
return []terminalapi.Event{
|
||||
terminalapi.NewErrorf("unknown termbox event type: %v", t),
|
||||
|
@ -193,86 +193,99 @@ func TestKeyboardKeys(t *testing.T) {
|
||||
tests := []struct {
|
||||
key tbx.Key
|
||||
ch rune
|
||||
want []keyboard.Key
|
||||
want keyboard.Key
|
||||
wantErr bool
|
||||
}{
|
||||
{key: tbx.KeyF1, ch: 'a', wantErr: true},
|
||||
{key: 2000, wantErr: true},
|
||||
{ch: 'a', want: []keyboard.Key{'a'}},
|
||||
{ch: 'A', want: []keyboard.Key{'A'}},
|
||||
{ch: 'z', want: []keyboard.Key{'z'}},
|
||||
{ch: 'Z', want: []keyboard.Key{'Z'}},
|
||||
{ch: '0', want: []keyboard.Key{'0'}},
|
||||
{ch: '9', want: []keyboard.Key{'9'}},
|
||||
{ch: '!', want: []keyboard.Key{'!'}},
|
||||
{ch: ')', want: []keyboard.Key{')'}},
|
||||
{key: tbx.KeySpace, want: []keyboard.Key{keyboard.KeySpace}},
|
||||
{key: tbx.KeyF1, want: []keyboard.Key{keyboard.KeyF1}},
|
||||
{key: tbx.KeyF2, want: []keyboard.Key{keyboard.KeyF2}},
|
||||
{key: tbx.KeyF3, want: []keyboard.Key{keyboard.KeyF3}},
|
||||
{key: tbx.KeyF4, want: []keyboard.Key{keyboard.KeyF4}},
|
||||
{key: tbx.KeyF5, want: []keyboard.Key{keyboard.KeyF5}},
|
||||
{key: tbx.KeyF6, want: []keyboard.Key{keyboard.KeyF6}},
|
||||
{key: tbx.KeyF7, want: []keyboard.Key{keyboard.KeyF7}},
|
||||
{key: tbx.KeyF8, want: []keyboard.Key{keyboard.KeyF8}},
|
||||
{key: tbx.KeyF9, want: []keyboard.Key{keyboard.KeyF9}},
|
||||
{key: tbx.KeyF10, want: []keyboard.Key{keyboard.KeyF10}},
|
||||
{key: tbx.KeyF11, want: []keyboard.Key{keyboard.KeyF11}},
|
||||
{key: tbx.KeyF12, want: []keyboard.Key{keyboard.KeyF12}},
|
||||
{key: tbx.KeyInsert, want: []keyboard.Key{keyboard.KeyInsert}},
|
||||
{key: tbx.KeyDelete, want: []keyboard.Key{keyboard.KeyDelete}},
|
||||
{key: tbx.KeyHome, want: []keyboard.Key{keyboard.KeyHome}},
|
||||
{key: tbx.KeyEnd, want: []keyboard.Key{keyboard.KeyEnd}},
|
||||
{key: tbx.KeyPgup, want: []keyboard.Key{keyboard.KeyPgUp}},
|
||||
{key: tbx.KeyPgdn, want: []keyboard.Key{keyboard.KeyPgDn}},
|
||||
{key: tbx.KeyArrowUp, want: []keyboard.Key{keyboard.KeyArrowUp}},
|
||||
{key: tbx.KeyArrowDown, want: []keyboard.Key{keyboard.KeyArrowDown}},
|
||||
{key: tbx.KeyArrowLeft, want: []keyboard.Key{keyboard.KeyArrowLeft}},
|
||||
{key: tbx.KeyArrowRight, want: []keyboard.Key{keyboard.KeyArrowRight}},
|
||||
{key: tbx.KeyBackspace, want: []keyboard.Key{keyboard.KeyBackspace}},
|
||||
{key: tbx.KeyCtrlH, want: []keyboard.Key{keyboard.KeyBackspace}},
|
||||
{key: tbx.KeyTab, want: []keyboard.Key{keyboard.KeyTab}},
|
||||
{key: tbx.KeyCtrlI, want: []keyboard.Key{keyboard.KeyTab}},
|
||||
{key: tbx.KeyEnter, want: []keyboard.Key{keyboard.KeyEnter}},
|
||||
{key: tbx.KeyCtrlM, want: []keyboard.Key{keyboard.KeyEnter}},
|
||||
{key: tbx.KeyEsc, want: []keyboard.Key{keyboard.KeyEsc}},
|
||||
{key: tbx.KeyCtrlLsqBracket, want: []keyboard.Key{keyboard.KeyEsc}},
|
||||
{key: tbx.KeyCtrl3, want: []keyboard.Key{keyboard.KeyEsc}},
|
||||
{key: tbx.KeyCtrl2, want: []keyboard.Key{keyboard.KeyCtrl, '2'}},
|
||||
{key: tbx.KeyCtrlTilde, want: []keyboard.Key{keyboard.KeyCtrl, '2'}},
|
||||
{key: tbx.KeyCtrlSpace, want: []keyboard.Key{keyboard.KeyCtrl, '2'}},
|
||||
{key: tbx.KeyCtrl4, want: []keyboard.Key{keyboard.KeyCtrl, '4'}},
|
||||
{key: tbx.KeyCtrlBackslash, want: []keyboard.Key{keyboard.KeyCtrl, '4'}},
|
||||
{key: tbx.KeyCtrl5, want: []keyboard.Key{keyboard.KeyCtrl, '5'}},
|
||||
{key: tbx.KeyCtrlRsqBracket, want: []keyboard.Key{keyboard.KeyCtrl, '5'}},
|
||||
{key: tbx.KeyCtrl6, want: []keyboard.Key{keyboard.KeyCtrl, '6'}},
|
||||
{key: tbx.KeyCtrl7, want: []keyboard.Key{keyboard.KeyCtrl, '7'}},
|
||||
{key: tbx.KeyCtrlSlash, want: []keyboard.Key{keyboard.KeyCtrl, '7'}},
|
||||
{key: tbx.KeyCtrlUnderscore, want: []keyboard.Key{keyboard.KeyCtrl, '7'}},
|
||||
{key: tbx.KeyCtrl8, want: []keyboard.Key{keyboard.KeyCtrl, '8'}},
|
||||
{key: tbx.KeyCtrlA, want: []keyboard.Key{keyboard.KeyCtrl, 'a'}},
|
||||
{key: tbx.KeyCtrlB, want: []keyboard.Key{keyboard.KeyCtrl, 'b'}},
|
||||
{key: tbx.KeyCtrlC, want: []keyboard.Key{keyboard.KeyCtrl, 'c'}},
|
||||
{key: tbx.KeyCtrlD, want: []keyboard.Key{keyboard.KeyCtrl, 'd'}},
|
||||
{key: tbx.KeyCtrlE, want: []keyboard.Key{keyboard.KeyCtrl, 'e'}},
|
||||
{key: tbx.KeyCtrlF, want: []keyboard.Key{keyboard.KeyCtrl, 'f'}},
|
||||
{key: tbx.KeyCtrlG, want: []keyboard.Key{keyboard.KeyCtrl, 'g'}},
|
||||
{key: tbx.KeyCtrlJ, want: []keyboard.Key{keyboard.KeyCtrl, 'j'}},
|
||||
{key: tbx.KeyCtrlK, want: []keyboard.Key{keyboard.KeyCtrl, 'k'}},
|
||||
{key: tbx.KeyCtrlL, want: []keyboard.Key{keyboard.KeyCtrl, 'l'}},
|
||||
{key: tbx.KeyCtrlN, want: []keyboard.Key{keyboard.KeyCtrl, 'n'}},
|
||||
{key: tbx.KeyCtrlO, want: []keyboard.Key{keyboard.KeyCtrl, 'o'}},
|
||||
{key: tbx.KeyCtrlP, want: []keyboard.Key{keyboard.KeyCtrl, 'p'}},
|
||||
{key: tbx.KeyCtrlQ, want: []keyboard.Key{keyboard.KeyCtrl, 'q'}},
|
||||
{key: tbx.KeyCtrlR, want: []keyboard.Key{keyboard.KeyCtrl, 'r'}},
|
||||
{key: tbx.KeyCtrlS, want: []keyboard.Key{keyboard.KeyCtrl, 's'}},
|
||||
{key: tbx.KeyCtrlT, want: []keyboard.Key{keyboard.KeyCtrl, 't'}},
|
||||
{key: tbx.KeyCtrlU, want: []keyboard.Key{keyboard.KeyCtrl, 'u'}},
|
||||
{key: tbx.KeyCtrlV, want: []keyboard.Key{keyboard.KeyCtrl, 'v'}},
|
||||
{key: tbx.KeyCtrlW, want: []keyboard.Key{keyboard.KeyCtrl, 'w'}},
|
||||
{key: tbx.KeyCtrlX, want: []keyboard.Key{keyboard.KeyCtrl, 'x'}},
|
||||
{key: tbx.KeyCtrlY, want: []keyboard.Key{keyboard.KeyCtrl, 'y'}},
|
||||
{key: tbx.KeyCtrlZ, want: []keyboard.Key{keyboard.KeyCtrl, 'z'}},
|
||||
{ch: 'a', want: 'a'},
|
||||
{ch: 'A', want: 'A'},
|
||||
{ch: 'z', want: 'z'},
|
||||
{ch: 'Z', want: 'Z'},
|
||||
{ch: '0', want: '0'},
|
||||
{ch: '9', want: '9'},
|
||||
{ch: '!', want: '!'},
|
||||
{ch: ')', want: ')'},
|
||||
{key: tbx.KeySpace, want: keyboard.KeySpace},
|
||||
{key: tbx.KeyF1, want: keyboard.KeyF1},
|
||||
{key: tbx.KeyF2, want: keyboard.KeyF2},
|
||||
{key: tbx.KeyF3, want: keyboard.KeyF3},
|
||||
{key: tbx.KeyF4, want: keyboard.KeyF4},
|
||||
{key: tbx.KeyF5, want: keyboard.KeyF5},
|
||||
{key: tbx.KeyF6, want: keyboard.KeyF6},
|
||||
{key: tbx.KeyF7, want: keyboard.KeyF7},
|
||||
{key: tbx.KeyF8, want: keyboard.KeyF8},
|
||||
{key: tbx.KeyF9, want: keyboard.KeyF9},
|
||||
{key: tbx.KeyF10, want: keyboard.KeyF10},
|
||||
{key: tbx.KeyF11, want: keyboard.KeyF11},
|
||||
{key: tbx.KeyF12, want: keyboard.KeyF12},
|
||||
{key: tbx.KeyInsert, want: keyboard.KeyInsert},
|
||||
{key: tbx.KeyDelete, want: keyboard.KeyDelete},
|
||||
{key: tbx.KeyHome, want: keyboard.KeyHome},
|
||||
{key: tbx.KeyEnd, want: keyboard.KeyEnd},
|
||||
{key: tbx.KeyPgup, want: keyboard.KeyPgUp},
|
||||
{key: tbx.KeyPgdn, want: keyboard.KeyPgDn},
|
||||
{key: tbx.KeyArrowUp, want: keyboard.KeyArrowUp},
|
||||
{key: tbx.KeyArrowDown, want: keyboard.KeyArrowDown},
|
||||
{key: tbx.KeyArrowLeft, want: keyboard.KeyArrowLeft},
|
||||
{key: tbx.KeyArrowRight, want: keyboard.KeyArrowRight},
|
||||
{key: tbx.KeyCtrlTilde, want: keyboard.KeyCtrlTilde},
|
||||
{key: tbx.KeyCtrlTilde, want: keyboard.KeyCtrl2},
|
||||
{key: tbx.KeyCtrlTilde, want: keyboard.KeyCtrlSpace},
|
||||
{key: tbx.KeyCtrl2, want: keyboard.KeyCtrlTilde},
|
||||
{key: tbx.KeyCtrlSpace, want: keyboard.KeyCtrlTilde},
|
||||
{key: tbx.KeyCtrlA, want: keyboard.KeyCtrlA},
|
||||
{key: tbx.KeyCtrlB, want: keyboard.KeyCtrlB},
|
||||
{key: tbx.KeyCtrlC, want: keyboard.KeyCtrlC},
|
||||
{key: tbx.KeyCtrlD, want: keyboard.KeyCtrlD},
|
||||
{key: tbx.KeyCtrlE, want: keyboard.KeyCtrlE},
|
||||
{key: tbx.KeyCtrlF, want: keyboard.KeyCtrlF},
|
||||
{key: tbx.KeyCtrlG, want: keyboard.KeyCtrlG},
|
||||
{key: tbx.KeyBackspace, want: keyboard.KeyBackspace},
|
||||
{key: tbx.KeyBackspace, want: keyboard.KeyCtrlH},
|
||||
{key: tbx.KeyCtrlH, want: keyboard.KeyBackspace},
|
||||
{key: tbx.KeyTab, want: keyboard.KeyTab},
|
||||
{key: tbx.KeyTab, want: keyboard.KeyCtrlI},
|
||||
{key: tbx.KeyCtrlI, want: keyboard.KeyTab},
|
||||
{key: tbx.KeyCtrlJ, want: keyboard.KeyCtrlJ},
|
||||
{key: tbx.KeyCtrlK, want: keyboard.KeyCtrlK},
|
||||
{key: tbx.KeyCtrlL, want: keyboard.KeyCtrlL},
|
||||
{key: tbx.KeyEnter, want: keyboard.KeyEnter},
|
||||
{key: tbx.KeyEnter, want: keyboard.KeyCtrlM},
|
||||
{key: tbx.KeyCtrlM, want: keyboard.KeyEnter},
|
||||
{key: tbx.KeyCtrlN, want: keyboard.KeyCtrlN},
|
||||
{key: tbx.KeyCtrlO, want: keyboard.KeyCtrlO},
|
||||
{key: tbx.KeyCtrlP, want: keyboard.KeyCtrlP},
|
||||
{key: tbx.KeyCtrlQ, want: keyboard.KeyCtrlQ},
|
||||
{key: tbx.KeyCtrlR, want: keyboard.KeyCtrlR},
|
||||
{key: tbx.KeyCtrlS, want: keyboard.KeyCtrlS},
|
||||
{key: tbx.KeyCtrlT, want: keyboard.KeyCtrlT},
|
||||
{key: tbx.KeyCtrlU, want: keyboard.KeyCtrlU},
|
||||
{key: tbx.KeyCtrlV, want: keyboard.KeyCtrlV},
|
||||
{key: tbx.KeyCtrlW, want: keyboard.KeyCtrlW},
|
||||
{key: tbx.KeyCtrlX, want: keyboard.KeyCtrlX},
|
||||
{key: tbx.KeyCtrlY, want: keyboard.KeyCtrlY},
|
||||
{key: tbx.KeyCtrlZ, want: keyboard.KeyCtrlZ},
|
||||
{key: tbx.KeyEsc, want: keyboard.KeyEsc},
|
||||
{key: tbx.KeyEsc, want: keyboard.KeyCtrlLsqBracket},
|
||||
{key: tbx.KeyEsc, want: keyboard.KeyCtrl3},
|
||||
{key: tbx.KeyCtrlLsqBracket, want: keyboard.KeyEsc},
|
||||
{key: tbx.KeyCtrl3, want: keyboard.KeyEsc},
|
||||
{key: tbx.KeyCtrl4, want: keyboard.KeyCtrl4},
|
||||
{key: tbx.KeyCtrl4, want: keyboard.KeyCtrlBackslash},
|
||||
{key: tbx.KeyCtrlBackslash, want: keyboard.KeyCtrl4},
|
||||
{key: tbx.KeyCtrl5, want: keyboard.KeyCtrl5},
|
||||
{key: tbx.KeyCtrl5, want: keyboard.KeyCtrlRsqBracket},
|
||||
{key: tbx.KeyCtrlRsqBracket, want: keyboard.KeyCtrl5},
|
||||
{key: tbx.KeyCtrl6, want: keyboard.KeyCtrl6},
|
||||
{key: tbx.KeyCtrl7, want: keyboard.KeyCtrl7},
|
||||
{key: tbx.KeyCtrl7, want: keyboard.KeyCtrlSlash},
|
||||
{key: tbx.KeyCtrl7, want: keyboard.KeyCtrlUnderscore},
|
||||
{key: tbx.KeyCtrlSlash, want: keyboard.KeyCtrl7},
|
||||
{key: tbx.KeyCtrlUnderscore, want: keyboard.KeyCtrl7},
|
||||
{key: tbx.KeyBackspace2, want: keyboard.KeyBackspace2},
|
||||
{key: tbx.KeyBackspace2, want: keyboard.KeyCtrl8},
|
||||
{key: tbx.KeyCtrl8, want: keyboard.KeyBackspace2},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
@ -284,34 +297,27 @@ func TestKeyboardKeys(t *testing.T) {
|
||||
})
|
||||
|
||||
gotCount := len(evs)
|
||||
var wantCount int
|
||||
if tc.wantErr {
|
||||
wantCount = 1
|
||||
} else {
|
||||
wantCount = len(tc.want)
|
||||
}
|
||||
|
||||
wantCount := 1
|
||||
if gotCount != wantCount {
|
||||
t.Fatalf("toTermdashEvents => got %d events, want %d, events were:\n%v", gotCount, wantCount, pretty.Sprint(evs))
|
||||
}
|
||||
ev := evs[0]
|
||||
|
||||
for i, ev := range evs {
|
||||
if err, ok := ev.(*terminalapi.Error); ok != tc.wantErr {
|
||||
t.Fatalf("toTermdashEvents => unexpected error:%v, wantErr: %v", err, tc.wantErr)
|
||||
}
|
||||
if _, ok := ev.(*terminalapi.Error); ok {
|
||||
return
|
||||
if err, ok := ev.(*terminalapi.Error); ok != tc.wantErr {
|
||||
t.Fatalf("toTermdashEvents => unexpected error:%v, wantErr: %v", err, tc.wantErr)
|
||||
}
|
||||
if _, ok := ev.(*terminalapi.Error); ok {
|
||||
return
|
||||
}
|
||||
|
||||
switch e := ev.(type) {
|
||||
case *terminalapi.Keyboard:
|
||||
if got, want := e.Key, tc.want; got != want {
|
||||
t.Errorf("toTermdashEvents => got key %v, want %v", got, want)
|
||||
}
|
||||
|
||||
switch e := ev.(type) {
|
||||
case *terminalapi.Keyboard:
|
||||
if got, want := e.Key, tc.want[i]; got != want {
|
||||
t.Errorf("toTermdashEvents => got key[%d] %v, want %v", got, i, want)
|
||||
}
|
||||
|
||||
default:
|
||||
t.Fatalf("toTermdashEvents => unexpected event type %T", e)
|
||||
}
|
||||
default:
|
||||
t.Fatalf("toTermdashEvents => unexpected event type %T", e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user