mirror of
https://github.com/issadarkthing/gomu.git
synced 2025-04-26 13:49:21 +08:00
commit
cda14ffa11
34
anko/anko.go
34
anko/anko.go
@ -155,12 +155,18 @@ func (a *Anko) KeybindExists(panel string, eventKey *tcell.EventKey) bool {
|
||||
name := eventKey.Name()
|
||||
|
||||
if strings.Contains(name, "Ctrl") {
|
||||
key := extractCtrlRune(name)
|
||||
key, ok := extractCtrlRune(name)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
src = fmt.Sprintf("Keybinds.%s[\"ctrl_%s\"]",
|
||||
panel, strings.ToLower(string(key)))
|
||||
|
||||
} else if strings.Contains(name, "Alt") {
|
||||
key := extractAltRune(name)
|
||||
key, ok := extractAltRune(name)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
src = fmt.Sprintf("Keybinds.%s[\"alt_%c\"]", panel, key)
|
||||
|
||||
} else if strings.Contains(name, "Rune") {
|
||||
@ -186,12 +192,18 @@ func (a *Anko) ExecKeybind(panel string, eventKey *tcell.EventKey) error {
|
||||
name := eventKey.Name()
|
||||
|
||||
if strings.Contains(name, "Ctrl") {
|
||||
key := extractCtrlRune(name)
|
||||
key, ok := extractCtrlRune(name)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
src = fmt.Sprintf("Keybinds.%s[\"ctrl_%s\"]()",
|
||||
panel, strings.ToLower(string(key)))
|
||||
|
||||
} else if strings.Contains(name, "Alt") {
|
||||
key := extractAltRune(name)
|
||||
key, ok := extractAltRune(name)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
src = fmt.Sprintf("Keybinds.%s[\"alt_%c\"]()", panel, key)
|
||||
|
||||
} else if strings.Contains(name, "Rune") {
|
||||
@ -210,14 +222,20 @@ func (a *Anko) ExecKeybind(panel string, eventKey *tcell.EventKey) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func extractCtrlRune(str string) rune {
|
||||
func extractCtrlRune(str string) (rune, bool) {
|
||||
re := regexp.MustCompile(`\+(.)$`)
|
||||
x := re.FindStringSubmatch(str)
|
||||
return rune(x[0][1])
|
||||
if len(x) == 0 {
|
||||
return rune(' '), false
|
||||
}
|
||||
return rune(x[0][1]), true
|
||||
}
|
||||
|
||||
func extractAltRune(str string) rune {
|
||||
func extractAltRune(str string) (rune, bool) {
|
||||
re := regexp.MustCompile(`\[(.)\]`)
|
||||
x := re.FindStringSubmatch(str)
|
||||
return rune(x[0][1])
|
||||
if len(x) == 0 {
|
||||
return rune(' '), false
|
||||
}
|
||||
return rune(x[0][1]), true
|
||||
}
|
||||
|
@ -145,18 +145,22 @@ func TestExtractCtrlRune(t *testing.T) {
|
||||
tests := []struct {
|
||||
in string
|
||||
out rune
|
||||
ok bool
|
||||
}{
|
||||
{in: "Ctrl+x", out: 'x'},
|
||||
{in: "Ctrl+]", out: ']'},
|
||||
{in: "Ctrl+%", out: '%'},
|
||||
{in: "Ctrl+^", out: '^'},
|
||||
{in: "Ctrl+7", out: '7'},
|
||||
{in: "Ctrl+B", out: 'B'},
|
||||
{in: "Ctrl+x", out: 'x', ok: true},
|
||||
{in: "Ctrl+]", out: ']', ok: true},
|
||||
{in: "Ctrl+%", out: '%', ok: true},
|
||||
{in: "Ctrl+^", out: '^', ok: true},
|
||||
{in: "Ctrl+7", out: '7', ok: true},
|
||||
{in: "Ctrl+B", out: 'B', ok: true},
|
||||
{in: "Ctrl+Down", out: ' ', ok: false},
|
||||
{in: "Ctrl+Left", out: ' ', ok: false},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
got := extractCtrlRune(test.in)
|
||||
got, ok := extractCtrlRune(test.in)
|
||||
assert.Equal(t, test.out, got)
|
||||
assert.Equal(t, test.ok, ok)
|
||||
}
|
||||
}
|
||||
|
||||
@ -164,18 +168,20 @@ func TestExtractAltRune(t *testing.T) {
|
||||
tests := []struct {
|
||||
in string
|
||||
out rune
|
||||
ok bool
|
||||
}{
|
||||
{in: "Alt+Rune[x]", out: 'x'},
|
||||
{in: "Alt+Rune[]]", out: ']'},
|
||||
{in: "Alt+Rune[%]", out: '%'},
|
||||
{in: "Alt+Rune[^]", out: '^'},
|
||||
{in: "Alt+Rune[7]", out: '7'},
|
||||
{in: "Alt+Rune[B]", out: 'B'},
|
||||
{in: "Alt+Rune[x]", out: 'x', ok: true},
|
||||
{in: "Alt+Rune[]]", out: ']', ok: true},
|
||||
{in: "Alt+Rune[%]", out: '%', ok: true},
|
||||
{in: "Alt+Rune[^]", out: '^', ok: true},
|
||||
{in: "Alt+Rune[7]", out: '7', ok: true},
|
||||
{in: "Alt+Rune[B]", out: 'B', ok: true},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
got := extractAltRune(test.in)
|
||||
got, ok := extractAltRune(test.in)
|
||||
assert.Equal(t, test.out, got)
|
||||
assert.Equal(t, test.ok, ok)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user