madrobby / keymaster

A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
MIT License
6.53k stars 477 forks source link

Feature Request: unbind scope #166

Open caillou opened 7 years ago

caillou commented 7 years ago

Feature Request: Unbind Scope

Motivaiton

I often find myself writing the following code:

['up', 'down', 'esc'].forEach((key) => {
  keymaster.unbind(this.scope, key)
})

While this works, it could potentially lead to memory leaks, if a specific key is forgotten. E.g. if my module would have registered key('space', this.scope, cb).

Proposed Solution

A possibility to remove every event-handler for a given scope would be very helpful. Possible APIs:

keymaster.unbind(null, this.scope)
keymaster.unbindScope(this.scope)

Discussion

If such a feature is desired, I would be willing to send a PR along with tests. This being said, I would love to get your input on this beforehand. Do you consider the use-case good enough to add this functionality to keymaster? And if yes, what would the ideal API for this be?

tbleckert commented 7 years ago

If you are already using scopes, can't you just do: key.deleteScope(this.scope);

According to the docs deleteScope removes all events that are in that scope