This is xdragon, a facility for using NaturallySpeaking running in a
Windows VM under Linux.

To install xdragon, see the file INSTALL.

Xdragon is a Windows X client intended to run in a VM under
Linux (though it could also work on a completely separate machine,
perhaps with a little modification).  It accepts Windows keystrokes
synthesized by NaturallySpeaking and resynthesizes them as X11
keystrokes.  It does not interact with Microsoft edit controls, so you
get the interface that you get from NaturallySpeaking with a "dumb"
Windows window.

In more detail, xdragon puts up a window called "Linux" (so that you
can select it with "Switch to Linux") on the Windows VM screen.  If
this window is selected when you dictate, NaturallySpeaking will send
keypress and release events to it.  Xdragon will see these and send
them on to X Windows, so the text or commands will be passed on to the
selected X Window.

Additional features:

When the "Linux" window loses focus in the VM, xdragon exposes the VM
window in X.  When the "Linux" window gets focus, xdragon buries the
VM window.  This means that when you say "correct that", the VM window
appears so that you can interact with the correction dialog (but only
by voice, not by typing), and when you're done with the correction
dialog, the X window that you were using reappears.

Xdragon understands a hotkey (currently hardwired in the code to
keypad plus).  When you push this key, xdragon sends the hotkey to
NaturallySpeaking to toggle the microphone.  Thus you get the hotkey
behavior you would expect.

Xdragon monitors all X activity (using the record extension).  When
you use the keyboard or click the mouse in an X window, or switch to a
different X window, xdragon tells NaturallySpeaking (by simulating a
Windows keystroke) to forget the dictation state, so when you start
dictating again you don't get extra spaces or capitalization at the
beginning of your utterance.

Ideas for future enhancements:

Send keys more rapidly.  There is currently a delay caused by waiting
for the key to be seen by the record extension.

Exit cleanly.  In some cases I have found that the X server doesn't
know that the connection to xdragon has been closed.  Then new
invocations cannot grab the hotkey, and you have to restart the VM.

Communicate with NaturallySpeaking directly to reset dictation state
and toggle the microphone, instead of using simulated keystrokes.

Instead of having to say "switch to Linux", when the VM window loses
focus, xdragon should select the "Linux" window.

Send focus to VM on "correct that", so that user can correct with
keyboard.

Allow user to change hotkey.

Click the mouse in X.  This could be done by special commands or by
using NatLink to override "Mouse Click", etc., in the Linux window.

