diff -uNr ../emacspeak-6.0.orig/Makefile ./Makefile --- ../emacspeak-6.0.orig/Makefile Mon May 5 13:08:48 1997 +++ ./Makefile Sun Jun 1 13:29:54 1997 @@ -323,6 +323,7 @@ @echo "See Makefile for instructions." @echo "Type make info for the online manual." @echo "Make sure you read the Emacs info pages" + make config CWD=$(libdir) info: cd info; make @@ -377,7 +378,6 @@ # {{{ user level target-- install uninstall install: - make config CWD=$(libdir) if test ! $(libdir) = $(CWD) ; then \ if test ! -d $(libparentdir) ; then mkdir $(libparentdir); fi ; \ if test ! -d $(libdir) ; then mkdir $(libdir); fi ; \ diff -uNr ../emacspeak-6.0.orig/Makefile.orig ./Makefile.orig --- ../emacspeak-6.0.orig/Makefile.orig Wed Dec 31 19:00:00 1969 +++ ./Makefile.orig Mon May 5 13:08:48 1997 @@ -0,0 +1,575 @@ +# $Id: Makefile,v 6.2 1997/05/05 17:08:40 raman Exp $ +# $Author: raman $ +# Description: Makefile for Emacspeak +# Keywords: Emacspeak, Dectalk, Makefile +# {{{ LCD Entry: + +# LCD Archive Entry: +# emacspeak| T. V. Raman |raman@crl.dec.com +# A speech interface to Emacs | +# $date: $ | +# $Revision: 6.2 $ | +# Location undetermined +# + +# }}} +# {{{ Copyright: + + +# Copyright (c) 1994, 1995 by Digital Equipment Corporation. +# All Rights Reserved. +# +# This file is not part of GNU Emacs, but the same permissions apply. +# +# GNU Emacs is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# GNU Emacs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Emacs; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +# }}} +# {{{ Installation instructions: + + # Set some Make configuration variables here. +# If you have a Dectalk connected to a serial port, for example, /dev/tty00 +# specify it in the following line: +DECTALK = > /dev/null +# and the installation will give you spoken feedback. +# Alternately, you can specify this on the make command line as in +# make "DECTALK =>/dev/tty00" +# Note: (the above is only for spoken feedback during compilation.) +# If you're reading this, then you've already unpacked the tar archive +# and extracted the sources in a directory. +# cd to the directory where you placed the sources. +# This directory is referred to henceforth as EMACSPEAK_DIR. +# and then type +# make config +# Now type +# make emacspeak +# to compile the files, then (as superuser) +# make install +# to install them. +# +# By default, files are installed in subdirectories of /usr -- +# that is, executables in /usr/bin, .info files in +# /usr/info, and compiled files in /usr/share/lib/emacs/site-lisp/emacspeak. +# If you want them somewhere else, you may add a "PREFIX=" parameter to all +# make commands. For example, to place files in subdirectories /usr +# instead of /usr, use these commands: +# make PREFIX=/usr install +# +#Note: The intent is to place emacspeak in a subdirectory of site-lisp. +#Newer emacsuns have this under /usr/local/share (or /usr/share) +#older emacsuns used /usr/local/lib/... +# emacspeak uses tclx --extended tcl-- for the synthesizer driver. +# Note: Extended TCL --tclx-- is *not* tclsh +# Setting up synthesizer driver: +# Emacspeak comes with two drivers written in TCL: +# 1) dtk-exp for the Dectalk Express +# 2) dtk-mv for the MultiVoice and older Dectalk 3 synthesizers +# emacspeak uses the shell environment variable DTK_PROGRAM to determine +# which driver to use, and the shell environment variable DTK_PORT +# to determine the port where the Dectalk is connected. +# Examples: If using csh or tcsh +# setenv DTK_PROGRAM "dtk-exp" +# or if using bash +# export DTK_PROGRAM=dtk-exp +# By default the port is /dev/tty00 on ultrix/osf1, and /dev/ttyS0 on linux. +# +# Finally, make sure that tcl is present in your search path by typing +# which tcl +# Assuming you're using dtk-exp: +# Check that the dtk-exp can be run by typing +# tcl /dtk-exp +# You should hear the Dectalk speak and get a TCL prompt if everything is okay. +# Next, check that your serial port is working correctly, and that your stty +# settings are correct. You can do this by executing the following sequence +# of TCL commands in the TCL session you just started: +# dectalk_speak {this is a test. } +# should speak the text within the braces. +# dectalk_stop +# The above command stops speech. +# You should see a TCL prompt when you execute it. +# If things appear to hang when you execute dectalk_stop +# i.e. you don't see a TCL prompt (%) then +# a) The serial cable conecting your speech device is flaky +# b) Your serial port is flaky +# c) The stty settings on the port are incorrect for your system +# In the case of (c) please report the problem +# quit this tcl session by typing ctrl-d +# +# To use emacspeak you can do one of the following: +# Add the line +# (load-file (expand-file-name "/emacspeak-setup.el")) +# to the start of your .emacs +# This will start emacspeak every time you use emacs +# or alternatively set the following alias. +# If you use csh or tcsh +# alias emacspeak "emacs -q -l /emacspeak-setup.el -l $HOME/.emacs" +# If you use bash (the default under linux) +# alias emacspeak="emacs -q -l /emacspeak-setup.el -l $HOME/.emacs" +# Note: in all of the above you should replace with your +# site-specific value. The distribution also creates a shell executable +# emacspeak.sh that does the same thing as the alias shown above. + +# }}} +# {{{ Site Configuration + +##### Site Configuration ##### +PREFIX = /usr +# where executables go +bindir = ${PREFIX}/bin +# where info files should go +infodir = ${PREFIX}/info +# where the emacspeak library directory should go +#for older emacsuns use /usr/lib +libparentdir = ${PREFIX}/share/emacs/site-lisp +# where .elc files should go +libdir =$(libparentdir)/emacspeak +# what emacs is called on your system +EMACS = emacs +# How to run in batch mode +BATCH = -batch -q -no-site-file +# How to compile +COMPILE = -f batch-byte-compile +# Assuming you're doing 'make' in the source directory: +CWD = `pwd` +# How to install files +INSTALL = install + +# }}} +# {{{ define make variables and file groupings + +############## no user servicable parts beyond this point ################### +SNAPSHOT = `date "+%h-%d-%y-%H-%M"` +#New make rules +.SUFFIXES: .elc .el .el .def + +.el.elc: + $(EMACS) $(BATCH) -l $(CWD)/emacspeak-load-path $(COMPILE) $(CWD)/$< + @echo "Compiled $<. " $(DECTALK) + +# source files to distribute +ID = README +TABLE_SAMPLES=tables/*.tab tables/*.dat +SOUNDS=sounds/*.au +TCL_PROGRAMS = dtk-exp dtk-mv remote-tcl +ELISP = dtk-css-speech.el \ +dtk-macros.el \ +dtk-speak.el \ +dtk-tcl.el \ +dtk-voices.el \ +emacspeak-actions.el \ +emacspeak-advice.el \ +emacspeak-auctex.el \ +emacspeak-bbdb.el \ +emacspeak-bibtex.el \ +emacspeak-buff-sel.el \ +emacspeak-c.el \ +emacspeak-calc.el \ +emacspeak-calendar.el \ +emacspeak-compile.el \ +emacspeak-dired.el \ +emacspeak-dismal.el \ +emacspeak-dmacro.el \ +emacspeak-ediff.el \ +emacspeak-eterm.el \ +emacspeak-fix-interactive.el \ +emacspeak-folding.el \ +emacspeak-forms.el \ +emacspeak-gnus.el \ +emacspeak-gud.el \ +emacspeak-hyperbole.el \ +emacspeak-info.el \ +emacspeak-ispell.el \ +emacspeak-keymap.el \ +emacspeak-kotl.el \ +emacspeak-load-path.el \ +emacspeak-man.el \ +emacspeak-message.el \ +emacspeak-new-ediff.el \ +emacspeak-oo-browser.el \ +emacspeak-outline.el \ +emacspeak-perl.el \ +emacspeak-pronounce.el \ +emacspeak-redefine.el \ +emacspeak-replace.el \ +emacspeak-rmail.el \ +emacspeak-sgml-mode.el \ +emacspeak-tapestry.el \ +emacspeak-enriched.el \ +emacspeak-setup.el \ +emacspeak-sounds.el \ +emacspeak-speak.el \ +emacspeak-table-ui.el \ +emacspeak-table.el \ +emacspeak-tabulate.el \ +emacspeak-tcl.el \ +emacspeak-tempo.el \ +emacspeak-view-process.el \ +emacspeak-view.el \ +emacspeak-vm.el \ +emacspeak-w3.el \ +emacspeak-widget.el \ +emacspeak-wrolo.el \ +emacspeak.el \ +html-voice.el \ +voice-lock.el \ +tapestry.el \ +w3-util.el + +TEMPLATES = emacspeak-load-path.def \ +emacspeak-setup.def \ +emacspeak.def \ +play.def + +INFO = info/Makefile info/explain info/emacspeak.texinfo +#INFO not listed in DISTFILES since we dont snapshot it +DISTFILES =${ELISP} ${TEMPLATES} $(TCL_PROGRAMS) \ + Makefile COPYRIGHT HELP +# {{{ grouping files into dependent modules + +#The various modules: +DTK_OBJECTS = dtk-macros.elc\ + dtk-speak.elc\ + dtk-tcl.elc\ + dtk-css-speech.elc \ + dtk-voices.elc +SPEAK_OBJECTS = \ + emacspeak-speak.elc \ + emacspeak-actions.elc \ + voice-lock.elc \ + html-voice.elc \ + emacspeak-pronounce.elc \ + emacspeak-sounds.elc + +CORE_OBJECTS = \ + emacspeak.elc \ + emacspeak-advice.elc\ + emacspeak-keymap.elc\ + emacspeak-fix-interactive.elc\ + emacspeak-redefine.elc\ + emacspeak-replace.elc \ + emacspeak-table.elc \ + emacspeak-table-ui.elc \ + emacspeak-tabulate.elc + +AUX_OBJECTS = emacspeak-calendar.elc \ +emacspeak-calc.elc \ +emacspeak-c.elc \ +emacspeak-compile.elc \ +emacspeak-auctex.elc \ +emacspeak-bibtex.elc \ +emacspeak-dired.elc \ +emacspeak-info.elc\ +emacspeak-folding.elc \ +emacspeak-outline.elc \ +emacspeak-hyperbole.elc \ +emacspeak-kotl.elc \ +emacspeak-bbdb.elc \ +emacspeak-dmacro.elc \ +emacspeak-wrolo.elc \ +emacspeak-oo-browser.elc \ +emacspeak-tempo.elc \ +emacspeak-tcl.elc \ +emacspeak-perl.elc \ +emacspeak-gud.elc \ +emacspeak-man.elc \ +emacspeak-forms.elc \ +emacspeak-view.elc \ +emacspeak-message.elc \ +emacspeak-dismal.elc \ +emacspeak-buff-sel.elc \ +emacspeak-view-process.elc \ +emacspeak-vm.elc \ +emacspeak-rmail.elc \ +emacspeak-sgml-mode.elc \ +emacspeak-tapestry.elc \ +emacspeak-enriched.elc \ +emacspeak-widget.elc \ +emacspeak-w3.elc \ +emacspeak-ispell.elc \ +emacspeak-eterm.elc \ +emacspeak-ediff.elc \ +emacspeak-new-ediff.elc \ +emacspeak-gnus.elc\ +emacspeak-setup.el + +ADDON_OBJECTS=w3-util.elc tapestry.elc # custom.elc + +OBJECTS = $(DTK_OBJECTS) $(SPEAK_OBJECTS) $(CORE_OBJECTS) \ + $(AUX_OBJECTS) $(ADDON_OBJECTS) + +# }}} + +# }}} +# {{{ User level targets emacspeak info print + +emacspeak: $(OBJECTS) + @echo "Compiled on $(SNAPSHOT) by `whoami` on `hostname`" >> $(ID) + @echo "Now check installation of the synthesizer driver. " $(DECTALK) + @echo "See Makefile for instructions." $(DECTALK) + @echo "Type make info for the online manual." $(DECTALK) + @echo "Make sure you read the Emacs info pages" $(DECTALK) + @echo "Now check installation of the synthesizer driver." + @echo "See Makefile for instructions." + @echo "Type make info for the online manual." + @echo "Make sure you read the Emacs info pages" + +info: + cd info; make + +print: + @echo "Please change to the info directory and type make print" + +# }}} +# {{{ Maintainance targets tar snapshot dist + +tar: + rm -f $(ID) + @echo "This is Emacspeak from $(SNAPSHOT)" > $(ID) + @echo "Distribution created by `whoami` on `hostname`" >> $(ID) + @echo "Place the files from this distribution in a directory" >> $(ID) + @echo "And type make config " >> $(ID) + @echo "To configure the source files. Then type make" >> $(ID) + @echo "See the Makefile for details. " >> $(ID) + @echo "If you have a Dectalk connected to a serial port," >>$(ID) + @echo 'e.g. /dev/tty00 then use make "DECTALK=>/dev/tty00"' >> $(ID) + @echo "And get spoken feedback during make. " >> $(ID) + tar cvf emacspeak.tar $(DISTFILES) $(ID) \ + ${TABLE_SAMPLES} ${SOUNDS} DOC $(INFO) +snapshot: $(DISTFILES) + rcs -n$(SNAPSHOT):$$ $(DISTFILES) + +dist: $(DISTFILES) $(INFO) + make tar + make snapshot + @echo "emacspeak $(SNAPSHOT) prepared for distribution in emacspeak.tar" + +# }}} +# {{{ User level target-- config + +config: + @rm -f emacspeak-setup.el emacspeak-load-path.el play emacspeak.sh + @sed "s@@$(CWD)@g" \ + emacspeak.def > emacspeak.sh + @sed "s@@$(CWD)@g" \ + emacspeak-load-path.def > emacspeak-load-path.el + @sed "s@@$(CWD)@g" \ + emacspeak-setup.def > emacspeak-setup.el + @sed "s@@$(CWD)@g" \ + play.def > play + @chmod 444 emacspeak-setup.el emacspeak-load-path.el + @chmod 755 play emacspeak.sh + @echo "Configured emacspeak in directory $(CWD)." $(DECTALK) + @echo "Now type make emacspeak" $(DECTALK) + @echo "Configured emacspeak in directory $(CWD). Now type make emacspeak" + +# }}} +# {{{ user level target-- install uninstall + +install: + make config CWD=$(libdir) + if test ! $(libdir) = $(CWD) ; then \ + if test ! -d $(libparentdir) ; then mkdir $(libparentdir); fi ; \ + if test ! -d $(libdir) ; then mkdir $(libdir); fi ; \ + chmod 755 $(libdir); \ + $(INSTALL) -m 0644 $(OBJECTS) dtk-exp dtk-mv remote-tcl $(libdir); \ + $(INSTALL) -d $(libdir)/sounds; \ + $(INSTALL) -m 0644 $(SOUNDS) $(libdir)/sounds; \ + fi + if test ! -d $(bindir) ; then mkdir $(bindir); fi + $(INSTALL) emacspeak.sh $(bindir)/emacspeak + if test ! -d $(infodir) ; then mkdir $(infodir); fi + cd info; \ + make install infodir=$(infodir); +uninstall: + rm -rf $(infodir)/emacspeak.info* $(bindir)/emacspeak; + if test ! $(libdir) = $(CWD) ; then \ + (cd $(libparentdir); rm -rf $(libdir) ); \ + fi + +# }}} +# {{{ Make rules for the various modules + +# Do this in this brain-dead way because different makes do pattern +# rules differently. grumble grumble... +#dtk module: +#dtk-tcl contains inline functions. +#Compile dtk-tcl first, and make dtk-speak depend on it +#Modules using functions from the dtk module should depend on dtk-speak +dtk-macros.elc: dtk-macros.el +dtk-speak.elc: dtk-speak.el dtk-tcl.el +dtk-tcl.elc: dtk-tcl.el dtk-voices.elc emacspeak-pronounce.elc +dtk-voices.elc: dtk-voices.el +dtk-css-speech.elc: dtk-css-speech.el dtk-voices.elc +voice-lock.elc: voice-lock.el +html-voice.elc: html-voice.el voice-lock.elc +#Emacspeak module: +emacspeak-sounds.elc: emacspeak-sounds.el +emacspeak-pronounce.elc: emacspeak-pronounce.el +emacspeak-advice.elc: emacspeak-advice.el dtk-speak.elc +emacspeak-calendar.elc: emacspeak-calendar.el dtk-speak.el +emacspeak-calc.elc: emacspeak-calc.el +emacspeak-c.elc: emacspeak-c.el dtk-speak.elc +emacspeak-dired.elc: emacspeak-dired.el dtk-speak.elc +emacspeak-auctex.elc: emacspeak-auctex.el dtk-speak.elc +emacspeak-bibtex.elc: emacspeak-bibtex.el dtk-speak.elc +emacspeak-info.elc: emacspeak-info.el dtk-speak.elc +emacspeak-folding.elc: emacspeak-folding.el dtk-speak.elc +emacspeak-outline.elc: emacspeak-outline.el dtk-speak.elc +emacspeak-hyperbole.elc: emacspeak-hyperbole.el dtk-speak.elc +emacspeak-kotl.elc: emacspeak-kotl.el dtk-speak.elc +emacspeak-bbdb.elc: emacspeak-bbdb.el dtk-speak.elc +emacspeak-dmacro.elc: emacspeak-dmacro.el dtk-speak.elc +emacspeak-wrolo.elc: emacspeak-wrolo.el dtk-speak.elc +emacspeak-oo-browser.elc: emacspeak-oo-browser.el dtk-speak.elc +emacspeak-tempo.elc: emacspeak-tempo.el dtk-speak.elc +emacspeak-tcl.elc: emacspeak-tcl.el dtk-speak.elc +emacspeak-perl.elc: emacspeak-perl.el dtk-speak.elc +emacspeak-gud.elc: emacspeak-gud.el dtk-speak.elc +emacspeak-man.elc: emacspeak-man.el dtk-speak.elc +emacspeak-forms.elc: emacspeak-forms.el dtk-speak.elc +emacspeak-view.elc: emacspeak-view.el dtk-speak.elc +emacspeak-message.elc: emacspeak-message.el dtk-speak.elc +emacspeak-dismal.elc: emacspeak-dismal.el dtk-speak.elc +emacspeak-buff-sel.elc: emacspeak-buff-sel.el dtk-speak.elc +emacspeak-view-process.elc: emacspeak-view-process.el dtk-speak.elc +emacspeak-eterm.elc: emacspeak-eterm.el dtk-speak.elc +emacspeak-ediff.elc: emacspeak-ediff.el dtk-speak.elc +emacspeak-new-ediff.elc: emacspeak-new-ediff.el dtk-speak.elc +emacspeak-fix-interactive.elc: emacspeak-fix-interactive.el dtk-speak.elc +emacspeak-gnus.elc: emacspeak-gnus.el dtk-speak.elc +emacspeak-ispell.elc: emacspeak-ispell.el dtk-speak.elc +emacspeak-keymap.elc: emacspeak-keymap.el +emacspeak-load-path.elc: emacspeak-load-path.elc +emacspeak-redefine.elc: emacspeak-redefine.el dtk-speak.elc +emacspeak-replace.elc: emacspeak-replace.el dtk-speak.elc +emacspeak-table.elc: emacspeak-table.el +emacspeak-table-ui.elc: emacspeak-table-ui.el emacspeak-tabulate.elc \ +emacspeak-table.elc +emacspeak-tabulate.elc: emacspeak-tabulate.el dtk-speak.elc +emacspeak-setup.elc: emacspeak-setup.el +emacspeak-speak.elc: emacspeak-speak.el dtk-speak.elc +emacspeak-actions.elc: emacspeak-actions.el +emacspeak-vm.elc: emacspeak-vm.el dtk-speak.elc +emacspeak-rmail.elc: emacspeak-rmail.el dtk-speak.elc +emacspeak-sgml-mode.elc: emacspeak-sgml-mode.el dtk-speak.elc +emacspeak-tapestry.elc: emacspeak-tapestry.el dtk-speak.elc +emacspeak-enriched.elc: emacspeak-enriched.el dtk-speak.elc +emacspeak-widget.elc: emacspeak-widget.el dtk-speak.elc +emacspeak-w3.elc: emacspeak-w3.el dtk-speak.elc +emacspeak.elc: emacspeak.el + +# }}} +# {{{ complete build + +#targets +#the complete build +all: emacspeak + +# }}} +# {{{ shortcuts for building subsystems + +#Compiling support for different packages: +#this is done as part of make all. + +#You can recompile support for individual packages, e.g. calendar by typing +# make calendar +# +actions: emacspeak-actions.elc +calendar: emacspeak-calendar.elc +calc: emacspeak-calc.elc +c: emacspeak-c.elc +compile: emacspeak-compile.elc +auctex: emacspeak-auctex.elc +bibtex: emacspeak-bibtex.elc +dired: emacspeak-dired.elc +folding: emacspeak-folding.elc +outline:emacspeak-outline.elc +hyperbole: emacspeak-hyperbole.elc +kotl: emacspeak-kotl.elc +bbdb: emacspeak-bbdb.elc +dmacro: emacspeak-dmacro.elc +wrolo: emacspeak-wrolo.elc +oo-browser: emacspeak-oo-browser.elc +table: emacspeak-table.elc +table-ui: emacspeak-table-ui.elc +tabulate: emacspeak-tabulate.elc +tempo: emacspeak-tempo.elc +tcl: emacspeak-tcl.elc +perl: emacspeak-perl.elc +gud: emacspeak-gud.elc +man: emacspeak-man.elc +forms: emacspeak-forms.elc +view: emacspeak-view.elc +message: emacspeak-message.elc +dismal: emacspeak-dismal.elc +buff-sel: emacspeak-buff-sel.elc +view-process: emacspeak-view-process.elc +vm: emacspeak-vm.elc +rmail: emacspeak-rmail.elc +sgml-mode: emacspeak-sgml-mode.elc +enriched: emacspeak-enriched.elc +widget: emacspeak-widget.elc +w3: emacspeak-w3.elc +ispell: emacspeak-ispell.elc +eterm: emacspeak-eterm.elc +ediff: emacspeak-ediff.elc +new-ediff: emacspeak-new-ediff.elc +gnus: emacspeak-gnus.elc + +# }}} +# {{{ user level target-- clean + +clean: + rm -f *.elc + cd info; make clean + +# }}} +# {{{ labeling releases + +#label releases when ready +LABEL= +label: $(DISTFILES) + co -l $(DISTFILES) + ci -f -u${LABEL} -m"Releasing ${LABEL}" \ + -n$(SNAPSHOT) $(DISTFILES) + + +release: #supply LABEL=NN.NN + make label LABEL=$(LABEL) + make dist + mkdir release; \ +mv emacspeak.tar release; \ + cd release; \ + mkdir emacspeak-$(LABEL); \ + cd emacspeak-$(LABEL); \ + tar xvf ../emacspeak.tar ; \ + cd ..; \ + rm -f emacspeak.tar ; \ + tar cvf emacspeak.tar emacspeak-$(LABEL); \ + gzip -9 emacspeak.tar; \ + mv emacspeak.tar.gz ../ems.tgz; \ + cd .. ; \ + /bin/rm -rf release + @echo "Prepared Emacspeak-$(LABEL) in ems.tgz" + +# }}} +# {{{ end of file + +#local variables: +#major-mode: makefile-mode +#eval: (fold-set-marks "# {{{" "# }}}") +#folded-file: t +#end: + +# }}} diff -uNr ../emacspeak-6.0.orig/emacspeak-eterm.el ./emacspeak-eterm.el --- ../emacspeak-6.0.orig/emacspeak-eterm.el Thu May 1 14:06:44 1997 +++ ./emacspeak-eterm.el Sun Jun 1 13:29:54 1997 @@ -183,7 +183,7 @@ ;;; ie without any interpretation. ;;; Ensure you're in a terminal before sending it through." (defun emacspeak-eterm-maybe-send-raw () - "Send a raw character through if in the terminal buffer + "Send a raw character through if in the terminal buffer. Execute end of line if in a non eterm buffer if executed via C-e C-e" (interactive) @@ -514,7 +514,7 @@ (defun emacspeak-eterm-toggle-review () "Toggle state of eterm review. -In review mode, you can move around the terminal and listen to the contnets +In review mode, you can move around the terminal and listen to the contents without sending input to the terminal itself. " (interactive) (declare (special emacspeak-eterm-review-p diff -uNr ../emacspeak-6.0.orig/emacspeak-eterm.el.orig ./emacspeak-eterm.el.orig --- ../emacspeak-6.0.orig/emacspeak-eterm.el.orig Wed Dec 31 19:00:00 1969 +++ ./emacspeak-eterm.el.orig Thu May 1 14:06:44 1997 @@ -0,0 +1,1263 @@ +;;; $Id: emacspeak-eterm.el,v 6.0 1997/05/01 18:06:27 raman Exp $ +;;; $Author: raman $ +;;; Description: Emacspeak extension to speech enable eterm. +;;; Keywords: Emacspeak, Eterm, Terminal emulation, Spoken Output +;;{{{ LCD Archive entry: +;;; LCD Archive Entry: +;;; emacspeak| T. V. Raman |raman@crl.dec.com +;;; A speech interface to Emacs | +;;; $date: $ | +;;; $Revision: 6.0 $ | +;;; Location undetermined +;;; + +;;}}} +;;{{{ Copyright: + +;;; Copyright (c) 1994, 1995 by Digital Equipment Corporation. +;;; All Rights Reserved. +;;; +;;; This file is not part of GNU Emacs, but the same permissions apply. +;;; +;;; GNU Emacs is free software; you can redistribute it and/or modify +;;; it under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 2, or (at your option) +;;; any later version. +;;; +;;; GNU Emacs is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Emacs; see the file COPYING. If not, write to +;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +;;}}} +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;{{{ required packages: + +(require 'advice) +(require 'cl) +(declaim (optimize (safety 0) (speed 3))) + +(require 'dtk-voices ) +(require 'voice-lock) +(require 'emacspeak-speak) +(require 'emacspeak-sounds) +(require 'emacspeak-keymap) +(eval-when (compile) + (require 'emacspeak-fix-interactive) + (condition-case nil + (progn + (require 'term) + (require 'tshell)) + (error nil ))) + +;;}}} +;;{{{ Introduction: +;;; This module makes eterm talk. +;;; Eterm is the new terminal emulator for Emacs. +;;; Use of emacspeak with eterm really needs an info page. +;;; At present, the only documentation is the source level documentation. +;;; This module uses Control-t as an additional prefix key to allow the user +;;; To move around the terminal and have different parts spoken. + +;;}}} +;;{{{ keybindings: + +(defvar emacspeak-eterm-keymap (make-keymap) + "Keymap used to navigate a terminal without moving the cursor. ") +(defvar emacspeak-eterm-prefix "\C-t" + "Prefix char used by emacspeak for navigating an eterm") + +(defun emacspeak-eterm-setup-keys() + "Make eterm usable with emacspeak" + (declare (special emacspeak-prefix emacspeak-eterm-prefix + emacspeak-eterm-keymap term-mode-map )) + (define-prefix-command 'emacspeak-eterm-prefix-command + 'emacspeak-eterm-keymap) + (define-key term-mode-map emacspeak-eterm-prefix + 'emacspeak-eterm-prefix-command) + (suppress-keymap emacspeak-eterm-keymap) + (let ((i 0)) + (while (< i 10) + (define-key emacspeak-eterm-keymap + (format "%s" i) 'emacspeak-eterm-speak-predefined-window ) + (incf i ))) + (define-key emacspeak-eterm-keymap "\C-i" 'emacspeak-eterm-speak-cursor ) + (define-key emacspeak-eterm-keymap "\C-q" 'emacspeak-toggle-eterm-autospeak) + (define-key emacspeak-eterm-keymap " " 'emacspeak-eterm-speak-screen) + (define-key emacspeak-eterm-keymap '[up] 'emacspeak-eterm-pointer-up ) + (define-key emacspeak-eterm-keymap '[down] 'emacspeak-eterm-pointer-down ) + (define-key emacspeak-eterm-keymap '[left] 'emacspeak-eterm-pointer-left ) + (define-key emacspeak-eterm-keymap '[right] 'emacspeak-eterm-pointer-right ) + (define-key emacspeak-eterm-keymap "a" 'emacspeak-eterm-pointer-to-left-edge) + (define-key emacspeak-eterm-keymap "e" 'emacspeak-eterm-pointer-to-right-edge) + (define-key emacspeak-eterm-keymap "\M-b" 'emacspeak-eterm-pointer-backward-word) + (define-key emacspeak-eterm-keymap "\M-f" 'emacspeak-eterm-pointer-forward-word) + (define-key emacspeak-eterm-keymap "." 'emacspeak-eterm-pointer-to-cursor ) + (define-key emacspeak-eterm-keymap "," 'emacspeak-eterm-speak-pointer) + (define-key emacspeak-eterm-keymap "c" 'emacspeak-eterm-speak-pointer-char) + (define-key emacspeak-eterm-keymap "w" 'emacspeak-eterm-speak-pointer-word) + (define-key emacspeak-eterm-keymap "l" 'emacspeak-eterm-speak-pointer-line) + (define-key emacspeak-eterm-keymap "p" 'emacspeak-eterm-pointer-up ) + (define-key emacspeak-eterm-keymap "n" 'emacspeak-eterm-pointer-down ) + (define-key emacspeak-eterm-keymap "b" 'emacspeak-eterm-pointer-left ) + (define-key emacspeak-eterm-keymap "f" 'emacspeak-eterm-pointer-right ) + (define-key emacspeak-eterm-keymap "h" + 'emacspeak-eterm-pointer-to-next-color-change) + (define-key emacspeak-eterm-keymap "H" + 'emacspeak-eterm-pointer-to-previous-color-change) + (define-key emacspeak-eterm-keymap "t" 'emacspeak-eterm-pointer-to-top) + (define-key emacspeak-eterm-keymap "<" 'emacspeak-eterm-pointer-to-top) + (define-key emacspeak-eterm-keymap ">" 'emacspeak-eterm-pointer-to-bottom) + (define-key emacspeak-eterm-keymap "g" 'emacspeak-eterm-goto-line) + (define-key emacspeak-eterm-keymap "s" 'emacspeak-eterm-search-forward ) + ;(define-key emacspeak-eterm-keymap "r" 'emacspeak-eterm-search-backward) + (define-key emacspeak-eterm-keymap "y" + 'emacspeak-eterm-kill-ring-save-region) + (define-key emacspeak-eterm-keymap "x" 'emacspeak-eterm-copy-region-to-register) + (define-key emacspeak-eterm-keymap "m" 'emacspeak-eterm-set-marker ) + (define-key emacspeak-eterm-keymap "\C-p" + 'emacspeak-eterm-toggle-pointer-mode) + (define-key emacspeak-eterm-keymap "\C-w" 'emacspeak-eterm-define-window) + (define-key emacspeak-eterm-keymap "\C-y" 'emacspeak-eterm-yank-window) + (define-key emacspeak-eterm-keymap "\C-f" 'emacspeak-eterm-set-focus-window) + (define-key emacspeak-eterm-keymap "\C-d" 'emacspeak-eterm-describe-window) + (define-key emacspeak-eterm-keymap "\C-m" 'emacspeak-eterm-speak-window) + (define-key emacspeak-eterm-keymap "r" 'emacspeak-eterm-toggle-review) + (define-key emacspeak-eterm-keymap "q" 'emacspeak-eterm-toggle-review) + (and term-raw-escape-map + (mapcar + (function + (lambda (key) + (define-key term-raw-escape-map key + (lookup-key (current-global-map) key)))) + '("\M-x" "\C-h"))) + t) + +(defvar emacspeak-eterm-raw-prefix +"\C-r" + "Prefix key to use to send out raw term input. +Useful when eterm is in review mode. ") + +(defun emacspeak-eterm-setup-raw-keys () + "Setup emacspeak keys for raw terminal mode. " + (declare (special term-raw-map + emacspeak-eterm-keymap + emacspeak-eterm-raw-prefix)) + (when term-raw-map + (define-key term-raw-map emacspeak-prefix 'emacspeak-prefix-command) + (define-key term-raw-map (concat emacspeak-prefix emacspeak-prefix) + 'emacspeak-eterm-maybe-send-raw) + (define-key term-raw-map emacspeak-eterm-prefix + 'emacspeak-eterm-prefix-command) + (define-key term-raw-map emacspeak-eterm-raw-prefix term-raw-map) + (define-key term-raw-map + (concat emacspeak-eterm-raw-prefix emacspeak-eterm-raw-prefix) + 'emacspeak-eterm-maybe-send-raw) + (define-key term-raw-map + (concat emacspeak-eterm-prefix emacspeak-eterm-prefix) 'emacspeak-eterm-maybe-send-raw) + (define-key emacspeak-eterm-keymap emacspeak-eterm-raw-prefix term-raw-map) + )) + +;;}}} +;;{{{ voice definitions for eterm highlight, underline etc + +(dtk-define-voice 'eterm-highlight-personality "[:nh]") +(dtk-define-voice 'eterm-bold-personality "[:nb]") +(dtk-define-voice 'eterm-underline-personality "[:np :dv ap 142 pr 150]") +(dtk-define-voice 'eterm-default-personality "[:np]") + +;;}}} +;;{{{ functions + +;;; nuke term cache info +(defsubst emacspeak-eterm-nuke-cached-info () + (declare (special term-current-row term-current-column )) + (setq term-current-row nil + term-current-column nil )) + +;;;Send the last input character as a raw key, +;;; ie without any interpretation. +;;; Ensure you're in a terminal before sending it through." +(defun emacspeak-eterm-maybe-send-raw () + "Send a raw character through if in the terminal buffer +Execute end of line if + in a non eterm buffer if executed via C-e C-e" + (interactive) + (declare (special last-input-event)) + (cond + ((or (eq major-mode 'term-mode) + (eq major-mode 'tshell-mode)) + (term-send-raw )) + ((= last-input-event 5) (end-of-line )) + (t (beep)))) + +(defun emacspeak-eterm-speak-cursor () + "Speak cursor position" + (interactive) + (message + "Cursor at Row %s, Column %s" + (term-current-row) + (term-current-column))) + +(defun emacspeak-eterm-speak-pointer () + "Speak current pointer position. " + (interactive) + (declare (special emacspeak-eterm-pointer )) + (let ((coordinates (emacspeak-eterm-position-to-coordinates + (marker-position emacspeak-eterm-pointer )))) + (message + "Pointer at row %s column %s " + (cdr coordinates ) (car coordinates )))) + + +(defun emacspeak-eterm-speak-screen (&optional flag ) + "Speak the screen. Default is to speak from the emacspeak pointer to point. +Prefix arg causes region above +the Emacspeak pointer to be spoken. " + (interactive "P") + (declare (special term-home-marker emacspeak-eterm-pointer )) + (if flag + (emacspeak-speak-region term-home-marker emacspeak-eterm-pointer) + (emacspeak-speak-region emacspeak-eterm-pointer (point-max )))) + +;;}}} +;;{{{ Speaking the screen pointer: + +;;; The pointer is an invisible marker that is +;;; moved around to speak the screen. +;;; The pointer is emacspeak-eterm-pointer and starts off at the cursor. +;;; Speaking relative to the pointer: + +(defun emacspeak-eterm-speak-pointer-line () + "Speak the line the pointer is on" + (interactive) + (declare (special emacspeak-eterm-pointer )) + (save-excursion + (goto-char emacspeak-eterm-pointer) + (emacspeak-speak-line nil ))) + +(defun emacspeak-eterm-speak-pointer-word () + "Speak the word the pointer is on" + (interactive) + (declare (special emacspeak-eterm-pointer )) + (save-excursion + (goto-char emacspeak-eterm-pointer) + (emacspeak-speak-word nil ))) + +(defun emacspeak-eterm-speak-pointer-char (&optional prefix) + "Speak char under eterm pointer. +Pronounces character phonetically unless called with a prefix arg." + (interactive "P") + (declare (special emacspeak-eterm-pointer )) + (save-excursion + (goto-char emacspeak-eterm-pointer) + (emacspeak-speak-char prefix))) + +;;}}} +;;{{{ moving the screen pointer: + +(defun emacspeak-eterm-pointer-to-cursor () + "Move the pointer to the cursor " + (interactive) + (declare (special emacspeak-eterm-pointer )) + (set-marker emacspeak-eterm-pointer (point )) + (when (interactive-p) + (emacspeak-auditory-icon 'large-movement) + (emacspeak-eterm-speak-cursor))) + +(defun emacspeak-eterm-pointer-to-top () + "Move the pointer to the top of the screen. " + (interactive) + (declare (special term-home-marker emacspeak-eterm-pointer )) + (save-excursion + (goto-char term-home-marker) + (set-marker emacspeak-eterm-pointer (point)) + (when (interactive-p) + (emacspeak-auditory-icon 'large-movement) + (emacspeak-speak-line nil )))) + +(defun emacspeak-eterm-pointer-to-bottom () + "Move the pointer to the bottom of the screen. " + (interactive) + (declare (special emacspeak-eterm-pointer )) + (save-excursion + (goto-char (point-max)) + (set-marker emacspeak-eterm-pointer (point )) + (when (interactive-p) + (emacspeak-auditory-icon 'large-movement) + (emacspeak-speak-line nil )))) + +(defun emacspeak-eterm-pointer-up (count) + "Move the pointer up a line. " + (interactive "P") + (declare (special emacspeak-eterm-pointer + term-home-marker)) + (setq count (or count 1 )) + (save-excursion + (goto-char emacspeak-eterm-pointer ) + (forward-line (- count )) + (beginning-of-line ) + (cond + ((<= (marker-position term-home-marker ) (point)) + (set-marker emacspeak-eterm-pointer (point )) + (emacspeak-speak-line nil )) + (t (error "At top of screen. " ))))) + +(defun emacspeak-eterm-pointer-down (count ) + "Move the pointer down a line. " + (interactive "P") + (declare (special emacspeak-eterm-pointer)) + (setq count (or count 1 )) + (save-excursion + (goto-char emacspeak-eterm-pointer ) + (forward-line count) + (beginning-of-line ) + (cond + ((<= (point) (point-max)) + (set-marker emacspeak-eterm-pointer (point )) + (emacspeak-speak-line nil )) + (t (error "Not that many lines on the screen" ))))) + +(defun emacspeak-eterm-pointer-left (count) + "Move the pointer left a line. " + (interactive "P") + (declare (special emacspeak-eterm-pointer )) + (setq count (or count 1 )) + (save-excursion + (goto-char emacspeak-eterm-pointer ) + (backward-char count) + (set-marker emacspeak-eterm-pointer (point )) + (when (interactive-p) + (dtk-stop) + (emacspeak-speak-char t )))) + +(defun emacspeak-eterm-pointer-right (count) + "Move the pointer right. " + (interactive "P") + (declare (special emacspeak-eterm-pointer )) + (setq count (or count 1 )) + (save-excursion + (goto-char emacspeak-eterm-pointer ) + (forward-char count ) + (set-marker emacspeak-eterm-pointer (point )) + (when (interactive-p) + (dtk-stop) + (emacspeak-speak-char t)))) + +(defun emacspeak-eterm-pointer-to-right-edge () + "Move the pointer to the right edge. " + (interactive) + (declare (special emacspeak-eterm-pointer )) + (save-excursion + (goto-char emacspeak-eterm-pointer ) + (end-of-line) + (set-marker emacspeak-eterm-pointer (point )) + (when (interactive-p) + (dtk-stop) + (emacspeak-auditory-icon 'large-movement) + (emacspeak-speak-char t)))) + +(defun emacspeak-eterm-pointer-to-left-edge () + "Move the pointer to the right edge. " + (interactive) + (declare (special emacspeak-eterm-pointer )) + (save-excursion + (goto-char emacspeak-eterm-pointer ) + (beginning-of-line) + (set-marker emacspeak-eterm-pointer (point )) + (when (interactive-p) + (dtk-stop) + (emacspeak-auditory-icon 'large-movement) + (emacspeak-speak-char t)))) + +(defun emacspeak-eterm-pointer-backward-word (count) + "Move the pointer backward by words. +Interactive numeric prefix arg specifies number of words to move. " + (interactive "P") + (declare (special emacspeak-eterm-pointer )) + (setq count (or count 1 )) + (save-excursion + (goto-char emacspeak-eterm-pointer ) + (condition-case nil + (forward-word (- count )) + (error nil )) + (set-marker emacspeak-eterm-pointer (point )) + (when (interactive-p) + (emacspeak-speak-word)))) + +(defun emacspeak-eterm-pointer-forward-word (count) + "Move the pointer forward by words. +Interactive numeric prefix arg specifies number of words to move. " + (interactive "P") + (declare (special emacspeak-eterm-pointer )) + (setq count (or count 1 )) + (save-excursion + (goto-char emacspeak-eterm-pointer ) + (condition-case nil + (forward-word count ) + (error nil )) + (skip-syntax-forward " ") + (set-marker emacspeak-eterm-pointer (point )) + (when (interactive-p) + (emacspeak-speak-word)))) + +(defun emacspeak-eterm-goto-line (line) + "Move emacspeak eterm pointer to a specified line. " + (interactive "nGo to line:") + (declare (special emacspeak-eterm-pointer + term-home-marker)) + (save-excursion + (goto-char term-home-marker ) + (forward-line line) + (set-marker emacspeak-eterm-pointer (point )) + (emacspeak-auditory-icon 'large-movement ) + (emacspeak-speak-line))) + +(emacspeak-fix-interactive-command-if-necessary 'emacspeak-eterm-goto-line) + +(defun emacspeak-eterm-search-forward () + "Search forward on the terminal. " + (interactive) + (emacspeak-eterm-search 1)) + +(defun emacspeak-eterm-search-backward () + "Search backward on the terminal. " + (interactive) + (emacspeak-eterm-search -1)) + +;;; Helper function for searching: + +(defun emacspeak-eterm-search(direction) + "Prompt for a string, +and try and locate it on the terminal. +If found, the Emacspeak pointer is left at the hit. " + (declare (special emacspeak-eterm-pointer + term-home-marker )) + (let ((found nil) + (start nil) + (end nil) + (string (read-from-minibuffer "Enter search string: "))) + (if (= 1 direction) ; forward search + (setq start (marker-position emacspeak-eterm-pointer ) + end (point-max)) + ; backward search + (setq start (marker-position emacspeak-eterm-pointer ) + end (marker-position term-home-marker ))) + (save-excursion + (goto-char start) + (save-restriction + (narrow-to-region start end ) + (save-match-data + (if (= 1 direction) ;forward search + (setq found (search-forward string end t)) + (setq found (search-backward string end t)))) + (cond + (found (set-marker emacspeak-eterm-pointer (point-marker)) + (emacspeak-auditory-icon 'search-hit) + (emacspeak-eterm-speak-pointer-line)) + (t(emacspeak-auditory-icon 'search-miss) + (message "%s not found. " string ))))))) + +;;}}} +;;{{{ Highlight tracking: + +;;; Moving pointer to the next highlighted portion of the screen: + +(defun emacspeak-eterm-pointer-to-next-color-change (&optional count) + "Move the eterm pointer to the next color change. +This allows you to move between highlighted regions of the screen. " + (interactive "p") + (declare (special emacspeak-eterm-pointer)) + (setq count (or count 1 )) + (let ((current (get-text-property emacspeak-eterm-pointer 'personality )) + (found nil)) + (save-excursion + (goto-char emacspeak-eterm-pointer) + (setq found (text-property-not-all (point) (point-max) + 'personality current )) + (cond + (found (set-marker emacspeak-eterm-pointer found ) + (emacspeak-auditory-icon 'large-movement) + (emacspeak-eterm-speak-pointer-line)) + (t (message "No color change found on the screen. ")))))) + +(defun emacspeak-eterm-pointer-to-previous-color-change (&optional count) + "Move the eterm pointer to the next color change. +This allows you to move between highlighted regions of the screen. " + (interactive "p") + (declare (special emacspeak-eterm-pointer term-home-marker)) + (setq count (or count 1 )) + (let ((current (get-text-property emacspeak-eterm-pointer 'personality )) + (found nil)) + (save-excursion + (goto-char emacspeak-eterm-pointer) + (setq found (text-property-not-all (point) term-home-marker + 'personality current )) + (cond + (found (set-marker emacspeak-eterm-pointer found ) + (emacspeak-auditory-icon 'large-movement) + (emacspeak-eterm-speak-pointer-line)) + (t (message "No color change found on the screen. ")))))) + +;;}}} +;;{{{ reviewing the terminal: + +(defvar emacspeak-eterm-review-p nil +"T if eterm is in review mode. +In review mode, you can move around the terminal and listen to parts of it. +Do not set this variable by hand. +Use command \\[emacspeak-eterm-toggle-review].") + +(defun emacspeak-eterm-toggle-review () + "Toggle state of eterm review. +In review mode, you can move around the terminal and listen to the contnets +without sending input to the terminal itself. " + (interactive) + (declare (special emacspeak-eterm-review-p + eterm-char-mode + buffer-read-only emacspeak-eterm-keymap term-raw-map)) + (emacspeak-eterm-nuke-cached-info ) + (or (assq 'emacspeak-eterm-review-p minor-mode-alist) + (setq minor-mode-alist + (append minor-mode-alist + '((emacspeak-eterm-review-p " Review"))))) + (if eterm-char-mode + (cond + (emacspeak-eterm-review-p ;turn it off + (message "Returning to terminal character mode. ") + (setq emacspeak-eterm-review-p nil) + (use-local-map term-raw-map)) + (t ; turn it on + (message "Entering terminal review mode, press q to return to normal") + (setq emacspeak-eterm-review-p t) + (use-local-map emacspeak-eterm-keymap))) + (message "Terminal review should be used when eterm is in +character mode. ")) + (emacspeak-auditory-icon + (if emacspeak-eterm-review-p + 'on + 'off))) + +;;}}} +;;{{{ Cut and paste while reviewing: + +(defvar emacspeak-eterm-marker nil +"Marker used by emacspeak to yank when in eterm review mode.") + +(defun emacspeak-eterm-set-marker () + "Set the emacspeak eterm marker to the position pointed +to by the emacspeak eterm pointer." + (interactive) + (declare (special emacspeak-eterm-pointer + emacspeak-eterm-marker)) + (let ((coordinates nil)) + (set-marker emacspeak-eterm-marker + (marker-position emacspeak-eterm-pointer )) + (setq coordinates + (emacspeak-eterm-position-to-coordinates + (marker-position emacspeak-eterm-pointer))) + (when (interactive-p) + (emacspeak-auditory-icon 'mark-object) + (dtk-stop) + (message "Set eterm mark at row %s column %s" + (cdr coordinates) + (car coordinates))))) + +(defun emacspeak-eterm-kill-ring-save-region () + "Copy region delimited by the emacspeak eterm marker +set by command \\[emacspeak-eterm-set-marker] and the +emacspeak eterm pointer. " + (interactive) + (declare (special emacspeak-eterm-marker + emacspeak-eterm-pointer )) + (kill-ring-save (marker-position emacspeak-eterm-marker ) + (marker-position emacspeak-eterm-pointer)) + (emacspeak-auditory-icon 'mark-object) + (message "Snarfed %s characters. " + (abs (- (marker-position emacspeak-eterm-marker ) + (marker-position emacspeak-eterm-pointer))))) + +(defun emacspeak-eterm-copy-region-to-register (register) + "Copy region delimited by the emacspeak eterm marker +set by command \\[emacspeak-eterm-set-marker] and the +emacspeak eterm pointer to a register." + (interactive "cCopy to register:") + (declare (special emacspeak-eterm-marker + emacspeak-eterm-pointer )) + (copy-to-register register + (marker-position emacspeak-eterm-marker) + (marker-position emacspeak-eterm-pointer) + nil) + (emacspeak-auditory-icon 'mark-object) + (message "Snarfed %s characters to register %c. " + (abs (- (marker-position emacspeak-eterm-marker ) + (marker-position emacspeak-eterm-pointer))) + register)) +(emacspeak-fix-interactive-command-if-necessary 'emacspeak-eterm-copy-region-to-register) +;;}}} +;;{{{ Defining and speaking terminal windows: + +;;; A window structure is of the form +;;; [column row right-stretch left-stretch ] + +(defsubst emacspeak-eterm-make-window (top-left bottom-right right-stretch left-stretch ) + (let ((win (make-vector 4 nil))) + (aset win 0 top-left ) + (aset win 1 bottom-right ) + (aset win 2 right-stretch ) + (aset win 3 left-stretch ) + win)) + + +(defsubst emacspeak-eterm-window-top-left (w) (aref w 0 )) +(defsubst emacspeak-eterm-window-bottom-right (w) (aref w 1 )) +(defsubst emacspeak-eterm-window-right-stretch (w) (aref w 2 )) +(defsubst emacspeak-eterm-window-left-stretch (w) (aref w 3 )) + +(defun emacspeak-eterm-coordinate-within-window-p (coordinate id ) + "Predicate to test if coordinate is within window " + (let* ((window (emacspeak-eterm-get-window id )) + (row (cdr coordinate)) + (column (car coordinate )) + (left-stretch (emacspeak-eterm-window-left-stretch window )) + (right-stretch (emacspeak-eterm-window-right-stretch window )) + (top-left-row (cdr + (emacspeak-eterm-window-top-left window ))) + (top-left-column (car + (emacspeak-eterm-window-top-left window))) + (bottom-right-row (cdr + (emacspeak-eterm-window-bottom-right window ))) + (bottom-right-column (car + (emacspeak-eterm-window-bottom-right window )))) +(not + (or (< row top-left-row ) + (> row bottom-right-row ) + (and (not left-stretch ) (< column top-left-column )) + (and (not right-stretch ) (> column bottom-right-column )))))) + +;;; Translate a screen position to a buffer position + +(defun emacspeak-eterm-coordinates-to-position (coordinates) + "Translate screen coordinates specified +as a cons cell (column . row ) to a buffer position in the eterm buffer" + (declare (special term-home-marker)) + (let ((column (car coordinates )) + (row (cdr coordinates ))) + (save-excursion + (save-restriction + (emacspeak-eterm-nuke-cached-info) + (narrow-to-region term-home-marker (point-max )) + (term-goto row column ) + (emacspeak-eterm-nuke-cached-info) + (point ))))) + +;;; Translate buffer position to screen coordinates. +;;; returns a cons cell (column . row ) +(defun emacspeak-eterm-position-to-coordinates (position) + "Translate a buffer position in the eterm buffer to screen coordinates" + (declare (special term-home-marker)) + (save-excursion + (save-restriction + (narrow-to-region term-home-marker (point-max )) + (goto-char position) + (emacspeak-eterm-nuke-cached-info) + (let ((coordinates (cons + (term-current-column) + (term-current-row )))) + (emacspeak-eterm-nuke-cached-info) + coordinates )))) + +;;; return contents of a term window +(defun emacspeak-eterm-return-window-contents (eterm-window) + "Return the contents of a window as a string" + (declare (special term-home-marker)) + (let ((start nil) + (end nil) + (right-stretch (emacspeak-eterm-window-right-stretch eterm-window)) + (left-stretch (emacspeak-eterm-window-left-stretch eterm-window)) + (contents nil) + (top-left + (emacspeak-eterm-window-top-left eterm-window)) + (bottom-right + (emacspeak-eterm-window-bottom-right eterm-window))) + (save-excursion + (save-restriction + (narrow-to-region term-home-marker (point-max)) + (setq start (emacspeak-eterm-coordinates-to-position top-left) + end (emacspeak-eterm-coordinates-to-position bottom-right)) + (setq contents + (cond + ((and left-stretch right-stretch );; stretchable window + (goto-char start ) + (beginning-of-line ) + (setq start (point)) + (goto-char end) + (end-of-line ) + (buffer-substring start (point))) + (right-stretch + (let ((lines nil)) + (goto-char start ) + (while (< start end ) + (end-of-line) + (push + (buffer-substring start (point)) + lines) + (forward-line 1) + (beginning-of-line) + (forward-char (car top-left)) + (setq start (point))) + (setq lines (nreverse lines )) + (mapconcat 'identity + lines " \n "))) + (left-stretch + (let ((lines nil)) + (goto-char start ) + (beginning-of-line) + (setq start (point)) + (while (< start end ) + (forward-char (car bottom-right )) + (push + (buffer-substring start (point )) + lines) + (forward-line 1) + (beginning-of-line) + (setq start (point))) + (setq lines (nreverse lines )) + (mapconcat 'identity + lines " \n "))) + (t (mapconcat 'identity + (extract-rectangle start end ) + " \n ")))) + (emacspeak-eterm-nuke-cached-info) + contents )))) + +(defvar emacspeak-eterm-maximum-windows 20 + "Variable specifying how many windows can be defined.") + +(defvar emacspeak-eterm-window-table + (make-vector emacspeak-eterm-maximum-windows nil) + "Vector of window positions. +A terminal window is recorded by the positions of its top left +and bottom right.") + +(defun emacspeak-eterm-record-window (window-id top-left bottom-right + &optional right-stretch left-stretch ) + "Insert this window definition into the table of +terminal windows" + (declare (special emacspeak-eterm-window-table + emacspeak-eterm-maximum-windows)) + (assert (< window-id emacspeak-eterm-maximum-windows) t + "Your installation of Emacspeak only supports %d windows" + emacspeak-eterm-maximum-windows ) + (aset emacspeak-eterm-window-table window-id + (emacspeak-eterm-make-window top-left bottom-right + right-stretch left-stretch))) + +(defun emacspeak-eterm-get-window (id) + "Retrieve a window" + (declare (special emacspeak-eterm-window-table + emacspeak-eterm-maximum-windows)) + (assert (< id emacspeak-eterm-maximum-windows) t + "Your installation of Emacspeak only supports %d windows" + emacspeak-eterm-maximum-windows ) + (or (aref emacspeak-eterm-window-table id) + (error "Window %s is not defined" id ))) + +(defun emacspeak-eterm-define-window (id) + "Prompt for a window id +and define it to be the rectangle delimited by point and eterm mark. +This is to be used when emacspeak is +set to review mode inside an eterm." + (interactive "nDefine window: ") + (declare (special emacspeak-eterm-marker emacspeak-eterm-pointer + emacspeak-eterm-maximum-windows)) + (assert (< id emacspeak-eterm-maximum-windows) t + "Your installation of Emacspeak only supports %d windows" + emacspeak-eterm-maximum-windows ) + (let ((top-left + (emacspeak-eterm-position-to-coordinates (marker-position emacspeak-eterm-marker))) + (bottom-right + (emacspeak-eterm-position-to-coordinates (marker-position + emacspeak-eterm-pointer))) + (right-stretch + (y-or-n-p "Should the window stretch to the right as required ")) + (left-stretch + (y-or-n-p "Should the window stretch to the left as required "))) + (emacspeak-eterm-record-window id top-left bottom-right + right-stretch left-stretch) + (message "Defined %s window %s +with top left at %s %s +and bottom right at %s %s" + (cond + ((and left-stretch right-stretch) + " stretchable ") + (left-stretch " left stretchable") + (right-stretch " right stretchable ") + (t " ")) + id (cdr top-left) (car top-left) + (cdr bottom-right) (car bottom-right )))) + +(emacspeak-fix-interactive-command-if-necessary 'emacspeak-eterm-define-window) + +(defun emacspeak-eterm-speak-window (id) + "Speak an eterm window. " + (interactive "nSpeak window") + (declare (special emacspeak-eterm-maximum-windows + term-home-marker )) + (assert (< id emacspeak-eterm-maximum-windows) t + "Your installation of Emacspeak only supports %d windows" + emacspeak-eterm-maximum-windows ) + (save-excursion + (save-restriction + (narrow-to-region term-home-marker (point-max )) + (dtk-speak + (emacspeak-eterm-return-window-contents + (emacspeak-eterm-get-window id )))))) + + + +(emacspeak-fix-interactive-command-if-necessary 'emacspeak-eterm-speak-window) +(defun emacspeak-eterm-yank-window (id) + "Yank contents of an eterm window +at point. " + (interactive "nYank contents of window") + (declare (special emacspeak-eterm-maximum-windows + term-home-marker )) + (assert (< id emacspeak-eterm-maximum-windows) t + "Your installation of Emacspeak only supports %d windows" + emacspeak-eterm-maximum-windows ) + (insert + (save-excursion + (save-restriction + (narrow-to-region term-home-marker (point-max )) + (emacspeak-eterm-return-window-contents + (emacspeak-eterm-get-window id ))))) + (emacspeak-auditory-icon 'yank-object) + (message "Yanked contents of window %s at point" id )) +(emacspeak-fix-interactive-command-if-necessary 'emacspeak-eterm-yank-window ) + + + +(defun emacspeak-eterm-describe-window (id) + "Describe an eterm window. +Description indicates eterm window coordinates and whether it is stretchable" + (interactive "nDescribe window: ") + (let* ((window (emacspeak-eterm-get-window id )) + (top-left (emacspeak-eterm-window-top-left window)) + (bottom-right (emacspeak-eterm-window-bottom-right window )) + (right-stretch (emacspeak-eterm-window-right-stretch window)) + (left-stretch (emacspeak-eterm-window-left-stretch window ))) + (message " %s window %s +has top left at %s %s +and bottom right at %s %s" + (cond + ((and left-stretch right-stretch) + " stretchable ") + (left-stretch " left stretchable") + (right-stretch " right stretchable ") + (t " ")) + id (cdr top-left) (car top-left) + (cdr bottom-right) (car bottom-right )))) + +(emacspeak-fix-interactive-command-if-necessary + 'emacspeak-eterm-describe-window) + + + + +(defvar emacspeak-eterm-focus-window nil + "Current window that emacspeak eterm focuses on") + +(defun emacspeak-eterm-set-focus-window (flag) + "Prompt for the id of a predefined window, +and set the `focus' window to it. +Non-nil interactive prefix arg `unsets' the focus window; +this is equivalent to having the entire terminal as the focus window (this is +what eterm starts up with). +Setting the focus window results in emacspeak only monitoring screen +activity in that area of the screen." + (interactive "P") + (declare (special emacspeak-eterm-focus-window )) + (let ((window-id nil)) + (cond + (flag (setq emacspeak-eterm-focus-window nil) + (message "Emacspeak eterm focus set to entire screen ")) + (t + (setq window-id + (read-minibuffer "Specify eterm window to focus on ")) + (assert (numberp window-id) t + "Please specify a valid window id, a non-negative integer ") + (setq emacspeak-eterm-focus-window window-id ) + (message "Set emacspeak eterm's focus window to %d " window-id ))))) + +(defun emacspeak-eterm-speak-predefined-window () + "Speak a predefined eterm window between 1 and 10." + (interactive) + (emacspeak-eterm-speak-window + (condition-case nil + (read (format "%c" last-input-event )) + (error nil )))) + +;;}}} +;;{{{ advice emulator + +(defvar eterm-current-personality nil + "Current personality for eterm. ") + +(defadvice term (before emacspeak pre act) +"Single window please!" +(delete-other-windows)) + +(defadvice term-mode (after emacspeak pre act ) + "Customize eterm to work with Emacspeak. +Additional commands provided by emacspeak under eterm are +available with the prefix emacspeak-eterm-prefix and are listed below: +\\{emacspeak-eterm-keymap}" + (declare (special emacspeak-eterm-pointer emacspeak-eterm-marker)) + (emacspeak-eterm-setup-keys ) + (emacspeak-eterm-setup-raw-keys) + (make-local-variable 'eterm-current-personality) + (setq eterm-current-personality 'eterm-default-personality) + (voice-lock-mode 1) + (make-local-variable 'emacspeak-eterm-pointer) + (setq emacspeak-eterm-pointer (copy-marker (point))) + (make-local-variable 'emacspeak-eterm-marker) + (setq emacspeak-eterm-marker (copy-marker (point)))) + +(defvar emacspeak-eterm-row nil + "Record the eterm row last spoken") + +(defvar emacspeak-eterm-column nil + "Record the column last spoken") + +(defvar emacspeak-eterm-pointer nil + "Terminal pointer. Can be moved around to listen to the contents of the +terminal. See commands provided by the emacspeak extension to eterm: +\\{emacspeak-eterm-keymap}. +Each term-mode buffer has a buffer local value of this variable. ") + +(defvar emacspeak-eterm-marker nil + "Mark set in an eterm buffer. Used to cut and paste from the terminal.") + +(defvar emacspeak-eterm-autospeak t + "Tells if eterm output is automatically spoken when in line mode. +Use command emacspeak-toggle-eterm-autospeak bound to +\\[emacspeak-toggle-eterm-autospeak] to set this.") + +(make-variable-buffer-local 'emacspeak-eterm-autospeak) + +(defun emacspeak-toggle-eterm-autospeak (&optional prefix) + "Toggle state of eterm autospeak. +When eterm autospeak is turned on and the terminal is in line mode, +all output to the terminal is automatically spoken. + Interactive prefix arg means toggle the global default value, and then set the + current local value to the result. " + (interactive "P") + (declare (special emacspeak-eterm-autospeak)) + (let ((dtk-stop-immediately nil )) + (cond + (prefix + (setq-default emacspeak-eterm-autospeak + (not (default-value 'emacspeak-eterm-autospeak ))) + (setq emacspeak-eterm-autospeak (default-value 'emacspeak-eterm-autospeak ))) + (t (setq emacspeak-eterm-autospeak + (not emacspeak-eterm-autospeak )))) + (message "Turned %s eterm autospeak %s" + (if emacspeak-eterm-autospeak "on" "off") + (if prefix "globally" "locally")) + (emacspeak-auditory-icon + (if emacspeak-eterm-autospeak 'on 'off)))) + +(defvar eterm-line-mode nil + "T if eterm is in line mode.") + +(defvar eterm-char-mode t + "Flag indicating if eterm is in char mode.") + + +(defvar emacspeak-eterm-pointer-mode t + "If T then the emacspeak pointer will not track the terminal cursor. +Do not set this by hand. +Use command emacspeak-eterm-toggle-pointer-mode bound to +\\[emacspeak-eterm-toggle-pointer-mode].") + + +(defadvice term-emulate-terminal (around emacspeak pre act compile ) + "Record position, emulate, then speak what happened. +Also keep track of terminal highlighting etc. +If a `current window` +is set (see command emacspeak-eterm-set-focus-window +bound to \\[emacspeak-eterm-set-focus-window]. +How output is spoken depends on whether the terminal is in +character or line mode. +When in character mode, output is spoken like off a real terminal. +When in line mode, +behavior resembles that of comint mode; +i.e. you hear the output if emacspeak-eterm-autospeak is t. +Do not set this variable by hand: +See command emacspeak-toggle-eterm-autospeak bound to +\\[emacspeak-toggle-eterm-autospeak]" + (declare (special emacspeak-eterm-row emacspeak-eterm-column + eterm-line-mode eterm-char-mode + emacspeak-eterm-focus-window emacspeak-eterm-pointer-mode + emacspeak-eterm-autospeak + term-current-row term-current-column)) + (let ((emacspeak-eterm-row (term-current-row )) + (emacspeak-eterm-column (term-current-column )) + (end (point-max)) + (current-char (preceding-char )) + (new-end nil) + (new-row nil) + (new-column nil ) + (old-point (point)) + (dtk-stop-immediately (not eterm-line-mode))) + (save-match-data + (ad-enable-advice 'put-text-property 'after 'eterm ) + (ad-activate-on 'put-text-property) + ad-do-it + (ad-disable-advice 'put-text-property 'after 'eterm ) + (ad-activate-off 'put-text-property)) + (setq new-row (term-current-row ) + new-column (term-current-column ) + new-end (point-max)) + (when (and + (window-live-p + (get-buffer-window (process-buffer (ad-get-arg 0)))) + (or (not emacspeak-eterm-focus-window ) + (and (emacspeak-eterm-coordinate-within-window-p + (cons new-column new-row ) + emacspeak-eterm-focus-window ) + (emacspeak-eterm-coordinate-within-window-p + (cons emacspeak-eterm-column emacspeak-eterm-row ) + emacspeak-eterm-focus-window )))) + (cond + ((and eterm-line-mode + emacspeak-eterm-autospeak) + (setq dtk-stop-immediately nil) + (emacspeak-dtk-sync) + (condition-case nil + (emacspeak-speak-region + (1- old-point) + (1- (point ))) + (error nil ))) + ((and (= last-input-event 127) + (= new-row emacspeak-eterm-row ) + (= -1 (- new-column emacspeak-eterm-column )) + current-char) ;you backspaced? + (emacspeak-speak-this-char current-char) + (delete-char 1) + (dtk-tone 500 50)) + ((and (= new-row emacspeak-eterm-row ) + (= 1 (- new-column emacspeak-eterm-column )) + (> new-end end )) ;you inserted a character: + (if (= 32 (preceding-char )) + (save-excursion + (backward-char 2) + (emacspeak-speak-word nil)) + (emacspeak-speak-this-char (preceding-char )))) + ((and (= new-row emacspeak-eterm-row ) + (= 1 (abs(- new-column emacspeak-eterm-column )))) + (emacspeak-speak-this-char (following-char ))) + ((= emacspeak-eterm-row new-row) + (emacspeak-speak-word )) + (t (emacspeak-speak-line nil ))) + (when (and (not emacspeak-eterm-pointer-mode ) + emacspeak-eterm-pointer) + (emacspeak-eterm-pointer-to-cursor))))) + + + + + + (defun emacspeak-eterm-toggle-pointer-mode (flag) + "Toggle emacspeak eterm pointer mode. +With optional interactive prefix arg, turn it on. +When emacspeak eterm is in pointer mode, the eterm read pointer +stays where it is rather than automatically moving to the terminal cursor when +there is terminal activity." + (interactive "P") + (declare (special emacspeak-eterm-pointer-mode )) + (cond + (flag (setq emacspeak-eterm-pointer-mode t )) + (t (setq emacspeak-eterm-pointer-mode + (not emacspeak-eterm-pointer-mode )))) + (message "Turned %s emacspeak eterm pointer mode" + (if emacspeak-eterm-pointer-mode + "on" "off"))) + + +(defadvice term-dynamic-complete (around emacspeak pre act) + "Speak the completion. " + (declare (special emacspeak-eterm-row term-current-row)) + (let ((saved-point (point))) + ad-do-it + (unless (= saved-point (point)) + (emacspeak-speak-region saved-point (point))) + ad-return-value ) + ) + +(defadvice put-text-property (after eterm pre act) + "Used by emacspeak to highlight successfully in eterm. " + (let ((start (ad-get-arg 0)) + (end (ad-get-arg 1 )) + (prop (ad-get-arg 2)) + (value (ad-get-arg 3 ))) + (if (eq prop 'face) + (save-match-data + (cond + ((eq value 'bold) + (put-text-property start end + 'personality 'eterm-bold-personality)) + ((eq value 'highlight) + (put-text-property start end + 'personality 'eterm-highlight-personality )) + ((eq value 'term-underline-face ) + (put-text-property start end + 'personality 'eterm-underline-personality)) + (t nil ))))) + ) + +(defadvice term-line-mode (after emacspeak pre act) + "Announce that you entered line mode. " + (declare (special eterm-char-mode eterm-line-mode)) + (make-local-variable 'eterm-line-mode) + (or (assq 'eterm-line-mode minor-mode-alist) + (setq minor-mode-alist + (append minor-mode-alist + '((eterm-line-mode " Line"))))) + (setq eterm-char-mode nil + eterm-line-mode t ) + (when (interactive-p) + (dtk-speak "Terminal line mode. ")) + ) + +(defadvice term-char-mode (after emacspeak pre act) + "Announce you entered character mode. " + (declare (special eterm-char-mode eterm-line-mode)) + (make-local-variable'term-char-mode) + (or (assq 'eterm-char-mode minor-mode-alist) + (setq minor-mode-alist + (append minor-mode-alist + '((eterm-char-mode " Character"))))) + (setq eterm-char-mode t + eterm-line-mode nil ) + (emacspeak-eterm-setup-raw-keys) + (when (interactive-p) + (dtk-speak "Terminal character mode. ")) + ) + +;;}}} +;;{{{ Advice term functions that duplicate functionality of their comint + +counterparts + +(defadvice term-next-input (after emacspeak pre act) + "Speak the line. " + (when (interactive-p) + (emacspeak-speak-line ))) + +(defadvice term-next-matching-input (after emacspeak pre act) + "Speak the line. " + (when (interactive-p) + (emacspeak-speak-line ))) + + +(defadvice term-previous-input (after emacspeak pre act) + "Speak the line. " + (when (interactive-p) + (emacspeak-speak-line ))) + +(defadvice term-previous-matching-input (after emacspeak pre act) + "Speak the line. " + (when (interactive-p) + (emacspeak-speak-line ))) + +(defadvice term-send-input (after emacspeak pre act) + "Flush any ongoing speech" + (when (interactive-p) + (dtk-stop))) + +(defadvice term-previous-prompt (after emacspeak pre act ) + "Provide spoken feedback" + (when (interactive-p) + (emacspeak-auditory-icon 'large-movement) + (if (eolp) + (emacspeak-speak-line) + (emacspeak-speak-line 1)))) + +(defadvice term-next-prompt (after emacspeak pre act ) + "Provide spoken feedback" + (when (interactive-p) + (emacspeak-auditory-icon 'large-movement) + (if (eolp) + (emacspeak-speak-line) + (emacspeak-speak-line 1)))) +(defadvice term-dynamic-list-input-ring (after emacspeak pre act) + "Provide auditory feedback" + (message "Switch to the other window to browse the input history. ")) + +(defadvice term-kill-output (after emacspeak pre act ) + "Provide auditory feedback" + (when (interactive-p) + (emacspeak-auditory-icon 'delete-object) + (message "Nuked output of last command "))) + +(defadvice term-quit-subjob (after emacspeak pre act ) + "Provide auditory feedback" + (when (interactive-p) + (message "Sent quit signal to subjob "))) + +(defadvice term-stop-subjob (after emacspeak pre act ) + "Provide auditory feedback" + (when (interactive-p) + (message "Stopped the subjob"))) + +(defadvice term-interrupt-subjob (after emacspeak pre act ) + "Provide auditory feedback" + (when (interactive-p) + (message "Interrupted the subjob"))) + +(defadvice term-kill-input (before emacspeak pre act ) + "Provide spoken feedback" + (when (interactive-p) + (let ((pmark (process-mark (get-buffer-process (current-buffer))))) + (when (> (point) (marker-position pmark)) + (emacspeak-auditory-icon 'delete-object ) + (emacspeak-speak-region pmark (point)))))) + +(defadvice term-dynamic-list-filename-completions (after emacspeak pre act ) + "Provide auditory feedback" + (when (interactive-p) + (message "Switch to the completions window to browse the possible +completions for filename at point"))) + +;;}}} +;;{{{ Launch remote terminals + +(defun emacspeak-remote-term (host ) + "Start a terminal-emulator in a new buffer." + (interactive "sEnter remote host name: ") + (require 'term) + (require 'tshell) + (set-buffer (make-term (format "%s-terminal" host) + "rlogin"nil host)) + (tshell-mode) + (term-char-mode) + (switch-to-buffer (format "*%s-terminal*" host) )) + + (emacspeak-fix-interactive-command-if-necessary 'emacspeak-remote-term) + + +;;}}} + (provide 'emacspeak-eterm) +;;{{{ emacs local variables + +;;; local variables: +;;; folded-file: t +;;; end: + +;;}}} diff -uNr ../emacspeak-6.0.orig/info/Makefile ./info/Makefile --- ../emacspeak-6.0.orig/info/Makefile Mon May 5 13:59:32 1997 +++ ./info/Makefile Sun Jun 1 13:29:54 1997 @@ -4,6 +4,11 @@ infodir =/usr/info#normally supplied by caller INSTALL = install +docs: emacspeak.html info + +emacspeak.html: emacspeak-main.texinfo + texi2html -monolithic emacspeak.texinfo + info: emacspeak.texinfo emacspeak-main.texinfo makeinfo emacspeak.texinfo install: emacspeak.info diff -uNr ../emacspeak-6.0.orig/info/Makefile.orig ./info/Makefile.orig --- ../emacspeak-6.0.orig/info/Makefile.orig Wed Dec 31 19:00:00 1969 +++ ./info/Makefile.orig Mon May 5 13:59:32 1997 @@ -0,0 +1,126 @@ +PERL = perl +TEXINDEX=texindex +MAKEINFO = makeinfo +infodir =/usr/info#normally supplied by caller +INSTALL = install + +info: emacspeak.texinfo emacspeak-main.texinfo + makeinfo emacspeak.texinfo +install: emacspeak.info + if test ! -f $(infodir)/dir ; then \ + echo ' --- PLEASE ADD DOCUMENTATION TO THIS TREE. (See INFO topic first.) ---' >$(infodir)/dir ; \ + echo '* Menu:' >>$(infodir)/dir ; \ + fi + if fgrep emacspeak $(infodir)/dir 1> /dev/null 2> /dev/null; then \ + echo >/dev/null; \ + else \ + echo '* Emacspeak:(emacspeak). A speech interface to Emacs' >>$(infodir)/dir ;\ + fi + $(INSTALL) -m 644 emacspeak.info* $(infodir) + +emacspeak.info: emacspeak.texinfo emacspeak-main.texinfo + $(MAKEINFO) emacspeak.texinfo + +emacspeak-main.texinfo: all.el explain + $(PERL) explain all.el >all.log + +ELISP=../*.el + +# all.el is all of the elisp files concatenated (with some substitutions) +all.el: $(ELISP) + cat $(ELISP) | sed \ + -e 's/\\\\\[dtk-emergency-restart\]/@samp{M-x dtk-emergency-restart}/'\ + -e 's/\\\\\[dtk-initialize\]/@samp{M-x dtk-initialize}/' \ + -e 's/\\\\\[keyboard-quit\]/@samp{C-g}/' \ + -e 's/\\\\\[yank\]/@samp{C-y}/' \ + -e 's/\\\\\[yank-pop\]/@samp{ESC y}/' \ + -e 's/\\\\\[voice-lock-voiceify-buffer\]/@samp{M-x voice-lock-voiceify-buffer}/' \ + > all.el + +SRC= emacspeak.texinfo explain Makefile + +dist: $(SRC) + distname=`sed -e '/\$Revision:/!d' \ + -e 's/[^0-9]*\([0-9.]*\).*/emacspeak-texi-\1/' \ + -e q emacspeak.texinfo`; \ + rm -fr $$distname; \ + mkdir $$distname; \ + for file in $(SRC); do \ + ln $$file $$distname/$$file \ + || { echo copying $$file instead; cp -p $$file $$distname/$$file;}; \ + done; \ + chmod -R a+rX $$distname; \ + tar -chz -f $$distname.tar.gz $$distname; \ + rm -fr $$distname + +TEXINFO = dtk-speak.texinfo \ +dtk-tcl.texinfo \ +emacspeak-advice.texinfo \ +emacspeak-auctex.texinfo \ +emacspeak-bbdb.texinfo \ +emacspeak-bibtex.texinfo \ +emacspeak-buff-sel.texinfo \ +emacspeak-c.texinfo \ +emacspeak-calc.texinfo \ +emacspeak-calendar.texinfo \ +emacspeak-compile.texinfo \ +emacspeak-dired.texinfo \ +emacspeak-dismal.texinfo \ +emacspeak-dmacro.texinfo \ +emacspeak-ediff.texinfo \ +emacspeak-enriched.texinfo \ +emacspeak-eterm.texinfo \ +emacspeak-fix-interactive.texinfo \ +emacspeak-folding.texinfo \ +emacspeak-forms.texinfo \ +emacspeak-gnus.texinfo \ +emacspeak-hyperbole.texinfo \ +emacspeak-info.texinfo \ +emacspeak-keymap.texinfo \ +emacspeak-kotl.texinfo \ +emacspeak-main.texinfo \ +emacspeak-man.texinfo \ +emacspeak-message.texinfo \ +emacspeak-new-ediff.texinfo \ +emacspeak-oo-browser.texinfo \ +emacspeak-outline.texinfo \ +emacspeak-perl.texinfo \ +emacspeak-pronounce.texinfo \ +emacspeak-redefine.texinfo \ +emacspeak-rmail.texinfo \ +emacspeak-sgml-mode.texinfo \ +emacspeak-sounds.texinfo \ +emacspeak-speak.texinfo \ +emacspeak-table-ui.texinfo \ +emacspeak-tabulate.texinfo \ +emacspeak-tapestry.texinfo \ +emacspeak-tcl.texinfo \ +emacspeak-tempo.texinfo \ +emacspeak-view-process.texinfo \ +emacspeak-view.texinfo \ +emacspeak-vm.texinfo \ +emacspeak-w3.texinfo \ +emacspeak-widget.texinfo \ +emacspeak-wrolo.texinfo \ +variables.texinfo \ +voice-lock.texinfo + + +clean: + rm -rf all.el all.log $(TEXINFO) + +veryclean: clean + rm -rf emacspeak.info* + + +emacspeak.dvi: emacspeak.texinfo + tex emacspeak.texinfo + $(TEXINDEX) emacspeak.cp emacspeak.fn emacspeak.ky emacspeak.pg emacspeak.tp emacspeak.vr + tex emacspeak.texinfo + rm -f emacspeak.cp emacspeak.fn emacspeak.ky emacspeak.pg emacspeak.tp emacspeak.vr \ + emacspeak.cps emacspeak.fns emacspeak.kys emacspeak.pgs emacspeak.tps emacspeak.vrs \ + emacspeak.log emacspeak.toc emacspeak.aux + +print: emacspeak.dvi + dvips emacspeak.dvi +