David's add-ons to speakup.
To install:
download tthe spk.tgz file into your home directory.
As root cd to /usr/src/linux/drivers/staging
If you don't have a symlink for linux you may have to use linux-version
for the /usr/src/linux directory.
From the staging directory do:
tar zxf ~user/spk.tgz
where user is your non-root user where you put the spk.tgz file.
cd to /usr/src/linux and build the kernel.
I use make bzlilo.
I am not sure what you make if you use grub.

Note:
as new features are added, the key map may have keys added.
this is the file speakupmap.map which genmap processes to make speakupmap.h
If you happen to have your own version of speakupmap.map,
you should cd to /usr/src/linux/drivers/staging/speakup and do:
.genmap -i
The -i option builds the speakupmap.h.
You may also specify a different file as in:
./genmap -i my_own_map
if you want to test a keymap you can do
./genmap |/sys/accessibility/speakup/keymap
With optional filename if you want.

new features:
Multiple cut/paste buffers, 3 global and one per-screen local.
Currently the local is above the num-pad 7 one global is above 8
and a second one is num-pad minus. I didn't know where to put global #3.
Also you can hear the cut buffer contents by pressing speakup-shift
then the key of the buffer you want to hear.
Also you get per-screen speech parameters which I call multi.
speakup-shift F10 is toggle multi-single which turns the last variable
you set to multi (per-screen) or single (same on all screens)
I like this so I can have a programing window (all puncs) and an
email windows set to read-some. I also have a fast window for reading
documentation set to 480 wpm instead of the 465 I program at.
Also a smart cursor mode which checks if the cursor moves the one
character or line. If it doesn't it attempts to read hopefully
in a smarter manner.
A smart window is available which is read when the header text
appears in the position on the screen you selected.
You use this just like setting a window but with shift speakup f2.
Move the cursor to the start of the unique header and press spk_shift_f2
It will say start at line/column
Move the cursor to the end of the unique header and press spk_shift_f2
It will say end at line/column
I use this for alsamixer so I don't have to toggle window on/off.
If the alsamixer header appears on screen, the window on line 5 is read.
The cursor modes are directly selectable by speakup-shift and top-row
numbers 1-5.
I added a say indent mode as where I work they want programs
properly formatted. toggle on/off is speakup-numpad 4.
double say-line will read the indent if it is off and you need to
check the current line's indentation.
read all has two modes, sentence or line.
sentence reads across line breaks and line adds a speech delimiter at the
end of each line. The shift, control and alt keys pause read all and pressing
one of them again starts reading from just before it was paused.
Read all by sentence is currently speakup r and by line is speakup shift r.
Also, read all will stop after three attempts to scroll the screen so it
doesn't read the same line forever.
rewrote highlight track mode to be better for things like alsamixer and lynx.
re-work synth handlers so there may be problems. Hopefully not.
Give me what for if I broke one of them.
This is for moving to using system device drivers so nonstandard
devices like usb synths can be used.

new for Sept 14 2016
shift spk f1 for setting variables, even those unassigned ones.
cursor up/down moves up/down the list and left/right adjust the variable.
spk space, attempt to route the system cursor to the current read position.
will read the word if successful or will say route failed.
new features as of Oct 1 2016
goto is back but with only absolute line/column numbers.
is mapped to speakup control 0 (the zero on the top row of the keyboard)
14x20y is legal
14x+4y is not. I.E. no plus or minus.
on screen find is here:
speakup cursor down is find down. finds the next occurrence of the find buffer.
speakup cursor up finds the previous occurrence of the find buffer;
speakup f is find next and speakup shift f is find previous.
after pressing one of these keys, type up to 16 characters and press enter.
the find will go up/down depending which function was selected.
note the find buffer is screen speciffic. if you switch windows, you get
a new buffer which persists with the window.
new functionality for the say word control variable.
0 is the old behaviour, break words at delimiters.
1 also breaks words at attribute change.
2 is: If you are on a word with delimiters before and after it, the
after delimiters are all spoken, not just one. The before delimiters are
spoken if they are preceded by a space. otherwise they are spoken
after the previous word. I added this so if I have parens as delimiters
I hear how many there are. Useful when writing speakup C code.

new features as of Oct 3 2016
column mode is now here:
to use it: move the reading cursor to the line containing the headers.
press speakup c. 
Note: if the reading cursor is above the header line, line reading behaves
normally as if column mode is off. So the reports from top read correctly.
The functions that read lines like say_line, prev_line, next_line,
read_screen, say_from_top, say_to_bottom, and cursor up/down
will read the column. The header line is checked for space delimited words
and then the current line you are on is checked. if content extends left
or right of the header boundaries, the column is extended to include the
extended content. remember to turn it off when done. speakup c.
if you want to read the whole line while in column mode, pressing shift
with prev_line, say_line or next_line will read it.

new features as of Oct 5 2016
shift prev_word will read the word above the current word.
if there is no word directly above, it will scan back until it finds one.
shift next_word will read the word below the current word.
if there is no word directly below, it will scan forward until it finds one.
shift prev_char will read the char above.
shift next_char will read the char below.

new features as of Oct 7 2016
fixed speak-out synthesizer indexing bug.
changed /sys/accessibility/speakup/i18n/chartab file.
Repeats and other character properties were not being shown or stored.
Now each bit in the chartab table is represented by a character as follows:
+ means it is legal to send this char to the synth.
a is alphabetic char.
u is uppercase char.
n is numeric char.
s is the char is in the punc_some list.
m is the char is in the punc_most list.
p char is in the punc_all list.
w is the char is a word delimiter.
x  is the char is extended numeric.
r is the char is in the edit repeats list.
c is the char is a control character.
X is the char is an extended char >= ascii 128.
