5

I don't know how to word this easily but basically the software I am writing has a ton of actions and I want to assign hotkeys to every one of them so power users can work super fast.

First off they are not actions related to the application itself, i.e. Quit, Maximize Window, About, Preferences, etc. But rather actual operations you perform on the data set.

It's not exactly the same but closest example I can give is the Nuke compositor, where each action is represented by a node. So things like Blur, Sharpen, Add, Color Correction, Keylight, etc.

But since the number of nodes are over 500, I don't know how to create easy to remember hotkeys that do not use every modifier key combination.

Is using 2 key combo, i.e. CC for Color Correction the best way?

Are there resources on this subject? Basically maximizing the use of hotkeys to take working speed to the max without having to remember 1000s of key combinations.

enter image description here

  • 5
    With this kind of complex software, you cannot possibly predict which actions and which combinations people will use most, or even at all. For real power users, you should go the extra mile and make all shortcuts user-bindable, like in Emacs. (Of course, you can ship default bindings as well.) – Kilian Foth Dec 29 '13 at 18:45
  • Thanks, actually I know some operations will be more popular and it's easy to identify them for myself and other power users, but just assigning hotkeys to those still forces you to use another alternative to hotkeys. For example the above software uses a TAB menu where you type the name of the node you want to create. Surely using that there is no limit to the number of nodes you can have but it's not fast, especially considering you will be creating 1000s of them every day. I allow assigning or changing hotkeys but no one will bother to come up with sensible hotkeys for all nodes. – Joan Venge Dec 29 '13 at 18:50
  • 4
    Check out ux.SE there you will get some good answers for user discoverable shortcuts. Do add a good menu organization for actions that are common but not used enough to bother learning the shortcut for. – ratchet freak Dec 29 '13 at 19:20
7

I'm not an expert in this area, but I'm fan of hotkey driven productivity and a frequent user of AutoHotkey. I've thought on the subject quite a bit, and on numerous occasions I've run into challenges related to trying to come up with custom hotkeys that don't conflict with existing OS/Application hotkeys.

There must be resources out there on the subject, but honestly I haven't come across any deep research on hotkey thus far, aside from brief mentions with respect to usability. I would echo what some of the commenters are saying with respect to the fact that hotkey assignment often falls under the broad umbrella of UX/Usability, so you might have better luck in another venue.

Regardless, a few thoughts that may help:


1.) Most frequently used commands should have a low key-distance

By 'low key distance' I mean the distance you need to stretch a single hand in order to trigger a hotkey. On the Windows platform a classic example is Ctrl + C (copy) and Ctrl + V (paste). Because V falls within the left hemisphere of the keyboard, a user can use the mouse and the keyboard shortcuts simultaneously to great effect.

If you expect users of your software to be using a mouse at all times, consider everything past the G key on a standard US-QWERTY keyboard to be off-limits for high-frequency hotkeys.

2.) Put hotkeys into logical groups

This goes without saying, use a logical hierarchy when assigning hotkeys.

3.) Develop a generalized strategy if you have a large number of hotkeys

You might be able to get away with a few hotkeys such as cc for color captioning, but I don't think it's advisable. An application with a need for many hotkeys most likely has many distinct operations which share a first letter. Likewise, a same-letter hotkey would require you to have a wait-and-listen interval after every keypress, which is more likely to slow down and annoy a power user than help him. Your strategy will have to depend upon what keys you can sacrifice for hotkey activation, how many combinations you need, and what feels intuitive.

A couple of strategies I've observed that seem to be effective. (Both of them utilize hotkey tree traversal)

a.) Utilize chords - Visual Studio uses multi-key chords for IDE hotkeys. They don't always make a lot of sense, but the ones that do tend to follow a standard two-part convention. ->

One good example of this is the 'refactor' chords:

Chord Root: Ctrl + R

Chord Commands: - Encapsulate Field - Extract Interface - Extract Method - Remove Parameters - Rename - Reorder Parameters

The upside of this is that by forcing the initial keystroke of certain hotkeys to be a 'chord activation' you get significantly more hotkeys from the same effective area of the keyboard... The downside is that it's a bit confusing and with this scheme you may have more key presses overall, since the initial keystroke for many commands may be a chord activation.

b.) Use context-aware hotkey traversal

In addition to the standard application-specific hotkeys, all of the more recent Microsoft Office applications have an interesting means of menu traversal activated by the Alt key.

A couple of images will make it easier to explain:

I open Word 2013, then press Alt, and I see the top level menu tree highlighted Word 2013 Alt

From there, I press I and see the next layer of hotkeys highlighted enter image description here

As you can see, this approach could potentially give you as many hotkeys as you want, provided you are willing to go a few layers down for certain hotkeys, you're willing to force the user to start at a specific root keypress. I would say that this approach is better suited to extremely hierarchical shortcuts, as opposed to the more ad-hoc chord approach.


Regardless of the approach you come up with, there will always be some sort of tradeoff between efficiency, complexity and ease of use. The more complex you make the hotkey system, the more you will want to offset it with visual cues and reference documentation.

Lastly I don't know what you're building, but I would also take a good look at similar applications, to see what they are doing. Users often expect a similar hotkey scheme between applications in the same problem domain. If there is already an application you'd consider the industry standard, consider adopting some of their hotkeys to ease the transition.

Hope this helps!

  • Actually the app uses lazy focus so every part of the app has completely independent hotkeys. If your cursor is over the area where node network is built, then you have all the keys available. It's an area where you do nothing but create new nodes. That's why there is no key to sacrifice. Also the 2 key combo will only exist on this section of the app. I am not sure if that's the best way though. – Joan Venge Dec 29 '13 at 21:39
  • 1
    In that case at least you're in a flexible position to assign conflict free key bindings. I don't think there's necessarily a 'best' for most apps since it's sort of subjective and there may be multiple effective hotkey schemes. Since it's context-centric, however, I'd be asking myself questions like these: From a given context, what are the hotkeys for the main operations? How do I switch to a different context?_ What operations are common to every context? I.E. Save, Undo, etc. I definitely agree that it would be ideal to avoid a complex chord system if possible. – M. Smith Dec 30 '13 at 3:06
1

I don't know if this method applies well to your application, but since you have many commands to assign, you can consider using something like Quick Access from Eclipse.

This way, the user can reach the command fast and easily only with the keyboard.

Example: https://www.youtube.com/watch?feature=player_detailpage&v=y8-PSiwgOl4#t=46

0

Don't Guess

Ask a few power-users what would be most convenient/efficient/memorable for them. Then user-test it and adjust.

(Making hotkeys soft-bindable is fine, but it doesn't answer the initial-configuration question; that is best answered by actual users)

  • Don't rely on your users for the initial configuration, or you'll wind up with something like "press L for find & replace" – DougM Dec 29 '13 at 20:59
  • Thanks, I am also a power user in the domain of the app. I don't mean my preference is above others though. I do know other hardcore users in other apps doing all-hotkey approach as well though theirs is using these complex hotkey combos I was talking about. – Joan Venge Dec 29 '13 at 21:21
  • @DougM: where did you get that impression? And what would be wrong with L for find & replace ("locate" comes to mind) if that is what is most intuitive for your user base? – Marjan Venema Dec 30 '13 at 10:27
  • maybe if the command was actually NAMED locate. in any case, keyboard shortcuts should have some discoverable rationale behind them, which you won't get from blindly listening to users. – DougM Dec 31 '13 at 16:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.