key-sequence

1.6.1 • Public • Published

key-sequence

Coverage Status

NPM

A featherweight utility to detect a sequence of key presses or a stream, and call the supplied callback. Fast!

Usage

var keySequence = require('key-sequence'); // CommonJS
<script src="key-sequence.min.js"></script> // Browser
 
// Regex '+'/'*' (denotes repeatable characters)
// The below matches 'omg<enter>'/'omgggg<enter>'/'o   mggggggg<enter>'
var onKey = keySequence(['o', '\s*', 'm', 'g+', '\n'], (evt) => {
    // Do what needs to be done when the key sequence is detected.
    console('OMG it works!', evt);
});
 
// Konami code
var onKey = keySequence([38, 38, 40, 40, 37, 39, 37, 39, 'b', 'a'], () => {
    console.log('Achievement unlocked!!');
});
 
// Use with Observables
sourceKeyStream.subscribe(
  k => onKey(k));
 
// Can pass keycode using e.which using jQuery or events.
$(document).keypress(function(e) {
    onKey(e.which, e /* optional */);
});
 
// or pass the character itself.
onKey('x');
 
 
/* Some more supported keysequences: */
[17, 'c'] //The classic <ctrl> and 'c'
['I', '.*', 'U'] // I <anything in between> U

Features

  • Supports + and * as wildcards to denote repeating characters.
  • Support for keyCodes, so you can use metakeys like <ctrl>, <alt> in the sequence.
  • Support for meta characters like \s, . etc.

Wait, but why ? I'd rather use a regex.

Using a regex is slow and cannot get less elegant, its O(n) in the size of your total input, on every single keystroke.

key-sequence generates a DFA and maintains the state. O(1) every single keystroke. Can think of it as a regex which accepts streaming input.

TODO

  • Support for more Regex metacharacters like | etc.

Theory

Image

This is the DFA for the above example. key-sequence maintains the present state according to the key input. Once the end state(4 in this case) is reached the supplied done callback is called.

If, at any point the input does not match a transition, we go back to the starting state (0).

Package Sidebar

Install

npm i key-sequence

Weekly Downloads

0

Version

1.6.1

License

MIT

Last publish

Collaborators

  • ashubham