All Projects → avocode → Combokeys

avocode / Combokeys

Licence: other
Web browser keyboard shortcuts. CommonJS, NPM.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Combokeys

Chromium Vim
Vim bindings for Google Chrome.
Stars: ✭ 2,150 (+218.52%)
Mutual labels:  keyboard-shortcuts, keyboard
Shortcutmapper
A visual keyboard shortcuts explorer for popular applications.
Stars: ✭ 657 (-2.67%)
Mutual labels:  keyboard-shortcuts, keyboard
Keymapper
📱 An Android app that maps any keys to actions.
Stars: ✭ 207 (-69.33%)
Mutual labels:  keyboard-shortcuts, keyboard
Aquatouch
Dynamic Custom Macros for your MacBook TouchBar! (Supports 40+ Apps and Websites)
Stars: ✭ 125 (-81.48%)
Mutual labels:  keyboard-shortcuts, keyboard
react-keyevent
An easy-to-use keyboard event react component, Package size less than 3kb
Stars: ✭ 38 (-94.37%)
Mutual labels:  keyboard, keyboard-shortcuts
Mousetrap
Simple library for handling keyboard shortcuts in Javascript
Stars: ✭ 10,937 (+1520.3%)
Mutual labels:  keyboard-shortcuts, keyboard
Hotkeys
➷ A robust Javascript library for capturing keyboard input. It has no dependencies.
Stars: ✭ 5,165 (+665.19%)
Mutual labels:  keyboard-shortcuts, keyboard
Repeat
Cross-platform mouse/keyboard record/replay and automation hotkeys/macros creation, and more advanced automation features.
Stars: ✭ 763 (+13.04%)
Mutual labels:  keyboard-shortcuts, keyboard
use-keyboard-shortcut
A custom hook that allows adding keyboard shortcuts to React applications
Stars: ✭ 41 (-93.93%)
Mutual labels:  keyboard, keyboard-shortcuts
Chordly
Chordly is a javascript library that may be used to detect and act upon key sequences entered by a user.
Stars: ✭ 14 (-97.93%)
Mutual labels:  keyboard, keyboard-shortcuts
Ng Keyboard Shortcuts
Dead Simple Keyboard Shortcuts Management for Angular
Stars: ✭ 121 (-82.07%)
Mutual labels:  keyboard-shortcuts, keyboard
input-remapper
🎮 An easy to use tool to change the mapping of your input device buttons.
Stars: ✭ 1,142 (+69.19%)
Mutual labels:  keyboard, keyboard-shortcuts
Evscript
A tiny sandboxed Dyon scripting environment for evdev input devices that lets you do e.g. xcape in Wayland
Stars: ✭ 91 (-86.52%)
Mutual labels:  keyboard-shortcuts, keyboard
Keyboardjs
A JavaScript library for binding keyboard combos without the pain of key codes and key combo conflicts.
Stars: ✭ 1,881 (+178.67%)
Mutual labels:  keyboard-shortcuts, keyboard
Quickcut
QuickCut is a cross-platform keyboard manager that both facilitates key mapping and allows the configuration of global hotkeys triggering user defined actions.
Stars: ✭ 84 (-87.56%)
Mutual labels:  keyboard-shortcuts, keyboard
Powerkey
Remap your Macbook's power key to Forward Delete
Stars: ✭ 212 (-68.59%)
Mutual labels:  keyboard-shortcuts, keyboard
MyAHKScript
An AutoHotkey script that I use on the daily basis for my PC. Comes with an installer that takes care of everything for you.
Stars: ✭ 22 (-96.74%)
Mutual labels:  keyboard, keyboard-shortcuts
ember-key-manager
A service for (un)binding keyboard up and down events.
Stars: ✭ 39 (-94.22%)
Mutual labels:  keyboard, keyboard-shortcuts
Switch Desktop
⚡️ Keyboard-driven commands to navigate your apps faster
Stars: ✭ 320 (-52.59%)
Mutual labels:  keyboard-shortcuts, keyboard
React Native Keyboard Manager
⚛ Library to prevent issues of keyboard sliding up and cover inputs on React-Native iOS projects.
Stars: ✭ 534 (-20.89%)
Mutual labels:  keyboard

