The system I've done elsewhere, though not so far in Window-Eyes, is sort of like a menu structure, in that Tab and Shift+Tab cycle through options, and Enter executes one.
On Wed, Sep 01, 2010 at 06:28:02PM -0400, Chip Orange wrote: Doug, I mentioned my concerns as well, back in 7.0, that hotkeys would become a concern someday. They added the script menus in 7.1, and I myself, while admiring the elegance of the multi-key layering, prefer the menu control of an application to that of having to remember dozens of different hotkey combinations. If you're going for the "sparkling user experience" as Ron puts it, I suggest considering if each individual function can be controlled with a menu choice rather than a hotkey. Of course you could do the same thing with a custom help dialog, but then that requires the user to master a more complex environment to make a configuration change. Chip -----Original Message----- From: Doug Lee [mailto:[email protected]] Sent: Wednesday, September 01, 2010 2:56 PM To: [email protected] Subject: Re: precedence of set file and script hotkeys I'll take this opportunity, in case I haven't before, to defend a concept I've experimented with, though not in Window-Eyes, for years. I call it MultiKey Command Sequences (MKCS). It's sure not a new idea at all, but it's different than what any Windows-based screen reader I've seen does now (at least without a lot of scripting). The idea is that you let the user pick a keystroke that parents all of your script commands, then you set up a structure under that. I tend to use the left bracket for the in-focus application and the right bracket for out-of-focus ones, though in the Window-Eyes model of running scripts for all running apps at once, this approach is insufficient. The point of the system is to reduce the number of keystroke conflicts that can exist. This idea has also been called "layering." In programming terms, it's like namespace control. Once the user presses the key for your script set, your script must decide what to do with all subsequent keys. This breaks down into deciding what if anything to do in response to the key, and whether to stay at that layer, go to another layer, or exit the whole sequence. As examples, you would want arrows to stay in the current layer but a key that invokes a dialog to exit the sequence. As a rule, when I design a structure of this sort, I make a double press of the first key just pass the key once through to the application. That makes it practical to use simple keys, rather than multiple-key combinations, as the first key. I might, for example, review messages in Skype by pressing a left bracket, then the letter c, and then arrows to read at will, and finally Esc to exit the sequence and return to the application. If I need to type a bracket in a Skype chat, I just tap it twice instead of once. I admit this approach takes much more thinking through, and probably coding, than the normal single-key-combination approach to key assignments. I think, though, that particularly in Window-Eyes, key conflicts are going to become more and more of a problem without something like this. On Wed, Sep 01, 2010 at 02:35:40PM -0400, Ron Parker wrote: The current behavior is that whoever registered the hotkey first gets it. Given that that's not (A) the best possible behavior in this circumstance (for example, it might be nice if application-specific scripts got hotkeys before global scripts) nor (B) necessarily the most optimal way to handle the dispatching (some sort of hashing container might turn out to have better performance characteristics than whatever we're using now) I think it's probably not a great idea to count on that remaining so in the future. Generally speaking, it's best if your script allows its hotkey assignments to be configurable, so that the end user can choose keys that work for them and that don't conflict with other scripts that they use. Keep in mind that that approach has got some accessibility arguments going for it, too: not everyone has the flexibility to hit shift-ctrl-windows-insert-7. Something else you might keep in mind if you're aiming for a truly sparkling user experience from your global script is a feature akin to the one in Progress Indicator that allows the end user to turn off your script when certain windows or applications are active. You'd probably want to unregister your hotkeys in such a situation (or, alternatively, use the keyboard events instead of registered hotkeys. Just be mindful of the caveats inherent in working with those low-level events.) By the way, to answer the obvious next question: registered hotkeys always take precedence over keyboard event listeners (with the same caveats that Aaron mentioned - it's true now, but we reserve the right to change it.) So if you want your global script to always be behind someone else's local script that uses registered hotkeys, roll your own hotkey processing with keyboard events. Just remember that Queue is your friend, and you should use it liberally in any keyboard-event-based scheme. On 9/1/2010 2:16 PM, Chip Orange wrote: Aaron (or anyone), I'm just curious, if you try to define a hotkey which is already defined by another script, will it throw an error? if not, which script will take precedence (the last, the one which is application specific, any rules)? thanks. Chip _________________________________________________________________ From: Aaron Smith [[1]mailto:[email protected]] Sent: Wednesday, September 01, 2010 11:15 AM To: [2][email protected] Subject: Re: precedence of set file and script hotkeys On 9/1/2010 10:12 AM, Cory Samaha wrote: If I want to ship a script package, is it safe to assume that script hotkeys wi ll always take precedence over set file hotkeys, or is it a better idea to ship a set file with the script which will undefined these hotkeys? For Window-Eyes 7.X (and probably 8.0), you're guaranteed that script hot keys will take precedence over set file hot keys. That probably won't change in future versions, but it could if we come up with a good reason. So we don't want to commit to this always being the case forever. But it is the case for now. Aaron -- Aaron Smith Product Support Specialist * Web Development GW Micro, Inc. * 725 Airport North Office Park, Fort Wayne, IN 46825 260-489-3671 * gwmicro.com To insure that you receive proper support, please include all past correspondence (where applicable), and any relevant information pertinent to your situation when submitting a problem report to the GW Micro Technical Support Team. References 1. mailto:[email protected] 2. mailto:[email protected] -- Doug Lee, Senior Accessibility Programmer SSB BART Group - Accessibility-on-Demand mailto:[email protected] http://www.ssbbartgroup.com "While they were saying among themselves it cannot be done, it was done." --Helen Keller -- Doug Lee, Senior Accessibility Programmer SSB BART Group - Accessibility-on-Demand mailto:[email protected] http://www.ssbbartgroup.com "While they were saying among themselves it cannot be done, it was done." --Helen Keller
