Hacker News new | past | comments | ask | show | jobs | submit login
Keymaster.js: micro-library to add keyboard shortcuts (github.com/madrobby)
119 points by gbaygon on March 17, 2012 | hide | past | favorite | 19 comments



I've been using shortcut.js for keyboard shortcuts. Works great.

http://www.openjs.com/scripts/events/keyboard_shortcuts/


Cool. How would you compare that to keymaster.js?


Roughly, keymaster.js is focused on being small, while shortcut.js has been through a few iterations and is focused on being feature-rich. But they are both fairly small and they have many of the same features.


I have a question about the way keyboard shortcuts are implemented: are the keys mostly chosen for their value or their position?

For example (and please correct me if I'm mistaken), "Copy" is "C" because it's the first letter, and "X" is "Cut" because it looks like scissors. But "V" was chosen because it's next to the two others, despite not hinting at "Paste" at all.

The reason I come up with that question is that I use a French keyboard (AZERTY) which modifies a dozen of key positions, and it makes some shortcuts hard to execute. Sometimes, they're even impossible to execute. For example, the numbers row needs SHIFT to type a number. In QWERTY, to get a "1" you just type "1" but on AZERTY you type "SHIFT+&".

I'm sure other international keyboard layouts have the same issue and wondered how those who implement those shortcuts deal with that.


When you attach 'keypress' event it will give char code which can be easily converted to sign, e.g.:

    document.addEventListener('keypress', function(event) {
      sign = String.fromCharCode(event.charCode);

      if (sign === 'A') {
        console.log('Pressed shift+a');
      }
      else if (sign === 'c' && event.ctrlKey) {
        console.log('Pressed ctrl+c');
      }
    });
I have tested this technique with several layouts (azerty, dvorak, bepo) and it seems to be working fine. For special keys such as enter, esc or backspace you will have to listen for 'keydown' event instead.


it's been a long time but I seem to recall some software actually had localized shortcuts, e.g. find&replace dialog was ctrl+T in the italian version of MS Word, which I think makes sense for the naming "trova" but I'd expect to be different in the original version. But maybe MS Office is special (cfr: localized VBA syntax)

Sadly, checking now on my girlfriends' QWERTZ+Hungarian version of MS Office it seems it's ctrl+F notwithstanding the sheer lack of an F in "Keresés".


Someone should make a JS framework to easily integrate 'Next page' / 'previous page' and map it to a universal keyboard shortcut that isn't used for other things.

It's not as easy as it should be to go from page to page on some sites and would be cool if there was a way to do it via the keyboard!


Control+Shift+. (Control+>) and Control+Shift+, (Control+<) seem like good candidates for next and previous.


You probably don't want to switch browsers for this, but Opera has "next page" built in



I don't think the liks is about the OP says (e.g next page/prev page mapped to arrows, as plenty of sites do).

Noticeably, there is no access key in the prev/next links in diveintoaccessibility :)


We are using it without complaints so far. We just changed one line (#62) so it would work inside inputs and textareas. It's just 150 lines of code, so there's no reason not to read the source before using it!


Could you use this for controls in a javascript game? :-) Thanks. I am starting to make games, and want to use keyboard keys now.


Thanks for posting. The source code is going to help me improve a key-powered project I am working on.


I was actually thinking about how to do keyboard shortcuts today. I'm glad I came across this.


Very cool, H5F for starter. Thanks for posting this.


There are no shortcuts, only Zuul?

I approve of this project name. :D


Just don't pair it up with something called gatekeeper.js


super cool - thanks for posting!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: