Skip to content

Commit 385437d

Browse files
authored
Merge pull request zyedidia#3266 from JoeKar/fix/keysequence-comparison
bindings: Correct `KeySequenceEvent` comparison (fix crash)
2 parents 1c35f3d + b05df07 commit 385437d

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed

internal/action/bindings.go

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,24 @@ func findEvent(k string) (Event, error) {
251251
return event, nil
252252
}
253253

254+
func eventsEqual(e1 Event, e2 Event) bool {
255+
seq1, ok1 := e1.(KeySequenceEvent)
256+
seq2, ok2 := e2.(KeySequenceEvent)
257+
if ok1 && ok2 {
258+
if len(seq1.keys) != len(seq2.keys) {
259+
return false
260+
}
261+
for i := 0; i < len(seq1.keys); i++ {
262+
if seq1.keys[i] != seq2.keys[i] {
263+
return false
264+
}
265+
}
266+
return true
267+
}
268+
269+
return e1 == e2
270+
}
271+
254272
// TryBindKey tries to bind a key by writing to config.ConfigDir/bindings.json
255273
// Returns true if the keybinding already existed and a possible error
256274
func TryBindKey(k, v string, overwrite bool) (bool, error) {
@@ -276,21 +294,23 @@ func TryBindKey(k, v string, overwrite bool) (bool, error) {
276294
}
277295

278296
found := false
279-
for ev := range parsed {
297+
var ev string
298+
for ev = range parsed {
280299
if e, err := findEvent(ev); err == nil {
281-
if e == key {
282-
if overwrite {
283-
parsed[ev] = v
284-
}
300+
if eventsEqual(e, key) {
285301
found = true
286302
break
287303
}
288304
}
289305
}
290306

291-
if found && !overwrite {
292-
return true, nil
293-
} else if !found {
307+
if found {
308+
if overwrite {
309+
parsed[ev] = v
310+
} else {
311+
return true, nil
312+
}
313+
} else {
294314
parsed[k] = v
295315
}
296316

@@ -327,7 +347,7 @@ func UnbindKey(k string) error {
327347

328348
for ev := range parsed {
329349
if e, err := findEvent(ev); err == nil {
330-
if e == key {
350+
if eventsEqual(e, key) {
331351
delete(parsed, ev)
332352
break
333353
}

0 commit comments

Comments
 (0)