Changes for Emacs version 19.10, from 19.9. This excludes the files lisp/*.elc, src/TAGS, info/emacs*, man/emacs.aux and man/emacs.??s, since you can reconstruct those files automatically. Be sure to recompile the changed .el files with M-x byte-recompile-dircetory before you build Emacs 19.10. Before applying these patches, execute the following commands: rm etc/xmouse.doc rm lisp/iso8859-1.el rm lisp/superyank.el rmdir local-lisp rm src/bitmaps/cntr_ptr.xbm rm src/bitmaps/cntr_ptrmsk.xbm rm src/bitmaps/cross_weave.xbm rm src/bitmaps/left_ptr.xbm rm src/bitmaps/left_ptrmsk.xbm rm src/bitmaps/right_ptr.xbm rm src/bitmaps/right_ptrmsk.xbm rm src/fields.c diff -rc2P --exclude-from=exceptions emacs-19.9/ChangeLog emacs-19.10/ChangeLog *** emacs-19.9/ChangeLog Thu May 27 02:39:54 1993 --- emacs-19.10/ChangeLog Sun May 30 00:19:56 1993 *************** *** 1,2 **** --- 1,74 ---- + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.10 released. + + Sat May 29 16:52:24 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Makefile.in: Use Makefile comments, not C comments. + + * configure.in: Add case for the Tektronix XD88. + + Sat May 29 16:30:13 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in: Handle sysv4.2 and sysvr4.2. + + Sat May 29 15:30:00 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * configure.in: Traverse the argument list without destroying it; + don't use shift. It turns out that "set - ${saved_arguments}" + doesn't work portably. + + * configure.in: Add missing "fi". + + * make-dist: Rebuild configure if configure.in is newer. + + * Makefile.in (src:, lib-src:, FRC:): force the src and lib-src + targets to be executed even if make remembers that it has already + stisfied FRC. + + Sat May 29 02:09:15 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile.in (do-install): Delete redundant code to copy etc twice. + + * configure.in (romp): Handle various version numbers with aos and bsd. + + Fri May 28 17:02:59 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in: Fix message text. + + Fri May 28 00:31:48 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * make-dist: Make a `site-lisp' directory in the distribution, + instead of a `local-lisp' directory, which hasn't been the + appropriate name for a long time. + * Makefile.in (@rip_paths@locallisppath): Use site-lisp directory + from the distribution first, then /usr/local/lib/emacs/site-lisp. + + * Makefile.in (do-install): Correctly detect if ./etc and + ${srcdir}/etc are the same. + + * configure.in: Extract UNEXEC from the system configuration + files, compute the name of the source file corresponding to the + object file, and #define it as UNEXEC_SRC in config.h. + + * configure.in: If srcdir is '.', then try using PWD to make it + absolute. + + * configure.in: Include ${srcdir} in the printed report, to help + people notice if it's an automounter path. + + Thu May 27 23:23:58 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * configure.in (prefix): Don't run pwd on srcdir unnecessarily. + + Thu May 27 18:01:54 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile.in (do-install): Delete the dest dir, not the source dir, + when they are different. Add `shift' command. + (COPYDESTS, COPYDIR): Delete external-lisp dir. + (externallispdir): Var deleted. + + * configure.in: Delete spurious paren outputting short_usage. + Thu May 27 02:35:32 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) diff -rc2P --exclude-from=exceptions emacs-19.9/Makefile.in emacs-19.10/Makefile.in *** emacs-19.9/Makefile.in Wed May 26 22:26:13 1993 --- emacs-19.10/Makefile.in Sat May 29 17:10:53 1993 *************** *** 115,125 **** @inst_paths@lispdir=${datadir}/emacs/${version}/lisp - @inst_paths@# Where to install the lisp files which are distributed - @inst_paths@# with Emacs but not maintained by the FSF. This - @inst_paths@# includes the Emacs version, so that the lisp files for - @inst_paths@# different versions of Emacs will install themselves in - @inst_paths@# separate directories. - @inst_paths@externallispdir=${datadir}/emacs/${version}/external-lisp - @inst_paths@# Directories Emacs should search for lisp files specific @inst_paths@# to this site (i.e. customizations), before consulting --- 115,118 ---- *************** *** 174,178 **** @rip_paths@lispdir=${srcdir}/lisp @rip_paths@externallispdir=${srcdir}/externallisp ! @rip_paths@locallisppath=${datadir}/emacs/site-lisp @rip_paths@etcdir=${srcdir}/etc @rip_paths@lockdir=${srcdir}/lock --- 167,171 ---- @rip_paths@lispdir=${srcdir}/lisp @rip_paths@externallispdir=${srcdir}/externallisp ! @rip_paths@locallisppath=${srcdir}/site-lisp:${datadir}/emacs/site-lisp @rip_paths@etcdir=${srcdir}/etc @rip_paths@lockdir=${srcdir}/lock *************** *** 205,210 **** # avoid nuking an existing dir file, so we don't do that here; # instead, we have written out explicit code in the `install' targets. ! COPYDIR = ${srcdir}/etc ${srcdir}/lisp ${srcdir}/external-lisp ! COPYDESTS = ${etcdir} ${lispdir} ${externallispdir} all: src/paths.h ${SUBDIR} --- 198,203 ---- # avoid nuking an existing dir file, so we don't do that here; # instead, we have written out explicit code in the `install' targets. ! COPYDIR = ${srcdir}/etc ${srcdir}/lisp ! COPYDESTS = ${etcdir} ${lispdir} all: src/paths.h ${SUBDIR} *************** *** 218,222 **** # src/paths.h.tmp, which isn't much. # Note that sed is not in /bin on 386bsd. ! src/paths.h: Makefile ${srcdir}/src/paths.h.in FRC @echo "Producing \`src/paths.h' from \`src/paths.h.in'." @(lisppath=`echo ${lisppath} | ${removenullpaths}` ; \ --- 211,215 ---- # src/paths.h.tmp, which isn't much. # Note that sed is not in /bin on 386bsd. ! src/paths.h: Makefile ${srcdir}/src/paths.h.in FRC.src.paths.h @echo "Producing \`src/paths.h' from \`src/paths.h.in'." @(lisppath=`echo ${lisppath} | ${removenullpaths}` ; \ *************** *** 231,235 **** @${srcdir}/move-if-change src/paths.h.tmp src/paths.h ! src: lib-src .RECURSIVE: ${SUBDIR} --- 224,229 ---- @${srcdir}/move-if-change src/paths.h.tmp src/paths.h ! src: lib-src FRC.src ! lib-src: FRC.lib-src .RECURSIVE: ${SUBDIR} *************** *** 333,338 **** for dir in ${COPYDIR} ; do \ if [ `(cd $$1 ; pwd)` != `(cd $${dir} ; pwd)` ] ; then \ ! rm -rf $${dir} ; \ fi ; \ done -set ${COPYDESTS} ; \ --- 327,333 ---- for dir in ${COPYDIR} ; do \ if [ `(cd $$1 ; pwd)` != `(cd $${dir} ; pwd)` ] ; then \ ! rm -rf $$1 ; \ fi ; \ + shift ; \ done -set ${COPYDESTS} ; \ *************** *** 351,363 **** done) ; \ done - -[ `(cd etc; /bin/pwd)` != `(cd ${etcdir}; /bin/pwd)` ] \ - && (echo "Copying ./etc..." ; \ - (cd ./etc; tar cf - . )|(cd ${etcdir}; umask 0; tar xvf - ); \ - for subdir in `find ${etcdir} -type d ! -name RCS -print` ; do \ - rm -rf $${subdir}/RCS ; \ - rm -rf $${subdir}/CVS ; \ - rm -f $${subdir}/\#* ; \ - rm -f $${subdir}/*~ ; \ - done) -[ `(cd ${srcdir}/info; /bin/pwd)` != `(cd ${infodir}; /bin/pwd)` ] \ && (cd ${srcdir}/info ; \ --- 346,349 ---- *************** *** 380,384 **** ### /usr/local/lib/emacs/19.0/mips-dec-ultrix4.2), we use make-path ### instead of mkdir. Not all systems' mkdirs have the `-p' flag. ! mkdir: FRC ./lib-src/make-path ${COPYDESTS} ${lockdir} ${infodir} ${mandir} \ ${bindir} ${datadir} ${libdir} \ --- 366,370 ---- ### /usr/local/lib/emacs/19.0/mips-dec-ultrix4.2), we use make-path ### instead of mkdir. Not all systems' mkdirs have the `-p' flag. ! mkdir: FRC.mkdir ./lib-src/make-path ${COPYDESTS} ${lockdir} ${infodir} ${mandir} \ ${bindir} ${datadir} ${libdir} \ *************** *** 386,390 **** chmod 777 ${COPYDESTS} ${lockdir} ! FRC: --- 372,378 ---- chmod 777 ${COPYDESTS} ${lockdir} ! ### Some makes seem to remember that they've built something called FRC, ! ### so you can only use a given FRC once per makefile. ! FRC FRC.src.paths.h FRC.src FRC.lib-src FRC.mkdir: diff -rc2P --exclude-from=exceptions emacs-19.9/README emacs-19.10/README *** emacs-19.9/README Thu May 27 02:45:06 1993 --- emacs-19.10/README Sun May 30 02:13:50 1993 *************** *** 1,3 **** ! This directory tree holds version 19.9 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. --- 1,3 ---- ! This directory tree holds version 19.10 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. diff -rc2P --exclude-from=exceptions emacs-19.9/configure emacs-19.10/configure *** emacs-19.9/configure Tue May 25 10:16:11 1993 --- emacs-19.10/configure Sat May 29 17:07:26 1993 *************** *** 64,70 **** CONFIGURATION specifies the machine and operating system to build for. --with-x Support the X Window System. ! --with-x=no Don't support the X Window System. ! --x-includes=DIR Search for X Window System header files in DIR. ! --x-libraries=DIR Search for X Window System libraries in DIR. --with-gcc Use GCC to compile Emacs. --with-gcc=no Don't use GCC to compile Emacs. --- 64,70 ---- CONFIGURATION specifies the machine and operating system to build for. --with-x Support the X Window System. ! --with-x=no Don't support X. ! --x-includes=DIR Search for X header files in DIR. ! --x-libraries=DIR Search for X libraries in DIR. --with-gcc Use GCC to compile Emacs. --with-gcc=no Don't use GCC to compile Emacs. *************** *** 93,98 **** exec_prefix='${prefix}' ! while [ $# != 0 ]; do ! arg="$1" case "${arg}" in --- 93,103 ---- exec_prefix='${prefix}' ! ### Don't use shift -- that destroys the argument list, which autoconf needs ! ### to produce config.status. It turns out that "set - ${arguments}" doesn't ! ### work portably. ! index=0 ! while [ $index -lt $# ]; do ! index=`expr $index + 1` ! arg=`eval echo '$'$index` case "${arg}" in *************** *** 141,145 **** ## Has the user specified whether or not they want GCC? ! "with_gcc" ) ## Make sure the value given was either "yes" or "no". case "${val}" in --- 146,150 ---- ## Has the user specified whether or not they want GCC? ! "with_gcc" | "with_gnu_cc" ) ## Make sure the value given was either "yes" or "no". case "${val}" in *************** *** 161,165 **** if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $# = 1 ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." --- 166,170 ---- if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $index = $# ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." *************** *** 167,171 **** exit 1 fi ! shift; val="$1" fi srcdir="${val}" --- 172,177 ---- exit 1 fi ! index=`expr $index + 1` ! val=`eval echo '$'$index` fi srcdir="${val}" *************** *** 180,184 **** if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $# = 1 ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." --- 186,190 ---- if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $index = $# ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." *************** *** 186,190 **** exit 1 fi ! shift; val="$1" fi x_includes="${val}" --- 192,197 ---- exit 1 fi ! index=`expr $index + 1` ! val=`eval echo '$'$index` fi x_includes="${val}" *************** *** 195,199 **** if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $# = 1 ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." --- 202,206 ---- if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $index = $# ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." *************** *** 201,205 **** exit 1 fi ! shift; val="$1" fi x_libraries="${val}" --- 208,213 ---- exit 1 fi ! index=`expr $index + 1` ! val=`eval echo '$'$index` fi x_libraries="${val}" *************** *** 218,222 **** if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $# = 1 ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." --- 226,230 ---- if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $index = $# ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." *************** *** 224,228 **** exit 1 fi ! shift; val="$1" fi prefix="${val}" --- 232,237 ---- exit 1 fi ! index=`expr $index + 1` ! val=`eval echo '$'$index` fi prefix="${val}" *************** *** 234,238 **** if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $# = 1 ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." --- 243,247 ---- if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $index = $# ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." *************** *** 240,244 **** exit 1 fi ! shift; val="$1" fi exec_prefix="${val}" --- 249,254 ---- exit 1 fi ! index=`expr $index + 1` ! val=`eval echo '$'$index` fi exec_prefix="${val}" *************** *** 262,275 **** esac - shift done if [ "${configuration}" = "" ]; then ! (echo "${progname}: You must specify a configuration name as an argument." ! echo "${short_usage}") >&2 ! exit 1 fi - #### Decide where the source is. case "${srcdir}" in --- 272,290 ---- esac done if [ "${configuration}" = "" ]; then ! echo '- You did not tell me what kind of host system you want to configure. ! - I will attempt to guess the kind of system this is.' 1>&2 ! guesssys=`echo ${progname} | sed 's/configure$/config.guess/'` ! if configuration=`${guesssys}` ; then ! echo "- Looks like this is a ${configuration}" 1>&2 ! else ! echo '- Failed to guess the system type. You need to tell me.' 1>&2 ! echo "${short_usage}" >&2 ! exit 1 ! fi fi #### Decide where the source is. case "${srcdir}" in *************** *** 279,289 **** confdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'` if [ -f $confdir/src/lisp.h -a -f $confdir/lisp/version.el ]; then ! srcdir=`(cd $confdir ; pwd)` else if [ -f "./src/lisp.h" -a -f "./lisp/version.el" ]; then ! srcdir=`pwd` else if [ -f "../src/lisp.h" -a -f "../lisp/version.el" ]; then ! srcdir=`(cd .. ; pwd)` else (echo "\ --- 294,304 ---- confdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'` if [ -f $confdir/src/lisp.h -a -f $confdir/lisp/version.el ]; then ! srcdir="${confdir}" else if [ -f "./src/lisp.h" -a -f "./lisp/version.el" ]; then ! srcdir=`.` else if [ -f "../src/lisp.h" -a -f "../lisp/version.el" ]; then ! srcdir=`..` else (echo "\ *************** *** 302,306 **** ## Otherwise, check if the directory they specified is okay. * ) - srcdir=`(cd ${srcdir}; pwd)` if [ ! -d "${srcdir}" -o ! -f "${srcdir}/src/lisp.h" -o ! -f "${srcdir}/lisp/version.el" ]; then (echo "\ --- 317,320 ---- *************** *** 314,320 **** --- 328,351 ---- fi ;; + esac + #### Make srcdir absolute, if it isn't already. It's important to + #### avoid running the path through pwd unnecessary, since pwd can + #### give you automounter prefixes, which can go away. + case "${srcdir}" in + /* ) ;; + . ) + ## We may be able to use the $PWD environment variable to make this + ## absolute. But sometimes PWD is inaccurate. + if [ "${PWD}" != "" ] && [ "`(cd ${PWD} ; pwd)`" = "`pwd`" ] ; then + srcdir="$PWD" + else + srcdir="`(cd ${srcdir}; pwd)`" + fi + ;; + * ) srcdir="`(cd ${srcdir}; pwd)`" ;; esac + ### Make the necessary directories, if they don't exist. if [ ! -d ./src ]; then *************** *** 512,525 **** ## HP 9000 series 700 and 800, running HP/UX hppa1.0-hp-hpux* ) ! machine=hp9000s800 opsys=hpux.h ;; hppa1.1-hp-hpux* ) ! machine=hp9000s800 opsys=hpux8.h ;; hppa*-hp-hpux* ) ## Cross-compilation? Nah! ! case "`uname -m`" in ! 9000/8?? ) machine=hp9000s800 opsys=hpux.h ;; ! 9000/7?? ) machine=hp9000s800 opsys=hpux8.h ;; esac ;; --- 543,557 ---- ## HP 9000 series 700 and 800, running HP/UX hppa1.0-hp-hpux* ) ! machine=hp9000s800 opsys=hpux ;; hppa1.1-hp-hpux* ) ! machine=hp9000s800 opsys=hpux8 ;; hppa*-hp-hpux* ) ## Cross-compilation? Nah! ! case "`uname -r`" in ! *.08.* ) machine=hp9000s800 opsys=hpux ;; ! *.09.* ) machine=hp9000s800 opsys=hpux8 ;; ! *) machine=hp9000s800 opsys=hpux ;; esac ;; *************** *** 546,552 **** machine=ibmrs6000 opsys=aix3-2 ;; ! romp-ibm-bsd* ) machine=ibmrt opsys=bsd4-2 ;; romp-ibm-aix* ) machine=ibmrt-aix opsys=usg5-2-2 --- 578,599 ---- machine=ibmrs6000 opsys=aix3-2 ;; ! romp-ibm-bsd4-3 ) ! machine=ibmrt opsys=bsd4-3 ! ;; ! romp-ibm-bsd4-2 ) machine=ibmrt opsys=bsd4-2 ;; + romp-ibm-aos4-3 ) + machine=ibmrt opsys=bsd4-3 + ;; + romp-ibm-aos4-2 ) + machine=ibmrt opsys=bsd4-2 + ;; + romp-ibm-aos* ) + machine=ibmrt opsys=bsd4-3 + ;; + romp-ibm-bsd* ) + machine=ibmrt opsys=bsd4-3 + ;; romp-ibm-aix* ) machine=ibmrt-aix opsys=usg5-2-2 *************** *** 718,721 **** --- 765,769 ---- case "${configuration}" in *-sunos4.0* ) opsys=sunos4-0 ;; + *-sunos4.1.3* ) opsys=sunos4-1-3 ;; *-sunos4* | *-sunos ) opsys=sunos4-1 ;; *-sunos5* | *-solaris* ) opsys=sol2 ;; *************** *** 742,745 **** --- 790,798 ---- ;; + ## Tektronix XD88 + m88k-tektronix-sysv3 ) + machine=tekXD88 opsys=usg5-3 + ;; + ## Tektronix 16000 box (6130?) ns16k-tektronix-bsd* ) *************** *** 810,813 **** --- 863,867 ---- *-sysv3 | *-sysvr3 ) opsys=usg5-3 ;; *-sysv4 | *-sysvr4 ) opsys=usg5-4 ;; + *-sysv4.2 | *-sysvr4.2 ) opsys=usg5-4-2 ;; * ) unported=true *************** *** 1552,1556 **** "none" | "x11" | "x10" ) ;; "" ) ! echo " No window system specifed. Looking for X Windows." window_system=none if [ -r /usr/lib/libX11.a \ --- 1606,1610 ---- "none" | "x11" | "x10" ) ;; "" ) ! echo " No window system specifed. Looking for X11." window_system=none if [ -r /usr/lib/libX11.a \ *************** *** 1562,1566 **** ;; * ) ! echo "Don\'t specify the window system more than once." >&2 exit 1 ;; --- 1616,1620 ---- ;; * ) ! echo "Don't specify the window system more than once." >&2 exit 1 ;; *************** *** 1657,1660 **** --- 1711,1721 ---- @configure@ libsrc_libs=LIBS_MACHINE LIBS_SYSTEM @configure@ c_switch_system=C_SWITCH_SYSTEM + + #ifdef UNEXEC + @configure@ unexec=UNEXEC + #else + @configure@ unexec=unexec.o + #endif + #ifdef SYSTEM_MALLOC @configure@ system_malloc=yes *************** *** 1671,1674 **** --- 1732,1737 ---- rm ${tempcname} + ### Compute the unexec source name from the object name. + UNEXEC_SRC="`echo ${unexec} | sed 's/\.o/.c/'`" # Do the opsystem or machine files prohibit the use of the GNU malloc? *************** *** 1753,1756 **** --- 1816,1829 ---- } + { + test -n "$verbose" && \ + echo ' defining' UNEXEC_SRC to be '${UNEXEC_SRC}' + DEFS="$DEFS -DUNEXEC_SRC=${UNEXEC_SRC}" + SEDDEFS="${SEDDEFS}\${SEDdA}UNEXEC_SRC\${SEDdB}UNEXEC_SRC\${SEDdC}${UNEXEC_SRC}\${SEDdD} + \${SEDuA}UNEXEC_SRC\${SEDuB}UNEXEC_SRC\${SEDuC}${UNEXEC_SRC}\${SEDuD} + \${SEDeA}UNEXEC_SRC\${SEDeB}UNEXEC_SRC\${SEDeC}${UNEXEC_SRC}\${SEDeD} + " + } + *************** *** 1846,1849 **** --- 1919,1923 ---- Configured for \`${configuration}'. + Where should the build process find the source code? ${srcdir} What operating system and machine description files should Emacs use? \`${opsysfile}' and \`${machfile}' *************** *** 1856,1863 **** " - - ### Restore the arguments to this script, so autoconf can record them - ### in the config.status file. - set - ${arguments} if test -n "$prefix"; then --- 1930,1933 ---- diff -rc2P --exclude-from=exceptions emacs-19.9/configure.in emacs-19.10/configure.in *** emacs-19.9/configure.in Wed May 26 17:33:09 1993 --- emacs-19.10/configure.in Sat May 29 16:56:31 1993 *************** *** 101,106 **** exec_prefix='${prefix}' ! while [ $# != 0 ]; do ! arg="$1" case "${arg}" in --- 101,111 ---- exec_prefix='${prefix}' ! ### Don't use shift -- that destroys the argument list, which autoconf needs ! ### to produce config.status. It turns out that "set - ${arguments}" doesn't ! ### work portably. ! index=0 ! while [ $index -lt $# ]; do ! index=`expr $index + 1` ! arg=`eval echo '$'$index` case "${arg}" in *************** *** 169,173 **** if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $# = 1 ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." --- 174,178 ---- if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $index = $# ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." *************** *** 175,179 **** exit 1 fi ! shift; val="$1" fi srcdir="${val}" --- 180,185 ---- exit 1 fi ! index=`expr $index + 1` ! val=`eval echo '$'$index` fi srcdir="${val}" *************** *** 188,192 **** if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $# = 1 ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." --- 194,198 ---- if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $index = $# ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." *************** *** 194,198 **** exit 1 fi ! shift; val="$1" fi x_includes="${val}" --- 200,205 ---- exit 1 fi ! index=`expr $index + 1` ! val=`eval echo '$'$index` fi x_includes="${val}" *************** *** 203,207 **** if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $# = 1 ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." --- 210,214 ---- if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $index = $# ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." *************** *** 209,213 **** exit 1 fi ! shift; val="$1" fi x_libraries="${val}" --- 216,221 ---- exit 1 fi ! index=`expr $index + 1` ! val=`eval echo '$'$index` fi x_libraries="${val}" *************** *** 226,230 **** if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $# = 1 ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." --- 234,238 ---- if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $index = $# ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." *************** *** 232,236 **** exit 1 fi ! shift; val="$1" fi prefix="${val}" --- 240,245 ---- exit 1 fi ! index=`expr $index + 1` ! val=`eval echo '$'$index` fi prefix="${val}" *************** *** 242,246 **** if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $# = 1 ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." --- 251,255 ---- if [ "${valomitted}" = "yes" ]; then ## Get the next argument from the argument list, if there is one. ! if [ $index = $# ]; then (echo "${progname}: You must give a value for the \`--${optname}' option, as in \`--${optname}=FOO'." *************** *** 248,252 **** exit 1 fi ! shift; val="$1" fi exec_prefix="${val}" --- 257,262 ---- exit 1 fi ! index=`expr $index + 1` ! val=`eval echo '$'$index` fi exec_prefix="${val}" *************** *** 270,274 **** esac - shift done --- 280,283 ---- *************** *** 281,285 **** else echo '- Failed to guess the system type. You need to tell me.' 1>&2 ! echo "${short_usage}") >&2 exit 1 fi --- 290,294 ---- else echo '- Failed to guess the system type. You need to tell me.' 1>&2 ! echo "${short_usage}" >&2 exit 1 fi *************** *** 293,303 **** confdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'` if [ -f $confdir/src/lisp.h -a -f $confdir/lisp/version.el ]; then ! srcdir=`(cd $confdir ; pwd)` else if [ -f "./src/lisp.h" -a -f "./lisp/version.el" ]; then ! srcdir=`pwd` else if [ -f "../src/lisp.h" -a -f "../lisp/version.el" ]; then ! srcdir=`(cd .. ; pwd)` else (echo "\ --- 302,312 ---- confdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'` if [ -f $confdir/src/lisp.h -a -f $confdir/lisp/version.el ]; then ! srcdir="${confdir}" else if [ -f "./src/lisp.h" -a -f "./lisp/version.el" ]; then ! srcdir=`.` else if [ -f "../src/lisp.h" -a -f "../lisp/version.el" ]; then ! srcdir=`..` else (echo "\ *************** *** 316,320 **** ## Otherwise, check if the directory they specified is okay. * ) - srcdir=`(cd ${srcdir}; pwd)` if [ ! -d "${srcdir}" -o ! -f "${srcdir}/src/lisp.h" -o ! -f "${srcdir}/lisp/version.el" ]; then (echo "\ --- 325,328 ---- *************** *** 328,334 **** --- 336,359 ---- fi ;; + esac + #### Make srcdir absolute, if it isn't already. It's important to + #### avoid running the path through pwd unnecessary, since pwd can + #### give you automounter prefixes, which can go away. + case "${srcdir}" in + /* ) ;; + . ) + ## We may be able to use the $PWD environment variable to make this + ## absolute. But sometimes PWD is inaccurate. + if [ "${PWD}" != "" ] && [ "`(cd ${PWD} ; pwd)`" = "`pwd`" ] ; then + srcdir="$PWD" + else + srcdir="`(cd ${srcdir}; pwd)`" + fi + ;; + * ) srcdir="`(cd ${srcdir}; pwd)`" ;; esac + ### Make the necessary directories, if they don't exist. if [ ! -d ./src ]; then *************** *** 561,567 **** machine=ibmrs6000 opsys=aix3-2 ;; ! romp-ibm-bsd* ) machine=ibmrt opsys=bsd4-2 ;; romp-ibm-aix* ) machine=ibmrt-aix opsys=usg5-2-2 --- 586,607 ---- machine=ibmrs6000 opsys=aix3-2 ;; ! romp-ibm-bsd4-3 ) ! machine=ibmrt opsys=bsd4-3 ! ;; ! romp-ibm-bsd4-2 ) ! machine=ibmrt opsys=bsd4-2 ! ;; ! romp-ibm-aos4-3 ) ! machine=ibmrt opsys=bsd4-3 ! ;; ! romp-ibm-aos4-2 ) machine=ibmrt opsys=bsd4-2 ;; + romp-ibm-aos* ) + machine=ibmrt opsys=bsd4-3 + ;; + romp-ibm-bsd* ) + machine=ibmrt opsys=bsd4-3 + ;; romp-ibm-aix* ) machine=ibmrt-aix opsys=usg5-2-2 *************** *** 758,761 **** --- 798,806 ---- ;; + ## Tektronix XD88 + m88k-tektronix-sysv3 ) + machine=tekXD88 opsys=usg5-3 + ;; + ## Tektronix 16000 box (6130?) ns16k-tektronix-bsd* ) *************** *** 826,829 **** --- 871,875 ---- *-sysv3 | *-sysvr3 ) opsys=usg5-3 ;; *-sysv4 | *-sysvr4 ) opsys=usg5-4 ;; + *-sysv4.2 | *-sysvr4.2 ) opsys=usg5-4-2 ;; * ) unported=true *************** *** 921,925 **** "none" | "x11" | "x10" ) ;; "" ) ! echo " No window system specifed. Looking for X window system." window_system=none if [ -r /usr/lib/libX11.a \ --- 967,971 ---- "none" | "x11" | "x10" ) ;; "" ) ! echo " No window system specifed. Looking for X11." window_system=none if [ -r /usr/lib/libX11.a \ *************** *** 1007,1010 **** --- 1053,1063 ---- @configure@ libsrc_libs=LIBS_MACHINE LIBS_SYSTEM @configure@ c_switch_system=C_SWITCH_SYSTEM + + #ifdef UNEXEC + @configure@ unexec=UNEXEC + #else + @configure@ unexec=unexec.o + #endif + #ifdef SYSTEM_MALLOC @configure@ system_malloc=yes *************** *** 1021,1024 **** --- 1074,1079 ---- rm ${tempcname} + ### Compute the unexec source name from the object name. + UNEXEC_SRC="`echo ${unexec} | sed 's/\.o/.c/'`" # Do the opsystem or machine files prohibit the use of the GNU malloc? *************** *** 1067,1070 **** --- 1122,1126 ---- AC_DEFINE_UNQUOTED(LD_SWITCH_X_SITE, ${LD_SWITCH_X_SITE}) AC_DEFINE_UNQUOTED(C_SWITCH_X_SITE, ${C_SWITCH_X_SITE}) + AC_DEFINE_UNQUOTED(UNEXEC_SRC, ${UNEXEC_SRC}) [ *************** *** 1097,1100 **** --- 1153,1157 ---- Configured for \`${configuration}'. + Where should the build process find the source code? ${srcdir} What operating system and machine description files should Emacs use? \`${opsysfile}' and \`${machfile}' *************** *** 1107,1114 **** " - - ### Restore the arguments to this script, so autoconf can record them - ### in the config.status file. - set -- ${arguments} ] AC_OUTPUT(Makefile) --- 1164,1167 ---- diff -rc2P --exclude-from=exceptions emacs-19.9/etc/COPYING emacs-19.10/etc/COPYING *** emacs-19.9/etc/COPYING Thu May 27 02:48:53 1993 --- emacs-19.10/etc/COPYING Sun May 30 02:19:46 1993 *************** *** 280,284 **** END OF TERMS AND CONDITIONS ! Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest --- 280,284 ---- END OF TERMS AND CONDITIONS ! How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest diff -rc2P --exclude-from=exceptions emacs-19.9/etc/ChangeLog emacs-19.10/etc/ChangeLog *** emacs-19.9/etc/ChangeLog Thu May 27 02:40:03 1993 --- emacs-19.10/etc/ChangeLog Sun May 30 00:21:13 1993 *************** *** 1,2 **** --- 1,6 ---- + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.10 released. + Thu May 27 02:35:32 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) *************** *** 759,768 **** * loadst.c (main) [XENIX]: use /usr/spool/mail, not /usr/mail. - - Local Variables: - mode: indented-text - eval: (auto-fill-mode 1) - left-margin: 8 - fill-column: 74 - version-control: never - End: --- 763,764 ---- diff -rc2P --exclude-from=exceptions emacs-19.9/etc/FTP emacs-19.10/etc/FTP *** emacs-19.9/etc/FTP Tue May 25 04:13:02 1993 --- emacs-19.10/etc/FTP Sat May 29 01:13:15 1993 *************** *** 19,25 **** is `/pub/gnu/GNUinfo/FTP'. * FTPing GNU Software ! ** GNU Emacs and How To FTP It If you are on the Internet (see also "** Alternative Internet FTP --- 19,33 ---- is `/pub/gnu/GNUinfo/FTP'. + * How to FTP + + Use the ftp program on your system (ask locally if you can't find it) + to connect to the host you are ftping from. Unless indicated + otherwise, login in as user "anonymous", with password: "your e-mail + address" and set "binary" mode (to transfer all eight bits in each + byte). + * FTPing GNU Software ! ** How to FTP GNU Emacs If you are on the Internet (see also "** Alternative Internet FTP diff -rc2P --exclude-from=exceptions emacs-19.9/etc/MACHINES emacs-19.10/etc/MACHINES *** emacs-19.9/etc/MACHINES Wed May 26 17:08:28 1993 --- emacs-19.10/etc/MACHINES Sat May 29 15:25:23 1993 *************** *** 393,399 **** If you are using Xenix, see notes at end under Xenix. If you are using Esix, see notes at end under Esix. ! Note that use with Linux requires the experimental "net 2" network ! software (no relation to Berkeley Net 2). Some sysV.3 systems seem to have bugs in `opendir'; --- 393,401 ---- If you are using Xenix, see notes at end under Xenix. If you are using Esix, see notes at end under Esix. + If you are using SCO Unix, see notes at end under SCO. ! Note that use on Linux with GCC 2.4 and the DLL 4.4 libraries ! requires the experimental "net 2" network patches (no relation to ! Berkeley Net 2). Some sysV.3 systems seem to have bugs in `opendir'; *************** *** 779,782 **** --- 781,796 ---- See under "Intel 386". + + SCO Unix + If you have TCP but not X, you need to edit src/s/sco4.h + to define HAVE_SOCKETS. + + If you are using MMDF instead of sendmail, you need to remove + /usr/lib/sendmail or modify lisp/paths.el before compiling. + lisp/paths.el (which is loaded during the build) will attent to use + sendmail if it exists. + + If you are using SMAIL, you need to define the macro + SMAIL in config.h. System V rel 0 (usg5.0) diff -rc2P --exclude-from=exceptions emacs-19.9/etc/NEWS emacs-19.10/etc/NEWS *** emacs-19.9/etc/NEWS Wed May 26 14:43:25 1993 --- emacs-19.10/etc/NEWS Sat May 29 16:40:22 1993 *************** *** 1,3 **** ! GNU Emacs NEWS -- history of user-visible changes. 21 May 1993 Copyright (C) 1993 Free Software Foundation, Inc. See the end for copying conditions. --- 1,3 ---- ! GNU Emacs NEWS -- history of user-visible changes. 28 May 1993 Copyright (C) 1993 Free Software Foundation, Inc. See the end for copying conditions. *************** *** 7,10 **** --- 7,22 ---- see the file LNEWS. + Changes in version 19.10. + + * The command `repeat-complex-command' is now on C-x ESC ESC. + It used to be bound to C-x ESC. + + The reason for this change is to make function keys work after C-x. + + * The variable `highlight-nonselected-windows' now controls whether + the region is highlighted in windows other than the selected window + (in Transient Mark mode only, of course, and currently only when + using X). + Changes in version 19.8. *************** *** 233,236 **** --- 245,252 ---- the mouse now use the kill ring in the same way the keyboard killing and yanking commands do. + + The option to specify the title for the initial frame is now `-name NAME'. + There is currently no way to specify an icon title; perhaps we will add + one in the future. * Undoing a deletion now puts point back where it was before the diff -rc2P --exclude-from=exceptions emacs-19.9/etc/refcard.tex emacs-19.10/etc/refcard.tex *** emacs-19.9/etc/refcard.tex Fri May 21 13:07:08 1993 --- emacs-19.10/etc/refcard.tex Fri May 28 16:54:20 1993 *************** *** 445,449 **** \key{abort command}{C-g} ! Type \kbd{C-x ESC} to edit and repeat the last command that used the minibuffer. The following keys are then defined. --- 445,449 ---- \key{abort command}{C-g} ! Type \kbd{C-x ESC ESC} to edit and repeat the last command that used the minibuffer. The following keys are then defined. *************** *** 590,594 **** \metax{eval entire {\bf buffer}}{M-x eval-current-buffer} \key{read and eval minibuffer}{M-ESC} ! \key{re-execute last minibuffer command}{C-x ESC} \metax{read and eval Emacs Lisp file}{M-x load-file} \metax{load from standard system directory}{M-x load-library} --- 590,594 ---- \metax{eval entire {\bf buffer}}{M-x eval-current-buffer} \key{read and eval minibuffer}{M-ESC} ! \key{re-execute last minibuffer command}{C-x ESC ESC} \metax{read and eval Emacs Lisp file}{M-x load-file} \metax{load from standard system directory}{M-x load-library} Only in emacs-19.9/etc: xmouse.doc diff -rc2P --exclude-from=exceptions emacs-19.9/info/COPYING emacs-19.10/info/COPYING *** emacs-19.9/info/COPYING Thu May 27 02:48:54 1993 --- emacs-19.10/info/COPYING Sun May 30 02:19:50 1993 *************** *** 280,284 **** END OF TERMS AND CONDITIONS ! Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest --- 280,284 ---- END OF TERMS AND CONDITIONS ! How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest diff -rc2P --exclude-from=exceptions emacs-19.9/lib-src/COPYING emacs-19.10/lib-src/COPYING *** emacs-19.9/lib-src/COPYING Thu May 27 02:48:54 1993 --- emacs-19.10/lib-src/COPYING Sun May 30 02:19:49 1993 *************** *** 280,284 **** END OF TERMS AND CONDITIONS ! Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest --- 280,284 ---- END OF TERMS AND CONDITIONS ! How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest diff -rc2P --exclude-from=exceptions emacs-19.9/lib-src/ChangeLog emacs-19.10/lib-src/ChangeLog *** emacs-19.9/lib-src/ChangeLog Thu May 27 02:40:11 1993 --- emacs-19.10/lib-src/ChangeLog Sun May 30 00:20:07 1993 *************** *** 1,2 **** --- 1,35 ---- + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.10 released. + + Sat May 29 05:17:56 1993 Paul Eggert (eggert@twinsun.com) + + * rcs2log: When given no file arguments, inspect RCS/.* as well + as RCS/*. Don't report an error if RCS is empty or nonexistent. + + Sat May 29 01:00:37 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile.in (timer): Link with $(LOADLIBES). + + Fri May 28 17:21:17 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * fakemail.c (put_line): Don't output \n\t unless more text follows. + + Fri May 28 03:57:16 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * etags.c: Replace the CPP tangle for alloca with the one from the + autoconf documentation, since that's working elsewhere. + + Thu May 27 23:32:46 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * Makefile.in (ALL_CFLAGS): Add "-I.", so the system and machine + description files can find their ancestors. + + Thu May 27 20:54:49 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile.in (install): Get the scripts from ${srcdir}, + unlike the executables. + (ALL_CFLAGS): Add -I../src + Thu May 27 02:35:32 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) diff -rc2P --exclude-from=exceptions emacs-19.9/lib-src/Makefile.in emacs-19.10/lib-src/Makefile.in *** emacs-19.9/lib-src/Makefile.in Wed May 26 22:52:54 1993 --- emacs-19.10/lib-src/Makefile.in Sat May 29 01:00:52 1993 *************** *** 104,108 **** ### HAVE_CONFIG_H #defined before they know they can take advantage of ### the information in ../src/config.h. ! ALL_CFLAGS = ${C_SWITCH_SYSTEM} -Demacs -DHAVE_CONFIG_H -I${srcdir} -I${srcdir}/../src ${CFLAGS} .c.o: ${CC} -c ${CPPFLAGS} ${ALL_CFLAGS} $< --- 104,109 ---- ### HAVE_CONFIG_H #defined before they know they can take advantage of ### the information in ../src/config.h. ! ALL_CFLAGS = ${C_SWITCH_SYSTEM} -Demacs -DHAVE_CONFIG_H \ ! -I${srcdir} -I${srcdir}/../src -I. -I../src ${CFLAGS} .c.o: ${CC} -c ${CPPFLAGS} ${ALL_CFLAGS} $< *************** *** 139,146 **** @echo @echo "Installing utilities for users to run." ! for file in ${INSTALLABLES} ${INSTALLABLE_SCRIPTS}; do \ cp $${file} ${bindir}/$${file}.new ; \ chmod 755 ${bindir}/$${file}.new ; \ done @echo @echo "Changing the owner and group of utility programs to \`bin'." --- 140,151 ---- @echo @echo "Installing utilities for users to run." ! for file in ${INSTALLABLES} ; do \ cp $${file} ${bindir}/$${file}.new ; \ chmod 755 ${bindir}/$${file}.new ; \ done + for file in ${INSTALLABLE_SCRIPTS} ; do \ + cp ${srcdir}/$${file} ${bindir}/$${file}.new ; \ + chmod 755 ${bindir}/$${file}.new ; \ + done @echo @echo "Changing the owner and group of utility programs to \`bin'." *************** *** 244,248 **** $(CC) -c -I${srcdir}/../src $(ALL_CFLAGS) ${srcdir}/timer.c timer: ${TIMEROBJS} ! $(CC) -I${srcdir}/../src $(ALL_CFLAGS) ${TIMEROBJS} -o timer make-path: ${srcdir}/make-path.c --- 249,253 ---- $(CC) -c -I${srcdir}/../src $(ALL_CFLAGS) ${srcdir}/timer.c timer: ${TIMEROBJS} ! $(CC) -I${srcdir}/../src $(ALL_CFLAGS) ${TIMEROBJS} $(LOADLIBES) -o timer make-path: ${srcdir}/make-path.c diff -rc2P --exclude-from=exceptions emacs-19.9/lib-src/etags.c emacs-19.10/lib-src/etags.c *** emacs-19.9/lib-src/etags.c Tue May 25 17:03:05 1993 --- emacs-19.10/lib-src/etags.c Fri May 28 04:15:32 1993 *************** *** 36,48 **** #include "getopt.h" ! #ifdef __GNUC__ ! #define alloca __builtin_alloca ! #else ! #ifdef sparc ! #include ! #else ! extern char *alloca (); ! #endif #endif extern char *malloc (), *realloc (); --- 36,55 ---- #include "getopt.h" ! /* AIX requires this to be the first thing in the file. */ ! #ifdef __GNUC__ ! #ifndef alloca ! #define alloca __builtin_alloca #endif + #else /* not __GNUC__ */ + #if HAVE_ALLOCA_H + #include + #else /* not HAVE_ALLOCA_H */ + #ifdef _AIX + #pragma alloca + #else /* not _AIX */ + char *alloca (); + #endif /* not _AIX */ + #endif /* not HAVE_ALLOCA_H */ + #endif /* not __GNUC__ */ extern char *malloc (), *realloc (); diff -rc2P --exclude-from=exceptions emacs-19.9/lib-src/fakemail.c emacs-19.10/lib-src/fakemail.c *** emacs-19.9/lib-src/fakemail.c Tue Oct 31 11:00:11 1989 --- emacs-19.10/lib-src/fakemail.c Fri May 28 17:21:11 1993 *************** *** 437,441 **** /* Output that much, then break the line. */ fwrite (s, 1, breakpos - s, rem->handle); - fputs ("\n\t", rem->handle); column = 8; --- 437,440 ---- *************** *** 443,446 **** --- 442,447 ---- s = breakpos; while (*s == ' ' || *s == '\t') ++s; + if (*s != 0) + fputs ("\n\t", rem->handle); } putc ('\n', rem->handle); diff -rc2P --exclude-from=exceptions emacs-19.9/lib-src/getopt.c emacs-19.10/lib-src/getopt.c *** emacs-19.9/lib-src/getopt.c Wed Oct 7 14:20:01 1992 --- emacs-19.10/lib-src/getopt.c Mon May 24 15:29:15 1993 *************** *** 4,8 **** before changing it! ! Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it --- 4,9 ---- before changing it! ! Copyright (C) 1987, 88, 89, 90, 91, 92, 1993 ! Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it *************** *** 10,14 **** Free Software Foundation; either version 2, or (at your option) any later version. ! This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of --- 11,15 ---- Free Software Foundation; either version 2, or (at your option) any later version. ! This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of *************** *** 15,19 **** 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 this program; if not, write to the Free Software --- 16,20 ---- 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 this program; if not, write to the Free Software *************** *** 20,33 **** Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! /* AIX requires this to be the first thing in the file. */ #ifdef __GNUC__ #define alloca __builtin_alloca #else /* not __GNUC__ */ ! #if defined (HAVE_ALLOCA_H) || (defined(sparc) && (defined(sun) || (!defined(USG) && !defined(SVR4) && !defined(__svr4__)))) #include #else ! #ifdef _AIX ! #pragma alloca ! #else char *alloca (); #endif --- 21,41 ---- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! /* NOTE!!! AIX requires this to be the first thing in the file. ! Do not put ANYTHING before it! */ ! #if !defined (__GNUC__) && defined (_AIX) ! #pragma alloca ! #endif ! ! #ifdef HAVE_CONFIG_H ! #include "config.h" ! #endif ! #ifdef __GNUC__ #define alloca __builtin_alloca #else /* not __GNUC__ */ ! #if defined (HAVE_ALLOCA_H) || (defined(sparc) && (defined(sun) || (!defined(USG) && !defined(SVR4) && !defined(__svr4__)))) || defined(__sgi) #include #else ! #ifndef _AIX char *alloca (); #endif *************** *** 35,44 **** #endif /* not __GNUC__ */ ! #include ! #if defined(USG) || defined(STDC_HEADERS) || defined(__GNU_LIBRARY__) ! #include #endif /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ --- 43,68 ---- #endif /* not __GNUC__ */ ! #if !__STDC__ && !defined(const) && IN_GCC ! #define const ! #endif ! /* This tells Alpha OSF/1 not to define a getopt prototype in . */ ! #ifndef _NO_PROTO ! #define _NO_PROTO #endif + #include + + /* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + + #if defined (_LIBC) || !defined (__GNU_LIBRARY__) + + /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ *************** *** 52,63 **** #endif /* GNU C library. */ - #if !__STDC__ - #define const - #endif - /* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a long-named option. Because this is not POSIX.2 compliant, it is being phased out. */ ! #define GETOPT_COMPAT /* This version of `getopt' appears to the caller like standard Unix `getopt' --- 76,83 ---- #endif /* GNU C library. */ /* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a long-named option. Because this is not POSIX.2 compliant, it is being phased out. */ ! /* #define GETOPT_COMPAT */ /* This version of `getopt' appears to the caller like standard Unix `getopt' *************** *** 97,100 **** --- 117,121 ---- how much of ARGV has been scanned so far. */ + /* XXX 1003.2 says this must be 1 before any call. */ int optind = 0; *************** *** 113,116 **** --- 134,143 ---- int opterr = 1; + /* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + + int optopt = '?'; + /* Describe how to deal with options that follow non-option ARGV-elements. *************** *** 148,151 **** --- 175,182 ---- #ifdef __GNU_LIBRARY__ + /* We want to avoid inclusion of string.h with non-GNU libraries + because there are many ways it can cause trouble. + On some systems, it contains special magic macros that don't work + in GCC. */ #include #define my_index strchr *************** *** 159,171 **** static char * ! my_index (string, chr) ! char *string; int chr; { ! while (*string) { ! if (*string == chr) ! return string; ! string++; } return 0; --- 190,202 ---- static char * ! my_index (str, chr) ! const char *str; int chr; { ! while (*str) { ! if (*str == chr) ! return (char *) str; ! str++; } return 0; *************** *** 174,178 **** static void my_bcopy (from, to, size) ! char *from, *to; int size; { --- 205,210 ---- static void my_bcopy (from, to, size) ! const char *from; ! char *to; int size; { *************** *** 491,495 **** argv[0], argv[optind - 1]); nextchar += strlen (nextchar); ! return '?'; } } --- 523,527 ---- argv[0], argv[optind - 1]); nextchar += strlen (nextchar); ! return optstring[0] == ':' ? ':' : '?'; } } *************** *** 545,548 **** --- 577,581 ---- if (opterr) { + #if 0 if (c < 040 || c >= 0177) fprintf (stderr, "%s: unrecognized option, character code 0%o\n", *************** *** 550,554 **** --- 583,592 ---- else fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c); + #else + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c); + #endif } + optopt = c; return '?'; } *************** *** 580,586 **** { if (opterr) ! fprintf (stderr, "%s: option `-%c' requires an argument\n", ! argv[0], c); ! c = '?'; } else --- 618,636 ---- { if (opterr) ! { ! #if 0 ! fprintf (stderr, "%s: option `-%c' requires an argument\n", ! argv[0], c); ! #else ! /* 1003.2 specifies the format of this message. */ ! fprintf (stderr, "%s: option requires an argument -- %c\n", ! argv[0], c); ! #endif ! } ! optopt = c; ! if (optstring[0] == ':') ! c = ':'; ! else ! c = '?'; } else *************** *** 606,609 **** --- 656,661 ---- 0); } + + #endif /* _LIBC or not __GNU_LIBRARY__. */ #ifdef TEST diff -rc2P --exclude-from=exceptions emacs-19.9/lib-src/getopt.h emacs-19.10/lib-src/getopt.h *** emacs-19.9/lib-src/getopt.h Wed Oct 7 14:20:05 1992 --- emacs-19.10/lib-src/getopt.h Sun May 30 02:20:12 1993 *************** *** 1,4 **** /* Declarations for getopt. ! Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it --- 1,4 ---- /* Declarations for getopt. ! Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it *************** *** 6,10 **** Free Software Foundation; either version 2, or (at your option) any later version. ! This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of --- 6,10 ---- Free Software Foundation; either version 2, or (at your option) any later version. ! This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of *************** *** 11,15 **** 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 this program; if not, write to the Free Software --- 11,15 ---- 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 this program; if not, write to the Free Software *************** *** 50,53 **** --- 50,57 ---- extern int opterr; + /* Set to an option character which was unrecognized. */ + + extern int optopt; + /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector *************** *** 87,96 **** /* Names for the values of the `has_arg' field of `struct option'. */ ! enum _argtype ! { ! no_argument, ! required_argument, ! optional_argument ! }; #if __STDC__ --- 91,97 ---- /* Names for the values of the `has_arg' field of `struct option'. */ ! #define no_argument 0 ! #define required_argument 1 ! #define optional_argument 2 #if __STDC__ diff -rc2P --exclude-from=exceptions emacs-19.9/lib-src/getopt1.c emacs-19.10/lib-src/getopt1.c *** emacs-19.9/lib-src/getopt1.c Wed Oct 7 14:20:09 1992 --- emacs-19.10/lib-src/getopt1.c Sun May 30 02:20:13 1993 *************** *** 1,4 **** ! /* Getopt for GNU. ! Copyright (C) 1987, 88, 89, 90, 91, 1992 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it --- 1,5 ---- ! /* getopt_long and getopt_long_only entry points for GNU getopt. ! Copyright (C) 1987, 88, 89, 90, 91, 92, 1993 ! Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it *************** *** 6,10 **** Free Software Foundation; either version 2, or (at your option) any later version. ! This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of --- 7,11 ---- Free Software Foundation; either version 2, or (at your option) any later version. ! This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of *************** *** 11,15 **** 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 this program; if not, write to the Free Software --- 12,16 ---- 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 this program; if not, write to the Free Software *************** *** 16,30 **** Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "getopt.h" ! #ifndef __STDC__ #define const #endif ! #if defined(STDC_HEADERS) || defined(__GNU_LIBRARY__) || defined (LIBC) #include ! #else /* STDC_HEADERS or __GNU_LIBRARY__ */ char *getenv (); ! #endif /* STDC_HEADERS or __GNU_LIBRARY__ */ #ifndef NULL --- 17,50 ---- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + #ifdef HAVE_CONFIG_H + #include "config.h" + #endif + #include "getopt.h" ! #if !__STDC__ && !defined(const) && IN_GCC #define const #endif ! #include ! ! /* Comment out all this code if we are using the GNU C Library, and are not ! actually compiling the library itself. This code is part of the GNU C ! Library, but also included in many other GNU distributions. Compiling ! and linking in this code is a waste when using the GNU C library ! (especially if it is a shared library). Rather than having every GNU ! program understand `configure --with-gnu-libc' and omit the object files, ! it is simpler to just do this in the source for each such file. */ ! ! #if defined (_LIBC) || !defined (__GNU_LIBRARY__) ! ! ! /* This needs to come after some library #include ! to get __GNU_LIBRARY__ defined. */ ! #ifdef __GNU_LIBRARY__ #include ! #else char *getenv (); ! #endif #ifndef NULL *************** *** 48,52 **** instead. */ ! int getopt_long_only (argc, argv, options, long_options, opt_index) int argc; --- 68,72 ---- instead. */ ! int getopt_long_only (argc, argv, options, long_options, opt_index) int argc; *************** *** 58,61 **** --- 78,84 ---- return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } + + + #endif /* _LIBC or not __GNU_LIBRARY__. */ #ifdef TEST diff -rc2P --exclude-from=exceptions emacs-19.9/lib-src/rcs2log emacs-19.10/lib-src/rcs2log *** emacs-19.9/lib-src/rcs2log Mon May 3 13:57:29 1993 --- emacs-19.10/lib-src/rcs2log Sat May 29 02:22:49 1993 *************** *** 13,17 **** # Author: Paul Eggert ! # $Id: rcs2log,v 1.11 1993/05/03 17:55:22 eggert Exp $ # Copyright 1992, 1993 Free Software Foundation, Inc. --- 13,17 ---- # Author: Paul Eggert ! # $Id: rcs2log,v 1.12 1993/05/29 06:22:48 rms Exp $ # Copyright 1992, 1993 Free Software Foundation, Inc. *************** *** 31,34 **** --- 31,36 ---- # the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + nl=' + ' # Parse options. *************** *** 115,125 **** datearg="-d>$date" rlogout=/tmp/chg$$ trap exit 1 2 13 15 trap 'rm -f $rlogout; exit 1' 0 - - case $# in - 0) set RCS/* - esac rlog "$datearg" "$@" >$rlogout || exit --- 117,144 ---- datearg="-d>$date" + # With no arguments, examine all files under the RCS directory. + case $# in + 0) + files= + for file in RCS/.* RCS/* + do + case $file in + RCS/. | RCS/..) ;; + RCS/.\* | RCS/\*) test -f "$file" && files=$files$nl$file;; + *) files=$files$nl$file + esac + done + case $files in + '') exit 0 + esac + oldIFS=$IFS + IFS=$nl + set $files + IFS=$oldIFS + esac + rlogout=/tmp/chg$$ trap exit 1 2 13 15 trap 'rm -f $rlogout; exit 1' 0 rlog "$datearg" "$@" >$rlogout || exit diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/COPYING emacs-19.10/lisp/COPYING *** emacs-19.9/lisp/COPYING Thu May 27 02:48:53 1993 --- emacs-19.10/lisp/COPYING Sun May 30 02:19:47 1993 *************** *** 280,284 **** END OF TERMS AND CONDITIONS ! Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest --- 280,284 ---- END OF TERMS AND CONDITIONS ! How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/ChangeLog emacs-19.10/lisp/ChangeLog *** emacs-19.9/lisp/ChangeLog Thu May 27 02:40:50 1993 --- emacs-19.10/lisp/ChangeLog Sun May 30 00:19:24 1993 *************** *** 1,2 **** --- 1,106 ---- + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.10 released. + + Sat May 29 00:33:39 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * startup.el (command-line-1): Pass arg to other-window. + + * files.el (find-file-run-dired): Doc fix. + (find-file-read-only): Return the buffer. + (find-file-read-only-other-window): Likewise. + (find-file-read-only-other-frame): Likewise. + + * timer.el (cancel-function-timers): Renamed from spurious duplicate + definition of cancel-timer. + + * add-log.el (find-change-log): Use file-chase-links. + + * files.el (file-chase-links): New function. + (backup-buffer): Use file-chase-links. + (file-chase-links): Handle leading .. in symlink target. + + * c-mode.el (c-up-conditional): Handle commented-out #-cmds properly. + + * window.el (split-window-vertically): Return the new window. + + * paths.el (gnus-local-organization): Initially nil. + + * isearch.el (isearch-search): Take note of isearch-case-fold-search + initial value. + + * lisp-mode.el (indent-sexp): Even if outer-loop-done is t, + still move down one line. + + * files.el (auto-mode-alist): Fix syntax for sgml mode. + + * man.el (Man-mode-map): Bind m to manual-entry. + (Man-notify-when-ready): Make arg name consistent. + Use delete-other-window. + (Man-mode): Use buffer-disable-undo, not old name. + + * faces.el (x-resolve-font-name): Allow symbol as FACE arg. + Allow t as FRAME arg. + + * sendmail.el (send-mail-function): Use defvar. not defconst. + + * mouse.el (x-fixed-font-alist): Specify field 7, not field 6. + + Fri May 28 00:43:24 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * iso8859-1.el: File deleted. + * superyank.el: File deleted. + + * vc.el (vc-steal-lock, vc-insert-headers): Fix question whitespace. + (vc-finish-logentry): Use delete-windows-on. + + * add-log.el (find-log-file): Use source file's truename dir. + + * mh-e.el: Version 3.8.1 from Gildea. + + * loaddefs.el (-key): repeat-complex-command moved to C-x ESC ESC. + + * hexl.el: Doc fixes. + (hexl-char-after-point): Get rid of mistakenly free variables. + + * info.el (Info-insert-dir): Ignore duplicate directories. + + * paths.el (Info-default-directory-list): Take out ../../info. + Avoid duplication. + (manual-formatted-dirlist, manual-formatted-dir-prefix): Deleted. + + * subr.el (baud-rate): Doc fix. + + * add-log.el (find-change-log): Chase symlinks multiple levels. + + * rmailsum.el (rmail-new-summary): Set rmail-summary-buffer + to nil at beginning; set it for real after summary is set up. + + Thu May 27 20:58:51 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * files.el (find-alternate-file): Hide truename and inode number + temporarily, like the visited file name. + + * iso8859-1.el: Pass just the downcase table to set-case-... + + Thu May 28 20:58:08 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * find-dired.el (find-dired-sentinel): Write a line describing death. + Set mode-line-process to record exit status. + Delete the process. + + Thu May 27 08:43:08 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * frame.el (frame-initialize): Handle reverseVideo resource. + * faces.el (x-create-frame-with-faces): Handle reverseVideo resource. + + * iso-insert.el, iso-ascii.el, iso-swed.el: Provide same name as file. + + * ange-ftp.el (ange-ftp-dired-compress-file): + Use dired-compress-file, not dired-compress-filename. + + * completion.el: Pervasive changes to use Emacs 19 features + and conform to Emacs conventions. + Thu May 27 02:35:32 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/add-log.el emacs-19.10/lisp/add-log.el *** emacs-19.9/lisp/add-log.el Sun May 9 19:15:09 1993 --- emacs-19.10/lisp/add-log.el Sat May 29 16:02:19 1993 *************** *** 55,58 **** --- 55,63 ---- (or file-name (setq file-name (or change-log-default-name + ;; Chase links in the source file + ;; and use the change log in the dir where it points. + (and buffer-file-name + (file-name-directory + (file-chase-links buffer-file-name))) default-directory))) (if (and (eq file-name change-log-default-name) *************** *** 66,71 **** ;; This makes it easier to use a single change log file ;; for several related directories. ! (setq file-name ! (expand-file-name (or (file-symlink-p file-name) file-name))) ;; Move up in the dir hierarchy till we find a change log file. (let ((file1 file-name) --- 71,76 ---- ;; This makes it easier to use a single change log file ;; for several related directories. ! (setq file-name (file-chase-links file-name)) ! (setq file-name (expand-file-name file-name)) ;; Move up in the dir hierarchy till we find a change log file. (let ((file1 file-name) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/allout.el emacs-19.10/lisp/allout.el *** emacs-19.9/lisp/allout.el --- emacs-19.10/lisp/allout.el Thu May 27 23:00:58 1993 *************** *** 0 **** --- 1,2556 ---- + ;;;_* Allout - An extensive outline-mode for Emacs. + ;;; Note - the lines beginning with ';;;_' are outline topic headers. + ;;; Load this file (or 'eval-current-buffer') and revisit the + ;;; file to give it a whirl. + + ;;;_ + Provide + (provide 'outline) + + ;;;_ + Package Identification Stuff + + ;;;_ - Author: Ken Manheimer + ;;;_ - Maintainer: Ken Manheimer + ;;;_ - Created: Dec 1991 - first release to usenet + ;;;_ - Version: $Id: allout.el,v 3.4 1993/05/27 19:24:19 klm Exp $|| + ;;;_ - Keywords: outline mode + + ;;;_ - LCD Archive Entry + + ;; LCD Archive Entry: + ;; allout|Ken Manheimer|klm@nist.gov + ;; |A more thorough outline-mode + ;; |27-May-1993|$Id: allout.el,v 3.4 1993/05/27 19:24:19 klm Exp $|| + + ;;;_ - Description + ;; A full-fledged outline mode, based on the original rudimentary + ;; GNU emacs outline functionality. + ;; + ;; Ken Manheimer Nat'l Inst of Standards and Technology + ;; klm@nist.gov (301)975-3539 (Formerly Nat'l Bureau of Standards) + ;; NIST Shared File Service Manager and Developer + + ;;;_ - Copyright + ;; Copyright (C) 1992, 1993 Free Software Foundation, Inc. + + ;; This file is part of GNU Emacs. + + ;; GNU Emacs is distributed in the hope that it will be useful, + ;; but WITHOUT ANY WARRANTY. No author or distributor + ;; accepts responsibility to anyone for the consequences of using it + ;; or for whether it serves any particular purpose or works at all, + ;; unless he says so in writing. Refer to the GNU Emacs General Public + ;; License for full details. + + ;; Everyone is granted permission to copy, modify and redistribute + ;; GNU Emacs, but only under the conditions described in the + ;; GNU Emacs General Public License. A copy of this license is + ;; supposed to have been given to you along with GNU Emacs so you + ;; can know your rights and responsibilities. It should be in a + ;; file named COPYING. Among other things, the copyright notice + ;; and this notice must be preserved on all copies. + + ;;;_ + User Customization variables + + ;;;_ - Topic Header configuration + + ;;;_ = outline-header-prefix + (defvar outline-header-prefix "." + "* Leading string for greater than level 0 topic headers.") + (make-variable-buffer-local 'outline-header-prefix) + + ;;;_ = outline-header-subtraction + (defvar outline-header-subtraction (1- (length outline-header-prefix)) + "* Leading string for greater than level 0 topic headers.") + (make-variable-buffer-local 'outline-header-subtraction) + + ;;;_ = outline-primary-bullet + (defvar outline-primary-bullet "*") ;; Changing this var disables any + ;; backwards compatability with + ;; the original outline mode. + (make-variable-buffer-local 'outline-primary-bullet) + + ;;;_ = outline-plain-bullets-string + (defvar outline-plain-bullets-string "" + "* The bullets normally used in outline topic prefixes. See + 'outline-distinctive-bullets-string' for the other kind of + bullets. + + DO NOT include the close-square-bracket, ']', among any bullets. + + You must run 'set-outline-regexp' in order for changes to the + value of this var to effect outline-mode operation.") + (setq outline-plain-bullets-string (concat outline-primary-bullet + "+-:.;,")) + (make-variable-buffer-local 'outline-plain-bullets-string) + + ;;;_ = outline-distinctive-bullets-string + (defvar outline-distinctive-bullets-string "" + "* The bullets used for distinguishing outline topics. These + bullets are not offered among the regular rotation, and are not + changed when automatically rebulleting, as when shifting the + level of a topic. See 'outline-plain-bullets-string' for the + other kind of bullets. + + DO NOT include the close-square-bracket, ']', among any bullets. + + You must run 'set-outline-regexp' in order for changes + to the value of this var to effect outline-mode operation.") + (setq outline-distinctive-bullets-string "=>([{}&!?#%\"X@$~") + (make-variable-buffer-local 'outline-distinctive-bullets-string) + + ;;;_ > outline-numbered-bullet () + (defvar outline-numbered-bullet () + "* Bullet signifying outline prefixes which are to be numbered. + Leave it nil if you don't want any numbering, or set it to a + string with the bullet you want to be used.") + (setq outline-numbered-bullet "#") + (make-variable-buffer-local 'outline-numbered-bullet) + + ;;;_ = outline-file-xref-bullet + (defvar outline-file-xref-bullet "@" + "* Set this var to the bullet you want to use for file cross-references. + Set it 'nil' if you want to inhibit this capability.") + + ;;;_ - Miscellaneous customization + + ;;;_ = outline-stylish-prefixes + (defvar outline-stylish-prefixes t + "*A true value for this var makes the topic-prefix creation and modification + functions vary the prefix bullet char according to level. Otherwise, only + asterisks ('*') and distinctive bullets are used. + + This is how an outline can look with stylish prefixes: + + * Top level + .* A topic + . + One level 3 subtopic + . . One level 4 subtopic + . + Another level 3 subtopic + . . A level 4 subtopic + . #2 A distinguished, numbered level 4 subtopic + . ! A distinguished ('!') level 4 subtopic + . #4 Another numbered level 4 subtopic + + This would be an outline with stylish prefixes inhibited: + + * Top level + .* A topic + .! A distinctive (but measly) subtopic + . * A sub-subtopic - no bullets from outline-plain-bullets-string but '*' + + Stylish and constant prefixes (as well as old-style prefixes) are + always respected by the topic maneuvering functions, regardless of + this variable setting. + + The setting of this var is not relevant when outline-old-style-prefixes + is t.") + (make-variable-buffer-local 'outline-stylish-prefixes) + + ;;;_ = outline-old-style-prefixes + (defvar outline-old-style-prefixes nil + "*Setting this var causes the topic-prefix creation and modification + functions to make only asterix-padded prefixes, so they look exactly + like the old style prefixes. + + Both old and new style prefixes are always respected by the topic + maneuvering functions.") + (make-variable-buffer-local 'outline-old-style-prefixes) + + ;;;_ = outline-enwrap-isearch-mode + ; Spiffy dynamic-exposure + ; during searches requires + ; Dan LaLiberte's isearch-mode: + (defvar outline-enwrap-isearch-mode "isearch-mode.el" + "* Set this var to the name of the (non-compiled) elisp code for + isearch-mode, if you have Dan LaLiberte's 'isearch-mode' + stuff and want isearches to reveal hidden stuff encountered in the + course of a search, and reconceal it if you go past. Set it nil if + you don't have the package, or don't want to use this feature.") + + ;;;_ = outline-use-hanging-indents + (defvar outline-use-hanging-indents t + "* Set this var non-nil if you have Kyle E Jones' filladapt stuff, + and you want outline to fill topics as hanging indents to the + bullets.") + (make-variable-buffer-local 'outline-use-hanging-indents) + + ;;;_ = outline-reindent-bodies + (defvar outline-reindent-bodies t + "* Set this var non-nil if you want topic depth adjustments to + reindent hanging bodies (ie, bodies lines indented to beginning of + heading text). The performance hit is small. + + Avoid this strenuously when using outline mode on program code. + It's great for text, though.") + (make-variable-buffer-local 'outline-reindent-bodies) + + ;;;_ = outline-mode-keys + ;;; You have to restart outline-mode - '(outline-mode t)' - to have + ;;; any changes take hold. + (defvar outline-mode-keys () + "Assoc list of outline-mode-keybindings, for common reference in setting + up major and minor-mode keybindings.") + (setq outline-mode-keys + '( + ; Motion commands: + ("\C-c\C-n" outline-next-visible-heading) + ("\C-c\C-p" outline-previous-visible-heading) + ("\C-c\C-u" outline-up-current-level) + ("\C-c\C-f" outline-forward-current-level) + ("\C-c\C-b" outline-backward-current-level) + ("\C-c\C-a" outline-beginning-of-current-entry) + ("\C-c\C-e" outline-end-of-current-entry) + ; Exposure commands: + ("\C-c\C-i" outline-show-current-children) + ("\C-c\C-s" outline-show-current-subtree) + ("\C-c\C-h" outline-hide-current-subtree) + ("\C-c\C-o" outline-show-current-entry) + ("\C-c!" outline-show-all) + ; Alteration commands: + ("\C-c " open-sibtopic) + ("\C-c." open-subtopic) + ("\C-c," open-supertopic) + ("\C-c'" outline-shift-in) + ("\C-c>" outline-shift-in) + ("\C-c<" outline-shift-out) + ("\C-c\C-m" outline-rebullet-topic) + ("\C-cb" outline-rebullet-current-heading) + ("\C-c#" outline-number-siblings) + ("\C-k" outline-kill-line) + ("\C-y" outline-yank) + ("\M-y" outline-yank-pop) + ("\C-c\C-k" outline-kill-topic) + ; Miscellaneous commands: + ("\C-c@" outline-resolve-xref) + ("\C-cc" outline-copy-exposed))) + + ;;;_ + Code - no user customizations below. + + ;;;_ #1 Outline Format and Internal Mode Configuration + + ;;;_ : Topic header format + ;;;_ = outline-regexp + (defvar outline-regexp "" + "* Regular expression to match the beginning of a heading line. + Any line whose beginning matches this regexp is considered a + heading. This var is set according to the user configuration vars + by set-outline-regexp.") + (make-variable-buffer-local 'outline-regexp) + ;;;_ = outline-bullets-string + (defvar outline-bullets-string "" + " A string dictating the valid set of outline topic bullets. This + var should *not* be set by the user - it is set by 'set-outline-regexp', + and is composed from the elements of 'outline-plain-bullets-string' + and 'outline-distinctive-bullets-string'.") + (make-variable-buffer-local 'outline-bullets-string) + ;;;_ = outline-line-boundary-regexp + (defvar outline-line-boundary-regexp () + " outline-regexp with outline-style beginning of line anchor (ie, + C-j, *or* C-m, for prefixes of hidden topics). This is properly + set when outline-regexp is produced by 'set-outline-regexp', so + that (match-beginning 2) and (match-end 2) delimit the prefix.") + (make-variable-buffer-local 'outline-line-boundary-regexp) + ;;;_ = outline-bob-regexp + (defvar outline-bob-regexp () + " Like outline-line-boundary-regexp, this is an outline-regexp for + outline headers at the beginning of the buffer. (match-beginning 2) + and (match-end 2) + delimit the prefix.") + (make-variable-buffer-local 'outline-line-bob-regexp) + ;;;_ > outline-reset-header-lead (header-lead) + (defun outline-reset-header-lead (header-lead) + "* Reset the leading string used to identify topic headers." + (interactive "sNew lead string: ") + ;;() + (setq outline-header-prefix header-lead) + (setq outline-header-subtraction (1- (length outline-header-prefix))) + (set-outline-regexp) + ) + ;;;_ > outline-lead-with-comment-string (header-lead) + (defun outline-lead-with-comment-string (&optional header-lead) + "* Set the topic-header leading string to specified string. Useful + when for encapsulating outline structure in programming language + comments. Returns the leading string." + + (interactive "P") + (if (not (stringp header-lead)) + (setq header-lead (read-string + "String prefix for topic headers: "))) + (setq outline-reindent-bodies nil) + (outline-reset-header-lead header-lead) + header-lead) + ;;;_ > set-outline-regexp () + (defun set-outline-regexp () + " Generate proper topic-header regexp form for outline functions, from + outline-plain-bullets-string and outline-distinctive-bullets-string." + + (interactive) + ;; Derive outline-bullets-string from user configured components: + (setq outline-bullets-string "") + (let ((strings (list 'outline-plain-bullets-string + 'outline-distinctive-bullets-string)) + cur-string + cur-len + cur-char-string + index + new-string) + (while strings + (setq new-string "") (setq index 0) + (setq cur-len (length (setq cur-string (symbol-value (car strings))))) + (while (< index cur-len) + (setq cur-char (aref cur-string index)) + (setq outline-bullets-string + (concat outline-bullets-string + (cond + ; Single dash would denote a + ; sequence, repeated denotes + ; a dash: + ((eq cur-char ?-) "--") + ; literal close-square-bracket + ; doesn't work right in the + ; expr, exclude it: + ((eq cur-char ?\]) "") + (t (regexp-quote (char-to-string cur-char)))))) + (setq index (1+ index))) + (setq strings (cdr strings))) + ) + ;; Derive next for repeated use in outline-pending-bullet: + (setq outline-plain-bullets-string-len (length outline-plain-bullets-string)) + (setq outline-header-subtraction (1- (length outline-header-prefix))) + ;; Produce the new outline-regexp: + (setq outline-regexp (concat "\\(\\" + outline-header-prefix + "[ \t]*[" + outline-bullets-string + "]\\)\\|\\" + outline-primary-bullet + "+\\|\^l")) + (setq outline-line-boundary-regexp + (concat "\\([\C-j\C-m]\\)\\(" outline-regexp "\\)")) + (setq outline-bob-regexp + (concat "\\(\\`\\)\\(" outline-regexp "\\)")) + ) + + ;;;_ : Key bindings + ;;;_ = Generic minor keybindings control + ;;;_ ; minor-bind-keys (keys-assoc) + (defun minor-bind-keys (keys-assoc) + " Establish BINDINGS assoc list in current buffer, returning a list + for subsequent use by minor-unbind-keys to resume overloaded local + bindings." + (interactive) + ;; Cycle thru key list, registering prevailing local binding for key, if + ;; any (for prospective resumption by outline-minor-unbind-keys), then + ;; overloading it with outline-mode one. + (let ((local-map (or (current-local-map) + (make-sparse-keymap))) + key new-func unbinding-registry prevailing-func) + (while keys-assoc + (setq curr-key (car (car keys-assoc))) + (setq new-func (car (cdr (car keys-assoc)))) + (setq prevailing-func (local-key-binding curr-key)) + (if (not (symbolp prevailing-func)) + (setq prevailing-func nil)) + ;; Register key being changed, prevailing local binding, & new binding: + (setq unbinding-registry + (cons (list curr-key (local-key-binding curr-key) new-func) + unbinding-registry)) + ; Make the binding: + + (define-key local-map curr-key new-func) + ; Increment for next iteration: + (setq keys-assoc (cdr keys-assoc))) + ; Establish modified map: + (use-local-map local-map) + ; Return the registry: + unbinding-registry) + ) + + ;;;_ ; minor-relinquish-keys (unbinding-registry) + (defun minor-relinquish-keys (unbinding-registry) + " Given registry of MODAL-BINDINGS, as produced by minor-bind-keys, + resume the former local keybindings of those keys that retain the + local bindings set by minor-bind-keys. Changed local bindings are + left alone, so other minor (user or modal) bindings are not disrupted. + + Returns a list of those registrations which were not, because of + tampering subsequent to the registration by minor-bind-keys, resumed." + (interactive) + (let (residue curr-item curr-key curr-resume curr-relinquish) + (while unbinding-registry + (setq curr-item (car unbinding-registry)) + (setq curr-key (car curr-item)) + (setq curr-resume (car (cdr curr-item))) + (setq curr-relinquish (car (cdr (cdr curr-item)))) + (if (equal (local-key-binding curr-key) curr-relinquish) + (if curr-resume + ;; Was a local binding to be resumed - do so: + (local-set-key curr-key curr-resume) + (local-unset-key curr-key)) + ;; Bindings been tampered with since registration - leave it be, and + ;; register so on residue list: + (setq residue (cons residue curr-item))) + (setq unbinding-registry (cdr unbinding-registry))) + residue) + ) + ;;;_ = outline-minor-prior-keys + (defvar outline-minor-prior-keys () + "Former key bindings assoc-list, for resumption from outline minor-mode.") + (make-variable-buffer-local 'outline-minor-prior-keys) + + ; Both major and minor mode + ; bindings are dictated by + ; this list - put your + ; settings here. + ;;;_ > outline-minor-bind-keys () + (defun outline-minor-bind-keys () + " Establish outline-mode keybindings as MINOR modality of current buffer." + (setq outline-minor-prior-keys + (minor-bind-keys outline-mode-keys))) + ;;;_ > outline-minor-relinquish-keys () + (defun outline-minor-relinquish-keys () + " Resurrect local keybindings as they were before outline-minor-bind-keys." + (minor-relinquish-keys outline-minor-prior-keys) + ) + + ;;;_ : Variables + ;;;_ = outline-mode-prior-settings + (defvar outline-mode-prior-settings nil + "For internal use by outline mode, registers settings to be resumed + on mode deactivation.") + (make-variable-buffer-local 'outline-mode-prior-settings) + ;;;_ > outline-resumptions (name &optional value) + (defun outline-resumptions (name &optional value) + + " Registers information for later reference, or performs resumption of + outline-mode specific values. First arg is NAME of variable affected. + optional second arg is list containing outline-mode-specific VALUE to + be impose on named variable, and to be registered. (It's a list so you + can specify registrations of null values.) If no value is specified, + the registered value is returned (encapsulated in the list, so the + caller can distinguish nil vs no value), and the registration is popped + from the list." + + (let ((on-list (assq name outline-mode-prior-settings)) + prior-capsule ; By 'capsule' i mean a list + ; containing a value, so we can + ; distinguish nil from no value. + ) + + (if value + + ;; Registering: + (progn + (if on-list + nil ; Already preserved prior value - don't mess with it. + ;; Register the old value, or nil if previously unbound: + (setq outline-mode-prior-settings + (cons (list name + (if (boundp name) (list (symbol-value name)))) + outline-mode-prior-settings))) + ; And impose the new value: + (set name (car value))) + + ;; Relinquishing: + (if (not on-list) + + ;; Oops, not registered - leave it be: + nil + + ;; Some registration: + ; reestablish it: + (setq prior-capsule (car (cdr on-list))) + (if prior-capsule + (set name (car prior-capsule)) ; Some prior value - reestablish it. + (makunbound name)) ; Previously unbound - demolish var. + ; Remove registration: + (let (rebuild) + (while outline-mode-prior-settings + (if (not (eq (car outline-mode-prior-settings) + on-list)) + (setq rebuild + (cons (car outline-mode-prior-settings) + rebuild))) + (setq outline-mode-prior-settings + (cdr outline-mode-prior-settings))) + (setq outline-mode-prior-settings rebuild))))) + ) + + ;;;_ : Overall + ;;;_ = outline-mode + (defvar outline-mode () "Allout outline mode minor-mode flag.") + (make-variable-buffer-local 'outline-mode) + ;;;_ > outline-mode (&optional toggle) + (defun outline-mode (&optional toggle) + " Set minor mode for editing outlines with selective display. + + Look below the description of the bindings for explanation of the + terminology use in outline-mode commands. + + (Note - this is not a proper minor mode, because it does affect key + bindings. It's not too improper, however, because it does resurrect + any bindings which have not been tampered with since it changed them.) + + Exposure Commands Movement Commands + C-c C-h outline-hide-current-subtree C-c C-n outline-next-visible-heading + C-c C-i outline-show-current-children C-c C-p outline-previous-visible-heading + C-c C-s outline-show-current-subtree C-c C-u outline-up-current-level + C-c C-o outline-show-current-entry C-c C-f outline-forward-current-level + C-c ! outline-show-all C-c C-b outline-backward-current-level + outline-hide-current-leaves C-c C-e outline-end-of-current-entry + C-c C-a outline-beginning-of-current-entry + + + Topic Header Generation Commands + C-c open-sibtopic Create a new sibling after current topic + C-c . open-subtopic ... an offspring of current topic + C-c , open-supertopic ... a sibling of the current topic's parent + + Level and Prefix Adjustment Commands + C-c > outline-shift-in Shift current topic and all offspring deeper + C-c < outline-shift-out ... less deep + C-c outline-rebullet-topic Reconcile bullets of topic and its offspring + - distinctive bullets are not changed, all + others set suitable according to depth + C-c b outline-rebullet-current-heading Prompt for alternate bullet for + current topic + C-c # outline-number-siblings Number bullets of topic and siblings - the + offspring are not affected. With repeat + count, revoke numbering. + + Killing and Yanking - all keep siblings numbering reconciled as appropriate + C-k outline-kill-line Regular kill line, but respects numbering ,etc + C-c C-k outline-kill-topic Kill current topic, including offspring + C-y outline-yank Yank, adjusting depth of yanked topic to + depth of heading if yanking into bare topic + heading (ie, prefix sans text) + M-y outline-yank-pop Is to outline-yank as yank-pop is to yank + + Misc commands + C-c @ outline-resolve-xref pop-to-buffer named by xref (cf + outline-file-xref-bullet) + C-c c outline-copy-exposed Copy outline sans all hidden stuff to + another buffer whose name is derived + from the current one - \"XXX exposed\" + M-x outlineify-sticky Activate outline mode for current buffer + and establish -*- outline -*- mode specifier + as well as file local vars to automatically + set exposure. Try it. + + Terminology + + Topic: A basic cohesive component of an emacs outline, which can + be closed (made hidden), opened (revealed), generated, + traversed, and shifted as units, using outline-mode functions. + A topic is composed of a HEADER, a BODY, and SUBTOPICs (see below). + + Exposure: Hidden (~closed~) topics are represented by ellipses ('...') + at the end of the visible SUPERTOPIC which contains them, + rather than by their actual text. Hidden topics are still + susceptable to editing and regular movement functions, they + just are not displayed normally, effectively collapsed into + the ellipses which represent them. Outline mode provides + the means to selectively expose topics based on their + NESTING. + + SUBTOPICS of a topic can be hidden and subsequently revealed + based on their DEPTH relative to the supertopic from which + the exposure is being done. + + The BODIES of a topic do not generally become visible except + during exposure of entire subtrees (see documentation for + '-current-subtree'), or when the entry is explicitly exposed + with the 'outline-show-entry' function, or (if you have a + special version of isearch installed) when encountered by + incremental searches. + + The CURRENT topic is the more recent visible one before or + including the text cursor. + + Header: The initial portion of an outline topic. It is composed of a + topic header PREFIX at the beginning of the line, followed by + text to the end of the EFFECTIVE LINE. + + Body: Any subsequent lines of text following a topic header and preceeding + the next one. This is also referred to as the entry for a topic. + + Prefix: The text which distinguishes topic headers from normal text + lines. There are two forms, both of which start at the beginning + of the topic header (EFFECTIVE) line. The length of the prefix + represents the DEPTH of the topic. The fundamental sort begins + either with solely an asterisk ('*') or else dot ('.') followed + by zero or more spaces and then an outline BULLET. [Note - you + can now designate your own, arbitrary HEADER-LEAD string, by + setting the variable 'outline-header-prefix'.] The second form + is for backwards compatability with the original emacs outline + mode, and consists solely of asterisks. Both sorts are + recognized by all outline commands. The first sort is generated + by outline topic production commands if the emacs variable + outline-old-style-prefixes is nil, otherwise the second style is + used. + + Bullet: An outline prefix bullet is one of the characters on either + of the outline bullet string vars, 'outline-plain-bullets-string' + and 'outline-distinctive-bullets-string'. (See their + documentation for more details.) The default choice of bullet + for any prefix depends on the DEPTH of the topic. + + Depth and Nesting: + The length of a topic header prefix, from the initial + character to the bullet (inclusive), represents the depth of + the topic. A topic is considered to contain the subsequent + topics of greater depth up to the next topic of the same + depth, and the contained topics are recursively considered to + be nested within all containing topics. Contained topics are + called subtopics. Immediate subtopics are called 'children'. + Containing topics are supertopicsimmediate supertopics are + 'parents'. Contained topics of the same depth are called + siblings. + + Effective line: The regular ascii text in which form outlines are + saved are manipulated in outline-mode to engage emacs' + selective-display faculty. The upshot is that the + effective end of an outline line can be terminated by + either a normal Unix newline char, \n, or the special + outline-mode eol, ^M. This only matters at the user + level when you're doing searches which key on the end of + line character." + + (interactive "P") + + (let* ((active (and (boundp 'outline-mode) outline-mode)) + (toggle (and toggle + (or (and (listp toggle)(car toggle)) + toggle))) + (explicit-activation (and toggle + (or (symbolp toggle) + (and (natnump toggle) + (not (zerop toggle))))))) + + (cond + + ((and (not explicit-activation) (or active toggle)) + ;; Activation not explicitly requested, and either in active + ;; state or deactivation specifically requested: + (outline-minor-relinquish-keys) + (outline-resumptions 'selective-display) + (outline-resumptions 'indent-tabs-mode) + (outline-resumptions 'paragraph-start) + (outline-resumptions 'paragraph-separate) + (setq outline-mode nil)) + + ;; Deactivation *not* indicated. + ((not active) + ;; Not already active - activate: + (outline-minor-bind-keys) + (outline-resumptions 'selective-display '(t)) + (outline-resumptions 'indent-tabs-mode '(nil)) + (or (assq 'outline-mode minor-mode-alist) + (setq minor-mode-alist + (cons '(outline-mode " Outline") minor-mode-alist))) + (set-outline-regexp) + + (make-local-variable 'paragraph-start) + (outline-resumptions 'paragraph-start + (list (concat paragraph-start "\\|^\\(" + outline-regexp "\\)"))) + (make-local-variable 'paragraph-separate) + (outline-resumptions 'paragraph-separate + (list (concat paragraph-separate "\\|^\\(" + outline-regexp "\\)"))) + + (if outline-enwrap-isearch-mode + (outline-enwrap-isearch)) + (if (and outline-use-hanging-indents + (boundp 'filladapt-prefix-table)) + ;; Add outline-prefix recognition to filladapt - not standard: + (progn (setq filladapt-prefix-table + (cons (cons (concat "\\(" outline-regexp "\\) ") + 'filladapt-hanging-list) + filladapt-prefix-table)) + (setq filladapt-hanging-list-prefixes + (cons outline-regexp + filladapt-hanging-list-prefixes)))) + (run-hooks 'outline-mode-hook) + (setq outline-mode t)) + ) ; cond + ) ; let* + ) ; defun + + + ;;;_ #2 Internal State-Tracking Variables + ;;; All basic outline functions which directly do string matches to + ;;; evaluate heading prefix location set the variables + ;;; outline-recent-prefix-beginning and outline-recent-prefix-end when + ;;; successful. Functions starting with 'outline-recent-' all use + ;;; this state, providing the means to avoid redundant searches for + ;;; just established data. This optimization can provide significant + ;;; speed improvement, but it must be employed carefully. + ;;;_ = outline-recent-prefix-beginning + (defvar outline-recent-prefix-beginning 0 + " Buffer point of the start of the last topic prefix encountered.") + (make-variable-buffer-local 'outline-recent-prefix-beginning) + ;;;_ = outline-recent-prefix-end + (defvar outline-recent-prefix-end 0 + " Buffer point of the end of the last topic prefix encountered.") + (make-variable-buffer-local 'outline-recent-prefix-end) + + ;;;_ #3 Exposure Control + + ;;;_ : Fundamental + ;;;_ > outline-flag-region (from to flag) + (defun outline-flag-region (from to flag) + " Hides or shows lines from FROM to TO, according to FLAG. + Uses emacs selective-display, where text is show if FLAG put at + beginning of line is `\\n' (newline character), while text is + hidden if FLAG is `\\^M' (control-M). + + returns nil iff no changes were effected." + (let ((buffer-read-only nil)) + (subst-char-in-region from to + (if (= flag ?\n) ?\^M ?\n) + flag t))) + ;;;_ > outline-flag-current-subtree (flag) + (defun outline-flag-current-subtree (flag) + (save-excursion + (outline-back-to-current-heading) + (outline-flag-region (point) + (progn (outline-end-of-current-subtree) (point)) + flag))) + + ;;;_ : Topic-specific + ;;;_ > outline-hide-current-entry () + (defun outline-hide-current-entry () + "Hide the body directly following this heading." + (interactive) + (outline-back-to-current-heading) + (save-excursion + (outline-flag-region (point) + (progn (outline-end-of-current-entry) (point)) + ?\^M))) + ;;;_ > outline-show-current-entry (&optional arg) + (defun outline-show-current-entry (&optional arg) + "Show body directly following this heading, or hide it if repeat count." + (interactive "P") + (if arg + (outline-hide-current-entry) + (save-excursion + (outline-flag-region (point) + (progn (outline-end-of-current-entry) (point)) + ?\n)))) + ;;;_ > outline-show-entry () + ; outline-show-entry basically for isearch dynamic exposure, as is... + (defun outline-show-entry () + " Like outline-show-current-entry, but reveals an entry that is nested + within hidden topics." + (interactive) + (save-excursion + (outline-goto-prefix) + (outline-flag-region (if (not (bobp)) (1- (point)) (point)) + (progn (outline-pre-next-preface) (point)) ?\n))) + ;;;_ > outline-hide-current-entry-completely () + ; ... outline-hide-current-entry-completely also for isearch dynamic exposure: + (defun outline-hide-current-entry-completely () + "Like outline-hide-current-entry, but conceal topic completely." + (interactive) + (save-excursion + (outline-goto-prefix) + (outline-flag-region (if (not (bobp)) (1- (point)) (point)) + (progn (outline-pre-next-preface) + (if (looking-at "\C-m") + (point) + (1- (point)))) + ?\C-m))) + ;;;_ > outline-show-current-subtree () + (defun outline-show-current-subtree () + "Show everything after this heading at deeper levels." + (interactive) + (outline-flag-current-subtree ?\n)) + ;;;_ > outline-hide-current-subtree (&optional just-close) + (defun outline-hide-current-subtree (&optional just-close) + + " Hide everything after this heading at deeper levels, or if it's + already closed, and optional arg JUST-CLOSE is nil, hide the current + level." + + (interactive) + (let ((orig-eol (save-excursion + (end-of-line)(outline-goto-prefix)(end-of-line)(point)))) + (outline-flag-current-subtree ?\^M) + (if (and (= orig-eol (save-excursion (goto-char orig-eol) + (end-of-line) + (point))) + ;; Structure didn't change - try hiding current level: + (if (not just-close) + (outline-up-current-level 1 t))) + (outline-hide-current-subtree)))) + ;;;_ > outline-show-current-branches () + (defun outline-show-current-branches () + "Show all subheadings of this heading, but not their bodies." + (interactive) + (outline-show-current-children 1000)) + ;;;_ > outline-hide-current-leaves () + (defun outline-hide-current-leaves () + "Hide all body after this heading at deeper levels." + (interactive) + (outline-back-to-current-heading) + (outline-hide-region-body (point) (progn (outline-end-of-current-subtree) + (point)))) + ;;;_ > outline-show-current-children (&optional level) + (defun outline-show-current-children (&optional level) + " Show all direct subheadings of this heading. Optional LEVEL specifies + how many levels below the current level should be shown." + (interactive "p") + (or level (setq level 1)) + (save-excursion + (save-restriction + (beginning-of-line) + (setq level (+ level (progn (outline-back-to-current-heading) + (outline-recent-depth)))) + (narrow-to-region (point) + (progn (outline-end-of-current-subtree) (1+ (point)))) + (goto-char (point-min)) + (while (and (not (eobp)) + (outline-next-heading)) + (if (<= (outline-recent-depth) level) + (save-excursion + (let ((end (1+ (point)))) + (forward-char -1) + (if (memq (preceding-char) '(?\n ?\^M)) + (forward-char -1)) + (outline-flag-region (point) end ?\n)))))))) + + ;;;_ : Region and beyond + ;;;_ > outline-show-all () + (defun outline-show-all () + "Show all of the text in the buffer." + (interactive) + (outline-flag-region (point-min) (point-max) ?\n)) + ;;;_ > outline-hide-bodies () + (defun outline-hide-bodies () + "Hide all of buffer except headings." + (interactive) + (outline-hide-region-body (point-min) (point-max))) + ;;;_ > outline-hide-region-body (start end) + (defun outline-hide-region-body (start end) + "Hide all body lines in the region, but not headings." + (save-excursion + (save-restriction + (narrow-to-region start end) + (goto-char (point-min)) + (while (not (eobp)) + (outline-flag-region (point) + (progn (outline-pre-next-preface) (point)) ?\^M) + (if (not (eobp)) + (forward-char + (if (looking-at "[\n\^M][\n\^M]") + 2 1))))))) + ;;;_ > outline-expose () + (defun outline-expose (spec &rest followers) + + "Dictate wholesale exposure scheme for current topic, according to SPEC. + + SPEC is either a number or a list of specs. Optional successive args + dictate exposure for subsequent siblings of current topic. + + Numbers, the symbols '*' and '+', and the null list dictate different + exposure depths for the corresponding topic. Numbers indicate the + depth to open, with negative numbers first forcing a close, and then + opening to their absolute value. Positive numbers jsut reopen, and 0 + just closes. '*' completely opens the topic, including bodies, and + '+' shows all the sub headers, but not the bodies. + + If the spec is a list, the first element must be a number which + dictates the exposure depth of the topic as a whole. Subsequent + elements of the list are nested SPECs, dictating the specific exposure + for the corresponding offspring of the topic, as the SPEC as a whole + does for the parent topic. + + Optional FOLLOWER elements dictate exposure for subsequent siblings + of the parent topic." + + (interactive "xExposure spec: ") + (save-excursion + (let ((start-point (progn (outline-goto-prefix)(point))) + done) + (cond ((null spec) nil) + ((symbolp spec) + (if (eq spec '*) (outline-show-current-subtree)) + (if (eq spec '+) (outline-show-current-branches))) + ((numberp spec) + (if (zerop spec) + ;; Just hide if zero: + (outline-hide-current-subtree t) + (if (> 0 spec) + ;; Close before opening if negative: + (progn (outline-hide-current-subtree) + (setq spec (* -1 spec)))) + (outline-show-current-children spec))) + ((listp spec) + (outline-expose (car spec)) + (if (and (outline-descend-to-depth (+ (outline-current-depth) 1)) + (not (outline-hidden-p))) + (while (and (setq spec (cdr spec)) + (not done)) + (outline-expose (car spec)) + (setq done (not (outline-next-sibling))))))))) + (while (and followers (outline-next-sibling)) + (outline-expose (car followers)) + (setq followers (cdr followers))) + ) + ;;;_ > outline-exposure '() + (defmacro outline-exposure (&rest spec) + " Literal frontend for 'outline-expose', passes arguments unevaluated, + so you needn't quote them." + (cons 'outline-expose (mapcar '(lambda (x) (list 'quote x)) spec))) + + ;;;_ #4 Navigation + + ;;;_ : Position Assessment + + ;;;_ . Residual state - from most recent outline context operation. + ;;;_ > outline-recent-depth () + (defun outline-recent-depth () + " Return depth of last heading encountered by an outline maneuvering + function. + + All outline functions which directly do string matches to assess + headings set the variables outline-recent-prefix-beginning and + outline-recent-prefix-end if successful. This function uses those settings + to return the current depth." + + (max 1 + (- outline-recent-prefix-end + outline-recent-prefix-beginning + outline-header-subtraction))) + ;;;_ > outline-recent-prefix () + (defun outline-recent-prefix () + " Like outline-recent-depth, but returns text of last encountered prefix. + + All outline functions which directly do string matches to assess + headings set the variables outline-recent-prefix-beginning and + outline-recent-prefix-end if successful. This function uses those settings + to return the current depth." + (buffer-substring outline-recent-prefix-beginning outline-recent-prefix-end)) + ;;;_ > outline-recent-bullet () + (defun outline-recent-bullet () + " Like outline-recent-prefix, but returns bullet of last encountered + prefix. + + All outline functions which directly do string matches to assess + headings set the variables outline-recent-prefix-beginning and + outline-recent-prefix-end if successful. This function uses those settings + to return the current depth of the most recently matched topic." + (buffer-substring (1- outline-recent-prefix-end) outline-recent-prefix-end)) + + ;;;_ . Active position evaluation - if you can't use the residual state. + ;;;_ > outline-on-current-heading-p () + (defun outline-on-current-heading-p () + " Return prefix beginning point if point is on same line as current + visible topic's header line." + (save-excursion + (beginning-of-line) + (and (looking-at outline-regexp) + (setq outline-recent-prefix-end (match-end 0) + outline-recent-prefix-beginning (match-beginning 0))))) + ;;;_ > outline-hidden-p () + (defun outline-hidden-p () + "True if point is in hidden text." + (interactive) + (save-excursion + (and (re-search-backward "[\C-j\C-m]" (point-min) t) + (looking-at "\C-m")))) + ;;;_ > outline-current-depth () + (defun outline-current-depth () + " Return the depth to which the current containing visible topic is + nested in the outline." + (save-excursion + (if (outline-back-to-current-heading) + (max 1 + (- outline-recent-prefix-end + outline-recent-prefix-beginning + outline-header-subtraction)) + 0))) + ;;;_ > outline-depth () + (defun outline-depth () + " Like outline-current-depth, but respects hidden as well as visible + topics." + (save-excursion + (if (outline-goto-prefix) + (outline-recent-depth) + (progn + (setq outline-recent-prefix-end (point) + outline-recent-prefix-beginning (point)) + 0)))) + ;;;_ > outline-get-current-prefix () + (defun outline-get-current-prefix () + " Topic prefix of the current topic." + (save-excursion + (if (outline-goto-prefix) + (outline-recent-prefix)))) + ;;;_ > outline-get-bullet () + (defun outline-get-bullet () + " Return bullet of containing topic (visible or not)." + (save-excursion + (and (outline-goto-prefix) + (outline-recent-bullet)))) + ;;;_ > outline-current-bullet () + (defun outline-current-bullet () + " Return bullet of current (visible) topic heading, or none if none found." + (condition-case err + (save-excursion + (outline-back-to-current-heading) + (buffer-substring (- outline-recent-prefix-end 1) + outline-recent-prefix-end)) + ;; Quick and dirty provision, ostensibly for missing bullet: + (args-out-of-range nil)) + ) + ;;;_ > outline-get-prefix-bullet (prefix) + (defun outline-get-prefix-bullet (prefix) + " Return the bullet of the header prefix string PREFIX." + ;; Doesn't make sense if we're old-style prefixes, but this just + ;; oughtn't be called then, so forget about it... + (if (string-match outline-regexp prefix) + (substring prefix (1- (match-end 0)) (match-end 0)))) + + ;;;_ : Within Topic + ;;;_ > outline-goto-prefix () + (defun outline-goto-prefix () + " Put point at beginning of outline prefix for current topic, visible + or not. + + Returns a list of char address of the beginning of the prefix and the + end of it, or nil if none." + + (cond ((and (or (save-excursion (beginning-of-line) (bobp)) + (memq (preceding-char) '(?\n ?\^M))) + (looking-at outline-regexp)) + (setq outline-recent-prefix-end (match-end 0) + outline-recent-prefix-beginning + (goto-char (match-beginning 0)))) + ((re-search-backward outline-line-boundary-regexp + ;; unbounded search, + ;; stay at limit and return nil if failed: + nil 1) + (setq outline-recent-prefix-end (match-end 2) + outline-recent-prefix-beginning + (goto-char (match-beginning 2)))) + ;; We should be at the beginning of the buffer if the last + ;; condition failed. line-boundary-regexp doesn't cover topic + ;; at bob - Check for it. + ((looking-at outline-regexp) + (setq outline-recent-prefix-end (match-end 0) + outline-recent-prefix-beginning + (goto-char (match-beginning 0))))) + ) + ;;;_ > outline-end-of-prefix () + (defun outline-end-of-prefix () + " Position cursor at beginning of header text." + (if (not (outline-goto-prefix)) + nil + (let ((match-data (match-data))) + (goto-char (match-end 0)) + (while (looking-at "[0-9]") (forward-char 1)) + (if (and (not (eolp)) (looking-at "\\s-")) (forward-char 1)) + (store-match-data match-data)) + ;; Reestablish where we are: + (outline-current-depth)) + ) + ;;;_ > outline-back-to-current-heading () + (defun outline-back-to-current-heading () + " Move to heading line of current visible topic, or beginning of heading + if already on visible heading line." + (beginning-of-line) + (prog1 (or (outline-on-current-heading-p) + (and (re-search-backward (concat "^\\(" outline-regexp "\\)") + nil + 'move) + (setq outline-recent-prefix-end (match-end 1) + outline-recent-prefix-beginning (match-beginning 1)))) + (if (interactive-p) (outline-end-of-prefix)) + ) + ) + ;;;_ > outline-pre-next-preface () + (defun outline-pre-next-preface () + "Skip forward to just before the next heading line. + + Returns that character position." + + (if (re-search-forward outline-line-boundary-regexp nil 'move) + (progn (goto-char (match-beginning 0)) + (setq outline-recent-prefix-end (match-end 2) + outline-recent-prefix-beginning (match-beginning 2)))) + ) + ;;;_ > outline-end-of-current-subtree () + (defun outline-end-of-current-subtree () + " Put point at the end of the last leaf in the currently visible topic." + (interactive) + (outline-back-to-current-heading) + (let ((opoint (point)) + (level (outline-recent-depth))) + (outline-next-heading) + (while (and (not (eobp)) + (> (outline-recent-depth) level)) + (outline-next-heading)) + (if (not (eobp)) (forward-char -1)) + (if (memq (preceding-char) '(?\n ?\^M)) (forward-char -1)))) + ;;;_ > outline-beginning-of-current-entry () + (defun outline-beginning-of-current-entry () + " Position the point at the beginning of the body of the current topic." + (interactive) + (outline-end-of-prefix)) + ;;;_ > outline-beginning-of-current-entry () + (defun outline-end-of-current-entry () + " Position the point at the end of the current topic's entry." + (interactive) + (outline-show-entry) + (prog1 (outline-pre-next-preface) + (if (and (not (bobp))(looking-at "^$")) + (forward-char -1))) + ) + + ;;;_ : Depth-wise + ;;;_ > outline-ascend-to-depth (depth) + (defun outline-ascend-to-depth (depth) + " Ascend to depth DEPTH, returning depth if successful, nil if not." + (if (and (> depth 0)(<= depth (outline-depth))) + (let ((last-good (point))) + (while (and (< depth (outline-depth)) + (setq last-good (point)) + (outline-beginning-of-level) + (outline-previous-heading))) + (if (= (outline-recent-depth) depth) + (progn (goto-char outline-recent-prefix-beginning) + depth) + (goto-char last-good) + nil)) + (if (interactive-p) (outline-end-of-prefix)) + ) + ) + ;;;_ > outline-descend-to-depth (depth) + (defun outline-descend-to-depth (depth) + " Descend to depth DEPTH within current topic, returning depth if + successful, nil if not." + (let ((start-point (point)) + (start-depth (outline-depth))) + (while + (and (> (outline-depth) 0) + (not (= depth (outline-recent-depth))) ; ... not there yet + (outline-next-heading) ; ... go further + (< start-depth (outline-recent-depth)))) ; ... still in topic + (if (and (> (outline-depth) 0) + (= (outline-recent-depth) depth)) + depth + (goto-char start-point) + nil)) + ) + ;;;_ > outline-up-current-level (arg &optional dont-complain) + (defun outline-up-current-level (arg &optional dont-complain) + " Move to the heading line of which the present line is a subheading. + With argument, move up ARG levels. Don't return an error if + second, optional argument DONT-COMPLAIN, is non-nil." + (interactive "p") + (outline-back-to-current-heading) + (let ((present-level (outline-recent-depth))) + ;; Loop for iterating arg: + (while (and (> (outline-recent-depth) 1) + (> arg 0) + (not (bobp))) + ;; Loop for going back over current or greater depth: + (while (and (not (< (outline-recent-depth) present-level)) + (outline-previous-visible-heading 1))) + (setq present-level (outline-current-depth)) + (setq arg (- arg 1))) + ) + (prog1 (if (<= arg 0) + outline-recent-prefix-beginning + (if (interactive-p) (outline-end-of-prefix)) + (if (not dont-complain) + (error "Can't ascend past outermost level."))) + (if (interactive-p) (outline-end-of-prefix))) + ) + + ;;;_ : Linear + ;;;_ > outline-next-visible-heading (arg) + (defun outline-next-visible-heading (arg) + " Move to the next visible heading line. + + With argument, repeats, backward if negative." + (interactive "p") + (if (< arg 0) (beginning-of-line) (end-of-line)) + (if (re-search-forward (concat "^\\(" outline-regexp "\\)") + nil + 'go + arg) + (progn (outline-end-of-prefix) + (setq outline-recent-prefix-end (match-end 1) + outline-recent-prefix-beginning (match-beginning 1)))) + ) + ;;;_ > outline-previous-visible-heading (arg) + (defun outline-previous-visible-heading (arg) + " Move to the previous heading line. + + With argument, repeats or can move forward if negative. + A heading line is one that starts with a `*' (or that outline-regexp + matches)." + (interactive "p") + (outline-next-visible-heading (- arg)) + ) + ;;;_ > outline-next-heading (&optional backward) + (defun outline-next-heading (&optional backward) + " Move to the heading for the topic (possibly invisible) before this one. + + Optional arg BACKWARD means search for most recent prior heading. + + Returns the location of the heading, or nil if none found." + + (if (and backward (bobp)) + nil + (if backward (outline-goto-prefix) + (if (and (bobp) (not (eobp))) + (forward-char 1))) + + (if (if backward + ;; searches are unbounded and return nil if failed: + (or (re-search-backward outline-line-boundary-regexp + nil + 0) + (looking-at outline-bob-regexp)) + (re-search-forward outline-line-boundary-regexp + nil + 0)) + (progn;; Got some valid location state - set vars: + (setq outline-recent-prefix-end + (or (match-end 2) outline-recent-prefix-end)) + (goto-char (setq outline-recent-prefix-beginning + (or (match-beginning 2) + outline-recent-prefix-beginning)))) + ) + ) + ) + ;;;_ > outline-previous-heading () + (defun outline-previous-heading () + " Move to the next (possibly invisible) heading line. + + Optional repeat-count arg means go that number of headings. + + Return the location of the beginning of the heading, or nil if not found." + + (outline-next-heading t) + ) + ;;;_ > outline-next-sibling (&optional backward) + (defun outline-next-sibling (&optional backward) + " Like outline-forward-current-level, but respects invisible topics. + + Go backward if optional arg BACKWARD is non-nil. + + Return depth if successful, nil otherwise." + + (if (and backward (bobp)) + nil + (let ((start-depth (outline-depth)) + (start-point (point)) + last-good) + (while (and (not (if backward (bobp) (eobp))) + (if backward (outline-previous-heading) + (outline-next-heading)) + (> (outline-recent-depth) start-depth))) + (if (and (not (eobp)) + (and (> (outline-depth) 0) + (= (outline-recent-depth) start-depth))) + outline-recent-prefix-beginning + (goto-char start-point) + nil) + ) + ) + ) + ;;;_ > outline-previous-sibling (&optional arg) + (defun outline-previous-sibling (&optional arg) + " Like outline-forward-current-level, but goes backwards and respects + invisible topics. + + Optional repeat count means go number backward. + + Note that the beginning of a level is (currently) defined by this + implementation to be the first of previous successor topics of + equal or greater depth. + + Return depth if successful, nil otherwise." + (outline-next-sibling t) + ) + ;;;_ > outline-beginning-of-level () + (defun outline-beginning-of-level () + " Go back to the first sibling at this level, visible or not." + (outline-end-of-level 'backward)) + ;;;_ > outline-end-of-level (&optional backward) + (defun outline-end-of-level (&optional backward) + " Go to the last sibling at this level, visible or not." + + (while (outline-previous-sibling)) + (prog1 (outline-recent-depth) + (if (interactive-p) (outline-end-of-prefix))) + ) + ;;;_ > outline-forward-current-level (arg &optional backward) + (defun outline-forward-current-level (arg &optional backward) + " Position the point at the next heading of the same level, taking + optional repeat-count. + + Returns that position, else nil if is not found." + (interactive "p") + (outline-back-to-current-heading) + (let ((amt (if arg (if (< arg 0) + ;; Negative arg - invert direction. + (progn (setq backward (not backward)) + (abs arg)) + arg);; Positive arg - just use it. + 1)));; No arg - use 1: + (while (and (> amt 0) + (outline-next-sibling backward)) + (setq amt (1- amt))) + (if (interactive-p) (outline-end-of-prefix)) + (if (> amt 0) + (error "This is the %s topic on level %d." + (if backward "first" "last") + (outline-current-depth)) + t) + ) + ) + ;;;_ > outline-backward-current-level (arg) + (defun outline-backward-current-level (arg) + " Position the point at the previous heading of the same level, taking + optional repeat-count. + + Returns that position, else nil if is not found." + (interactive "p") + (unwind-protect + (outline-forward-current-level arg t) + (outline-end-of-prefix)) + ) + + ;;;_ : Search with Dynamic Exposure (requires isearch-mode) + ;;;_ = outline-search-reconceal + (defvar outline-search-reconceal nil + "Used for outline isearch provisions, to track whether current search + match was concealed outside of search. The value is the location of the + match, if it was concealed, regular if the entire topic was concealed, in + a list if the entry was concealed.") + ;;;_ > outline-enwrap-isearch () + (defun outline-enwrap-isearch () + " Impose isearch-mode wrappers so isearch progressively exposes and + reconceals hidden topics when working in outline mode, but works + elsewhere. + + The function checks to ensure that the rebindings are done only once." + + ; Should isearch-mode be employed, + (if (or (not outline-enwrap-isearch-mode) + ; or are preparations already done? + (fboundp 'real-isearch-terminate)) + + ;; ... no - skip this all: + nil + + ;; ... yes: + + ; Ensure load of isearch-mode: + (if (or (and (fboundp 'isearch-mode) + (fboundp 'isearch-quote-char)) + (condition-case error + (load-library outline-enwrap-isearch-mode) + (file-error (message "Skipping isearch-mode provisions - %s '%s'" + (car (cdr error)) + (car (cdr (cdr error)))) + (sit-for 1) + ;; Inhibit subsequent tries and return nil: + (setq outline-enwrap-isearch-mode nil)))) + ;; Isearch-mode loaded, encapsulate specific entry points for + ;; outline dynamic-exposure business: + (progn + + ; stash crucial isearch-mode + ; funcs under known, private + ; names, then register wrapper + ; functions under the old + ; names, in their stead: + ; 'isearch-quit' is pre v 1.2: + (fset 'real-isearch-terminate + ; 'isearch-quit is pre v 1.2: + (or (if (fboundp 'isearch-quit) + (symbol-function 'isearch-quit)) + (if (fboundp 'isearch-abort) + ; 'isearch-abort' is v 1.2 and on: + (symbol-function 'isearch-abort)))) + (fset 'isearch-quit 'isearch-terminate/outline-provisions) + (fset 'isearch-abort 'isearch-terminate/outline-provisions) + (fset 'real-isearch-done (symbol-function 'isearch-done)) + (fset 'isearch-done 'isearch-done/outline-provisions) + (fset 'real-isearch-update (symbol-function 'isearch-update)) + (fset 'isearch-update 'isearch-update/outline-provisions) + (make-variable-buffer-local 'outline-search-reconceal)) + ) + ) + ) + ;;;_ > outline-isearch-arrival-business () + (defun outline-isearch-arrival-business () + " Do outline business like exposing current point, if necessary, + registering reconcealment requirements in outline-search-reconceal + accordingly. + + Set outline-search-reconceal to nil if current point is not + concealed, to value of point if entire topic is concealed, and a + list containing point if only the topic body is concealed. + + This will be used to determine whether outline-hide-current-entry + or outline-hide-current-entry-completely will be necessary to + restore the prior concealment state." + + (if (and (boundp 'outline-mode) outline-mode) + (setq outline-search-reconceal + (if (outline-hidden-p) + (save-excursion + (if (re-search-backward outline-line-boundary-regexp nil 1) + ;; Nil value means we got to b-o-b - wouldn't need + ;; to advance. + (forward-char 1)) + ; We'll return point or list + ; containing point, depending + ; on concealment state of + ; topic prefix. + (prog1 (if (outline-hidden-p) (point) (list (point))) + ; And reveal the current + ; search target: + (outline-show-entry))))))) + ;;;_ > outline-isearch-advancing-business () + (defun outline-isearch-advancing-business () + " Do outline business like deexposing current point, if necessary, + according to reconceal state registration." + (if (and (boundp 'outline-mode) outline-mode outline-search-reconceal) + (save-excursion + (if (listp outline-search-reconceal) + ;; Leave the topic visible: + (progn (goto-char (car outline-search-reconceal)) + (outline-hide-current-entry)) + ;; Rehide the entire topic: + (goto-char outline-search-reconceal) + (outline-hide-current-entry-completely)))) + ) + ;;;_ > isearch-terminate/outline-provisions () + (defun isearch-terminate/outline-provisions () + (interactive) + (if (and (boundp 'outline-mode) + outline-mode + outline-enwrap-isearch-mode) + (outline-isearch-advancing-business)) + (let ((outline-search-quitting t) + (outline-search-reconceal nil)) + (real-isearch-terminate))) + ;;;_ > isearch-done/outline-provisions () + (defun isearch-done/outline-provisions (&optional nopush) + (interactive) + (if (and (boundp 'outline-mode) + outline-mode + outline-enwrap-isearch-mode) + (progn (save-excursion + (if (and outline-search-reconceal + (not (listp outline-search-reconceal))) + ;; The topic was concealed - reveal it, its siblings, + ;; and any ancestors that are still concealed: + (progn + (message "(exposing destination)")(sit-for 0) + ;; Ensure target topic's siblings are exposed: + (outline-ascend-to-depth (1- (outline-current-depth))) + ;; Ensure that the target topic's ancestors are exposed + (while (outline-hidden-p) + (outline-show-current-children)) + (outline-show-current-children) + (outline-show-current-entry))) + (outline-isearch-arrival-business)) + (if (not (and (boundp 'outline-search-quitting) + outline-search-quitting)) + (outline-show-current-children)))) + (if nopush + ;; isearch-done in newer version of isearch mode takes arg: + (real-isearch-done nopush) + (real-isearch-done))) + ;;;_ > isearch-update/outline-provisions () + (defun isearch-update/outline-provisions () + " Wrapper around isearch which exposes and conceals hidden outline + portions encountered in the course of searching." + (if (not (and (boundp 'outline-mode) + outline-mode + outline-enwrap-isearch-mode)) + ;; Just do the plain business: + (real-isearch-update) + + ;; Ah - provide for outline conditions: + (outline-isearch-advancing-business) + (real-isearch-update) + (cond (isearch-success (outline-isearch-arrival-business)) + ((not isearch-success) (outline-isearch-advancing-business))) + ) + ) + + ;;;_ #5 Manipulation + + ;;;_ : Topic Format Assessment + ;;;_ > outline-solicit-alternate-bullet (depth &optional current-bullet) + (defun outline-solicit-alternate-bullet (depth &optional current-bullet) + + " Prompt for and return a bullet char as an alternative to the + current one, but offer one suitable for current depth DEPTH + as default." + + (let* ((default-bullet (or current-bullet + (outline-bullet-for-depth depth))) + (choice (solicit-char-in-string + (format "Select bullet: %s ('%s' default): " + outline-bullets-string + default-bullet) + (string-sans-char outline-bullets-string ?\\) + t))) + (if (string= choice "") default-bullet choice)) + ) + ;;;_ > outline-sibling-index (&optional depth) + (defun outline-sibling-index (&optional depth) + " Item number of this prospective topic among it's siblings. + + If optional arg depth is greater than current depth, then we're + opening a new level, and return 0. + + If less than this depth, ascend to that depth and count..." + + (save-excursion + (cond ((and depth (<= depth 0) 0)) + ((or (not depth) (= depth (outline-depth))) + (let ((index 1)) + (while (outline-previous-sibling) (setq index (1+ index))) + index)) + ((< depth (outline-recent-depth)) + (outline-ascend-to-depth depth) + (outline-sibling-index)) + (0)))) + ;;;_ > outline-distinctive-bullet (bullet) + (defun outline-distinctive-bullet (bullet) + " True if bullet is one of those on outline-distinctive-bullets-string." + (string-match (regexp-quote bullet) outline-distinctive-bullets-string)) + ;;;_ > outline-numbered-type-prefix (&optional prefix) + (defun outline-numbered-type-prefix (&optional prefix) + " True if current header prefix bullet is numbered bullet." + (and outline-numbered-bullet + (string= outline-numbered-bullet + (if prefix + (outline-get-prefix-bullet prefix) + (outline-get-bullet))))) + ;;;_ > outline-bullet-for-depth (&optional depth) + (defun outline-bullet-for-depth (&optional depth) + " Return outline topic bullet suited to DEPTH, or for current depth if none + specified." + ;; Find bullet in plain-bullets-string modulo DEPTH. + (if outline-stylish-prefixes + (char-to-string (aref outline-plain-bullets-string + (% (max 0 (- depth 2)) + outline-plain-bullets-string-len))) + outline-primary-bullet) + ) + + ;;;_ : Topic Production + ;;;_ > outline-make-topic-prefix (&optional prior-bullet + (defun outline-make-topic-prefix (&optional prior-bullet + new + depth + solicit + number-control + index) + ;; Depth null means use current depth, non-null means we're either + ;; opening a new topic after current topic, lower or higher, or we're + ;; changing level of current topic. + ;; Solicit dominates specified bullet-char. + " Generate a topic prefix suitable for optional arg DEPTH, or current + depth if not specified. + + All the arguments are optional. + + PRIOR-BULLET indicates the bullet of the prefix being changed, or + nil if none. This bullet may be preserved (other options + notwithstanding) if it is on the outline-distinctive-bullets-string, + for instance. + + Second arg NEW indicates that a new topic is being opened after the + topic at point, if non-nil. Default bullet for new topics, eg, may + be set (contingent to other args) to numbered bullets if previous + sibling is one. The implication otherwise is that the current topic + is being adjusted - shifted or rebulleted - and we don't consider + bullet or previous sibling. + + Third arg DEPTH forces the topic prefix to that depth, regardless of + the current topics' depth. + + Fourth arg SOLICIT non-nil provokes solicitation from the user of a + choice among the valid bullets. (This overrides other all the + options, including, eg, a distinctive PRIOR-BULLET.) + + Fifth arg, NUMBER-CONTROL, matters only if 'outline-numbered-bullet' + is non-nil *and* soliciting was not explicitly invoked. Then + NUMBER-CONTROL non-nil forces prefix to either numbered or + denumbered format, depending on the value of the sixth arg, INDEX. + + (Note that NUMBER-CONTROL does *not* apply to level 1 topics. Sorry...) + + If NUMBER-CONTROL is non-nil and sixth arg INDEX is non-nil then + the prefix of the topic is forced to be numbered. Non-nil + NUMBER-CONTROL and nil INDEX forces non-numbered format on the + bullet. Non-nil NUMBER-CONTROL and non-nil, non-number INDEX means + that the index for the numbered prefix will be derived, by counting + siblings back to start of level. If INDEX is a number, then that + number is used as the index for the numbered prefix (allowing, eg, + sequential renumbering to not requre this function counting back the + index for each successive sibling)." + + ;; The options are ordered in likely frequence of use, most common + ;; highest, least lowest. Ie, more likely to be doing prefix + ;; adjustments than soliciting, and yet more than numbering. + ;; Current prefix is least dominant, but most likely to be commonly + ;; specified... + + (let* (body + numbering + denumbering + (depth (or depth (outline-depth))) + (header-lead outline-header-prefix) + (bullet-char + + ;; Getting value for bullet char is practically the whole job: + + (cond + ; Simplest situation - level 1: + ((<= depth 1) (setq header-lead "") outline-primary-bullet) + ; Simple, too: all asterisks: + (outline-old-style-prefixes + ;; Cheat - make body the whole thing, null out header-lead and + ;; bullet-char: + (setq body (make-string depth + (string-to-char outline-primary-bullet))) + (setq header-lead "") + "") + + ;; (Neither level 1 nor old-style, so we're space padding. + ;; Sneak it in the condition of the next case, whatever it is.) + + ;; Solicitation overrides numbering and other cases: + ((progn (setq body (make-string (- depth 2) ?\ )) + ;; The actual condition: + solicit) + (let* ((got (outline-solicit-alternate-bullet depth))) + ;; Gotta check whether we're numbering and got a numbered bullet: + (setq numbering (and outline-numbered-bullet + (not (and number-control (not index))) + (string= got outline-numbered-bullet))) + ;; Now return what we got, regardless: + got)) + + ;; Numbering invoked through args: + ((and outline-numbered-bullet number-control) + (if (setq numbering (not (setq denumbering (not index)))) + outline-numbered-bullet + (if (and current-bullet + (not (string= outline-numbered-bullet + current-bullet))) + current-bullet + (outline-bullet-for-depth depth)))) + + ;;; Neither soliciting nor controlled numbering ;;; + ;;; (may be controlled denumbering, tho) ;;; + + ;; Check wrt previous sibling: + ((and new ; only check for new prefixes + (<= depth (outline-depth)) + outline-numbered-bullet ; ... & numbering enabled + (not denumbering) + (let ((sibling-bullet + (save-excursion + ;; Locate correct sibling: + (or (>= depth (outline-depth)) + (outline-ascend-to-depth depth)) + (outline-get-bullet)))) + (if (and sibling-bullet + (string= outline-numbered-bullet sibling-bullet)) + (setq numbering sibling-bullet))))) + + ;; Distinctive prior bullet? + ((and prior-bullet + (outline-distinctive-bullet prior-bullet) + ;; Either non-numbered: + (or (not (and outline-numbered-bullet + (string= prior-bullet outline-numbered-bullet))) + ;; or numbered, and not denumbering: + (setq numbering (not denumbering))) + ;; Here 'tis: + prior-bullet)) + + ;; Else, standard bullet per depth: + ((outline-bullet-for-depth depth))))) + + (concat header-lead + body + bullet-char + (if numbering + (format "%d" (cond ((and index (numberp index)) index) + (new (1+ (outline-sibling-index depth))) + ((outline-sibling-index)))))) + ) + ) + ;;;_ > open-topic (relative-depth &optional before) + (defun open-topic (relative-depth &optional before) + " Open a new topic at depth DEPTH. New topic is situated after current + one, unless optional flag BEFORE is non-nil, or unless current line + is complete empty (not even whitespace), in which case open is done + on current line. + + Nuances: + + - Creation of new topics is with respect to the visible topic + containing the cursor, regardless of intervening concealed ones. + + - New headers are generally created after/before the body of a + topic. However, they are created right at cursor location if the + cursor is on a blank line, even if that breaks the current topic + body. This is intentional, to provide a simple means for + deliberately dividing topic bodies. + + - Double spacing of topic lists is preserved. Also, the first + level two topic is created double-spaced (and so would be + subsequent siblings, if that's left intact). Otherwise, + single-spacing is used. + + - Creation of sibling or nested topics is with respect to the topic + you're starting from, even when creating backwards. This way you + can easily create a sibling in front of the current topic without + having to go to it's preceeding sibling, and then open forward + from there." + + (let* ((depth (+ (outline-current-depth) relative-depth)) + (opening-on-blank (if (looking-at "^\$") + (not (setq before nil)))) + opening-numbered ; Will get while computing ref-topic, below + ref-depth ; Will get while computing ref-topic, next + (ref-topic (save-excursion + (cond ((< relative-depth 0) + (outline-ascend-to-depth depth)) + ((>= relative-depth 1) nil) + (t (outline-back-to-current-heading))) + (setq ref-depth (outline-recent-depth)) + (setq opening-numbered + (save-excursion + (and outline-numbered-bullet + (or (<= relative-depth 0) + (outline-descend-to-depth depth)) + (if (outline-numbered-type-prefix) + outline-numbered-bullet)))) + (point))) + dbl-space + doing-beginning + ) + + (if (not opening-on-blank) + ; Positioning and vertical + ; padding - only if not + ; opening-on-blank: + (progn + (goto-char ref-topic) + (setq dbl-space ; Determine double space action: + (or (and (not (> relative-depth 0)) + ;; not descending, + (save-excursion + ;; preceeded by a blank line? + (forward-line -1) + (looking-at "^\\s-*$"))) + (and (= ref-depth 1) + (or before + (= depth 1) + (save-excursion + ;; Don't already have following + ;; vertical padding: + (not (outline-pre-next-preface))))))) + + ; Position to prior heading, + ; if inserting backwards: + (if before (progn (outline-back-to-current-heading) + (setq doing-beginning (bobp)) + (if (and (not (outline-previous-sibling)) + (not (bobp))) + (outline-previous-heading)))) + + (if (and (<= depth ref-depth) + (= ref-depth (outline-current-depth))) + ;; Not going inwards, don't snug up: + (if doing-beginning + (open-line (if dbl-space 2 1)) + (outline-end-of-current-subtree)) + ;; Going inwards - double-space if first offspring is, + ;; otherwise snug up. + (end-of-line) ; So we skip any concealed progeny. + (outline-pre-next-preface) + (if (bolp) + ;; Blank lines between current header body and next + ;; header - get to last substantive (non-white-space) + ;; line in body: + (re-search-backward "[^ \t\n]" nil t)) + (if (save-excursion + (outline-next-heading) + (if (> (outline-recent-depth) ref-depth) + ;; This is an offspring. + (progn (forward-line -1) + (looking-at "^\\s-*$")))) + (progn (forward-line 1) + (open-line 1))) + (end-of-line)) + ;;(if doing-beginning (goto-char doing-beginning)) + (if (not (bobp)) (newline (if dbl-space 2 1))) + )) + (insert-string (concat (outline-make-topic-prefix opening-numbered + t + depth) + " ")) + + ;;(if doing-beginning (save-excursion (newline (if dbl-space 2 1)))) + + + (outline-rebullet-heading nil ;;; solicit + depth ;;; depth + nil ;;; number-control + nil ;;; index + t) (end-of-line) + ) + ) + ;;;_ > open-subtopic (arg) + (defun open-subtopic (arg) + " Open new topic header at deeper level than the current one. + + Negative universal arg means to open deeper, but place the new topic + prior to the current one." + (interactive "p") + (open-topic 1 (> 0 arg))) + ;;;_ > open-sibtopic (arg) + (defun open-sibtopic (arg) + " Open new topic header at same level as the current one. Negative + universal arg means to place the new topic prior to the current + one." + (interactive "p") + (open-topic 0 (> 0 arg))) + ;;;_ > open-supertopic (arg) + (defun open-supertopic (arg) + " Open new topic header at shallower level than the current one. + Negative universal arg means to open shallower, but place the new + topic prior to the current one." + + (interactive "p") + (open-topic -1 (> 0 arg))) + + ;;;_ : Outline Alteration + ;;;_ . Topic Form Modification + ;;;_ > outline-reindent-body (old-depth new-depth) + (defun outline-reindent-body (old-depth new-depth) + " Reindent body lines which were indented at old-depth to new-depth. + + Note that refill of indented paragraphs is not done, and tabs are + not accomodated. ('untabify' your outline if you want to preserve + hanging body indents.)" + + (save-excursion + (save-restriction + (outline-goto-prefix) + (forward-char 1) + (let* ((old-spaces-expr (make-string (1+ old-depth) ?\ )) + (new-spaces-expr (concat (make-string (1+ new-depth) ?\ ) + ;; spaces followed by non-space: + "\\1"))) + (while (and (re-search-forward "[\C-j\C-m]" nil t) + (not (looking-at outline-regexp))) + (if (looking-at old-spaces-expr) + (replace-match new-spaces-expr))))))) + ;;;_ > outline-rebullet-current-heading (arg) + (defun outline-rebullet-current-heading (arg) + " Like non-interactive version 'outline-rebullet-heading', but work on + (only) visible heading containing point. + + With repeat count, solicit for bullet." + (interactive "P") + (save-excursion (outline-back-to-current-heading) + (outline-end-of-prefix) + (outline-rebullet-heading (not arg) ;;; solicit + nil ;;; depth + nil ;;; number-control + nil ;;; index + t) ;;; do-successors + ) + ) + ;;;_ > outline-rebullet-heading (&optional solicit ...) + (defun outline-rebullet-heading (&optional solicit + new-depth + number-control + index + do-successors) + + " Adjust bullet of current topic prefix. + + All args are optional. + + If SOLICIT is non-nil then the choice of bullet is solicited from + user. Otherwise the distinctiveness of the bullet or the topic + depth determines it. + + Second arg DEPTH forces the topic prefix to that depth, regardless + of the topic's current depth. + + Third arg NUMBER-CONTROL can force the prefix to or away from + numbered form. It has effect only if 'outline-numbered-bullet' is + non-nil and soliciting was not explicitly invoked (via first arg). + Its effect, numbering or denumbering, then depends on the setting + of the forth arg, INDEX. + + If NUMBER-CONTROL is non-nil and forth arg INDEX is nil, then the + prefix of the topic is forced to be non-numbered. Null index and + non-nil NUMBER-CONTROL forces denumbering. Non-nil INDEX (and + non-nil NUMBER-CONTROL) forces a numbered-prefix form. If non-nil + INDEX is a number, then that number is used for the numbered + prefix. Non-nil and non-number means that the index for the + numbered prefix will be derived by outline-make-topic-prefix. + + Fifth arg DO-SUCCESSORS t means re-resolve count on succeeding + siblings. + + Cf vars 'outline-stylish-prefixes', 'outline-old-style-prefixes', + and 'outline-numbered-bullet', which all affect the behavior of + this function." + + (let* ((current-depth (outline-depth)) + (new-depth (or new-depth current-depth)) + (mb outline-recent-prefix-beginning) + (me outline-recent-prefix-end) + (current-bullet (buffer-substring (- me 1) me)) + (new-prefix (outline-make-topic-prefix current-bullet + nil + new-depth + solicit + number-control + index))) + + ;; Don't need to reinsert identical one: + (if (and (= current-depth new-depth) + (string= current-bullet + (substring new-prefix (1- (length new-prefix))))) + t + + ;; New prefix probably different from old: + ;; get rid of old one: + (delete-region mb me) + (goto-char mb) + ;; Dispense with number if numbered-bullet prefix: + (if (and outline-numbered-bullet + (string= outline-numbered-bullet current-bullet) + (looking-at "[0-9]+")) + (delete-region (match-beginning 0)(match-end 0))) + + ;; Put in new prefix: + (insert-string new-prefix) + ) + + ;; Reindent the body if elected and depth changed: + (if (and outline-reindent-bodies + (not (= new-depth current-depth))) + (outline-reindent-body current-depth new-depth)) + + ;; Recursively rectify successive siblings if selected: + (if do-successors + (save-excursion + (while (outline-next-sibling) + (setq index + (cond ((numberp index) (1+ index)) + ((not number-control) (outline-sibling-index)))) + (if (outline-numbered-type-prefix) + (outline-rebullet-heading nil ;;; solicit + new-depth ;;; new-depth + number-control;;; number-control + index ;;; index + nil))))) ;;;(dont!)do-successors + ) + ) + ;;;_ > outline-rebullet-topic (arg) + (defun outline-rebullet-topic (arg) + " Like outline-rebullet-topic-grunt, but start from topic visible at point. + Descends into invisible as well as visible topics, however. + + With repeat count, shift topic depth by that amount." + (interactive "P") + (let ((start-col (current-column)) + (was-eol (eolp))) + (save-excursion + ;; Normalize arg: + (cond ((null arg) (setq arg 0)) + ((listp arg) (setq arg (car arg)))) + ;; Fill the user in, in case we're shifting a big topic: + (if (not (zerop arg)) (message "Shifting...")) + (outline-back-to-current-heading) + (if (<= (+ (outline-recent-depth) arg) 0) + (error "Attempt to shift topic below level 1")) + (outline-rebullet-topic-grunt arg) + (if (not (zerop arg)) (message "Shifting... done."))) + (move-to-column (+ start-col arg))) + ) + ;;;_ > outline-rebullet-topic-grunt (&optional relative-depth ...) + (defun outline-rebullet-topic-grunt (&optional relative-depth + starting-depth + starting-point + index + do-successors) + + " Rebullet the topic at point, visible or invisible, and all + contained subtopics. See outline-rebullet-heading for rebulleting + behavior. + + All arguments are optional. + + First arg RELATIVE-DEPTH means to shift the depth of the entire + topic that amount. + + The rest of the args are for internal recursive use by the function + itself. The are STARTING-DEPTH, STARTING-POINT, and INDEX." + + (let* ((relative-depth (or relative-depth 0)) + (new-depth (outline-depth)) + (starting-depth (or starting-depth new-depth)) + (on-starting-call (null starting-point)) + (index (or index + ;; Leave index null on starting call, so rebullet-heading + ;; calculates it at what might be new depth: + (and (or (zerop relative-depth) + (not on-starting-call)) + (outline-sibling-index)))) + (moving-outwards (< 0 relative-depth)) + (starting-point (or starting-point (point)))) + + ;; Sanity check for excessive promotion done only on starting call: + (and on-starting-call + moving-outwards + (> 0 (+ starting-depth relative-depth)) + (error "Attempt to shift topic out beyond level 1.")) ;;; ====> + + (cond ((= starting-depth new-depth) + ;; We're at depth to work on this one: + (outline-rebullet-heading nil ;;; solicit + (+ starting-depth ;;; starting-depth + relative-depth) + nil ;;; number + index ;;; index + ;; Every contained topic will get hit, + ;; and we have to get to outside ones + ;; deliberately: + nil) ;;; do-successors + ;; ... and work on subsequent ones which are at greater depth: + (setq index 0) + (outline-next-heading) + (while (and (not (eobp)) + (< starting-depth (outline-recent-depth))) + (setq index (1+ index)) + (outline-rebullet-topic-grunt relative-depth ;;; relative-depth + (1+ starting-depth);;;starting-depth + starting-point ;;; starting-point + index))) ;;; index + + ((< starting-depth new-depth) + ;; Rare case - subtopic more than one level deeper than parent. + ;; Treat this one at an even deeper level: + (outline-rebullet-topic-grunt relative-depth ;;; relative-depth + new-depth ;;; starting-depth + starting-point ;;; starting-point + index))) ;;; index + + (if on-starting-call + (progn + ;; Rectify numbering of former siblings of the adjusted topic, + ;; if topic has changed depth + (if (or do-successors + (and (not (zerop relative-depth)) + (or (= (outline-recent-depth) starting-depth) + (= (outline-recent-depth) (+ starting-depth + relative-depth))))) + (outline-rebullet-heading nil nil nil nil t)) + ;; Now rectify numbering of new siblings of the adjusted topic, + ;; if depth has been changed: + (progn (goto-char starting-point) + (if (not (zerop relative-depth)) + (outline-rebullet-heading nil nil nil nil t))))) + ) + ) + ;;;_ > outline-number-siblings (&optional denumber) + (defun outline-number-siblings (&optional denumber) + " Assign numbered topic prefix to this topic and its siblings. + + With universal argument, denumber - assign default bullet to this + topic and its siblings. + + With repeated universal argument (`^U^U'), solicit bullet for each + rebulleting each topic at this level." + + (interactive "P") + + (save-excursion + (outline-back-to-current-heading) + (outline-beginning-of-level) + (let ((index (if (not denumber) 1)) + (use-bullet (equal '(16) denumber)) + (more t)) + (while more + (outline-rebullet-heading use-bullet ;;; solicit + nil ;;; depth + t ;;; number-control + index ;;; index + nil) ;;; do-successors + (if index (setq index (1+ index))) + (setq more (outline-next-sibling))) + ) + ) + ) + ;;;_ > outline-shift-in (arg) + (defun outline-shift-in (arg) + " Decrease prefix depth of current heading and any topics collapsed + within it." + (interactive "p") + (outline-rebullet-topic arg)) + ;;;_ > outline-shift-out (arg) + (defun outline-shift-out (arg) + " Decrease prefix depth of current heading and any topics collapsed + within it." + (interactive "p") + (outline-rebullet-topic (* arg -1))) + ;;;_ . Surgery (kill-ring) functions with special provisions for outlines: + ;;;_ > outline-kill-line (&optional arg) + (defun outline-kill-line (&optional arg) + " Kill line, adjusting subsequent lines suitably for outline mode." + + (interactive "*P") + (if (not (and + (boundp 'outline-mode) outline-mode ; active outline mode, + outline-numbered-bullet ; numbers may need adjustment, + (bolp) ; may be clipping topic head, + (looking-at outline-regexp))) ; are clipping topic head. + ;; Above conditions do not obtain - just do a regular kill: + (kill-line arg) + ;; Ah, have to watch out for adjustments: + (let* ((depth (outline-depth)) + (ascender depth)) + (kill-line arg) + (sit-for 0) + (save-excursion + (if (not (looking-at outline-regexp)) + (outline-next-heading)) + (if (> (outline-depth) depth) + ;; An intervening parent was removed from after a subtree: + (setq depth (outline-recent-depth))) + (while (and (> (outline-depth) 0) + (> (outline-recent-depth) ascender) + (outline-ascend-to-depth (setq ascender + (1- ascender))))) + ;; Have to try going forward until we find another at + ;; desired depth: + (if (and outline-numbered-bullet + (outline-descend-to-depth depth)) + (outline-rebullet-heading nil ;;; solicit + depth ;;; depth + nil ;;; number-control + nil ;;; index + t) ;;; do-successors + ) + ) + ) + ) + ) + ;;;_ > outline-kill-topic () + (defun outline-kill-topic () + " Kill topic together with subtopics." + + ;; Some finagling is done to make complex topic kills appear faster + ;; than they actually are. A redisplay is performed immediately + ;; after the region is disposed of, though the renumbering process + ;; has yet to be performed. This means that there may appear to be + ;; a lag *after* the kill has been performed. + + (interactive) + (let* ((beg (outline-back-to-current-heading)) + (depth (outline-recent-depth))) + (outline-end-of-current-subtree) + (if (not (eobp)) + (forward-char 1)) + (kill-region beg (point)) + (sit-for 0) + (save-excursion + (if (and outline-numbered-bullet + (outline-descend-to-depth depth)) + (outline-rebullet-heading nil ;;; solicit + depth ;;; depth + nil ;;; number-control + nil ;;; index + t) ;;; do-successors + ) + ) + ) + ) + ;;;_ > outline-yank (&optional arg) + (defun outline-yank (&optional arg) + " Like regular yank, except does depth adjustment of yanked topics, when: + + 1 the stuff being yanked starts with a valid outline header prefix, and + 2 it is being yanked at the end of a line which consists of only a valid + topic prefix. + + If these two conditions hold then the depth of the yanked topics + are all adjusted the amount it takes to make the first one at the + depth of the header into which it's being yanked. + + The point is left in from of yanked, adjusted topics, rather than + at the end (and vice-versa with the mark). Non-adjusted yanks, + however, (ones that don't qualify for adjustment) are handled + exactly like normal yanks. + + Outline-yank-pop is used with outline-yank just as normal yank-pop + is used with normal yank in non-outline buffers." + + (interactive "*P") + (setq this-command 'yank) + (if (not (and (boundp 'outline-mode) outline-mode)) + + ;; Outline irrelevant - just do regular yank: + (yank arg) + + ;; Outline *is* relevant: + (let ((beginning (point)) + topic-yanked + established-depth) ; Depth of the prefix into which we're yanking. + ;; Get current depth and numbering ... Oops, not doing anything + ;; with the number just yet... + (if (and (eolp) + (save-excursion (beginning-of-line) + (looking-at outline-regexp))) + (setq established-depth (- (match-end 0) (match-beginning 0)))) + (yank arg) + (exchange-dot-and-mark) + (if (and established-depth ; the established stuff qualifies. + ;; The yanked stuff also qualfies - is topic(s): + (looking-at (concat "\\(" outline-regexp "\\)"))) + ;; Ok, adjust the depth of the yanked stuff. Note that the + ;; stuff may have more than a single root, so we have to + ;; iterate over all the top level ones yanked, and do them in + ;; such a way that the adjustment of one new one won't affect + ;; any of the other new ones. We use the focus of the + ;; narrowed region to successively exclude processed siblings. + (let* ((yanked-beg (match-beginning 1)) + (yanked-end (match-end 1)) + (yanked-bullet (buffer-substring (1- yanked-end) yanked-end)) + (yanked-depth (- yanked-end yanked-beg)) + (depth-diff (- established-depth yanked-depth)) + done + (more t)) + (setq topic-yanked t) + (save-excursion + (save-restriction + (narrow-to-region yanked-beg (mark)) + ;; First trim off excessive blank line at end, if any: + (goto-char (point-max)) + (if (looking-at "^$") (delete-char -1)) + (goto-char (point-min)) + ;; Work backwards, with each shallowest level, + ;; successively excluding the last processed topic + ;; from the narrow region: + (goto-char (point-max)) + (while more + (outline-back-to-current-heading) + ;; go as high as we can in each bunch: + (while (outline-ascend-to-depth + (1- (outline-depth)))) + (save-excursion + (outline-rebullet-topic-grunt depth-diff + (outline-depth) + (point))) + (if (setq more (not (bobp))) + (progn (widen) + (forward-char -1) + (narrow-to-region yanked-beg (point))))))) + ;; Preserve new bullet if it's a distinctive one, otherwise + ;; use old one: + (if (string-match yanked-bullet outline-distinctive-bullets-string) + (delete-region (save-excursion + (beginning-of-line) + (point)) + yanked-beg) + (delete-region yanked-beg (+ yanked-beg established-depth)) + ;; and extraneous digits and a space: + (while (looking-at "[0-9]") (delete-char 1)) + (if (looking-at " ") (delete-char 1)) + ) + (goto-char yanked-beg) + ) + ;; Not established-depth or looking-at... + (setq topic-yanked (looking-at outline-regexp)) + (exchange-dot-and-mark)) + (if (and topic-yanked outline-numbered-bullet) + (progn + ;; Renumber, in case necessary: + (sit-for 0) + (save-excursion + (goto-char beginning) + (if (outline-goto-prefix) + (outline-rebullet-heading nil ;;; solicit + (outline-depth) ;;; depth + nil ;;; number-control + nil ;;; index + t) ;;; do-successors + ) + ) + ) + ) + ) + ) + ) + ;;;_ > outline-yank-pop (&optional arg) + (defun outline-yank-pop (&optional arg) + " Just like yank-pop, but works like outline-yank when popping + topics just after fresh outline prefixes. Adapts level of popped + stuff to level of fresh prefix." + + (interactive "*p") + (if (not (eq last-command 'yank)) + (error "Previous command was not a yank")) + (setq this-command 'yank) + (delete-region (point) (mark)) + (rotate-yank-pointer arg) + (outline-yank) + ) + + ;;;_ : Specialty bullet functions + ;;;_ . File Cross references + ;;;_ > outline-resolve-xref () + (defun outline-resolve-xref () + " Pop to file associated with current heading, if it has an xref bullet + (according to setting of 'outline-file-xref-bullet')." + (interactive) + (if (not outline-file-xref-bullet) + (error + "outline cross references disabled - no 'outline-file-xref-bullet'") + (if (not (string= (outline-current-bullet) outline-file-xref-bullet)) + (error "current heading lacks cross-reference bullet '%s'" + outline-file-xref-bullet) + (let (file-name) + (save-excursion + (let* ((text-start outline-recent-prefix-end) + (heading-end (progn (outline-pre-next-preface) + (point)))) + (goto-char text-start) + (setq file-name + (if (re-search-forward "\\s-\\(\\S-*\\)" heading-end t) + (buffer-substring (match-beginning 1) (match-end 1)))))) + (setq file-name + (if (not (= (aref file-name 0) ?:)) + (expand-file-name file-name) + ; A registry-files ref, strip the ':' + ; and try to follow it: + (let ((reg-ref (reference-registered-file + (substring file-name 1) nil t))) + (if reg-ref (car (cdr reg-ref)))))) + (if (or (file-exists-p file-name) + (if (file-writable-p file-name) + (y-or-n-p (format "%s not there, create one? " + file-name)) + (error "%s not found and can't be created" file-name))) + (condition-case failure + (find-file-other-window file-name) + (error failure)) + (error "%s not found" file-name)) + ) + ) + ) + ) + ;;;_ ; Bizarreness - ignore this! + ;------------------------------------------------------------------- + ; Something added solely for use by a "smart menu" package someone got + ; off the net. I have no idea whether this is appropriate code. + + (defun outline-to-entry-end (&optional include-sub-entries curr-entry-level) + " Go to end of whole entry if optional INCLUDE-SUB-ENTRIES is non-nil. + CURR-ENTRY-LEVEL is an integer representing the length of the current level + string which matched to 'outline-regexp'. If INCLUDE-SUB-ENTRIES is nil, + CURR-ENTRY-LEVEL is not needed." + (while (and (setq next-entry-exists + (re-search-forward outline-regexp nil t)) + include-sub-entries + (save-excursion + (beginning-of-line) + (> (outline-depth) curr-entry-level)))) + (if next-entry-exists + (progn (beginning-of-line) (point)) + (goto-char (point-max)))) + ;;; Outline topic prefix and level adjustment funcs: + + ;;;_ #6 miscellaneous + ;;;_ > outline-copy-exposed (&optional workbuf) + (defun outline-copy-exposed (&optional workbuf) + " Duplicate buffer to other buffer, sans hidden stuff. + + Without repeat count, this simple-minded function just generates + the new buffer by concatenating the current buffer name with \" + exposed\", and doing a 'get-buffer' on it." + + (interactive) + (if (not workbuf) (setq workbuf (concat (buffer-name) " exposed"))) + (let ((buf (current-buffer))) + (if (not (get-buffer workbuf)) + (generate-new-buffer workbuf)) + (pop-to-buffer workbuf) + (erase-buffer) + (insert-buffer buf) + (replace-regexp "\^M[^\^M\^J]*" "") + (goto-char (point-min)) + ) + ) + ;;;_ > outlineify-sticky () + (defun outlineify-sticky (&optional arg) + " Activate outline mode and establish file eval to set initial exposure. + + Invoke with a string argument to designate a string to prepend to + topic prefixs, or with a universal argument to be prompted for the + string to be used. Suitable defaults are provided for lisp, + emacs-lisp, c, c++, awk, sh, csh, and perl modes." + + (interactive "P") (outline-mode t) + (cond (arg + (if (stringp arg) + ;; Use arg as the header-prefix: + (outline-lead-with-comment-string arg) + ;; Otherwise, let function solicit string: + (setq arg (outline-lead-with-comment-string)))) + ((member major-mode '(emacs-lisp-mode lisp-mode)) + (setq arg (outline-lead-with-comment-string ";;;_"))) + ((member major-mode '(awk-mode csh-mode sh-mode perl-mode)) + ;; Bare '#' (ie, not '#_') so we don't break the magic number: + (setq arg (outline-lead-with-comment-string "#"))) + ((eq major-mode 'c++-mode) + (setq arg (outline-lead-with-comment-string "//_"))) + ((eq major-mode 'c-mode) + ;; User's will have to know to close off the comments: + (setq arg (outline-lead-with-comment-string "/*_")))) + (let* ((lead-prefix (format "%s %s" + outline-header-prefix + outline-primary-bullet)) + (lead-line (format "%s%s %s\n%s %s\n %s %s %s" + outline-header-prefix + outline-primary-bullet + "Local emacs vars." + "'(This topic sets initial outline exposure" + "of the file when loaded by emacs," + "Encapsulate it in comments if" + "file is a program" + "otherwise ignore it,"))) + + (save-excursion + ; Put a topic at the top, if + ; none there already: + (goto-char (point-min)) + (if (not (looking-at outline-regexp)) + (insert-string + (if (not arg) outline-primary-bullet + (format "%s%s\n" outline-header-prefix outline-primary-bullet)))) + + ; File-vars stuff, at the bottom: + (goto-char (point-max)) + ; Insert preamble: + (insert-string (format "\n\n%s\n%s %s %s\n%s %s " + lead-line + lead-prefix + "local" + "variables:" + lead-prefix + "eval:")) + ; Insert outline-mode activation: + (insert-string + (format "%s\n\t\t%s\n\t\t\t%s\n" + "(condition-case err" + "(save-excursion" + "(outline-mode t)")) + ; Conditionally insert prefix + ; leader customization: + (if arg (insert-string (format "\t\t\t(%s \"%s\")\n" + "outline-lead-with-comment-string" + arg))) + ; Insert ammouncement and + ; exposure control: + (insert-string + (format "\t\t\t%s %s\n\t\t\t%s %s\n\t\t%s %s" + "(message \"Adjusting '%s' visibility\"" + "(buffer-name))" + "(goto-char 0)" + "(outline-exposure -1 0))" + "(error (message " + "\"Failed file var 'allout' provisions\")))")) + ; Insert postamble: + (insert-string (format "\n%s End: )\n" + lead-prefix))))) + ;;;_ > solicit-char-in-string (prompt string &optional do-defaulting) + (defun solicit-char-in-string (prompt string &optional do-defaulting) + " Solicit (with first arg PROMPT) choice of a character from string STRING. + + Optional arg DO-DEFAULTING indicates to accept empty input (CR)." + + (let ((new-prompt prompt) + got) + + (while (not got) + (message "%s" new-prompt) + + ;; We do our own reading here, so we can circumvent, eg, special + ;; treatment for '?' character. (Might oughta change minibuffer + ;; keymap instead, oh well.) + (setq got + (char-to-string (let ((cursor-in-echo-area t)) (read-char)))) + + (if (null (string-match got string)) + (if (and do-defaulting (string= got "\^M")) + ;; We're defaulting, return null string to indicate that: + (setq got "") + ;; Failed match and not defaulting, + ;; set the prompt to give feedback, + (setq new-prompt (concat prompt + got + " ...pick from: " + string + "")) + ;; and set loop to try again: + (setq got nil)) + ;; Got a match - give feedback: + (message ""))) + ;; got something out of loop - return it: + got) + ) + ;;;_ > string-sans-char (string char) + (defun string-sans-char (string char) + " Return a copy of STRING that lacks all instances of CHAR." + (cond ((string= string "") "") + ((= (aref string 0) char) (string-sans-char (substring string 1) char)) + ((concat (substring string 0 1) + (string-sans-char (substring string 1) char))))) + + ;;;_* Local emacs vars. + '( + Local variables: + eval: (save-excursion + (if (not (condition-case err (outline-mode t) + (wrong-number-of-arguments nil))) + (progn + (message + "Allout outline-mode not loaded, not adjusting buffer exposure") + (sit-for 1)) + (message "Adjusting '%s' visibility" (buffer-name)) + (outline-lead-with-comment-string ";;;_") + (goto-char 0) + (outline-exposure (-1 () () () 1) 0))) + End: + ) + diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/ange-ftp.el emacs-19.10/lisp/ange-ftp.el *** emacs-19.9/lisp/ange-ftp.el Wed May 26 01:36:04 1993 --- emacs-19.10/lisp/ange-ftp.el Sat May 29 00:30:18 1993 *************** *** 860,864 **** ;;;; ------------------------------------------------------------ ! (defconst ange-ftp-version "$Revision: 1.18 $") (defvar ange-ftp-data-buffer-name " *ftp data*" --- 860,864 ---- ;;;; ------------------------------------------------------------ ! (defconst ange-ftp-version "$Revision: 1.19 $") (defvar ange-ftp-data-buffer-name " *ftp data*" *************** *** 3659,3663 **** (ange-ftp-uncompress name newfile))) (let (file-name-handler-alist) ! (dired-compress-filename name))))) ;; Copy FILE to this machine, compress it, and copy out to NFILE. --- 3659,3663 ---- (ange-ftp-uncompress name newfile))) (let (file-name-handler-alist) ! (dired-compress-file name))))) ;; Copy FILE to this machine, compress it, and copy out to NFILE. diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/c-mode.el emacs-19.10/lisp/c-mode.el *** emacs-19.9/lisp/c-mode.el Sun May 16 13:42:41 1993 --- emacs-19.10/lisp/c-mode.el Sat May 29 14:14:09 1993 *************** *** 1272,1293 **** (funcall search-function "#[ \t]*\\(if\\|elif\\|endif\\)" ! nil t) ! (progn ! (beginning-of-line) ! (looking-at "^[ \t]*#[ \t]*\\(if\\|elif\\|endif\\)"))) ! ;; Update depth according to what we found. (beginning-of-line) ! (cond ((looking-at "[ \t]*#[ \t]*endif") ! (setq depth (+ depth increment))) ! ((looking-at "[ \t]*#[ \t]*elif") ! (if (and forward (= depth 0)) ! (setq found (point)))) ! (t (setq depth (- depth increment)))) ! ;; If this line exits a level of conditional, exit inner loop. ! (if (< depth 0) ! (setq found (point))) ! ;; When searching forward, start from end of line ! ;; so that we don't find the same line again. ! (if forward (end-of-line)))) (or found (error "No containing preprocessor conditional")) --- 1272,1294 ---- (funcall search-function "#[ \t]*\\(if\\|elif\\|endif\\)" ! nil t)) (beginning-of-line) ! ;; Now verify it is really a preproc line. ! (if (looking-at "^[ \t]*#[ \t]*\\(if\\|elif\\|endif\\)") ! (progn ! ;; Update depth according to what we found. ! (beginning-of-line) ! (cond ((looking-at "[ \t]*#[ \t]*endif") ! (setq depth (+ depth increment))) ! ((looking-at "[ \t]*#[ \t]*elif") ! (if (and forward (= depth 0)) ! (setq found (point)))) ! (t (setq depth (- depth increment)))) ! ;; If this line exits a level of conditional, exit inner loop. ! (if (< depth 0) ! (setq found (point))) ! ;; When searching forward, start from end of line ! ;; so that we don't find the same line again. ! (if forward (end-of-line)))))) (or found (error "No containing preprocessor conditional")) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/completion.el emacs-19.10/lisp/completion.el *** emacs-19.9/lisp/completion.el Thu May 27 00:59:02 1993 --- emacs-19.10/lisp/completion.el Thu May 27 20:32:20 1993 *************** *** 121,129 **** ;;; ;;; M-X completion-mode toggles whether or not new words are added to the ! ;;; database by changing the value of *completep*. ;;; ;;; SAVING/LOADING COMPLETIONS ;;; Completions are automatically saved from one session to another ! ;;; (unless *save-completions-p* or *completep* is nil). ;;; Loading this file (or calling initialize-completions) causes EMACS ;;; to load a completions database for a saved completions file --- 121,129 ---- ;;; ;;; M-X completion-mode toggles whether or not new words are added to the ! ;;; database by changing the value of enable-completion. ;;; ;;; SAVING/LOADING COMPLETIONS ;;; Completions are automatically saved from one session to another ! ;;; (unless save-completions-flag or enable-completion is nil). ;;; Loading this file (or calling initialize-completions) causes EMACS ;;; to load a completions database for a saved completions file *************** *** 141,147 **** ;;; add-permanent-completion to do this ;;; ! ;;; Completions are saved only if *completep* is T. The number of old ;;; versions kept of the saved completions file is controlled by ! ;;; *completion-file-versions-kept*. ;;; ;;; COMPLETE KEY OPTIONS --- 141,147 ---- ;;; add-permanent-completion to do this ;;; ! ;;; Completions are saved only if enable-completion is T. The number of old ;;; versions kept of the saved completions file is controlled by ! ;;; completions-file-versions-kept. ;;; ;;; COMPLETE KEY OPTIONS *************** *** 194,213 **** ;;; - ;;;----------------------------------------------- - ;;; Porting Notes - ;;;----------------------------------------------- - ;;; - ;;; Should run on 18.49, 18.52, and 19.0 - ;;; Tested on vanilla version. - ;;; This requires the standard cl.el file. It could easily rewritten to not - ;;; require it. It defines remove which is not in cl.el. - ;;; - ;;; FUNCTIONS BASHED - ;;; The following functions are bashed but it is done carefully and should not - ;;; cause problems :: - ;;; kill-region, next-line, previous-line, newline, newline-and-indent, - ;;; kill-emacs - ;;; - ;;; ;;;--------------------------------------------------------------------------- ;;; Functions you might like to call --- 194,197 ---- *************** *** 335,348 **** ;;; Code: - ;;;----------------------------------------------- - ;;; Requires - ;;; Version - ;;;----------------------------------------------- - - ;;(require 'cl) ;; DOTIMES, etc. {actually done after variable defs.} - - (defconst *completion-version* 10 - "Tested for EMACS versions 18.49, 18.52, 18.55 and beyond and 19.0.") - ;;;--------------------------------------------------------------------------- ;;; User changeable parameters --- 319,322 ---- *************** *** 349,409 **** ;;;--------------------------------------------------------------------------- ! (defvar *completep* t ! "*Set to nil to turn off the completion hooks. ! (No new words added to the database or saved to the init file).") ! ! (defvar *save-completions-p* t ! "*If non-nil, the most useful completions are saved to disk when ! exiting EMACS. See *saved-completions-decay-factor*.") ! (defvar *saved-completions-filename* "~/.completions" "*The filename to save completions to.") ! (defvar *saved-completion-retention-time* 336 ! "*The maximum amount of time to save a completion for if it has not been used. ! In hours. (1 day = 24, 1 week = 168). If this is 0, non-permanent completions will not be saved unless these are used. Default is two weeks.") ! (defvar *separator-character-uses-completion-p* nil ! "*If non-nil, typing a separator character after a completion symbol that ! is not part of the database marks it as used (so it will be saved).") ! ! (defvar *completion-file-versions-kept* kept-new-versions ! "*Set this to the number of versions you want save-completions-to-file ! to keep.") ! ! (defvar *print-next-completion-speed-threshold* 4800 ! "*The baud rate at or above which to print the next potential completion ! after inserting the current one." ! ) ! (defvar *print-next-completion-does-cdabbrev-search-p* nil ! "*If non-nil, the next completion prompt will also do a cdabbrev search. This can be time consuming.") ! (defvar *cdabbrev-radius* 15000 ! "*How far to search for cdabbrevs. In number of characters. If nil, the ! whole buffer is searched.") ! ! (defvar *modes-for-completion-find-file-hook* '(lisp c) ! "*A list of modes {either C or Lisp}. Definitions from visited files ! of those types are automatically added to the completion database.") ! ! (defvar *record-cmpl-statistics-p* nil ! "*If non-nil, statistics are automatically recorded.") ! ! (defvar *completion-auto-save-period* 1800 ! "*The period in seconds to wait for emacs to be idle before autosaving ! the completions. Default is a 1/2 hour.") ! (defconst *completion-min-length* nil ;; defined below in eval-when "*The minimum length of a stored completion. DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.") ! (defconst *completion-max-length* nil ;; defined below in eval-when "*The maximum length of a stored completion. DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.") ! (defconst *completion-prefix-min-length* nil ;; defined below in eval-when "The minimum length of a completion search string. DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.") --- 323,381 ---- ;;;--------------------------------------------------------------------------- ! (defvar enable-completion t ! "*Non-nil means enable recording and saving of completions. ! If nil, no new words added to the database or saved to the init file.") ! ! (defvar save-completions-flag t ! "*Non-nil means save most-used completions when exiting Emacs. ! See also `saved-completions-retention-time'.") ! (defvar save-completions-file-name "~/.completions" "*The filename to save completions to.") ! (defvar save-completions-retention-time 336 ! "*Discard a completion if unused for this many hours. ! \(1 day = 24, 1 week = 168). If this is 0, non-permanent completions will not be saved unless these are used. Default is two weeks.") ! (defvar completion-on-separator-character nil ! "*Non-nil means separator characters mark previous word as used. ! This means the word will be saved as a completion.") ! ! (defvar completions-file-versions-kept kept-new-versions ! "*Number of versions to keep for the saved completions file.") ! (defvar completion-prompt-speed-threshold 4800 ! "*Minimum output speed at which to display next potential completion.") ! ! (defvar completion-cdabbrev-prompt-flag nil ! "*If non-nil, the next completion prompt does a cdabbrev search. This can be time consuming.") ! (defvar completion-search-distance 15000 ! "*How far to search in the buffer when looking for completions. ! In number of characters. If nil, search the whole buffer.") ! ! (defvar completions-merging-modes '(lisp c) ! "*List of modes {`c' or `lisp'} for automatic completions merging. ! Definitions from visited files which have these modes ! are automatically added to the completion database.") ! ! ;;;(defvar *record-cmpl-statistics-p* nil ! ;;; "*If non-nil, record completion statistics.") ! ! ;;;(defvar *completion-auto-save-period* 1800 ! ;;; "*The period in seconds to wait for emacs to be idle before autosaving ! ;;;the completions. Default is a 1/2 hour.") ! (defconst completion-min-length nil ;; defined below in eval-when "*The minimum length of a stored completion. DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.") ! (defconst completion-max-length nil ;; defined below in eval-when "*The maximum length of a stored completion. DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.") ! (defconst completion-prefix-min-length nil ;; defined below in eval-when "The minimum length of a completion search string. DON'T CHANGE WITHOUT RECOMPILING ! This is used by macros.") *************** *** 417,427 **** (eval-when-compile-load-eval ;; These vars. are defined at both compile and load time. ! (setq *completion-min-length* 6) ! (setq *completion-max-length* 200) ! (setq *completion-prefix-min-length* 3) ! ;; Need this file around too ! (require 'cl))) (completion-eval-when) ;;;--------------------------------------------------------------------------- --- 389,400 ---- (eval-when-compile-load-eval ;; These vars. are defined at both compile and load time. ! (setq completion-min-length 6) ! (setq completion-max-length 200) ! (setq completion-prefix-min-length 3))) (completion-eval-when) + + ;; Need this file around too + (require 'cl) ;;;--------------------------------------------------------------------------- *************** *** 430,439 **** (defvar cmpl-initialized-p nil ! "Set to t when the completion system is initialized. Indicates that the ! old completion file has been read in.") (defvar cmpl-completions-accepted-p nil ! "Set to T as soon as the first completion has been accepted. Used to ! decide whether to save completions.") --- 403,412 ---- (defvar cmpl-initialized-p nil ! "Set to t when the completion system is initialized. ! Indicates that the old completion file has been read in.") (defvar cmpl-completions-accepted-p nil ! "Set to t as soon as the first completion has been accepted. ! Used to decide whether to save completions.") *************** *** 446,571 **** ;;;----------------------------------------------- - (defun remove (item list) - (setq list (copy-sequence list)) - (delq item list)) - (defun minibuffer-window-selected-p () "True iff the current window is the minibuffer." ! (eq (minibuffer-window) (selected-window))) ! ! (eval-when-compile-load-eval ! (defun function-needs-autoloading-p (symbol) ! ;; True iff symbol is represents an autoloaded function and has not yet been ! ;; autoloaded. ! (and (listp (symbol-function symbol)) ! (eq 'autoload (car (symbol-function symbol))) ! ))) ! ! (defun function-defined-and-loaded (symbol) ! ;; True iff symbol is bound to a loaded function. ! (and (fboundp symbol) (not (function-needs-autoloading-p symbol)))) ! (defmacro read-time-eval (form) ;; Like the #. reader macro (eval form)) - ;;;----------------------------------------------- - ;;; Emacs Version 19 compatibility - ;;;----------------------------------------------- - - (defconst emacs-is-version-19 (string= (substring emacs-version 0 2) "19")) - - (defun cmpl19-baud-rate () - (if emacs-is-version-19 - baud-rate - (baud-rate))) - - (defun cmpl19-sit-for (amount) - (if (and emacs-is-version-19 (= amount 0)) - (sit-for 1 t) - (sit-for amount))) - - ;;;----------------------------------------------- - ;;; Advise - ;;;----------------------------------------------- - - (defmacro completion-advise (function-name where &rest body) - "Adds the body code before calling function. This advise is not compiled. - WHERE is either :BEFORE or :AFTER." - (completion-advise-1 function-name where body) - ) - - (defmacro cmpl-apply-as-top-level (function arglist) - "Calls function-name interactively if inside a call-interactively." - (list 'cmpl-apply-as-top-level-1 function arglist - '(let ((executing-macro nil)) (interactive-p))) - ) - - (defun cmpl-apply-as-top-level-1 (function arglist interactive-p) - (if (and interactive-p (commandp function)) - (call-interactively function) - (apply function arglist) - )) - - (eval-when-compile-load-eval - - (defun cmpl-defun-preamble (function-name) - (let ((doc-string - (condition-case e - ;; This condition-case is here to stave - ;; off bizarre load time errors 18.52 gets - ;; on the function c-mode - (documentation function-name) - (error nil))) - (interactivep (commandp function-name)) - ) - (append - (if doc-string (list doc-string)) - (if interactivep '((interactive))) - ))) - - (defun completion-advise-1 (function-name where body &optional new-name) - (unless new-name (setq new-name function-name)) - (let ((quoted-name (list 'quote function-name)) - (quoted-new-name (list 'quote new-name)) - ) - - (cond ((function-needs-autoloading-p function-name) - (list* 'defun function-name '(&rest arglist) - (append - (cmpl-defun-preamble function-name) - (list (list 'load (second (symbol-function function-name))) - (list 'eval - (list 'completion-advise-1 quoted-name - (list 'quote where) (list 'quote body) - quoted-new-name)) - (list 'cmpl-apply-as-top-level quoted-new-name 'arglist) - ))) - ) - (t - (let ((old-def-name - (intern (concat "$$$cmpl-" (symbol-name function-name)))) - ) - - (list 'progn - (list 'defvar old-def-name - (list 'symbol-function quoted-name)) - (list* 'defun new-name '(&rest arglist) - (append - (cmpl-defun-preamble function-name) - (ecase where - (:before - (list (cons 'progn body) - (list 'cmpl-apply-as-top-level - old-def-name 'arglist))) - (:after - (list* (list 'cmpl-apply-as-top-level - old-def-name 'arglist) - body) - ))) - ))) - )))) - ) ;; eval-when - ;;;----------------------------------------------- --- 419,430 ---- ;;;----------------------------------------------- (defun minibuffer-window-selected-p () "True iff the current window is the minibuffer." ! (window-minibuffer-p (selected-window))) ! (defmacro cmpl-read-time-eval (form) ;; Like the #. reader macro (eval form)) ;;;----------------------------------------------- *************** *** 629,786 **** ! ;;;----------------------------------------------- ! ;;; Emacs Idle Time hooks ! ;;;----------------------------------------------- ! ! (defvar cmpl-emacs-idle-process nil) ! ! (defvar cmpl-emacs-idle-interval 150 ! "Seconds between running the Emacs idle process.") ! ! (defun init-cmpl-emacs-idle-process () ! "Initialize the emacs idle process." ! (let ((live (and cmpl-emacs-idle-process ! (eq (process-status cmpl-emacs-idle-process) 'run))) ! ;; do not allocate a pty ! (process-connection-type nil)) ! (if live ! (kill-process cmpl-emacs-idle-process)) ! (if cmpl-emacs-idle-process ! (delete-process cmpl-emacs-idle-process)) ! (setq cmpl-emacs-idle-process ! (start-process "cmpl-emacs-idle" nil ! "loadst" ! "-n" (int-to-string cmpl-emacs-idle-interval))) ! (process-kill-without-query cmpl-emacs-idle-process) ! (set-process-filter cmpl-emacs-idle-process 'cmpl-emacs-idle-filter) ! )) ! ! (defvar cmpl-emacs-buffer nil) ! (defvar cmpl-emacs-point 0) ! (defvar cmpl-emacs-last-command nil) ! (defvar cmpl-emacs-last-command-char nil) ! (defun cmpl-emacs-idle-p () ! ;; returns T if emacs has been idle ! (if (and (eq cmpl-emacs-buffer (current-buffer)) ! (= cmpl-emacs-point (point)) ! (eq cmpl-emacs-last-command last-command) ! (eq last-command-char last-command-char) ! ) ! t ;; idle ! ;; otherwise, update count ! (setq cmpl-emacs-buffer (current-buffer)) ! (setq cmpl-emacs-point (point)) ! (setq cmpl-emacs-last-command last-command) ! (setq last-command-char last-command-char) ! nil ! )) ! ! (defvar cmpl-emacs-idle-time 0 ! "The idle time of Emacs in seconds.") ! ! (defvar inside-cmpl-emacs-idle-filter nil) ! (defvar cmpl-emacs-idle-time-hooks nil) ! ! (defun cmpl-emacs-idle-filter (proc string) ! ;; This gets called every cmpl-emacs-idle-interval seconds ! ;; Update idle time clock ! (if (cmpl-emacs-idle-p) ! (incf cmpl-emacs-idle-time cmpl-emacs-idle-interval) ! (setq cmpl-emacs-idle-time 0)) ! ! (unless inside-cmpl-emacs-idle-filter ! ;; Don't reenter if we are hung ! ! (setq inside-cmpl-emacs-idle-filter t) ! ! (dolist (function cmpl-emacs-idle-time-hooks) ! (condition-case e ! (funcall function) ! (error nil) ! )) ! (setq inside-cmpl-emacs-idle-filter nil) ! )) ! ! ! ;;;----------------------------------------------- ! ;;; Time ! ;;;----------------------------------------------- ! ;;; What a backwards way to get the time! Unfortunately, GNU Emacs ! ;;; doesn't have an accessible time function. ! ! (defconst cmpl-hours-per-day 24) ! (defconst cmpl-hours-per-year (* 365 cmpl-hours-per-day)) ! (defconst cmpl-hours-per-4-years (+ (* 4 cmpl-hours-per-year) ! cmpl-hours-per-day)) ! (defconst cmpl-days-since-start-of-year ! '(0 31 59 90 120 151 181 212 243 273 304 334)) ! (defconst cmpl-days-since-start-of-leap-year ! '(0 31 60 91 121 152 182 213 244 274 305 335)) ! (defconst cmpl-months ! '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec")) ! ! (defun cmpl-hours-since-1900-internal (month day year hours) ! "Month is an integer from 1 to 12. Year is a two digit integer (19XX)" ! (+ ;; Year ! (* (/ (1- year) 4) cmpl-hours-per-4-years) ! (* (1+ (mod (1- year) 4)) cmpl-hours-per-year) ! ;; minus two to account for 1968 rather than 1900 ! ;; month ! (* cmpl-hours-per-day ! (nth (1- month) (if (zerop (mod year 4)) ! cmpl-days-since-start-of-leap-year ! cmpl-days-since-start-of-year))) ! (* (1- day) cmpl-hours-per-day) ! hours)) ! ! (defun cmpl-month-from-string (month-string) ! "Month string is a three char. month string" ! (let ((count 1)) ! (do ((list cmpl-months (cdr list)) ! ) ! ((or (null list) (string-equal month-string (car list)))) ! (setq count (1+ count))) ! (if (> count 12) ! (error "Unknown month - %s" month-string)) ! count)) ! ! (defun cmpl-hours-since-1900 (&optional time-string) ! "String is a string in the format of current-time-string (the default)." ! (let* ((string (or time-string (current-time-string))) ! (month (cmpl-month-from-string (substring string 4 7))) ! (day (string-to-int (substring string 8 10))) ! (year (string-to-int (substring string 22 24))) ! (hour (string-to-int (substring string 11 13))) ! ) ! (cmpl-hours-since-1900-internal month day year hour))) ! ! ;;; Tests - ! ;;;(cmpl-hours-since-1900 "Wed Jan 1 00:00:28 1900") --> 35040 ! ;;;(cmpl-hours-since-1900 "Wed Nov 2 23:00:28 1988") --> 778751 ! ;;;(cmpl-hours-since-1900 "Wed Jan 23 14:34:28 1988") --> 771926 ! ;;;(cmpl-hours-since-1900 "Wed Feb 23 14:34:28 1988") --> 772670 ! ;;;(cmpl-hours-since-1900 "Wed Mar 23 14:34:28 1988") --> 773366 ! ;;;(cmpl-hours-since-1900 "Wed Apr 23 14:34:28 1988") --> 774110 ! ;;;(cmpl-hours-since-1900 "Wed May 23 14:34:28 1988") --> 774830 ! ;;;(cmpl-hours-since-1900 "Wed Jun 23 14:34:28 1988") --> 775574 ! ;;;(cmpl-hours-since-1900 "Wed Jul 23 14:34:28 1988") --> 776294 ! ;;;(cmpl-hours-since-1900 "Wed Aug 23 14:34:28 1988") --> 777038 ! ;;;(cmpl-hours-since-1900 "Wed Sep 23 14:34:28 1988") --> 777782 ! ;;;(cmpl-hours-since-1900 "Wed Oct 23 14:34:28 1988") --> 778502 ! ;;;(cmpl-hours-since-1900 "Wed Nov 23 14:34:28 1988") --> 779246 ! ;;;(cmpl-hours-since-1900 "Wed Dec 23 14:34:28 1988") --> 779966 ! ;;;(cmpl-hours-since-1900 "Wed Jan 23 14:34:28 1957") --> 500198 ! ;;;(cmpl-hours-since-1900 "Wed Feb 23 14:34:28 1957") --> 500942 ! ;;;(cmpl-hours-since-1900 "Wed Mar 23 14:34:28 1957") --> 501614 ! ;;;(cmpl-hours-since-1900 "Wed Apr 23 14:34:28 1957") --> 502358 ! ;;;(cmpl-hours-since-1900 "Wed May 23 14:34:28 1957") --> 503078 ! ;;;(cmpl-hours-since-1900 "Wed Jun 23 14:34:28 1957") --> 503822 ! ;;;(cmpl-hours-since-1900 "Wed Jul 23 14:34:28 1957") --> 504542 ! ;;;(cmpl-hours-since-1900 "Wed Aug 23 14:34:28 1957") --> 505286 ! ;;;(cmpl-hours-since-1900 "Wed Sep 23 14:34:28 1957") --> 506030 ! ;;;(cmpl-hours-since-1900 "Wed Oct 23 14:34:28 1957") --> 506750 ! ;;;(cmpl-hours-since-1900 "Wed Nov 23 14:34:28 1957") --> 507494 ! ;;;(cmpl-hours-since-1900 "Wed Dec 23 14:34:28 1957") --> 508214 ! ;;;--------------------------------------------------------------------------- --- 488,495 ---- ! (defun cmpl-hours-since-origin () ! (let ((time (current-time))) ! (+ (* (/ (car time) 3600.0) (lsh 1 16)) ! (/ (nth 2 time) 3600.0)))) ;;;--------------------------------------------------------------------------- *************** *** 837,841 **** ;;;----------------------------------------------- ! (defun make-standard-completion-syntax-table () (let ((table (make-vector 256 0)) ;; default syntax is whitespace ) --- 546,550 ---- ;;;----------------------------------------------- ! (defun cmpl-make-standard-completion-syntax-table () (let ((table (make-vector 256 0)) ;; default syntax is whitespace ) *************** *** 859,865 **** table)) ! (defconst cmpl-standard-syntax-table (make-standard-completion-syntax-table)) ! (defun make-lisp-completion-syntax-table () (let ((table (copy-syntax-table cmpl-standard-syntax-table)) (symbol-chars '(?! ?& ?? ?= ?^)) --- 568,574 ---- table)) ! (defconst cmpl-standard-syntax-table (cmpl-make-standard-completion-syntax-table)) ! (defun cmpl-make-lisp-completion-syntax-table () (let ((table (copy-syntax-table cmpl-standard-syntax-table)) (symbol-chars '(?! ?& ?? ?= ?^)) *************** *** 869,873 **** table)) ! (defun make-c-completion-syntax-table () (let ((table (copy-syntax-table cmpl-standard-syntax-table)) (separator-chars '(?+ ?* ?/ ?: ?%)) --- 578,582 ---- table)) ! (defun cmpl-make-c-completion-syntax-table () (let ((table (copy-syntax-table cmpl-standard-syntax-table)) (separator-chars '(?+ ?* ?/ ?: ?%)) *************** *** 877,881 **** table)) ! (defun make-fortran-completion-syntax-table () (let ((table (copy-syntax-table cmpl-standard-syntax-table)) (separator-chars '(?+ ?- ?* ?/ ?:)) --- 586,590 ---- table)) ! (defun cmpl-make-fortran-completion-syntax-table () (let ((table (copy-syntax-table cmpl-standard-syntax-table)) (separator-chars '(?+ ?- ?* ?/ ?:)) *************** *** 885,891 **** table)) ! (defconst cmpl-lisp-syntax-table (make-lisp-completion-syntax-table)) ! (defconst cmpl-c-syntax-table (make-c-completion-syntax-table)) ! (defconst cmpl-fortran-syntax-table (make-fortran-completion-syntax-table)) (defvar cmpl-syntax-table cmpl-standard-syntax-table --- 594,600 ---- table)) ! (defconst cmpl-lisp-syntax-table (cmpl-make-lisp-completion-syntax-table)) ! (defconst cmpl-c-syntax-table (cmpl-make-c-completion-syntax-table)) ! (defconst cmpl-fortran-syntax-table (cmpl-make-fortran-completion-syntax-table)) (defvar cmpl-syntax-table cmpl-standard-syntax-table *************** *** 897,912 **** ;;;----------------------------------------------- ! (completion-advise lisp-mode-variables :after ! (setq cmpl-syntax-table cmpl-lisp-syntax-table) ! ) ! ! (completion-advise c-mode :after ! (setq cmpl-syntax-table cmpl-c-syntax-table) ! ) ! ! (completion-advise fortran-mode :after ! (setq cmpl-syntax-table cmpl-fortran-syntax-table) ! (completion-setup-fortran-mode) ! ) ;;;----------------------------------------------- --- 606,621 ---- ;;;----------------------------------------------- ! (add-hook 'lisp-mode-hook ! '(lambda () ! (setq cmpl-syntax-table cmpl-lisp-syntax-table))) ! ! (add-hook 'c-mode-hook ! '(lambda () ! (setq cmpl-syntax-table cmpl-c-syntax-table))) ! ! (add-hook 'fortran-mode-hook ! '(lambda () ! (setq cmpl-syntax-table cmpl-fortran-syntax-table) ! (completion-setup-fortran-mode))) ;;;----------------------------------------------- *************** *** 914,922 **** ;;;----------------------------------------------- (defvar cmpl-symbol-start nil ! "Set to the first character of the symbol after one of the completion ! symbol functions is called.") (defvar cmpl-symbol-end nil ! "Set to the last character of the symbol after one of the completion ! symbol functions is called.") ;;; These are temp. vars. we use to avoid using let. ;;; Why ? Small speed improvement. --- 623,629 ---- ;;;----------------------------------------------- (defvar cmpl-symbol-start nil ! "Holds first character of symbol, after any completion symbol function.") (defvar cmpl-symbol-end nil ! "Holds last character of symbol, after any completion symbol function.") ;;; These are temp. vars. we use to avoid using let. ;;; Why ? Small speed improvement. *************** *** 925,930 **** (defun symbol-under-point () ! "Returns the symbol that the point is currently on if it is longer ! than *completion-min-length*." (setq cmpl-saved-syntax (syntax-table)) (set-syntax-table cmpl-syntax-table) --- 632,637 ---- (defun symbol-under-point () ! "Returns the symbol that the point is currently on. ! But only if it is longer than `completion-min-length'." (setq cmpl-saved-syntax (syntax-table)) (set-syntax-table cmpl-syntax-table) *************** *** 952,959 **** (set-syntax-table cmpl-saved-syntax) ;; Return completion if the length is reasonable ! (if (and (<= (read-time-eval *completion-min-length*) (- cmpl-symbol-end cmpl-symbol-start)) (<= (- cmpl-symbol-end cmpl-symbol-start) ! (read-time-eval *completion-max-length*))) (buffer-substring cmpl-symbol-start cmpl-symbol-end)) ) --- 659,666 ---- (set-syntax-table cmpl-saved-syntax) ;; Return completion if the length is reasonable ! (if (and (<= (cmpl-read-time-eval completion-min-length) (- cmpl-symbol-end cmpl-symbol-start)) (<= (- cmpl-symbol-end cmpl-symbol-start) ! (cmpl-read-time-eval completion-max-length))) (buffer-substring cmpl-symbol-start cmpl-symbol-end)) ) *************** *** 977,982 **** (defun symbol-before-point () ! "Returns a string of the symbol immediately before point ! or nil if there isn't one longer than *completion-min-length*." ;; This is called when a word separator is typed so it must be FAST ! (setq cmpl-saved-syntax (syntax-table)) --- 684,689 ---- (defun symbol-before-point () ! "Returns a string of the symbol immediately before point. ! Returns nil if there isn't one longer than `completion-min-length'." ;; This is called when a word separator is typed so it must be FAST ! (setq cmpl-saved-syntax (syntax-table)) *************** *** 1000,1004 **** (if (>= cmpl-symbol-end (+ cmpl-symbol-start ! (read-time-eval *completion-min-length*))) (buffer-substring cmpl-symbol-start cmpl-symbol-end)) ) --- 707,711 ---- (if (>= cmpl-symbol-end (+ cmpl-symbol-start ! (cmpl-read-time-eval completion-min-length))) (buffer-substring cmpl-symbol-start cmpl-symbol-end)) ) *************** *** 1020,1027 **** (set-syntax-table cmpl-saved-syntax) ;; Return completion if the length is reasonable ! (if (and (<= (read-time-eval *completion-min-length*) (- cmpl-symbol-end cmpl-symbol-start)) (<= (- cmpl-symbol-end cmpl-symbol-start) ! (read-time-eval *completion-max-length*))) (buffer-substring cmpl-symbol-start cmpl-symbol-end)) ) --- 727,734 ---- (set-syntax-table cmpl-saved-syntax) ;; Return completion if the length is reasonable ! (if (and (<= (cmpl-read-time-eval completion-min-length) (- cmpl-symbol-end cmpl-symbol-start)) (<= (- cmpl-symbol-end cmpl-symbol-start) ! (cmpl-read-time-eval completion-max-length))) (buffer-substring cmpl-symbol-start cmpl-symbol-end)) ) *************** *** 1084,1092 **** (set-syntax-table cmpl-saved-syntax) ;; Return completion if the length is reasonable ! (if (and (<= (read-time-eval ! *completion-prefix-min-length*) (- cmpl-symbol-end cmpl-symbol-start)) (<= (- cmpl-symbol-end cmpl-symbol-start) ! (read-time-eval *completion-max-length*))) (buffer-substring cmpl-symbol-start cmpl-symbol-end)) ) --- 791,799 ---- (set-syntax-table cmpl-saved-syntax) ;; Return completion if the length is reasonable ! (if (and (<= (cmpl-read-time-eval ! completion-prefix-min-length) (- cmpl-symbol-end cmpl-symbol-start)) (<= (- cmpl-symbol-end cmpl-symbol-start) ! (cmpl-read-time-eval completion-max-length))) (buffer-substring cmpl-symbol-start cmpl-symbol-end)) ) *************** *** 1124,1132 **** ;;;----------------------------------------------- ;;; All statistics code outside this block should use this ! (defmacro cmpl-statistics-block (&rest body) ! "Only executes body if we are recording statistics." ! (list 'cond ! (list* '*record-cmpl-statistics-p* body) ! )) ;;;----------------------------------------------- --- 831,839 ---- ;;;----------------------------------------------- ;;; All statistics code outside this block should use this ! (defmacro cmpl-statistics-block (&rest body)) ! ;;; "Only executes body if we are recording statistics." ! ;;; (list 'cond ! ;;; (list* '*record-cmpl-statistics-p* body) ! ;;; )) ;;;----------------------------------------------- *************** *** 1187,1191 **** (defun reset-cdabbrev (abbrev-string &optional initial-completions-tried) "Resets the cdabbrev search to search for abbrev-string. ! initial-completions-tried is a list of downcased strings to ignore during the search." (setq cdabbrev-abbrev-string abbrev-string --- 894,898 ---- (defun reset-cdabbrev (abbrev-string &optional initial-completions-tried) "Resets the cdabbrev search to search for abbrev-string. ! INITIAL-COMPLETIONS-TRIED is a list of downcased strings to ignore during the search." (setq cdabbrev-abbrev-string abbrev-string *************** *** 1205,1211 **** (defun reset-cdabbrev-window (&optional initializep) ! "Resets the cdabbrev search to search for abbrev-string. ! initial-completions-tried is a list of downcased strings to ignore ! during the search." ;; Set the window (cond (initializep --- 912,916 ---- (defun reset-cdabbrev-window (&optional initializep) ! "Resets the cdabbrev search to search for abbrev-string." ;; Set the window (cond (initializep *************** *** 1227,1233 **** cdabbrev-start-point cdabbrev-current-point cdabbrev-stop-point ! (if *cdabbrev-radius* (max (point-min) ! (- cdabbrev-start-point *cdabbrev-radius*)) (point-min)) cdabbrev-wrapped-p nil) --- 932,938 ---- cdabbrev-start-point cdabbrev-current-point cdabbrev-stop-point ! (if completion-search-distance (max (point-min) ! (- cdabbrev-start-point completion-search-distance)) (point-min)) cdabbrev-wrapped-p nil) *************** *** 1236,1240 **** (defun next-cdabbrev () "Return the next possible cdabbrev expansion or nil if there isn't one. ! reset-cdabbrev must've been called. This is sensitive to case-fold-search." ;; note that case-fold-search affects the behavior of this function ;; Bug: won't pick up an expansion that starts at the top of buffer --- 941,946 ---- (defun next-cdabbrev () "Return the next possible cdabbrev expansion or nil if there isn't one. ! `reset-cdabbrev' must've been called already. ! This is sensitive to `case-fold-search'." ;; note that case-fold-search affects the behavior of this function ;; Bug: won't pick up an expansion that starts at the top of buffer *************** *** 1301,1306 **** ;; need to wrap (goto-char (setq cdabbrev-current-point ! (if *cdabbrev-radius* ! (min (point-max) (+ cdabbrev-start-point *cdabbrev-radius*)) (point-max)))) --- 1007,1012 ---- ;; need to wrap (goto-char (setq cdabbrev-current-point ! (if completion-search-distance ! (min (point-max) (+ cdabbrev-start-point completion-search-distance)) (point-max)))) *************** *** 1385,1389 **** (defmacro completion-last-use-time (completion-entry) ! ;; "The time it was last used. In hours since 1900. Used to decide ;; whether to save it. T if one should always save it." (list 'nth 2 completion-entry)) --- 1091,1095 ---- (defmacro completion-last-use-time (completion-entry) ! ;; "The time it was last used. In hours since origin. Used to decide ;; whether to save it. T if one should always save it." (list 'nth 2 completion-entry)) *************** *** 1466,1471 **** (defun list-all-completions-by-hash-bucket () ! "Returns a list of lists of all the known completion entries organized by ! hash bucket." (let ((return-completions nil)) (mapatoms 'list-all-completions-by-hash-bucket-1 cmpl-prefix-obarray) --- 1172,1176 ---- (defun list-all-completions-by-hash-bucket () ! "Return list of lists of known completion entries, organized by hash bucket." (let ((return-completions nil)) (mapatoms 'list-all-completions-by-hash-bucket-1 cmpl-prefix-obarray) *************** *** 1504,1508 **** (defun find-exact-completion (string) "Returns the completion entry for string or nil. ! Sets up cmpl-db-downcase-string and cmpl-db-symbol." (and (boundp (setq cmpl-db-symbol (intern (setq cmpl-db-downcase-string (downcase string)) --- 1209,1213 ---- (defun find-exact-completion (string) "Returns the completion entry for string or nil. ! Sets up `cmpl-db-downcase-string' and `cmpl-db-symbol'." (and (boundp (setq cmpl-db-symbol (intern (setq cmpl-db-downcase-string (downcase string)) *************** *** 1513,1519 **** (defun find-cmpl-prefix-entry (prefix-string) "Returns the prefix entry for string. ! Sets cmpl-db-prefix-symbol. ! Prefix-string must be exactly *completion-prefix-min-length* long ! and downcased. Sets up cmpl-db-prefix-symbol." (and (boundp (setq cmpl-db-prefix-symbol (intern prefix-string cmpl-prefix-obarray))) --- 1218,1224 ---- (defun find-cmpl-prefix-entry (prefix-string) "Returns the prefix entry for string. ! Sets `cmpl-db-prefix-symbol'. ! Prefix-string must be exactly `completion-prefix-min-length' long ! and downcased. Sets up `cmpl-db-prefix-symbol'." (and (boundp (setq cmpl-db-prefix-symbol (intern prefix-string cmpl-prefix-obarray))) *************** *** 1527,1531 **** Returns a pointer to the element before the completion entry or nil if the completion entry is at the head. ! Must be called after find-exact-completion." (let ((prefix-list (cmpl-prefix-entry-head prefix-entry)) next-prefix-list --- 1232,1236 ---- Returns a pointer to the element before the completion entry or nil if the completion entry is at the head. ! Must be called after `find-exact-completion'." (let ((prefix-list (cmpl-prefix-entry-head prefix-entry)) next-prefix-list *************** *** 1566,1570 **** (find-cmpl-prefix-entry (substring cmpl-db-downcase-string ! 0 *completion-prefix-min-length*)))) ) (if (and cmpl-entry pref-entry) --- 1271,1275 ---- (find-cmpl-prefix-entry (substring cmpl-db-downcase-string ! 0 completion-prefix-min-length)))) ) (if (and cmpl-entry pref-entry) *************** *** 1585,1589 **** STRING is added to the end of the approppriate prefix list with num-uses = 0. The database is unchanged if it is there. STRING must be ! longer than *completion-prefix-min-length*. This must be very fast. Returns the completion entry." --- 1290,1294 ---- STRING is added to the end of the approppriate prefix list with num-uses = 0. The database is unchanged if it is there. STRING must be ! longer than `completion-prefix-min-length'. This must be very fast. Returns the completion entry." *************** *** 1595,1600 **** (prefix-entry (find-cmpl-prefix-entry (substring cmpl-db-downcase-string 0 ! (read-time-eval ! *completion-prefix-min-length*)))) ) ;; The next two forms should happen as a unit (atomically) but --- 1300,1305 ---- (prefix-entry (find-cmpl-prefix-entry (substring cmpl-db-downcase-string 0 ! (cmpl-read-time-eval ! completion-prefix-min-length)))) ) ;; The next two forms should happen as a unit (atomically) but *************** *** 1618,1623 **** "If STRING is not in the database, add it to prefix list. STRING is added to the head of the approppriate prefix list. Otherwise ! it is moved to the head of the list. STRING must be longer than ! *completion-prefix-min-length*. Updates the saved string with the supplied string. This must be very fast. --- 1323,1328 ---- "If STRING is not in the database, add it to prefix list. STRING is added to the head of the approppriate prefix list. Otherwise ! it is moved to the head of the list. ! STRING must be longer than `completion-prefix-min-length'. Updates the saved string with the supplied string. This must be very fast. *************** *** 1630,1635 **** (let* ((prefix-entry (find-cmpl-prefix-entry (substring cmpl-db-downcase-string 0 ! (read-time-eval ! *completion-prefix-min-length*)))) (splice-ptr (locate-completion-entry cmpl-db-entry prefix-entry)) (cmpl-ptr (cdr splice-ptr)) --- 1335,1340 ---- (let* ((prefix-entry (find-cmpl-prefix-entry (substring cmpl-db-downcase-string 0 ! (cmpl-read-time-eval ! completion-prefix-min-length)))) (splice-ptr (locate-completion-entry cmpl-db-entry prefix-entry)) (cmpl-ptr (cdr splice-ptr)) *************** *** 1656,1661 **** (prefix-entry (find-cmpl-prefix-entry (substring cmpl-db-downcase-string 0 ! (read-time-eval ! *completion-prefix-min-length*)))) ) (cond (prefix-entry --- 1361,1366 ---- (prefix-entry (find-cmpl-prefix-entry (substring cmpl-db-downcase-string 0 ! (cmpl-read-time-eval ! completion-prefix-min-length)))) ) (cond (prefix-entry *************** *** 1676,1680 **** (defun delete-completion (string) "Deletes the completion from the database. ! String must be longer than *completion-prefix-min-length*." ;; Handle pending acceptance (if completion-to-accept (accept-completion)) --- 1381,1385 ---- (defun delete-completion (string) "Deletes the completion from the database. ! String must be longer than `completion-prefix-min-length'." ;; Handle pending acceptance (if completion-to-accept (accept-completion)) *************** *** 1683,1688 **** (let* ((prefix-entry (find-cmpl-prefix-entry (substring cmpl-db-downcase-string 0 ! (read-time-eval ! *completion-prefix-min-length*)))) (splice-ptr (locate-completion-entry cmpl-db-entry prefix-entry)) ) --- 1388,1393 ---- (let* ((prefix-entry (find-cmpl-prefix-entry (substring cmpl-db-downcase-string 0 ! (cmpl-read-time-eval ! completion-prefix-min-length)))) (splice-ptr (locate-completion-entry cmpl-db-entry prefix-entry)) ) *************** *** 1771,1775 **** (defun check-completion-length (string) ! (if (< (length string) *completion-min-length*) (error "The string \"%s\" is too short to be saved as a completion." string) --- 1476,1480 ---- (defun check-completion-length (string) ! (if (< (length string) completion-min-length) (error "The string \"%s\" is too short to be saved as a completion." string) *************** *** 1777,1782 **** (defun add-completion (string &optional num-uses last-use-time) ! "If the string is not there, it is added to the head of the completion list. ! Otherwise, it is moved to the head of the list. The completion is altered appropriately if num-uses and/or last-use-time is specified." --- 1482,1486 ---- (defun add-completion (string &optional num-uses last-use-time) ! "Add STRING to completion list, or move it to head of list. The completion is altered appropriately if num-uses and/or last-use-time is specified." *************** *** 1794,1798 **** (defun add-permanent-completion (string) ! "Adds string if it isn't already there and and makes it a permanent string." (interactive (interactive-completion-string-reader "Completion to add permanently")) --- 1498,1502 ---- (defun add-permanent-completion (string) ! "Add STRING if it isn't already listed, and mark it permanent." (interactive (interactive-completion-string-reader "Completion to add permanently")) *************** *** 1811,1817 **** (defun accept-completion () ! "Accepts the pending completion in completion-to-accept. ! This bumps num-uses. Called by add-completion-to-head and ! completion-search-reset." (let ((string completion-to-accept) ;; if this is added afresh here, then it must be a cdabbrev --- 1515,1521 ---- (defun accept-completion () ! "Accepts the pending completion in `completion-to-accept'. ! This bumps num-uses. Called by `add-completion-to-head' and ! `completion-search-reset'." (let ((string completion-to-accept) ;; if this is added afresh here, then it must be a cdabbrev *************** *** 1826,1831 **** (defun use-completion-under-point () ! "Adds the completion symbol underneath the point into the completion buffer." ! (let ((string (and *completep* (symbol-under-point))) (current-completion-source cmpl-source-cursor-moves)) (if string (add-completion-to-head string)))) --- 1530,1535 ---- (defun use-completion-under-point () ! "Add the completion symbol underneath the point into the completion buffer." ! (let ((string (and enable-completion (symbol-under-point))) (current-completion-source cmpl-source-cursor-moves)) (if string (add-completion-to-head string)))) *************** *** 1832,1838 **** (defun use-completion-before-point () ! "Adds the completion symbol before point into ! the completion buffer." ! (let ((string (and *completep* (symbol-before-point))) (current-completion-source cmpl-source-cursor-moves)) (if string (add-completion-to-head string)))) --- 1536,1541 ---- (defun use-completion-before-point () ! "Add the completion symbol before point into the completion buffer." ! (let ((string (and enable-completion (symbol-before-point))) (current-completion-source cmpl-source-cursor-moves)) (if string (add-completion-to-head string)))) *************** *** 1839,1844 **** (defun use-completion-under-or-before-point () ! "Adds the completion symbol before point into the completion buffer." ! (let ((string (and *completep* (symbol-under-or-before-point))) (current-completion-source cmpl-source-cursor-moves)) (if string (add-completion-to-head string)))) --- 1542,1547 ---- (defun use-completion-under-or-before-point () ! "Add the completion symbol before point into the completion buffer." ! (let ((string (and enable-completion (symbol-under-or-before-point))) (current-completion-source cmpl-source-cursor-moves)) (if string (add-completion-to-head string)))) *************** *** 1845,1852 **** (defun use-completion-before-separator () ! "Adds the completion symbol before point into the completion buffer. Completions added this way will automatically be saved if ! *separator-character-uses-completion-p* is non-nil." ! (let ((string (and *completep* (symbol-before-point))) (current-completion-source cmpl-source-separator) entry) --- 1548,1555 ---- (defun use-completion-before-separator () ! "Add the completion symbol before point into the completion buffer. Completions added this way will automatically be saved if ! `completion-on-separator-character' is non-nil." ! (let ((string (and enable-completion (symbol-before-point))) (current-completion-source cmpl-source-separator) entry) *************** *** 1856,1860 **** (cond (string (setq entry (add-completion-to-head string)) ! (when (and *separator-character-uses-completion-p* (zerop (completion-num-uses entry))) (set-completion-num-uses entry 1) --- 1559,1563 ---- (cond (string (setq entry (add-completion-to-head string)) ! (when (and completion-on-separator-character (zerop (completion-num-uses entry))) (set-completion-num-uses entry 1) *************** *** 1917,1922 **** (defun completion-search-reset (string) ! "Given a string, sets up the get-completion and completion-search-next functions. ! String must be longer than *completion-prefix-min-length*." (if completion-to-accept (accept-completion)) (setq cmpl-starting-possibilities --- 1620,1625 ---- (defun completion-search-reset (string) ! "Set up the for completion searching for STRING. ! STRING must be longer than `completion-prefix-min-length'." (if completion-to-accept (accept-completion)) (setq cmpl-starting-possibilities *************** *** 1937,1943 **** (defun completion-search-next (index) ! "Returns the next completion entry. ! If index is out of sequence it resets and starts from the top. ! If there are no more entries it tries cdabbrev and returns only a string." (cond ((= index (setq cmpl-last-index (1+ cmpl-last-index))) --- 1640,1646 ---- (defun completion-search-next (index) ! "Return the next completion entry. ! If INDEX is out of sequence, reset and start from the top. ! If there are no more entries, try cdabbrev and returns only a string." (cond ((= index (setq cmpl-last-index (1+ cmpl-last-index))) *************** *** 1984,1990 **** (defun completion-search-peek (use-cdabbrev) "Returns the next completion entry without actually moving the pointers. ! Calling this again or calling completion-search-next will result in the same ! string being returned. Depends on case-fold-search. ! If there are no more entries it tries cdabbrev and then returns only a string." (cond ;; return the cached value if we have it --- 1687,1693 ---- (defun completion-search-peek (use-cdabbrev) "Returns the next completion entry without actually moving the pointers. ! Calling this again or calling `completion-search-next' results in the same ! string being returned. Depends on `case-fold-search'. ! If there are no more entries, try cdabbrev and then return only a string." (cond ;; return the cached value if we have it *************** *** 2064,2071 **** (defun completion-mode () ! "Toggles whether or not new words are added to the database." (interactive) ! (setq *completep* (not *completep*)) ! (message "Completion mode is now %s." (if *completep* "ON" "OFF")) ) --- 1767,1774 ---- (defun completion-mode () ! "Toggles whether or not to add new words to the completion database." (interactive) ! (setq enable-completion (not enable-completion)) ! (message "Completion mode is now %s." (if enable-completion "ON" "OFF")) ) *************** *** 2076,2080 **** (defun complete (&optional arg) ! "Inserts a completion at point. Point is left at end. Consective calls rotate through all possibilities. Prefix args :: --- 1779,1783 ---- (defun complete (&optional arg) ! "Fill out a completion of the word before point. Point is left at end. Consective calls rotate through all possibilities. Prefix args :: *************** *** 2083,2088 **** a number :: rotate through the possible completions by that amount `-' :: same as -1 (insert previous completion) ! {See the comments at the top of completion.el for more info.} ! " (interactive "*p") ;;; Set up variables --- 1786,1790 ---- a number :: rotate through the possible completions by that amount `-' :: same as -1 (insert previous completion) ! {See the comments at the top of `completion.el' for more info.}" (interactive "*p") ;;; Set up variables *************** *** 2108,2112 **** (setq this-command 'failed-complete) (error "To complete, the point must be after a symbol at least %d character long." ! *completion-prefix-min-length*))) ;; get index (setq cmpl-current-index (if current-prefix-arg arg 0)) --- 1810,1814 ---- (setq this-command 'failed-complete) (error "To complete, the point must be after a symbol at least %d character long." ! completion-prefix-min-length))) ;; get index (setq cmpl-current-index (if current-prefix-arg arg 0)) *************** *** 2123,2127 **** ;; Get the next completion (let* ((print-status-p ! (and (>= (cmpl19-baud-rate) *print-next-completion-speed-threshold*) (not (minibuffer-window-selected-p)))) (insert-point (point)) --- 1825,1829 ---- ;; Get the next completion (let* ((print-status-p ! (and (>= baud-rate completion-prompt-speed-threshold) (not (minibuffer-window-selected-p)))) (insert-point (point)) *************** *** 2158,2165 **** ;; This updates the display and only prints if there ;; is no typeahead ! (cmpl19-sit-for 0) (setq entry (completion-search-peek ! *print-next-completion-does-cdabbrev-search-p*))) (setq string (if (stringp entry) entry (completion-string entry))) --- 1860,1867 ---- ;; This updates the display and only prints if there ;; is no typeahead ! (sit-for 0) (setq entry (completion-search-peek ! completion-cdabbrev-prompt-flag))) (setq string (if (stringp entry) entry (completion-string entry))) *************** *** 2188,2205 **** ;;;----------------------------------------------- - ;;; Complete key definition - ;;; These define c-return and meta-return - ;;; In any case you really want to bind this to a single keystroke - (if (fboundp 'key-for-others-chord) - (condition-case e - ;; this can fail if some of the prefix chars. are already used - ;; as commands (this happens on wyses) - (global-set-key (key-for-others-chord "return" '(control)) 'complete) - (error) - )) - (if (fboundp 'gmacs-keycode) - (global-set-key (gmacs-keycode "return" '(control)) 'complete) - ) (global-set-key "\M-\r" 'complete) ;;; Tests - --- 1890,1896 ---- ;;;----------------------------------------------- (global-set-key "\M-\r" 'complete) + (global-set-key [?\C-\r] 'complete) + (define-key function-key-map [C-return] [?\C-\r]) ;;; Tests - *************** *** 2222,2231 **** ;;; User interface (defun add-completions-from-file (file) ! "Parses all the definition names from a Lisp mode file and adds them to the ! completion database." (interactive "fFile: ") ! (setq file (if (fboundp 'expand-file-name-defaulting) ! (expand-file-name-defaulting file) ! (expand-file-name file))) (let* ((buffer (get-file-buffer file)) (buffer-already-there-p buffer) --- 1913,1919 ---- ;;; User interface (defun add-completions-from-file (file) ! "Parse possible completions from a file and add them to data base." (interactive "fFile: ") ! (setq file (expand-file-name file)) (let* ((buffer (get-file-buffer file)) (buffer-already-there-p buffer) *************** *** 2232,2236 **** ) (when (not buffer-already-there-p) ! (let ((*modes-for-completion-find-file-hook* nil)) (setq buffer (find-file-noselect file)) )) --- 1920,1924 ---- ) (when (not buffer-already-there-p) ! (let ((completions-merging-modes nil)) (setq buffer (find-file-noselect file)) )) *************** *** 2273,2283 **** ;;; Find file hook (defun cmpl-find-file-hook () ! (cond (*completep* (cond ((and (memq major-mode '(emacs-lisp-mode lisp-mode)) ! (memq 'lisp *modes-for-completion-find-file-hook*) ) (add-completions-from-buffer)) ((and (memq major-mode '(c-mode)) ! (memq 'c *modes-for-completion-find-file-hook*) ) (add-completions-from-buffer) --- 1961,1971 ---- ;;; Find file hook (defun cmpl-find-file-hook () ! (cond (enable-completion (cond ((and (memq major-mode '(emacs-lisp-mode lisp-mode)) ! (memq 'lisp completions-merging-modes) ) (add-completions-from-buffer)) ((and (memq major-mode '(c-mode)) ! (memq 'c completions-merging-modes) ) (add-completions-from-buffer) *************** *** 2293,2297 **** (defun add-completions-from-tags-table () ;; Inspired by eero@media-lab.media.mit.edu ! "Add completions from the current tags-table-buffer." (interactive) (visit-tags-table-buffer) ;this will prompt if no tags-table --- 1981,1985 ---- (defun add-completions-from-tags-table () ;; Inspired by eero@media-lab.media.mit.edu ! "Add completions from the current tags table." (interactive) (visit-tags-table-buffer) ;this will prompt if no tags-table *************** *** 2331,2337 **** ;;; (and (string-match *lisp-def-regexp* "\n(defun (foo") (match-end 0)) -> 9 (defun add-completions-from-lisp-buffer () - "Parses all the definition names from a Lisp mode buffer and adds them to - the completion database." ;;; Benchmarks ;;; Sun-3/280 - 1500 to 3000 lines of lisp code per second --- 2019,2025 ---- ;;; (and (string-match *lisp-def-regexp* "\n(defun (foo") (match-end 0)) -> 9 + ;;; Parses all the definition names from a Lisp mode buffer and adds them to + ;;; the completion database. (defun add-completions-from-lisp-buffer () ;;; Benchmarks ;;; Sun-3/280 - 1500 to 3000 lines of lisp code per second *************** *** 2366,2370 **** ;;; Everything else has word syntax ! (defun make-c-def-completion-syntax-table () (let ((table (make-vector 256 0)) (whitespace-chars '(? ?\n ?\t ?\f ?\v ?\r)) --- 2054,2058 ---- ;;; Everything else has word syntax ! (defun cmpl-make-c-def-completion-syntax-table () (let ((table (make-vector 256 0)) (whitespace-chars '(? ?\n ?\t ?\f ?\v ?\r)) *************** *** 2386,2390 **** table)) ! (defconst cmpl-c-def-syntax-table (make-c-def-completion-syntax-table)) ;;; Regexps --- 2074,2078 ---- table)) ! (defconst cmpl-c-def-syntax-table (cmpl-make-c-def-completion-syntax-table)) ;;; Regexps *************** *** 2426,2432 **** ;;; (test-c-def-regexp *c-cont-regexp* "truct_p complex foon") -> nil (defun add-completions-from-c-buffer () - "Parses all the definition names from a C mode buffer and adds them to the - completion database." ;; Benchmark -- ;; Sun 3/280-- 1250 lines/sec. --- 2114,2120 ---- ;;; (test-c-def-regexp *c-cont-regexp* "truct_p complex foon") -> nil + ;;; Parses all the definition names from a C mode buffer and adds them to the + ;;; completion database. (defun add-completions-from-c-buffer () ;; Benchmark -- ;; Sun 3/280-- 1250 lines/sec. *************** *** 2528,2534 **** ;;;--------------------------------------------------------------------------- (defun kill-emacs-save-completions () ! "The version of save-completions-to-file called at kill-emacs time." ! (when (and *save-completions-p* *completep* cmpl-initialized-p) (cond ((not cmpl-completions-accepted-p) --- 2216,2222 ---- ;;;--------------------------------------------------------------------------- + ;;; The version of save-completions-to-file called at kill-emacs time. (defun kill-emacs-save-completions () ! (when (and save-completions-flag enable-completion cmpl-initialized-p) (cond ((not cmpl-completions-accepted-p) *************** *** 2546,2550 **** ;;; is the time the completion was last used ;;; If it is t, the completion will never be pruned from the file. ! ;;; Otherwise it is in hours since 1900. \n") --- 2234,2238 ---- ;;; is the time the completion was last used ;;; If it is t, the completion will never be pruned from the file. ! ;;; Otherwise it is in hours since origin. \n") *************** *** 2553,2560 **** (defun save-completions-to-file (&optional filename) ! "Saves a completion init file. ! If file is not specified, then *saved-completions-filename* is used." (interactive) ! (setq filename (expand-file-name (or filename *saved-completions-filename*))) (when (file-writable-p filename) (if (not cmpl-initialized-p) --- 2241,2248 ---- (defun save-completions-to-file (&optional filename) ! "Save completions in init file FILENAME. ! If file name is not specified, use `save-completions-file-name'." (interactive) ! (setq filename (expand-file-name (or filename save-completions-file-name))) (when (file-writable-p filename) (if (not cmpl-initialized-p) *************** *** 2564,2570 **** (let* ((trim-versions-without-asking t) (kept-old-versions 0) ! (kept-new-versions *completion-file-versions-kept*) last-use-time ! (current-time (cmpl-hours-since-1900)) (total-in-db 0) (total-perm 0) --- 2252,2258 ---- (let* ((trim-versions-without-asking t) (kept-old-versions 0) ! (kept-new-versions completions-file-versions-kept) last-use-time ! (current-time (cmpl-hours-since-origin)) (total-in-db 0) (total-perm 0) *************** *** 2604,2612 **** ;; or it was saved before and (and last-use-time ! ;; *saved-completion-retention-time* is nil ! (or (not *saved-completion-retention-time*) ;; or time since last use is < ...retention-time* (< (- current-time last-use-time) ! *saved-completion-retention-time*)) ))) ;; write to file --- 2292,2300 ---- ;; or it was saved before and (and last-use-time ! ;; save-completions-retention-time is nil ! (or (not save-completions-retention-time) ;; or time since last use is < ...retention-time* (< (- current-time last-use-time) ! save-completions-retention-time)) ))) ;; write to file *************** *** 2649,2667 **** ))) ! (defun autosave-completions () ! (when (and *save-completions-p* *completep* cmpl-initialized-p ! *completion-auto-save-period* ! (> cmpl-emacs-idle-time *completion-auto-save-period*) ! cmpl-completions-accepted-p) ! (save-completions-to-file) ! )) ! (pushnew 'autosave-completions cmpl-emacs-idle-time-hooks) (defun load-completions-from-file (&optional filename no-message-p) ! "Loads a completion init file. ! If file is not specified, then *saved-completions-filename* is used." (interactive) ! (setq filename (expand-file-name (or filename *saved-completions-filename*))) (let* ((backup-filename (completion-backup-filename filename)) (backup-readable-p (file-readable-p backup-filename)) --- 2337,2355 ---- ))) ! ;;;(defun autosave-completions () ! ;;; (when (and save-completions-flag enable-completion cmpl-initialized-p ! ;;; *completion-auto-save-period* ! ;;; (> cmpl-emacs-idle-time *completion-auto-save-period*) ! ;;; cmpl-completions-accepted-p) ! ;;; (save-completions-to-file) ! ;;; )) ! ;;;(pushnew 'autosave-completions cmpl-emacs-idle-time-hooks) (defun load-completions-from-file (&optional filename no-message-p) ! "Loads a completion init file FILENAME. ! If file is not specified, then use `save-completions-file-name'." (interactive) ! (setq filename (expand-file-name (or filename save-completions-file-name))) (let* ((backup-filename (completion-backup-filename filename)) (backup-readable-p (file-readable-p backup-filename)) *************** *** 2682,2686 **** (let ((insert-okay-p nil) (buffer (current-buffer)) ! (current-time (cmpl-hours-since-1900)) string num-uses entry last-use-time cmpl-entry cmpl-last-use-time --- 2370,2374 ---- (let ((insert-okay-p nil) (buffer (current-buffer)) ! (current-time (cmpl-hours-since-origin)) string num-uses entry last-use-time cmpl-entry cmpl-last-use-time *************** *** 2764,2768 **** (defun initialize-completions () ! "Loads the default completions file. Also sets up so that exiting emacs will automatically save the file." (interactive) --- 2452,2456 ---- (defun initialize-completions () ! "Load the default completions file. Also sets up so that exiting emacs will automatically save the file." (interactive) *************** *** 2770,2774 **** (load-completions-from-file) )) - (init-cmpl-emacs-idle-process) (setq cmpl-initialized-p t) ) --- 2458,2461 ---- *************** *** 2779,2792 **** ;;;----------------------------------------------- ! (completion-advise kill-emacs :before ! ;; | All completion code should go in here ! ;;\ / ! (kill-emacs-save-completions) ! ;;/ \ ! ;; | All completion code should go in here ! (cmpl-statistics-block ! (record-cmpl-kill-emacs)) ! ) ! ;;;----------------------------------------------- --- 2466,2474 ---- ;;;----------------------------------------------- ! (add-hook 'kill-emacs-hook ! '(lambda () ! (kill-emacs-save-completions) ! (cmpl-statistics-block ! (record-cmpl-kill-emacs)))) ;;;----------------------------------------------- *************** *** 2794,2801 **** ;;;----------------------------------------------- ! ;;; Patched to remove the most recent completion ! (defvar $$$cmpl-old-kill-region (symbol-function 'kill-region)) ! ! (defun kill-region (&optional beg end) "Kill between point and mark. The text is deleted but saved in the kill ring. --- 2476,2480 ---- ;;;----------------------------------------------- ! (defun completion-kill-region (&optional beg end) "Kill between point and mark. The text is deleted but saved in the kill ring. *************** *** 2811,2816 **** to make one entry in the kill ring. Patched to remove the most recent completion." ! (interactive "*") ! (cond ((and (eq last-command 'complete) (eq last-command-char ?\C-w)) (delete-region (point) cmpl-last-insert-location) (insert cmpl-original-string) --- 2490,2495 ---- to make one entry in the kill ring. Patched to remove the most recent completion." ! (interactive "r") ! (cond ((eq last-command 'complete) (delete-region (point) cmpl-last-insert-location) (insert cmpl-original-string) *************** *** 2817,2830 **** (setq completion-to-accept nil) (cmpl-statistics-block ! (record-complete-failed)) ! ) (t ! (if (not beg) ! (setq beg (min (point) (mark)) ! end (max (point) (mark))) ! ) ! (funcall $$$cmpl-old-kill-region beg end) ! ))) ;;;----------------------------------------------- ;;; Patches to self-insert-command. --- 2496,2505 ---- (setq completion-to-accept nil) (cmpl-statistics-block ! (record-complete-failed))) (t ! (kill-region beg end)))) + (global-set-key "\C-w" 'completion-kill-region) + ;;;----------------------------------------------- ;;; Patches to self-insert-command. *************** *** 2865,2895 **** "Add a call to update the completion database before function execution. TYPE is the type of the wrapper to be added. Can be :before or :under." ! (completion-advise-1 ! function-name ':before ! (ecase type ! (:before '((use-completion-before-point))) ! (:separator '((use-completion-before-separator))) ! (:under '((use-completion-under-point))) ! (:under-or-before ! '((use-completion-under-or-before-point))) ! (:minibuffer-separator ! '((let ((cmpl-syntax-table cmpl-standard-syntax-table)) ! (use-completion-before-separator)))) ! ) ! new-name ! )) ! ;;;(defun foo (x y z) (+ x y z)) ! ;;;foo ! ;;;(macroexpand '(def-completion-wrapper foo :under)) ! ;;;(progn (defvar $$$cmpl-foo (symbol-function (quote foo))) (defun foo (&rest arglist) (progn (use-completion-under-point)) (cmpl-apply-as-top-level $$$cmpl-foo arglist))) ! ;;;(defun bar (x y z) "Documentation" (+ x y z)) ! ;;;bar ! ;;;(macroexpand '(def-completion-wrapper bar :under)) ! ;;;(progn (defvar $$$cmpl-bar (symbol-function (quote bar))) (defun bar (&rest arglist) "Documentation" (progn (use-completion-under-point)) (cmpl-apply-as-top-level $$$cmpl-bar arglist))) ! ;;;(defun quuz (x &optional y z) "Documentation" (interactive "P") (+ x y z)) ! ;;;quuz ! ;;;(macroexpand '(def-completion-wrapper quuz :before)) ! ;;;(progn (defvar $$$cmpl-quuz (symbol-function (quote quuz))) (defun quuz (&rest arglist) "Documentation" (interactive) (progn (use-completion-before-point)) (cmpl-apply-as-top-level $$$cmpl-quuz arglist))) --- 2540,2584 ---- "Add a call to update the completion database before function execution. TYPE is the type of the wrapper to be added. Can be :before or :under." ! (cond ((eq type ':separator) ! (list 'put (list 'quote function-name) ''completion-function ! ''use-completion-before-separator)) ! ((eq type ':before) ! (list 'put (list 'quote function-name) ''completion-function ! ''use-completion-before-point)) ! ((eq type ':backward-under) ! (list 'put (list 'quote function-name) ''completion-function ! ''use-completion-backward-under)) ! ((eq type ':backward) ! (list 'put (list 'quote function-name) ''completion-function ! ''use-completion-backward)) ! ((eq type ':under) ! (list 'put (list 'quote function-name) ''completion-function ! ''use-completion-under-point)) ! ((eq type ':under-or-before) ! (list 'put (list 'quote function-name) ''completion-function ! ''use-completion-under-or-before-point)) ! ((eq type ':minibuffer-separator) ! (list 'put (list 'quote function-name) ''completion-function ! ''use-completion-minibuffer-separator)))) ! ! (defun use-completion-minibuffer-separator () ! (let ((cmpl-syntax-table cmpl-standard-syntax-table)) ! (use-completion-before-separator))) ! ! (defun use-completion-backward-under () ! (use-completion-under-point) ! (if (eq last-command 'complete) ! ;; probably a failed completion if you have to back up ! (cmpl-statistics-block (record-complete-failed)))) ! ! (defun use-completion-backward () ! (if (eq last-command 'complete) ! ;; probably a failed completion if you have to back up ! (cmpl-statistics-block (record-complete-failed)))) ! (defun completion-before-command () ! (funcall (or (get this-command 'completion-function) ! 'use-completion-under-or-before-point))) ! (add-hook 'before-command-hook 'completion-before-command) *************** *** 2961,2966 **** (def-completion-wrapper newline :separator) (def-completion-wrapper newline-and-indent :separator) ! ;;;(if (function-defined-and-loaded 'shell-send-input) ! ;;; (def-completion-wrapper shell-send-input :separator)) (def-completion-wrapper exit-minibuffer :minibuffer-separator) (def-completion-wrapper eval-print-last-sexp :separator) --- 2650,2654 ---- (def-completion-wrapper newline :separator) (def-completion-wrapper newline-and-indent :separator) ! (def-completion-wrapper comint-send-input :separator) (def-completion-wrapper exit-minibuffer :minibuffer-separator) (def-completion-wrapper eval-print-last-sexp :separator) *************** *** 2976,3111 **** (def-completion-wrapper beginning-of-buffer :under-or-before) (def-completion-wrapper end-of-buffer :under-or-before) ! ! ;; we patch these explicitly so they byte compile and so we don't have to ! ;; patch the faster underlying function. ! ! (defun cmpl-beginning-of-line (&optional n) ! "Move point to beginning of current line.\n\ ! With argument ARG not nil or 1, move forward ARG - 1 lines first.\n\ ! If scan reaches end of buffer, stop there without error." ! (interactive "p") ! (use-completion-under-or-before-point) ! (beginning-of-line n) ! ) ! ! (defun cmpl-end-of-line (&optional n) ! "Move point to end of current line.\n\ ! With argument ARG not nil or 1, move forward ARG - 1 lines first.\n\ ! If scan reaches end of buffer, stop there without error." ! (interactive "p") ! (use-completion-under-or-before-point) ! (end-of-line n) ! ) ! ! (defun cmpl-forward-char (n) ! "Move point right ARG characters (left if ARG negative).\n\ ! On reaching end of buffer, stop and signal error." ! (interactive "p") ! (use-completion-under-or-before-point) ! (forward-char n) ! ) ! (defun cmpl-backward-char (n) ! "Move point left ARG characters (right if ARG negative).\n\ ! On attempt to pass beginning or end of buffer, stop and signal error." ! (interactive "p") ! (use-completion-under-point) ! (if (eq last-command 'complete) ! ;; probably a failed completion if you have to back up ! (cmpl-statistics-block (record-complete-failed))) ! (backward-char n) ! ) ! ! (defun cmpl-forward-word (n) ! "Move point forward ARG words (backward if ARG is negative).\n\ ! Normally returns t.\n\ ! If an edge of the buffer is reached, point is left there\n\ ! and nil is returned." ! (interactive "p") ! (use-completion-under-or-before-point) ! (forward-word n) ! ) ! (defun cmpl-backward-word (n) ! "Move backward until encountering the end of a word. ! With argument, do this that many times. ! In programs, it is faster to call forward-word with negative arg." ! (interactive "p") ! (use-completion-under-point) ! (if (eq last-command 'complete) ! ;; probably a failed completion if you have to back up ! (cmpl-statistics-block (record-complete-failed))) ! (forward-word (- n)) ! ) ! ! (defun cmpl-forward-sexp (n) ! "Move forward across one balanced expression. ! With argument, do this that many times." ! (interactive "p") ! (use-completion-under-or-before-point) ! (forward-sexp n) ! ) ! (defun cmpl-backward-sexp (n) ! "Move backward across one balanced expression. ! With argument, do this that many times." ! (interactive "p") ! (use-completion-under-point) ! (if (eq last-command 'complete) ! ;; probably a failed completion if you have to back up ! (cmpl-statistics-block (record-complete-failed))) ! (backward-sexp n) ! ) ! ! (defun cmpl-delete-backward-char (n killflag) ! "Delete the previous ARG characters (following, with negative ARG).\n\ ! Optional second arg KILLFLAG non-nil means kill instead (save in kill ring).\n\ ! Interactively, ARG is the prefix arg, and KILLFLAG is set if\n\ ! ARG was explicitly specified." ! (interactive "p\nP") ! (if (eq last-command 'complete) ! ;; probably a failed completion if you have to back up ! (cmpl-statistics-block (record-complete-failed))) ! (delete-backward-char n killflag) ! ) ! ! (defvar $$$cmpl-old-backward-delete-char-untabify ! (symbol-function 'backward-delete-char-untabify)) ! ! (defun backward-delete-char-untabify (arg &optional killp) ! "Delete characters backward, changing tabs into spaces. ! Delete ARG chars, and kill (save in kill ring) if KILLP is non-nil. ! Interactively, ARG is the prefix arg (default 1) ! and KILLP is t if prefix arg is was specified." ! (interactive "*p\nP") ! (if (eq last-command 'complete) ! ;; probably a failed completion if you have to back up ! (cmpl-statistics-block (record-complete-failed))) ! (funcall $$$cmpl-old-backward-delete-char-untabify arg killp) ! ) ! ! (global-set-key "\C-?" 'cmpl-delete-backward-char) ! (global-set-key "\M-\C-F" 'cmpl-forward-sexp) ! (global-set-key "\M-\C-B" 'cmpl-backward-sexp) ! (global-set-key "\M-F" 'cmpl-forward-word) ! (global-set-key "\M-B" 'cmpl-backward-word) ! (global-set-key "\C-F" 'cmpl-forward-char) ! (global-set-key "\C-B" 'cmpl-backward-char) ! (global-set-key "\C-A" 'cmpl-beginning-of-line) ! (global-set-key "\C-E" 'cmpl-end-of-line) ! ! ;;;----------------------------------------------- ! ;;; Misc. ! ;;;----------------------------------------------- ! ! (def-completion-wrapper electric-buffer-list :under-or-before) ! (def-completion-wrapper list-buffers :under-or-before) ! (def-completion-wrapper scroll-up :under-or-before) ! (def-completion-wrapper scroll-down :under-or-before) ! (def-completion-wrapper execute-extended-command ! :under-or-before) ! (def-completion-wrapper other-window :under-or-before) ! ! ;;;----------------------------------------------- ! ;;; Local Thinking Machines stuff ! ;;;----------------------------------------------- ;;; Tests -- --- 2664,2678 ---- (def-completion-wrapper beginning-of-buffer :under-or-before) (def-completion-wrapper end-of-buffer :under-or-before) ! (def-completion-wrapper beginning-of-line :under-or-before) ! (def-completion-wrapper end-of-line :under-or-before) ! (def-completion-wrapper forward-char :under-or-before) ! (def-completion-wrapper forward-word :under-or-before) ! (def-completion-wrapper forward-sexp :under-or-before) ! (def-completion-wrapper backward-char :backward-under) ! (def-completion-wrapper backward-word :backward-under) ! (def-completion-wrapper backward-sexp :backward-under) ! (def-completion-wrapper delete-backward-char :backward) ! (def-completion-wrapper delete-backward-char-untabify :backward) ;;; Tests -- diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/faces.el emacs-19.10/lisp/faces.el *** emacs-19.9/lisp/faces.el Wed May 26 15:40:18 1993 --- emacs-19.10/lisp/faces.el Sat May 29 00:36:14 1993 *************** *** 421,424 **** --- 421,428 ---- Given optional arguments FACE and FRAME, try to return a font which is also the same size as FACE on FRAME." + (or (symbolp face) + (setq face (face-name face))) + (and (eq frame t) + (setq frame nil)) (if pattern (let ((fonts (x-list-fonts pattern face frame))) *************** *** 744,748 **** (if (cdr (or (assq 'reverse parameters) ! (assq 'reverse default-frame-alist))) (let ((params (frame-parameters frame))) (modify-frame-parameters --- 748,754 ---- (if (cdr (or (assq 'reverse parameters) ! (assq 'reverse default-frame-alist) ! (cons nil ! (x-get-resource "reverseVideo" "Reversevideo")))) (let ((params (frame-parameters frame))) (modify-frame-parameters diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/files.el emacs-19.10/lisp/files.el *** emacs-19.9/lisp/files.el Wed May 26 19:18:41 1993 --- emacs-19.10/lisp/files.el Sat May 29 18:05:58 1993 *************** *** 164,168 **** (defconst find-file-run-dired t ! "*Non-nil says run dired if find-file is given the name of a directory.") ;;;It is not useful to make this a local variable. --- 164,168 ---- (defconst find-file-run-dired t ! "*Non-nil says run dired if `find-file' is given the name of a directory.") ;;;It is not useful to make this a local variable. *************** *** 344,347 **** --- 344,372 ---- filename))))) + (defun file-chase-links (filename) + "Chase links in FILENAME until a name that is not a link. + Does not examine containing directories for links, + unlike `file-truename'." + (let (tem (count 100) (newname filename)) + (while (setq tem (file-symlink-p newname)) + (if (= count 0) + (error "Apparent cycle of symbolic links for %s" filename)) + ;; Handle `..' by hand, since it needs to work in the + ;; target of any directory symlink. + ;; This code is not quite complete; it does not handle + ;; embedded .. in some cases such as ./../foo and foo/bar/../../../lose. + (while (string-match "\\.\\./" tem) + (setq tem (substring tem 3)) + (setq newname (file-name-as-directory + ;; Do the .. by hand. + (directory-file-name + (file-name-directory + ;; Chase links in the default dir of the symlink. + (file-chase-links + (directory-file-name + (file-name-directory newname)))))))) + (setq newname (expand-file-name tem (file-name-directory newname))) + (setq count (1- count))) + newname)) (defun switch-to-buffer-other-window (buffer) *************** *** 384,388 **** (interactive "fFind file read-only: ") (find-file filename) ! (setq buffer-read-only t)) (defun find-file-read-only-other-window (filename) --- 409,414 ---- (interactive "fFind file read-only: ") (find-file filename) ! (setq buffer-read-only t) ! (current-buffer)) (defun find-file-read-only-other-window (filename) *************** *** 392,396 **** (interactive "fFind file read-only other window: ") (find-file-other-window filename) ! (setq buffer-read-only t)) (defun find-file-read-only-other-frame (filename) --- 418,423 ---- (interactive "fFind file read-only other window: ") (find-file-other-window filename) ! (setq buffer-read-only t) ! (current-buffer)) (defun find-file-read-only-other-frame (filename) *************** *** 400,404 **** (interactive "fFind file read-only other frame: ") (find-file-other-frame filename) ! (setq buffer-read-only t)) (defun find-alternate-file (filename) --- 427,432 ---- (interactive "fFind file read-only other frame: ") (find-file-other-frame filename) ! (setq buffer-read-only t) ! (current-buffer)) (defun find-alternate-file (filename) *************** *** 422,428 **** --- 450,460 ---- (let ((obuf (current-buffer)) (ofile buffer-file-name) + (onum buffer-file-number) + (otrue buffer-file-truename) (oname (buffer-name))) (rename-buffer " **lose**") (setq buffer-file-name nil) + (setq buffer-file-number nil) + (setq buffer-file-truename nil) (unwind-protect (progn *************** *** 431,434 **** --- 463,468 ---- (cond ((eq obuf (current-buffer)) (setq buffer-file-name ofile) + (setq buffer-file-number onum) + (setq buffer-file-truename otrue) (lock-buffer) (rename-buffer oname)))) *************** *** 745,751 **** ("\\.oak\\'" . scheme-mode) ("\\.scm.[0-9]*\\'" . scheme-mode) ! ("\\.sgm\\'" sgml-mode) ! ("\\.sgml\\'" sgml-mode) ! ("\\.dtd\\'" sgml-mode) ;; .emacs following a directory delimiter ;; in either Unix or VMS syntax. --- 779,785 ---- ("\\.oak\\'" . scheme-mode) ("\\.scm.[0-9]*\\'" . scheme-mode) ! ("\\.sgm\\'" . sgml-mode) ! ("\\.sgml\\'" . sgml-mode) ! ("\\.dtd\\'" . sgml-mode) ;; .emacs following a directory delimiter ;; in either Unix or VMS syntax. *************** *** 1087,1096 **** ;; If specified name is a symbolic link, chase it to the target. ;; Thus we make the backups in the directory where the real file is. ! (while (let ((tem (file-symlink-p real-file-name))) ! (if tem ! (setq real-file-name ! (expand-file-name tem ! (file-name-directory real-file-name)))) ! tem)) (setq backup-info (find-backup-file-name real-file-name) backupname (car backup-info) --- 1121,1125 ---- ;; If specified name is a symbolic link, chase it to the target. ;; Thus we make the backups in the directory where the real file is. ! (setq real-file-name (file-chase-links real-file-name)) (setq backup-info (find-backup-file-name real-file-name) backupname (car backup-info) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/find-dired.el emacs-19.10/lisp/find-dired.el *** emacs-19.9/lisp/find-dired.el Fri Apr 23 02:51:40 1993 --- emacs-19.10/lisp/find-dired.el Thu May 27 20:58:10 1993 *************** *** 8,13 **** ;; Keywords: unix ! (defconst find-dired-version (substring "$Revision: 1.12 $" 11 -2) ! "$Id: find-dired.el,v 1.12 1993/04/23 06:51:38 eric Exp $") ;;; This program is free software; you can redistribute it and/or modify --- 8,13 ---- ;; Keywords: unix ! (defconst find-dired-version (substring "$Revision: 1.13 $" 11 -2) ! "$Id: find-dired.el,v 1.13 1993/05/28 00:58:08 roland Exp $") ;;; This program is free software; you can redistribute it and/or modify *************** *** 34,38 **** ;; |roland@gnu.ai.mit.edu, sk@thp.uni-koeln.de ;; |Run a `find' command and dired the output ! ;; |$Date: 1993/04/23 06:51:38 $|$Revision: 1.12 $| ;; INSTALLATION ====================================================== --- 34,38 ---- ;; |roland@gnu.ai.mit.edu, sk@thp.uni-koeln.de ;; |Run a `find' command and dired the output ! ;; |$Date: 1993/05/28 00:58:08 $|$Revision: 1.13 $| ;; INSTALLATION ====================================================== *************** *** 199,203 **** (save-excursion (set-buffer buf) ! (setq mode-line-process nil) (message "find-dired %s finished." (current-buffer)))))) --- 199,218 ---- (save-excursion (set-buffer buf) ! (let ((buffer-read-only nil)) ! (save-excursion ! (goto-char (point-max)) ! (insert "\nfind " state) ! (forward-char -1) ;Back up before \n at end of STATE. ! (insert " at " (substring (current-time-string) 0 19)) ! (forward-char 1) ! (setq mode-line-process ! (concat ": " ! (symbol-name (process-status proc)))) ! ;; Since the buffer and mode line will show that the ! ;; process is dead, we can delete it now. Otherwise it ! ;; will stay around until M-x list-processes. ! (delete-process proc) ! ;; Force mode line redisplay soon. ! (set-buffer-modified-p (buffer-modified-p)))) (message "find-dired %s finished." (current-buffer)))))) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/frame.el emacs-19.10/lisp/frame.el *** emacs-19.9/lisp/frame.el Mon May 24 21:59:07 1993 --- emacs-19.10/lisp/frame.el Thu May 27 19:27:57 1993 *************** *** 101,105 **** ;; Handle `reverse' as a parameter. (if (cdr (or (assq 'reverse initial-frame-alist) ! (assq 'reverse default-frame-alist))) (let ((params (frame-parameters frame-initial-frame))) (modify-frame-parameters --- 101,107 ---- ;; Handle `reverse' as a parameter. (if (cdr (or (assq 'reverse initial-frame-alist) ! (assq 'reverse default-frame-alist) ! (cons nil ! (x-get-resource "reverseVideo" "Reversevideo")))) (let ((params (frame-parameters frame-initial-frame))) (modify-frame-parameters diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/hexl.el emacs-19.10/lisp/hexl.el *** emacs-19.9/lisp/hexl.el Wed May 26 17:16:44 1993 --- emacs-19.10/lisp/hexl.el Fri May 28 16:32:40 1993 *************** *** 53,57 **** (defvar hexl-program "hexl" "The program that will hexlify and de-hexlify its stdin. ! `hexl-program' will always be concated with `hexl-options' and \"-de\" when dehexlfying a buffer.") --- 53,57 ---- (defvar hexl-program "hexl" "The program that will hexlify and de-hexlify its stdin. ! `hexl-program' will always be concatenated with `hexl-options' and \"-de\" when dehexlfying a buffer.") *************** *** 65,75 **** (defvar hexlify-command (format "%s%s %s" exec-directory hexl-program hexl-options) ! "The command to use to hexlify a buffer. It is the concatination of ! `hexl-program' and `hexl-options'.") (defvar dehexlify-command (format "%s%s -de %s" exec-directory hexl-program hexl-options) ! "The command to use to unhexlify a buffer. It is the concatination of ! `hexl-program', the option \"-de\", and `hexl-options'.") (defvar hexl-max-address 0 --- 65,73 ---- (defvar hexlify-command (format "%s%s %s" exec-directory hexl-program hexl-options) ! "The command to use to hexlify a buffer.") (defvar dehexlify-command (format "%s%s -de %s" exec-directory hexl-program hexl-options) ! "The command to use to unhexlify a buffer.") (defvar hexl-max-address 0 *************** *** 503,509 **** (defun hexl-char-after-point () "Return char for ASCII hex digits at point." ! (setq lh (char-after (point))) ! (setq rh (char-after (1+ (point)))) ! (hexl-htoi lh rh)) (defun hexl-htoi (lh rh) --- 501,506 ---- (defun hexl-char-after-point () "Return char for ASCII hex digits at point." ! (hexl-htoi (char-after (point)) ! (char-after (1+ (point))))) (defun hexl-htoi (lh rh) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/info.el emacs-19.10/lisp/info.el *** emacs-19.9/lisp/info.el Wed May 26 14:56:18 1993 --- emacs-19.10/lisp/info.el Fri May 28 15:51:30 1993 *************** *** 288,321 **** (insert Info-dir-contents) (let ((dirs Info-directory-list) ! buffers buffer others nodes) ;; Search the directory list for the directory file. (while dirs ! ;; Try several variants of specified name. ! ;; Try upcasing, appending `.info', or both. ! (let* (temp ! (buffer ! (cond ! ((progn (setq temp (expand-file-name "DIR" (car dirs))) ! (file-exists-p temp)) ! (find-file-noselect temp)) ! ((progn (setq temp (expand-file-name "dir" (car dirs))) ! (file-exists-p temp)) ! (find-file-noselect temp)) ! ((progn (setq temp (expand-file-name "DIR.INFO" (car dirs))) ! (file-exists-p temp)) ! (find-file-noselect temp)) ! ((progn (setq temp (expand-file-name "dir.info" (car dirs))) ! (file-exists-p temp)) ! (find-file-noselect temp))))) ! (if buffer (setq buffers (cons buffer buffers))) ! (setq dirs (cdr dirs)))) ;; Distinguish the dir file that comes with Emacs from all the ! ;; others. [This sounds like baloney - who knows what order ! ;; Info-directory-list is in, especially after checking the ! ;; INFOPATH variable, and why should Emacs's dir be special? If ! ;; you understand what this comment should have said, please ! ;; change it.] (setq buffer (car buffers) others (cdr buffers)) --- 288,326 ---- (insert Info-dir-contents) (let ((dirs Info-directory-list) ! buffers buffer others nodes dirs-done) ;; Search the directory list for the directory file. (while dirs ! (or (member (file-truename (expand-file-name (car dirs))) dirs-done) ! (member (directory-file-name (file-truename (expand-file-name (car dirs)))) ! dirs-done) ! ;; Try several variants of specified name. ! ;; Try upcasing, appending `.info', or both. ! (let* (temp ! (buffer ! (cond ! ((progn (setq temp (expand-file-name "DIR" (car dirs))) ! (file-exists-p temp)) ! (find-file-noselect temp)) ! ((progn (setq temp (expand-file-name "dir" (car dirs))) ! (file-exists-p temp)) ! (find-file-noselect temp)) ! ((progn (setq temp (expand-file-name "DIR.INFO" (car dirs))) ! (file-exists-p temp)) ! (find-file-noselect temp)) ! ((progn (setq temp (expand-file-name "dir.info" (car dirs))) ! (file-exists-p temp)) ! (find-file-noselect temp))))) ! (setq dirs-done ! (cons (file-truename (expand-file-name (car dirs))) ! (cons (directory-file-name ! (file-truename (expand-file-name (car dirs)))) ! dirs-done))) ! (if buffer (setq buffers (cons buffer buffers))))) ! (setq dirs (cdr dirs))) ;; Distinguish the dir file that comes with Emacs from all the ! ;; others. Yes, that is really what this is supposed to do. ! ;; If it doesn't work, fix it. (setq buffer (car buffers) others (cdr buffers)) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/isearch.el emacs-19.10/lisp/isearch.el *** emacs-19.9/lisp/isearch.el Wed May 26 23:33:16 1993 --- emacs-19.10/lisp/isearch.el Sat May 29 02:27:51 1993 *************** *** 5,9 **** ;; Author: Daniel LaLiberte ! ;; |$Date: 1993/05/27 03:33:12 $|$Revision: 1.37 $ ;; This file is not yet part of GNU Emacs, but it is based almost --- 5,9 ---- ;; Author: Daniel LaLiberte ! ;; |$Date: 1993/05/29 06:27:47 $|$Revision: 1.38 $ ;; This file is not yet part of GNU Emacs, but it is based almost *************** *** 1270,1274 **** ;; Do the search with the current search string. (isearch-message nil t) ! (if search-upper-case (setq isearch-case-fold-search (isearch-no-upper-case-p isearch-string))) (condition-case lossage --- 1270,1274 ---- ;; Do the search with the current search string. (isearch-message nil t) ! (if (and isearch-case-fold-search search-upper-case) (setq isearch-case-fold-search (isearch-no-upper-case-p isearch-string))) (condition-case lossage diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/iso-ascii.el emacs-19.10/lisp/iso-ascii.el *** emacs-19.9/lisp/iso-ascii.el Mon May 24 03:53:41 1993 --- emacs-19.10/lisp/iso-ascii.el Thu May 27 09:56:48 1993 *************** *** 132,136 **** (standard-display-ascii 255 "{\"y}") ; small y with diaeresis or umlaut mark ! (provide 'iso8859-1-ascii) ;;; iso-ascii.el ends here --- 132,136 ---- (standard-display-ascii 255 "{\"y}") ; small y with diaeresis or umlaut mark ! (provide 'iso-ascii) ;;; iso-ascii.el ends here diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/iso-insert.el emacs-19.10/lisp/iso-insert.el *** emacs-19.9/lisp/iso-insert.el Mon May 24 03:53:42 1993 --- emacs-19.10/lisp/iso-insert.el Thu May 27 09:57:43 1993 *************** *** 626,630 **** ) ! (provide 'iso8859-1-insert) ;;; iso-insert.el ends here --- 626,630 ---- ) ! (provide 'iso-insert) ;;; iso-insert.el ends here diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/iso-swed.el emacs-19.10/lisp/iso-swed.el *** emacs-19.9/lisp/iso-swed.el Mon May 24 03:53:43 1993 --- emacs-19.10/lisp/iso-swed.el Thu May 27 09:57:04 1993 *************** *** 146,150 **** (standard-display-ascii 255 "{\"y}") ; small y with diaeresis or umlaut mark ! (provide 'iso8859-1-swedish) ;;; iso-swed.el ends here --- 146,150 ---- (standard-display-ascii 255 "{\"y}") ; small y with diaeresis or umlaut mark ! (provide 'iso-swed) ;;; iso-swed.el ends here Only in emacs-19.9/lisp: iso8859-1.el diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/lisp-mode.el emacs-19.10/lisp/lisp-mode.el *** emacs-19.9/lisp/lisp-mode.el Fri May 21 12:37:17 1993 --- emacs-19.10/lisp/lisp-mode.el Sat May 29 01:44:40 1993 *************** *** 561,565 **** (setq outer-loop-done (<= next-depth 0))) (if outer-loop-done ! nil (while (> last-depth next-depth) (setq indent-stack (cdr indent-stack) --- 561,565 ---- (setq outer-loop-done (<= next-depth 0))) (if outer-loop-done ! (forward-line 1) (while (> last-depth next-depth) (setq indent-stack (cdr indent-stack) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/loaddefs.el emacs-19.10/lisp/loaddefs.el *** emacs-19.9/lisp/loaddefs.el Thu May 27 00:04:47 1993 --- emacs-19.10/lisp/loaddefs.el Fri May 28 16:50:17 1993 *************** *** 174,179 **** (define-key esc-map "=" 'count-lines-region) (define-key ctl-x-map "=" 'what-cursor-position) (define-key esc-map "\e" 'eval-expression) ! (define-key ctl-x-map "\e" 'repeat-complex-command) (define-key ctl-x-map "u" 'advertised-undo) ;; Many people are used to typing C-/ on X terminals and getting C-_. --- 174,184 ---- (define-key esc-map "=" 'count-lines-region) (define-key ctl-x-map "=" 'what-cursor-position) + ;; This key sequence might cause a certain amount of trouble with function + ;; keys. Namely, it means you can't bind ESC followed by a function key. + ;; However, people might not mind that too terribly much. + ;; So I will leave this alone for now. (define-key esc-map "\e" 'eval-expression) ! ;; Changed from C-x ESC so that function keys work following C-x. ! (define-key ctl-x-map "\e\e" 'repeat-complex-command) (define-key ctl-x-map "u" 'advertised-undo) ;; Many people are used to typing C-/ on X terminals and getting C-_. diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/man.el emacs-19.10/lisp/man.el *** emacs-19.9/lisp/man.el Wed May 5 14:35:22 1993 --- emacs-19.10/lisp/man.el Sat May 29 00:53:57 1993 *************** *** 234,238 **** (define-key Man-mode-map "s" 'Man-goto-see-also-section) (define-key Man-mode-map "q" 'Man-quit) ! (define-key Man-mode-map "m" 'Man-manual-entry) (define-key Man-mode-map "v" 'Man-version) (define-key Man-mode-map "?" 'describe-mode) --- 234,238 ---- (define-key Man-mode-map "s" 'Man-goto-see-also-section) (define-key Man-mode-map "q" 'Man-quit) ! (define-key Man-mode-map "m" 'manual-entry) (define-key Man-mode-map "v" 'Man-version) (define-key Man-mode-map "?" 'describe-mode) *************** *** 448,464 **** See the variable Man-notify for the different notification behaviors." (cond ! ((eq Man-notify 'bully) ! (pop-to-buffer Man-buffer) ! (delete-other-windows-quietly)) ! ((eq Man-notify 'aggressive) ! (pop-to-buffer Man-buffer)) ! ((eq Man-notify 'friendly) ! (display-buffer Man-buffer 'not-this-window)) ! ((eq Man-notify 'polite) (beep) ! (message "Manual buffer %s is ready." (buffer-name Man-buffer))) ! ((eq Man-notify 'quiet) ! (message "Manual buffer %s is ready." (buffer-name Man-buffer))) ! ((or (eq Man-notify 'meek) t) (message "")) --- 448,464 ---- See the variable Man-notify for the different notification behaviors." (cond ! ((eq man-notify 'bully) ! (pop-to-buffer man-buffer) ! (delete-other-windows)) ! ((eq man-notify 'aggressive) ! (pop-to-buffer man-buffer)) ! ((eq man-notify 'friendly) ! (display-buffer man-buffer 'not-this-window)) ! ((eq man-notify 'polite) (beep) ! (message "Manual buffer %s is ready." (buffer-name man-buffer))) ! ((eq man-notify 'quiet) ! (message "Manual buffer %s is ready." (buffer-name man-buffer))) ! ((or (eq man-notify 'meek) t) (message "")) *************** *** 514,518 **** \"\\[describe-key] RET\" for more information: ! \\[Man-manual-entry] Prompt to retrieve a new manpage. \\[Man-follow-manual-reference] Retrieve reference in SEE ALSO section. \\[Man-next-manpage] Jump to next manpage in circular list. --- 514,518 ---- \"\\[describe-key] RET\" for more information: ! \\[manual-entry] Prompt to retrieve a new manpage. \\[Man-follow-manual-reference] Retrieve reference in SEE ALSO section. \\[Man-next-manpage] Jump to next manpage in circular list. *************** *** 555,559 **** truncate-lines t buffer-read-only t) ! (buffer-flush-undo (current-buffer)) (auto-fill-mode -1) (use-local-map Man-mode-map) --- 555,559 ---- truncate-lines t buffer-read-only t) ! (buffer-disable-undo (current-buffer)) (auto-fill-mode -1) (use-local-map Man-mode-map) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/mh-e.el emacs-19.10/lisp/mh-e.el *** emacs-19.9/lisp/mh-e.el Wed Mar 24 20:40:03 1993 --- emacs-19.10/lisp/mh-e.el Fri May 28 17:29:43 1993 *************** *** 1,11 **** ! ;;; mh-e.el --- GNU Emacs interface to the MH mailer ! ;;; Copyright (C) 1985, 86, 87, 88, 89, 92 Free Software Foundation ! ;; Author: James Larus ! ;; Version: 3.7 ! ;; Keywords: mail ! (defvar mh-e-RCS-id) ;; GNU Emacs is distributed in the hope that it will be useful, --- 1,11 ---- ! ;;; mh-e.el --- GNU Emacs interface to the MH mail system ! ;;; Copyright (C) 1985, 86, 87, 88, 90, 92, 93 Free Software Foundation ! (defconst mh-e-time-stamp "Time-stamp: <93/05/27 18:02:50 gildea>") ! ;; Maintainer: Stephen Gildea ! ;; Version: 3.8.1 ! ;; Keywords: mail ;; GNU Emacs is distributed in the hope that it will be useful, *************** *** 25,39 **** ;;; Commentary: ! ;;; This file contains mh-e, a GNU Emacs front end to the MH mail system ! ;;; (specifically, for use with MH.5 and MH.6). ! ;;; Original version for Gosling emacs by Brian Reid, Stanford, 1982. ! ;;; Modified by James Larus, BBN, July 1984 and UCB, 1984 & 1985. ! ;;; Rewritten for GNU Emacs, James Larus 1985. larus@ginger.berkeley.edu ! ;;; Modified by Stephen Gildea 1988. gildea@bbn.com ! ! ;;; NB. MH must have been compiled with the MHE compiler flag or several ! ;;; features necessary mh-e will be missing from MH commands, specifically ! ;;; the -build switch to repl and forw. ;;; Code: --- 25,53 ---- ;;; Commentary: ! ;;; mh-e works with Emacs 18 or 19, and MH 5 or 6. ! ;;; HOW TO USE: ! ;;; M-x mh-rmail to read mail. Type C-h m there for a list of commands. ! ;;; C-u M-x mh-rmail to visit any folder. ! ;;; M-x mh-smail to send mail. From within the mail reader, "m" works, too. ! ;;; Your .emacs might benefit from these bindings: ! ;;; (global-set-key "\C-xm" 'mh-smail) ! ;;; (global-set-key "\C-x4m" 'mh-smail-other-window) ! ;;; (global-set-key "\C-cr" 'mh-rmail) ! ! ;;; MH (Message Handler) is a powerful mail reader. The MH newsgroup ! ;;; is comp.mail.mh; the mailing list is mh-users@ics.uci.edu (send to ! ;;; mh-users-request to be added). See the monthly Frequently Asked ! ;;; Questions posting there for information on getting MH. ! ! ;;; NB. MH must have been compiled with the MHE compiler flag or several ! ;;; features necessary mh-e will be missing from MH commands, specifically ! ;;; the -build switch to repl and forw. ! ! ;;; Original version for Gosling emacs by Brian Reid, Stanford, 1982. ! ;;; Modified by James Larus, BBN, July 1984 and UCB, 1984 & 1985. ! ;;; Rewritten for GNU Emacs, James Larus 1985. larus@ginger.berkeley.edu ! ;;; Modified by Stephen Gildea 1988. gildea@bbn.com ! (defconst mh-e-RCS-id "$Header: /home/fsf/rms/e19/lisp/RCS/mh-e.el,v 1.9 1993/05/28 21:29:37 rms Exp $") ;;; Code: *************** *** 48,52 **** ;;;(defvar mh-lib "/usr/new/lib/mh/" "Directory of MH library.") ! (defvar mh-redist-full-contents t "Non-nil if the `dist' command needs whole letter for redistribution. This is the case when `send' is compiled with the BERK option.") --- 62,66 ---- ;;;(defvar mh-lib "/usr/new/lib/mh/" "Directory of MH library.") ! (defvar mh-redist-full-contents nil "Non-nil if the `dist' command needs whole letter for redistribution. This is the case when `send' is compiled with the BERK option.") *************** *** 71,76 **** "Invoked after incorporating mail into a folder with \\[mh-inc-folder].") (defvar mh-quit-hook nil ! "Invoked after quitting mh-e with \\[mh-quit].") --- 85,93 ---- "Invoked after incorporating mail into a folder with \\[mh-inc-folder].") + (defvar mh-before-quit-hook nil + "Invoked by \\[mh-quit] before quitting mh-e. See also mh-quit-hook") + (defvar mh-quit-hook nil ! "Invoked after quitting mh-e by \\[mh-quit]. See also mh-before-quit-hook") *************** *** 119,123 **** (defvar mh-summary-height 4 ! "*Number of lines in summary window.") (defvar mh-recenter-summary-p nil --- 136,140 ---- (defvar mh-summary-height 4 ! "*Number of lines in summary window (including the mode line).") (defvar mh-recenter-summary-p nil *************** *** 124,128 **** "*Recenter summary window when the show window is toggled off if non-nil.") ! (defvar mh-ins-buf-prefix ">> " "*String to put before each non-blank line of a yanked or inserted message. Used when the message is inserted in an outgoing letter.") --- 141,145 ---- "*Recenter summary window when the show window is toggled off if non-nil.") ! (defvar mh-ins-buf-prefix "> " "*String to put before each non-blank line of a yanked or inserted message. Used when the message is inserted in an outgoing letter.") *************** *** 142,146 **** (defvar mh-yank-from-start-of-msg t "*Controls which part of a message is yanked by \\[mh-yank-cur-msg]. ! If non-nil, include the entire message. If the symbol `body, then yank the message minus the header. If nil, yank only the portion of the message following the point. If the show buffer has a region, this variable is --- 159,163 ---- (defvar mh-yank-from-start-of-msg t "*Controls which part of a message is yanked by \\[mh-yank-cur-msg]. ! If non-nil, include the entire message. If the symbol `body', then yank the message minus the header. If nil, yank only the portion of the message following the point. If the show buffer has a region, this variable is *************** *** 155,161 **** "*If non-nil, then commands which operate on folders do so recursively.") ;;; Parameterize mh-e to work with different scan formats. The defaults work ! ;;; the standard MH scan listings. (defvar mh-cmd-note 4 --- 172,181 ---- "*If non-nil, then commands which operate on folders do so recursively.") + (defvar mh-unshar-default-directory "" + "*Default for directory name prompted for by mh-unshar-msg.") + ;;; Parameterize mh-e to work with different scan formats. The defaults work ! ;;; with the standard MH scan listings. (defvar mh-cmd-note 4 *************** *** 215,219 **** to keep.") ! (defvar mh-rejected-letter-start "^ ----- Unsent message follows -----$" "Regexp specifying the beginning of the wrapper around a returned letter. This wrapper is generated by the mail system when rejecting a letter.") --- 235,242 ---- to keep.") ! (defvar mh-rejected-letter-start ! (concat "^ ----- Unsent message follows -----$" ;from mail system ! "\\|^------- Unsent Draft$" ;from MH itself ! "\\|^ --- The unsent message follows ---$") ;from AIX mail system "Regexp specifying the beginning of the wrapper around a returned letter. This wrapper is generated by the mail system when rejecting a letter.") *************** *** 241,244 **** --- 264,270 ---- "Keymap for searching folder.") + (defvar mh-searching-folder nil + "Folder this pick is searching.") + (defvar mh-letter-mode-syntax-table nil "Syntax table used while in mh-e letter mode.") *************** *** 267,273 **** "Name of the sequence to which a message was last added.") - (defvar mh-signature-file-name "~/.signature" - "Name of file containing the user's signature.") - ;;; Macros and generic functions: --- 293,296 ---- *************** *** 414,418 **** (draft (cond ((and mh-draft-folder (equal from-folder mh-draft-folder)) ! (find-file (mh-msg-filename msg)) (rename-buffer (format "draft-%d" msg)) (buffer-name)) --- 437,441 ---- (draft (cond ((and mh-draft-folder (equal from-folder mh-draft-folder)) ! (pop-to-buffer (find-file-noselect (mh-msg-filename msg)) t) (rename-buffer (format "draft-%d" msg)) (buffer-name)) *************** *** 420,424 **** (mh-read-draft "clean-up" (mh-msg-filename msg) nil))))) (mh-clean-msg-header (point-min) ! "^Date:\\|^Received:\\|^Message-Id:\\|^From:" nil) (goto-char (point-min)) --- 443,447 ---- (mh-read-draft "clean-up" (mh-msg-filename msg) nil))))) (mh-clean-msg-header (point-min) ! "^Date:\\|^Received:\\|^Message-Id:\\|^From:\\|^Delivery-Date:" nil) (goto-char (point-min)) *************** *** 451,455 **** (delete-region (point-min) (point)) (mh-clean-msg-header (point-min) ! "^Date:\\|^Received:\\|^Message-Id:\\|^From:\\|^Sender:" nil)) (t --- 474,478 ---- (delete-region (point-min) (point)) (mh-clean-msg-header (point-min) ! "^Date:\\|^Received:\\|^Message-Id:\\|^From:\\|^Sender:\\|^Return-Path:" nil)) (t *************** *** 518,522 **** Non-nil third argument means not to show the message. Return non-nil if cursor is at message." ! (interactive "NMessage number? ") (let ((cur-msg (mh-get-msg-num nil)) (starting-place (point)) --- 541,545 ---- Non-nil third argument means not to show the message. Return non-nil if cursor is at message." ! (interactive "NGoto message: ") (let ((cur-msg (mh-get-msg-num nil)) (starting-place (point)) *************** *** 545,549 **** "Inc(orporate) new mail into +inbox. Optional prefix argument specifies an alternate maildrop from the default. ! If this is given, mail is incorporated into the current folder, rather than +inbox. Run `mh-inc-folder-hook' after incorporating new mail." (interactive (list (if current-prefix-arg --- 568,572 ---- "Inc(orporate) new mail into +inbox. Optional prefix argument specifies an alternate maildrop from the default. ! If this is given, incorporate mail into the current folder, rather than +inbox. Run `mh-inc-folder-hook' after incorporating new mail." (interactive (list (if current-prefix-arg *************** *** 574,578 **** (message "Folder %s removed" folder) (mh-set-folder-modified-p nil) ; so kill-buffer doesn't complain ! (kill-buffer mh-show-buffer) (kill-buffer folder)) (message "Folder not removed"))) --- 597,602 ---- (message "Folder %s removed" folder) (mh-set-folder-modified-p nil) ; so kill-buffer doesn't complain ! (if (get-buffer mh-show-buffer) ! (kill-buffer mh-show-buffer)) (kill-buffer folder)) (message "Folder not removed"))) *************** *** 595,599 **** (erase-buffer) (message "Listing folders...") ! (mh-exec-cmd-output "folders" t) (goto-char (point-min)) (message "Listing folders...done")))) --- 619,625 ---- (erase-buffer) (message "Listing folders...") ! (mh-exec-cmd-output "folders" t (if mh-recursive-folders ! "-recurse" ! "-norecurse")) (goto-char (point-min)) (message "Listing folders...done")))) *************** *** 661,665 **** (list current-prefix-arg (read-string "Shell command on message: "))) (save-excursion ! (set-buffer mh-show-buffer) (goto-char (point-min)) (if (not prefix-provided) (search-forward "\n\n")) --- 687,691 ---- (list current-prefix-arg (read-string "Shell command on message: "))) (save-excursion ! (mh-display-msg (mh-get-msg-num t) mh-current-folder) ;update show buffer (goto-char (point-min)) (if (not prefix-provided) (search-forward "\n\n")) *************** *** 722,726 **** (cond ((or (equal reply-to "from") (equal reply-to "")) (apply 'mh-exec-cmd ! "repl" "-build" "-nodraftfolder" mh-current-folder msg --- 748,752 ---- (cond ((or (equal reply-to "from") (equal reply-to "")) (apply 'mh-exec-cmd ! "repl" "-build" "-noquery" "-nodraftfolder" mh-current-folder msg *************** *** 730,734 **** ((equal reply-to "to") (apply 'mh-exec-cmd ! "repl" "-build" "-nodraftfolder" mh-current-folder msg --- 756,760 ---- ((equal reply-to "to") (apply 'mh-exec-cmd ! "repl" "-build" "-noquery" "-nodraftfolder" mh-current-folder msg *************** *** 738,742 **** ((or (equal reply-to "cc") (equal reply-to "all")) (apply 'mh-exec-cmd ! "repl" "-build" "-nodraftfolder" mh-current-folder msg --- 764,768 ---- ((or (equal reply-to "cc") (equal reply-to "all")) (apply 'mh-exec-cmd ! "repl" "-build" "-noquery" "-nodraftfolder" mh-current-folder msg *************** *** 765,771 **** (defun mh-quit () ! "Restore the previous window configuration, if one exists. ! Finish by running mh-quit-hook." (interactive) (if mh-previous-window-config (set-window-configuration mh-previous-window-config)) --- 791,799 ---- (defun mh-quit () ! "Quit mh-e. ! Start by running mh-before-quit-hook. Restore the previous window ! configuration, if one exists. Finish by running mh-quit-hook." (interactive) + (run-hooks 'mh-before-quit-hook) (if mh-previous-window-config (set-window-configuration mh-previous-window-config)) *************** *** 904,908 **** ! (defun mh-rescan-folder (range) "Rescan a folder after optionally processing the outstanding commands. If optional prefix argument is provided, prompt for the range of --- 932,936 ---- ! (defun mh-rescan-folder (&optional range) "Rescan a folder after optionally processing the outstanding commands. If optional prefix argument is provided, prompt for the range of *************** *** 988,992 **** (defun mh-send (to cc subject) ! "Compose and send a letter." (interactive "sTo: \nsCc: \nsSubject: ") (let ((config (current-window-configuration))) --- 1016,1023 ---- (defun mh-send (to cc subject) ! "Compose and send a letter. ! The letter is composed in mh-letter-mode; see its documentation for more ! details. If `mh-compose-letter-function' is defined, it is called on the ! draft and passed three arguments: to, subject, and cc." (interactive "sTo: \nsCc: \nsSubject: ") (let ((config (current-window-configuration))) *************** *** 1043,1047 **** (mh-display-msg msg folder)) (other-window -1) ! (shrink-window (- (window-height) mh-summary-height)) (mh-recenter nil) (if (not (memq msg mh-seen-list)) (mh-push msg mh-seen-list))) --- 1074,1079 ---- (mh-display-msg msg folder)) (other-window -1) ! (if (not (= (1+ (window-height)) (screen-height))) ;not horizontally split ! (shrink-window (- (window-height) mh-summary-height))) (mh-recenter nil) (if (not (memq msg mh-seen-list)) (mh-push msg mh-seen-list))) *************** *** 1050,1054 **** (defun mh-sort-folder () "Sort the messages in the current folder by date." ! (interactive "") (mh-process-or-undo-commands mh-current-folder) (setq mh-next-direction 'forward) --- 1082,1086 ---- (defun mh-sort-folder () "Sort the messages in the current folder by date." ! (interactive) (mh-process-or-undo-commands mh-current-folder) (setq mh-next-direction 'forward) *************** *** 1076,1087 **** (mh-read-seq-default "Undo" t) (mh-get-msg-num t)))) - (cond (prefix-provided (mh-mapc (function mh-undo-msg) (mh-seq-to-msgs msg-or-seq))) - ((or (looking-at mh-deleted-msg-regexp) - (looking-at mh-refiled-msg-regexp)) - (mh-undo-msg (mh-get-msg-num t))) (t ! (error "Nothing to undo"))) ;; update the mh-refile-list so mh-outstanding-commands-p will work (mh-mapc (function --- 1108,1129 ---- (mh-read-seq-default "Undo" t) (mh-get-msg-num t)))) (cond (prefix-provided (mh-mapc (function mh-undo-msg) (mh-seq-to-msgs msg-or-seq))) (t ! (let ((original-position (point))) ! (beginning-of-line) ! (while (not (or (looking-at mh-deleted-msg-regexp) ! (looking-at mh-refiled-msg-regexp) ! (and (eq mh-next-direction 'forward) (bobp)) ! (and (eq mh-next-direction 'backward) ! (save-excursion (forward-line) (eobp))))) ! (forward-line (if (eq mh-next-direction 'forward) -1 1))) ! (if (or (looking-at mh-deleted-msg-regexp) ! (looking-at mh-refiled-msg-regexp)) ! (progn ! (mh-undo-msg (mh-get-msg-num t)) ! (mh-maybe-show)) ! (goto-char original-position) ! (error "Nothing to undo"))))) ;; update the mh-refile-list so mh-outstanding-commands-p will work (mh-mapc (function *************** *** 1090,1094 **** (setq mh-refile-list (delq elt mh-refile-list))))) mh-refile-list) - (if (not (mh-outstanding-commands-p)) (mh-set-folder-modified-p nil))) --- 1132,1135 ---- *************** *** 1099,1109 **** (cond ((memq msg mh-delete-list) (setq mh-delete-list (delq msg mh-delete-list)) ! (mh-remove-msg-from-seq msg 'deleted t) ! (mh-notate msg ? mh-cmd-note)) (t (mh-mapc (function (lambda (dest) (mh-remove-msg-from-seq msg dest t))) ! mh-refile-list) ! (mh-notate msg ? mh-cmd-note)))) --- 1140,1149 ---- (cond ((memq msg mh-delete-list) (setq mh-delete-list (delq msg mh-delete-list)) ! (mh-remove-msg-from-seq msg 'deleted t)) (t (mh-mapc (function (lambda (dest) (mh-remove-msg-from-seq msg dest t))) ! mh-refile-list))) ! (mh-notate msg ? mh-cmd-note)) *************** *** 1110,1114 **** (defun mh-undo-folder (&rest ignore) "Undo all commands in current folder." ! (interactive "") (cond ((or mh-do-not-confirm (yes-or-no-p "Undo all commands in folder? ")) --- 1150,1154 ---- (defun mh-undo-folder (&rest ignore) "Undo all commands in current folder." ! (interactive) (cond ((or mh-do-not-confirm (yes-or-no-p "Undo all commands in folder? ")) *************** *** 1124,1129 **** (defun mh-visit-folder (folder &optional range) ! "Visit FOLDER and display RANGE of messages." (interactive (list (mh-prompt-for-folder "Visit" "+inbox" t) (mh-read-msg-range "Range [all]? "))) --- 1164,1202 ---- + (defun mh-unshar-msg (dir) + "Unpack the shar file contained in the current message into directory DIR." + (interactive (list (read-file-name "Unshar message in directory: " + mh-unshar-default-directory + mh-unshar-default-directory nil))) + (mh-display-msg (mh-get-msg-num t) mh-current-folder) ;update show buffer + (mh-unshar-buffer dir)) + + (defun mh-unshar-buffer (dir) + ;; Unpack the shar file contained in the current buffer into directory DIR. + (goto-char (point-min)) + (if (or (re-search-forward "^#![ \t]*/bin/sh" nil t) + (and (re-search-forward "^[^a-z0-9\"]*cut here\b" nil t) + (forward-line 1)) + (re-search-forward "^#" nil t) + (re-search-forward "^: " nil t)) + (let ((default-directory (expand-file-name dir)) + (start (progn (beginning-of-line) (point))) + (log-buffer (get-buffer-create "*Unshar Output*"))) + (save-excursion + (set-buffer log-buffer) + (setq default-directory (expand-file-name dir)) + (erase-buffer) + (if (file-directory-p default-directory) + (insert "cd " dir "\n") + (insert "mkdir " dir "\n") + (call-process "mkdir" nil log-buffer t default-directory))) + (set-window-start (display-buffer log-buffer) 0) ;so can watch progress + (call-process-region start (point-max) "sh" nil log-buffer t)) + (error "Cannot find start of shar."))) + + (defun mh-visit-folder (folder &optional range) ! "Visit FOLDER and display RANGE of messages. ! Assumes mh-e has already been initialized." (interactive (list (mh-prompt-for-folder "Visit" "+inbox" t) (mh-read-msg-range "Range [all]? "))) *************** *** 1130,1134 **** (let ((config (current-window-configuration))) (mh-scan-folder folder (or range "all")) ! (setq mh-previous-window-config config))) --- 1203,1208 ---- (let ((config (current-window-configuration))) (mh-scan-folder folder (or range "all")) ! (setq mh-previous-window-config config)) ! nil) *************** *** 1135,1143 **** (defun mh-widen () "Remove restrictions from the current folder, thereby showing all messages." ! (interactive "") ! (with-mh-folder-updating (t) ! (delete-region (point-min) (point-max)) ! (widen) ! (mh-make-folder-mode-line)) (setq mh-narrowed-to-seq nil)) --- 1209,1218 ---- (defun mh-widen () "Remove restrictions from the current folder, thereby showing all messages." ! (interactive) ! (if mh-narrowed-to-seq ! (with-mh-folder-updating (t) ! (delete-region (point-min) (point-max)) ! (widen) ! (mh-make-folder-mode-line))) (setq mh-narrowed-to-seq nil)) *************** *** 1161,1165 **** (defun mh-refile-a-msg (msg destination) ! ;; Refile MESSAGE in FOLDER. (save-excursion (mh-goto-msg msg nil t) --- 1236,1240 ---- (defun mh-refile-a-msg (msg destination) ! ;; Refile MESSAGE in FOLDER. FOLDER is a symbol, not a string. (save-excursion (mh-goto-msg msg nil t) *************** *** 1185,1188 **** --- 1260,1264 ---- (defun mh-display-msg (msg-num folder) ;; Display message NUMBER of FOLDER. + ;; Sets the current buffer to the show buffer. (set-buffer folder) ;; Bind variables in folder buffer in case they are local *************** *** 1254,1258 **** (goto-char start) (if (search-forward "\n\n" nil t) ! (backward-char 2)) (narrow-to-region start (point)) (goto-char (point-min)) --- 1330,1334 ---- (goto-char start) (if (search-forward "\n\n" nil t) ! (backward-char 1)) (narrow-to-region start (point)) (goto-char (point-min)) *************** *** 1294,1298 **** (cond (mh-draft-folder (let ((orig-default-dir default-directory)) ! (pop-to-buffer (find-file-noselect (mh-new-draft-name) t)) (rename-buffer (format "draft-%s" (buffer-name))) (setq default-directory orig-default-dir))) --- 1370,1374 ---- (cond (mh-draft-folder (let ((orig-default-dir default-directory)) ! (pop-to-buffer (find-file-noselect (mh-new-draft-name)) t) (rename-buffer (format "draft-%s" (buffer-name))) (setq default-directory orig-default-dir))) *************** *** 1437,1443 **** mh-summary-height (4) ! Number of lines in the summary window. ! mh-ins-buf-prefix (\">> \") String to insert before each non-blank line of a message as it is inserted in a draft letter. --- 1513,1519 ---- mh-summary-height (4) ! Number of lines in the summary window including the mode line. ! mh-ins-buf-prefix (\"> \") String to insert before each non-blank line of a message as it is inserted in a draft letter. *************** *** 1465,1468 **** --- 1541,1545 ---- 'mh-last-msg-num nil ; Number of last msg in buffer 'mh-previous-window-config nil) ; Previous window configuration + (setq truncate-lines t) (auto-save-mode -1) (setq buffer-offer-save t) *************** *** 1697,1701 **** (mh-first-msg) (while (and msgs (< (point) (point-max))) ! (cond ((= (mh-get-msg-num nil) (car msgs)) (delete-region (point) (save-excursion (forward-line) (point))) (setq msgs (cdr msgs))) --- 1774,1778 ---- (mh-first-msg) (while (and msgs (< (point) (point-max))) ! (cond ((equal (mh-get-msg-num nil) (car msgs)) (delete-region (point) (save-excursion (forward-line) (point))) (setq msgs (cdr msgs))) *************** *** 1770,1774 **** (set-syntax-table mh-letter-mode-syntax-table) (run-hooks 'text-mode-hook 'mh-letter-mode-hook) ! (mh-when auto-fill-function (make-local-variable 'auto-fill-function) (setq auto-fill-function 'mh-auto-fill-for-letter))) --- 1847,1854 ---- (set-syntax-table mh-letter-mode-syntax-table) (run-hooks 'text-mode-hook 'mh-letter-mode-hook) ! (mh-when (and (boundp 'auto-fill-hook) auto-fill-hook) ;emacs 18 ! (make-local-variable 'auto-fill-hook) ! (setq auto-fill-hook 'mh-auto-fill-for-letter)) ! (mh-when (and (boundp 'auto-fill-function) auto-fill-function) ;emacs 19 (make-local-variable 'auto-fill-function) (setq auto-fill-function 'mh-auto-fill-for-letter))) *************** *** 1798,1802 **** The field is indicated by the previous keystroke. Create the field if it does not exist. Set the mark to point before moving." ! (interactive "") (expand-abbrev) (let ((target (cdr (assoc (logior last-input-char ?`) mh-to-field-choices))) --- 1878,1882 ---- The field is indicated by the previous keystroke. Create the field if it does not exist. Set the mark to point before moving." ! (interactive) (expand-abbrev) (let ((target (cdr (assoc (logior last-input-char ?`) mh-to-field-choices))) *************** *** 1806,1812 **** (skip-chars-backward " \t") (delete-region (point) eol)) ! (if (save-excursion ! (backward-char 1) ! (not (looking-at "[:,]"))) (insert ", ") (insert " "))) --- 1886,1893 ---- (skip-chars-backward " \t") (delete-region (point) eol)) ! (if (and (not (eq (logior last-input-char ?`) ?s)) ! (save-excursion ! (backward-char 1) ! (not (looking-at "[:,]")))) (insert ", ") (insert " "))) *************** *** 1834,1839 **** (defun mh-insert-signature () "Insert the file ~/.signature at the current point." ! (interactive "") ! (insert-file-contents mh-signature-file-name) (set-buffer-modified-p (buffer-modified-p))) ; force mode line update --- 1915,1920 ---- (defun mh-insert-signature () "Insert the file ~/.signature at the current point." ! (interactive) ! (insert-file-contents "~/.signature") (set-buffer-modified-p (buffer-modified-p))) ; force mode line update *************** *** 1884,1888 **** (let ((pattern-buffer (buffer-name)) (searching-buffer mh-searching-folder) ! (range) (pattern nil) (new-buffer nil)) --- 1965,1969 ---- (let ((pattern-buffer (buffer-name)) (searching-buffer mh-searching-folder) ! range msgs (pattern nil) (new-buffer nil)) *************** *** 1998,2002 **** (mh-exec-cmd-output "send" t "-watch" "-nopush" "-nodraftfolder" file-name)) ! (goto-char (point-max)) (recenter -1) (set-buffer draft-buffer)) ; for annotation below --- 2079,2083 ---- (mh-exec-cmd-output "send" t "-watch" "-nopush" "-nodraftfolder" file-name)) ! (goto-char (point-max)) ; show the interesting part (recenter -1) (set-buffer draft-buffer)) ; for annotation below *************** *** 2069,2073 **** (set-buffer mh-show-buffer) ; Find displayed message (let ((mh-ins-str (cond ((mark) ! (buffer-substring (point) (mark))) ((eq 'body mh-yank-from-start-of-msg) (buffer-substring --- 2150,2155 ---- (set-buffer mh-show-buffer) ; Find displayed message (let ((mh-ins-str (cond ((mark) ! (buffer-substring (region-beginning) ! (region-end))) ((eq 'body mh-yank-from-start-of-msg) (buffer-substring *************** *** 2103,2107 **** "Kill the draft message file and the draft message buffer. Use \\[kill-buffer] if you don't want to delete the draft message file." ! (interactive "") (if (y-or-n-p "Kill draft message? ") (let ((config mh-previous-window-config)) --- 2185,2189 ---- "Kill the draft message file and the draft message buffer. Use \\[kill-buffer] if you don't want to delete the draft message file." ! (interactive) (if (y-or-n-p "Kill draft message? ") (let ((config mh-previous-window-config)) *************** *** 2199,2203 **** (mh-exec-cmd-quiet " *mh-temp*" "mark" folder "-list") (goto-char (point-min)) ! (while (re-search-forward "^[^:]+" nil t) (mh-push (mh-make-seq (intern (buffer-substring (match-beginning 0) (match-end 0))) --- 2281,2286 ---- (mh-exec-cmd-quiet " *mh-temp*" "mark" folder "-list") (goto-char (point-min)) ! ;; look for name in line of form "cur: 4" or "myseq (private): 23" ! (while (re-search-forward "^[^: ]+" nil t) (mh-push (mh-make-seq (intern (buffer-substring (match-beginning 0) (match-end 0))) *************** *** 2325,2329 **** (defun mh-folder-name-p (name) ;; Return non-NIL if NAME is possibly the name of a folder. ! ;; A name can be a folder name if it begins with "+". (if (symbolp name) (eql (aref (symbol-name name) 0) ?+) --- 2408,2412 ---- (defun mh-folder-name-p (name) ;; Return non-NIL if NAME is possibly the name of a folder. ! ;; A name (a string or symbol) can be a folder name if it begins with "+". (if (symbolp name) (eql (aref (symbol-name name) 0) ?+) *************** *** 2459,2466 **** (set-buffer (get-buffer-create " *mh-temp*")) (erase-buffer)) ! (let ((process (apply 'start-process ! command nil ! (expand-file-name command mh-progs) ! (mh-list-to-string args)))) (set-process-filter process 'mh-process-daemon))) --- 2542,2550 ---- (set-buffer (get-buffer-create " *mh-temp*")) (erase-buffer)) ! (let* ((process-connection-type nil) ! (process (apply 'start-process ! command nil ! (expand-file-name command mh-progs) ! (mh-list-to-string args)))) (set-process-filter process 'mh-process-daemon))) *************** *** 2532,2538 **** (defun mh-prompt-for-folder (prompt default can-create) ! ;; Prompt for a folder name with PROMPT. Returns the folder's name. ! ;; DEFAULT is used if the folder exists and the user types return. ! ;; If the CAN-CREATE flag is t, then a non-existant folder is made. (let* ((prompt (format "%s folder%s" prompt (if (equal "" default) --- 2616,2622 ---- (defun mh-prompt-for-folder (prompt default can-create) ! ;; Prompt for a folder name with PROMPT. Returns the folder's name as a ! ;; string. DEFAULT is used if the folder exists and the user types return. ! ;; If the CAN-CREATE flag is t, then a non-existent folder is made. (let* ((prompt (format "%s folder%s" prompt (if (equal "" default) *************** *** 2541,2545 **** name) (if (null mh-folder-list) ! (setq mh-folder-list (mh-make-folder-list))) (while (and (setq name (completing-read prompt mh-folder-list nil nil "+")) --- 2625,2629 ---- name) (if (null mh-folder-list) ! (mh-set-folder-list)) (while (and (setq name (completing-read prompt mh-folder-list nil nil "+")) *************** *** 2557,2562 **** (call-process "mkdir" nil nil nil (mh-expand-file-name name)) (message "Creating %s...done" name) ! (mh-push (list name) mh-folder-list) ! (mh-push (list (substring name 1 nil)) mh-folder-list)) (new-file-p (error "Folder %s is not created" name)) --- 2641,2645 ---- (call-process "mkdir" nil nil nil (mh-expand-file-name name)) (message "Creating %s...done" name) ! (mh-push (list name) mh-folder-list)) (new-file-p (error "Folder %s is not created" name)) *************** *** 2563,2571 **** (t (mh-when (null (assoc name mh-folder-list)) ! (mh-push (list name) mh-folder-list) ! (mh-push (list (substring name 1 nil)) mh-folder-list))))) name)) (defun mh-make-folder-list () "Return a list of the user's folders. --- 2646,2659 ---- (t (mh-when (null (assoc name mh-folder-list)) ! (mh-push (list name) mh-folder-list))))) name)) + (defun mh-set-folder-list () + "Sets mh-folder-list correctly. + A useful function for the command line or for when you need to sync by hand." + (setq mh-folder-list (mh-make-folder-list))) + + (defun mh-make-folder-list () "Return a list of the user's folders. *************** *** 2688,2706 **** (let ((case-fold-search t)) (goto-char (point-min)) ! (cond ((not (search-forward field nil t)) "") ((looking-at "[\t ]*$") "") (t (re-search-forward "[\t ]*\\([^\t \n].*\\)$" nil t) ! (let ((field (buffer-substring (match-beginning 1) ! (match-end 1))) ! (end-of-match (point))) ! (forward-line) ! (while (looking-at "[ \t]") (forward-line 1)) ! (backward-char 1) ! (if (<= (point) end-of-match) ! field ! (format "%s%s" ! field ! (buffer-substring end-of-match (point))))))))) --- 2776,2788 ---- (let ((case-fold-search t)) (goto-char (point-min)) ! (cond ((not (re-search-forward (format "^%s" field) nil t)) "") ((looking-at "[\t ]*$") "") (t (re-search-forward "[\t ]*\\([^\t \n].*\\)$" nil t) ! (let ((start (match-beginning 1))) ! (forward-line 1) ! (while (looking-at "[ \t]") ! (forward-line 1)) ! (buffer-substring start (1- (point)))))))) *************** *** 2726,2729 **** --- 2808,2812 ---- ;; Set point to the end of the line beginning with FIELD. ;; Set the mark to the old value of point, if SET-MARK is non-nil. + ;; Returns non-nil iff the field was found. (let ((case-fold-search t)) (if set-mark (push-mark)) *************** *** 2741,2790 **** (forward-line arg))) - - (defun mh-unshar (dir) - "Unshar the current message in the directory given by DIR." - (interactive "DUnshar in directory: ") - (let ((default-directory default-directory) - (errbuf " *Unshar Output*") - (curbuf (current-buffer)) - (show-buffer mh-show-buffer) - start - ) - (setq dir (expand-file-name dir)) - (if (not (eq system-type 'vax-vms)) - (setq dir (file-name-as-directory dir))) - (mh-show nil) ;;; force showing of current message - (save-excursion - (set-buffer show-buffer) - (goto-char (point-min)) - (message "Looking for start of shar package ...") - (if (or (re-search-forward "^#![ \t]*/bin/sh" nil t) - (and (re-search-forward "^[^a-z0-9\"]*cut here" nil t) - (forward-line 1)) - (re-search-forward "^#" nil t) - (re-search-forward "^: " nil t) - ) - (progn - (beginning-of-line) - (setq start (point)) - (set-buffer curbuf) - (pop-to-buffer errbuf) - (kill-region (point-max) (point-min)) - (insert (format "Unsharing in directory \"%s\" ...\n\n" dir)) - (message "Please wait ...") - (sit-for 0) - (set-buffer show-buffer) - (setq default-directory dir) - (call-process-region start (point-max) - "/bin/sh" nil errbuf t) - (pop-to-buffer curbuf) - (message "Unshar done") - ) - (error "Can't find start of shar file") - ) - ) - ) - ) - --- 2824,2827 ---- *************** *** 2809,2813 **** (define-key mh-folder-mode-map "\ek" 'mh-kill-folder) (define-key mh-folder-mode-map "\el" 'mh-list-folders) ! (define-key mh-folder-mode-map "\en" 'mh-unshar) (define-key mh-folder-mode-map "\eo" 'mh-write-msg-to-file) (define-key mh-folder-mode-map "\ep" 'mh-pack-folder) --- 2846,2850 ---- (define-key mh-folder-mode-map "\ek" 'mh-kill-folder) (define-key mh-folder-mode-map "\el" 'mh-list-folders) ! (define-key mh-folder-mode-map "\en" 'mh-unshar-msg) (define-key mh-folder-mode-map "\eo" 'mh-write-msg-to-file) (define-key mh-folder-mode-map "\ep" 'mh-pack-folder) *************** *** 2827,2830 **** --- 2864,2868 ---- (define-key mh-folder-mode-map "a" 'mh-reply) (define-key mh-folder-mode-map "j" 'mh-goto-msg) + (define-key mh-folder-mode-map "<" 'mh-first-msg) (define-key mh-folder-mode-map "g" 'mh-goto-msg) (define-key mh-folder-mode-map "\177" 'mh-previous-page) *************** *** 2880,2885 **** ;;; For Gnu Emacs. ;;; Local Variables: *** ! ;;; eval: (put 'mh-when 'lisp-indent-function 1) *** ! ;;; eval: (put 'with-mh-folder-updating 'lisp-indent-function 1) *** ;;; End: *** --- 2918,2923 ---- ;;; For Gnu Emacs. ;;; Local Variables: *** ! ;;; eval: (put 'mh-when 'lisp-indent-hook 1) *** ! ;;; eval: (put 'with-mh-folder-updating 'lisp-indent-hook 1) *** ;;; End: *** *************** *** 2887,2888 **** --- 2925,2927 ---- ;;; mh-e.el ends here + diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/mouse.el emacs-19.10/lisp/mouse.el *** emacs-19.9/lisp/mouse.el Wed May 26 14:08:55 1993 --- emacs-19.10/lisp/mouse.el Sat May 29 00:33:37 1993 *************** *** 616,643 **** ;;; ("fixed-medium-20" "-misc-fixed-medium-*-*-*-20-*-*-*-*-*-*-*") ("Courier" ! ("8" "-adobe-courier-medium-r-normal--8-*-*-*-m-*-iso8859-1") ! ("10" "-adobe-courier-medium-r-normal--10-*-*-*-m-*-iso8859-1") ! ("12" "-adobe-courier-medium-r-normal--12-*-*-*-m-*-iso8859-1") ! ("14" "-adobe-courier-medium-r-normal--14-*-*-*-m-*-iso8859-1") ! ("18" "-adobe-courier-medium-r-normal--18-*-*-*-m-*-iso8859-1") ! ("24" "-adobe-courier-medium-r-normal--24-*-*-*-m-*-iso8859-1") ! ("8 bold" "-adobe-courier-bold-r-normal--8-*-*-*-m-*-iso8859-1") ! ("10 bold" "-adobe-courier-bold-r-normal--10-*-*-*-m-*-iso8859-1") ! ("12 bold" "-adobe-courier-bold-r-normal--12-*-*-*-m-*-iso8859-1") ! ("14 bold" "-adobe-courier-bold-r-normal--14-*-*-*-m-*-iso8859-1") ! ("18 bold" "-adobe-courier-bold-r-normal--18-*-*-*-m-*-iso8859-1") ! ("24 bold" "-adobe-courier-bold-r-normal--24-*-*-*-m-*-iso8859-1") ! ("8 slant" "-adobe-courier-medium-o-normal--8-*-*-*-m-*-iso8859-1") ! ("10 slant" "-adobe-courier-medium-o-normal--10-*-*-*-m-*-iso8859-1") ! ("12 slant" "-adobe-courier-medium-o-normal--12-*-*-*-m-*-iso8859-1") ! ("14 slant" "-adobe-courier-medium-o-normal--14-*-*-*-m-*-iso8859-1") ! ("18 slant" "-adobe-courier-medium-o-normal--18-*-*-*-m-*-iso8859-1") ! ("24 slant" "-adobe-courier-medium-o-normal--24-*-*-*-m-*-iso8859-1") ! ("8 bold slant" "-adobe-courier-bold-o-normal--8-*-*-*-m-*-iso8859-1") ! ("10 bold slant" "-adobe-courier-bold-o-normal--10-*-*-*-m-*-iso8859-1") ! ("12 bold slant" "-adobe-courier-bold-o-normal--12-*-*-*-m-*-iso8859-1") ! ("14 bold slant" "-adobe-courier-bold-o-normal--14-*-*-*-m-*-iso8859-1") ! ("18 bold slant" "-adobe-courier-bold-o-normal--18-*-*-*-m-*-iso8859-1") ! ("24 bold slant" "-adobe-courier-bold-o-normal--24-*-*-*-m-*-iso8859-1")) ) "X fonts suitable for use in Emacs.") --- 616,643 ---- ;;; ("fixed-medium-20" "-misc-fixed-medium-*-*-*-20-*-*-*-*-*-*-*") ("Courier" ! ("8" "-adobe-courier-medium-r-normal--*-80-*-*-m-*-iso8859-1") ! ("10" "-adobe-courier-medium-r-normal--*-100-*-*-m-*-iso8859-1") ! ("12" "-adobe-courier-medium-r-normal--*-120-*-*-m-*-iso8859-1") ! ("14" "-adobe-courier-medium-r-normal--*-140-*-*-m-*-iso8859-1") ! ("18" "-adobe-courier-medium-r-normal--*-180-*-*-m-*-iso8859-1") ! ("24" "-adobe-courier-medium-r-normal--*-240-*-*-m-*-iso8859-1") ! ("8 bold" "-adobe-courier-bold-r-normal--*-80-*-*-m-*-iso8859-1") ! ("10 bold" "-adobe-courier-bold-r-normal--*-100-*-*-m-*-iso8859-1") ! ("12 bold" "-adobe-courier-bold-r-normal--*-120-*-*-m-*-iso8859-1") ! ("14 bold" "-adobe-courier-bold-r-normal--*-140-*-*-m-*-iso8859-1") ! ("18 bold" "-adobe-courier-bold-r-normal--*-180-*-*-m-*-iso8859-1") ! ("24 bold" "-adobe-courier-bold-r-normal--*-240-*-*-m-*-iso8859-1") ! ("8 slant" "-adobe-courier-medium-o-normal--*-80-*-*-m-*-iso8859-1") ! ("10 slant" "-adobe-courier-medium-o-normal--*-100-*-*-m-*-iso8859-1") ! ("12 slant" "-adobe-courier-medium-o-normal--*-120-*-*-m-*-iso8859-1") ! ("14 slant" "-adobe-courier-medium-o-normal--*-140-*-*-m-*-iso8859-1") ! ("18 slant" "-adobe-courier-medium-o-normal--*-180-*-*-m-*-iso8859-1") ! ("24 slant" "-adobe-courier-medium-o-normal--*-240-*-*-m-*-iso8859-1") ! ("8 bold slant" "-adobe-courier-bold-o-normal--*-80-*-*-m-*-iso8859-1") ! ("10 bold slant" "-adobe-courier-bold-o-normal--*-100-*-*-m-*-iso8859-1") ! ("12 bold slant" "-adobe-courier-bold-o-normal--*-120-*-*-m-*-iso8859-1") ! ("14 bold slant" "-adobe-courier-bold-o-normal--*-140-*-*-m-*-iso8859-1") ! ("18 bold slant" "-adobe-courier-bold-o-normal--*-180-*-*-m-*-iso8859-1") ! ("24 bold slant" "-adobe-courier-bold-o-normal--*-240-*-*-m-*-iso8859-1")) ) "X fonts suitable for use in Emacs.") diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/paths.el emacs-19.10/lisp/paths.el *** emacs-19.9/lisp/paths.el Wed May 26 16:26:05 1993 --- emacs-19.10/lisp/paths.el Sat May 29 12:05:51 1993 *************** *** 33,41 **** (defvar Info-default-directory-list ! (list "/usr/local/info/" ! "/usr/local/lib/info/" ! configure-info-directory ! (expand-file-name "../info/" data-directory) ! (expand-file-name "../../info/" data-directory)) "List of directories to search for Info documentation files.") --- 33,46 ---- (defvar Info-default-directory-list ! (let ((start (list "/usr/local/info/" ! "/usr/local/lib/info/")) ! (configdir (file-name-as-directory configure-info-directory))) ! (or (member configdir start) ! (setq start (nconc start (list configdir)))) ! (or (member (expand-file-name "../info/" data-directory) start) ! (setq start ! (nconc start ! (list (expand-file-name "../info/" data-directory))))) ! start) "List of directories to search for Info documentation files.") *************** *** 64,74 **** (defvar gnus-local-domain nil ! "Your domain name without your host name like: \"stars.flab.Fujitsu.CO.JP\" ! The DOMAINNAME environment variable is used instead if defined. If ! the function `system-name' returns a fully qualified domain name, there is no ! need to define the name.") ! (defvar gnus-local-organization "" ! "Your organization like: \"Fujitsu Laboratories Ltd., Kawasaki, Japan.\" The `ORGANIZATION' environment variable is used instead if defined.") --- 69,79 ---- (defvar gnus-local-domain nil ! "*Your domain name without a host name: for example, \"ai.mit.edu\". ! The DOMAINNAME environment variable is used instead if defined. ! If the function `system-name' returns a fully qualified domain name, ! there is no need to set this variable.") ! (defvar gnus-local-organization nil ! "*The name of your organization, as a string. The `ORGANIZATION' environment variable is used instead if defined.") *************** *** 121,180 **** "/usr/ucb/man" "/usr/bin/man") "Program to run to print man pages.") - - ;; Note that /usr/man/cat is not really right for this on sysV; nothing is, - ;; judging by the list of directories below. You can't get the dir - ;; for a section by appending the section number to any one prefix. - ;; But it turns out that a string that's wrong does no harm here. - (defconst manual-formatted-dir-prefix - (if (file-exists-p "/usr/man/cat.C") ;; Check for Xenix. - "/usr/man/cat." "/usr/man/cat") - "Prefix for directories containing formatted manual pages. - Append a section-number or section-name to get a directory name.") - - (defconst manual-formatted-dirlist - (cond ((eq system-type 'hpux) - '("/usr/man/cat1" "/usr/man/cat2" "/usr/man/cat3" - "/usr/man/cat4" "/usr/man/cat5" "/usr/man/cat6" - "/usr/man/cat7" "/usr/man/cat1m" "/usr/man/cat8" - "/usr/local/man/cat1" "/usr/local/man/cat2" "/usr/local/man/cat3" - "/usr/local/man/cat4" "/usr/local/man/cat5" "/usr/local/man/cat6" - "/usr/local/man/cat7" "/usr/local/man/cat1m" "/usr/local/man/cat8" - "/usr/contrib/man/cat1" "/usr/contrib/man/cat2" - "/usr/contrib/man/cat3" "/usr/contrib/man/cat4" - "/usr/contrib/man/cat5" "/usr/contrib/man/cat6" - "/usr/contrib/man/cat7" "/usr/contrib/man/cat1m" - "/usr/contrib/man/cat8")) - ((file-exists-p "/usr/man/cat.C") ; Xenix - '("/usr/man/cat.C" "/usr/man/cat.CP" "/usr/man/cat.CT" - "/usr/man/cat.DOS/" "/usr/man/cat.F" "/usr/man/cat.HW" - "/usr/man/cat.M/" "/usr/man/cat.S" "/usr/man/cat.LOCAL")) - ((file-exists-p "/usr/man/cat3/cat3") - ;; This is for UMAX. - '("/usr/man/cat1" "/usr/man/cat2" - "/usr/man/cat3" "/usr/man/cat3/cat3" - "/usr/man/cat3/cat3b" "/usr/man/cat3/cat3c" - "/usr/man/cat3/cat3f" "/usr/man/cat3/cat3m" - "/usr/man/cat3/cat3n" "/usr/man/cat3/cat3p" - "/usr/man/cat3/cat3s" "/usr/man/cat3/cat3u" - "/usr/man/cat3/cat3x" "/usr/man/cat4" - "/usr/man/cat5" "/usr/man/cat6" - "/usr/man/cat7" "/usr/man/cat8" - "/usr/man/catl" "/usr/man/catn")) - ((file-exists-p "/usr/man/cat1") - '("/usr/man/cat1" "/usr/man/cat2" "/usr/man/cat3" - "/usr/man/cat4" "/usr/man/cat5" "/usr/man/cat6" - "/usr/man/cat7" "/usr/man/cat8" "/usr/man/catl" "/usr/man/catn")) - (t - '("/usr/catman/u_man/man1" "/usr/catman/u_man/man6" - "/usr/catman/p_man/man2" "/usr/catman/p_man/man3" - "/usr/catman/p_man/man4" "/usr/catman/p_man/man5" - "/usr/catman/a_man/man1" "/usr/catman/a_man/man7" - "/usr/catman/a_man/man8" "/usr/catman/local" - "/usr/catman/a_man/man8" "/usr/catman/local/man1" - "/usr/catman/local/man2" "/usr/catman/local/man3" - "/usr/catman/local/man4" "/usr/catman/local/man5" - "/usr/catman/local/man6" "/usr/catman/local/man7" - "/usr/catman/local/man8"))) - "List of directories containing formatted manual pages.") (defconst abbrev-file-name --- 126,129 ---- diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/rmailsum.el emacs-19.10/lisp/rmailsum.el *** emacs-19.9/lisp/rmailsum.el Tue May 25 17:20:02 1993 --- emacs-19.10/lisp/rmailsum.el Fri May 28 00:44:47 1993 *************** *** 130,140 **** (set-buffer rmail-buffer))) ;; Find its summary buffer, or make one. ! (or (and rmail-summary-buffer ! (buffer-name rmail-summary-buffer)) ! (setq rmail-summary-buffer ! (generate-new-buffer (concat (buffer-name) "-summary")))) ! (setq sumbuf rmail-summary-buffer) (setq mesg rmail-current-message) - (setq foo mesg) ;; Filter the messages; make or get their summary lines. (let ((summary-msgs ()) --- 130,139 ---- (set-buffer rmail-buffer))) ;; Find its summary buffer, or make one. ! (setq sumbuf ! (if (and rmail-summary-buffer ! (buffer-name rmail-summary-buffer)) ! rmail-summary-buffer ! (generate-new-buffer (concat (buffer-name) "-summary")))) (setq mesg rmail-current-message) ;; Filter the messages; make or get their summary lines. (let ((summary-msgs ()) *************** *** 154,175 **** (setq msgnum (1+ msgnum))) (setq summary-msgs (nreverse summary-msgs))))) ! (let ((rbuf (current-buffer)) ! (total rmail-total-messages)) ! (set-buffer sumbuf) ! ;; Set up the summary buffer's contents. ! (let ((buffer-read-only nil)) ! (erase-buffer) ! (while summary-msgs ! (princ (cdr (car summary-msgs)) sumbuf) ! (setq summary-msgs (cdr summary-msgs))) ! (goto-char (point-min))) ! ;; Set up the rest of its state and local variables. ! (setq buffer-read-only t) ! (rmail-summary-mode) ! (make-local-variable 'minor-mode-alist) ! (setq minor-mode-alist (list ": " description)) ! (setq rmail-buffer rbuf ! rmail-summary-redo redo-form ! rmail-total-messages total)))) ;; Now display the summary buffer and go to the right place in it. (or was-in-summary --- 153,179 ---- (setq msgnum (1+ msgnum))) (setq summary-msgs (nreverse summary-msgs))))) ! ;; Temporarily, while summary buffer is unfinished, ! ;; we "don't have" a summary. ! (setq rmail-summary-buffer nil) ! (save-excursion ! (let ((rbuf (current-buffer)) ! (total rmail-total-messages)) ! (set-buffer sumbuf) ! ;; Set up the summary buffer's contents. ! (let ((buffer-read-only nil)) ! (erase-buffer) ! (while summary-msgs ! (princ (cdr (car summary-msgs)) sumbuf) ! (setq summary-msgs (cdr summary-msgs))) ! (goto-char (point-min))) ! ;; Set up the rest of its state and local variables. ! (setq buffer-read-only t) ! (rmail-summary-mode) ! (make-local-variable 'minor-mode-alist) ! (setq minor-mode-alist (list ": " description)) ! (setq rmail-buffer rbuf ! rmail-summary-redo redo-form ! rmail-total-messages total)))) ! (setq rmail-summary-buffer sumbuf)) ;; Now display the summary buffer and go to the right place in it. (or was-in-summary diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/sendmail.el emacs-19.10/lisp/sendmail.el *** emacs-19.9/lisp/sendmail.el Thu May 20 02:16:21 1993 --- emacs-19.10/lisp/sendmail.el Sat May 29 00:35:00 1993 *************** *** 46,50 **** ;; Useful to set in site-init.el ;;;###autoload ! (defconst send-mail-function 'sendmail-send-it "\ Function to call to send the current buffer as mail. The headers are be delimited by a line which is `mail-header-separator'.") --- 46,50 ---- ;; Useful to set in site-init.el ;;;###autoload ! (defvar send-mail-function 'sendmail-send-it "\ Function to call to send the current buffer as mail. The headers are be delimited by a line which is `mail-header-separator'.") diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/startup.el emacs-19.10/lisp/startup.el *** emacs-19.9/lisp/startup.el Tue May 25 06:20:30 1993 --- emacs-19.10/lisp/startup.el Sat May 29 18:28:10 1993 *************** *** 404,408 **** (if (> file-count 2) (or (get-buffer-window first-file-buffer) ! (progn (other-window) (buffer-menu))))))) --- 404,408 ---- (if (> file-count 2) (or (get-buffer-window first-file-buffer) ! (progn (other-window 1) (buffer-menu))))))) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/subr.el emacs-19.10/lisp/subr.el *** emacs-19.9/lisp/subr.el Wed May 26 20:05:17 1993 --- emacs-19.10/lisp/subr.el Fri May 28 12:40:08 1993 *************** *** 369,373 **** ;; Some programs still use this as a function. (defun baud-rate () ! "Obsolete function returning the value of the `baud-rate' variable." baud-rate) --- 369,374 ---- ;; Some programs still use this as a function. (defun baud-rate () ! "Obsolete function returning the value of the `baud-rate' variable. ! Please convert your programs to use the variable `baud-rate' directly." baud-rate) Only in emacs-19.9/lisp: superyank.el diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/ChangeLog emacs-19.10/lisp/term/ChangeLog *** emacs-19.9/lisp/term/ChangeLog Thu May 27 02:40:36 1993 --- emacs-19.10/lisp/term/ChangeLog Sun May 30 00:21:33 1993 *************** *** 1,2 **** --- 1,20 ---- + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.10 released. + + Sat May 29 00:40:17 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * bobcat.el: Just load keyswap.el. + + * vt200.el: Just load vt100.el. + * apollo.el: Just load vt100.el. + * vt102.el, vt125.el, vt201.el, vt220.el, vt240.el, vt300.el, + * vt320.el, vt400.el, vt420.el: New files. Just load vt100.el. + + * lk201.el: New file. + * vt100.el: Use lk201.el. + + * vt100.el (vt100-wide-mode): Add missing arg in set-frame-width. + Thu May 27 02:35:32 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/apollo.el emacs-19.10/lisp/term/apollo.el *** emacs-19.9/lisp/term/apollo.el Thu May 27 02:48:56 1993 --- emacs-19.10/lisp/term/apollo.el Sat May 29 23:45:15 1993 *************** *** 1,97 **** ! ;;; vt100.el --- define VT100 function key sequences in function-key-map ! ! ;; Author: FSF ! ;; Keywords: terminals ! ! ;; Copyright (C) 1989 Free Software Foundation, Inc. ! ! ;; This file is part of GNU Emacs. ! ! ;; GNU Emacs is distributed in the hope that it will be useful, ! ;; but WITHOUT ANY WARRANTY. No author or distributor ! ;; accepts responsibility to anyone for the consequences of using it ! ;; or for whether it serves any particular purpose or works at all, ! ;; unless he says so in writing. Refer to the GNU Emacs General Public ! ;; License for full details. ! ! ;; Everyone is granted permission to copy, modify and redistribute ! ;; GNU Emacs, but only under the conditions described in the ! ;; GNU Emacs General Public License. A copy of this license is ! ;; supposed to have been given to you along with GNU Emacs so you ! ;; can know your rights and responsibilities. It should be in a ! ;; file named COPYING. Among other things, the copyright notice ! ;; and this notice must be preserved on all copies. ! ! ;;; Commentary: ! ! ;; Uses the Emacs 19 terminal initialization features --- won't work with 18. ! ! ;; Handles all VT100 clones, including the Apollo terminal. Also handles ! ;; the VT200 --- its PF- and arrow- keys are different, but all those ! ;; are really set up by the terminal initialization code, which mines them ! ;; out of termcap. This package is here to define the keypad comma, dash ! ;; and period (which aren't in termcap's repertoire) and the function for ! ;; changing from 80 to 132 columns & vv. ! ! ;;; Code: ! ! ;; CSI sequences - those that start with "\e[". ! ;; Termcap or terminfo should set these up automatically ! ;; (if (boundp 'vt100-CSI-prefix) ! ;; nil ! ;; (define-prefix-command 'vt100-CSI-prefix) ! ;; (define-key function-key-map "\e[" 'vt100-CSI-prefix) ! ;; ! ;; (define-key vt100-CSI-prefix "A" [up]) ! ;; (define-key vt100-CSI-prefix "B" [down]) ! ;; (define-key vt100-CSI-prefix "C" [right]) ! ;; (define-key vt100-CSI-prefix "D" [left]) ! ;; ) ! ! ;; SS3 sequences - those that start with "\eO". ! (if (boundp 'vt100-SS3-prefix) ! nil ! (define-prefix-command 'vt100-SS3-prefix) ! (define-key function-key-map "\eO" 'vt100-SS3-prefix) ! ! ;; These will typically be set up automatically by termcap or terminfo ! ;; (define-key vt100-SS3-prefix "A" [up]) ; up-arrow ! ;; (define-key vt100-SS3-prefix "B" [down]) ; down-arrow ! ;; (define-key vt100-SS3-prefix "C" [right]) ; right-arrow ! ;; (define-key vt100-SS3-prefix "D" [left]) ; left-arrow ! ;; (define-key vt100-SS3-prefix "M" [kp-enter]) ; Enter ! ;; (define-key vt100-SS3-prefix "P" [kp-f1]) ; PF1 ! ;; (define-key vt100-SS3-prefix "Q" [kp-f2]) ; PF2 ! ;; (define-key vt100-SS3-prefix "R" [kp-f3]) ; PF3 ! ;; (define-key vt100-SS3-prefix "S" [kp-f4]) ; PF4 ! ;; (define-key vt100-SS3-prefix "p" [kp-0]) ; 0 ! ;; (define-key vt100-SS3-prefix "q" [kp-1]) ; 1 ! ;; (define-key vt100-SS3-prefix "r" [kp-2]) ; 2 ! ;; (define-key vt100-SS3-prefix "s" [kp-3]) ; 3 ! ;; (define-key vt100-SS3-prefix "t" [kp-4]) ; 4 ! ;; (define-key vt100-SS3-prefix "u" [kp-5]) ; 5 ! ;; (define-key vt100-SS3-prefix "v" [kp-6]) ; 6 ! ;; (define-key vt100-SS3-prefix "w" [kp-7]) ; 7 ! ;; (define-key vt100-SS3-prefix "x" [kp-8]) ; 8 ! ;; (define-key vt100-SS3-prefix "y" [kp-9]) ; 9 ! ! ;; Neither termcap nor terminfo will set these ! (define-key vt100-SS3-prefix "l" [kp-separator]) ; , ! (define-key vt100-SS3-prefix "m" [kp-subtract]) ; - ! (define-key vt100-SS3-prefix "n" [kp-period]) ; . ! ) ! ! ;;; Controlling the screen width. ! (defconst vt100-wide-mode (= (frame-width) 132) ! "t if vt100 is in 132-column mode.") ! ! (defun vt100-wide-mode (&optional arg) ! "Toggle 132/80 column mode for vt100s." ! (interactive "P") ! (setq vt100-wide-mode ! (if (null arg) (not vt100-wide-mode) ! (> (prefix-numeric-value arg) 0))) ! (send-string-to-terminal (if vt100-wide-mode "\e[?3h" "\e[?3l")) ! (set-frame-width (if vt100-wide-mode 132 80))) ! ! ;;; vt100.el ends here --- 1 ---- ! (load "term/vt100" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/bobcat.el emacs-19.10/lisp/term/bobcat.el *** emacs-19.9/lisp/term/bobcat.el Thu May 27 02:48:56 1993 --- emacs-19.10/lisp/term/bobcat.el Sat May 29 23:43:54 1993 *************** *** 1,40 **** ! ;; keyswap.el --- swap BS and DEL keys ! ! ;; Author: Eric S. Raymond ! ;; Keywords: terminals ! ! ;; Copyright (C) 1992 Free Software Foundation, Inc. ! ! ;; This file is part of GNU Emacs. ! ! ;; 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. ! ! ;;; Commentary: ! ! ;;; This package is meant to be called by other terminal packages. ! ! ;;; Code: ! ! (let ((the-table (make-string 128 0))) ! (let ((i 0)) ! (while (< i 128) ! (aset the-table i i) ! (setq i (1+ i)))) ! ;; Swap ^H and DEL ! (aset the-table ?\177 ?\^h) ! (aset the-table ?\^h ?\177) ! (setq keyboard-translate-table the-table)) ! ! ;;; keyswap.el ends here --- 1,2 ---- ! ;;; HP terminals usually encourage using ^H as the rubout character ! (load "term/keyswap" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/lk201.el emacs-19.10/lisp/term/lk201.el *** emacs-19.9/lisp/term/lk201.el --- emacs-19.10/lisp/term/lk201.el Sat May 29 23:34:09 1993 *************** *** 0 **** --- 1,55 ---- + ;; Define function key sequences for DEC terminals. + + ;; Termcap or terminfo should set these. + ;; (define-key function-key-map "\e[A" [up]) + ;; (define-key function-key-map "\e[B" [down]) + ;; (define-key function-key-map "\e[C" [right]) + ;; (define-key function-key-map "\e[D" [left]) + + (define-key function-key-map "\e[1~" [find]) + (define-key function-key-map "\e[2~" [insertchar]) + (define-key function-key-map "\e[3~" [deletechar]) + (define-key function-key-map "\e[4~" [select]) + (define-key function-key-map "\e[5~" [prior]) + (define-key function-key-map "\e[6~" [next]) + (define-key function-key-map "\e[17~" [f6]) + (define-key function-key-map "\e[18~" [f7]) + (define-key function-key-map "\e[19~" [f8]) + (define-key function-key-map "\e[20~" [f9]) + (define-key function-key-map "\e[21~" [f10]) + ;; Customarily F11 is used as the ESC key. + (define-key function-key-map "\e[23~" [?\e]) + (define-key function-key-map "\e[24~" [f12]) + (define-key function-key-map "\e[25~" [f13]) + (define-key function-key-map "\e[26~" [f14]) + (define-key function-key-map "\e[28~" [help]) + (define-key function-key-map "\e[29~" [menu]) + (define-key function-key-map "\e[31~" [f17]) + (define-key function-key-map "\e[32~" [f18]) + (define-key function-key-map "\e[33~" [f19]) + (define-key function-key-map "\e[34~" [f20]) + + ;; Termcap or terminfo should set these. + ;; (define-key function-key-map "\eOA" [up]) + ;; (define-key function-key-map "\eOB" [down]) + ;; (define-key function-key-map "\eOC" [right]) + ;; (define-key function-key-map "\eOD" [left]) + ;; (define-key function-key-map "\eOP" [kp-f1]) + ;; (define-key function-key-map "\eOQ" [kp-f2]) + ;; (define-key function-key-map "\eOR" [kp-f3]) + ;; (define-key function-key-map "\eOS" [kp-f4]) + + (define-key function-key-map "\eOM" [kp-enter]) + (define-key function-key-map "\eOl" [kp-separator]) + (define-key function-key-map "\eOm" [kp-subtract]) + (define-key function-key-map "\eOn" [kp-period]) + (define-key function-key-map "\eOp" [kp-0]) + (define-key function-key-map "\eOq" [kp-1]) + (define-key function-key-map "\eOr" [kp-2]) + (define-key function-key-map "\eOs" [kp-3]) + (define-key function-key-map "\eOt" [kp-4]) + (define-key function-key-map "\eOu" [kp-5]) + (define-key function-key-map "\eOv" [kp-6]) + (define-key function-key-map "\eOw" [kp-7]) + (define-key function-key-map "\eOx" [kp-8]) + (define-key function-key-map "\eOy" [kp-9]) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/news.el emacs-19.10/lisp/term/news.el *** emacs-19.9/lisp/term/news.el Wed Mar 17 22:31:40 1993 --- emacs-19.10/lisp/term/news.el Sat May 29 23:42:51 1993 *************** *** 4,25 **** ;; Keywords: terminals ! ;; Copyright (C) 1989 Free Software Foundation, Inc. ! ;; This file is part of GNU Emacs. ! ! ;; GNU Emacs is distributed in the hope that it will be useful, ! ;; but WITHOUT ANY WARRANTY. No author or distributor ! ;; accepts responsibility to anyone for the consequences of using it ! ;; or for whether it serves any particular purpose or works at all, ! ;; unless he says so in writing. Refer to the GNU Emacs General Public ! ;; License for full details. ! ! ;; Everyone is granted permission to copy, modify and redistribute ! ;; GNU Emacs, but only under the conditions described in the ! ;; GNU Emacs General Public License. A copy of this license is ! ;; supposed to have been given to you along with GNU Emacs so you ! ;; can know your rights and responsibilities. It should be in a ! ;; file named COPYING. Among other things, the copyright notice ! ;; and this notice must be preserved on all copies. ;;; Commentary: --- 4,24 ---- ;; Keywords: terminals ! ;; Copyright (C) 1989, 1993 Free Software Foundation, Inc. ! ;;; This file is part of GNU Emacs. ! ;;; ! ;;; 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. ;;; Commentary: diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/sun.el emacs-19.10/lisp/term/sun.el *** emacs-19.9/lisp/term/sun.el Thu Mar 11 03:45:17 1993 --- emacs-19.10/lisp/term/sun.el Sat May 29 23:42:05 1993 *************** *** 6,25 **** ;; Copyright (C) 1987 Free Software Foundation, Inc. ! ;; This file is part of GNU Emacs. ! ! ;; GNU Emacs is distributed in the hope that it will be useful, ! ;; but WITHOUT ANY WARRANTY. No author or distributor ! ;; accepts responsibility to anyone for the consequences of using it ! ;; or for whether it serves any particular purpose or works at all, ! ;; unless he says so in writing. Refer to the GNU Emacs General Public ! ;; License for full details. ! ! ;; Everyone is granted permission to copy, modify and redistribute ! ;; GNU Emacs, but only under the conditions described in the ! ;; GNU Emacs General Public License. A copy of this license is ! ;; supposed to have been given to you along with GNU Emacs so you ! ;; can know your rights and responsibilities. It should be in a ! ;; file named COPYING. Among other things, the copyright notice ! ;; and this notice must be preserved on all copies. ;;; Commentary: --- 6,24 ---- ;; Copyright (C) 1987 Free Software Foundation, Inc. ! ;;; This file is part of GNU Emacs. ! ;;; ! ;;; 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. ;;; Commentary: diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/vt100.el emacs-19.10/lisp/term/vt100.el *** emacs-19.9/lisp/term/vt100.el Wed Mar 17 22:31:46 1993 --- emacs-19.10/lisp/term/vt100.el Sat May 29 23:38:43 1993 *************** *** 4,26 **** ;; Keywords: terminals ! ;; Copyright (C) 1989 Free Software Foundation, Inc. - ;; This file is part of GNU Emacs. - - ;; GNU Emacs is distributed in the hope that it will be useful, - ;; but WITHOUT ANY WARRANTY. No author or distributor - ;; accepts responsibility to anyone for the consequences of using it - ;; or for whether it serves any particular purpose or works at all, - ;; unless he says so in writing. Refer to the GNU Emacs General Public - ;; License for full details. - - ;; Everyone is granted permission to copy, modify and redistribute - ;; GNU Emacs, but only under the conditions described in the - ;; GNU Emacs General Public License. A copy of this license is - ;; supposed to have been given to you along with GNU Emacs so you - ;; can know your rights and responsibilities. It should be in a - ;; file named COPYING. Among other things, the copyright notice - ;; and this notice must be preserved on all copies. - ;;; Commentary: --- 4,24 ---- ;; Keywords: terminals ! ;; Copyright (C) 1989, 1993 Free Software Foundation, Inc. ! ;;; This file is part of GNU Emacs. ! ;;; ! ;;; 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. ;;; Commentary: *************** *** 36,88 **** ;;; Code: ! ;; CSI sequences - those that start with "\e[". ! ;; Termcap or terminfo should set these up automatically ! ;; (if (boundp 'vt100-CSI-prefix) ! ;; nil ! ;; (define-prefix-command 'vt100-CSI-prefix) ! ;; (define-key function-key-map "\e[" 'vt100-CSI-prefix) ! ;; ! ;; (define-key vt100-CSI-prefix "A" [up]) ! ;; (define-key vt100-CSI-prefix "B" [down]) ! ;; (define-key vt100-CSI-prefix "C" [right]) ! ;; (define-key vt100-CSI-prefix "D" [left]) ! ;; ) ! ! ;; SS3 sequences - those that start with "\eO". ! (if (boundp 'vt100-SS3-prefix) ! nil ! ;; The terminal initialization should already have set up some keys ! (setq vt100-SS3-prefix (lookup-key function-key-map "\eO")) ! (if (not (keymapp vt100-SS3-prefix)) ! (error "What? Your VT100 termcap/terminfo has no keycaps in it.")) ! ! ;; These will typically be set up automatically by termcap or terminfo ! ;; (define-key vt100-SS3-prefix "A" [up]) ; up-arrow ! ;; (define-key vt100-SS3-prefix "B" [down]) ; down-arrow ! ;; (define-key vt100-SS3-prefix "C" [right]) ; right-arrow ! ;; (define-key vt100-SS3-prefix "D" [left]) ; left-arrow ! ;; (define-key vt100-SS3-prefix "P" [kp-f1]) ; PF1 ! ;; (define-key vt100-SS3-prefix "Q" [kp-f2]) ; PF2 ! ;; (define-key vt100-SS3-prefix "R" [kp-f3]) ; PF3 ! ;; (define-key vt100-SS3-prefix "S" [kp-f4]) ; PF4 ! ! ;; Terminfo might set these ! (define-key vt100-SS3-prefix "M" [kp-enter]) ; Enter ! (define-key vt100-SS3-prefix "p" [kp-0]) ; 0 ! (define-key vt100-SS3-prefix "q" [kp-1]) ; 1 ! (define-key vt100-SS3-prefix "r" [kp-2]) ; 2 ! (define-key vt100-SS3-prefix "s" [kp-3]) ; 3 ! (define-key vt100-SS3-prefix "t" [kp-4]) ; 4 ! (define-key vt100-SS3-prefix "u" [kp-5]) ; 5 ! (define-key vt100-SS3-prefix "v" [kp-6]) ; 6 ! (define-key vt100-SS3-prefix "w" [kp-7]) ; 7 ! (define-key vt100-SS3-prefix "x" [kp-8]) ; 8 ! (define-key vt100-SS3-prefix "y" [kp-9]) ; 9 ! ! ;; Neither termcap nor terminfo will set these ! (define-key vt100-SS3-prefix "l" [kp-separator]) ; , ! (define-key vt100-SS3-prefix "m" [kp-subtract]) ; - ! (define-key vt100-SS3-prefix "n" [kp-period]) ; . ! ) ;;; Controlling the screen width. --- 34,39 ---- ;;; Code: ! ;; Set up function-key-map entries that termcap and terminfo don't know. ! (load "term/lk201" nil t) ;;; Controlling the screen width. *************** *** 91,95 **** (defun vt100-wide-mode (&optional arg) ! "Toggle 132/80 column mode for vt100s." (interactive "P") (setq vt100-wide-mode --- 42,48 ---- (defun vt100-wide-mode (&optional arg) ! "Toggle 132/80 column mode for vt100s. ! With positive argument, switch to 132-column mode. ! With negative argument, switch to 80-column mode." (interactive "P") (setq vt100-wide-mode *************** *** 97,101 **** (> (prefix-numeric-value arg) 0))) (send-string-to-terminal (if vt100-wide-mode "\e[?3h" "\e[?3l")) ! (set-frame-width (if vt100-wide-mode 132 80))) ;;; vt100.el ends here --- 50,54 ---- (> (prefix-numeric-value arg) 0))) (send-string-to-terminal (if vt100-wide-mode "\e[?3h" "\e[?3l")) ! (set-frame-width terminal-frame (if vt100-wide-mode 132 80))) ;;; vt100.el ends here diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/vt102.el emacs-19.10/lisp/term/vt102.el *** emacs-19.9/lisp/term/vt102.el --- emacs-19.10/lisp/term/vt102.el Sat May 29 23:46:43 1993 *************** *** 0 **** --- 1 ---- + (load "term/vt100" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/vt125.el emacs-19.10/lisp/term/vt125.el *** emacs-19.9/lisp/term/vt125.el --- emacs-19.10/lisp/term/vt125.el Sat May 29 23:46:48 1993 *************** *** 0 **** --- 1 ---- + (load "term/vt100" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/vt200.el emacs-19.10/lisp/term/vt200.el *** emacs-19.9/lisp/term/vt200.el Thu May 27 02:48:58 1993 --- emacs-19.10/lisp/term/vt200.el Sat May 29 23:36:52 1993 *************** *** 1,97 **** ! ;;; vt100.el --- define VT100 function key sequences in function-key-map ! ! ;; Author: FSF ! ;; Keywords: terminals ! ! ;; Copyright (C) 1989 Free Software Foundation, Inc. ! ! ;; This file is part of GNU Emacs. ! ! ;; GNU Emacs is distributed in the hope that it will be useful, ! ;; but WITHOUT ANY WARRANTY. No author or distributor ! ;; accepts responsibility to anyone for the consequences of using it ! ;; or for whether it serves any particular purpose or works at all, ! ;; unless he says so in writing. Refer to the GNU Emacs General Public ! ;; License for full details. ! ! ;; Everyone is granted permission to copy, modify and redistribute ! ;; GNU Emacs, but only under the conditions described in the ! ;; GNU Emacs General Public License. A copy of this license is ! ;; supposed to have been given to you along with GNU Emacs so you ! ;; can know your rights and responsibilities. It should be in a ! ;; file named COPYING. Among other things, the copyright notice ! ;; and this notice must be preserved on all copies. ! ! ;;; Commentary: ! ! ;; Uses the Emacs 19 terminal initialization features --- won't work with 18. ! ! ;; Handles all VT100 clones, including the Apollo terminal. Also handles ! ;; the VT200 --- its PF- and arrow- keys are different, but all those ! ;; are really set up by the terminal initialization code, which mines them ! ;; out of termcap. This package is here to define the keypad comma, dash ! ;; and period (which aren't in termcap's repertoire) and the function for ! ;; changing from 80 to 132 columns & vv. ! ! ;;; Code: ! ! ;; CSI sequences - those that start with "\e[". ! ;; Termcap or terminfo should set these up automatically ! ;; (if (boundp 'vt100-CSI-prefix) ! ;; nil ! ;; (define-prefix-command 'vt100-CSI-prefix) ! ;; (define-key function-key-map "\e[" 'vt100-CSI-prefix) ! ;; ! ;; (define-key vt100-CSI-prefix "A" [up]) ! ;; (define-key vt100-CSI-prefix "B" [down]) ! ;; (define-key vt100-CSI-prefix "C" [right]) ! ;; (define-key vt100-CSI-prefix "D" [left]) ! ;; ) ! ! ;; SS3 sequences - those that start with "\eO". ! (if (boundp 'vt100-SS3-prefix) ! nil ! (define-prefix-command 'vt100-SS3-prefix) ! (define-key function-key-map "\eO" 'vt100-SS3-prefix) ! ! ;; These will typically be set up automatically by termcap or terminfo ! ;; (define-key vt100-SS3-prefix "A" [up]) ; up-arrow ! ;; (define-key vt100-SS3-prefix "B" [down]) ; down-arrow ! ;; (define-key vt100-SS3-prefix "C" [right]) ; right-arrow ! ;; (define-key vt100-SS3-prefix "D" [left]) ; left-arrow ! ;; (define-key vt100-SS3-prefix "M" [kp-enter]) ; Enter ! ;; (define-key vt100-SS3-prefix "P" [kp-f1]) ; PF1 ! ;; (define-key vt100-SS3-prefix "Q" [kp-f2]) ; PF2 ! ;; (define-key vt100-SS3-prefix "R" [kp-f3]) ; PF3 ! ;; (define-key vt100-SS3-prefix "S" [kp-f4]) ; PF4 ! ;; (define-key vt100-SS3-prefix "p" [kp-0]) ; 0 ! ;; (define-key vt100-SS3-prefix "q" [kp-1]) ; 1 ! ;; (define-key vt100-SS3-prefix "r" [kp-2]) ; 2 ! ;; (define-key vt100-SS3-prefix "s" [kp-3]) ; 3 ! ;; (define-key vt100-SS3-prefix "t" [kp-4]) ; 4 ! ;; (define-key vt100-SS3-prefix "u" [kp-5]) ; 5 ! ;; (define-key vt100-SS3-prefix "v" [kp-6]) ; 6 ! ;; (define-key vt100-SS3-prefix "w" [kp-7]) ; 7 ! ;; (define-key vt100-SS3-prefix "x" [kp-8]) ; 8 ! ;; (define-key vt100-SS3-prefix "y" [kp-9]) ; 9 ! ! ;; Neither termcap nor terminfo will set these ! (define-key vt100-SS3-prefix "l" [kp-separator]) ; , ! (define-key vt100-SS3-prefix "m" [kp-subtract]) ; - ! (define-key vt100-SS3-prefix "n" [kp-period]) ; . ! ) ! ! ;;; Controlling the screen width. ! (defconst vt100-wide-mode (= (frame-width) 132) ! "t if vt100 is in 132-column mode.") ! ! (defun vt100-wide-mode (&optional arg) ! "Toggle 132/80 column mode for vt100s." ! (interactive "P") ! (setq vt100-wide-mode ! (if (null arg) (not vt100-wide-mode) ! (> (prefix-numeric-value arg) 0))) ! (send-string-to-terminal (if vt100-wide-mode "\e[?3h" "\e[?3l")) ! (set-frame-width (if vt100-wide-mode 132 80))) ! ! ;;; vt100.el ends here --- 1,3 ---- ! ;; For our purposes we can treat the vt200 and vt100 alike. ! ;; The differences are handled by the termcap entry. ! (load "term/vt100" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/vt201.el emacs-19.10/lisp/term/vt201.el *** emacs-19.9/lisp/term/vt201.el --- emacs-19.10/lisp/term/vt201.el Sat May 29 23:46:56 1993 *************** *** 0 **** --- 1 ---- + (load "term/vt100" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/vt220.el emacs-19.10/lisp/term/vt220.el *** emacs-19.9/lisp/term/vt220.el --- emacs-19.10/lisp/term/vt220.el Sat May 29 23:47:01 1993 *************** *** 0 **** --- 1 ---- + (load "term/vt100" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/vt240.el emacs-19.10/lisp/term/vt240.el *** emacs-19.9/lisp/term/vt240.el --- emacs-19.10/lisp/term/vt240.el Sat May 29 23:47:06 1993 *************** *** 0 **** --- 1 ---- + (load "term/vt100" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/vt300.el emacs-19.10/lisp/term/vt300.el *** emacs-19.9/lisp/term/vt300.el --- emacs-19.10/lisp/term/vt300.el Sat May 29 23:47:12 1993 *************** *** 0 **** --- 1 ---- + (load "term/vt100" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/vt320.el emacs-19.10/lisp/term/vt320.el *** emacs-19.9/lisp/term/vt320.el --- emacs-19.10/lisp/term/vt320.el Sat May 29 23:47:16 1993 *************** *** 0 **** --- 1 ---- + (load "term/vt100" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/vt400.el emacs-19.10/lisp/term/vt400.el *** emacs-19.9/lisp/term/vt400.el --- emacs-19.10/lisp/term/vt400.el Sat May 29 23:47:21 1993 *************** *** 0 **** --- 1 ---- + (load "term/vt100" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/vt420.el emacs-19.10/lisp/term/vt420.el *** emacs-19.9/lisp/term/vt420.el --- emacs-19.10/lisp/term/vt420.el Sat May 29 23:47:25 1993 *************** *** 0 **** --- 1 ---- + (load "term/vt100" nil t) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/wyse50.el emacs-19.10/lisp/term/wyse50.el *** emacs-19.9/lisp/term/wyse50.el Wed Mar 17 22:31:49 1993 --- emacs-19.10/lisp/term/wyse50.el Sat May 29 23:40:47 1993 *************** *** 1,4 **** --- 1,6 ---- ;;; wyse50.el --- terminal support code for Wyse 50 + ;; Copyright (C) 1989, 1993 Free Software Foundation, Inc. + ;; Author: Daniel Pfieffer January 1991 ;; Jim Blandy *************** *** 5,26 **** ;; Keywords: terminals ! ;; Copyright (C) 1989 Free Software Foundation, Inc. ! ! ;; This file is part of GNU Emacs. ! ! ;; GNU Emacs is distributed in the hope that it will be useful, ! ;; but WITHOUT ANY WARRANTY. No author or distributor ! ;; accepts responsibility to anyone for the consequences of using it ! ;; or for whether it serves any particular purpose or works at all, ! ;; unless he says so in writing. Refer to the GNU Emacs General Public ! ;; License for full details. ! ! ;; Everyone is granted permission to copy, modify and redistribute ! ;; GNU Emacs, but only under the conditions described in the ! ;; GNU Emacs General Public License. A copy of this license is ! ;; supposed to have been given to you along with GNU Emacs so you ! ;; can know your rights and responsibilities. It should be in a ! ;; file named COPYING. Among other things, the copyright notice ! ;; and this notice must be preserved on all copies. ;;; Commentary: --- 7,25 ---- ;; Keywords: terminals ! ;;; This file is part of GNU Emacs. ! ;;; ! ;;; 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. ;;; Commentary: diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/term/x-win.el emacs-19.10/lisp/term/x-win.el *** emacs-19.9/lisp/term/x-win.el Thu May 27 00:08:00 1993 --- emacs-19.10/lisp/term/x-win.el Sat May 29 23:39:49 1993 *************** *** 1,3 **** --- 1,4 ---- ;;; x-win.el --- parse switches controlling interface with X window system + ;; Copyright (C) 1993 Free Software Foundation, Inc. ;; Author: FSF *************** *** 4,25 **** ;; Keywords: terminals ! ;; Copyright (C) 1993 Free Software Foundation, Inc. ! ! ;; This file is part of GNU Emacs. ! ! ;; GNU Emacs is distributed in the hope that it will be useful, ! ;; but WITHOUT ANY WARRANTY. No author or distributor ! ;; accepts responsibility to anyone for the consequences of using it ! ;; or for whether it serves any particular purpose or works at all, ! ;; unless he says so in writing. Refer to the GNU Emacs General Public ! ;; License for full details. ! ! ;; Everyone is granted permission to copy, modify and redistribute ! ;; GNU Emacs, but only under the conditions described in the ! ;; GNU Emacs General Public License. A copy of this license is ! ;; supposed to have been given to you along with GNU Emacs so you ! ;; can know your rights and responsibilities. It should be in a ! ;; file named COPYING. Among other things, the copyright notice ! ;; and this notice must be preserved on all copies. ;;; Commentary: --- 5,23 ---- ;; Keywords: terminals ! ;;; This file is part of GNU Emacs. ! ;;; ! ;;; 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. ;;; Commentary: diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/timer.el emacs-19.10/lisp/timer.el *** emacs-19.9/lisp/timer.el Wed Mar 31 20:07:31 1993 --- emacs-19.10/lisp/timer.el Sat May 29 16:43:14 1993 *************** *** 129,135 **** (setq timer-process nil timer-alist nil)))) ! (defun cancel-timer (function) "Cancel all events scheduled by `run-at-time' which would run FUNCTION." ! (interactive "aCancel function: ") (let ((alist timer-alist)) (while alist --- 129,135 ---- (setq timer-process nil timer-alist nil)))) ! (defun cancel-function-timers (function) "Cancel all events scheduled by `run-at-time' which would run FUNCTION." ! (interactive "aCancel timers of function: ") (let ((alist timer-alist)) (while alist diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/vc.el emacs-19.10/lisp/vc.el *** emacs-19.9/lisp/vc.el Sat May 22 18:31:43 1993 --- emacs-19.10/lisp/vc.el Fri May 28 23:45:13 1993 *************** *** 100,104 **** (defvar vc-header-alist '((SCCS "\%W\%") (RCS "\$Id\$")) ! "*Header keywords to be inserted when `vc-insert-header' is executed.") (defconst vc-static-header-alist '(("\\.c$" . --- 100,104 ---- (defvar vc-header-alist '((SCCS "\%W\%") (RCS "\$Id\$")) ! "*Header keywords to be inserted when `vc-insert-headers' is executed.") (defconst vc-static-header-alist '(("\\.c$" . *************** *** 554,558 **** (if (not owner) (setq owner (vc-locking-user file))) ! (if (not (y-or-n-p (format "Take the lock on %s:%s from %s?" file rev owner))) (error "Steal cancelled.")) (pop-to-buffer (get-buffer-create "*VC-mail*")) --- 554,558 ---- (if (not owner) (setq owner (vc-locking-user file))) ! (if (not (y-or-n-p (format "Take the lock on %s:%s from %s? " file rev owner))) (error "Steal cancelled.")) (pop-to-buffer (get-buffer-create "*VC-mail*")) *************** *** 623,628 **** ;; Return to "parent" buffer of this checkin and remove checkin window (pop-to-buffer vc-parent-buffer) ! (vc-error-occurred ! (delete-window (get-buffer-window "*VC-log*"))) (kill-buffer "*VC-log*") ;; Now make sure we see the expanded headers --- 623,627 ---- ;; Return to "parent" buffer of this checkin and remove checkin window (pop-to-buffer vc-parent-buffer) ! (delete-windows-on (get-buffer "*VC-log*")) (kill-buffer "*VC-log*") ;; Now make sure we see the expanded headers *************** *** 791,795 **** (widen) (if (or (not (vc-check-headers)) ! (y-or-n-p "Version headers already exist. Insert another set?")) (progn (let* ((delims (cdr (assq major-mode vc-comment-alist))) --- 790,794 ---- (widen) (if (or (not (vc-check-headers)) ! (y-or-n-p "Version headers already exist. Insert another set? ")) (progn (let* ((delims (cdr (assq major-mode vc-comment-alist))) diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/version.el emacs-19.10/lisp/version.el *** emacs-19.9/lisp/version.el Thu May 27 02:34:46 1993 --- emacs-19.10/lisp/version.el Sun May 30 01:25:16 1993 *************** *** 26,30 **** ;; The following line is modified automatically ;; by loading inc-version.el, each time a new Emacs is dumped. ! (defconst emacs-version "19.9.0" "\ Version numbers of this version of Emacs.") --- 26,30 ---- ;; The following line is modified automatically ;; by loading inc-version.el, each time a new Emacs is dumped. ! (defconst emacs-version "19.10.0" "\ Version numbers of this version of Emacs.") diff -rc2P --exclude-from=exceptions emacs-19.9/lisp/window.el emacs-19.10/lisp/window.el *** emacs-19.9/lisp/window.el Tue Apr 13 23:34:39 1993 --- emacs-19.10/lisp/window.el Sat May 29 12:13:12 1993 *************** *** 91,95 **** (progn (set-window-point new-w old-point) ! (select-window new-w))))))) (defun split-window-horizontally (&optional arg) --- 91,96 ---- (progn (set-window-point new-w old-point) ! (select-window new-w))))) ! new-w)) (defun split-window-horizontally (&optional arg) Only in emacs-19.9: local-lisp diff -rc2P --exclude-from=exceptions emacs-19.9/make-dist emacs-19.10/make-dist *** emacs-19.9/make-dist Wed May 26 21:12:03 1993 --- emacs-19.10/make-dist Sat May 29 15:38:22 1993 *************** *** 98,101 **** --- 98,108 ---- rm -f /tmp/el /tmp/elc + ### Make sure configure is newer than configure.in. + if [ "x`ls -t configure configure.in | head -1`" != "xconfigure" ]; then + echo "`./configure.in' seems to be newer than `./configure.'" >&2 + echo "Attempting to run autoconf." >&2 + autoconf + fi + echo "Creating staging directory: \`${tempparent}'" mkdir ${tempparent} *************** *** 135,139 **** # I think we're not going to distribute anything in external-lisp, so # I've removed it from this list. ! for subdir in lisp lisp/term local-lisp \ src src/m src/s src/bitmaps lib-src oldXMenu \ etc lock cpp info man shortnames vms; do --- 142,146 ---- # I think we're not going to distribute anything in external-lisp, so # I've removed it from this list. ! for subdir in lisp lisp/term site-lisp \ src src/m src/s src/bitmaps lib-src oldXMenu \ etc lock cpp info man shortnames vms; do diff -rc2P --exclude-from=exceptions emacs-19.9/man/custom.texi emacs-19.10/man/custom.texi *** emacs-19.9/man/custom.texi Fri May 21 13:30:13 1993 --- emacs-19.10/man/custom.texi Fri May 28 16:55:29 1993 *************** *** 879,883 **** @vindex minibuffer-local-completion-map @vindex minibuffer-local-must-match-map - @vindex repeat-complex-command-map The minibuffer has its own set of local keymaps; they contain various completion and exit commands. --- 879,882 ---- diff -rc2P --exclude-from=exceptions emacs-19.9/man/dired.texi emacs-19.10/man/dired.texi *** emacs-19.9/man/dired.texi Wed May 19 16:06:00 1993 --- emacs-19.10/man/dired.texi Thu May 27 20:30:44 1993 *************** *** 43,48 **** The variable @code{dired-listing-switches} specifies the options to give to @code{ls} for listing directory; this string @emph{must} contain ! @samp{-l} and @emph{must not} contain the options @samp{F}, @samp{s} or ! @samp{i}. If you use a numeric prefix argument with the @code{dired} command, you can specify the @code{ls} switches with the minibuffer after you finish entering the directory specification. --- 43,47 ---- The variable @code{dired-listing-switches} specifies the options to give to @code{ls} for listing directory; this string @emph{must} contain ! @samp{-l}. If you use a numeric prefix argument with the @code{dired} command, you can specify the @code{ls} switches with the minibuffer after you finish entering the directory specification. diff -rc2P --exclude-from=exceptions emacs-19.9/man/display.texi emacs-19.10/man/display.texi *** emacs-19.9/man/display.texi Mon May 24 21:06:15 1993 --- emacs-19.10/man/display.texi Sat May 29 02:47:00 1993 *************** *** 40,43 **** --- 40,44 ---- * Selective Display:: Hiding lines with lots of indentation. * Optional Display:: Optional display features. + * European Display:: Displaying (and inputting) European characters. * Display Vars:: Information on variables for customizing display. @end menu *************** *** 204,215 **** To make everything visible again, type @kbd{C-x $} with no argument. ! @node Optional Display ! @section Optional Display Features ! @cindex European character sets @cindex accented characters ! @cindex ISO Latin-1 character sets @findex standard-display-european ! Emacs can display accented characters, assuming the font in use supports them. The @kbd{M-x standard-display-european} command toggles --- 205,216 ---- To make everything visible again, type @kbd{C-x $} with no argument. ! @node European Display ! @section European Character Set Display ! @cindex European character set @cindex accented characters ! @cindex ISO Latin-1 character set @findex standard-display-european ! @cindex @code{iso-syntax} library Emacs can display accented characters, assuming the font in use supports them. The @kbd{M-x standard-display-european} command toggles *************** *** 217,225 **** according to the ISO 8859 Latin-1 encoding for European languages; when disabled, Emacs uses octal notation for all characters not specified by ! the ordinary ASCII standard. ! With a prefix argument, @kbd{M-x standard-display-european} enables ! European character display iff the argument is positive. @cindex Line Number mode --- 218,246 ---- according to the ISO 8859 Latin-1 encoding for European languages; when disabled, Emacs uses octal notation for all characters not specified by ! the ordinary ASCII standard. Load the library @code{iso-syntax} to specify ! the correct syntactic properties for the character codes 128 and above. ! ! With a prefix argument, @kbd{M-x standard-display-european} enables ! European character display if and only if the argument is positive. ! ! If your terminal can send character codes 128 and up to represent ! ISO Latin-1 characters, execute the following expression to ! enable Emacs to understand them: ! ! @example ! (set-input-mode (car (current-input-mode)) ! (nth 1 (current-input-mode)) ! 0) ! @end example ! @noindent ! @kindex C-x 8 ! @cindex @code{iso-insert} library ! Otherwise, you can load the library @code{iso-insert} to turn the ! key @kbd{C-x 8} into a ``compose character'' prefix for insertion ! of the extra ISO Latin-1 printing characters. + @node Optional Display + @section Optional Display Features @cindex Line Number mode *************** *** 345,346 **** --- 366,376 ---- elisp, The Emacs Lisp Reference Manual}. + @vindex baud-rate + The variable @code{baud-rate} holds the the output speed of the + terminal, as far as Emacs knows. Setting this variable does not change + the speed of actual data transmission, but the value is used for + calculations such as padding. It also affects decisions about whether + to scroll part of the screen or redraw it instead---even when using a + window system, (We designed it this way, despite the fact that a window + system has no true ``output speed'', to give you a way to tune these + decisions.) diff -rc2P --exclude-from=exceptions emacs-19.9/man/emacs.texi emacs-19.10/man/emacs.texi *** emacs-19.9/man/emacs.texi Wed May 26 23:45:08 1993 --- emacs-19.10/man/emacs.texi Sun May 30 01:26:35 1993 *************** *** 76,80 **** display editor. This Info file describes how to edit with Emacs and some of how to customize it, but not how to extend it. It ! corresponds to GNU Emacs version 19.9. @end ifinfo --- 76,80 ---- display editor. This Info file describes how to edit with Emacs and some of how to customize it, but not how to extend it. It ! corresponds to GNU Emacs version 19.10. @end ifinfo diff -rc2P --exclude-from=exceptions emacs-19.9/man/mini.texi emacs-19.10/man/mini.texi *** emacs-19.9/man/mini.texi Wed May 19 16:07:25 1993 --- emacs-19.10/man/mini.texi Fri May 28 16:51:58 1993 *************** *** 375,399 **** @c widecommands @table @kbd ! @item C-x @key{ESC} Re-execute a recent minibuffer command @*(@code{repeat-complex-command}). @item M-x list-command-history Display the entire command history, showing all the commands ! @kbd{C-x @key{ESC}} can repeat, most recent first. @end table ! @kindex C-x ESC @findex repeat-complex-command ! @kbd{C-x @key{ESC}} is used to re-execute a recent minibuffer-using ! command. With no argument, it repeats the last such command. A numeric ! argument specifies which command to repeat; one means the last one, and ! larger numbers specify earlier ones. ! @kbd{C-x @key{ESC}} works by turning the previous command into a Lisp ! expression and then entering a minibuffer initialized with the text for ! that expression. If you type just @key{RET}, the command is repeated as ! before. You can also change the command by editing the Lisp expression. ! Whatever expression you finally submit is what will be executed. The ! repeated command is added to the front of the command history unless it is ! identical to the most recently executed command already there. Even if you don't understand Lisp syntax, it will probably be obvious --- 375,400 ---- @c widecommands @table @kbd ! @item C-x @key{ESC} @key{ESC} Re-execute a recent minibuffer command @*(@code{repeat-complex-command}). @item M-x list-command-history Display the entire command history, showing all the commands ! @kbd{C-x @key{ESC} @key{ESC}} can repeat, most recent first. @end table ! @kindex C-x ESC ESC @findex repeat-complex-command ! @kbd{C-x @key{ESC} @key{ESC}} is used to re-execute a recent ! minibuffer-using command. With no argument, it repeats the last such ! command. A numeric argument specifies which command to repeat; one ! means the last one, and larger numbers specify earlier ones. ! @kbd{C-x @key{ESC} @key{ESC}} works by turning the previous command ! into a Lisp expression and then entering a minibuffer initialized with ! the text for that expression. If you type just @key{RET}, the command ! is repeated as before. You can also change the command by editing the ! Lisp expression. Whatever expression you finally submit is what will be ! executed. The repeated command is added to the front of the command ! history unless it is identical to the most recently executed command ! already there. Even if you don't understand Lisp syntax, it will probably be obvious *************** *** 401,410 **** text, it will repeat exactly as before. ! Once inside the minibuffer for @kbd{C-x @key{ESC}}, you can use the ! minibuffer history commands (@kbd{M-p}, @kbd{M-n}, @kbd{M-r}, @kbd{M-s}; ! @pxref{Minibuffer History}) to move through the history list of saved ! entire commands. After finding the desired previous command, you can ! edit its expression as usual and then resubmit it by typing @key{RET} as ! usual. @vindex command-history --- 402,411 ---- text, it will repeat exactly as before. ! Once inside the minibuffer for @kbd{C-x @key{ESC} @key{ESC}}, you can ! use the minibuffer history commands (@kbd{M-p}, @kbd{M-n}, @kbd{M-r}, ! @kbd{M-s}; @pxref{Minibuffer History}) to move through the history list ! of saved entire commands. After finding the desired previous command, ! you can edit its expression as usual and then resubmit it by typing ! @key{RET} as usual. @vindex command-history diff -rc2P --exclude-from=exceptions emacs-19.9/man/misc.texi emacs-19.10/man/misc.texi *** emacs-19.9/man/misc.texi Fri May 21 15:15:06 1993 --- emacs-19.10/man/misc.texi Sat May 29 00:07:23 1993 *************** *** 994,1001 **** programs. Here is how. ! First, the preparation. Load the @file{server} library into your ! principal Emacs process. (Your @file{.emacs} file can do this ! automatically if you add the expression @code{(load "server")} to it.) ! Then set the @code{EDITOR} environment variable to @samp{emacsclient}. @kindex C-x # --- 994,1002 ---- programs. Here is how. ! First, the preparation. Within Emacs, call the function ! @code{server-start}. (Your @file{.emacs} file can do this automatically ! if you add the expression @code{(server-start)} to it.) Then, outside ! Emacs, set the @code{EDITOR} environment variable to ! @samp{emacsclient}. @kindex C-x # diff -rc2P --exclude-from=exceptions emacs-19.9/man/texindex.c emacs-19.10/man/texindex.c *** emacs-19.9/man/texindex.c Thu May 27 02:48:48 1993 --- emacs-19.10/man/texindex.c Sun May 30 02:19:38 1993 *************** *** 320,323 **** --- 320,329 ---- } + while (optind < argc) + { + *ip++ = argv[optind++]; + *op++ = NULL; + } + /* Record number of keyfields and terminate list of filenames. */ num_infiles = ip - infiles; diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/AddPane.c emacs-19.10/oldXMenu/AddPane.c *** emacs-19.9/oldXMenu/AddPane.c Tue Mar 9 12:14:36 1993 --- emacs-19.10/oldXMenu/AddPane.c Fri May 28 01:54:13 1993 *************** *** 84,88 **** * Insert the pane at the end of the pane list. */ ! insque(pane, menu->p_list->prev); /* --- 84,88 ---- * Insert the pane at the end of the pane list. */ ! emacs_insque(pane, menu->p_list->prev); /* diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/AddSel.c emacs-19.10/oldXMenu/AddSel.c *** emacs-19.9/oldXMenu/AddSel.c Tue Mar 9 12:14:38 1993 --- emacs-19.10/oldXMenu/AddSel.c Fri May 28 01:54:14 1993 *************** *** 74,78 **** * Insert the selection at the end of the selection list. */ ! insque(select, pane->s_list->prev); /* --- 74,78 ---- * Insert the selection at the end of the selection list. */ ! emacs_insque(select, pane->s_list->prev); /* diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/ChangeLog emacs-19.10/oldXMenu/ChangeLog *** emacs-19.9/oldXMenu/ChangeLog Thu May 27 02:41:19 1993 --- emacs-19.10/oldXMenu/ChangeLog Sun May 30 00:20:37 1993 *************** *** 1,2 **** --- 1,27 ---- + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.10 released. + + Sat May 29 02:18:00 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Create.c: Handle EMACS_BITMAP_FILES. + Use new names of renamed bitmap files. + + Fri May 28 01:56:50 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * AddPane.c, AddSel.c, DelPane.c, DelSel.c, InsPane.c, InsSel.c, + XDelAssoc.c, XMakeAssoc.c, XMenu.h, insque.c: Changed all uses of + insque and remque to emacs_insque and emacs_remque, so we can + safely include insque.c in the library on all systems. + + Thu May 27 23:34:44 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * Makefile.in (.c.o): Use $< instead of ${srcdir}/$*.c; the latter + only works with GNU Make. + + Thu May 27 09:22:39 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Create.c (XMenuCreate): Use classes PaneFont and SelectionFont. + Thu May 27 02:35:32 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/Create.c emacs-19.10/oldXMenu/Create.c *** emacs-19.9/oldXMenu/Create.c Thu May 27 02:04:53 1993 --- emacs-19.10/oldXMenu/Create.c Sat May 29 02:17:57 1993 *************** *** 17,20 **** --- 17,36 ---- + #ifdef EMACS_BITMAP_FILES + #include "../src/bitmaps/dimple1.xbm" + #include "../src/bitmaps/dimple3.xbm" + #include "../src/bitmaps/gray1.xbm" + #include "../src/bitmaps/gray3.xbm" + #include "../src/bitmaps/crosswv.xbm" + + #include "../src/bitmaps/leftptr.xbm" + #include "../src/bitmaps/leftpmsk.xbm" + #include "../src/bitmaps/rtptr.xbm" + #include "../src/bitmaps/rtpmsk.xbm" + #include "../src/bitmaps/cntrptr.xbm" + #include "../src/bitmaps/cntrpmsk.xbm" + #include "../src/bitmaps/stipple.xbm" + + #else #ifndef VMS *************** *** 39,54 **** #include "[-.src.bitmaps]gray1.xbm" #include "[-.src.bitmaps]gray3.xbm" ! #include "[-.src.bitmaps]cross_weave.xbm" ! #include "[-.src.bitmaps]left_ptr.xbm" ! #include "[-.src.bitmaps]left_ptrmsk.xbm" ! #include "[-.src.bitmaps]right_ptr.xbm" ! #include "[-.src.bitmaps]right_ptrmsk.xbm" ! #include "[-.src.bitmaps]cntr_ptr.xbm" ! #include "[-.src.bitmaps]cntr_ptrmsk.xbm" #include "[-.src.bitmaps]stipple.xbm" ! #endif ! #define DEF_FREEZE 0 --- 55,70 ---- #include "[-.src.bitmaps]gray1.xbm" #include "[-.src.bitmaps]gray3.xbm" ! #include "[-.src.bitmaps]crosswv.xbm" ! #include "[-.src.bitmaps]leftptr.xbm" ! #include "[-.src.bitmaps]leftpmsk.xbm" ! #include "[-.src.bitmaps]rtptr.xbm" ! #include "[-.src.bitmaps]rtpmsk.xbm" ! #include "[-.src.bitmaps]cntrptr.xbm" ! #include "[-.src.bitmaps]cntrpmsk.xbm" #include "[-.src.bitmaps]stipple.xbm" ! #endif /* VMS */ ! #endif /* not EMACS_BITMAP_FILES */ #define DEF_FREEZE 0 *************** *** 297,301 **** } ! def_val = x_get_resource_string ("paneFont", "Font"); if (def_val != NULL) p_fnt_name = def_val; --- 313,317 ---- } ! def_val = x_get_resource_string ("paneFont", "PaneFont"); if (def_val != NULL) p_fnt_name = def_val; *************** *** 353,357 **** } ! def_val = x_get_resource_string ("selectionFont", "Font"); if (def_val != NULL) s_fnt_name = def_val; --- 369,373 ---- } ! def_val = x_get_resource_string ("selectionFont", "SelectionFont"); if (def_val != NULL) s_fnt_name = def_val; diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/DelPane.c emacs-19.10/oldXMenu/DelPane.c *** emacs-19.9/oldXMenu/DelPane.c Tue Mar 9 12:14:53 1993 --- emacs-19.10/oldXMenu/DelPane.c Fri May 28 01:54:14 1993 *************** *** 41,45 **** * the pane count. */ ! remque(p_ptr); menu->p_count--; --- 41,45 ---- * the pane count. */ ! emacs_remque(p_ptr); menu->p_count--; diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/DelSel.c emacs-19.10/oldXMenu/DelSel.c *** emacs-19.9/oldXMenu/DelSel.c Tue Mar 9 12:14:59 1993 --- emacs-19.10/oldXMenu/DelSel.c Fri May 28 01:54:15 1993 *************** *** 47,51 **** * list and update the selection count. */ ! remque(s_ptr); p_ptr->s_count--; --- 47,51 ---- * list and update the selection count. */ ! emacs_remque(s_ptr); p_ptr->s_count--; diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/InsPane.c emacs-19.10/oldXMenu/InsPane.c *** emacs-19.9/oldXMenu/InsPane.c Tue Mar 9 12:15:15 1993 --- emacs-19.10/oldXMenu/InsPane.c Fri May 28 01:54:16 1993 *************** *** 92,96 **** * new pane. */ ! insque(pane, p_ptr); /* --- 92,96 ---- * new pane. */ ! emacs_insque(pane, p_ptr); /* diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/InsSel.c emacs-19.10/oldXMenu/InsSel.c *** emacs-19.9/oldXMenu/InsSel.c Tue Mar 9 12:15:17 1993 --- emacs-19.10/oldXMenu/InsSel.c Fri May 28 01:54:17 1993 *************** *** 86,90 **** * number one less than the desired number for the new selection. */ ! insque(select, s_ptr); /* --- 86,90 ---- * number one less than the desired number for the new selection. */ ! emacs_insque(select, s_ptr); /* diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/Makefile.in emacs-19.10/oldXMenu/Makefile.in *** emacs-19.9/oldXMenu/Makefile.in Sun May 23 17:39:32 1993 --- emacs-19.10/oldXMenu/Makefile.in Fri May 28 01:55:05 1993 *************** *** 3,8 **** C_SWITCH_X_SITE= ! # Uncomment following line if linking temacs complains about missing insque. ! # EXTRA=insque.o AS = as --- 3,7 ---- C_SWITCH_X_SITE= ! EXTRA=insque.o AS = as *************** *** 82,86 **** ALL_CFLAGS=$(CFLAGS) $(C_SWITCH_SITE) $(C_SWITCH_SYSTEM) $(C_SWITCH_X_SITE) .c.o: ! $(CC) -c ${ALL_CFLAGS} ${srcdir}/$*.c all:: libXMenu11.a --- 81,85 ---- ALL_CFLAGS=$(CFLAGS) $(C_SWITCH_SITE) $(C_SWITCH_SYSTEM) $(C_SWITCH_X_SITE) .c.o: ! $(CC) -c ${ALL_CFLAGS} $< all:: libXMenu11.a diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/XDelAssoc.c emacs-19.10/oldXMenu/XDelAssoc.c *** emacs-19.9/oldXMenu/XDelAssoc.c Wed Mar 24 23:04:07 1993 --- emacs-19.10/oldXMenu/XDelAssoc.c Fri May 28 01:54:18 1993 *************** *** 16,20 **** #include #include "X10.h" ! void remque(); struct qelem { struct qelem *q_forw; --- 16,20 ---- #include #include "X10.h" ! void emacs_remque(); struct qelem { struct qelem *q_forw; *************** *** 53,57 **** /* Remove it from the queue and */ /* free the entry. */ ! remque((struct qelem *)Entry); free((char *)Entry); return; --- 53,57 ---- /* Remove it from the queue and */ /* free the entry. */ ! emacs_remque((struct qelem *)Entry); free((char *)Entry); return; diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/XMakeAssoc.c emacs-19.10/oldXMenu/XMakeAssoc.c *** emacs-19.9/oldXMenu/XMakeAssoc.c Mon May 3 20:00:25 1993 --- emacs-19.10/oldXMenu/XMakeAssoc.c Fri May 28 01:54:19 1993 *************** *** 27,31 **** extern int (*_XIOErrorFunction)(); /* X system error reporting routine. */ ! void insque(); struct qelem { struct qelem *q_forw; --- 27,31 ---- extern int (*_XIOErrorFunction)(); /* X system error reporting routine. */ ! void emacs_insque(); struct qelem { struct qelem *q_forw; *************** *** 104,108 **** /* Insert the new entry. */ ! insque((struct qelem *)new_entry, (struct qelem *)Entry->prev); } --- 104,108 ---- /* Insert the new entry. */ ! emacs_insque((struct qelem *)new_entry, (struct qelem *)Entry->prev); } diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/XMenu.h emacs-19.10/oldXMenu/XMenu.h *** emacs-19.9/oldXMenu/XMenu.h Tue Mar 9 12:16:00 1993 --- emacs-19.10/oldXMenu/XMenu.h Fri May 28 01:54:20 1993 *************** *** 71,76 **** typedef struct _xmwindow { ! struct _xmwindow *next; /* Next obj pointer (for insque). */ ! struct _xmwindow *prev; /* Prev obj pointer (for insque). */ XMWType type; /* Type of window. */ Window window; /* X Window Id. */ --- 71,76 ---- typedef struct _xmwindow { ! struct _xmwindow *next; /* Next obj pointer (for emacs_insque). */ ! struct _xmwindow *prev; /* Prev obj pointer (for emacs_insque). */ XMWType type; /* Type of window. */ Window window; /* X Window Id. */ *************** *** 95,100 **** typedef struct _xmpane { ! struct _xmpane *next; /* Next obj pointer (for insque). */ ! struct _xmpane *prev; /* Prev obj pointer (for insque). */ XMWType type; /* Type of window. */ Window window; /* X Window Id. */ --- 95,100 ---- typedef struct _xmpane { ! struct _xmpane *next; /* Next obj pointer (for emacs_insque). */ ! struct _xmpane *prev; /* Prev obj pointer (for emacs_insque). */ XMWType type; /* Type of window. */ Window window; /* X Window Id. */ *************** *** 119,124 **** typedef struct _xmselect { ! struct _xmselect *next; /* Next obj pointer (for insque). */ ! struct _xmselect *prev; /* Prev obj pointer (for insque). */ XMWType type; /* Type of window. */ Window window; /* X Window Id. */ --- 119,124 ---- typedef struct _xmselect { ! struct _xmselect *next; /* Next obj pointer (for emacs_insque). */ ! struct _xmselect *prev; /* Prev obj pointer (for emacs_insque). */ XMWType type; /* Type of window. */ Window window; /* X Window Id. */ diff -rc2P --exclude-from=exceptions emacs-19.9/oldXMenu/insque.c emacs-19.10/oldXMenu/insque.c *** emacs-19.9/oldXMenu/insque.c Tue Mar 9 12:16:09 1993 --- emacs-19.10/oldXMenu/insque.c Fri May 28 01:56:31 1993 *************** *** 1,8 **** ! /* This file implements the insque and remque functions of BSD. ! It is not compiled by default, because that change would be too risky ! to install right now. If you find that HAVE_X_MENU leads to linker errors ! because these functions are undefined, then compile this file ! and arrange to link it in. */ struct qelem { struct qelem *q_forw; --- 1,8 ---- ! /* This file implements the emacs_insque and emacs_remque functions, ! copies of the insque and remque functions of BSD. They and all ! their callers have been renamed to emacs_mumble to allow us to ! include this file in the menu library on all systems. */ + struct qelem { struct qelem *q_forw; *************** *** 14,18 **** void ! insque (elem, prev) struct qelem *elem, *prev; { --- 14,18 ---- void ! emacs_insque (elem, prev) struct qelem *elem, *prev; { *************** *** 27,31 **** /* Unlink ELEM from the doubly-linked list that it is in. */ ! remque (elem) struct qelem *elem; { --- 27,31 ---- /* Unlink ELEM from the doubly-linked list that it is in. */ ! emacs_remque (elem) struct qelem *elem; { diff -rc2P --exclude-from=exceptions emacs-19.9/shortnames/COPYING emacs-19.10/shortnames/COPYING *** emacs-19.9/shortnames/COPYING Thu May 27 02:48:55 1993 --- emacs-19.10/shortnames/COPYING Sun May 30 02:19:50 1993 *************** *** 280,284 **** END OF TERMS AND CONDITIONS ! Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest --- 280,284 ---- END OF TERMS AND CONDITIONS ! How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest diff -rc2P --exclude-from=exceptions emacs-19.9/src/COPYING emacs-19.10/src/COPYING *** emacs-19.9/src/COPYING Thu May 27 02:48:53 1993 --- emacs-19.10/src/COPYING Sun May 30 02:19:48 1993 *************** *** 280,284 **** END OF TERMS AND CONDITIONS ! Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest --- 280,284 ---- END OF TERMS AND CONDITIONS ! How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest diff -rc2P --exclude-from=exceptions emacs-19.9/src/ChangeLog emacs-19.10/src/ChangeLog *** emacs-19.9/src/ChangeLog Thu May 27 02:41:50 1993 --- emacs-19.10/src/ChangeLog Sun May 30 01:50:21 1993 *************** *** 1,2 **** --- 1,141 ---- + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.10 released. + + Sat May 29 20:50:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * keyboard.c (read_key_sequence): If we changed buffers during + read_char, go to replay_sequence. + + * frame.c (Ficonify_frame, Fmake_frame_invisible): + Select some other frame. Move minibuffer off this frame. + + * frame.c (Fhandle_switch_frame): Don't call Ffocus_frame. + (Fredirect_frame_focus): Call Ffocus_frame here. + + * xterm.c (x_bitmap_icon): Don't free icon_bitmap; + create it if it hasn't been created before. + + * xterm.c (XTread_socket): For UnmapNotify, if frame was visible, + mark it now as iconified. + (x_make_frame_invisible): If async_iconic, work does need to be done. + Don't let this frame stay highlighted. + (x_iconify_frame): Don't let this frame stay highlighted. + + * s/usg5-4-2.h (sigsetmask): #undef this. + + * sysdep.c (sys_signal): Use 0, not NULL, to set sa_flags. + + Sat May 29 16:47:12 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * linux.h (C_OPTIMIZE_SWITCH): Set this to the empty string; + configure guesses just fine. + + * tekXD88.h: New file, from Kaveh Ghazi. + + * systty.h (CDISABLE): #undef it before re-#defining it. + + * sysdep.c (sys_siglist): Comment out #endif trailer. + * xmenu.c (TRUE, FALSE): Same. + * xterm.c (dumprectangle): Same. + + * emacs.c: Don't include termios.h directly--let systty.h do it. + + Sat May 29 00:26:39 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * xfaces.c [HPUX]: Include time.h and define __TIMEVAL__. + + * emacs.c (shut_down_emacs): Maybe close X connection. New arg NO_X. + (Fkill_emacs): Don't close it here. Pass new arg. + (fatal_error_signal): Pass new arg. + * xterm.c (x_connection_closed): Pass new arg. + + * xdisp.c (syms_of_xdisp): Make highlight-nonselected-windows Lisp var. + (display_text_line): Obey it. + (display_text_line): Really check for just the selected window. + + * s/usg5-4-2.h: New file. + + * keyboard.c (menu_bar_items): Save Vinhibit_quit by hand + instead of using specbind. + (menu_bar_items): Call Fnreverse before restoring Vinhibit_quit. + + * s/hpux8.h (OLDXMENU_OPTIONS): Add quotations. + + * m/ibmrt.h (C_SWITCH_MACHINE): Define only if not __GNUC__. + (HAVE_FTIME): Defined. + (EMACS_BITMAP_FILES): Defined. + + * xfns.c (Fx_close_current_connection): Clear x_current_display. + * xterm.c (XTring_bell): Do nothing if x_current_connection is 0. + + * buffer.c (reset_buffer): Clear mark_active field here. + (reset_buffer_local_variables): Not here. + (Fswitch_to_buffer, Fpop_to_buffer): Return the buffer. + (Fmove_overlay): Fix data types in last change. + + * sysdep.c (gettimeofday): Don't store in *tzp if tzp is 0. + + * process.c (MAXDESC): Get it from FD_SETSIZE if that exists. + + * s/sco4.h (PTY_ITERATION, PTY_NAME_SPRINTF, PTY_TTY_NAME_SPRINTF): + Redefined. + (SIGNALS_VIA_CHARACTERS): Defined. + [HAVE_SOCKETS] (HAVE_GETTIMEOFDAY): Defined. + (MAIL_PROGRAM_NAME): Defined (two alternate definitions). + + * xfns.c (Fx_list_fonts): Use CHECK_LIVE_FRAME on the frame arg. + + Fri May 28 16:07:01 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * s/hpux8.h (LIBX11_SYSTEM): Defined. + + * ymakefile: Replace config.h as dep with $(config_h). + (really-oldXMenu): Use two make vars to pass values + of C_SWITCH_... within doublequotes. + + * xfns.c (x_figure_window_size): Never set PPosition or PSize. + + * keymap.c (syms_of_keymap): Create global_map 256 slots long. + * cmds.c (keys_of_cmds): Predefined 0240-0376 as self-insert. + + * xterm.c (XTread_socket, case KeyPress) [HPUX]: + Recognize the extended function keys. + + * buffer.c (Fgenerate_new_buffer_name): New arg IGNORE. + (Frename_buffer): Pass new arg. + + Fri May 28 00:33:32 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) + + * keyboard.c (menu_bar_items): Bind Qinhibit_quit to Qt while we + call the keymap accessors; this gets called during redisplay. + + * ymakefile (alloca.o): Call $(CC), not cc. + + * s/linux.h (SIGNALS_VIA_CHARACTERS): Try this out for a bit. + + * buffer.c (Fmove_overlay): If the overlay is changing buffers, + do a thorough redisplay. + + * xfns.c (x_set_frame_parameters): Use the first + position/size parameter we find, not the last. + + * s/hpux8.h: Don't define HAVE_RANDOM. + + * config.h.in (UNEXEC_SRC): New macro, set by the configure + script. + * ymakefile (UNEXEC_SRC): Give it a default value here, and make + UNEXEC depend on it. + + * ymakefile (lispdir): Set this in terms of ${srcdir}. + + Thu May 27 19:47:45 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * dispnew.c (Fsleep_for): Don't return without waiting when SEC is 0. + + * emacs.c (syms_of_emacs) [CANNOT_DUMP]: Don't defsubr Sdump_emacs*. + + * alloc.c (mark_object): Add debugging code to check for ptr clobbered. + Thu May 27 02:35:32 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu) diff -rc2P --exclude-from=exceptions emacs-19.9/src/alloc.c emacs-19.10/src/alloc.c *** emacs-19.9/src/alloc.c Sun May 23 22:30:13 1993 --- emacs-19.10/src/alloc.c Thu May 27 19:47:41 1993 *************** *** 1624,1628 **** --- 1624,1632 ---- goto loop; } + if (ptr == 0) + abort (); mark_object (&ptr->car); + if (ptr == 0) + abort (); objptr = &ptr->cdr; obj = ptr->cdr; Only in emacs-19.9/src/bitmaps: cntr_ptr.xbm Only in emacs-19.9/src/bitmaps: cntr_ptrmsk.xbm diff -rc2P --exclude-from=exceptions emacs-19.9/src/bitmaps/cntrpmsk.xbm emacs-19.10/src/bitmaps/cntrpmsk.xbm *** emacs-19.9/src/bitmaps/cntrpmsk.xbm --- emacs-19.10/src/bitmaps/cntrpmsk.xbm Wed Mar 24 21:04:00 1993 *************** *** 0 **** --- 1,6 ---- + #define cntr_ptrmsk_width 16 + #define cntr_ptrmsk_height 16 + static char cntr_ptrmsk_bits[] = { + 0xc0, 0x03, 0xc0, 0x03, 0xe0, 0x07, 0xe0, 0x07, 0xf0, 0x0f, 0xf0, 0x0f, + 0xf8, 0x1f, 0xf8, 0x1f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xdc, 0x3b, + 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03}; diff -rc2P --exclude-from=exceptions emacs-19.9/src/bitmaps/cntrptr.xbm emacs-19.10/src/bitmaps/cntrptr.xbm *** emacs-19.9/src/bitmaps/cntrptr.xbm --- emacs-19.10/src/bitmaps/cntrptr.xbm Wed Mar 24 21:04:00 1993 *************** *** 0 **** --- 1,8 ---- + #define cntr_ptr_width 16 + #define cntr_ptr_height 16 + #define cntr_ptr_x_hot 7 + #define cntr_ptr_y_hot 1 + static char cntr_ptr_bits[] = { + 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0xc0, 0x03, 0xc0, 0x03, 0xe0, 0x07, + 0xe0, 0x07, 0xf0, 0x0f, 0xf0, 0x0f, 0x98, 0x19, 0x88, 0x11, 0x80, 0x01, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00}; Only in emacs-19.9/src/bitmaps: cross_weave.xbm diff -rc2P --exclude-from=exceptions emacs-19.9/src/bitmaps/crosswv.xbm emacs-19.10/src/bitmaps/crosswv.xbm *** emacs-19.9/src/bitmaps/crosswv.xbm --- emacs-19.10/src/bitmaps/crosswv.xbm Wed Mar 24 21:04:00 1993 *************** *** 0 **** --- 1,6 ---- + #define cross_weave_width 16 + #define cross_weave_height 16 + static char cross_weave_bits[] = { + 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88, + 0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22, + 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22}; Only in emacs-19.9/src/bitmaps: left_ptr.xbm Only in emacs-19.9/src/bitmaps: left_ptrmsk.xbm diff -rc2P --exclude-from=exceptions emacs-19.9/src/bitmaps/leftpmsk.xbm emacs-19.10/src/bitmaps/leftpmsk.xbm *** emacs-19.9/src/bitmaps/leftpmsk.xbm --- emacs-19.10/src/bitmaps/leftpmsk.xbm Wed Mar 24 21:04:00 1993 *************** *** 0 **** --- 1,6 ---- + #define left_ptrmsk_width 16 + #define left_ptrmsk_height 16 + static char left_ptrmsk_bits[] = { + 0x0c, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x7c, 0x00, 0xfc, 0x00, 0xfc, 0x01, + 0xfc, 0x03, 0xfc, 0x07, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x01, 0xdc, 0x03, + 0xcc, 0x03, 0x80, 0x07, 0x80, 0x07, 0x00, 0x03}; diff -rc2P --exclude-from=exceptions emacs-19.9/src/bitmaps/leftptr.xbm emacs-19.10/src/bitmaps/leftptr.xbm *** emacs-19.9/src/bitmaps/leftptr.xbm --- emacs-19.10/src/bitmaps/leftptr.xbm Wed Mar 24 21:04:00 1993 *************** *** 0 **** --- 1,8 ---- + #define left_ptr_width 16 + #define left_ptr_height 16 + #define left_ptr_x_hot 3 + #define left_ptr_y_hot 1 + static char left_ptr_bits[] = { + 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x38, 0x00, 0x78, 0x00, 0xf8, 0x00, + 0xf8, 0x01, 0xf8, 0x03, 0xf8, 0x07, 0xf8, 0x00, 0xd8, 0x00, 0x88, 0x01, + 0x80, 0x01, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00}; Only in emacs-19.9/src/bitmaps: right_ptr.xbm Only in emacs-19.9/src/bitmaps: right_ptrmsk.xbm diff -rc2P --exclude-from=exceptions emacs-19.9/src/bitmaps/rtpmsk.xbm emacs-19.10/src/bitmaps/rtpmsk.xbm *** emacs-19.9/src/bitmaps/rtpmsk.xbm --- emacs-19.10/src/bitmaps/rtpmsk.xbm Wed Mar 24 21:04:00 1993 *************** *** 0 **** --- 1,6 ---- + #define right_ptrmsk_width 16 + #define right_ptrmsk_height 16 + static char right_ptrmsk_bits[] = { + 0x00, 0x30, 0x00, 0x38, 0x00, 0x3c, 0x00, 0x3e, 0x00, 0x3f, 0x80, 0x3f, + 0xc0, 0x3f, 0xe0, 0x3f, 0xf0, 0x3f, 0xf0, 0x3f, 0x80, 0x3f, 0xc0, 0x3b, + 0xc0, 0x33, 0xe0, 0x01, 0xe0, 0x01, 0xc0, 0x00}; diff -rc2P --exclude-from=exceptions emacs-19.9/src/bitmaps/rtptr.xbm emacs-19.10/src/bitmaps/rtptr.xbm *** emacs-19.9/src/bitmaps/rtptr.xbm --- emacs-19.10/src/bitmaps/rtptr.xbm Wed Mar 24 21:04:00 1993 *************** *** 0 **** --- 1,8 ---- + #define right_ptr_width 16 + #define right_ptr_height 16 + #define right_ptr_x_hot 12 + #define right_ptr_y_hot 1 + static char right_ptr_bits[] = { + 0x00, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x1c, 0x00, 0x1e, 0x00, 0x1f, + 0x80, 0x1f, 0xc0, 0x1f, 0xe0, 0x1f, 0x00, 0x1f, 0x00, 0x1b, 0x80, 0x11, + 0x80, 0x01, 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00}; diff -rc2P --exclude-from=exceptions emacs-19.9/src/buffer.c emacs-19.10/src/buffer.c *** emacs-19.9/src/buffer.c Mon May 24 16:55:07 1993 --- emacs-19.10/src/buffer.c Sat May 29 18:13:39 1993 *************** *** 280,283 **** --- 280,284 ---- b->overlays_after = Qnil; XFASTINT (b->overlay_center) = 1; + b->mark_active = Qnil; /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */ *************** *** 305,309 **** b->case_canon_table = Vascii_downcase_table; b->case_eqv_table = Vascii_upcase_table; - b->mark_active = Qnil; #if 0 b->sort_table = XSTRING (Vascii_sort_table); --- 306,309 ---- *************** *** 332,342 **** DEFUN ("generate-new-buffer-name", Fgenerate_new_buffer_name, Sgenerate_new_buffer_name, ! 1, 1, 0, "Return a string that is the name of no existing buffer based on NAME.\n\ If there is no live buffer named NAME, then return NAME.\n\ Otherwise modify name by appending `', incrementing NUMBER\n\ ! until an unused name is found, and then return that name.") ! (name) ! register Lisp_Object name; { register Lisp_Object gentemp, tem; --- 332,345 ---- DEFUN ("generate-new-buffer-name", Fgenerate_new_buffer_name, Sgenerate_new_buffer_name, ! 1, 2, 0, "Return a string that is the name of no existing buffer based on NAME.\n\ If there is no live buffer named NAME, then return NAME.\n\ Otherwise modify name by appending `', incrementing NUMBER\n\ ! until an unused name is found, and then return that name.\n\ ! Optional second argument ignore specifies a name that is okay to use\n\ ! \(if it is in the sequence to be tried)\n\ ! even if a buffer with that name exists.") ! (name, ignore) ! register Lisp_Object name, ignore; { register Lisp_Object gentemp, tem; *************** *** 355,358 **** --- 358,364 ---- sprintf (number, "<%d>", ++count); gentemp = concat2 (name, build_string (number)); + tem = Fstring_equal (name, ignore); + if (!NILP (tem)) + return gentemp; tem = Fget_buffer (gentemp); if (NILP (tem)) *************** *** 537,541 **** { if (!NILP (unique)) ! name = Fgenerate_new_buffer_name (name); else error ("Buffer name \"%s\" is in use", XSTRING (name)->data); --- 543,547 ---- { if (!NILP (unique)) ! name = Fgenerate_new_buffer_name (name, current_buffer->name); else error ("Buffer name \"%s\" is in use", XSTRING (name)->data); *************** *** 826,830 **** buf); ! return Qnil; } --- 832,836 ---- buf); ! return buf; } *************** *** 846,850 **** record_buffer (buf); Fselect_window (Fdisplay_buffer (buf, other)); ! return Qnil; } --- 852,856 ---- record_buffer (buf); Fselect_window (Fdisplay_buffer (buf, other)); ! return buf; } *************** *** 1567,1590 **** b = XBUFFER (buffer); ! /* Redisplay the area the overlay has just left, or just enclosed. */ ! { ! Lisp_Object o_beg = OVERLAY_START (overlay); ! Lisp_Object o_end = OVERLAY_END (overlay); ! int change_beg, change_end; ! ! o_beg = OVERLAY_POSITION (o_beg); ! o_end = OVERLAY_POSITION (o_end); ! ! if (XINT (o_beg) == XINT (beg)) ! redisplay_region (b, XINT (o_end), XINT (end)); ! else if (XINT (o_end) == XINT (end)) ! redisplay_region (b, XINT (o_beg), XINT (beg)); ! else ! { ! if (XINT (beg) < XINT (o_beg)) o_beg = beg; ! if (XINT (end) > XINT (o_end)) o_end = end; ! redisplay_region (b, XINT (o_beg), XINT (o_end)); ! } ! } b->overlays_before = Fdelq (overlay, b->overlays_before); --- 1573,1600 ---- b = XBUFFER (buffer); ! /* If the overlay has changed buffers, do a thorough redisplay. */ ! if (b != XMARKER (OVERLAY_START (overlay))->buffer) ! windows_or_buffers_changed = 1; ! else ! /* Redisplay the area the overlay has just left, or just enclosed. */ ! { ! Lisp_Object o_beg = OVERLAY_START (overlay); ! Lisp_Object o_end = OVERLAY_END (overlay); ! int change_beg, change_end; ! ! o_beg = OVERLAY_POSITION (o_beg); ! o_end = OVERLAY_POSITION (o_end); ! ! if (XINT (o_beg) == XINT (beg)) ! redisplay_region (b, XINT (o_end), XINT (end)); ! else if (XINT (o_end) == XINT (end)) ! redisplay_region (b, XINT (o_beg), XINT (beg)); ! else ! { ! if (XINT (beg) < XINT (o_beg)) o_beg = beg; ! if (XINT (end) > XINT (o_end)) o_end = end; ! redisplay_region (b, XINT (o_beg), XINT (o_end)); ! } ! } b->overlays_before = Fdelq (overlay, b->overlays_before); diff -rc2P --exclude-from=exceptions emacs-19.9/src/cmds.c emacs-19.10/src/cmds.c *** emacs-19.9/src/cmds.c Sat May 22 14:47:47 1993 --- emacs-19.10/src/cmds.c Fri May 28 18:29:05 1993 *************** *** 381,384 **** --- 381,386 ---- for (n = 040; n < 0177; n++) initial_define_key (global_map, n, "self-insert-command"); + for (n = 0240; n < 0377; n++) + initial_define_key (global_map, n, "self-insert-command"); initial_define_key (global_map, Ctl ('A'), "beginning-of-line"); diff -rc2P --exclude-from=exceptions emacs-19.9/src/config.h.in emacs-19.10/src/config.h.in *** emacs-19.9/src/config.h.in Wed May 26 19:53:14 1993 --- emacs-19.10/src/config.h.in Fri May 28 00:30:27 1993 *************** *** 95,98 **** --- 95,99 ---- #undef STACK_DIRECTION #undef const + #undef UNEXEC_SRC /* If using GNU, then support inline function declarations. */ diff -rc2P --exclude-from=exceptions emacs-19.9/src/dispnew.c emacs-19.10/src/dispnew.c *** emacs-19.9/src/dispnew.c Sat May 22 14:49:35 1993 --- emacs-19.10/src/dispnew.c Thu May 27 21:52:41 1993 *************** *** 1853,1857 **** sec += usec / 1000000, usec %= 1000000; ! if (sec <= 0) return Qnil; --- 1853,1857 ---- sec += usec / 1000000, usec %= 1000000; ! if (sec < 0) return Qnil; diff -rc2P --exclude-from=exceptions emacs-19.9/src/emacs.c emacs-19.10/src/emacs.c *** emacs-19.9/src/emacs.c Sat May 22 14:50:59 1993 --- emacs-19.10/src/emacs.c Sat May 29 16:57:08 1993 *************** *** 36,43 **** #endif - #ifdef HAVE_TERMIOS - #include - #endif - #ifdef APOLLO #ifndef APOLLO_SR10 --- 36,39 ---- *************** *** 135,139 **** fatal_error_in_progress = 1; ! shut_down_emacs (sig); } --- 131,135 ---- fatal_error_in_progress = 1; ! shut_down_emacs (sig, 0); } *************** *** 639,647 **** call1 (Vrun_hooks, intern ("kill-emacs-hook")); - #ifdef HAVE_X_WINDOWS - if (!noninteractive && EQ (Vwindow_system, intern ("x"))) - Fx_close_current_connection (); - #endif /* HAVE_X_WINDOWS */ - UNGCPRO; --- 635,638 ---- *************** *** 653,657 **** stuff_buffered_input (arg); ! shut_down_emacs (0); exit ((XTYPE (arg) == Lisp_Int) ? XINT (arg) --- 644,648 ---- stuff_buffered_input (arg); ! shut_down_emacs (0, 0); exit ((XTYPE (arg) == Lisp_Int) ? XINT (arg) *************** *** 677,682 **** and Fkill_emacs. */ void ! shut_down_emacs (sig) ! int sig; { /* If we are controlling the terminal, reset terminal modes */ --- 668,673 ---- and Fkill_emacs. */ void ! shut_down_emacs (sig, no_x) ! int sig, no_x; { /* If we are controlling the terminal, reset terminal modes */ *************** *** 709,712 **** --- 700,708 ---- #endif + #ifdef HAVE_X_WINDOWS + if (!noninteractive && EQ (Vwindow_system, intern ("x")) && ! no_x) + Fx_close_current_connection (); + #endif /* HAVE_X_WINDOWS */ + #ifdef SIGIO /* There is a tendency for a SIGIO signal to arrive within exit, *************** *** 844,847 **** --- 840,844 ---- syms_of_emacs () { + #ifndef CANNOT_DUMP #ifdef HAVE_SHM defsubr (&Sdump_emacs_data); *************** *** 848,851 **** --- 845,849 ---- #else defsubr (&Sdump_emacs); + #endif #endif Only in emacs-19.9/src: fields.c diff -rc2P --exclude-from=exceptions emacs-19.9/src/frame.c emacs-19.10/src/frame.c *** emacs-19.9/src/frame.c Sat May 22 14:55:19 1993 --- emacs-19.10/src/frame.c Sat May 29 22:30:13 1993 *************** *** 392,404 **** Fselect_window (XFRAME (frame)->selected_window); - - /* I think this should be done with a hook. */ - #ifdef HAVE_X_WINDOWS - if (FRAME_X_P (XFRAME (frame)) - && NILP (no_enter)) - { - Ffocus_frame (frame); - } - #endif choose_minibuf_frame (); --- 392,395 ---- *************** *** 833,836 **** --- 824,839 ---- CHECK_LIVE_FRAME (frame, 0); + /* Don't let the frame remain selected. */ + if (XFRAME (frame) == selected_frame) + Fhandle_switch_frame (next_frame (frame, Qt), Qnil); + + /* Don't allow minibuf_window to remain on a deleted frame. */ + if (EQ (XFRAME (frame)->minibuffer_window, minibuf_window)) + { + Fset_window_buffer (selected_frame->minibuffer_window, + XWINDOW (minibuf_window)->buffer); + minibuf_window = selected_frame->minibuffer_window; + } + /* I think this should be done with a hook. */ #ifdef HAVE_X_WINDOWS *************** *** 854,857 **** --- 857,872 ---- CHECK_LIVE_FRAME (frame, 0); + /* Don't let the frame remain selected. */ + if (XFRAME (frame) == selected_frame) + Fhandle_switch_frame (next_frame (frame, Qt), Qnil); + + /* Don't allow minibuf_window to remain on a deleted frame. */ + if (EQ (XFRAME (frame)->minibuffer_window, minibuf_window)) + { + Fset_window_buffer (selected_frame->minibuffer_window, + XWINDOW (minibuf_window)->buffer); + minibuf_window = selected_frame->minibuffer_window; + } + /* I think this should be done with a hook. */ #ifdef HAVE_X_WINDOWS *************** *** 971,974 **** --- 986,996 ---- XFRAME (frame)->focus_frame = focus_frame; + + /* I think this should be done with a hook. */ + #ifdef HAVE_X_WINDOWS + if (!NILP (focus_frame) && ! EQ (focus_frame, frame) + && FRAME_X_P (XFRAME (focus_frame))) + Ffocus_frame (focus_frame); + #endif if (frame_rehighlight_hook) diff -rc2P --exclude-from=exceptions emacs-19.9/src/gmalloc.c emacs-19.10/src/gmalloc.c *** emacs-19.9/src/gmalloc.c Thu May 27 02:46:18 1993 --- emacs-19.10/src/gmalloc.c Sun May 30 02:16:03 1993 *************** *** 48,56 **** #undef __ptr_t #define __ptr_t void * #else /* Not C++ or ANSI C. */ #undef __P #define __P(args) () ! #undef const ! #define const #undef __ptr_t #define __ptr_t char * --- 48,57 ---- #undef __ptr_t #define __ptr_t void * + #define CONST const #else /* Not C++ or ANSI C. */ #undef __P #define __P(args) () ! #undef CONST ! #define CONST #undef __ptr_t #define __ptr_t char * *************** *** 249,253 **** /* Call WARNFUN with a warning message when memory usage is high. */ extern void memory_warnings __P ((__ptr_t __start, ! void (*__warnfun) __P ((__const char *)))); --- 250,254 ---- /* Call WARNFUN with a warning message when memory usage is high. */ extern void memory_warnings __P ((__ptr_t __start, ! void (*__warnfun) __P ((CONST char *)))); *************** *** 426,431 **** --- 427,439 ---- struct list *next; + #ifdef emacs + /* Library fns that call malloc need this + on some systems, such as rpc on Ultrix on Decstation. */ if (size == 0) + size = 1; + #else + if (size == 0) return NULL; + #endif if (__malloc_hook != NULL) diff -rc2P --exclude-from=exceptions emacs-19.9/src/keyboard.c emacs-19.10/src/keyboard.c *** emacs-19.9/src/keyboard.c Thu May 27 02:02:38 1993 --- emacs-19.10/src/keyboard.c Sun May 30 02:06:12 1993 *************** *** 3073,3077 **** --- 3073,3087 ---- int mapno; + Lisp_Object oquit; + /* In order to build the menus, we need to call the keymap + accessors. They all call QUIT. But this function is called + during redisplay, during which a quit is fatal. So inhibit + quitting while building the menus. + We do this instead of specbind because (1) errors will clear it anyway + and (2) this avoids risk of specpdl overflow. */ + oquit = Vinhibit_quit; + Vinhibit_quit = Qt; + /* Build our list of keymaps. If we recognize a function key and replace its escape sequence in *************** *** 3109,3113 **** } ! return Fnreverse (result); } --- 3119,3125 ---- } ! result = Fnreverse (result); ! Vinhibit_quit = oquit; ! return result; } *************** *** 3586,3595 **** key's again in Vfunction_key_map. */ int fkey_start = 0, fkey_end = 0; ! Lisp_Object fkey_map = Vfunction_key_map; /* If we receive a ``switch-frame'' event in the middle of a key sequence, we put it off for later. While we're reading, we keep the event here. */ ! Lisp_Object delayed_switch_frame = Qnil; /* If there is no function key map, turn off function key scanning. */ --- 3598,3615 ---- key's again in Vfunction_key_map. */ int fkey_start = 0, fkey_end = 0; ! Lisp_Object fkey_map; /* If we receive a ``switch-frame'' event in the middle of a key sequence, we put it off for later. While we're reading, we keep the event here. */ ! Lisp_Object delayed_switch_frame; ! ! Lisp_Object first_event; ! ! int junk; + last_nonmenu_event = Qnil; + + delayed_switch_frame = Qnil; + fkey_map = Vfunction_key_map; /* If there is no function key map, turn off function key scanning. */ *************** *** 3597,3602 **** fkey_start = fkey_end = bufsize + 1; - last_nonmenu_event = Qnil; - if (INTERACTIVE) { --- 3617,3620 ---- *************** *** 3615,3618 **** --- 3633,3645 ---- keys_start = this_command_key_count; + #if 0 /* This doesn't quite work, because some of the things + that read_char does cannot safely be bypassed. + It seems too risky to try to make this work right. */ + /* Read the first char of the sequence specially, before setting + up any keymaps, in case a filter runs and switches buffers on us. */ + first_event = read_char (!prompt, 0, submaps, last_nonmenu_event, + &junk); + #endif + /* We jump here when the key sequence has been thoroughly changed, and we need to rescan it starting from the beginning. When we jump here, *************** *** 3711,3714 **** --- 3738,3743 ---- else { + struct buffer *buf = current_buffer; + last_real_key_start = t; *************** *** 3790,3793 **** --- 3819,3826 ---- mock_input = t + 2; + /* If we switched buffers while reading the first event, + replay in case we switched keymaps too. */ + if (buf != current_buffer && t == 0) + goto replay_sequence; goto replay_key; } *************** *** 3826,3829 **** --- 3859,3871 ---- } } + } + + /* If we switched buffers while reading the first event, + replay in case we switched keymaps too. */ + if (buf != current_buffer && t == 0) + { + keybuf[t++] = key; + mock_input = t; + goto replay_sequence; } } diff -rc2P --exclude-from=exceptions emacs-19.9/src/keymap.c emacs-19.10/src/keymap.c *** emacs-19.9/src/keymap.c Sat May 22 14:58:04 1993 --- emacs-19.10/src/keymap.c Fri May 28 18:31:29 1993 *************** *** 2013,2017 **** pointed to by a C variable */ ! global_map = Fmake_keymap (Qnil); Fset (intern ("global-map"), global_map); --- 2013,2018 ---- pointed to by a C variable */ ! global_map = Fcons (Qkeymap, ! Fcons (Fmake_vector (make_number (0400), Qnil))); Fset (intern ("global-map"), global_map); diff -rc2P --exclude-from=exceptions emacs-19.9/src/m/ibmrt.h emacs-19.10/src/m/ibmrt.h *** emacs-19.9/src/m/ibmrt.h Tue Jul 7 15:52:28 1992 --- emacs-19.10/src/m/ibmrt.h Sat May 29 02:19:14 1993 *************** *** 126,130 **** --- 126,132 ---- /* Special switches to give the C compiler. */ + #ifndef __GNUC__ #define C_SWITCH_MACHINE -Dalloca=_Alloca + #endif /* Don't attempt to relabel some of the data as text when dumping. *************** *** 133,134 **** --- 135,142 ---- #define NO_REMAP + + /* rocky@watson.ibm.com says this is needed. */ + #define HAVE_FTIME + + /* Use the bitmap files that come with Emacs. */ + #define EMACS_BITMAP_FILES diff -rc2P --exclude-from=exceptions emacs-19.9/src/m/tekXD88.h emacs-19.10/src/m/tekXD88.h *** emacs-19.9/src/m/tekXD88.h --- emacs-19.10/src/m/tekXD88.h Sat May 29 16:58:02 1993 *************** *** 0 **** --- 1,184 ---- + /* m- file for Tektronix XD88 running UTekV 3.2e to be used with s-usg5-3.h, + contributed by Kaveh Ghazi (ghazi@caip.rutgers.edu) 1/15/93. + You probably need to use gnu make (version 3.63 or higher.) + Copyright (C) 1993 Free Software Foundation, Inc. + + This file is part of GNU Emacs. + + GNU Emacs is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY. No author or distributor + accepts responsibility to anyone for the consequences of using it + or for whether it serves any particular purpose or works at all, + unless he says so in writing. Refer to the GNU Emacs General Public + License for full details. + + Everyone is granted permission to copy, modify and redistribute + GNU Emacs, but only under the conditions described in the + GNU Emacs General Public License. A copy of this license is + supposed to have been given to you along with GNU Emacs so you + can know your rights and responsibilities. It should be in a + file named COPYING. Among other things, the copyright notice + and this notice must be preserved on all copies. */ + + /* The following three symbols give information on + the size of various data types. */ + #define SHORTBITS 16 /* Number of bits in a short */ + #define INTBITS 32 /* Number of bits in an int */ + #define LONGBITS 32 /* Number of bits in a long */ + + /* Define BIG_ENDIAN iff lowest-numbered byte in a word + is the most significant byte. */ + #define BIG_ENDIAN + + /* Define NO_ARG_ARRAY if you cannot take the address of the first of a + * group of arguments and treat it as an array of the arguments. */ + #define NO_ARG_ARRAY + + /* Define WORD_MACHINE if addresses and such have + * to be corrected before they can be used as byte counts. */ + /* #define WORD_MACHINE */ + + /* Now define a symbol for the cpu type, if your compiler + does not define it automatically: + Ones defined so far include vax, m68000, ns16000, pyramid, + orion, tahoe, APOLLO and many others */ + #ifndef m88000 /* Some 88k C compilers already define this */ + #define m88000 + #endif + + /* Define how to take a char and sign-extend into an int. + On machines where char is signed, this is a no-op. */ + #define SIGN_EXTEND_CHAR(c) (c) + + /* Now define a symbol for the cpu type, if your compiler + does not define it automatically. */ + + + /* Use type int rather than a union, to represent Lisp_Object */ + /* This is desirable for most machines. */ + #define NO_UNION_TYPE + + /* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend + the 24-bit bit field into an int. In other words, if bit fields + are always unsigned. + + If you use NO_UNION_TYPE, this flag does not matter. */ + /* #define EXPLICIT_SIGN_EXTEND */ + + /* Data type of load average, as read out of kmem. */ + /* No load average on XD88 machines. */ + /* #define LOAD_AVE_TYPE double */ + + /* Convert that into an integer that is 100 for a load average of 1.0 */ + /* #define LOAD_AVE_CVT(x) ((int) ((x) * 100.0)) */ + + /* Define CANNOT_DUMP on machines where unexec does not work. + Then the function dump-emacs will not be defined + and temacs will do (load "loadup") automatically unless told otherwise. */ + #define CANNOT_DUMP /* oh well, maybe someday ... */ + + /* Define VIRT_ADDR_VARIES if the virtual addresses of + pure and impure space as loaded can vary, and even their + relative order cannot be relied on. + + Otherwise Emacs assumes that text space precedes data space, + numerically. */ + /* #define VIRT_ADDR_VARIES */ + + /* Define NO_REMAP if memory segmentation makes it not work well + to change the boundary between the text section and data section + when Emacs is dumped. If you define this, the preloaded Lisp + code will not be sharable; but that's better than failing completely. */ + #define NO_REMAP + + /* Define C_ALLOCA if this machine does not support a true alloca + and the one written in C should be used instead. + Define HAVE_ALLOCA to say that the system provides a properly + working alloca function and it should be used. + Define neither one if an assembler-language alloca + in the file alloca.s should be used. */ + #ifdef __GNUC__ + # define alloca __builtin_alloca /* Use the gcc builtin alloca() ... */ + # define HAVE_ALLOCA /* ... and be sure that no other ones are tried out. */ + # undef C_ALLOCA + # define C_OPTIMIZE_SWITCH -O2 + #else /* not __GNUC__ */ + # undef HAVE_ALLOCA + # define C_ALLOCA /* Use the alloca() supplied in alloca.c. */ + # define STACK_DIRECTION -1 /* The stack grows towards lower addresses. */ + # define C_OPTIMIZE_SWITCH -O + #endif /* __GNUC__ */ + + /*#define C_DEBUG_SWITCH C_OPTIMIZE_SWITCH*/ /* Uncomment this to optimize */ + + /* XD88 SysV has PTYs. Not all usg3-5 systems do, so this is defined here. */ + #define HAVE_PTYS + #define SYSV_PTYS /* Requires */ + + /* we have job control */ + #undef NOMULTIPLEJOBS + + /* + * sockets are available + */ + #define HAVE_SOCKETS + + /* + * we have Berkeley style + */ + #define HAVE_TIMEVAL + + /* XD88 has select(). */ + #define HAVE_SELECT + #define BROKEN_FIONREAD /* is this needed ? */ + + /* + * don't use utimes, we ain't got one - use utime() instead + */ + #define USE_UTIME + + #define NO_SIOCTL_H + + /* We need HAVE_TCATTR to prevent Ctrl-Z from suspending Emacs before + suspend-emacs has been called. */ + /*#define HAVE_TCATTR*/ + /* TCATTR gives bogus baud rates. Use the following for OSPEED instead. */ + /*#define OSPEED(str) (cfgetospeed(&(str)))*/ + #define HAVE_TERMIOS + #undef HAVE_TERMIO + + #define BSTRING /* its in libc but not declared in any <*.h> file. */ + #define HAVE_TZSET + #define HAVE_SETSID + #define HAVE_RENAME + + #ifdef ghs /* Stands for "Green Hills Software", defined in /bin/cc */ + /* Only required for use with the Green Hills compiler: + -X18 Do not allocate programmer-defined local variables to a + register unless they are declared register. (From building + perl-4.036 Green Hills hints. Might be needed for setjmp.) + */ + #define C_SWITCH_MACHINE -X18 + /* We need /lib/default.ld so the bundled ld can read its link directives. */ + #define LD_SWITCH_SYSTEM /lib/default.ld + #endif /* ghs */ + + /* XD88 does not have the random() and srandom() calls in the base system, + but they exist in libX11.a. So, if you are building with X11 then you + will need to define HAVE_RANDOM. */ + #ifdef HAVE_X_WINDOWS + #define HAVE_RANDOM + #undef LIB_X11_LIB /* don't use the shared library default from usg5-3.h */ + #undef LIBX11_SYSTEM + #endif /* HAVE_X_WINDOWS */ + + /*#define SYSTEM_MALLOC*/ + + #ifndef UTEKV + #define UTEKV /* system specific symbol */ + #endif /* !UTEKV */ + + /* stuff to hopefully someday get dumping working ... */ + /*#define SECTION_ALIGNMENT 0x1ff*/ + /*#define SEGMENT_MASK 0xff*/ + /*#define A_TEXT_OFFSET(HDR) sizeof(HDR)*/ diff -rc2P --exclude-from=exceptions emacs-19.9/src/process.c emacs-19.10/src/process.c *** emacs-19.9/src/process.c Tue May 25 18:56:46 1993 --- emacs-19.10/src/process.c Sat May 29 01:01:50 1993 *************** *** 236,240 **** --- 236,244 ---- And better not to risk that it might define other symbols used in this file. */ + #ifdef FD_SETSIZE + #define MAXDESC FD_SETSIZE + #else #define MAXDESC 64 + #endif #define SELECT_TYPE fd_set #else /* no FD_SET */ diff -rc2P --exclude-from=exceptions emacs-19.9/src/regex.h emacs-19.10/src/regex.h *** emacs-19.9/src/regex.h Fri Apr 2 18:17:33 1993 --- emacs-19.10/src/regex.h Thu May 27 20:10:45 1993 *************** *** 2,6 **** expression library, version 0.12. ! Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify --- 2,6 ---- expression library, version 0.12. ! Copyright (C) 1985, 89, 90, 91, 92, 1993 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify diff -rc2P --exclude-from=exceptions emacs-19.9/src/s/hpux8.h emacs-19.10/src/s/hpux8.h *** emacs-19.9/src/s/hpux8.h Wed May 26 19:06:52 1993 --- emacs-19.10/src/s/hpux8.h Sat May 29 02:24:52 1993 *************** *** 9,12 **** --- 9,15 ---- #define HPUX8 + /* dob@inel.gov says HPUX 8.07 needs this. He was using X11R5, I think. */ + #define LIBX11_SYSTEM -lXext + #define LIB_X11_LIB -L/usr/lib/X11R5 -L/usr/lib/X11R4 -lX11 #define C_SWITCH_SYSTEM -I/usr/lib/X11R5 -I/usr/include/X11R4 *************** *** 25,29 **** /* Specify compiler options for compiling oldXMenu. */ ! #define OLDXMENU_OPTIONS CFLAGS=-I/usr/include/X11R5 -I/usr/include/X11R4 /* Some hpux 8 machines seem to have TIOCGWINSZ, --- 28,32 ---- /* Specify compiler options for compiling oldXMenu. */ ! #define OLDXMENU_OPTIONS CFLAGS="-I/usr/include/X11R5 -I/usr/include/X11R4" /* Some hpux 8 machines seem to have TIOCGWINSZ, *************** *** 31,33 **** #define NO_SIOCTL_H ! #define HAVE_RANDOM --- 34,38 ---- #define NO_SIOCTL_H ! /* If you use X11R4 you must define this. If you use ! X11R5 you must comment this out */ ! /* #define HAVE_RANDOM */ diff -rc2P --exclude-from=exceptions emacs-19.9/src/s/linux.h emacs-19.10/src/s/linux.h *** emacs-19.9/src/s/linux.h Wed May 26 20:20:44 1993 --- emacs-19.10/src/s/linux.h Sat May 29 17:25:08 1993 *************** *** 185,189 **** --- 185,193 ---- #define LIBS_TERMCAP -ltermcap -lcurses /* save some space with shared libs*/ #define LIB_STANDARD -lc /* avoid -lPW */ + #define C_OPTIMIZE_SWITCH /* configure can guess this just fine */ #ifdef HAVE_X11 #define LD_SWITCH_SYSTEM -L/usr/X386/lib #endif + + /* Let's try this out, just in case. */ + #define SIGNALS_VIA_CHARACTERS diff -rc2P --exclude-from=exceptions emacs-19.9/src/s/sco4.h emacs-19.10/src/s/sco4.h *** emacs-19.9/src/s/sco4.h Sun May 23 18:01:53 1993 --- emacs-19.10/src/s/sco4.h Sat May 29 00:59:20 1993 *************** *** 39,46 **** #define HAVE_PTYS #define PTY_NAME_SPRINTF \ ! sprintf (pty_name, "/dev/ptyp%d", ((c - FIRST_PTY_LETTER) * 16) + i); #define PTY_TTY_NAME_SPRINTF \ ! sprintf (pty_name, "/dev/ttyp%d", ((c - FIRST_PTY_LETTER) * 16) + i); /* SCO has bcopy, et. al. */ --- 39,48 ---- #define HAVE_PTYS + #define PTY_ITERATION \ + for (i = 0; ; i++) #define PTY_NAME_SPRINTF \ ! sprintf (pty_name, "/dev/ptyp%d", i); #define PTY_TTY_NAME_SPRINTF \ ! sprintf (pty_name, "/dev/ttyp%d", i); /* SCO has bcopy, et. al. */ *************** *** 47,51 **** #define BSTRING ! /* Sockets are an option on SCO. If we have X, we have them. */ #ifdef HAVE_X_WINDOWS #define HAVE_SOCKETS --- 49,55 ---- #define BSTRING ! /* Sockets are an option on SCO. If you have X, you have them. ! They also exist if you have TCP, but we don't know how to test ! for that. */ #ifdef HAVE_X_WINDOWS #define HAVE_SOCKETS *************** *** 54,57 **** --- 58,64 ---- #ifdef HAVE_SOCKETS #define LIBS_SYSTEM -lsocket + + /* SCO has gettimeofday in socket library */ + #define HAVE_GETTIMEOFDAY #endif *************** *** 66,67 **** --- 73,86 ---- #define START_FILES pre-crt0.o /lib/crt1.o #define LIB_STANDARD -lc /lib/crtn.o + + /* Send signals to subprocesses by "typing" signal chars at them. */ + #define SIGNALS_VIA_CHARACTERS + + /* Specify program for etc/fakemail to run. Define SMAIL if you are + using smail, don't for MMDF. */ + + #ifdef SMAIL + #define MAIL_PROGRAM_NAME "/bin/smail -q0" + #else + #define MAIL_PROGRAM_NAME "/usr/lib/mail/execmail" + #endif diff -rc2P --exclude-from=exceptions emacs-19.9/src/s/usg5-4-2.h emacs-19.10/src/s/usg5-4-2.h *** emacs-19.9/src/s/usg5-4-2.h --- emacs-19.10/src/s/usg5-4-2.h Sat May 29 20:52:14 1993 *************** *** 0 **** --- 1,17 ---- + /* s/ file for System V release 4.2. */ + + #include "s/usg5-4.h" + + /* fsf@cygnus.com says these exist. */ + #define HAVE_VFORK + #define HAVE_TCATTR + #define HAVE_SYSV_SIGPAUSE + #define HAVE_GETHOSTNAME + #define HAVE_RANDOM + /* #define HAVE_GETWD (appears to be buggy on SVR4.2) */ + + /* Info from fnf@cygnus.com suggests this is appropriate. */ + #define POSIX_SIGNALS + + /* We don't need the definition from usg5-3.h with POSIX_SIGNALS. */ + #undef sigsetmask diff -rc2P --exclude-from=exceptions emacs-19.9/src/sysdep.c emacs-19.10/src/sysdep.c *** emacs-19.9/src/sysdep.c Wed May 26 22:05:17 1993 --- emacs-19.10/src/sysdep.c Sat May 29 20:50:01 1993 *************** *** 2114,2118 **** sigemptyset (&new_action.sa_mask); new_action.sa_handler = action; ! new_action.sa_flags = NULL; sigaction (signal_number, &new_action, &old_action); return (old_action.sa_handler); --- 2114,2118 ---- sigemptyset (&new_action.sa_mask); new_action.sa_handler = action; ! new_action.sa_flags = 0; sigaction (signal_number, &new_action, &old_action); return (old_action.sa_handler); *************** *** 2534,2538 **** 0 }; ! #endif HAVE_SYS_SIGLIST /* --- 2534,2538 ---- 0 }; ! #endif /* HAVE_SYS_SIGLIST */ /* *************** *** 2705,2709 **** tp->tv_sec = time ((long *)0); tp->tv_usec = 0; ! tzp->tz_minuteswest = -1; } --- 2705,2710 ---- tp->tv_sec = time ((long *)0); tp->tv_usec = 0; ! if (tzp != 0) ! tzp->tz_minuteswest = -1; } diff -rc2P --exclude-from=exceptions emacs-19.9/src/systty.h emacs-19.10/src/systty.h *** emacs-19.9/src/systty.h Thu May 27 01:22:21 1993 --- emacs-19.10/src/systty.h Sat May 29 16:45:46 1993 *************** *** 178,181 **** --- 178,182 ---- #else /* not _POSIX_VDISABLE */ #ifdef CDEL + #undef CDISABLE #define CDISABLE CDEL #else /* not CDEL */ diff -rc2P --exclude-from=exceptions emacs-19.9/src/xdisp.c emacs-19.10/src/xdisp.c *** emacs-19.9/src/xdisp.c Wed May 26 18:09:14 1993 --- emacs-19.10/src/xdisp.c Sat May 29 16:41:08 1993 *************** *** 93,96 **** --- 93,99 ---- static int overlay_arrow_seen; + /* Nonzero means highlight the region even in nonselected windows. */ + static int highlight_nonselected_windows; + /* If cursor motion alone moves point off frame, Try scrolling this many lines up or down if that will bring it back. */ *************** *** 1725,1730 **** /* Show where to highlight the region. */ if (highlight_region && XMARKER (current_buffer->mark)->buffer != 0 ! /* Highlight only in selected window. */ ! && w == XWINDOW (FRAME_SELECTED_WINDOW (f))) { region_beg = marker_position (current_buffer->mark); --- 1728,1734 ---- /* Show where to highlight the region. */ if (highlight_region && XMARKER (current_buffer->mark)->buffer != 0 ! /* Maybe highlight only in selected window. */ ! && (highlight_nonselected_windows ! || w == XWINDOW (selected_window))) { region_beg = marker_position (current_buffer->mark); *************** *** 2837,2840 **** --- 2841,2848 ---- "*Maximum buffer size for which line number should be displayed."); line_number_display_limit = 1000000; + + DEFVAR_BOOL ("highlight-nonselected-windows", &highlight_nonselected_windows, + "*Non-nil means highlight region even in nonselected windows."); + highlight_nonselected_windows = 1; } diff -rc2P --exclude-from=exceptions emacs-19.9/src/xfaces.c emacs-19.10/src/xfaces.c *** emacs-19.9/src/xfaces.c Tue May 25 08:42:35 1993 --- emacs-19.10/src/xfaces.c Sat May 29 17:10:01 1993 *************** *** 35,38 **** --- 35,44 ---- #include "window.h" + /* Compensate for bug in Xos.h on hpux. */ + #if HPUX + #include + #define __TIMEVAL__ + #endif + /* Display Context for the icons */ #include diff -rc2P --exclude-from=exceptions emacs-19.9/src/xfns.c emacs-19.10/src/xfns.c *** emacs-19.9/src/xfns.c Thu May 27 01:20:42 1993 --- emacs-19.10/src/xfns.c Sat May 29 01:57:51 1993 *************** *** 332,341 **** /* Same here. */ Lisp_Object left, top; - - XSET (width, Lisp_Int, FRAME_WIDTH (f)); - XSET (height, Lisp_Int, FRAME_HEIGHT (f)); ! XSET (top, Lisp_Int, f->display.x->top_pos); ! XSET (left, Lisp_Int, f->display.x->left_pos); for (tail = alist; CONSP (tail); tail = Fcdr (tail)) --- 332,337 ---- /* Same here. */ Lisp_Object left, top; ! width = height = top = left = Qnil; for (tail = alist; CONSP (tail); tail = Fcdr (tail)) *************** *** 347,357 **** val = Fcdr (elt); ! if (EQ (prop, Qwidth)) width = val; ! else if (EQ (prop, Qheight)) height = val; ! else if (EQ (prop, Qtop)) top = val; ! else if (EQ (prop, Qleft)) left = val; else --- 343,356 ---- val = Fcdr (elt); ! /* Ignore all but the first set presented. You're supposed to ! be able to append two parameter lists and have the first ! shadow the second. */ ! if (EQ (prop, Qwidth) && NILP (width)) width = val; ! else if (EQ (prop, Qheight) && NILP (height)) height = val; ! else if (EQ (prop, Qtop) && NILP (top)) top = val; ! else if (EQ (prop, Qleft) && NILP (left)) left = val; else *************** *** 374,377 **** --- 373,382 ---- Lisp_Object frame; + if (NILP (width)) XSET (width, Lisp_Int, FRAME_WIDTH (f)); + if (NILP (height)) XSET (height, Lisp_Int, FRAME_HEIGHT (f)); + + if (NILP (top)) XSET (top, Lisp_Int, f->display.x->top_pos); + if (NILP (left)) XSET (left, Lisp_Int, f->display.x->left_pos); + XSET (frame, Lisp_Frame, f); if (XINT (width) != FRAME_WIDTH (f) *************** *** 1411,1418 **** error ("Must specify *both* height and width"); ! f->display.x->vertical_scroll_bar_extra = ! (FRAME_HAS_VERTICAL_SCROLL_BARS (f) ! ? VERTICAL_SCROLL_BAR_PIXEL_WIDTH (f) ! : 0); f->display.x->pixel_width = CHAR_TO_PIXEL_WIDTH (f, f->width); f->display.x->pixel_height = CHAR_TO_PIXEL_HEIGHT (f, f->height); --- 1416,1423 ---- error ("Must specify *both* height and width"); ! f->display.x->vertical_scroll_bar_extra ! = (FRAME_HAS_VERTICAL_SCROLL_BARS (f) ! ? VERTICAL_SCROLL_BAR_PIXEL_WIDTH (f) ! : 0); f->display.x->pixel_width = CHAR_TO_PIXEL_WIDTH (f, f->width); f->display.x->pixel_height = CHAR_TO_PIXEL_HEIGHT (f, f->height); *************** *** 1432,1435 **** --- 1437,1443 ---- error ("Must specify *both* top and left corners"); + #if 0 /* PPosition and PSize mean "specified explicitly, + by the program rather than by the user". So it is wrong to + set them if nothing was specified. */ switch (window_prompting) { *************** *** 1458,1461 **** --- 1466,1471 ---- abort (); } + #endif + return window_prompting; } *************** *** 2166,2170 **** CHECK_SYMBOL (face, 1); if (!NILP (frame)) ! CHECK_SYMBOL (frame, 2); if (NILP (face)) --- 2176,2180 ---- CHECK_SYMBOL (face, 1); if (!NILP (frame)) ! CHECK_LIVE_FRAME (frame, 2); if (NILP (face)) *************** *** 3502,3505 **** --- 3512,3516 ---- XSetCloseDownMode (x_current_display, DestroyAll); XCloseDisplay (x_current_display); + x_current_display = 0; } else diff -rc2P --exclude-from=exceptions emacs-19.9/src/xmenu.c emacs-19.10/src/xmenu.c *** emacs-19.9/src/xmenu.c Sat May 22 16:51:55 1993 --- emacs-19.10/src/xmenu.c Sat May 29 16:46:22 1993 *************** *** 64,68 **** #define TRUE 1 #define FALSE 0 ! #endif TRUE #ifdef HAVE_X11 --- 64,68 ---- #define TRUE 1 #define FALSE 0 ! #endif /* TRUE */ #ifdef HAVE_X11 diff -rc2P --exclude-from=exceptions emacs-19.9/src/xterm.c emacs-19.10/src/xterm.c *** emacs-19.9/src/xterm.c Wed May 26 01:08:31 1993 --- emacs-19.10/src/xterm.c Sat May 29 22:28:57 1993 *************** *** 831,834 **** --- 831,837 ---- XTring_bell () { + if (x_current_display == 0) + return; + #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) if (visible_bell) *************** *** 1078,1082 **** dumpborder (f, 0); } ! #endif /* HAVE_X11 /* Window manger does this for X11. */ */ /* Convert rectangle edges in pixels to edges in chars. --- 1081,1085 ---- dumpborder (f, 0); } ! #endif /* HAVE_X11 Window manger does this for X11. */ /* Convert rectangle edges in pixels to edges in chars. *************** *** 2811,2814 **** --- 2814,2823 ---- display that won't ever be seen. */ f->async_visible = 0; + /* The window manager never makes a window invisible + ("withdrawn"); all it does is switch between visible + and iconified. Frames get into the invisible state + only through x_make_frame_invisible. + if (FRAME_VISIBLE_P (f) || FRAME_ICONIFIED_P (f)) + f->async_iconified = 1; } break; *************** *** 2875,2878 **** --- 2884,2893 ---- || IsCursorKey (keysym) /* 0xff50 <= x < 0xff60 */ || IsMiscFunctionKey (keysym) /* 0xff60 <= x < 0xff80 */ + #ifdef HPUX + /* This recognizes the "extended function keys". + It seems there's no cleaner way. */ + || ((unsigned) (keysym) >= XK_Select + && (unsigned)(keysym) < XK_KP_Space) + #endif || IsKeypadKey (keysym) /* 0xff80 <= x < 0xffbe */ || IsFunctionKey (keysym)) /* 0xffbe <= x < 0xffe1 */ *************** *** 3623,3632 **** #ifdef HAVE_X11 ! if (icon_bitmap) ! XFreePixmap (x_current_display, icon_bitmap); ! ! icon_bitmap = ! XCreateBitmapFromData (x_current_display, FRAME_X_WINDOW (f), ! gnu_bits, gnu_width, gnu_height); x_wm_set_icon_pixmap (f, icon_bitmap); f->display.x->icon_bitmap_flag = 1; --- 3638,3645 ---- #ifdef HAVE_X11 ! if (! icon_bitmap) ! icon_bitmap = ! XCreateBitmapFromData (x_current_display, FRAME_X_WINDOW (f), ! gnu_bits, gnu_width, gnu_height); x_wm_set_icon_pixmap (f, icon_bitmap); f->display.x->icon_bitmap_flag = 1; *************** *** 3751,3755 **** abort (); ! shut_down_emacs (0); exit (70); --- 3764,3768 ---- abort (); ! shut_down_emacs (0, 1); exit (70); *************** *** 4274,4278 **** int mask; ! if (! f->async_visible) return; --- 4287,4295 ---- int mask; ! /* Don't keep the highlight on an invisible frame. */ ! if (x_highlight_frame == f) ! x_highlight_frame = 0; ! ! if (! f->async_visible && ! f->async_iconified) return; *************** *** 4334,4337 **** --- 4351,4358 ---- { int mask; + + /* Don't keep the highlight on an invisible frame. */ + if (x_highlight_frame == f) + x_highlight_frame = 0; if (f->async_iconified) diff -rc2P --exclude-from=exceptions emacs-19.9/src/ymakefile emacs-19.10/src/ymakefile *** emacs-19.9/src/ymakefile Thu May 27 01:09:09 1993 --- emacs-19.10/src/ymakefile Fri May 28 23:26:28 1993 *************** *** 22,26 **** dot = . /* On Xenix and the IBM RS6000, double-dot gets screwed up. */ ! lispdir = $(dot)$(dot)/lisp/ libsrc = $(dot)$(dot)/lib-src/ etc = $(dot)$(dot)/etc/ --- 22,26 ---- dot = . /* On Xenix and the IBM RS6000, double-dot gets screwed up. */ ! lispdir = ${srcdir}/$(dot)$(dot)/lisp/ libsrc = $(dot)$(dot)/lib-src/ etc = $(dot)$(dot)/etc/ *************** *** 363,366 **** --- 363,369 ---- #define UNEXEC unexec.o #endif + #ifndef UNEXEC_SRC + #define UNEXEC_SRC unexec.c + #endif #ifdef USE_TEXT_PROPERTIES *************** *** 580,585 **** ${LN_S} ${oldXMenudir}libXMenu11.a $(OLDXMENU) really-oldXMenu: ! cd ${oldXMenudir}; ${MAKE} ${MFLAGS} OLDXMENU_OPTIONS "C_SWITCH_SITE"=C_SWITCH_X_SITE "C_SWITCH_SYSTEM"=C_SWITCH_SYSTEM @true /* make -t should not create really-oldXMenu. */ #endif /* ! defined (HAVE_X11) */ --- 583,592 ---- ${LN_S} ${oldXMenudir}libXMenu11.a $(OLDXMENU) + /* Encode the values of these two macros in Make variables, + so we can use $(...) to substitute their values within "...". */ + C_SWITCH_SYSTEM_1 = C_SWITCH_SYSTEM + C_SWITCH_X_SITE_1 = C_SWITCH_X_SITE really-oldXMenu: ! cd ${oldXMenudir}; ${MAKE} ${MFLAGS} OLDXMENU_OPTIONS "C_SWITCH_SITE=$(C_SWITCH_X_SITE_1)" "C_SWITCH_SYSTEM=$(C_SWITCH_SYSTEM_1)" @true /* make -t should not create really-oldXMenu. */ #endif /* ! defined (HAVE_X11) */ *************** *** 619,623 **** /* remove any ^L, blank lines, and preprocessor comments, since some assemblers barf on them */ ! $(CPP) allocatem.c | \ sed -e 's/ //' -e 's/^#.*//' | \ sed -n -e '/^..*$$/p' > allocatem.s --- 626,630 ---- /* remove any ^L, blank lines, and preprocessor comments, since some assemblers barf on them */ ! $(CPP) $(CPPFLAGS) $(ALL_CFLAGS) allocatem.c | \ sed -e 's/ //' -e 's/^#.*//' | \ sed -n -e '/^..*$$/p' > allocatem.s *************** *** 624,628 **** -rm -f alloca.o /* Xenix, in particular, needs to run assembler via cc. */ ! cc -c allocatem.s mv allocatem.o alloca.o rm allocatem.s allocatem.c --- 631,635 ---- -rm -f alloca.o /* Xenix, in particular, needs to run assembler via cc. */ ! $(CC) -c allocatem.s mv allocatem.o alloca.o rm allocatem.s allocatem.c *************** *** 635,710 **** and so rarely changed in ways that do require any. */ ! abbrev.o : abbrev.c buffer.h commands.h config.h buffer.o : buffer.c syntax.h buffer.h commands.h window.h \ ! INTERVAL_SRC blockinput.h config.h callint.o : callint.c window.h commands.h buffer.h mocklisp.h \ ! keyboard.h config.h ! callproc.o : callproc.c paths.h buffer.h commands.h config.h process.h ! casefiddle.o : casefiddle.c syntax.h commands.h buffer.h config.h ! casetab.o : casetab.c buffer.h config.h ! cm.o : cm.c cm.h termhooks.h config.h ! cmds.o : cmds.c syntax.h buffer.h commands.h config.h ! crt0.o : crt0.c config.h $(CC) -c $(ALL_CFLAGS) C_SWITCH_ASM ${srcdir}/crt0.c ! dired.o : dired.c commands.h buffer.h config.h regex.h dispnew.o : dispnew.c commands.h frame.h window.h buffer.h dispextern.h \ ! termchar.h termopts.h termhooks.h cm.h disptab.h systty.h systime.h config.h ! doc.o : doc.c config.h paths.h buffer.h keyboard.h doprnt.o : doprnt.c ! editfns.o : editfns.c window.h buffer.h systime.h INTERVAL_SRC config.h ! emacs.o : emacs.c commands.h systty.h INTERVAL_SRC config.h ! fileio.o : fileio.c window.h buffer.h systime.h INTERVAL_SRC config.h ! filelock.o : filelock.c buffer.h paths.h config.h filemode.o : filemode.c ! getloadavg.o : getloadavg.c config.h ! indent.o : indent.c frame.h window.h indent.h buffer.h config.h termchar.h \ termopts.h disptab.h ! insdel.o : insdel.c window.h buffer.h INTERVAL_SRC blockinput.h config.h keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h \ commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \ ! systty.h systime.h dispextern.h intervals.h blockinput.h config.h keymap.o : keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \ ! config.h lastfile.o : lastfile.c ! macros.o : macros.c window.h buffer.h commands.h macros.h config.h ! malloc.o : malloc.c config.h ! gmalloc.o : gmalloc.c config.h ! ralloc.o : ralloc.c config.h ! vm-limit.o : vm-limit.c mem-limits.h config.h ! marker.o : marker.c buffer.h config.h minibuf.o : minibuf.c syntax.h dispextern.h frame.h window.h \ ! buffer.h commands.h config.h ! mocklisp.o : mocklisp.c buffer.h config.h process.o : process.c process.h buffer.h window.h termhooks.h termopts.h \ ! commands.h syssignal.h systime.h systty.h frame.h config.h ! regex.o : regex.c syntax.h buffer.h config.h regex.h frame.o : frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \ ! buffer.h config.h ! scroll.o : scroll.c termchar.h config.h dispextern.h frame.h ! search.o : search.c regex.h commands.h buffer.h syntax.h blockinput.h config.h ! syntax.o : syntax.c syntax.h buffer.h commands.h config.h ! sysdep.o : sysdep.c config.h dispextern.h termhooks.h termchar.h termopts.h \ frame.h syssignal.h systty.h systime.h blockinput.h window.h ! term.o : term.c termchar.h termhooks.h termopts.h config.h cm.h frame.h \ disptab.h ! termcap.o : termcap.c config.h ! terminfo.o : terminfo.c config.h ! tparam.o : tparam.c config.h ! undo.o : undo.c buffer.h commands.h config.h ! UNEXEC : config.h window.o : window.c indent.h commands.h frame.h window.h buffer.h termchar.h \ ! termhooks.h disptab.h keyboard.h config.h xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h \ ! termchar.h frame.h window.h disptab.h termhooks.h config.h xfaces.o : xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \ ! window.h config.h xfns.o : xfns.c buffer.h frame.h window.h keyboard.h xterm.h \ ! blockinput.h config.h ! xmenu.o : xmenu.c xterm.h window.h frame.h keyboard.h blockinput.h config.h xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h window.h \ dispextern.h frame.h disptab.h blockinput.h systime.h \ ! gnu.h sink.h sinkmask.h config.h ! xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h config.h ! xrdb.o : xrdb.c config.h /* The files of Lisp proper */ --- 642,717 ---- and so rarely changed in ways that do require any. */ ! abbrev.o : abbrev.c buffer.h commands.h $(config_h) buffer.o : buffer.c syntax.h buffer.h commands.h window.h \ ! INTERVAL_SRC blockinput.h $(config_h) callint.o : callint.c window.h commands.h buffer.h mocklisp.h \ ! keyboard.h $(config_h) ! callproc.o : callproc.c paths.h buffer.h commands.h $(config_h) process.h ! casefiddle.o : casefiddle.c syntax.h commands.h buffer.h $(config_h) ! casetab.o : casetab.c buffer.h $(config_h) ! cm.o : cm.c cm.h termhooks.h $(config_h) ! cmds.o : cmds.c syntax.h buffer.h commands.h $(config_h) ! crt0.o : crt0.c $(config_h) $(CC) -c $(ALL_CFLAGS) C_SWITCH_ASM ${srcdir}/crt0.c ! dired.o : dired.c commands.h buffer.h $(config_h) regex.h dispnew.o : dispnew.c commands.h frame.h window.h buffer.h dispextern.h \ ! termchar.h termopts.h termhooks.h cm.h disptab.h systty.h systime.h $(config_h) ! doc.o : doc.c $(config_h) paths.h buffer.h keyboard.h doprnt.o : doprnt.c ! editfns.o : editfns.c window.h buffer.h systime.h INTERVAL_SRC $(config_h) ! emacs.o : emacs.c commands.h systty.h INTERVAL_SRC $(config_h) ! fileio.o : fileio.c window.h buffer.h systime.h INTERVAL_SRC $(config_h) ! filelock.o : filelock.c buffer.h paths.h $(config_h) filemode.o : filemode.c ! getloadavg.o : getloadavg.c $(config_h) ! indent.o : indent.c frame.h window.h indent.h buffer.h $(config_h) termchar.h \ termopts.h disptab.h ! insdel.o : insdel.c window.h buffer.h INTERVAL_SRC blockinput.h $(config_h) keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h \ commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \ ! systty.h systime.h dispextern.h intervals.h blockinput.h $(config_h) keymap.o : keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \ ! $(config_h) lastfile.o : lastfile.c ! macros.o : macros.c window.h buffer.h commands.h macros.h $(config_h) ! malloc.o : malloc.c $(config_h) ! gmalloc.o : gmalloc.c $(config_h) ! ralloc.o : ralloc.c $(config_h) ! vm-limit.o : vm-limit.c mem-limits.h $(config_h) ! marker.o : marker.c buffer.h $(config_h) minibuf.o : minibuf.c syntax.h dispextern.h frame.h window.h \ ! buffer.h commands.h $(config_h) ! mocklisp.o : mocklisp.c buffer.h $(config_h) process.o : process.c process.h buffer.h window.h termhooks.h termopts.h \ ! commands.h syssignal.h systime.h systty.h frame.h $(config_h) ! regex.o : regex.c syntax.h buffer.h $(config_h) regex.h frame.o : frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \ ! buffer.h $(config_h) ! scroll.o : scroll.c termchar.h $(config_h) dispextern.h frame.h ! search.o : search.c regex.h commands.h buffer.h syntax.h blockinput.h $(config_h) ! syntax.o : syntax.c syntax.h buffer.h commands.h $(config_h) ! sysdep.o : sysdep.c $(config_h) dispextern.h termhooks.h termchar.h termopts.h \ frame.h syssignal.h systty.h systime.h blockinput.h window.h ! term.o : term.c termchar.h termhooks.h termopts.h $(config_h) cm.h frame.h \ disptab.h ! termcap.o : termcap.c $(config_h) ! terminfo.o : terminfo.c $(config_h) ! tparam.o : tparam.c $(config_h) ! undo.o : undo.c buffer.h commands.h $(config_h) ! UNEXEC : UNEXEC_SRC $(config_h) window.o : window.c indent.h commands.h frame.h window.h buffer.h termchar.h \ ! termhooks.h disptab.h keyboard.h $(config_h) xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h \ ! termchar.h frame.h window.h disptab.h termhooks.h $(config_h) xfaces.o : xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \ ! window.h $(config_h) xfns.o : xfns.c buffer.h frame.h window.h keyboard.h xterm.h \ ! blockinput.h $(config_h) ! xmenu.o : xmenu.c xterm.h window.h frame.h keyboard.h blockinput.h $(config_h) xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h window.h \ dispextern.h frame.h disptab.h blockinput.h systime.h \ ! gnu.h sink.h sinkmask.h $(config_h) ! xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h $(config_h) ! xrdb.o : xrdb.c $(config_h) /* The files of Lisp proper */ *************** *** 711,726 **** alloc.o : alloc.c frame.h window.h buffer.h puresize.h syssignal.h \ ! blockinput.h config.h INTERVAL_SRC ! bytecode.o : bytecode.c buffer.h config.h ! data.o : data.c buffer.h puresize.h syssignal.h config.h ! eval.o : eval.c commands.h keyboard.h blockinput.h config.h ! floatfns.o : floatfns.c config.h ! fns.o : fns.c commands.h config.h frame.h buffer.h keyboard.h ! print.o : print.c process.h frame.h window.h buffer.h config.h ! lread.o : lread.c commands.h keyboard.h buffer.h paths.h config.h termhooks.h /* Text properties support */ ! textprop.o : textprop.c buffer.h intervals.h config.h ! intervals.o : intervals.c buffer.h intervals.h config.h /* System-specific programs to be made. --- 718,733 ---- alloc.o : alloc.c frame.h window.h buffer.h puresize.h syssignal.h \ ! blockinput.h $(config_h) INTERVAL_SRC ! bytecode.o : bytecode.c buffer.h $(config_h) ! data.o : data.c buffer.h puresize.h syssignal.h $(config_h) ! eval.o : eval.c commands.h keyboard.h blockinput.h $(config_h) ! floatfns.o : floatfns.c $(config_h) ! fns.o : fns.c commands.h $(config_h) frame.h buffer.h keyboard.h ! print.o : print.c process.h frame.h window.h buffer.h $(config_h) ! lread.o : lread.c commands.h keyboard.h buffer.h paths.h $(config_h) termhooks.h /* Text properties support */ ! textprop.o : textprop.c buffer.h intervals.h $(config_h) ! intervals.o : intervals.c buffer.h intervals.h $(config_h) /* System-specific programs to be made. *************** *** 728,732 **** select which of these should be compiled. */ ! sunfns.o : sunfns.c buffer.h config.h ${libsrc}emacstool: ${libsrc}emacstool.c --- 735,739 ---- select which of these should be compiled. */ ! sunfns.o : sunfns.c buffer.h $(config_h) ${libsrc}emacstool: ${libsrc}emacstool.c