Why don't you post this to Script Central?
From: Robert Englebretson [mailto:[email protected]] Sent: Saturday, December 05, 2009 1:07 PM To: [email protected] Subject: A working alpha of a braille AutoScroll script Dear All, I'm a newbie to Window-Eyes--considering making the switch since both of my braille displays (a HandyTech Braille Wave, and a GWMicro SyncBraille 20) have been 'orphaned' by the company who makes the screen reader I've been using in one form or another for the past two decades. One of the things I will miss from the old screen reader is the AutoAdvance feature, which allows users to automatically read through text using a braille display without having to press the scroll key thousands of times a day. For those of us who use a VoiceSense and SyncBraille, this is a feature built in to VoiceSense, but it doesn't seem to have made its way into Window-Eyes yet. So, I decided to take a day last weekend and write a script to do this. It may be a bit of a kludge, but it works perfectly for what I need it to do--and it was great fun to dig into Window-Eyes scripting and make something useful that works. I'm not really interested in developing it any further, so I thought I'd pass it along to those of you who have more script-writing experience and more time than I do. Hopefully someone on this list will be interested in developing it further,and packaging it up to post on Script-Central. I unfortunately don't have the time. but I'm happy with it, it's worked fine for the last week without crashing or causing any problems, and it does exactly what I need. I'll include the script, below, and then afterwards I'll include a few notes and comments about ways I think it could be improved. I've used comment lines fairly liberally to document how it works and what each block of code does, so it should be pretty transparent. Basically, autoscroll initiates with ctrl-shift-q on the keyboard, and is terminated by the ESC key. Spacebar speeds up the scrolling in tenth-of-a-second increments, and backspace slows it down correspondingly. Note that most people will want to have their end-of-line notification dings turned off in the WE Braille menu; also, if quick messages are enabled, they need to be dismissed with a routing button (this includes the announcements of scroll-time changes spoken by the script, too). This works very "jerkily" in Word (for reasons I'll comment on at the end of this message), but works great in reading web pages, e-mail messages, and in wordpad where I've used it to read a book from Bookshare. Here's the script: (hopefully the mail client won't introduce spurious line-breaks). ' Begin Braille Auto-Scroll Script ' Alpha version written by Robert Englebretson ' Please feel free to modify, improve, and redistribute ' ' Scrolls the braille display at a regular time interval ' Initiated by Control-Shift-q ' Terminated by pressing the escape key ' Defaults to a rate of scrolling once every 2.2 seconds (good for a 40-cell display) ' Spacebar speeds up the scrolling by increments of one-tenth of a second ' Backspace slows down the scrolling by increments of one-tenth of a second ' New scroll-rate is maintained for the rest of the WE session or until script is reloaded ' Other keypresses allowed through as normal (b/c arrows, navigation keys, and browse-mode keys are still useful) ' ' define variables Dim BrailleAutoScrollHotkey Dim OnStopKey Dim ScrollDelay ' ' Setup control-shift-q to start scrolling Set BrailleAutoScrollHotkey = Keyboard.RegisterHotkey("Control-Shift-q", "BrailleAutoScroll") ' ' Sets default scroll delay value in MS (adequate for a 40-cell display) ScrollDelay = 2200 ' ' Define the autoscroll subroutine Sub BrailleAutoScroll() ' Clears the escape-key press from previous session OnStopKey = False ' Connects to the keyboard keypress and key-release events Press = ConnectEvent(Keyboard, "OnKeyDown", "Keypress") Rel = ConnectEvent(Keyboard, "OnKeyUp", "KeyRel") ' Set up the auto-scroll loop Do while OnStopKey = false Sleep ScrollDelay ExecuteBrailleHotkey bhkScrollBrailleRight Loop ' Disconnects all events after loop is terminated with esc Disconnect Press Disconnect Rel Speak "AutoScroll Stopped." End Sub ' ' Set up function for disposition of KeyDown events during scrolling Function KeyPress(VKCode, Modifiers) ' Terminates the autoscroll loop if esc-key is pressed If VKCode = 27 then OnStopKey = true Keypress = KDDiscard Exit function End if ' Increases scroll speed by 0.1 seconds if spacebar is pressed If VKCode = 32 then ScrollDelay = ScrollDelay-100 Keypress = KDDiscard Speak ScrollDelay/1000 & " seconds." Exit function End if ' Decreases scroll speed by 0.1 seconds if backspace key is pressed If VKCode = 8 then ScrollDelay = ScrollDelay+100 Keypress = KDDiscard Speak ScrollDelay/1000 & " seconds." Exit function End if End function ' ' Disposition of corresponding KeyUp events Function KeyRel(VKCode, Modifiers) If VKCode = 27 then KeyRel = KDDiscard Exit function End if If VKCode = 32 then KeyRel = KDDiscard Exit function End if If VKCode = 8 then KeyRel = KDDiscard Exit function End if End function ' ' End Braille Auto-Scroll Script Here are a few comments and suggestions for anyone who might want to work on this further: (1) This doesn't work well in Microsoft Word 2007, at all. But then again I don't find that Window-Eyes braille works well in Word either. The problem is at the ends of lines,there is a significant lag-time between when the advance button is pressed and when the display actually scrolls. I don't know why this is,or if it's unique to my system--I'd appreciate feedback from other users on this. In any case, as a result of the lag in Word when reaching line-endings, the autoscroll script doesn't scroll at a regular interval at those points. It acts a bit like an arrhythmic heartbeat... (2) If I were to develop this script further, it would be nice if the routing buttons on the display would stop the script, *and* route the cursor to the correct cell. (3) The script should be made to stop once the cursor stops moving (i.e. when the end of a file is reached.) Now it just sits and dings until we press escape. (4) It would be nice to be able to define items in the Braille Hotkey menu to do all of the script functions, instead of having to be tied to the keyboard. (5) When the autoscroll is fast (for example with my SyncBraille 20 I set the sleep time to 1.1 seconds), the announcements of time-change are not spoken (e.g. when space or backspace is pressed for the script). I suspect the problem is that these are being interrupted by some sort of program event--and so it works well when scrolling is slower than about 2 seconds, but not when it is faster. I haven't been able to determine what is interrupting speech, or how to force the message to speak regardless. (6) Now this is a real pie-in-the-sky wish--but it would be really nice if there were a way to determine exactly how much text is being sent to the display on each chunk, and for the scrolltime to automatically adjust itself accordingly. What I mean is: this script works great when the whole display is full. 2.2 seconds is exactly the right amount of time (for me) to thoroughly read 40 cells. But if only,say, 10 cells of the display have text on them, then I have to wait almost 1.5 seconds for the display to scroll itself--or I have to hit the advance button manually. It would be nice, for example, if the script could determine that only 10 cells are showing, and thus scroll that particular display-full after only one-fourth the usual time delay. (7) This probably should be set not to work if there's no braille display connected. Well,have fun! I find this quite useful, and I suspect others will too--but I don't have the time or expertise to turn this into something I would feel good about packaging and making publicly available. I'd definitely be interested in receiving any updated/improved versions that any of you come up with though. Best, --Robert Englebretson ****************************************************************** Dr. Robert Englebretson Dept. of Linguistics, MS23 Rice University 6100 Main St. Houston, TX 77005-1892 Phone: 713 348-4776 E-mail: [email protected] http://www.ruf.rice.edu/~reng
