mirror of
https://github.com/zyedidia/micro.git
synced 2026-03-30 06:37:14 +09:00
Merge pull request #3266 from JoeKar/fix/keysequence-comparison
bindings: Correct `KeySequenceEvent` comparison (fix crash)
This commit is contained in:
@@ -251,6 +251,24 @@ func findEvent(k string) (Event, error) {
|
|||||||
return event, nil
|
return event, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func eventsEqual(e1 Event, e2 Event) bool {
|
||||||
|
seq1, ok1 := e1.(KeySequenceEvent)
|
||||||
|
seq2, ok2 := e2.(KeySequenceEvent)
|
||||||
|
if ok1 && ok2 {
|
||||||
|
if len(seq1.keys) != len(seq2.keys) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for i := 0; i < len(seq1.keys); i++ {
|
||||||
|
if seq1.keys[i] != seq2.keys[i] {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return e1 == e2
|
||||||
|
}
|
||||||
|
|
||||||
// TryBindKey tries to bind a key by writing to config.ConfigDir/bindings.json
|
// TryBindKey tries to bind a key by writing to config.ConfigDir/bindings.json
|
||||||
// Returns true if the keybinding already existed and a possible error
|
// Returns true if the keybinding already existed and a possible error
|
||||||
func TryBindKey(k, v string, overwrite bool) (bool, error) {
|
func TryBindKey(k, v string, overwrite bool) (bool, error) {
|
||||||
@@ -276,21 +294,23 @@ func TryBindKey(k, v string, overwrite bool) (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
found := false
|
found := false
|
||||||
for ev := range parsed {
|
var ev string
|
||||||
|
for ev = range parsed {
|
||||||
if e, err := findEvent(ev); err == nil {
|
if e, err := findEvent(ev); err == nil {
|
||||||
if e == key {
|
if eventsEqual(e, key) {
|
||||||
if overwrite {
|
|
||||||
parsed[ev] = v
|
|
||||||
}
|
|
||||||
found = true
|
found = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if found && !overwrite {
|
if found {
|
||||||
return true, nil
|
if overwrite {
|
||||||
} else if !found {
|
parsed[ev] = v
|
||||||
|
} else {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
} else {
|
||||||
parsed[k] = v
|
parsed[k] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,7 +347,7 @@ func UnbindKey(k string) error {
|
|||||||
|
|
||||||
for ev := range parsed {
|
for ev := range parsed {
|
||||||
if e, err := findEvent(ev); err == nil {
|
if e, err := findEvent(ev); err == nil {
|
||||||
if e == key {
|
if eventsEqual(e, key) {
|
||||||
delete(parsed, ev)
|
delete(parsed, ev)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user