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