Combokeys Build Status js-standard-style

Combokeys is a JavaScript library for handling keyboard shortcuts in the browser.

It is licensed under the Apache 2.0 license.

It is around 3.3kb minified and gzipped and 9.9kb minified, has no external dependencies, and has been tested in the following browsers:

  • Internet Explorer 6+ (test suite works in IE9+)
  • Safari
  • Firefox
  • Chrome

It has support for keypress, keydown, and keyup events on specific keys, keyboard combinations, or key sequences.

Fork notice

This project was forked from ccampbell/mousetrap.

It was forked because pull–requests were not being reviewed.

This fork's author intends to review pull–requests.

Main changes are

  1. Refactored as CommonJS
  2. Doesn't automatically listen on the document. Instead, it is now a constructor and the element on which to listen must be provided on instantiation. Multiple instances possible.

Getting started

Get it on your page:

var Combokeys;
Combokeys = require("combokeys");

Instantiate it for the entire page:

var combokeys = new Combokeys(document.documentElement);

Or, instantiate it for one or more specific elements:

var firstCombokeys = new Combokeys(document.getElementById("first"));
var secondCombokeys = new Combokeys(document.getElementById("second"));

Add some combos!

// single keys
combokeys.bind('4', function() { console.log('4'); });
firstCombokeys.bind("?", function() { console.log('show shortcuts!'); });
secondCombokeys.bind('esc', function() { console.log('escape'); }, 'keyup');

// combinations
combokeys.bind('command+shift+k', function() { console.log('command shift k'); });

// map multiple combinations to the same callback
combokeys.bind(['command+k', 'ctrl+k'], function() {
    console.log('command k or control k');
    // return false to prevent default browser behavior
    // and stop event from bubbling
    return false;
});

// gmail style sequences
combokeys.bind('g i', function() { console.log('go to inbox'); });
combokeys.bind('* a', function() { console.log('select all'); });

// any character (actual character inserted—triggered by the `keypress` event)
combokeys.bind('any-character', function () { console.log('some visual feedback') });

// konami code!
combokeys.bind('up up down down left right left right b a enter', function() {
    console.log('konami code');
});

When you’re done with it, detach:

combokeys.detach()
// and it will not listen on the element any more

You can also bind the plus and minus keys conveniently:

combokeys.bind(['mod+plus', 'mod+minus'], function(e) {
    e.preventDefault();
    console.log("Override browser zoom!");
});

Why Combokeys?

There are a number of other similar libraries out there so what makes this one different?

  • CommonJS, NPM.
  • You can listen on multiple, specified elements simultaneously.
  • You are not limited to keydown events (You can specify keypress, keydown, or keyup or let Combokeys choose for you).
  • You can bind key events directly to special keys such as ? or * without having to specify shift+/ or shift+8 which are not consistent across all keyboards
  • It works with international keyboard layouts
  • You can bind Gmail like key sequences in addition to regular keys and key combinations
  • You can programatically trigger key events with the trigger() method
  • It works with the numeric keypad on your keyboard
  • The code is well documented/commented

AMD usage

You can also build an AMD-compatible version by running npm run build. This creates a universally compatible dist/combokeys.js which, you can use via RequireJS, or include directly in a <script> tag with the global variable Combokeys.

Documentation

The most complete documentation is currently at Mousetrap, the original project's website. At the time of this writing, the only differences are in how you get it in your page (It is now a CommonJS module which does not define a global for itself) and that you must instantiate it before binding keys.

The public API consists of .bind, .unbind, .trigger, .stopCallback, .detach and .reset.

Plugins

There are some plugins. See their individual readme files.

Bind dictionary

Allows you to make multiple bindings in a single Combokeys.bind call.

Global bind

Allows you to set global bindings that work even inside of input fields.

Pause/unpause

Allows you to temporarily prevent Combokeys events from firing.

Record

Allows you to capture a keyboard shortcut or sequence defined by a user.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].