emacspeak, W3, and Widgets

I'm posting this here so it gets added to the archives.
For those of you using W3 3.0.XX with emacspeak 6.0

Note that W3 uses the widget library for implementing form fields. It
is important that you pay attention to the messages that go by when
you compile W3 and emacspeak in order to get things working correctly.

Here are the possible holes you can fall into if you are careless and
ignore errors when compiling:
*NOTE* Errors are *different* from warnings.

1) When compiling W3

Play close attention to any complaints you get about locating
the custom and widget libraries.
If W3 suggests you help it find the right
custom  libraries by specifying the appropriate directory,
please do so. Ignoring this will cause trouble later.

2)  The W3 specific speech support from Emacspeak is now part of W3
--file w3-speak.el.

3) W3 uses widgets to implement interactive form support.
Emacspeak speech-enables the widget library via module
For emacspeak-widget.el to compile correctly,
it needs to be able to find the widget libraries at the time you
compile emacspeak.

If it fails to do so it displays a message on the screen of the form
"widget library not found, widget support will not work"

You can ignore this message only as long as you are not using any
package that relies on widget support.
This means that if using W3 3.x.xx you *should* not ignore the message

4) Eventually when the widget libraries are stable and part of Emacs
you will be able to stop worrying about this--
but for now you will need to place the widget libraries where it is
visible to the Emacs world by default.

The simplest and cleanest way of doing this is to do the following:

A) Retrieve and install W3
--for the rest of this explanation I will assume you installed W3 in

After successfully compiling W3,
create symlinks to the successfully compiled widget.elc and
wid-edit.elc found in the w3 directory
in the site-lisp directory.
Do this by executing
cd /.../site-lisp
ln -s w3/wid-edit.elc .
ln -s w3/widget.elc .

This will ensure that your emacs world can find the widget libraries.

At this point you should be able to compile emacspeak-widget.el
successfully by
typing make emacspeak-widget.elc
--and this time you should not see the warning
"widget libraries not found ..."
Instead you will see a message of the form
compiling against widget library ..."
where ... will be replaced by the widget library it found.
If you did everything correctly, this will be the symlinks you created
in /.../site-lisp/

After this, w3 and emacspeak should function correctly;
restart your emacs to make sure you have a clean world.

*WARNING* if you fail to do any of these steps, you will see
mysterious behavior of the form:

1) W3 works partially.
2) W3 does not work at all with emacspeak --this is because emacspeak
does some rigorous checking and refuses to run W3
unless everything is set up correctly.

It's important that you move to W3 3.x at the earliest because:

1) W3 3.x implements a lot more than the older W3 2.x.xx including:
a) Frames
B) Tables
C) Aural cascading Style Sheets

and most importantly,
I'll be pulling out support for the old W3 in the next release of Emacspeak.


Best Regards,

      Adobe Systems                 Tel: 1 (408) 536 3945   (W14-129)
      Advanced Technology Group     Fax: 1 (408) 537 4042 
      (W14 129) 345 Park Avenue     Email: raman@adobe.com 
      San Jose , CA 95110 -2704     Email:  raman@cs.cornell.edu
      http://labrador.corp.adobe.com/~raman/raman.html (Adobe  Internal)
      http://www.cs.cornell.edu/Info/People/raman/raman.html  (Cornell)
    Disclaimer: The opinions expressed are my own and in no way should be taken
as representative of my employer, Adobe Systems Inc.