1
0
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:
Jakub Sobon 2019-04-20 17:10:59 -04:00
parent 23c4ced3b0
commit bda6223690
No known key found for this signature in database
GPG Key ID: F2451A77FB05D3B7
4 changed files with 252 additions and 231 deletions

View File

@ -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

View File

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

View File

@ -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),

View File

@ -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)
}
})
}