Changes for Emacs 19.11, from 19.10. Changes in files you can reconstruct with yacc, makeinfo, TeX or the byte compiler have been omitted. Delete the file lisp/cookie.el. Remember to recompile the changed .el files with M-x byte-recompile RET emac-19.11/lisp RET before building and dumping Emacs. Note that you must load the old version of cl.elc in order to compile the new cl.el successfully. diff -rc2P --exclude-from=exceptions emacs-19.10/ChangeLog emacs-19.11/ChangeLog *** emacs-19.10/ChangeLog Sun May 30 00:19:56 1993 --- emacs-19.11/ChangeLog Tue Jun 1 04:29:55 1993 *************** *** 1,2 **** --- 1,48 ---- + Tue Jun 1 00:08:05 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.11 released. + + * configure.in: Handle 386bsd. + + Mon May 31 00:23:47 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * make-dist: Update getdate.c. + + * configure.in: Handle bsd386. + + * Makefile.in (do-install): Use `-' in tar options. + + * configure.in: Change ! "${...}" to x"${...}" = x. + + * Makefile.in (do-install): Copy the DOC-* files from the build + etc directory, as well as lots of things from ${srcdir}/etc. + + * make-dist: Copy config.guess. + + * configure.in: Handle AIX versions 1.2, 1.3. + + Sun May 30 15:37:57 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * configure.in: Use s/bsd4-3.h for mips-mips-riscos4, and add + the configuration name mips-mips-usg* to represent USG systems. + + * configure.in: Fix logic to detect if srcdir is already configured. + + * Makefile.in: Pass in LD_SWITCH_X_SITE. + + * Makefile.in (mkdir, clean, mostlyclean, do-install): Use `(cd + foo && pwd)` instead of `(cd foo ; pwd)` to get the canonical name + of a directory; cd might fail, and have pwd print out the current + directory. + + Sun May 30 14:55:24 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in: When looking for sources, use '.', not `.`. Also '..'. + + Sun May 30 14:23:50 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * configure.in: Complain if srcdir points at an already-configured + tree. + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) diff -rc2P --exclude-from=exceptions emacs-19.10/Makefile.in emacs-19.11/Makefile.in *** emacs-19.10/Makefile.in Sat May 29 17:10:53 1993 --- emacs-19.11/Makefile.in Mon May 31 16:56:32 1993 *************** *** 43,46 **** --- 43,47 ---- CFLAGS=@CFLAGS@ C_SWITCH_X_SITE=@C_SWITCH_X_SITE@ + LD_SWITCH_X_SITE=@LD_SWITCH_X_SITE@ ### These help us choose version- and architecture-specific directories *************** *** 319,322 **** --- 320,325 ---- install: all do-install + ### Note that we copy the DOC-* files from the build etc directory + ### as well as lots of things from ${srcdir}/etc. do-install: mkdir (cd lib-src; \ *************** *** 326,330 **** -set ${COPYDESTS} ; \ for dir in ${COPYDIR} ; do \ ! if [ `(cd $$1 ; pwd)` != `(cd $${dir} ; pwd)` ] ; then \ rm -rf $$1 ; \ fi ; \ --- 329,333 ---- -set ${COPYDESTS} ; \ for dir in ${COPYDIR} ; do \ ! if [ `(cd $$1 && pwd)` != `(cd $${dir} && pwd)` ] ; then \ rm -rf $$1 ; \ fi ; \ *************** *** 336,342 **** dest=$$1 ; shift ; \ [ -d $${dir} ] \ ! && [ `(cd $${dir}; /bin/pwd)` != `(cd $${dest}; /bin/pwd)` ] \ && (echo "Copying $${dir}..." ; \ ! (cd $${dir}; tar cf - . )|(cd $${dest}; umask 0; tar xvf - ); \ for subdir in `find $${dest} -type d ! -name RCS -print` ; do \ rm -rf $${subdir}/RCS ; \ --- 339,345 ---- dest=$$1 ; shift ; \ [ -d $${dir} ] \ ! && [ `(cd $${dir} && /bin/pwd)` != `(cd $${dest} && /bin/pwd)` ] \ && (echo "Copying $${dir}..." ; \ ! (cd $${dir}; tar -cf - . )|(cd $${dest};umask 0; tar -xvf - ); \ for subdir in `find $${dest} -type d ! -name RCS -print` ; do \ rm -rf $${subdir}/RCS ; \ *************** *** 346,350 **** done) ; \ done ! -[ `(cd ${srcdir}/info; /bin/pwd)` != `(cd ${infodir}; /bin/pwd)` ] \ && (cd ${srcdir}/info ; \ if [ ! -f ${infodir}/dir ] && [ -f dir ]; then \ --- 349,356 ---- done) ; \ done ! [ `(cd etc; /bin/pwd)` != `(cd ${srcdir}/etc; /bin/pwd)` ] \ ! && (echo "Copying etc/DOC* ..." ; \ ! (cd etc; tar -cf - DOC*)|(cd ${etcdir}; umask 0; tar -xvf - )) ! -[ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ] \ && (cd ${srcdir}/info ; \ if [ ! -f ${infodir}/dir ] && [ -f dir ]; then \ *************** *** 395,399 **** cd lib-src; $(MAKE) clean cd oldXMenu; $(MAKE) clean ! if [ `(cd ${etcdir} ; /bin/pwd)` != `(cd etc; /bin/pwd)` ] ; then \ cd etc; $(MAKE) clean; \ else true; \ --- 401,405 ---- cd lib-src; $(MAKE) clean cd oldXMenu; $(MAKE) clean ! if [ `(cd ${etcdir} && /bin/pwd)` != `(cd etc && /bin/pwd)` ] ; then \ cd etc; $(MAKE) clean; \ else true; \ diff -rc2P --exclude-from=exceptions emacs-19.10/README emacs-19.11/README *** emacs-19.10/README Sun May 30 02:13:50 1993 --- emacs-19.11/README Tue Jun 1 04:32:32 1993 *************** *** 1,3 **** ! This directory tree holds version 19.10 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. --- 1,3 ---- ! This directory tree holds version 19.11 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. diff -rc2P --exclude-from=exceptions emacs-19.10/config.guess emacs-19.11/config.guess *** emacs-19.10/config.guess --- emacs-19.11/config.guess Tue Jun 1 04:32:31 1993 *************** *** 0 **** --- 1,169 ---- + #!/bin/sh + # This script attempts to guess a canonical system name. + # Copyright (C) 1992, 1993 Free Software Foundation, Inc. + # + # This file 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 of the License, 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 + # 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 + # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + + # + # This script attempts to guess a cononical system name similar to + # config.sub. If it succeeds, it prints the system name on stdout, and + # exits with 0. Otherwise, it prints an error message on stderr, and + # exits with 1. + # + # The plan is that this can be called by configure scripts if you + # don't specify an explicit system type (host/target name). + # + # Only a few systems have been added to this list; please add others + # (but try to keep the structure clean). + # + + UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown + UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown + UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown + UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + + # Note: order is significant - the case branches are not exclusive. + + case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + alpha:OSF1:1.*:*) + echo alpha-dec-osf${UNAME_RELEASE} + exit 0 ;; + sun4*:SunOS:[5-9].*:*) + echo sparc-sun-solaris2 + exit 0 ;; + sun4*:SunOS:*:*) + echo sparc-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + *:IRIX:*:*) + echo mips-sgi-irix${UNAME_RELEASE} + exit 0 ;; + i[34]86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + *:AIX:2:3) + echo rs6000-ibm-aix3.2 + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + 9000/31?:HP-UX:*:*) + echo m68000-hp-hpux + exit 0 ;; + 9000/3??:HP-UX:*:*) + echo m68k-hp-hpux + exit 0 ;; + 9000/7??:HP-UX:*:* | 9000/8?7:HP-UX:*:* ) + echo hppa1.1-hp-hpux + exit 0 ;; + 9000/8??:HP-UX:*:*) + echo hppa1.0-hp-hpux + exit 0 ;; + C1*:ConvexOS:*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:*) + echo c2-convex-bsd + exit 0 ;; + CRAY*X-MP:UNICOS:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:UNICOS:*:*) + echo ymp-cray-unicos + exit 0 ;; + CRAY-2:UNICOS:*:*) + echo cray2-cray-unicos + exit 0 ;; + i[34]86:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux + exit 0 ;; + i[34]86:UNIX_SV:4.*:*) + echo i486-unknown-sysv4 + exit 0 ;; + i[34]86:*:3.2:*) + if /bin/uname -X 2>/dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-unknown-sysv3.2 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + esac + + echo '(No uname command or uname output not recognized.)' 1>&2 + #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + + cat >dummy.c <&2 + + exit 1 diff -rc2P --exclude-from=exceptions emacs-19.10/config.sub emacs-19.11/config.sub *** emacs-19.10/config.sub Sun May 30 02:13:49 1993 --- emacs-19.11/config.sub Tue Jun 1 04:32:31 1993 *************** *** 499,503 **** | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \ | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ ! | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* ) ;; -sunos5*) --- 499,504 ---- | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \ | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ ! | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \ ! | -386bsd*) ;; -sunos5*) diff -rc2P --exclude-from=exceptions emacs-19.10/configure emacs-19.11/configure *** emacs-19.10/configure Sat May 29 17:07:26 1993 --- emacs-19.11/configure Tue Jun 1 04:26:24 1993 *************** *** 297,304 **** 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 "\ --- 297,304 ---- 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 "\ *************** *** 347,350 **** --- 347,359 ---- esac + #### Make sure that the source directory doesn't already have a + #### configured system in it. + if [ `pwd` != `(cd ${srcdir} && pwd)` ] \ + && [ -f "${srcdir}/src/config.h" ] ; then + (echo "${progname}: the directory tree \`${srcdir}' is being used" + echo " as a build directory right now; it has been configured in its own" + echo " right. You can't use srcdir in this situation.") >&2 + exit 1 + fi ### Make the necessary directories, if they don't exist. *************** *** 569,573 **** machine=ibmps2-aix opsys=usg5-2-2 ;; ! i386-ibm-aix1.2 ) machine=ibmps2-aix opsys=usg5-3 ;; --- 578,582 ---- machine=ibmps2-aix opsys=usg5-2-2 ;; ! i386-ibm-aix1.[23] | i386-ibm-aix* ) machine=ibmps2-aix opsys=usg5-3 ;; *************** *** 624,627 **** --- 633,638 ---- *-linux* ) opsys=linux ;; *-sco3.2v4* ) opsys=sco4 ;; + *-bsd386* ) opsys=bsd386 ;; + *-386bsd ) opsys=386bsd ;; ## Otherwise, we'll fall through to the generic opsys code at the bottom. esac *************** *** 670,675 **** ## handling two odd situations, and that every other situation ## should use mips.h and usg5-2-2, they being listed first. mips-mips-riscos4* ) ! machine=mips4 opsys=usg5-2-2 ;; mips-mips-bsd* ) --- 681,690 ---- ## handling two odd situations, and that every other situation ## should use mips.h and usg5-2-2, they being listed first. + mips-mips-usg* ) + machine=mips4 + ## Fall through to the general code at the bottom to decide on the OS. + ;; mips-mips-riscos4* ) ! machine=mips4 opsys=bsd4-3 ;; mips-mips-bsd* ) *************** *** 823,826 **** --- 838,842 ---- *-bsd4.2 | *-ultrix[0-3].* | *-ultrix4.0 ) opsys=bsd4-2 ;; *-bsd4.3 | *-ultrix* ) opsys=bsd4-3 ;; + *-bsd386 ) opsys=bsd386 ;; *-sysv[01]* | *-sysvr[01]* ) opsys=usg5-0 ;; *-sysv2* | *-sysvr2* ) opsys=usg5-2 ;; *************** *** 853,857 **** ### runs, it's cleaner to make it explicit in the case statement ### above. ! if [ ! "${opsys}" ]; then case "${configuration}" in *-bsd4.[01] ) opsys=bsd4-1 ;; --- 869,873 ---- ### runs, it's cleaner to make it explicit in the case statement ### above. ! if [ x"${opsys}" = x ]; then case "${configuration}" in *-bsd4.[01] ) opsys=bsd4-1 ;; *************** *** 922,925 **** --- 938,944 ---- esac + # Save the original args to write them into config.status later. + configure_args="$*" + *************** *** 1744,1748 **** fi ! if [ ! "${REL_ALLOC}" ]; then REL_ALLOC=${GNU_MALLOC} fi --- 1763,1767 ---- fi ! if [ x"${REL_ALLOC}" = x ]; then REL_ALLOC=${GNU_MALLOC} fi *************** *** 1754,1758 **** version=`grep 'defconst[ ]*emacs-version' ${srcdir}/lisp/version.el \ | sed -e 's/^.*"\([0-9][0-9]*\.[0-9][0-9]*\)\..*$/\1/'` ! if [ ! "${version}" ]; then echo "${progname}: can't find current emacs version in \`${srcdir}/lisp/version.el'." >&2 --- 1773,1777 ---- version=`grep 'defconst[ ]*emacs-version' ${srcdir}/lisp/version.el \ | sed -e 's/^.*"\([0-9][0-9]*\.[0-9][0-9]*\)\..*$/\1/'` ! if [ x"${version}" = x ]; then echo "${progname}: can't find current emacs version in \`${srcdir}/lisp/version.el'." >&2 *************** *** 1952,1956 **** # on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # ! # $0 $* for arg --- 1971,1975 ---- # on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # ! # $0 $configure_args for arg *************** *** 1958,1962 **** case "\$arg" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ! exec /bin/sh $0 $* ;; *) echo "Usage: config.status --recheck" 2>&1; exit 1 ;; esac --- 1977,1981 ---- case "\$arg" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ! exec /bin/sh $0 $configure_args ;; *) echo "Usage: config.status --recheck" 2>&1; exit 1 ;; esac diff -rc2P --exclude-from=exceptions emacs-19.10/configure.in emacs-19.11/configure.in *** emacs-19.10/configure.in Sat May 29 16:56:31 1993 --- emacs-19.11/configure.in Tue Jun 1 00:08:03 1993 *************** *** 305,312 **** 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 "\ --- 305,312 ---- 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 "\ *************** *** 355,358 **** --- 355,367 ---- esac + #### Make sure that the source directory doesn't already have a + #### configured system in it. + if [ `pwd` != `(cd ${srcdir} && pwd)` ] \ + && [ -f "${srcdir}/src/config.h" ] ; then + (echo "${progname}: the directory tree \`${srcdir}' is being used" + echo " as a build directory right now; it has been configured in its own" + echo " right. You can't use srcdir in this situation.") >&2 + exit 1 + fi ### Make the necessary directories, if they don't exist. *************** *** 577,581 **** machine=ibmps2-aix opsys=usg5-2-2 ;; ! i386-ibm-aix1.2 ) machine=ibmps2-aix opsys=usg5-3 ;; --- 586,590 ---- machine=ibmps2-aix opsys=usg5-2-2 ;; ! i386-ibm-aix1.[23] | i386-ibm-aix* ) machine=ibmps2-aix opsys=usg5-3 ;; *************** *** 632,635 **** --- 641,646 ---- *-linux* ) opsys=linux ;; *-sco3.2v4* ) opsys=sco4 ;; + *-bsd386* ) opsys=bsd386 ;; + *-386bsd ) opsys=386bsd ;; ## Otherwise, we'll fall through to the generic opsys code at the bottom. esac *************** *** 678,683 **** ## handling two odd situations, and that every other situation ## should use mips.h and usg5-2-2, they being listed first. mips-mips-riscos4* ) ! machine=mips4 opsys=usg5-2-2 ;; mips-mips-bsd* ) --- 689,698 ---- ## handling two odd situations, and that every other situation ## should use mips.h and usg5-2-2, they being listed first. + mips-mips-usg* ) + machine=mips4 + ## Fall through to the general code at the bottom to decide on the OS. + ;; mips-mips-riscos4* ) ! machine=mips4 opsys=bsd4-3 ;; mips-mips-bsd* ) *************** *** 831,834 **** --- 846,850 ---- *-bsd4.2 | *-ultrix[0-3].* | *-ultrix4.0 ) opsys=bsd4-2 ;; *-bsd4.3 | *-ultrix* ) opsys=bsd4-3 ;; + *-bsd386 ) opsys=bsd386 ;; *-sysv[01]* | *-sysvr[01]* ) opsys=usg5-0 ;; *-sysv2* | *-sysvr2* ) opsys=usg5-2 ;; *************** *** 861,865 **** ### runs, it's cleaner to make it explicit in the case statement ### above. ! if [ ! "${opsys}" ]; then case "${configuration}" in *-bsd4.[01] ) opsys=bsd4-1 ;; --- 877,881 ---- ### runs, it's cleaner to make it explicit in the case statement ### above. ! if [ x"${opsys}" = x ]; then case "${configuration}" in *-bsd4.[01] ) opsys=bsd4-1 ;; *************** *** 1086,1090 **** fi ! if [ ! "${REL_ALLOC}" ]; then REL_ALLOC=${GNU_MALLOC} fi --- 1102,1106 ---- fi ! if [ x"${REL_ALLOC}" = x ]; then REL_ALLOC=${GNU_MALLOC} fi *************** *** 1096,1100 **** version=`grep 'defconst[ ]*emacs-version' ${srcdir}/lisp/version.el \ | sed -e 's/^.*"\([0-9][0-9]*\.[0-9][0-9]*\)\..*$/\1/'` ! if [ ! "${version}" ]; then echo "${progname}: can't find current emacs version in \`${srcdir}/lisp/version.el'." >&2 --- 1112,1116 ---- version=`grep 'defconst[ ]*emacs-version' ${srcdir}/lisp/version.el \ | sed -e 's/^.*"\([0-9][0-9]*\.[0-9][0-9]*\)\..*$/\1/'` ! if [ x"${version}" = x ]; then echo "${progname}: can't find current emacs version in \`${srcdir}/lisp/version.el'." >&2 diff -rc2P --exclude-from=exceptions emacs-19.10/etc/LNEWS emacs-19.11/etc/LNEWS *** emacs-19.10/etc/LNEWS Wed May 26 13:15:25 1993 --- emacs-19.11/etc/LNEWS Mon May 31 02:36:06 1993 *************** *** 129,136 **** library itself. ! Write `;;;###autoload' on a line by itself before a function ! definition before the real definition of the function, in its ! autoloadable source file; then the command `M-x update-file-autoloads' ! automatically puts the `autoload' call into `loaddefs.el'. You can also put other kinds of forms into `loaddefs.el', by writing --- 129,136 ---- library itself. ! Write `;;;###autoload' on a line by itself before the real ! definition of the function, in its autoloadable source file; then the ! command `M-x update-file-autoloads' automatically puts the `autoload' ! call into `loaddefs.el'. You can also put other kinds of forms into `loaddefs.el', by writing *************** *** 329,333 **** The precision in any of these cases is the number of digits following ! the decimal point. With `f', a precision of 0 means to omit the decimal point. 0 is not allowed with `f' or `g'. --- 329,333 ---- The precision in any of these cases is the number of digits following ! the decimal point. With `e', a precision of 0 means to omit the decimal point. 0 is not allowed with `f' or `g'. *************** *** 441,448 **** The variables `activate-mark-hook' and `deactivate-mark-hook' are ! normal hooks run, respectively, when the mark becomes active ! andwhen it becomes inactive. The hook `activate-mark-hook' is ! also run at the end of a command if the mark is active and the ! region may have changed. * The function `move-to-column' now accepts a second optional --- 441,448 ---- The variables `activate-mark-hook' and `deactivate-mark-hook' are ! normal hooks run, respectively, when the mark becomes active and ! when it becomes inactive. The hook `activate-mark-hook' is also ! run at the end of a command if the mark is active and the region ! may have changed. * The function `move-to-column' now accepts a second optional *************** *** 495,500 **** and end of the region just changed, and the length of the text that existed before the change. (To get the current length, subtract ! the rrgion beginning from the region end.) All three arguments are ! integers. The buffer that's about to change is always the current buffer. --- 495,500 ---- and end of the region just changed, and the length of the text that existed before the change. (To get the current length, subtract ! the region beginning from the region end.) All three arguments are ! integers. The buffer that has just changed is always the current buffer. *************** *** 585,589 **** `set-text-properties' This function replaces the entire property list, leaving no ! vessage of the properties that that text used to have. All these functions take four arguments: START, END, PROPS, and --- 585,589 ---- `set-text-properties' This function replaces the entire property list, leaving no ! vestige of the properties that that text used to have. All these functions take four arguments: START, END, PROPS, and *************** *** 847,851 **** does not recognize. Here's one way to do this: ! (defun my-file-handler (primitive &rest args) ;; First check for the specific operations ;; that we have special handling for. --- 847,851 ---- does not recognize. Here's one way to do this: ! (defun my-file-handler (operation &rest args) ;; First check for the specific operations ;; that we have special handling for. *************** *** 1908,1912 **** indicates which mouse button was used. It is one of the symbols `mouse-1', `mouse-2', ..., where the buttons are ! numbered numbered left to right. You can also use prefixes `A-', `C-', `H-', `M-', `S-' and --- 1908,1912 ---- indicates which mouse button was used. It is one of the symbols `mouse-1', `mouse-2', ..., where the buttons are ! normally numbered left to right. You can also use prefixes `A-', `C-', `H-', `M-', `S-' and *************** *** 2039,2043 **** In X windows, most window managers are set up so that just moving the mouse into a window is enough to set the focus there. As far ! as the user concern, Emacs behaves consistently with this. However, there is no need for the Lisp program to know about the focus change until some other kind of input arrives. So Emacs --- 2039,2043 ---- In X windows, most window managers are set up so that just moving the mouse into a window is enough to set the focus there. As far ! as the user is concerned, Emacs behaves consistently with this. However, there is no need for the Lisp program to know about the focus change until some other kind of input arrives. So Emacs *************** *** 2404,2408 **** PROMPT-STRING A string as an element of the keymap marks the keymap as a ! menu, and serves as the overal prompt string for it. `(KEY . BINDING)' --- 2404,2408 ---- PROMPT-STRING A string as an element of the keymap marks the keymap as a ! menu, and serves as the overall prompt string for it. `(KEY . BINDING)' *************** *** 2443,2447 **** lower-priority keymaps. ! * A keymap can now inherit from another keymap. Do do this, make the latter keymap the "tail" of the new one. Such a keymap looks like this: --- 2443,2447 ---- lower-priority keymaps. ! * A keymap can now inherit from another keymap. To do this, make the latter keymap the "tail" of the new one. Such a keymap looks like this: *************** *** 2557,2561 **** ------------------------- ! The INITIAL argument to `read-from-minibufer' and other minibuffer input functions can now be a cons cell `(STRING . POSITION)'. This means to start off with STRING in the minibuffer, but put the cursor --- 2557,2561 ---- ------------------------- ! The INITIAL argument to `read-from-minibuffer' and other minibuffer input functions can now be a cons cell `(STRING . POSITION)'. This means to start off with STRING in the minibuffer, but put the cursor diff -rc2P --exclude-from=exceptions emacs-19.10/etc/MACHINES emacs-19.11/etc/MACHINES *** emacs-19.10/etc/MACHINES Sat May 29 15:25:23 1993 --- emacs-19.11/etc/MACHINES Tue Jun 1 02:28:49 1993 *************** *** 344,350 **** --- 344,355 ---- corrupted; if you have a fix, please send it to us. + Reports are that the IBM supplied X libraries don't work with Emacs, + but the IBM X libraries and include files do work. + Compiling with -O using the IBM compiler has been known to make Emacs work incorrectly. + GCC 2.3.3 and 2.4.1 have a bug that miscompiles Emacs. + IBM RT/PC (romp-ibm-bsd or romp-ibm-aix) *************** *** 376,398 **** indicates the Umax operating system). ! Intel 386 (i386-unknown-isc, i386-unknown-esix, ! i386-unknown-xenix, i386-unknown-linux, ! i386-intsys-sysv, i386-unknown-sysv5.2.2, ! i386-unknown-sysv5.3, i386-unknown-bsd4.2, ! i386-unknown-sco3.2v4) 18.58 should support a wide variety of operating systems. ! Make sure to use i386-unknown-isc2.2 for Interactive 386/ix version 2.2 or later. ! Use i386-unknown-esix for Esix; Emacs runs as of version 19.6. ! Use i386-unknown-linux for Linux; Emacs runs as of version 19.7. Use i386-intsys-sysv for Integrated Solutions 386 machines. It may also be correct for Microport systems. ! Use i386-unknown-sco3.2v4 for SCO 3.2v4; Emacs runs as of version 19.6. 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 --- 381,420 ---- indicates the Umax operating system). ! Intel 386 (i386-*-isc, i386-*-esix, ! i386-*-xenix, i386-*-linux, ! i386-intsys-sysv, i386-*-sysv3, ! i386-*-sysv4, i386-*-sysv4.2, ! i386-*-sysv5.3, i386-*-bsd4.2, ! i386-*-sco3.2v4, i386-*-bsd386) ! ! In the above configurations, * means that the manufacturer's name ! you specify does not matter, and you can use any name you like ! (but it should not contain any dashes). 18.58 should support a wide variety of operating systems. ! Make sure to use i386-*-isc2.2 for Interactive 386/ix version 2.2 or later. ! Use i386-*-esix for Esix; Emacs runs as of version 19.6. ! Use i386-*-linux for Linux; Emacs runs as of version 19.7. Use i386-intsys-sysv for Integrated Solutions 386 machines. It may also be correct for Microport systems. ! Use i386-*-sco3.2v4 for SCO 3.2v4; Emacs runs as of version 19.6. ! ! Use i386-*-bsd386 for BSDI BSD/386; Emacs runs as of version 19.10. ! Make on that system is broken; use GNU make instead. + For System V release 3, use i386-*-sysv3. + For System V release 4, use i386-*-sysv4. + For System V release 4.2, use i386-*-sysv4.2. + 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. ! ! If you are using System V release 4.2, you may find that `cc -E' ! puts spurious spaces in `src/xmakefile'. If that happens, ! specify CC=/lib/cpp as an option when you run make. ! There is no problem if you compile with GCC. ! 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 *************** *** 788,792 **** 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. --- 810,814 ---- 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 attempt to use sendmail if it exists. diff -rc2P --exclude-from=exceptions emacs-19.10/etc/NEWS emacs-19.11/etc/NEWS *** emacs-19.10/etc/NEWS Sat May 29 16:40:22 1993 --- emacs-19.11/etc/NEWS Tue Jun 1 00:36:55 1993 *************** *** 7,10 **** --- 7,27 ---- see the file LNEWS. + Changes in version 19.11. + + * Supercite is installed. + + * `write-file-hooks' functions that return non-nil are responsible + for making a backup file if you want that to be done. + To do so, execute the following code: + + (or buffer-backed-up (backup-buffer)) + + You might wish to save the file modes value returned by + `backup-buffer' and use that to set the mode bits of the file + that you write. This is what `basic-save-buffer' does when + it writes a file in the usual way. + + (This is not actually new, but wasn't documented before.) + Changes in version 19.10. diff -rc2P --exclude-from=exceptions emacs-19.10/etc/ORDERS emacs-19.11/etc/ORDERS *** emacs-19.10/etc/ORDERS Tue May 25 20:20:43 1993 --- emacs-19.11/etc/ORDERS Mon May 31 08:55:59 1993 *************** *** 308,314 **** Media type: __________________________________________________________________ ! ____ @ $5000 = $ ______ Deluxe Distribution, with manuals and executables. - The following source and executables for MS-DOS, on 3.5" 1.44MB diskettes: --- 308,314 ---- Media type: __________________________________________________________________ ! ____ @ $5000 = $ ______ Deluxe Distribution, with manuals, reference cards. ! source code and executables. The following source and executables for MS-DOS, on 3.5" 1.44MB diskettes: *************** *** 326,330 **** not with Microsoft Windows extended mode or other DPMI managers. It cannot emulate multitasking (e.g. ! fork(2)) or signals. ____ @ $ 85 = $ ______ Selected Utilities from the GNUish MS-DOS Project on diskettes, 8086 and up. The utilities include: --- 326,330 ---- not with Microsoft Windows extended mode or other DPMI managers. It cannot emulate multitasking (e.g. ! fork) or signals. ____ @ $ 85 = $ ______ Selected Utilities from the GNUish MS-DOS Project on diskettes, 8086 and up. The utilities include: *************** *** 337,341 **** Microsoft Windows. - CD-ROM, in ISO 9660 format (CD-ROM described above): --- 337,340 ---- *************** *** 426,439 **** The front of the t-shirt has an image of a GNU hacking at a workstation with the text "GNU's Not Unix" above and the text "Free Software Foundation below. ! Natural is an off-white, unbleached, undyed, environmentally friendly cotton, printed with black ink. Black is printed with white ink. ! ____ @ $ 15 = $ ______ Size M, ____ natural, ____ black. ! ____ @ $ 15 = $ ______ Size L, ____ natural, ____ black. ! ____ @ $ 15 = $ ______ Size XL, ____ natural, ____ black. ! ____ @ $ 15 = $ ______ Size XXL, ____ natural, ____ black. ------ --- 425,438 ---- The front of the t-shirt has an image of a GNU hacking at a workstation with the text "GNU's Not Unix" above and the text "Free Software Foundation below. ! Natural is an off-white, unbleached, undyed, environment-friendly cotton, printed with black ink. Black is printed with white ink. ! ____ @ $ 15 = $ ______ Size M ____ natural ____ black. ! ____ @ $ 15 = $ ______ Size L ____ natural ____ black. ! ____ @ $ 15 = $ ______ Size XL ____ natural ____ black. ! ____ @ $ 15 = $ ______ Size XXL ____ natural ____ black. ------ *************** *** 446,450 **** manuals, add $5 each, or $20 per box. For all other items, add $5 base charge, then $1 per item except ! reference cards. + $ ______ Outside of U.S., Canada, and Puerto Rico for shipping: for each box of GNU Emacs Lisp Reference --- 445,450 ---- manuals, add $5 each, or $20 per box. For all other items, add $5 base charge, then $1 per item except ! reference cards; i.e., ! shipping for all other items = $5 + $1 * n. + $ ______ Outside of U.S., Canada, and Puerto Rico for shipping: for each box of GNU Emacs Lisp Reference *************** *** 452,456 **** charge, and then add $10 more for each item (except reference cards) in the order; i.e., ! total = $20 + $10 * n. + $ ______ Optional (tax-deductible in the U.S.) donation. ------ --- 452,456 ---- charge, and then add $10 more for each item (except reference cards) in the order; i.e., ! shipping for all other items = $20 + $10 * n. + $ ______ Optional (tax-deductible in the U.S.) donation. ------ diff -rc2P --exclude-from=exceptions emacs-19.10/etc/news.texi emacs-19.11/etc/news.texi *** emacs-19.10/etc/news.texi Wed May 26 13:15:00 1993 --- emacs-19.11/etc/news.texi Mon May 31 02:35:14 1993 *************** *** 149,157 **** be autoloaded by writing special ``magic'' comments in that library itself. ! Write @samp{;;;###autoload} on a line by itself before a function ! definition before the real definition of the function, in its ! autoloadable source file; then the command @kbd{M-x ! update-file-autoloads} automatically puts the @code{autoload} call into ! @file{loaddefs.el}. You can also put other kinds of forms into @file{loaddefs.el}, by --- 149,156 ---- be autoloaded by writing special ``magic'' comments in that library itself. ! Write @samp{;;;###autoload} on a line by itself before the real ! definition of the function, in its autoloadable source file; then the ! command @kbd{M-x update-file-autoloads} automatically puts the ! @code{autoload} call into @file{loaddefs.el}. You can also put other kinds of forms into @file{loaddefs.el}, by *************** *** 365,369 **** The precision in any of these cases is the number of digits following ! the decimal point. With @samp{f}, a precision of 0 means to omit the decimal point. 0 is not allowed with @samp{f} or @samp{g}. --- 364,368 ---- The precision in any of these cases is the number of digits following ! the decimal point. With @samp{e}, a precision of 0 means to omit the decimal point. 0 is not allowed with @samp{f} or @samp{g}. *************** *** 488,492 **** The variables @code{activate-mark-hook} and @code{deactivate-mark-hook} ! are normal hooks run, respectively, when the mark becomes active andwhen it becomes inactive. The hook @code{activate-mark-hook} is also run at the end of a command if the mark is active and the region may have --- 487,491 ---- The variables @code{activate-mark-hook} and @code{deactivate-mark-hook} ! are normal hooks run, respectively, when the mark becomes active and when it becomes inactive. The hook @code{activate-mark-hook} is also run at the end of a command if the mark is active and the region may have *************** *** 549,554 **** and end of the region just changed, and the length of the text that existed before the change. (To get the current length, subtract the ! rrgion beginning from the region end.) All three arguments are ! integers. The buffer that's about to change is always the current buffer. --- 548,553 ---- and end of the region just changed, and the length of the text that existed before the change. (To get the current length, subtract the ! region beginning from the region end.) All three arguments are ! integers. The buffer that has just changed is always the current buffer. *************** *** 646,650 **** @item set-text-properties ! This function replaces the entire property list, leaving no vessage of the properties that that text used to have. @end table --- 645,649 ---- @item set-text-properties ! This function replaces the entire property list, leaving no vestige of the properties that that text used to have. @end table *************** *** 939,943 **** @smallexample ! (defun my-file-handler (primitive &rest args) ;; @r{First check for the specific operations} ;; @r{that we have special handling for.} --- 938,942 ---- @smallexample ! (defun my-file-handler (operation &rest args) ;; @r{First check for the specific operations} ;; @r{that we have special handling for.} *************** *** 2098,2102 **** @item button-symbol indicates which mouse button was used. It is one of the symbols ! @code{mouse-1}, @code{mouse-2}, @dots{}, where the buttons are numbered numbered left to right. --- 2097,2101 ---- @item button-symbol indicates which mouse button was used. It is one of the symbols ! @code{mouse-1}, @code{mouse-2}, @dots{}, where the buttons are normally numbered left to right. *************** *** 2246,2250 **** In X windows, most window managers are set up so that just moving the mouse into a window is enough to set the focus there. As far as the ! user concern, Emacs behaves consistently with this. However, there is no need for the Lisp program to know about the focus change until some other kind of input arrives. So Emacs generates the focus event only --- 2245,2249 ---- In X windows, most window managers are set up so that just moving the mouse into a window is enough to set the focus there. As far as the ! user is concerned, Emacs behaves consistently with this. However, there is no need for the Lisp program to know about the focus change until some other kind of input arrives. So Emacs generates the focus event only *************** *** 2655,2659 **** @item @var{prompt-string} A string as an element of the keymap marks the keymap as a menu, and ! serves as the overal prompt string for it. @item @code{(@var{key} . @var{binding})} --- 2654,2658 ---- @item @var{prompt-string} A string as an element of the keymap marks the keymap as a menu, and ! serves as the overall prompt string for it. @item @code{(@var{key} . @var{binding})} *************** *** 2693,2697 **** @item ! A keymap can now inherit from another keymap. Do do this, make the latter keymap the ``tail'' of the new one. Such a keymap looks like this: --- 2692,2696 ---- @item ! A keymap can now inherit from another keymap. To do this, make the latter keymap the ``tail'' of the new one. Such a keymap looks like this: *************** *** 2819,2823 **** @subsection Other Minibuffer Features ! The @var{initial} argument to @code{read-from-minibufer} and other minibuffer input functions can now be a cons cell @code{(@var{string} . @var{position})}. This means to start off with @var{string} in the --- 2818,2822 ---- @subsection Other Minibuffer Features ! The @var{initial} argument to @code{read-from-minibuffer} and other minibuffer input functions can now be a cons cell @code{(@var{string} . @var{position})}. This means to start off with @var{string} in the diff -rc2P --exclude-from=exceptions emacs-19.10/lib-src/ChangeLog emacs-19.11/lib-src/ChangeLog *** emacs-19.10/lib-src/ChangeLog Sun May 30 00:20:07 1993 --- emacs-19.11/lib-src/ChangeLog Tue Jun 1 04:29:30 1993 *************** *** 1,2 **** --- 1,22 ---- + Tue Jun 1 04:07:00 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.11 released. + + * timer.c [LINUX]: #undef signal. + * emacsserver.c: #undef signal. + + Sun May 30 21:39:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * wakeup.c (main): Make when a time_t. + + Sun May 30 15:24:31 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * Makefile.in: (${archlibdir}): Use `(cd foo && pwd)` instead of + `(cd foo ; pwd)` to get the canonical name of a directory; cd + might fail, and have pwd print out the current directory. + + * movemail.c [MAIL_USE_POP] (main): Don't use non-portable + string-handling functions. + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) diff -rc2P --exclude-from=exceptions emacs-19.10/lib-src/Makefile.in emacs-19.11/lib-src/Makefile.in *** emacs-19.10/lib-src/Makefile.in Sat May 29 01:00:52 1993 --- emacs-19.11/lib-src/Makefile.in Sun May 30 15:39:16 1993 *************** *** 117,121 **** @echo "Installing utilities run internally by Emacs." ./make-path ${archlibdir} ! if [ `(cd ${archlibdir};/bin/pwd)` != `/bin/pwd` ]; then \ for file in ${UTILITIES} ${INSTALLABLES}; do \ cp $${file} ${archlibdir} ; \ --- 117,121 ---- @echo "Installing utilities run internally by Emacs." ./make-path ${archlibdir} ! if [ `(cd ${archlibdir} && /bin/pwd)` != `/bin/pwd` ]; then \ for file in ${UTILITIES} ${INSTALLABLES}; do \ cp $${file} ${archlibdir} ; \ diff -rc2P --exclude-from=exceptions emacs-19.10/lib-src/emacsserver.c emacs-19.11/lib-src/emacsserver.c *** emacs-19.10/lib-src/emacsserver.c Fri May 28 03:54:21 1993 --- emacs-19.11/lib-src/emacsserver.c Tue Jun 1 04:03:54 1993 *************** *** 31,34 **** --- 31,35 ---- #undef open #undef close + #undef signal diff -rc2P --exclude-from=exceptions emacs-19.10/lib-src/movemail.c emacs-19.11/lib-src/movemail.c *** emacs-19.10/lib-src/movemail.c Fri May 28 03:54:25 1993 --- emacs-19.11/lib-src/movemail.c Sun May 30 15:25:37 1993 *************** *** 141,149 **** #ifdef MAIL_USE_POP ! if (!bcmp (inname, "po:", 3)) { int status; char *user; ! user = (char *) rindex (inname, ':') + 1; status = popmail (user, outname); exit (status); --- 141,152 ---- #ifdef MAIL_USE_POP ! if (!strncmp (inname, "po:", 3)) { int status; char *user; ! for (user = &inname[strlen (inname) - 1]; user >= inname; user--) ! if (*user == ':') ! break; ! status = popmail (user, outname); exit (status); diff -rc2P --exclude-from=exceptions emacs-19.10/lib-src/timer.c emacs-19.11/lib-src/timer.c *** emacs-19.10/lib-src/timer.c Fri May 28 03:54:26 1993 --- emacs-19.11/lib-src/timer.c Tue Jun 1 04:06:04 1993 *************** *** 24,27 **** --- 24,33 ---- #endif + #ifdef LINUX + /* Perhaps this is correct unconditionally. */ + #undef signal + #endif + + extern int errno; extern char *sys_errlist[], *malloc (); diff -rc2P --exclude-from=exceptions emacs-19.10/lib-src/wakeup.c emacs-19.11/lib-src/wakeup.c *** emacs-19.10/lib-src/wakeup.c Tue Jul 30 17:04:22 1991 --- emacs-19.11/lib-src/wakeup.c Sun May 30 21:39:26 1993 *************** *** 11,15 **** { int period = 60; ! long when; struct tm *tp; --- 11,15 ---- { int period = 60; ! time_t when; struct tm *tp; diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/ChangeLog emacs-19.11/lisp/ChangeLog *** emacs-19.10/lisp/ChangeLog Sun May 30 00:19:24 1993 --- emacs-19.11/lisp/ChangeLog Tue Jun 1 04:29:05 1993 *************** *** 1,2 **** --- 1,90 ---- + Tue Jun 1 00:27:03 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.11 released. + + * lucid.el (copy-tree): Use let* to bind new before i. + + * terminal.el (te-pass-through): Delete debugging code left by mistake. + + * comint.el (comint-filter): Put window-start before the input. + + * isearch.el (isearch-mode): If enter recursive-edit, + also bind isearch-recursive-edit. + + * cookie1.el: Renamed from cookie.el. + Provide cookie1. + * yow.el, spook.el: Changed accordingly. + + Mon May 31 23:21:41 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * outline.el (outline-flag-region): Pass t as NOUNDO arg + to subst-char-in-region. No need to restore buffer-modified-p by hand. + + Mon May 31 19:59:12 1993 Junio Hamano (junio@twinsun.com) + + * lisp/window.el (count-windows): PROC argument of + walk-windows takes an argument. + + Mon May 31 00:20:50 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * gnus.el (gnus-summary-isearch-article): Call isearch-forward + in ordinary fashion with no args. + (gnus-inews-article-hook, gnus-prepare-article-hook): + Initialize to a list. + (gnus-read-newsrc-file): If timestamps are equal, reload .newsrc. + + * bibtex.el (bibtex-mode): Add autoload. + + * files.el (inhibit-local-variables-regexps): New variable. + (set-auto-mode): Handle inhibit-local-variables-regexps. + + * tar-mode.el: Don't initialize write-file-hooks. + Don't change auto-mode-alist. + (tar-regexp): Deleted. + (tar-normal-mode): Deleted. + (tar-mode): Add autoload. + + * faces.el (x-resolve-font-name): Clean up error messages. + + * timer.el (run-at-time): Pass args to start-process in right order. + + * info.el (Info-get-token): Check that thesecond search succeeded. + + * edebug.el: Provide edebug. + + * rmailsum.el (rmail-message-subject-p): Fix typo in string constant. + + * cl.el (mod): Use cl-floor. + (rem): Use cl-truncate. + + * gud.el (gud-def): Don't use gud-key-prefix at compile time. + + * window.el (shrink-window-if-larger-than-buffer): Add `interactive'. + Do nothing if window contents not entirely visible. + + * sendmail.el (mail-do-fcc): Put back the newline at the start + of the fcc temp buffer. It got lost somewhere. + + Sun May 30 15:14:40 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * gnus.el (gnus-nntp-server): Use gnus-default-nntp-server. + + * info.el (Info-mode-map): Correct Info-top to Info-top-node. + + * man.el (Man-notify-when-ready): Correct previous change. + + Sun May 30 18:28:43 1993 Stephen Gildea (gildea@alex.lcs.mit.edu) + + * mh-e.el (mh-signature-file-name): New variable. + mh-e version 3.8.2. + + Sun May 30 13:21:04 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * faces.el (x-resolve-font-name): Fix args to error; the format + string was changed, but not the arguments to be substituted. + + * faces.el (x-resolve-font-name): Give correct error message + depending on whether or not FACE was non-nil. + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/bibtex.el emacs-19.11/lisp/bibtex.el *** emacs-19.10/lisp/bibtex.el Tue May 18 17:14:25 1993 --- emacs-19.11/lisp/bibtex.el Mon May 31 17:53:23 1993 *************** *** 582,585 **** --- 582,586 ---- ;;; bibtex mode: + ;;;###autoload (defun bibtex-mode () "Major mode for editing bibtex files. diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/cl.el emacs-19.11/lisp/cl.el *** emacs-19.10/lisp/cl.el Thu May 27 00:43:37 1993 --- emacs-19.11/lisp/cl.el Mon May 31 20:10:36 1993 *************** *** 1807,1814 **** (defun mod (number divisor) "Return remainder of X by Y (rounding quotient toward minus infinity). ! That is, the remainder goes with the quotient produced by `floor'. Emacs Lisp hint: If you know that both arguments are positive, use `%' instead for speed." ! (floor number divisor) (cadr *mvalues-values*)) --- 1807,1814 ---- (defun mod (number divisor) "Return remainder of X by Y (rounding quotient toward minus infinity). ! That is, the remainder goes with the quotient produced by `cl-floor'. Emacs Lisp hint: If you know that both arguments are positive, use `%' instead for speed." ! (cl-floor number divisor) (cadr *mvalues-values*)) *************** *** 1815,1822 **** (defun rem (number divisor) "Return remainder of X by Y (rounding quotient toward zero). ! That is, the remainder goes with the quotient produced by `truncate'. Emacs Lisp hint: If you know that both arguments are positive, use `%' instead for speed." ! (truncate number divisor) (cadr *mvalues-values*)) --- 1815,1822 ---- (defun rem (number divisor) "Return remainder of X by Y (rounding quotient toward zero). ! That is, the remainder goes with the quotient produced by `cl-truncate'. Emacs Lisp hint: If you know that both arguments are positive, use `%' instead for speed." ! (cl-truncate number divisor) (cadr *mvalues-values*)) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/comint.el emacs-19.11/lisp/comint.el *** emacs-19.10/lisp/comint.el Wed May 26 13:00:17 1993 --- emacs-19.11/lisp/comint.el Tue Jun 1 01:31:02 1993 *************** *** 141,145 **** (defvar comint-process-echoes nil ! "*If non-`nil', assume that the subprocess echoes any input. If so, delete one copy of the input so that only one copy eventually appears in the buffer. --- 141,145 ---- (defvar comint-process-echoes nil ! "*If non-nil, assume that the subprocess echoes any input. If so, delete one copy of the input so that only one copy eventually appears in the buffer. *************** *** 152,160 **** This function is called when return is typed while the point is in old text. It returns the text to be submitted as process input. The default is ! comint-get-old-input-default, which grabs the current line, and strips off ! leading text matching comint-prompt-regexp") (defvar comint-input-sentinel (function ignore) ! "Called on each input submitted to comint mode process by comint-send-input. Thus it can, for instance, track cd/pushd/popd commands issued to the csh.") --- 152,160 ---- This function is called when return is typed while the point is in old text. It returns the text to be submitted as process input. The default is ! `comint-get-old-input-default', which grabs the current line, and strips off ! leading text matching `comint-prompt-regexp'.") (defvar comint-input-sentinel (function ignore) ! "Called on each input submitted to comint mode process by `comint-send-input'. Thus it can, for instance, track cd/pushd/popd commands issued to the csh.") *************** *** 163,178 **** "Predicate for filtering additions to input history. Only inputs answering true to this function are saved on the input ! history list. Default is to save anything that isn't all whitespace") (defvar comint-input-sender (function comint-simple-send) "Function to actually send to PROCESS the STRING submitted by user. ! Usually this is just 'comint-simple-send, but if your mode needs to ! massage the input string, this is your hook. This is called from ! the user command comint-send-input. comint-simple-send just sends ! the string plus a newline.") ! ! (defvar comint-eol-on-send 'T ! "If non-nil, then jump to the end of the line before sending input to process. ! See comint-send-input") (defvar comint-mode-hook '() --- 163,178 ---- "Predicate for filtering additions to input history. Only inputs answering true to this function are saved on the input ! history list. Default is to save anything that isn't all whitespace") (defvar comint-input-sender (function comint-simple-send) "Function to actually send to PROCESS the STRING submitted by user. ! Usually this is just `comint-simple-send', but if your mode needs to ! massage the input string, put a different function here. ! `comint-simple-send' just sends the string plus a newline. ! This is called from the user command `comint-send-input'.") ! ! (defvar comint-eol-on-send t ! "*Non-nil means go to the end of the line before sending input to process. ! See `comint-send-input'.") (defvar comint-mode-hook '() *************** *** 181,188 **** (defvar comint-exec-hook '() ! "Called each time a process is exec'd by comint-exec. This is called after the process is cranked up. It is useful for things that ! must be done each time a process is executed in a comint-mode buffer (e.g., ! (process-kill-without-query)). In contrast, the comint-mode-hook is only executed once when the buffer is created.") --- 181,188 ---- (defvar comint-exec-hook '() ! "Called each time a process is exec'd by `comint-exec'. This is called after the process is cranked up. It is useful for things that ! must be done each time a process is executed in a comint mode buffer (e.g., ! `(process-kill-without-query)'). In contrast, the `comint-mode-hook' is only executed once when the buffer is created.") *************** *** 191,195 **** (defvar comint-ptyp t "True if communications via pty; false if by pipe. Buffer local. ! This is to work around a bug in emacs process signalling.") ;;(defvar comint-last-input-match "" --- 191,195 ---- (defvar comint-ptyp t "True if communications via pty; false if by pipe. Buffer local. ! This is to work around a bug in Emacs process signalling.") ;;(defvar comint-last-input-match "" *************** *** 209,226 **** Return at end of buffer sends line as input. Return not at end copies rest of line to end and sends it. ! Setting mode variable comint-eol-on-send means jump to the end of the line before submitting new input. ! This mode is typically customised to create inferior-lisp-mode, ! shell-mode, etc.. This can be done by setting the hooks ! comint-input-sentinel, comint-input-filter, comint-input-sender and ! comint-get-old-input to appropriate functions, and the variable ! comint-prompt-regexp to the appropriate regular expression. ! ! An input history is maintained of size comint-input-ring-size, and ! can be accessed with the commands comint-next-input [\\[comint-next-input]] and ! comint-previous-input [\\[comint-previous-input]]. Commands not keybound by ! default are send-invisible, comint-dynamic-complete, and ! comint-list-dynamic-completions. If you accidentally suspend your process, use \\[comint-continue-subjob] --- 209,225 ---- Return at end of buffer sends line as input. Return not at end copies rest of line to end and sends it. ! Setting variable `comint-eol-on-send' means jump to the end of the line before submitting new input. ! This mode is typically customised to create Inferior Lisp mode, ! Shell mode, etc. This can be done by setting the hooks ! `comint-input-sentinel', `comint-input-filter', `comint-input-sender' and ! `comint-get-old-input' to appropriate functions, and the variable ! `comint-prompt-regexp' to the appropriate regular expression. ! ! An input history is maintained of size `comint-input-ring-size', and ! can be accessed with the commands \\[comint-next-input] and \\[comint-previous-input]. ! Commands with no default key bindings include `send-invisible', ! `comint-dynamic-complete', and `comint-list-dynamic-completions'. If you accidentally suspend your process, use \\[comint-continue-subjob] *************** *** 288,292 **** ;;; isn't necessary in emacs 18.5x, but we keep it around for 18.4x versions. (defun full-copy-sparse-keymap (km) ! "Recursively copy the sparse keymap KM" (cond ((consp km) (cons (full-copy-sparse-keymap (car km)) --- 287,291 ---- ;;; isn't necessary in emacs 18.5x, but we keep it around for 18.4x versions. (defun full-copy-sparse-keymap (km) ! "Recursively copy the sparse keymap KM." (cond ((consp km) (cons (full-copy-sparse-keymap (car km)) *************** *** 295,301 **** (defun comint-check-proc (buffer) ! "True if there is a process associated w/buffer BUFFER, and ! it is alive (status RUN or STOP). BUFFER can be either a buffer or the ! name of one" (let ((proc (get-buffer-process buffer))) (and proc (memq (process-status proc) '(run stop))))) --- 294,300 ---- (defun comint-check-proc (buffer) ! "True if there is a living process associated w/buffer BUFFER. ! Living means the status is `run' or `stop'. ! BUFFER can be either a buffer or the name of one." (let ((proc (get-buffer-process buffer))) (and proc (memq (process-status proc) '(run stop))))) *************** *** 321,328 **** (defun comint-exec (buffer name command startfile switches) ! "Fires up a process in buffer for comint modes. Blasts any old process running in the buffer. Doesn't set the buffer mode. You can use this to cheaply run a series of processes in the same comint ! buffer. The hook comint-exec-hook is run after each exec." (save-excursion (set-buffer buffer) --- 320,327 ---- (defun comint-exec (buffer name command startfile switches) ! "Start up a process in buffer BUFFER for comint modes. Blasts any old process running in the buffer. Doesn't set the buffer mode. You can use this to cheaply run a series of processes in the same comint ! buffer. The hook `comint-exec-hook' is run after each exec." (save-excursion (set-buffer buffer) *************** *** 594,606 **** point as input to the process. Before the process output mark, calls value of variable `comint-get-old-input' to retrieve old input, copies it to the ! process mark, and sends it. If variable `comint-process-echoes' is `nil', a terminal newline is also inserted into the buffer and sent to the process ! \(if it is non-`nil', all text from the process mark to point is deleted, ! since it is assumed the remote process will re-echo it). The value of ! variable `comint-input-sentinel' is called on the input before sending it. ! The input is entered into the input history ring, if the value of variable ! `comint-input-filter' returns non-`nil' when called on the input. ! If variable `comint-eol-on-send' is non-`nil', then point is moved to the end of line before sending the input. --- 593,607 ---- point as input to the process. Before the process output mark, calls value of variable `comint-get-old-input' to retrieve old input, copies it to the ! process mark, and sends it. If variable `comint-process-echoes' is nil, a terminal newline is also inserted into the buffer and sent to the process ! \(if it is non-nil, all text from the process mark to point is deleted, ! since it is assumed the remote process will re-echo it). ! The value of variable `comint-input-sentinel' is called on the input ! before sending it. The input is entered into the input history ring, ! if the value of variable `comint-input-filter' returns non-nil when ! called on the input. ! ! If variable `comint-eol-on-send' is non-nil, then point is moved to the end of line before sending the input. *************** *** 670,673 **** --- 671,678 ---- (insert-before-markers string) + ;; Don't insert initial prompt outside the top of the window. + (if (= (window-start (selected-window)) (point)) + (set-window-start (selected-window) (- (point) (length string)))) + (and comint-last-input-end (marker-buffer comint-last-input-end) *************** *** 683,689 **** (defun comint-get-old-input-default () ! "Default for comint-get-old-input. Take the current line, and discard any initial text matching ! comint-prompt-regexp." (save-excursion (beginning-of-line) --- 688,694 ---- (defun comint-get-old-input-default () ! "Default for `comint-get-old-input'. Take the current line, and discard any initial text matching ! `comint-prompt-regexp'." (save-excursion (beginning-of-line) *************** *** 694,698 **** (defun comint-skip-prompt () ! "Skip past the text matching regexp comint-prompt-regexp. If this takes us past the end of the current line, don't skip at all." (let ((eol (save-excursion (end-of-line) (point)))) --- 699,703 ---- (defun comint-skip-prompt () ! "Skip past the text matching regexp `comint-prompt-regexp'. If this takes us past the end of the current line, don't skip at all." (let ((eol (save-excursion (end-of-line) (point)))) *************** *** 715,719 **** "Default function for sending to PROC input STRING. This just sends STRING plus a newline. To override this, ! set the hook COMINT-INPUT-SENDER." (comint-send-string proc string) (comint-send-string proc "\n")) --- 720,724 ---- "Default function for sending to PROC input STRING. This just sends STRING plus a newline. To override this, ! set the hook `comint-input-sender'." (comint-send-string proc string) (comint-send-string proc "\n")) *************** *** 725,732 **** The prompt skip is done by skipping text matching the regular expression ! comint-prompt-regexp, a buffer local variable. ! If you don't like this command, reset c-a to beginning-of-line ! in your hook, comint-mode-hook." (interactive "P") (beginning-of-line) --- 730,737 ---- The prompt skip is done by skipping text matching the regular expression ! `comint-prompt-regexp', a buffer local variable. ! If you don't like this command, bind C-a to `beginning-of-line' ! in your hook, `comint-mode-hook'." (interactive "P") (beginning-of-line) *************** *** 742,751 **** input to be echoed with '*' characters on the prompt line. Input ends with RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line. C-g aborts (if ! inhibit-quit is set because e.g. this function was called from a process ! filter and C-g is pressed, this function will return `nil', rather than a ! string). Note that the keystrokes comprising the text can still be recovered ! (temporarily) with \\[view-lossage]. This may be a security bug for some applications." (let ((ans "") --- 747,755 ---- input to be echoed with '*' characters on the prompt line. Input ends with RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line. C-g aborts (if ! `inhibit-quit' is set because e.g. this function was called from a process ! filter and C-g is pressed, this function returns nil rather than a string). Note that the keystrokes comprising the text can still be recovered ! \(temporarily) with \\[view-lossage]. This may be a security bug for some applications." (let ((ans "") *************** *** 788,793 **** (defun send-invisible (str) "Read a string without echoing. ! Then send it to the process running in the current buffer. A new-line ! is additionally sent. String is not saved on comint input history list. Security bug: your string can still be temporarily recovered with \\[view-lossage]." --- 792,797 ---- (defun send-invisible (str) "Read a string without echoing. ! Then send it to the process running in the current buffer. A new-line ! is additionally sent. String is not saved on comint input history list. Security bug: your string can still be temporarily recovered with \\[view-lossage]." *************** *** 805,809 **** (defvar comint-input-chunk-size 512 ! "*Long inputs send to comint processes are broken up into chunks of this size. If your process is choking on big inputs, try lowering the value.") --- 809,813 ---- (defvar comint-input-chunk-size 512 ! "*Long inputs are sent to comint processes in chunks of this size. If your process is choking on big inputs, try lowering the value.") *************** *** 810,816 **** (defun comint-send-string (proc str) "Send PROCESS the contents of STRING as input. ! This is equivalent to process-send-string, except that long input strings ! are broken up into chunks of size comint-input-chunk-size. Processes ! are given a chance to output between chunks. This can help prevent processes from hanging when you send them long inputs on some OS's." (let* ((len (length str)) --- 814,820 ---- (defun comint-send-string (proc str) "Send PROCESS the contents of STRING as input. ! This is equivalent to `process-send-string', except that long input strings ! are broken up into chunks of size `comint-input-chunk-size'. Processes ! are given a chance to output between chunks. This can help prevent processes from hanging when you send them long inputs on some OS's." (let* ((len (length str)) *************** *** 825,830 **** (defun comint-send-region (proc start end) "Sends to PROC the region delimited by START and END. ! This is a replacement for process-send-region that tries to keep ! your process from hanging on long inputs. See comint-send-string." (comint-send-string proc (buffer-substring start end))) --- 829,834 ---- (defun comint-send-region (proc start end) "Sends to PROC the region delimited by START and END. ! This is a replacement for `process-send-region' that tries to keep ! your process from hanging on long inputs. See `comint-send-string'." (comint-send-string proc (buffer-substring start end))) *************** *** 1013,1017 **** ;;; if there's a quote on both sides of point on the current line. (defun comint-extract-string () ! "Returns string around POINT that starts the current line or nil." (save-excursion (let* ((point (point)) --- 1017,1021 ---- ;;; if there's a quote on both sides of point on the current line. (defun comint-extract-string () ! "Return string around POINT that starts the current line, or nil." (save-excursion (let* ((point (point)) *************** *** 1111,1115 **** (defun comint-match-partial-pathname () ! "Returns the filename at point or causes an error." (save-excursion (if (re-search-backward "[^~/A-Za-z0-9_.$#,=-]" nil 'move) --- 1115,1119 ---- (defun comint-match-partial-pathname () ! "Return the filename at point, or signal an error." (save-excursion (if (re-search-backward "[^~/A-Za-z0-9_.$#,=-]" nil 'move) *************** *** 1123,1127 **** (defun comint-replace-by-expanded-filename () ! "Expand the filename at point. Replace the filename with an expanded, canonicalised, and completed replacement. --- 1127,1131 ---- (defun comint-replace-by-expanded-filename () ! "Expand the filename at point. Replace the filename with an expanded, canonicalised, and completed replacement. *************** *** 1129,1134 **** replaced with the corresponding directories. \"Canonicalised\" means .. and \. are removed, and the filename is made absolute instead of relative. ! See functions expand-file-name and substitute-in-file-name. See also ! comint-dynamic-complete." (interactive) (let* ((pathname (comint-match-partial-pathname)) --- 1133,1138 ---- replaced with the corresponding directories. \"Canonicalised\" means .. and \. are removed, and the filename is made absolute instead of relative. ! See functions `expand-file-name' and `substitute-in-file-name'. See also ! `comint-dynamic-complete'." (interactive) (let* ((pathname (comint-match-partial-pathname)) Only in emacs-19.10/lisp: cookie.el diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/cookie1.el emacs-19.11/lisp/cookie1.el *** emacs-19.10/lisp/cookie1.el --- emacs-19.11/lisp/cookie1.el Tue Jun 1 02:01:50 1993 *************** *** 0 **** --- 1,134 ---- + ;;; cookie1.el --- retrieve random phrases from fortune cookie files + + ;; Copyright (C) 1993 Free Software Foundation, Inc. + + ;; Author: Eric S. Raymond + ;; Maintainer: FSF + ;; Keywords: games + ;; Created: Mon Mar 22 17:06:26 1993 + + ;; 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: + + ;; Support for random cookie fetches from phrase files, used for such + ;; critical applications as emulating Zippy the Pinhead and confounding + ;; the NSA Trunk Trawler. + ;; + ;; The two entry points are `cookie' and `cookie-insert'. The helper + ;; functions `pick-random' and `shuffle-vector' may be of interest to + ;; programmers. + ;; + ;; The code expects phrase files to be in one of two formats: + ;; + ;; * ITS-style LINS format (strings terminated by ASCII 0 characters, + ;; leading whitespace ignored). + ;; + ;; * UNIX fortune file format (quotes terminated by %% on a line by itself). + ;; + ;; Everything up to the first delimiter is treated as a comment. Other + ;; formats could be supported by adding alternates to the regexp + ;; `cookie-delimiter'. + ;; + ;; This code derives from Steve Strassman's 1987 spook.el package, but + ;; has been generalized so that it supports multiple simultaneous + ;; cookie databases and fortune files. It is intended to be called + ;; from other packages such as yow.el and spook.el. + ;; + ;; TO DO: teach cookie-snarf to auto-detect ITS PINS or UNIX fortune(6) + ;; format and do the right thing. + + ;;; Code: + + ; Randomize the seed in the random number generator. + (random t) + + (defconst cookie-delimiter "\n%%\n\\|\0" + "Delimiter used to separate cookie file entries.") + + (defun cookie (phrase-file startmsg endmsg) + "Return a random phrase from PHRASE-FILE. When the phrase file + is read in, display STARTMSG at beginning of load, ENDMSG at end." + (let ((cookie-vector (cookie-snarf phrase-file startmsg endmsg))) + (shuffle-vector cookie-vector) + (aref cookie-vector 1))) + + (defun cookie-insert (phrase-file &optional count startmsg endmsg) + "Insert random phrases from PHRASE-FILE; COUNT of them. When the phrase file + is read in, display STARTMSG at beginning of load, ENDMSG at end." + (let ((cookie-vector (cookie-snarf phrase-file startmsg endmsg))) + (shuffle-vector cookie-vector) + (let ((start (point))) + (insert ?\n) + (cookie1 (min (- (length cookie-vector) 1) (or count 1)) cookie-vector) + (insert ?\n) + (fill-region-as-paragraph start (point) nil)))) + + (defun cookie1 (arg cookie-vec) + "Inserts a cookie phrase ARG times." + (cond ((zerop arg) t) + (t (insert (aref cookie-vec arg)) + (insert " ") + (cookie1 (1- arg) cookie-vec)))) + + (defun cookie-snarf (phrase-file startmsg endmsg) + "Reads in the PHRASE-FILE, returns it as a vector of strings. Emit + STARTMSG and ENDMSG before and after. Caches the result; second and + subsequent calls on the same file won't go to disk." + (if (boundp (intern phrase-file)) + (eval (intern phrase-file)) + (message startmsg) + (save-excursion + (let ((buf (generate-new-buffer "*cookie*")) + (result nil)) + (set-buffer buf) + (insert-file-contents (expand-file-name phrase-file)) + (re-search-forward cookie-delimiter) + (while (progn (skip-chars-forward " \t\n\r\f") (not (eobp))) + (let ((beg (point))) + (re-search-forward cookie-delimiter) + (setq result (cons (buffer-substring beg (1- (point))) + result)))) + (kill-buffer buf) + (message endmsg) + (set (intern phrase-file) (apply 'vector result)))))) + + (defun pick-random (n) + "Returns a random number from 0 to N-1 inclusive." + (% (logand 0777777 (random)) n)) + + ; Thanks to Ian G Batten + ; [of the University of Birmingham Computer Science Department] + ; for the iterative version of this shuffle. + ; + (defun shuffle-vector (vector) + "Randomly permute the elements of VECTOR (all permutations equally likely)" + (let ((i 0) + j + temp + (len (length vector))) + (while (< i len) + (setq j (+ i (pick-random (- len i)))) + (setq temp (aref vector i)) + (aset vector i (aref vector j)) + (aset vector j temp) + (setq i (1+ i)))) + vector) + + (provide 'cookie1) + + ;;; cookie.el ends here diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/edebug.el emacs-19.11/lisp/edebug.el *** emacs-19.10/lisp/edebug.el Sun May 2 23:22:28 1993 --- emacs-19.11/lisp/edebug.el Mon May 31 13:28:44 1993 *************** *** 2542,2544 **** --- 2542,2546 ---- (select-window selected-window))) + (provide 'edebug) + ;;; edebug.el ends here diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/faces.el emacs-19.11/lisp/faces.el *** emacs-19.10/lisp/faces.el Sat May 29 00:36:14 1993 --- emacs-19.11/lisp/faces.el Mon May 31 14:01:46 1993 *************** *** 429,435 **** (or fonts (if face ! (error "no fonts match `%S'." pattern) ! (error "no fonts matching pattern are the same size as `%s'." ! pattern face))) (car fonts)) (cdr (assq 'font (frame-parameters (selected-frame)))))) --- 429,435 ---- (or fonts (if face ! (error "No fonts matching pattern are the same size as `%s'" ! face) ! (error "No fonts match `%s'" pattern))) (car fonts)) (cdr (assq 'font (frame-parameters (selected-frame)))))) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/files.el emacs-19.11/lisp/files.el *** emacs-19.10/lisp/files.el Sat May 29 18:05:58 1993 --- emacs-19.11/lisp/files.el Mon May 31 17:49:17 1993 *************** *** 791,794 **** --- 791,797 ---- Visiting a file whose name matches REGEXP causes FUNCTION to be called.") + (defconst inhibit-local-variables-regexps '("\\.tar$") + "List of regexps; if one matches a file name, don't look for local vars.") + (defun set-auto-mode () "Select major mode appropriate for current buffer. *************** *** 806,809 **** --- 809,820 ---- (skip-chars-forward " \t\n") (if (and enable-local-variables + ;; Don't look for -*- if this file name matches any + ;; of the regexps in inhibit-local-variables-regexps. + (not (let ((temp inhibit-local-variables-regexps)) + (while (and temp + (not (string-match (car temp) + buffer-file-name))) + (setq temp (cdr temp))) + (not temp))) (search-forward "-*-" (save-excursion ;; If the file begins with "#!" diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/gnus.el emacs-19.11/lisp/gnus.el *** emacs-19.10/lisp/gnus.el Sun May 16 22:42:26 1993 --- emacs-19.11/lisp/gnus.el Mon May 31 19:09:28 1993 *************** *** 1,5 **** ;;; GNUS: an NNTP-based News Reader for GNU Emacs ;; Copyright (C) 1987, 1988, 1989, 1990, 1993 Free Software Foundation, Inc. ! ;; $Header: /gd/gnu/emacs/19.0/lisp/RCS/gnus.el,v 1.15 1993/05/17 02:42:16 roland Exp $ ;; This file is part of GNU Emacs. --- 1,5 ---- ;;; GNUS: an NNTP-based News Reader for GNU Emacs ;; Copyright (C) 1987, 1988, 1989, 1990, 1993 Free Software Foundation, Inc. ! ;; $Header: /home/fsf/rms/e19/lisp/RCS/gnus.el,v 1.16 1993/05/30 23:56:49 rms Exp rms $ ;; This file is part of GNU Emacs. *************** *** 114,118 **** (require 'mail-utils) ! (defvar gnus-nntp-server (getenv "NNTPSERVER") "*The name of the host running NNTP server. If it is a string such as `:DIRECTORY', the user's private DIRECTORY --- 114,118 ---- (require 'mail-utils) ! (defvar gnus-nntp-server (or (getenv "NNTPSERVER") gnus-default-nntp-server) "*The name of the host running NNTP server. If it is a string such as `:DIRECTORY', the user's private DIRECTORY *************** *** 541,552 **** (gnus-summary-set-current-mark \"+\"))))") ! (defvar gnus-prepare-article-hook (function gnus-inews-insert-signature) "*A hook called after preparing body, but before preparing header fields. ! The default hook (gnus-inews-insert-signature) inserts a signature ! file specified by the variable gnus-signature-file.") ! (defvar gnus-inews-article-hook (function gnus-inews-do-fcc) "*A hook called before finally posting an article. ! The default hook (gnus-inews-do-fcc) does FCC processing (save article to a file).") --- 541,552 ---- (gnus-summary-set-current-mark \"+\"))))") ! (defvar gnus-prepare-article-hook (list (function gnus-inews-insert-signature)) "*A hook called after preparing body, but before preparing header fields. ! The default hook (`gnus-inews-insert-signature') inserts a signature ! file specified by the variable `gnus-signature-file'.") ! (defvar gnus-inews-article-hook (list (function gnus-inews-do-fcc)) "*A hook called before finally posting an article. ! The default hook (`gnus-inews-do-fcc') does FCC processing (save article to a file).") *************** *** 554,558 **** "*A hook called when exiting (not quitting) Summary mode. If your machine is so slow that exiting from Summary mode takes very ! long time, set the variable gnus-use-cross-reference to nil. This inhibits marking articles as read using cross-reference information.") --- 554,558 ---- "*A hook called when exiting (not quitting) Summary mode. If your machine is so slow that exiting from Summary mode takes very ! long time, set the variable `gnus-use-cross-reference' to nil. This inhibits marking articles as read using cross-reference information.") *************** *** 565,569 **** (defvar gnus-save-newsrc-hook nil "*A hook called when saving the newsrc file. ! This hook is called before saving .newsrc file.") --- 565,569 ---- (defvar gnus-save-newsrc-hook nil "*A hook called when saving the newsrc file. ! This hook is called before saving the `.newsrc' file.") *************** *** 2946,2951 **** (gnus-summary-select-article) (gnus-eval-in-buffer-window gnus-article-buffer ! (call-interactively 'isearch-forward) ! )) (defun gnus-summary-search-article-forward (regexp) --- 2946,2950 ---- (gnus-summary-select-article) (gnus-eval-in-buffer-window gnus-article-buffer ! (isearch-forward))) (defun gnus-summary-search-article-forward (regexp) *************** *** 6488,6492 **** (cond ((and (not rawfile) ;Not forced to read the raw file. ;; .newsrc.el is newer than .newsrc. ! (file-newer-than-file-p quick-file newsrc-file) quick-loaded gnus-newsrc-assoc ;Really loaded? --- 6487,6493 ---- (cond ((and (not rawfile) ;Not forced to read the raw file. ;; .newsrc.el is newer than .newsrc. ! ;; Do it this way in case timestamps are identical ! ;; (on fast machines/disks). ! (not (file-newer-than-file-p newsrc-file quick-file)) quick-loaded gnus-newsrc-assoc ;Really loaded? diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/gud.el emacs-19.11/lisp/gud.el *** emacs-19.10/lisp/gud.el Sat May 22 17:25:06 1993 --- emacs-19.11/lisp/gud.el Mon May 31 01:51:58 1993 *************** *** 107,111 **** (if key (list 'global-set-key ! (concat gud-key-prefix key) (list 'quote func))))) --- 107,111 ---- (if key (list 'global-set-key ! (list 'concat 'gud-key-prefix key) (list 'quote func))))) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/info.el emacs-19.11/lisp/info.el *** emacs-19.10/lisp/info.el Fri May 28 15:51:30 1993 --- emacs-19.11/lisp/info.el Mon May 31 13:55:51 1993 *************** *** 48,52 **** in paths.el.") ! (defvar Info-directory-list nil "List of directories to search for Info documentation files. nil means not yet initialized. In this case, Info uses the environment --- 48,63 ---- in paths.el.") ! (defvar Info-directory-list ! (let ((path (getenv "INFOPATH"))) ! (if path ! (let ((list nil) ! idx) ! (while (> (length path) 0) ! (setq idx (or (string-match ":" path) (length path)) ! list (cons (substring path 0 idx) list) ! path (substring path (min (1+ idx) ! (length path))))) ! (nreverse list)) ! Info-default-directory-list)) "List of directories to search for Info documentation files. nil means not yet initialized. In this case, Info uses the environment *************** *** 113,129 **** (interactive (if current-prefix-arg (list (read-file-name "Info file name: " nil nil t)))) - (or Info-directory-list - (setq Info-directory-list - (let ((path (getenv "INFOPATH"))) - (if path - (let ((list nil) - idx) - (while (> (length path) 0) - (setq idx (or (string-match ":" path) (length path)) - list (cons (substring path 0 idx) list) - path (substring path (min (1+ idx) - (length path))))) - (nreverse list)) - Info-default-directory-list)))) (if file (Info-goto-node (concat "(" file ")")) --- 124,127 ---- *************** *** 1055,1071 **** (goto-char pos) (re-search-backward start (max (point-min) (- pos 200)) 'yes) ! (while (and (re-search-forward all (min (point-max) (+ pos 200)) 'yes) ! (not (and (<= (match-beginning 0) pos) ! (> (match-end 0) pos))))) ! (if (and (<= (match-beginning 0) pos) ! (> (match-end 0) pos)) ! (buffer-substring (match-beginning 1) (match-end 1)) ! (cond ((null errorstring) ! nil) ! ((eq errorstring t) ! (beep) ! nil) ! (t ! (error "No %s around position %d" errorstring pos)))))) (defun Info-follow-nearest-node (click) --- 1053,1070 ---- (goto-char pos) (re-search-backward start (max (point-min) (- pos 200)) 'yes) ! (let (found) ! (while (and (re-search-forward all (min (point-max) (+ pos 200)) 'yes) ! (not (setq found (and (<= (match-beginning 0) pos) ! (> (match-end 0) pos)))))) ! (if (and found (<= (match-beginning 0) pos) ! (> (match-end 0) pos)) ! (buffer-substring (match-beginning 1) (match-end 1)) ! (cond ((null errorstring) ! nil) ! ((eq errorstring t) ! (beep) ! nil) ! (t ! (error "No %s around position %d" errorstring pos))))))) (defun Info-follow-nearest-node (click) *************** *** 1136,1140 **** (define-key Info-mode-map "q" 'Info-exit) (define-key Info-mode-map "s" 'Info-search) ! (define-key Info-mode-map "t" 'Info-top) (define-key Info-mode-map "u" 'Info-up) (define-key Info-mode-map "," 'Info-index-next) --- 1135,1139 ---- (define-key Info-mode-map "q" 'Info-exit) (define-key Info-mode-map "s" 'Info-search) ! (define-key Info-mode-map "t" 'Info-top-node) (define-key Info-mode-map "u" 'Info-up) (define-key Info-mode-map "," 'Info-index-next) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/isearch.el emacs-19.11/lisp/isearch.el *** emacs-19.10/lisp/isearch.el Sat May 29 02:27:51 1993 --- emacs-19.11/lisp/isearch.el Tue Jun 1 00:52:31 1993 *************** *** 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 --- 5,9 ---- ;; Author: Daniel LaLiberte ! ;; |$Date: 1993/06/01 04:52:28 $|$Revision: 1.39 $ ;; This file is not yet part of GNU Emacs, but it is based almost *************** *** 525,529 **** ;; the calling function until searching is completed) by entering ;; a recursive-edit and exiting it when done isearching. ! (if recursive-edit (recursive-edit)) ) --- 525,531 ---- ;; the calling function until searching is completed) by entering ;; a recursive-edit and exiting it when done isearching. ! (if recursive-edit ! (let ((isearch-recursive-edit t)) ! (recursive-edit))) ) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/loaddefs.el emacs-19.11/lisp/loaddefs.el *** emacs-19.10/lisp/loaddefs.el Fri May 28 16:50:17 1993 --- emacs-19.11/lisp/loaddefs.el Mon May 31 17:54:09 1993 *************** *** 754,757 **** --- 754,865 ---- ;;;*** + ;;;### (autoloads (bibtex-mode) "bibtex" "/home/fsf/rms/e19/lisp/bibtex.el" (11274 32339)) + ;;; Generated autoloads from /home/fsf/rms/e19/lisp/bibtex.el + + (autoload (quote bibtex-mode) "bibtex" "\ + Major mode for editing bibtex files. + + \\{bibtex-mode-map} + + A command such as \\[bibtex-Book] will outline the fields for a BibTeX book entry. + + The optional fields start with the string OPT, and thus ignored by BibTeX. + The OPT string may be removed from a field with \\[bibtex-remove-OPT]. + \\[bibtex-kill-optional-field] kills the current optional field entirely. + \\[bibtex-remove-double-quotes] removes the double-quotes around the text of + the current field. \\[bibtex-empty-field] replaces the text of the current + field with the default \"\". + + The command \\[bibtex-clean-entry] cleans the current entry, i.e. (i) removes + double-quotes from entirely numerical fields, (ii) removes OPT from all + non-empty optional fields, (iii) removes all empty optional fields, and (iv) + checks that no non-optional fields are empty. + + Use \\[bibtex-find-text] to position the dot at the end of the current field. + Use \\[bibtex-next-field] to move to end of the next field. + + \\[bibtex-x-environment] binds a mode-specific X menu to control+right + mouse button. + \\[bibtex-sun-environment] binds a mode-specific Sun menu to right + mouse button. + + The following may be of interest as well: + + Functions: + find-bibtex-duplicates + find-bibtex-entry-location + hide-bibtex-entry-bodies + sort-bibtex-entries + validate-bibtex-buffer + + Variables: + bibtex-clean-entry-zap-empty-opts + bibtex-entry-field-alist + bibtex-include-OPTannote + bibtex-include-OPTcrossref + bibtex-include-OPTkey + bibtex-maintain-sorted-entries + bibtex-mode-user-optional-fields + + Fields: + address + Publisher's address + annote + Long annotation used for annotated bibliographies (begins sentence) + author + Name(s) of author(s), in BibTeX name format + booktitle + Book title when the thing being referenced isn't the whole book. + For book entries, the title field should be used instead. + chapter + Chapter number + crossref + The database key of the entry being cross referenced. + edition + Edition of a book (e.g., \"second\") + editor + Name(s) of editor(s), in BibTeX name format. + If there is also an author field, then the editor field should be + for the book or collection that the work appears in + howpublished + How something strange has been published (begins sentence) + institution + Sponsoring institution + journal + Journal name (macros are provided for many) + key + Alphabetizing and labeling key (needed when no author or editor) + month + Month (macros are provided) + note + To help the reader find a reference (begins sentence) + number + Number of a journal or technical report + organization + Organization (sponsoring a conference) + pages + Page number or numbers (use `--' to separate a range) + publisher + Publisher name + school + School name (for theses) + series + The name of a series or set of books. + An individual book will will also have it's own title + title + The title of the thing being referenced + type + Type of a technical report (e.g., \"Research Note\") to be used + instead of the default \"Technical Report\" + volume + Volume of a journal or multivolume work + year + Year---should contain only numerals + --------------------------------------------------------- + Entry to this mode calls the value of bibtex-mode-hook if that value is + non-nil." t nil) + + ;;;*** + ;;;### (autoloads (blackbox) "blackbox" "blackbox.el" (10941 43431)) ;;; Generated autoloads from blackbox.el *************** *** 4177,4180 **** --- 4285,4298 ---- ;;;*** + ;;;### (autoloads (sgml-mode) "sgml-mode" "/home/fsf/rms/e19/lisp/sgml-mode.el" (11274 32251)) + ;;; Generated autoloads from /home/fsf/rms/e19/lisp/sgml-mode.el + + (autoload (quote sgml-mode) "sgml-mode" "\ + Major mode for editing SGML. + Makes > display the matching <. Makes / display matching /. + Use \\[sgml-validate] to validate your document with an SGML parser." t nil) + + ;;;*** + ;;;### (autoloads (shell) "shell" "shell.el" (11231 58570)) ;;; Generated autoloads from shell.el *************** *** 4370,4410 **** Communication with HOST is recorded in a buffer *HOST-rsh*. Normally input is edited in Emacs and sent a line at a time." t nil) - - ;;;*** - - ;;;### (autoloads (terminal-emulator) "term1" "term1.el" (11249 3876)) - ;;; Generated autoloads from term1.el - - (autoload (quote terminal-emulator) "term1" "\ - Under a display-terminal emulator in BUFFER, run PROGRAM on arguments ARGS. - ARGS is a list of argument-strings. Remaining arguments are WIDTH and HEIGHT. - BUFFER's contents are made an image of the display generated by that program, - and any input typed when BUFFER is the current Emacs buffer is sent to that - program an keyboard input. - - Interactively, BUFFER defaults to \"*terminal*\" and PROGRAM and ARGS - are parsed from an input-string using your usual shell. - WIDTH and HEIGHT are determined from the size of the current window - -- WIDTH will be one less than the window's width, HEIGHT will be its height. - - To switch buffers and leave the emulator, or to give commands - to the emulator itself (as opposed to the program running under it), - type Control-^. The following character is an emulator command. - Type Control-^ twice to send it to the subprogram. - This escape character may be changed using the variable `terminal-escape-char'. - - `Meta' characters may not currently be sent through the terminal emulator. - - Here is a list of some of the variables which control the behaviour - of the emulator -- see their documentation for more information: - terminal-escape-char, terminal-scrolling, terminal-more-processing, - terminal-redisplay-interval. - - This function calls the value of terminal-mode-hook if that exists - and is non-nil after the terminal buffer has been set up and the - subprocess started. - - Presently with `termcap' only; if somebody sends us code to make this - work with `terminfo' we will try to use it." t nil) ;;;*** --- 4488,4491 ---- diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/lucid.el emacs-19.11/lisp/lucid.el *** emacs-19.10/lisp/lucid.el Sun May 23 22:03:33 1993 --- emacs-19.11/lisp/lucid.el Tue Jun 1 02:00:53 1993 *************** *** 30,35 **** (copy-tree (cdr tree))) (if (vectorp tree) ! (let ((new (copy-sequence tree)) ! (i (1- (length new)))) (while (>= i 0) (aset new i (copy-tree (aref new i))) --- 30,35 ---- (copy-tree (cdr tree))) (if (vectorp tree) ! (let* ((new (copy-sequence tree)) ! (i (1- (length new)))) (while (>= i 0) (aset new i (copy-tree (aref new i))) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/man.el emacs-19.11/lisp/man.el *** emacs-19.10/lisp/man.el Sat May 29 00:53:57 1993 --- emacs-19.11/lisp/man.el Sun May 30 15:14:36 1993 *************** *** 446,464 **** (defun Man-notify-when-ready (man-buffer) "Notify the user when MAN-BUFFER is ready. ! 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 "")) --- 446,464 ---- (defun Man-notify-when-ready (man-buffer) "Notify the user when MAN-BUFFER is ready. ! 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 "")) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/mh-e.el emacs-19.11/lisp/mh-e.el *** emacs-19.10/lisp/mh-e.el Fri May 28 17:29:43 1993 --- emacs-19.11/lisp/mh-e.el Sun May 30 18:56:44 1993 *************** *** 3,10 **** ;;; 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 --- 3,10 ---- ;;; Copyright (C) 1985, 86, 87, 88, 90, 92, 93 Free Software Foundation ! (defconst mh-e-time-stamp "Time-stamp: <93/05/30 18:37:43 gildea>") ;; Maintainer: Stephen Gildea ! ;; Version: 3.8.2 ;; Keywords: mail *************** *** 49,53 **** ;;; 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: --- 49,53 ---- ;;; 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.10 1993/05/30 22:56:31 rms Exp $") ;;; Code: *************** *** 175,179 **** --- 175,183 ---- "*Default for directory name prompted for by mh-unshar-msg.") + (defvar mh-signature-file-name "~/.signature" + "*Name of file containing the user's signature. + Inserted into message by \\\\[mh-insert-signature].") + ;;; Parameterize mh-e to work with different scan formats. The defaults work ;;; with the standard MH scan listings. *************** *** 1825,1828 **** --- 1829,1835 ---- If there is a region, this variable is ignored. + mh-signature-file-name (\"~/.signature\") + File to be inserted into message by \\[mh-insert-signature]. + Upon invoking mh-letter-mode, text-mode-hook and mh-letter-mode-hook are invoked with no args, if those values are non-nil. *************** *** 1914,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 --- 1921,1927 ---- (defun mh-insert-signature () ! "Insert the file named by mh-signature-file-name at the current point." (interactive) ! (insert-file-contents mh-signature-file-name) (set-buffer-modified-p (buffer-modified-p))) ; force mode line update *************** *** 2925,2927 **** ;;; mh-e.el ends here - --- 2932,2933 ---- diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/outline.el emacs-19.11/lisp/outline.el *** emacs-19.10/lisp/outline.el Fri May 21 13:24:54 1993 --- emacs-19.11/lisp/outline.el Mon May 31 23:24:11 1993 *************** *** 216,226 **** If FLAG is `\\n' (newline character) then text is shown, while if FLAG is `\\^M' (control-M) the text is hidden." ! (let (buffer-read-only ! (modp (buffer-modified-p))) ! (unwind-protect ! (subst-char-in-region from to ! (if (= flag ?\n) ?\^M ?\n) ! flag) ! (set-buffer-modified-p modp)))) (defun hide-entry () --- 216,223 ---- If FLAG is `\\n' (newline character) then text is shown, while if FLAG is `\\^M' (control-M) the text is hidden." ! (let (buffer-read-only) ! (subst-char-in-region from to ! (if (= flag ?\n) ?\^M ?\n) ! flag t))) (defun hide-entry () diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/rmailsum.el emacs-19.11/lisp/rmailsum.el *** emacs-19.10/lisp/rmailsum.el Fri May 28 00:44:47 1993 --- emacs-19.11/lisp/rmailsum.el Mon May 31 13:04:49 1993 *************** *** 106,110 **** (narrow-to-region (point) ! (progn (search-forward (if whole-message "" "\n\n")) (point))) (goto-char (point-min)) (if whole-message (re-search-forward subject nil t) --- 106,110 ---- (narrow-to-region (point) ! (progn (search-forward (if whole-message "\^_" "\n\n")) (point))) (goto-char (point-min)) (if whole-message (re-search-forward subject nil t) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/sc-alist.el emacs-19.11/lisp/sc-alist.el *** emacs-19.10/lisp/sc-alist.el --- emacs-19.11/lisp/sc-alist.el Fri Jan 8 10:12:37 1993 *************** *** 0 **** --- 1,134 ---- + ;; -*- Mode: Emacs-Lisp -*- + ;; sc-alist.el -- Version 1.0 (used to be baw-alist.el) + + ;; association list utilities providing insertion, deletion, sorting + ;; fetching off key-value pairs in association lists. + + ;; ========== Disclaimer ========== + ;; This software 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. + + ;; This software was written as part of the supercite author's + ;; official duty as an employee of the United States Government and is + ;; thus in the public domain. You are free to use that particular + ;; software as you wish, but WITHOUT ANY WARRANTY WHATSOEVER. It + ;; would be nice, though if when you use any of this code, you give + ;; due credit to the author. + + ;; ========== Author (unless otherwise stated) ======================== + ;; NAME: Barry A. Warsaw USMAIL: Century Computing, Inc. + ;; TELE: (301) 593-3330 1014 West Street + ;; INET: bwarsaw@cen.com Laurel, Md 20707 + ;; UUCP: uunet!cen.com!bwarsaw + ;; + (provide 'sc-alist) + + + (defun asort (alist-symbol key) + "Move a specified key-value pair to the head of an alist. + The alist is referenced by ALIST-SYMBOL. Key-value pair to move to + head is one matching KEY. Returns the sorted list and doesn't affect + the order of any other key-value pair. Side effect sets alist to new + sorted list." + (set alist-symbol + (sort (copy-alist (eval alist-symbol)) + (function (lambda (a b) (equal (car a) key)))))) + + + (defun aelement (key value) + "Makes a list of a cons cell containing car of KEY and cdr of VALUE. + The returned list is suitable as an element of an alist." + (list (cons key value))) + + + (defun aheadsym (alist) + "Return the key symbol at the head of ALIST." + (car (car alist))) + + + (defun anot-head-p (alist key) + "Find out if a specified key-value pair is not at the head of an alist. + The alist to check is specified by ALIST and the key-value pair is the + one matching the supplied KEY. Returns nil if ALIST is nil, or if + key-value pair is at the head of the alist. Returns t if key-value + pair is not at the head of alist. ALIST is not altered." + (not (equal (aheadsym alist) key))) + + + (defun aput (alist-symbol key &optional value) + "Inserts a key-value pair into an alist. + The alist is referenced by ALIST-SYMBOL. The key-value pair is made + from KEY and optionally, VALUE. Returns the altered alist or nil if + ALIST is nil. + + If the key-value pair referenced by KEY can be found in the alist, and + VALUE is supplied non-nil, then the value of KEY will be set to VALUE. + If VALUE is not supplied, or is nil, the key-value pair will not be + modified, but will be moved to the head of the alist. If the key-value + pair cannot be found in the alist, it will be inserted into the head + of the alist (with value nil if VALUE is nil or not supplied)." + (let ((elem (aelement key value)) + alist) + (asort alist-symbol key) + (setq alist (eval alist-symbol)) + (cond ((null alist) (set alist-symbol elem)) + ((anot-head-p alist key) (set alist-symbol (nconc elem alist))) + (value (setcar alist (car elem))) + (t alist)))) + + + (defun adelete (alist-symbol key) + "Delete a key-value pair from the alist. + Alist is referenced by ALIST-SYMBOL and the key-value pair to remove + is pair matching KEY. Returns the altered alist." + (asort alist-symbol key) + (let ((alist (eval alist-symbol))) + (cond ((null alist) nil) + ((anot-head-p alist key) alist) + (t (set alist-symbol (cdr alist)))))) + + + (defun aget (alist key &optional keynil-p) + "Returns the value in ALIST that is associated with KEY. + Optional KEYNIL-P describes what to do if the value associated with + KEY is nil. If KEYNIL-P is not supplied or is nil, and the value is + nil, then KEY is returned. If KEYNIL-P is non-nil, then nil would be + returned. + + If no key-value pair matching KEY could be found in ALIST, or ALIST is + nil then nil is returned. ALIST is not altered." + (let ((copy (copy-alist alist))) + (cond ((null alist) nil) + ((progn (asort 'copy key) + (anot-head-p copy key)) nil) + ((cdr (car copy))) + (keynil-p nil) + ((car (car copy))) + (t nil)))) + + + (defun amake (alist-symbol keylist &optional valuelist) + "Make an association list. + The association list is attached to the alist referenced by + ALIST-SYMBOL. Each element in the KEYLIST becomes a key and is + associated with the value in VALUELIST with the same index. If + VALUELIST is not supplied or is nil, then each key in KEYLIST is + associated with nil. + + KEYLIST and VALUELIST should have the same number of elements, but + this isn't enforced. If VALUELIST is smaller than KEYLIST, remaining + keys are associated with nil. If VALUELIST is larger than KEYLIST, + extra values are ignored. Returns the created alist." + (let ((keycar (car keylist)) + (keycdr (cdr keylist)) + (valcar (car valuelist)) + (valcdr (cdr valuelist))) + (cond ((null keycdr) + (aput alist-symbol keycar valcar)) + (t + (amake alist-symbol keycdr valcdr) + (aput alist-symbol keycar valcar)))) + (eval alist-symbol)) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/sc-elec.el emacs-19.11/lisp/sc-elec.el *** emacs-19.10/lisp/sc-elec.el --- emacs-19.11/lisp/sc-elec.el Fri Jan 8 10:12:36 1993 *************** *** 0 **** --- 1,198 ---- + ;; -*- Mode: Emacs-Lisp -*- + ;; sc-elec.el -- Version 2.3 + + ;; ========== Introduction ========== + ;; This file contains sc-electric mode for viewing reference headers. + ;; It is loaded automatically by supercite.el when needed. + + ;; ========== Disclaimer ========== + ;; This software 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. + + ;; Some of this software was written as part of the supercite author's + ;; official duty as an employee of the United States Government and is + ;; thus in the public domain. You are free to use that particular + ;; software as you wish, but WITHOUT ANY WARRANTY WHATSOEVER. It + ;; would be nice, though if when you use any of this code, you give + ;; due credit to the author. + + ;; Other parts of this code were written by other people. Wherever + ;; possible, credit to that author, and the copy* notice supplied by + ;; the author are included with that code. In all cases, the spirit, + ;; if not the letter of the GNU General Public Licence applies. + + ;; ========== Author (unless otherwise stated) ========== + ;; NAME: Barry A. Warsaw USMAIL: Century Computing, Inc. + ;; TELE: (301) 593-3330 1014 West Street + ;; UUCP: uunet!cen.com!bwarsaw Laurel, MD 20707 + ;; INET: bwarsaw@cen.com + + ;; Want to be on the Supercite mailing list? + ;; + ;; Send articles to: + ;; INET: supercite@anthem.nlm.nih.gov + ;; UUCP: uunet!anthem.nlm.nih.gov!supercite + ;; + ;; Send administrivia (additions/deletions to list, etc) to: + ;; INET: supercite-request@anthem.nlm.nih.gov + ;; UUCP: uunet!anthem.nlm.nih.gov!supercite-request + ;; + (provide 'sc-elec) + + + ;; ====================================================================== + ;; set up vars for major mode + + (defconst sc-electric-bufname "*sc-erefs*" + "*Supercite's electric buffer name.") + + + (defvar sc-electric-mode-hook nil + "*Hook for sc-electric-mode.") + + + + ;; ====================================================================== + ;; sc-electric-mode + + (defun sc-electric-mode (&optional arg) + "Quasi major mode for viewing supercite reference headers. + Commands are: \\{sc-electric-mode-map} + Sc-electric-mode is not intended to be run interactively, but rather + accessed through supercite's electric reference feature. See + sc-insert-reference for more details. Optional ARG is the initial + header style to use, unless not supplied or invalid, in which case + sc-preferred-header-style is used." + (let ((gal sc-gal-information) + (sc-eref-style (if arg ;; assume passed arg is okay + arg + (if (and (natnump sc-preferred-header-style) + (sc-valid-index-p sc-preferred-header-style)) + sc-preferred-header-style + 0)))) + (get-buffer-create sc-electric-bufname) + ;; set up buffer and enter command loop + (save-excursion + (save-window-excursion + (pop-to-buffer sc-electric-bufname) + (kill-all-local-variables) + (setq sc-gal-information gal + buffer-read-only t + mode-name "Supercite-Electric-References" + major-mode 'sc-electric-mode) + (use-local-map sc-electric-mode-map) + (sc-eref-show sc-eref-style) + (run-hooks 'sc-electric-mode-hook) + (recursive-edit) + )) + (if sc-eref-style + (condition-case nil + (eval (nth sc-eref-style sc-rewrite-header-list)) + (error nil) + )) + ;; now restore state + (kill-buffer sc-electric-bufname) + )) + + + + ;; ====================================================================== + ;; functions for electric mode + + (defun sc-eref-index (index) + "Check INDEX to be sure it is a valid index into sc-rewrite-header-list. + If sc-electric-circular-p is non-nil, then list is considered circular + so that movement across the ends of the list wraparound." + (let ((last (1- (length sc-rewrite-header-list)))) + (cond ((sc-valid-index-p index) index) + ((< index 0) + (if sc-electric-circular-p last + (progn (error "No preceding reference headers in list.") 0))) + ((> index last) + (if sc-electric-circular-p 0 + (progn (error "No following reference headers in list.") last))) + ) + )) + + + (defun sc-eref-show (index) + "Show reference INDEX in sc-rewrite-header-list." + (setq sc-eref-style (sc-eref-index index)) + (save-excursion + (set-buffer sc-electric-bufname) + (let ((ref (nth sc-eref-style sc-rewrite-header-list)) + (buffer-read-only nil)) + (erase-buffer) + (goto-char (point-min)) + (condition-case err + (progn + (set-mark (point-min)) + (eval ref) + (message "Showing reference header %d." sc-eref-style) + (goto-char (point-max)) + ) + (void-function + (progn (message + "Symbol's function definition is void: %s (Header %d)" + (symbol-name (car (cdr err))) + sc-eref-style) + (beep) + )) + )))) + + + + ;; ====================================================================== + ;; interactive commands + + (defun sc-eref-next () + "Display next reference in other buffer." + (interactive) + (sc-eref-show (1+ sc-eref-style))) + + + (defun sc-eref-prev () + "Display previous reference in other buffer." + (interactive) + (sc-eref-show (1- sc-eref-style))) + + + (defun sc-eref-setn () + "Set reference header selected as preferred." + (interactive) + (setq sc-preferred-header-style sc-eref-style) + (message "Preferred reference style set to header %d." sc-eref-style)) + + + (defun sc-eref-goto (refnum) + "Show reference style indexed by REFNUM. + If REFNUM is an invalid index, don't go to that reference and return + nil." + (interactive "NGoto Reference: ") + (if (sc-valid-index-p refnum) + (sc-eref-show refnum) + (error "Invalid reference: %d. (Range: [%d .. %d])" + refnum 0 (1- (length sc-rewrite-header-list))) + )) + + + (defun sc-eref-jump () + "Set reference header to preferred header." + (interactive) + (sc-eref-show sc-preferred-header-style)) + + + (defun sc-eref-abort () + "Exit from electric reference mode without inserting reference." + (interactive) + (setq sc-eref-style nil) + (exit-recursive-edit)) + + + (defun sc-eref-exit () + "Exit from electric reference mode and insert selected reference." + (interactive) + (exit-recursive-edit)) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/sc.el emacs-19.11/lisp/sc.el *** emacs-19.10/lisp/sc.el --- emacs-19.11/lisp/sc.el Fri Jan 8 10:30:08 1993 *************** *** 0 **** --- 1,1563 ---- + ;; -*- Mode: Emacs-Lisp -*- + ;; sc.el -- Version 2.3 (used to be supercite.el) + + ;; ========== Introduction ========== + ;; Citation and attribution package for various GNU emacs news and + ;; electronic mail reading subsystems. This version of supercite will + ;; interface to VM 4.40+ and MH-E 3.7 (shipped w/ emacs 18.57) as is. + ;; It will also interface with GNUS 3.12+, RMAIL 18.55+, GNEWS, and + ;; probably most other news/mail subsystems by using the overloading + ;; functions provided in sc-oloads.el (see that file or the README for + ;; more information on interfacing supercite with your reader subsystem). + ;; This version should now be compatible with Lucid Emacs 19.x emacses. + + ;; This package does not do any yanking of messages, but instead + ;; massages raw reply buffers set up by the reply/forward functions in + ;; the news/mail subsystems. Therefore, such useful operations as + ;; yanking and citing portions of the original article (instead of the + ;; whole article) are not within the ability or responsiblity of + ;; supercite. + + ;; ========== Disclaimer ========== + ;; This software is distributed in the hope that it will be useful, + ;; but WITHOUT ANY WARRANTY. No author or distributor, nor any + ;; author's past, present, or future employers 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. + + ;; Some of this software was written as part of the supercite author's + ;; official duty as an employee of the United States Government and is + ;; thus not subject to copyright. You are free to use that particular + ;; software as you wish, but WITHOUT ANY WARRANTY WHATSOEVER. It + ;; would be nice, though if when you use any of this or other freely + ;; available code, you give due credit to the author. + + ;; Other parts of this code were written by other people. Wherever + ;; possible, credit to that author, and the copy* notice supplied by + ;; the author are included with that code. The supercite author is no + ;; longer an employee of the U.S. Government so the GNU Public Licence + ;; should be considered in effect for all enhancements and bug fixes + ;; performed by the author. + + ;; ========== Author (unless otherwise stated) ======================== + ;; NAME: Barry A. Warsaw USMAIL: Century Computing, Inc. + ;; TELE: (301) 593-3330 1014 West Street + ;; INET: bwarsaw@cen.com Laurel, Md 20707 + ;; UUCP: uunet!cen.com!bwarsaw + ;; + ;; Want to be on the Supercite mailing list? + ;; + ;; Send articles to: + ;; Internet: supercite@anthem.nlm.nih.gov + ;; UUCP: uunet!anthem.nlm.nih.gov!supercite + ;; + ;; Send administrivia (additions/deletions to list, etc) to: + ;; Internet: supercite-request@anthem.nlm.nih.gov + ;; UUCP: uunet!anthem.nlm.nih.gov!supercite-request + + ;; ========== Credits and Thanks ========== + ;; This package was derived from the Superyank 1.11 package as posted + ;; to the net. Superyank 1.11 was inspired by code and ideas from + ;; Martin Neitzel and Ashwin Ram. Supercite version 2.3 has evolved + ;; through the comments and suggestions of the supercite mailing list + ;; which consists of many authors and users of the various mail and + ;; news reading subsystems. + + ;; Many folks on the supercite mailing list have contributed their + ;; help in debugging, making suggestions and supplying support code or + ;; bug fixes for the previous versions of supercite. I want to thank + ;; everyone who helped, especially (in no particular order): + ;; + ;; Mark D. Baushke, Khalid Sattar, David Lawrence, Chris Davis, Kyle + ;; Jones, Kayvan Sylvan, Masanobu Umeda, Dan Jacobson, Piet van + ;; Oostrum, Hamish (H.I.) Macdonald, and Joe Wells. + ;; + ;; I don't mean to leave anyone out. All who have helped have been + ;; appreciated. + + ;; ========== Getting Started ========== + ;; Here is a quick guide to getting started with supercite. The + ;; information contained here is mostly excerpted from the more + ;; detailed explanations given in the accompanying README file. + ;; Naturally, there are many customizations you can do to give your + ;; replies that personalized flair, but the instructions in this + ;; section should be sufficient for getting started. + + ;; With this release of supercite overloading is the only supported + ;; way to get supercite hooked into your favorite news/mail reading + ;; subsystems. Overloading will be necessary for RMAIL, GNUS, GNEWS, + ;; RNEWS and PCMAIL. Overloading will not be needed for VM 4.37+ or + ;; MH-E 3.7+. MH-E comes with emacs 18.57 but if you have an earlier + ;; version of emacs, you should be able to ftp MH-E 3.7 separately. Or + ;; you can extract the MH-E overloading stuff from version 2.1's + ;; sc-oloads.el. + + ;; First, to connect supercite to any mail/news reading subsystem, put + ;; this in your .emacs file: + ;; + ;; (setq mail-yank-hooks 'sc-cite-original) ; for all but MH-E + ;; (setq mh-yank-hooks 'sc-cite-original) ; for MH-E only + ;; + ;; If supercite is not pre-loaded into your emacs session, you should + ;; add the following autoload: + ;; + ;; (autoload 'sc-cite-original "sc" "Supercite 2.3" t) + ;; + ;; Then, if you need to overload, put the following in your .emacs file: + ;; + ;; (defun my-sc-overload-hook () + ;; (require 'sc-oloads) ; be sure this file is on your load-path + ;; (sc-overload-functions)) + ;; + ;; (setq news-reply-mode-hook 'my-sc-overload-hook) ; for RNEWS,GNUS,GNEWS + ;; (setq mail-setup-hook 'my-sc-overload-hook) ; for RMAIL, PCMAIL + ;; + ;; Finally, if you want to customize supercite, you should do it in a + ;; function called my-supercite-hook and: + ;; + ;; (setq sc-load-hook 'my-supercite-hook) + + (require 'sc-alist) + + + ;; vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + ;; start of user defined variables + ;; vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + + (defvar sc-nested-citation-p nil + "*Controls whether to use nested or non-nested citation style. + Non-nil uses nested citations, nil uses non-nested citations. Type + \\[sc-describe] for more information.") + + (defvar sc-citation-leader " " + "*String comprising first part of a citation.") + + (defvar sc-citation-delimiter ">" + "*String comprising third part of a citation. + This string is used in both nested and non-nested citations.") + + (defvar sc-citation-separator " " + "*String comprising fourth and last part of a citation.") + + (defvar sc-default-author-name "Anonymous" + "*String used when author's name cannot be determined.") + + (defvar sc-default-attribution "Anon" + "*String used when author's attribution cannot be determined.") + + ;; Noriya KOBAYASHI (nk@ics.osaka-u.ac.jp) writes to the supercite + ;; mailing list: + ;; I use supercite in Nemacs-3.3.2. In order to handle citation using + ;; Kanji, [...set sc-cite-regexp to...] + ;; "\\s *\\([a-zA-Z0-9]\\|\\cc\\|\\cC\\|\\ch\\|\\cH\\|\\ck\\|\\cK\\)*\\s *>+" + ;; + (defvar sc-cite-regexp "\\s *[-a-zA-Z0-9_.]*>+\\s *" + "*Regular expression describing how a already cited line begins. + The regexp is only used at the beginning of a line, so it doesn't need + to start with a '^'.") + + (defvar sc-titlecue-regexp "\\s +-+\\s +" + "*Regular expression describing the separator between names and titles. + Set to nil to treat entire field as a name.") + + (defvar sc-spacify-name-chars '(?_ ?* ?+ ?=) + "*List of characters to convert to spaces if found in an author's name.") + + (defvar sc-nicknames-alist + '(("Michael" "Mike") + ("Daniel" "Dan") + ("David" "Dave") + ("Jonathan" "John") + ("William" "Bill") + ("Elizabeth" "Beth") + ("Elizabeth" "Betsy") + ("Kathleen" "Kathy") + ("Smith" "Smitty")) + "*Association list of names and their common nicknames. + Entries are of the form (NAME NICKNAME), and NAMEs can have more than + one nickname. Nicknames will not be automatically used as an + attribution string, since I'm not sure this is really polite, but if a + name is glommed from the author name and presented in the attribution + string completion list, the matching nicknames will also be presented. + Set this variable to nil to defeat nickname expansions. Also note that + nicknames are not put in the supercite information alist.") + + (defvar sc-confirm-always-p t + "*If non-nil, always confirm attribution string before citing text body.") + + (defvar sc-preferred-attribution 'firstname + "*Specifies which part of the author's name becomes the attribution. + The value of this variable must be one of the following quoted symbols: + + emailname -- email terminus name + initials -- initials of author + firstname -- first name of author + lastname -- last name of author + middlename1 -- first middle name of author + middlename2 -- second middle name of author + ... + + Middle name indexes can be any positive integer greater than 0, though + it is unlikely that many authors will supply more than one middle + name, if that many.") + + (defvar sc-use-only-preference-p nil + "*Controls what happens when the preferred attribution cannot be found. + If non-nil, then sc-default-attribution will be used. If nil, then + some secondary scheme will be employed to find a suitable attribution + string.") + + (defvar sc-downcase-p nil + "*Non-nil means downcase the attribution and citation strings.") + + (defvar sc-rewrite-header-list + '((sc-no-header) + (sc-header-on-said) + (sc-header-inarticle-writes) + (sc-header-regarding-adds) + (sc-header-attributed-writes) + (sc-header-verbose) + (sc-no-blank-line-or-header) + ) + "*List of reference header rewrite functions. + The variable sc-preferred-header-style controls which function in this + list is chosen for automatic reference header insertions. Electric + reference mode will cycle through this list of functions. For more + information, type \\[sc-describe].") + + (defvar sc-preferred-header-style 1 + "*Index into sc-rewrite-header-list specifying preferred header style. + Index zero accesses the first function in the list.") + + (defvar sc-electric-references-p t + "*Use electric references if non-nil.") + + (defvar sc-electric-circular-p t + "*Treat electric references as circular if non-nil.") + + (defvar sc-mail-fields-list + '("date" "message-id" "subject" "newsgroups" "references" + "from" "return-path" "path" "reply-to" "organization" + "reply" ) + "*List of mail header whose values will be saved by supercite. + These values can be used in header rewrite functions by accessing them + with the sc-field function. Mail headers in this list are case + insensitive and do not require a trailing colon.") + + (defvar sc-mumble-string "" + "*Value returned by sc-field if chosen field cannot be found.") + + (defvar sc-nuke-mail-headers-p t + "*Nuke or don't nuke mail headers. + If non-nil, nuke mail headers after gleaning useful information from + them.") + + (defvar sc-reference-tag-string ">>>>> " + "*String used at the beginning of built-in reference headers.") + + (defvar sc-fill-paragraph-hook 'sc-fill-paragraph + "*Hook for filling a paragraph. + This hook gets executed when you fill a paragraph either manually or + automagically. It expects point to be within the extent of the + paragraph that is going to be filled. This hook allows you to use a + different paragraph filling package than the one supplied with + supercite.") + + (defvar sc-auto-fill-region-p nil + "*If non-nil, automatically fill each paragraph after it has been cited.") + + (defvar sc-auto-fill-query-each-paragraph-p nil + "*If non-nil, query before filling each paragraph. + No querying and no filling will be performed if sc-auto-fill-region-p + is set to nil.") + + (defvar sc-fixup-whitespace-p nil + "*If non-nil, delete all leading white space before citing.") + + (defvar sc-all-but-cite-p nil + "*If non-nil, sc-cite-original does everything but cite the text. + This is useful for manually citing large messages, or portions of + large messages. When non-nil, sc-cite-original will still set up all + necessary variables and databases, but will skip the citing routine + which modify the reply buffer's text.") + + (defvar sc-load-hook nil + "*User definable hook. + Runs after supercite is loaded. Set your customizations here.") + + (defvar sc-pre-hook nil + "*User definable hook. + Runs before sc-cite-original executes.") + + (defvar sc-post-hook nil + "*User definable hook. + Runs after sc-cite-original executes.") + + (defvar sc-header-nuke-list + '("via" "origin" "status" "received" "remailed" "cc" "sender" "replied" + "organization" "keywords" "distribution" "xref" "references" "expires" + "approved" "summary" "precedence" "subject" "newsgroup[s]?" + "\\(followup\\|apparently\\|errors\\|\\(\\(in-\\)?reply\\)?-\\)?to" + "x-[a-z0-9-]+" "[a-z-]*message-id" "\\(summary-\\)?line[s]" + "\\(\\(return\\|reply\\)-\\)?path" "\\(posted-\\)?date" + "\\(mail-\\)?from") + "*List of mail headers to remove from body of reply.") + + + + ;; ====================================================================== + ;; keymaps + + (defvar sc-default-keymap + '(lambda () + (local-set-key "\C-c\C-r" 'sc-insert-reference) + (local-set-key "\C-c\C-t" 'sc-cite) + (local-set-key "\C-c\C-a" 'sc-recite) + (local-set-key "\C-c\C-u" 'sc-uncite) + (local-set-key "\C-c\C-i" 'sc-insert-citation) + (local-set-key "\C-c\C-o" 'sc-open-line) + (local-set-key "\C-c\C-q" 'sc-fill-paragraph-manually) + (local-set-key "\C-cq" 'sc-fill-paragraph-manually) + (local-set-key "\C-c\C-m" 'sc-modify-information) + (local-set-key "\C-cf" 'sc-view-field) + (local-set-key "\C-cg" 'sc-glom-headers) + (local-set-key "\C-c\C-v" 'sc-version) + (local-set-key "\C-c?" 'sc-describe) + ) + "*Default keymap if major-mode can't be found in `sc-local-keymaps'.") + + (defvar sc-local-keymaps + '((mail-mode + (lambda () + (local-set-key "\C-c\C-r" 'sc-insert-reference) + (local-set-key "\C-c\C-t" 'sc-cite) + (local-set-key "\C-c\C-a" 'sc-recite) + (local-set-key "\C-c\C-u" 'sc-uncite) + (local-set-key "\C-c\C-i" 'sc-insert-citation) + (local-set-key "\C-c\C-o" 'sc-open-line) + (local-set-key "\C-c\C-q" 'sc-fill-paragraph-manually) + (local-set-key "\C-cq" 'sc-fill-paragraph-manually) + (local-set-key "\C-c\C-m" 'sc-modify-information) + (local-set-key "\C-cf" 'sc-view-field) + (local-set-key "\C-cg" 'sc-glom-headers) + (local-set-key "\C-c\C-v" 'sc-version) + (local-set-key "\C-c?" 'sc-describe) + )) + (mh-letter-mode + (lambda () + (local-set-key "\C-c\C-r" 'sc-insert-reference) + (local-set-key "\C-c\C-t" 'sc-cite) + (local-set-key "\C-c\C-a" 'sc-recite) + (local-set-key "\C-c\C-u" 'sc-uncite) + (local-set-key "\C-ci" 'sc-insert-citation) + (local-set-key "\C-c\C-o" 'sc-open-line) + (local-set-key "\C-cq" 'sc-fill-paragraph-manually) + (local-set-key "\C-c\C-m" 'sc-modify-information) + (local-set-key "\C-cf" 'sc-view-field) + (local-set-key "\C-cg" 'sc-glom-headers) + (local-set-key "\C-c\C-v" 'sc-version) + (local-set-key "\C-c?" 'sc-describe) + )) + (news-reply-mode mail-mode) + (vm-mail-mode mail-mode) + (e-reply-mode mail-mode) + (n-reply-mode mail-mode) + ) + "*List of keymaps to use with the associated major-mode.") + + (defvar sc-electric-mode-map nil + "*Keymap for sc-electric-mode.") + + (if sc-electric-mode-map + nil + (setq sc-electric-mode-map (make-sparse-keymap)) + (define-key sc-electric-mode-map "p" 'sc-eref-prev) + (define-key sc-electric-mode-map "n" 'sc-eref-next) + (define-key sc-electric-mode-map "s" 'sc-eref-setn) + (define-key sc-electric-mode-map "j" 'sc-eref-jump) + (define-key sc-electric-mode-map "x" 'sc-eref-abort) + (define-key sc-electric-mode-map "\r" 'sc-eref-exit) + (define-key sc-electric-mode-map "\n" 'sc-eref-exit) + (define-key sc-electric-mode-map "q" 'sc-eref-exit) + (define-key sc-electric-mode-map "g" 'sc-eref-goto) + ) + + ;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ;; end of user defined variables + ;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + + ;; ====================================================================== + ;; global variables, not user accessable + + (defconst sc-version-number "2.3" + "Supercite's version number.") + + ;; when rnewspost.el patch is installed (or function is overloaded) + ;; this should be nil since supercite now does this itself. + (setq news-reply-header-hook nil) + + ;; autoload for sc-electric-mode + (autoload 'sc-electric-mode "sc-elec" + "Quasi-major mode for viewing supercite reference headers." nil) + + ;; global alists (gals), misc variables. make new bytecompiler happy + (defvar sc-gal-information nil + "Internal global alist variable containing information.") + (defvar sc-gal-attributions nil + "Internal global alist variable containing attributions.") + (defvar sc-fill-arg nil + "Internal fill argument holder.") + (defvar sc-cite-context nil + "Internal citation context holder.") + (defvar sc-force-confirmation-p nil + "Internal variable.") + + (make-variable-buffer-local 'sc-gal-attributions) + (make-variable-buffer-local 'sc-gal-information) + (make-variable-buffer-local 'sc-leached-keymap) + (make-variable-buffer-local 'sc-fill-arg) + (make-variable-buffer-local 'sc-cite-context) + + (setq-default sc-gal-attributions nil) + (setq-default sc-gal-information nil) + (setq-default sc-leached-keymap (current-local-map)) + (setq-default sc-fill-arg nil) + (setq-default sc-cite-context nil) + + + + ;; ====================================================================== + ;; miscellaneous support functions + + (defun sc-mark () + "Mark compatibility between emacs v18 and v19." + (let ((zmacs-regions nil)) + (mark))) + + (defun sc-update-gal (attribution) + "Update the information alist. + Add ATTRIBUTION and compose the nested and non-nested citation + strings." + (let ((attrib (if sc-downcase-p (downcase attribution) attribution))) + (aput 'sc-gal-information "sc-attribution" attrib) + (aput 'sc-gal-information "sc-nested-citation" + (concat attrib sc-citation-delimiter)) + (aput 'sc-gal-information "sc-citation" + (concat sc-citation-leader + attrib + sc-citation-delimiter + sc-citation-separator)))) + + (defun sc-valid-index-p (index) + "Returns t if INDEX is a valid index into sc-rewrite-header-list." + (let ((last (1- (length sc-rewrite-header-list)))) + (and (natnump index) ;; a number, and greater than or equal to zero + (<= index last) ;; less than or equal to the last index + ))) + + (defun sc-string-car (namestring) + "Return the string-equivalent \"car\" of NAMESTRING. + + example: (sc-string-car \"John Xavier Doe\") + => \"John\"" + (substring namestring + (progn (string-match "\\s *" namestring) (match-end 0)) + (progn (string-match "\\s *\\S +" namestring) (match-end 0)))) + + (defun sc-string-cdr (namestring) + "Return the string-equivalent \"cdr\" of NAMESTRING. + + example: (sc-string-cdr \"John Xavier Doe\") + => \"Xavier Doe\"" + (substring namestring + (progn (string-match "\\s *\\S +\\s *" namestring) + (match-end 0)))) + + (defun sc-linepos (&optional position col-p) + "Return the character position at various line positions. + Optional POSITION can be one of the following symbols: + bol == beginning of line + boi == beginning of indentation + eol == end of line [default] + + Optional COL-P non-nil returns current-column instead of character position." + (let ((tpnt (point)) + rval) + (cond + ((eq position 'bol) (beginning-of-line)) + ((eq position 'boi) (back-to-indentation)) + (t (end-of-line))) + (setq rval (if col-p (current-column) (point))) + (goto-char tpnt) + rval)) + + + ;; ====================================================================== + ;; this section snarfs mail fields and places them in the info alist + + (defun sc-build-header-zap-regexp () + "Return a regexp for sc-mail-yank-clear-headers." + (let ((headers sc-header-nuke-list) + (regexp nil)) + (while headers + (setq regexp (concat regexp + "^" (car headers) ":" + (if (cdr headers) "\\|" nil))) + (setq headers (cdr headers))) + regexp)) + + (defun sc-mail-yank-clear-headers (start end) + "Nuke mail headers between START and END." + (if (and sc-nuke-mail-headers-p sc-header-nuke-list) + (let ((regexp (sc-build-header-zap-regexp))) + (save-excursion + (goto-char start) + (if (search-forward "\n\n" end t) + (save-restriction + (narrow-to-region start (point)) + (goto-char start) + (while (let ((case-fold-search t)) + (re-search-forward regexp nil t)) + (beginning-of-line) + (delete-region (point) + (progn (re-search-forward "\n[^ \t]") + (forward-char -1) + (point))) + ))) + )))) + + (defun sc-mail-fetch-field (field) + "Return the value of the header field FIELD. + The buffer is expected to be narrowed to just the headers of the + message." + (save-excursion + (goto-char (point-min)) + (let ((case-fold-search t) + (name (concat "^" (regexp-quote field) "[ \t]*:[ \t]*"))) + (goto-char (point-min)) + (if (re-search-forward name nil t) + (let ((opoint (point))) + (while (progn (forward-line 1) + (looking-at "[ \t]"))) + (buffer-substring opoint (1- (point)))))))) + + (defun sc-fetch-fields (start end) + "Fetch the mail fields in the region from START to END. + These fields can be accessed in header rewrite functions with sc-field." + (save-excursion + (save-restriction + (narrow-to-region start end) + (goto-char start) + (let ((fields sc-mail-fields-list)) + (while fields + (let ((value (sc-mail-fetch-field (car fields))) + (next (cdr fields))) + (and value + (aput 'sc-gal-information (car fields) value)) + (setq fields next))) + (if (sc-mail-fetch-field "from") + (aput 'sc-gal-information "from" (sc-mail-fetch-field "from"))))))) + + (defun sc-field (field) + "Return the alist information associated with the FIELD. + If FIELD is not a valid key, return sc-mumble-string." + (or (aget sc-gal-information field) sc-mumble-string)) + + + ;; ====================================================================== + ;; built-in reference header rewrite functions + + (defun sc-no-header () + "Does nothing. Use this instead of nil to get a blank header." + ()) + + (defun sc-no-blank-line-or-header() + "Similar to sc-no-header except it removes the preceeding blank line." + (if (not (bobp)) + (if (and (eolp) + (progn (forward-line -1) + (or (looking-at mail-header-separator) + (and (eq major-mode 'mh-letter-mode) + (mh-in-header-p))))) + (progn (forward-line) + (let ((kill-lines-magic t)) (kill-line)))))) + + (defun sc-header-on-said () + "\"On , said:\", unless 1. the \"from\" field cannot be + found, in which case nothing is inserted; or 2. the \"date\" field is + missing in which case only the from part is printed." + (let* ((sc-mumble-string "") + (whofrom (sc-field "from")) + (when (sc-field "date"))) + (if (not (string= whofrom "")) + (insert sc-reference-tag-string + (if (not (string= when "")) + (concat "On " when ", ") "") + whofrom " said:\n")))) + + (defun sc-header-inarticle-writes () + "\"In article , writes:\" + Treats \"message-id\" and \"from\" fields similar to sc-header-on-said." + (let* ((sc-mumble-string "") + (whofrom (sc-field "from")) + (msgid (sc-field "message-id"))) + (if (not (string= whofrom "")) + (insert sc-reference-tag-string + (if (not (string= msgid "")) + (concat "In article " msgid ", ") "") + whofrom " writes:\n")))) + + (defun sc-header-regarding-adds () + "\"Regarding ; adds:\" + Treats \"subject\" and \"from\" fields similar to sc-header-on-said." + (let* ((sc-mumble-string "") + (whofrom (sc-field "from")) + (subj (sc-field "subject"))) + (if (not (string= whofrom "")) + (insert sc-reference-tag-string + (if (not (string= subj "")) + (concat "Regarding " subj "; ") "") + whofrom " adds:\n")))) + + (defun sc-header-attributed-writes () + "\"\" ==
writes: + Treats these fields in a similar manner to sc-header-on-said." + (let* ((sc-mumble-string "") + (whofrom (sc-field "from")) + (reply (sc-field "sc-reply-address")) + (from (sc-field "sc-from-address")) + (attr (sc-field "sc-attribution")) + (auth (sc-field "sc-author"))) + (if (not (string= whofrom "")) + (insert sc-reference-tag-string + (if (not (string= attr "")) + (concat "\"" attr "\" == " ) "") + (if (not (string= auth "")) + (concat auth " ") "") + (if (not (string= reply "")) + (concat "<" reply ">") + (if (not (string= from "")) + (concat "<" from ">") "")) + " writes:\n")))) + + (defun sc-header-verbose () + "Very verbose, some say gross." + (let* ((sc-mumble-string "") + (whofrom (sc-field "from")) + (reply (sc-field "sc-reply-address")) + (from (sc-field "sc-from-address")) + (author (sc-field "sc-author")) + (date (sc-field "date")) + (org (sc-field "organization")) + (msgid (sc-field "message-id")) + (ngrps (sc-field "newsgroups")) + (subj (sc-field "subject")) + (refs (sc-field "references")) + (cite (sc-field "sc-citation")) + (nl sc-reference-tag-string)) + (if (not (string= whofrom "")) + (insert (if (not (string= date "")) + (concat nl "On " date ",\n") "") + (concat nl (if (not (string= author "")) + author + whofrom) "\n") + (if (not (string= org "")) + (concat nl "from the organization of " org "\n") "") + (if (not (string= reply "")) + (concat nl "who can be reached at: " reply "\n") + (if (not (string= from "")) + (concat nl "who can be reached at: " from "\n") "")) + (if (not (string= cite "")) + (concat nl "(whose comments are cited below with \"" + cite "\"),\n") "") + (if (not (string= msgid "")) + (concat nl "had this to say in article " msgid "\n") "") + (if (not (string= ngrps "")) + (concat nl "in newsgroups " ngrps "\n") "") + (if (not (string= subj "")) + (concat nl "concerning the subject of " subj "\n") "") + (if (not (string= refs "")) + (concat nl "(see " refs " for more details)\n") "") + )))) + + + ;; ====================================================================== + ;; this section queries the user for necessary information + + (defun sc-query (&optional default) + "Query for an attribution string with the optional DEFAULT choice. + Returns the string entered by the user, if non-empty and non-nil, or + DEFAULT otherwise. If DEFAULT is not supplied, sc-default-attribution + is used." + (if (not default) (setq default sc-default-attribution)) + (let* ((prompt (concat "Enter attribution string: (default " default ") ")) + (query (read-string prompt))) + (if (or (null query) + (string= query "")) + default + query))) + + (defun sc-confirm () + "Confirm the preferred attribution with the user." + (if (or sc-confirm-always-p + sc-force-confirmation-p) + (aput 'sc-gal-attributions + (let* ((default (aheadsym sc-gal-attributions)) + chosen + (prompt (concat "Complete " + (cond + ((eq sc-cite-context 'citing) "cite") + ((eq sc-cite-context 'reciting) "recite") + (t "")) + " attribution string: (default " + default ") ")) + (minibuffer-local-completion-map + (copy-keymap minibuffer-local-completion-map))) + (define-key minibuffer-local-completion-map "\C-g" + '(lambda () (interactive) (beep) (throw 'select-abort nil))) + (setq chosen (completing-read prompt sc-gal-attributions)) + (if (or (not chosen) + (string= chosen "")) + default + chosen))))) + + + ;; ====================================================================== + ;; this section contains primitive functions used in the email address + ;; parsing schemes. they extract name fields from various parts of + ;; the "from:" field. + + (defun sc-style1-addresses (from-string &optional delim) + "Extract the author's email terminus from email address FROM-STRING. + Match addresses of the style \"name%[stuff].\" when called with DELIM + of \"%\" and addresses of the style \"[stuff]name@[stuff]\" when + called with DELIM \"@\". If DELIM is nil or not provided, matches + addresses of the style \"name\"." + (and (string-match (concat "[a-zA-Z0-9_-]+" delim) from-string 0) + (substring from-string + (match-beginning 0) + (- (match-end 0) (if (null delim) 0 1))))) + + (defun sc-style2-addresses (from-string) + "Extract the author's email terminus from email address FROM-STRING. + Match addresses of the style \"[stuff]![stuff]...!name[stuff].\"" + (let ((eos (length from-string)) + (mstart (string-match "![a-zA-Z0-9_-]+\\([^!a-zA-Z0-9_-]\\|$\\)" + from-string 0)) + (mend (match-end 0))) + (and mstart + (substring from-string (1+ mstart) (- mend (if (= mend eos) 0 1))) + ))) + + (defun sc-get-address (from-string author) + "Get the full email address path from FROM-STRING. + AUTHOR is the author's name (which is removed from the address)." + (let ((eos (length from-string))) + (if (string-match (concat "\\(^\\|^\"\\)" author + "\\(\\s +\\|\"\\s +\\)") from-string 0) + (let ((addr (substring from-string (match-end 0) eos))) + (if (and (= (aref addr 0) ?<) + (= (aref addr (1- (length addr))) ?>)) + (substring addr 1 (1- (length addr))) + addr)) + (if (string-match "[a-zA-Z0-9!@%._-]+" from-string 0) + (substring from-string (match-beginning 0) (match-end 0)) + "") + ))) + + (defun sc-get-emailname (from-string) + "Get the email terminus name from FROM-STRING." + (cond + ((sc-style1-addresses from-string "%")) + ((sc-style1-addresses from-string "@")) + ((sc-style2-addresses from-string)) + ((sc-style1-addresses from-string nil)) + (t (substring from-string 0 10)))) + + + ;; ====================================================================== + ;; this section contains functions that will extract a list of names + ;; from the name field string. + + (defun sc-spacify-name-chars (name) + (let ((len (length name)) + (s 0)) + (while (< s len) + (if (memq (aref name s) sc-spacify-name-chars) + (aset name s 32)) + (setq s (1+ s))) + name)) + + (defun sc-name-substring (string start end extend) + "Extract the specified substring of STRING from START to END. + EXTEND is the number of characters on each side to extend the + substring." + (and start + (let ((sos (+ start extend)) + (eos (- end extend))) + (substring string sos + (or (string-match sc-titlecue-regexp string sos) eos) + )))) + + (defun sc-extract-namestring (from-string) + "Extract the name string from FROM-STRING. + This should be the author's full name minus an optional title." + (let ((pstart (string-match "(.*)" from-string 0)) + (pend (match-end 0)) + (qstart (string-match "\".*\"" from-string 0)) + (qend (match-end 0)) + (bstart (string-match "\\([.a-zA-Z0-9_-]+\\s *\\)+" from-string 0)) + (bend (match-end 0))) + (sc-spacify-name-chars + (cond + ((sc-name-substring from-string pstart pend 1)) + ((sc-name-substring from-string qstart qend 1)) + ((sc-name-substring from-string bstart bend 0)) + )))) + + (defun sc-chop-namestring (namestring) + "Convert NAMESTRING to a list of names. + + example: (sc-namestring-to-list \"John Xavier Doe\") + => (\"John\" \"Xavier\" \"Doe\")" + (if (not (string= namestring "")) + (append (list (sc-string-car namestring)) + (sc-chop-namestring (sc-string-cdr namestring))))) + + (defun sc-strip-initials (namelist) + "Extract the author's initials from the NAMELIST." + (if (not namelist) + nil + (concat (if (string= (car namelist) "") + "" + (substring (car namelist) 0 1)) + (sc-strip-initials (cdr namelist))))) + + + ;; ====================================================================== + ;; this section handles selection of the attribution and citation strings + + (defun sc-populate-alists (from-string) + "Put important and useful information in the alists using FROM-STRING. + Return the list of name symbols." + (let* ((namelist (sc-chop-namestring (sc-extract-namestring from-string))) + (revnames (reverse (cdr namelist))) + (midnames (reverse (cdr revnames))) + (firstname (car namelist)) + (midnames (reverse (cdr revnames))) + (lastname (car revnames)) + (initials (sc-strip-initials namelist)) + (emailname (sc-get-emailname from-string)) + (n 1) + (symlist (list 'emailname 'initials 'firstname 'lastname))) + + ;; put basic information + (aput 'sc-gal-attributions 'firstname firstname) + (aput 'sc-gal-attributions 'lastname lastname) + (aput 'sc-gal-attributions 'emailname emailname) + (aput 'sc-gal-attributions 'initials initials) + + (aput 'sc-gal-information "sc-firstname" firstname) + (aput 'sc-gal-information "sc-lastname" lastname) + (aput 'sc-gal-information "sc-emailname" emailname) + (aput 'sc-gal-information "sc-initials" initials) + + ;; put middle names and build sc-author entry + (let ((author (concat firstname " "))) + (while midnames + (let ((name (car midnames)) + (next (cdr midnames)) + (symbol (intern (format "middlename%d" n))) + (string (format "sc-middlename-%d" n))) + ;; first put new middlename + (aput 'sc-gal-attributions symbol name) + (aput 'sc-gal-information string name) + (setq n (1+ n)) + (nconc symlist (list symbol)) + + ;; now build author name + (setq author (concat author name " ")) + + ;; incr loop + (setq midnames next) + )) + (setq author (concat author lastname)) + + ;; put author name and email address + (aput 'sc-gal-information "sc-author" author) + (aput 'sc-gal-information "sc-from-address" + (sc-get-address from-string author)) + (aput 'sc-gal-information "sc-reply-address" + (sc-get-address (sc-field "reply-to") author)) + ) + ;; return value + symlist)) + + (defun sc-sort-attribution-alist () + "Put preferred attribution at head of attributions alist." + (asort 'sc-gal-attributions sc-preferred-attribution) + + ;; use backup scheme if preference is not legal + (if (or (null sc-preferred-attribution) + (anot-head-p sc-gal-attributions sc-preferred-attribution) + (let ((prefval (aget sc-gal-attributions + sc-preferred-attribution))) + (or (null prefval) + (string= prefval "")))) + ;; no legal attribution + (if sc-use-only-preference-p + (aput 'sc-gal-attributions 'sc-user-query + (sc-query sc-default-attribution)) + ;; else use secondary scheme + (asort 'sc-gal-attributions 'firstname)))) + + (defun sc-build-attribution-alist (from-string) + "Extract attributions from FROM-STRING, applying preferences." + (let ((symlist (sc-populate-alists from-string)) + (headval (progn (sc-sort-attribution-alist) + (aget sc-gal-attributions + (aheadsym sc-gal-attributions) t)))) + + ;; for each element in the symlist, remove the corresponding + ;; key-value pair in the alist, then insert just the value. + (while symlist + (let ((value (aget sc-gal-attributions (car symlist) t)) + (next (cdr symlist))) + (if (not (or (null value) + (string= value ""))) + (aput 'sc-gal-attributions value)) + (adelete 'sc-gal-attributions (car symlist)) + (setq symlist next))) + + ;; add nicknames to the completion list + (let ((gal sc-gal-attributions)) + (while gal + (let ((nns sc-nicknames-alist) + (galname (car (car gal)))) + (while nns + (if (string= galname (car (car nns))) + (aput 'sc-gal-attributions (car (cdr (car nns))))) + (setq nns (cdr nns))) + (setq gal (cdr gal))))) + + ;; now reinsert the head (preferred) attribution unless it is nil, + ;; this effectively just moves the head value to the front of the + ;; list. + (if headval + (aput 'sc-gal-attributions headval)) + + ;; check to be sure alist is not nil + (if (null sc-gal-attributions) + (aput 'sc-gal-attributions sc-default-attribution)))) + + (defun sc-select () + "Select an attribution and create a citation string." + (cond + (sc-nested-citation-p + (sc-update-gal "")) + ((null (aget sc-gal-information "from" t)) + (aput 'sc-gal-information "sc-author" sc-default-author-name) + (sc-update-gal (sc-query sc-default-attribution))) + ((null sc-gal-attributions) + (sc-build-attribution-alist (aget sc-gal-information "from" t)) + (sc-confirm) + (sc-update-gal (aheadsym sc-gal-attributions))) + (t + (sc-confirm) + (sc-update-gal (aheadsym sc-gal-attributions)))) + t) + + + ;; ====================================================================== + ;; region citing and unciting + + (defun sc-cite-region (start end) + "Cite a region delineated by START and END." + (save-excursion + ;; set real end-of-region + (goto-char end) + (forward-line 1) + (set-mark (point)) + ;; goto real beginning-of-region + (goto-char start) + (beginning-of-line) + (let ((fstart (point)) + (fend (point))) + (while (< (point) (sc-mark)) + ;; remove leading whitespace if desired + (and sc-fixup-whitespace-p + (fixup-whitespace)) + ;; if end of line then perhaps autofill + (cond ((eolp) + (or (= fstart fend) + (not sc-auto-fill-region-p) + (and sc-auto-fill-query-each-paragraph-p + (not (y-or-n-p "Fill this paragraph? "))) + (save-excursion (set-mark fend) + (goto-char (/ (+ fstart fend 1) 2)) + (run-hooks 'sc-fill-paragraph-hook))) + (setq fstart (point) + fend (point))) + ;; not end of line so perhap cite it + ((not (looking-at sc-cite-regexp)) + (insert (aget sc-gal-information "sc-citation"))) + (sc-nested-citation-p + (insert (aget sc-gal-information "sc-nested-citation")))) + (setq fend (point)) + (forward-line 1)) + (and sc-auto-fill-query-each-paragraph-p + (message " ")) + ))) + + (defun sc-uncite-region (start end cite-regexp) + "Uncite a previously cited region delineated by START and END. + CITE-REGEXP describes how a cited line of texts starts. Unciting also + auto-fills paragraph if sc-auto-fill-region-p is non-nil." + (save-excursion + (set-mark end) + (goto-char start) + (beginning-of-line) + (let ((fstart (point)) + (fend (point))) + (while (< (point) (sc-mark)) + ;; if end of line, then perhaps autofill + (cond ((eolp) + (or (= fstart fend) + (not sc-auto-fill-region-p) + (and sc-auto-fill-query-each-paragraph-p + (not (y-or-n-p "Fill this paragraph? "))) + (save-excursion (set-mark fend) + (goto-char (/ (+ fstart fend 1) 2)) + (run-hooks 'sc-fill-paragraph-hook))) + (setq fstart (point) + fend (point))) + ;; not end of line so perhaps uncite it + ((looking-at cite-regexp) + (save-excursion + (save-restriction + (narrow-to-region (sc-linepos 'bol) (sc-linepos)) + (beginning-of-line) + (delete-region (point-min) + (progn (re-search-forward cite-regexp + (point-max) + t) + (match-end 0))))))) + (setq fend (point)) + (forward-line 1))))) + + + ;; ====================================================================== + ;; this section contains paragraph filling support + + (defun sc-guess-fill-prefix (&optional literalp) + "Guess the fill prefix used on the current line. + Use various heuristics to find the fill prefix. Search begins on first + non-blank line after point. + + 1) If fill-prefix is already bound to the empty string, return + nil. + + 2) If fill-prefix is already bound, but not to the empty + string, return the value of fill-prefix. + + 3) If the current line starts with the last chosen citation + string, then that string is returned. + + 4) If the current line starts with a string matching the regular + expression sc-cite-regexp, return the match. Note that if + optional LITERALP is provided and non-nil, then the *string* + that matches the regexp is return. Otherwise, if LITERALP is + not provided or is nil, the *regexp* sc-cite-regexp is + returned. + + 5) If the current line starts with any number of characters, + followed by the sc-citation-delimiter and then white space, + that match is returned. See comment #4 above for handling of + LITERALP. + + 6) Nil is returned." + (save-excursion + ;; scan for first non-blank line in the region + (beginning-of-line) + (skip-chars-forward "\n\t ") + (beginning-of-line) + (let ((citation (aget sc-gal-information "sc-citation")) + (generic-citation + (concat "\\s *[^ \t\n" sc-citation-delimiter "]+>\\s +"))) + (cond + ((string= fill-prefix "") nil) ;; heuristic #1 + (fill-prefix) ;; heuristic #2 + ((looking-at (regexp-quote citation)) citation) ;; heuristic #3 + ((looking-at sc-cite-regexp) ;; heuristic #4 + (if literalp + (buffer-substring + (point) + (progn (re-search-forward (concat sc-cite-regexp "\\s *") + (point-max) nil) + (point))) + sc-cite-regexp)) + ((looking-at generic-citation) ;; heuristic #5 + (if literalp + (buffer-substring + (point) + (progn (re-search-forward generic-citation) (point))) + generic-citation)) + (t nil))))) ;; heuristic #6 + + (defun sc-consistant-cite-p (prefix) + "Check current paragraph for consistant citation. + Scans to paragraph delineated by (forward|backward)-paragraph to see + if all lines start with PREFIX. Returns t if entire paragraph is + consistantly cited, nil otherwise." + (save-excursion + (let ((end (progn (forward-paragraph) + (beginning-of-line) + (or (not (eolp)) + (forward-char -1)) + (point))) + (start (progn (backward-paragraph) + (beginning-of-line) + (or (not (eolp)) + (forward-char 1)) + (point))) + (badline t)) + (goto-char start) + (beginning-of-line) + (while (and (< (point) end) + badline) + (setq badline (looking-at prefix)) + (forward-line 1)) + badline))) + + (defun sc-fill-start (fill-prefix) + "Find buffer position of start of region which begins with FILL-PREFIX. + Restrict scan to current paragraph." + (save-excursion + (let ((badline nil) + (top (save-excursion + (backward-paragraph) + (beginning-of-line) + (or (not (eolp)) + (forward-char 1)) + (point)))) + (while (and (not badline) + (> (point) top)) + (forward-line -1) + (setq badline (not (looking-at fill-prefix))))) + (forward-line 1) + (point))) + + (defun sc-fill-end (fill-prefix) + "Find the buffer position of end of region which begins with FILL-PREFIX. + Restrict scan to current paragraph." + (save-excursion + (let ((badline nil) + (bot (save-excursion + (forward-paragraph) + (beginning-of-line) + (or (not (eolp)) + (forward-char -1)) + (point)))) + (while (and (not badline) + (< (point) bot)) + (beginning-of-line) + (setq badline (not (looking-at fill-prefix))) + (forward-line 1))) + (forward-line -1) + (point))) + + (defun sc-fill-paragraph () + "Supercite's paragraph fill function. + Fill the paragraph containing or following point. Use + sc-guess-fill-prefix to find the fill-prefix for the paragraph. + + If the paragraph is inconsistantly cited (mixed fill-prefix), then the + user is queried to restrict the the fill to only those lines around + point which begin with the fill prefix. + + The variable sc-fill-arg is passed to fill-paragraph and + fill-region-as-paragraph which controls justification of the + paragraph. sc-fill-arg is set by sc-fill-paragraph-manually." + (save-excursion + (let ((pnt (point)) + (fill-prefix (sc-guess-fill-prefix t))) + (cond + ((not fill-prefix) + (fill-paragraph sc-fill-arg)) + ((sc-consistant-cite-p fill-prefix) + (fill-paragraph sc-fill-arg)) + ((y-or-n-p "Inconsistent citation found. Restrict? ") + (message "") + (fill-region-as-paragraph (progn (goto-char pnt) + (sc-fill-start fill-prefix)) + (progn (goto-char pnt) + (sc-fill-end fill-prefix)) + sc-fill-arg)) + (t + (message "") + (progn + (setq fill-prefix (aget sc-gal-information "sc-citation")) + (fill-paragraph sc-fill-arg))))))) + + + ;; ====================================================================== + ;; the following functions are the top level, interactive commands that + ;; can be bound to key strokes + + (defun sc-insert-reference (arg) + "Insert, at point, a reference header in the body of the reply. + Numeric ARG indicates which header style from sc-rewrite-header-list + to use when rewriting the header. No supplied ARG indicates use of + sc-preferred-header-style. + + With just \\[universal-argument], electric reference insert mode is + entered, regardless of the value of sc-electric-references-p. See + sc-electric-mode for more information." + (interactive "P") + (if (consp arg) + (sc-electric-mode) + (let ((pref (cond ((sc-valid-index-p arg) arg) + ((sc-valid-index-p sc-preferred-header-style) + sc-preferred-header-style) + (t 0)))) + (if sc-electric-references-p (sc-electric-mode pref) + (condition-case err + (eval (nth pref sc-rewrite-header-list)) + (void-function + (progn (message + "Symbol's function definition is void: %s. (Header %d)." + (symbol-name (car (cdr err))) + pref) + (beep))) + (error + (progn (message "Error evaluating rewrite header function %d." + pref) + (beep))) + ))))) + + (defun sc-cite (arg) + "Cite the region of text between point and mark. + Numeric ARG, if supplied, is passed unaltered to sc-insert-reference." + (interactive "P") + (if (not (sc-mark)) + (error "Please designate a region to cite (i.e. set the mark).")) + (catch 'select-abort + (let ((sc-cite-context 'citing) + (sc-force-confirmation-p (interactive-p))) + (sc-select) + (undo-boundary) + (let ((xchange (if (> (sc-mark) (point)) nil + (exchange-point-and-mark) + t))) + (sc-insert-reference arg) + (sc-cite-region (point) (sc-mark)) + ;; leave point on first cited line + (while (and (< (point) (sc-mark)) + (not (looking-at (aget sc-gal-information + (if sc-nested-citation-p + "sc-nested-citation" + "sc-citation"))))) + (forward-line 1)) + (and xchange + (exchange-point-and-mark)) + )))) + + (defun sc-uncite () + "Uncite the region between point and mark." + (interactive) + (if (not (sc-mark)) + (error "Please designate a region to uncite (i.e. set the mark).")) + (undo-boundary) + (let ((xchange (if (> (sc-mark) (point)) nil + (exchange-point-and-mark) + t)) + (fp (or (sc-guess-fill-prefix) + ""))) + (sc-uncite-region (point) (sc-mark) fp) + (and xchange + (exchange-point-and-mark)))) + + (defun sc-recite () + "Recite the region by first unciting then citing the text." + (interactive) + (if (not (sc-mark)) + (error "Please designate a region to recite (i.e. set the mark).")) + (catch 'select-abort + (let ((sc-cite-context 'reciting) + (sc-force-confirmation-p t)) + (sc-select) + (undo-boundary) + (let ((xchange (if (> (sc-mark) (point)) nil + (exchange-point-and-mark) + t)) + (fp (or (sc-guess-fill-prefix) + ""))) + (sc-uncite-region (point) (sc-mark) fp) + (sc-cite-region (point) (sc-mark)) + (and xchange + (exchange-point-and-mark)) + )))) + + (defun sc-insert-citation () + "Insert citation string at beginning of current line." + (interactive) + (save-excursion + (beginning-of-line) + (insert (aget sc-gal-information "sc-citation")))) + + (defun sc-open-line (arg) + "Insert a newline and leave point before it. + Also inserts the guessed prefix at the beginning of the new line. With + numeric ARG, inserts that many new lines." + (interactive "p") + (save-excursion + (let ((start (point)) + (string (or (sc-guess-fill-prefix t) + ""))) + (open-line arg) + (goto-char start) + (forward-line 1) + (while (< 0 arg) + (insert string) + (forward-line 1) + (setq arg (- arg 1)))))) + + (defun sc-fill-paragraph-manually (arg) + "Fill current cited paragraph. + Really just runs the hook sc-fill-paragraph-hook, however it does set + the global variable sc-fill-arg to the value of ARG. This is + currently the only way to pass an argument to a hookified function." + (interactive "P") + (setq sc-fill-arg arg) + (run-hooks 'sc-fill-paragraph-hook)) + + (defun sc-modify-information (arg) + "Interactively modify information in the information alist. + \\[universal-argument] if supplied, deletes the entry from the alist. + You can add an entry by supplying a key instead of completing." + (interactive "P") + (let* ((delete-p (consp arg)) + (action (if delete-p "delete" "modify")) + (defaultkey (aheadsym sc-gal-information)) + (prompt (concat "Select information key to " + action ": (default " + defaultkey ") ")) + (key (completing-read prompt sc-gal-information)) + ) + (if (or (string= key "") + (null key)) + (setq key defaultkey)) + (if delete-p (adelete 'sc-gal-information key) + (let* ((oldval (aget sc-gal-information key t)) + (prompt (concat "Enter new value for key \"" + key "\" (default \"" oldval "\") ")) + (newval (read-input prompt))) + (if (or (string= newval "") + (null newval)) + nil + (aput 'sc-gal-information key newval) + ))))) + + (defun sc-view-field (arg) + "View field values in the information alist. + This is essentially an interactive version of sc-field, and is similar + to sc-modify-information, except that the field values can't be + modified. With \\[universal-argument], if supplied, inserts the value + into the current buffer as well." + (interactive "P") + (let* ((defaultkey (aheadsym sc-gal-information)) + (prompt (concat "View information key: (default " + defaultkey ") ")) + (key (completing-read prompt sc-gal-information))) + (if (or (string= key "") + (null key)) + (setq key defaultkey)) + (let* ((val (aget sc-gal-information key t)) + (pval (if val (concat "\"" val "\"") "nil"))) + (message "value of key %s: %s" key pval) + (if (and key (consp arg)) (insert val))))) + + (defun sc-glom-headers () + "Glom information from mail headers in region between point and mark. + Any old information is lost, unless an error occurs." + (interactive) + (let ((attr (copy-sequence sc-gal-attributions)) + (info (copy-sequence sc-gal-information))) + (setq sc-gal-attributions nil + sc-gal-information nil) + (let ((start (region-beginning)) + (end (region-end)) + (sc-force-confirmation-p t) + (sc-cite-context nil)) + (sc-fetch-fields start end) + (if (null sc-gal-information) + (progn + (message "No mail headers found! Restoring old information.") + (setq sc-gal-attributions attr + sc-gal-information info)) + (sc-mail-yank-clear-headers start end) + (if (not (catch 'select-abort + (condition-case foo + (sc-select) + (quit (beep) (throw 'select-abort nil))) + )) + (setq sc-gal-attributions attr + sc-gal-information info)) + )))) + + (defun sc-version (arg) + "Show supercite version. + Universal argument (\\[universal-argument]) ARG inserts version + information in the current buffer instead of printing the message in + the echo area." + (interactive "P") + (if (consp arg) + (insert "Using Supercite version " sc-version-number) + (message "Using Supercite version %s" sc-version-number))) + + + ;; ====================================================================== + ;; leach onto current mode + + (defun sc-append-current-keymap () + "Append some useful key bindings to the current local key map. + This searches sc-local-keymap for the keymap to install based on the + major-mode of the current buffer." + (let ((hook (car (cdr (assq major-mode sc-local-keymaps))))) + (cond + ((not hook) + (run-hooks 'sc-default-keymap)) + ((not (listp hook)) + (setq hook (car (cdr (assq hook sc-local-keymaps)))) + (run-hooks 'hook)) + (t + (run-hooks 'hook)))) + (setq sc-leached-keymap (current-local-map))) + + (defun sc-snag-all-keybindings () + "Snag all keybindings in major-mode's current keymap." + (let* ((curkeymap (current-local-map)) + (symregexp ".*sc-.*\n") + (docstring (substitute-command-keys "\\{curkeymap}")) + (start 0) + (maxend (length docstring)) + (spooge "")) + (while (and (< start maxend) + (string-match symregexp docstring start)) + (setq spooge (concat spooge (substring docstring + (match-beginning 0) + (match-end 0)))) + (setq start (match-end 0))) + spooge)) + + (defun sc-spoogify-docstring () + "Modifies (makes into spooge) the docstring for the current major mode. + This will leach the keybinding descriptions for supercite onto the end + of the current major mode's docstring. If major mode is preloaded, + this function will first make a copy of the list associated with the + mode, then modify this copy." + (let* ((symfunc (symbol-function major-mode)) + (doc-cdr (and (listp symfunc) (nthcdr 2 symfunc))) + (doc-str (documentation major-mode))) + (cond + ;; is a docstring even provided? + ((not (stringp doc-str))) + ;; have we already leached on? + ((string-match "Supercite" doc-str)) + ;; lets build the new doc string + (t + (let* ((described (sc-snag-all-keybindings)) + (commonstr " + + The major mode for this buffer has been modified to include the + Supercite 2.3 package for handling attributions and citations of + original messages in email replies. For more information on this + package, type \"\\[sc-describe]\".") + (newdoc-str + (concat doc-str commonstr + (if (not (string= described "")) + (concat "\n\nThe following keys are bound " + "to Supercite commands:\n\n" + described))) + )) + (cond + (doc-cdr + (condition-case nil + (setcar doc-cdr newdoc-str) + (error + ;; the major mode must be preloaded, make a copy first + (setq symfunc (copy-sequence (symbol-function major-mode)) + doc-cdr (nthcdr 2 symfunc)) + (setcar doc-cdr newdoc-str) + (fset major-mode symfunc)))) + ;; lemacs 19 byte-code. + ;; Set function to a new byte-code vector with the + ;; new documentation in the documentation slot (element 4). + ;; We can't use aset because aset won't allow you to modify + ;; a byte-code vector. + ;; Include element 5 if the vector has one. + (t + (fset major-mode + (apply 'make-byte-code + (aref symfunc 0) (aref symfunc 1) + (aref symfunc 2) (aref symfunc 3) + newdoc-str + (if (> (length symfunc) 5) + (list (aref symfunc 5))))) + ))))))) + + + ;; ====================================================================== + ;; this section contains default hooks and hook support for execution + + (defun sc-cite-original () + "Hook version of sc-cite. + This is callable from the various mail and news readers' reply + function according to the agreed upon standard. See \\[sc-describe] + for more details. Sc-cite-original does not do any yanking of the + original message but it does require a few things: + + 1) The reply buffer is the current buffer. + + 2) The original message has been yanked and inserted into the + reply buffer. + + 3) Verbose mail headers from the original message have been + inserted into the reply buffer directly before the text of the + original message. + + 4) Point is at the beginning of the verbose headers. + + 5) Mark is at the end of the body of text to be cited." + (run-hooks 'sc-pre-hook) + (setq sc-gal-attributions nil) + (setq sc-gal-information nil) + (let ((start (region-beginning)) + (end (region-end))) + (sc-fetch-fields start end) + (sc-mail-yank-clear-headers start end) + (if (not sc-all-but-cite-p) + (sc-cite sc-preferred-header-style)) + (sc-append-current-keymap) + (sc-spoogify-docstring) + (run-hooks 'sc-post-hook))) + + + ;; ====================================================================== + ;; describe this package + ;; + (defun sc-describe () + "Supercite version 2.3 is now described in a texinfo manual which + makes the documenation available both for online perusal via emacs' + info system, or for hard-copy printing using the TeX facility. + + To view the online document hit \\[info], then \"mSupercite \"." + (interactive) + (describe-function 'sc-describe)) + + ;; ====================================================================== + ;; load hook + (run-hooks 'sc-load-hook) + (provide 'sc) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/sendmail.el emacs-19.11/lisp/sendmail.el *** emacs-19.10/lisp/sendmail.el Sat May 29 00:35:00 1993 --- emacs-19.11/lisp/sendmail.el Mon May 31 00:20:06 1993 *************** *** 380,384 **** (set-buffer tembuf) (erase-buffer) ! (insert "From " (user-login-name) " " (current-time-string time) "\n") ;; Insert the time zone before the year. --- 380,385 ---- (set-buffer tembuf) (erase-buffer) ! ;; This initial newline is written out if the fcc file already exists. ! (insert "\nFrom " (user-login-name) " " (current-time-string time) "\n") ;; Insert the time zone before the year. *************** *** 434,437 **** --- 435,439 ---- (write-region ;; Include a blank line before if file already exists. + (if (file-exists-p (car fcc-list)) (point-min) (1+ (point-min))) (point-max) (car fcc-list) t))) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/sgml-mode.el emacs-19.11/lisp/sgml-mode.el *** emacs-19.10/lisp/sgml-mode.el Wed May 26 14:20:27 1993 --- emacs-19.11/lisp/sgml-mode.el Mon May 31 17:51:55 1993 *************** *** 26,39 **** ;; Major mode for editing the SGML document-markup language. - ;; - ;; Some suggestions for your .emacs file: - ;; - ;; (autoload 'sgml-mode "sgml-mode" "SGML mode" t) - ;; - ;; (setq auto-mode-alist - ;; (append (list (cons "\\.sgm$" 'sgml-mode) - ;; (cons "\\.sgml$" 'sgml-mode) - ;; (cons "\\.dtd$" 'sgml-mode)) - ;; auto-mode-alist)) ;;; Code: --- 26,29 ---- diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/spook.el emacs-19.11/lisp/spook.el *** emacs-19.10/lisp/spook.el Thu Mar 25 00:23:54 1993 --- emacs-19.11/lisp/spook.el Tue Jun 1 00:28:50 1993 *************** *** 37,41 **** ;;; Code: ! (require 'cookie) ; Variables --- 37,41 ---- ;;; Code: ! (require 'cookie1) ; Variables *************** *** 57,61 **** ;; Note: the implementation that used to take up most of this file has ! ;; been cleaned up and generalized and now resides in cookie.el. ;;; spook.el ends here --- 57,61 ---- ;; Note: the implementation that used to take up most of this file has ! ;; been cleaned up and generalized and now resides in cookie1.el. ;;; spook.el ends here diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/tar-mode.el emacs-19.11/lisp/tar-mode.el *** emacs-19.10/lisp/tar-mode.el Fri Apr 23 02:49:01 1993 --- emacs-19.11/lisp/tar-mode.el Mon May 31 17:45:11 1993 *************** *** 471,474 **** --- 471,475 ---- (put 'tar-subfile-mode 'mode-class 'special) + ;;;##autoload (defun tar-mode () "Major mode for viewing a tar file as a dired-like listing of its contents. *************** *** 1079,1125 **** ;;; Patch it in. - (defvar tar-regexp "\\.tar$" - "The regular expression used to identify tar file names.") - - (setq auto-mode-alist - (cons (cons tar-regexp 'tar-mode) auto-mode-alist)) - - (or (boundp 'write-file-hooks) (setq write-file-hooks nil)) - (or (listp write-file-hooks) - (setq write-file-hooks (list write-file-hooks))) (or (memq 'maybe-write-tar-file write-file-hooks) (setq write-file-hooks (cons 'maybe-write-tar-file write-file-hooks))) - - - ;;; This is a hack. For files ending in .tar, we want -*- lines to be - ;;; completely ignored - if there is one, it applies to the first file - ;;; in the archive, and not the archive itself! - - (defun tar-normal-mode (&optional find-file) - "Choose the major mode for this buffer automatically. - Also sets up any specified local variables of the file. - Uses the visited file name, the -*- line, and the local variables spec. - - This function is called automatically from `find-file'. In that case, - if `inhibit-local-variables' is non-`nil' we require confirmation before - processing a local variables spec. If you run `normal-mode' explicitly, - confirmation is never required. - - Note that this version of this function has been hacked to interact - correctly with tar files - when visiting a file which matches - 'tar-regexp', the -*- line and local-variables are not examined, - as they would apply to a file within the archive rather than the archive - itself." - (interactive) - (if (and buffer-file-name - (string-match tar-regexp buffer-file-name)) - (tar-mode) - (tar-real-normal-mode find-file))) - - - (if (not (fboundp 'tar-real-normal-mode)) - (defalias 'tar-real-normal-mode (symbol-function 'normal-mode))) - (defalias 'normal-mode 'tar-normal-mode) (provide 'tar-mode) --- 1080,1086 ---- diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/term/ChangeLog emacs-19.11/lisp/term/ChangeLog *** emacs-19.10/lisp/term/ChangeLog Sun May 30 00:21:33 1993 --- emacs-19.11/lisp/term/ChangeLog Mon May 31 20:29:04 1993 *************** *** 1,2 **** --- 1,6 ---- + Mon May 31 20:29:00 1993 Richard Stallman (rms@wookumz.gnu.ai.mit.edu) + + * x-win.el (x-invocation-args): Add defvar. + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/term/x-win.el emacs-19.11/lisp/term/x-win.el *** emacs-19.10/lisp/term/x-win.el Sat May 29 23:39:49 1993 --- emacs-19.11/lisp/term/x-win.el Mon May 31 20:28:57 1993 *************** *** 75,78 **** --- 75,80 ---- (require 'menu-bar) + (defvar x-invocation-args) + (defvar x-command-line-resources nil) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/terminal.el emacs-19.11/lisp/terminal.el *** emacs-19.10/lisp/terminal.el Wed May 12 14:39:31 1993 --- emacs-19.11/lisp/terminal.el Tue Jun 1 01:35:53 1993 *************** *** 424,428 **** lets you type a terminal emulator command." (interactive) - (setq list (cons last-input-char list)) (cond ((eq last-input-char terminal-escape-char) (call-interactively 'te-escape)) --- 424,427 ---- *************** *** 436,440 **** (not (zerop (logand last-input-char (lsh 1 23))))) (setq last-input-char (+ 128 (logand last-input-char 127)))) - (setq list (cons (list 'really last-input-char) list)) ;; Now ignore all but actual characters. ;; (It ought to be possible to send through function --- 435,438 ---- diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/timer.el emacs-19.11/lisp/timer.el *** emacs-19.10/lisp/timer.el Sat May 29 16:43:14 1993 --- emacs-19.11/lisp/timer.el Mon May 31 13:58:47 1993 *************** *** 72,77 **** ;; Don't search the exec path for the timer program; ;; we know exactly which one we want. ! (start-process (expand-file-name timer-program exec-directory) ! nil "timer")) timer-alist nil) (set-process-filter timer-process 'timer-process-filter) --- 72,78 ---- ;; Don't search the exec path for the timer program; ;; we know exactly which one we want. ! (start-process "timer" nil ! (expand-file-name timer-program ! exec-directory))) timer-alist nil) (set-process-filter timer-process 'timer-process-filter) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/version.el emacs-19.11/lisp/version.el *** emacs-19.10/lisp/version.el Sun May 30 01:25:16 1993 --- emacs-19.11/lisp/version.el Tue Jun 1 04:28:07 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.10.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.11.0" "\ Version numbers of this version of Emacs.") diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/window.el emacs-19.11/lisp/window.el *** emacs-19.10/lisp/window.el Sat May 29 12:13:12 1993 --- emacs-19.11/lisp/window.el Mon May 31 20:54:21 1993 *************** *** 1,3 **** ! ;;; windows.el --- GNU Emacs window commands aside from those written in C. ;;; Copyright (C) 1985, 1989, 1992 Free Software Foundation, Inc. --- 1,3 ---- ! ;;; window.el --- GNU Emacs window commands aside from those written in C. ;;; Copyright (C) 1985, 1989, 1992 Free Software Foundation, Inc. *************** *** 28,32 **** even if it is active." (let ((count 0)) ! (walk-windows (function (lambda () (setq count (+ count 1)))) minibuf) --- 28,32 ---- even if it is active." (let ((count 0)) ! (walk-windows (function (lambda (w) (setq count (+ count 1)))) minibuf) *************** *** 112,118 **** (defun shrink-window-if-larger-than-buffer (&optional window) ! "Shrink the WINDOW to be as small as possible to display its contents. Do ! nothing if only one window is displayed or if the buffer contains more lines ! than the present window height." (save-excursion (set-buffer (window-buffer window)) --- 112,119 ---- (defun shrink-window-if-larger-than-buffer (&optional window) ! "Shrink the WINDOW to be as small as possible to display its contents. ! Do nothing if the buffer contains more lines than the present window height, ! or if some of the window's contents are scrolled out of view." ! (interactive) (save-excursion (set-buffer (window-buffer window)) *************** *** 125,144 **** (modified (buffer-modified-p)) (buffer (current-buffer))) ! (unwind-protect ! (progn ! (select-window (or window w)) ! (goto-char (point-min)) ! (while (pos-visible-in-window-p (point-max)) ! ;; defeat file locking... don't try this at home, kids! ! (setq buffer-file-name nil) ! (insert ?\n) (setq n (1+ n))) ! (if (> n 0) (shrink-window (1- n)))) ! (delete-region (point-min) (point)) ! (set-buffer-modified-p modified) ! (goto-char p) ! (select-window w) ! ;; Make sure we unbind buffer-read-only ! ;; with the proper current buffer. ! (set-buffer buffer))))) (define-key ctl-x-map "2" 'split-window-vertically) --- 126,146 ---- (modified (buffer-modified-p)) (buffer (current-buffer))) ! (if (pos-visible-in-window-p (point-min)) ! (unwind-protect ! (progn ! (select-window (or window w)) ! (goto-char (point-min)) ! (while (pos-visible-in-window-p (point-max)) ! ;; defeat file locking... don't try this at home, kids! ! (setq buffer-file-name nil) ! (insert ?\n) (setq n (1+ n))) ! (if (> n 0) (shrink-window (1- n)))) ! (delete-region (point-min) (point)) ! (set-buffer-modified-p modified) ! (goto-char p) ! (select-window w) ! ;; Make sure we unbind buffer-read-only ! ;; with the proper current buffer. ! (set-buffer buffer)))))) (define-key ctl-x-map "2" 'split-window-vertically) diff -rc2P --exclude-from=exceptions emacs-19.10/lisp/yow.el emacs-19.11/lisp/yow.el *** emacs-19.10/lisp/yow.el Sun May 2 23:23:13 1993 --- emacs-19.11/lisp/yow.el Tue Jun 1 00:27:33 1993 *************** *** 26,30 **** ;; Important pinheaddery for GNU Emacs. ;; ! ;; See cookie.el for implementation. Note --- the `n' argument of yow ;; from the 18.xx implementation is no longer; we only support *random* ;; random access now. --- 26,30 ---- ;; Important pinheaddery for GNU Emacs. ;; ! ;; See cookie1.el for implementation. Note --- the `n' argument of yow ;; from the 18.xx implementation is no longer; we only support *random* ;; random access now. *************** *** 32,36 **** ;;; Code: ! (require 'cookie) (defvar yow-file (concat data-directory "yow.lines") --- 32,36 ---- ;;; Code: ! (require 'cookie1) (defvar yow-file (concat data-directory "yow.lines") diff -rc2P --exclude-from=exceptions emacs-19.10/make-dist emacs-19.11/make-dist *** emacs-19.10/make-dist Sat May 29 15:38:22 1993 --- emacs-19.11/make-dist Mon May 31 20:50:39 1993 *************** *** 105,108 **** --- 105,111 ---- fi + ### Update getdate.c. + (cd lib-src; make -f Makefile.in getdate.c) + echo "Creating staging directory: \`${tempparent}'" mkdir ${tempparent} *************** *** 127,132 **** ln ChangeLog Makefile.in build-install.in configure configure.in ${tempdir} ln make-dist ${tempdir} ! ### Copy config.sub; it's a cross-filesystem symlink. cp config.sub ${tempdir} echo "Updating version number in README." --- 130,136 ---- ln ChangeLog Makefile.in build-install.in configure configure.in ${tempdir} ln make-dist ${tempdir} ! ### Copy config.guess and config.sub; they're cross-filesystem symlinks. cp config.sub ${tempdir} + cp config.guess ${tempdir} echo "Updating version number in README." diff -rc2P --exclude-from=exceptions emacs-19.10/man/cmdargs.texi emacs-19.11/man/cmdargs.texi *** emacs-19.10/man/cmdargs.texi Thu May 27 02:04:33 1993 --- emacs-19.11/man/cmdargs.texi Tue Jun 1 02:37:44 1993 *************** *** 297,300 **** --- 297,304 ---- displays the entire font @samp{6x13}. + While running Emacs, you can set the font of the current frame + (@pxref{Frame Parameters}) or for a specific kind of text + (@pxref{Faces}). + @node Colors X @appendixsec Window Color Options diff -rc2P --exclude-from=exceptions emacs-19.10/man/custom.texi emacs-19.11/man/custom.texi *** emacs-19.10/man/custom.texi Fri May 28 16:55:29 1993 --- emacs-19.11/man/custom.texi Tue Jun 1 02:37:03 1993 *************** *** 99,104 **** In Transient Mark mode, every change in the buffer ``deactivates'' the ! mark, so that commands that operate on the region will get an error. ! @xref{Setting Mark}. @node Variables --- 99,107 ---- In Transient Mark mode, every change in the buffer ``deactivates'' the ! mark, so that commands that operate on the region will get an error. ! This means you must either set the mark, or explicitly ``reactivate'' ! it, before each command that uses the region. The advantage of ! Transient Mark mode is that Emacs can display the region highlighted ! (currently only when using X). @xref{Setting Mark}. @node Variables diff -rc2P --exclude-from=exceptions emacs-19.10/man/emacs.texi emacs-19.11/man/emacs.texi *** emacs-19.10/man/emacs.texi Sun May 30 01:26:35 1993 --- emacs-19.11/man/emacs.texi Tue Jun 1 04:30:48 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.10. @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.11. @end ifinfo diff -rc2P --exclude-from=exceptions emacs-19.10/man/entering.texi emacs-19.11/man/entering.texi *** emacs-19.10/man/entering.texi Thu May 20 18:22:30 1993 --- emacs-19.11/man/entering.texi Tue Jun 1 02:38:43 1993 *************** *** 8,13 **** The usual way to invoke Emacs is with the shell command @samp{emacs}. Emacs clears the screen and then displays an initial help message and ! copyright notice. You can begin typing Emacs commands immediately ! afterward. Some operating systems insist on discarding all type-ahead when Emacs --- 8,13 ---- The usual way to invoke Emacs is with the shell command @samp{emacs}. Emacs clears the screen and then displays an initial help message and ! copyright notice. On a window system, Emacs opens a window of its own. ! You can begin typing Emacs commands immediately afterward. Some operating systems insist on discarding all type-ahead when Emacs diff -rc2P --exclude-from=exceptions emacs-19.10/man/files.texi emacs-19.11/man/files.texi *** emacs-19.10/man/files.texi Tue May 25 23:11:22 1993 --- emacs-19.11/man/files.texi Tue Jun 1 02:39:54 1993 *************** *** 133,140 **** @item C-x 4 C-f Visit a file, in another window (@code{find-file-other-window}). Don't ! change this window. @item C-x 5 C-f Visit a file, in a new frame (@code{find-file-other-frame}). Don't ! change this window. @end table --- 133,140 ---- @item C-x 4 C-f Visit a file, in another window (@code{find-file-other-window}). Don't ! change the selected window. @item C-x 5 C-f Visit a file, in a new frame (@code{find-file-other-frame}). Don't ! change the selected frame. @end table *************** *** 233,236 **** --- 233,242 ---- window showing the same buffer as before, and the other one showing the newly requested file. @xref{Windows}. + + @kindex C-x 5 f + @findex find-file-other-frame + @kbd{C-x 5 f} (@code{find-file-other-frame}) is similar, but opens a + new frame. This feature is available only when you are using a window + system. @xref{Frames}. @vindex find-file-hooks diff -rc2P --exclude-from=exceptions emacs-19.10/man/frames.texi emacs-19.11/man/frames.texi *** emacs-19.10/man/frames.texi Tue May 25 01:35:47 1993 --- emacs-19.11/man/frames.texi Tue Jun 1 02:52:22 1993 *************** *** 15,18 **** --- 15,24 ---- minibuffer of another frame. + Anything you do in one frame also affects the other frames. For + instance, if you put text in the kill ring in one frame, you can yank it + in another frame. If you exit emacs through @kbd{C-x C-c} in one frame, + it terminates all the frames. To delete just one frame, use @kbd{C-x 5 + 0}. + To avoid confusion, we reserve the word ``window'' for the subdivisions that Emacs implements, and never use it to refer to a *************** *** 20,30 **** @menu ! * Mouse Commands:: ! * Creating Frames:: ! * Frame Parameters:: ! * Scroll Bars:: ! * Menu Bars:: ! * Faces:: ! * Misc X:: @end menu --- 26,36 ---- @menu ! * Mouse Commands:: Moving, cutting, and pasting, with the mouse. ! * Creating Frames:: Creating additional Emacs frames with various contents. ! * Frame Parameters:: Changing the colors and other modes of frames. ! * Scroll Bars:: How to enable and disable scroll bars; how to use them. ! * Menu Bars:: Enabling and disabling the menu bar. ! * Faces:: How to change the display style using faces. ! * Misc X:: Iconifying and deleting frames. Region highlighting. @end menu *************** *** 41,44 **** --- 47,51 ---- @item mouse-1 Move point to where you click (@code{mouse-set-point}). + This is normally the left button. @item drag-mouse-1 *************** *** 49,56 **** @item mouse-2 Yank the last kill text, where you click (@code{mouse-yank-at-click}). @item mouse-3 ! Copy text to the kill ring (@code{mouse-save-then-click}). ! When repeated, kills the text. This operation applies to the text between point and the place where --- 56,65 ---- @item mouse-2 Yank the last kill text, where you click (@code{mouse-yank-at-click}). + This is normally the middle button. @item mouse-3 ! Copy text to the kill ring (@code{mouse-save-then-click}). This is ! normally the right button. If you click it a second time at the same ! place, that kills the text. This operation applies to the text between point and the place where *************** *** 58,67 **** @end table ! Thus, to kill a section of text, you can press @key{MOUSE-1} at one ! end, then press @key{MOUSE-3} twice at the other end. To prepare ! to copy the text without killing it, press @key{MOUSE-3} just once. ! To yank the killed or copied text somewhere else, move the mouse there ! and press @key{MOUSE-2}. @cindex cutting and X --- 67,78 ---- @end table ! Thus, to kill a section of text, you can press @key{Mouse-1} at one ! end, then press @key{Mouse-3} twice at the other end. To select the ! text for copying without deleting it from the buffer, press ! @key{Mouse-3} just once. Then you can copy it elsewhere by yanking it. ! @xref{Killing}. ! To yank the killed or copied text somewhere else, move the mouse there ! and press @key{Mouse-2}. @xref{Yanking}. @cindex cutting and X *************** *** 69,73 **** @cindex X cutting and pasting @cindex X pasting and cutting ! To copy text to another X window, kill it or save it in the kill ring. Under X, this also sets the @dfn{primary selection}. Then use the ``paste'' or ``yank'' command of the program operating the other window --- 80,84 ---- @cindex X cutting and pasting @cindex X pasting and cutting ! To copy text to another X window, kill it or save it in the kill ring. Under X, this also sets the @dfn{primary selection}. Then use the ``paste'' or ``yank'' command of the program operating the other window *************** *** 74,80 **** to insert the text from the selection. ! To copy text from another X window, use the ``cut'' or ``copy'' command of the program operating the other window, to select the text you want. ! Then yank it in Emacs with @kbd{C-y} or @key{MOUSE-2}. @node Creating Frames --- 85,91 ---- to insert the text from the selection. ! To copy text from another X window, use the ``cut'' or ``copy'' command of the program operating the other window, to select the text you want. ! Then yank it in Emacs with @kbd{C-y} or @key{Mouse-2}. @node Creating Frames *************** *** 119,125 **** @cindex Auto-Lower mode ! This section describes the commands for setting various parameters ! controlling the display style and window management behavior of a ! frame. All of them apply to the selected frame only. @findex set-foreground-color --- 130,135 ---- @cindex Auto-Lower mode ! This section describes commands for altering the display style and ! window management behavior of the selected frame. @findex set-foreground-color *************** *** 159,163 **** @findex set-default-font @item M-x set-default-font @key{RET} @var{font} @key{RET} ! Specify font @var{font} as the default for the selected frame. @end table --- 169,177 ---- @findex set-default-font @item M-x set-default-font @key{RET} @var{font} @key{RET} ! Specify font @var{font} as the default for the selected frame. ! @xref{Font X}, for ways to list the available fonts on your system. ! ! You can also set a frame's default font through a pop-up menu. ! Press @kbd{C-@key{Mouse-3}} to activate this menu. @end table *************** *** 173,186 **** represents the entire length of the buffer. ! You can use the middle mouse button in the scroll bar to move or drag ! the inner box up and down. If you move it to the top of the scroll bar, ! you see the top of the buffer. If you move it to the bottom of the ! scroll bar, you see the bottom of the buffer. The left and right buttons in the scroll bar scroll by controlled ! increments. The left button moves the line at the level where you click ! up to the top of the window. The right button moves the line at the top ! of the window down to the level where you click. By clicking repeatedly ! in the same place, you can scroll by the same distance over and over. @findex scroll-bar-mode --- 187,201 ---- represents the entire length of the buffer. ! You can use @key{Mouse-2} (normally, the middle button) in the scroll ! bar to move or drag the inner box up and down. If you move it to the ! top of the scroll bar, you see the top of the buffer. If you move it to ! the bottom of the scroll bar, you see the bottom of the buffer. The left and right buttons in the scroll bar scroll by controlled ! increments. @key{Mouse-1} (normally, the left button) moves the line at ! the level where you click up to the top of the window. @key{Mouse-3} ! (normally, the right button) moves the line at the top of the window ! down to the level where you click. By clicking repeatedly in the same ! place, you can scroll by the same distance over and over. @findex scroll-bar-mode *************** *** 201,205 **** By default, each Emacs frame has a menu bar at the top which you can ! use to perform certain common operations. You can turn display of menu bars on or off with @kbd{M-x menu-bar-mode}. --- 216,227 ---- By default, each Emacs frame has a menu bar at the top which you can ! use to perform certain common operations. There's no need to describe ! them in detail here, as you can more easily see for yourself; also, ! we may change them and add to them in subsequent Emacs versions. ! ! Each of the operations in the menu bar is bound to an ordinary Emacs ! command which you can invoke equally well with @kbd{M-x} or with its own ! key bindings. To see the command's name and documentation, type ! @kbd{C-h k} and then select the menu bar item you are interested in. You can turn display of menu bars on or off with @kbd{M-x menu-bar-mode}. *************** *** 297,304 **** @kindex C-z @findex iconify-frame ! To iconify the selected Emacs frame, type @kbd{C-z}. The normal meaning of @kbd{C-z}, to suspend Emacs, is not useful under a window system, so it has a different binding in that case (the command @code{iconify-frame}). Under X Windows, when Transient Mark mode is enabled, Emacs highlights --- 319,330 ---- @kindex C-z @findex iconify-frame ! To iconify the selected Emacs frame, type @kbd{C-z}. The normal meaning of @kbd{C-z}, to suspend Emacs, is not useful under a window system, so it has a different binding in that case (the command @code{iconify-frame}). + + @kindex C-x 5 0 + @findex delete-frame + To delete the selected frame, type @kbd{C-x 5 0}. Under X Windows, when Transient Mark mode is enabled, Emacs highlights diff -rc2P --exclude-from=exceptions emacs-19.10/man/help.texi emacs-19.11/man/help.texi *** emacs-19.10/man/help.texi Mon May 24 03:40:31 1993 --- emacs-19.11/man/help.texi Tue Jun 1 00:33:53 1993 *************** *** 115,118 **** --- 115,121 ---- This is too big for the echo area, so a window is used for the display. + @kbd{C-h c} and @kbd{C-h k} work for any sort of key sequences, + including function keys and mouse events. + @node Name Help @section Help by Command or Variable Name diff -rc2P --exclude-from=exceptions emacs-19.10/man/mark.texi emacs-19.11/man/mark.texi *** emacs-19.10/man/mark.texi Thu May 20 18:22:26 1993 --- emacs-19.11/man/mark.texi Tue Jun 1 03:15:43 1993 *************** *** 32,35 **** --- 32,37 ---- @menu * Setting Mark:: Commands to set the mark. + * Transient Mark:: How to make Emacs highlight the region-- + when there is one. * Using Region:: Summary of ways to operate on contents of the region. * Marking Objects:: Commands to put region around textual units. *************** *** 83,103 **** its original position. - @cindex mode, Transient Mark - @cindex Transient Mark mode - If you enable Transient Mark mode (a minor mode), then the mark - becomes ``inactive'' after every command that modifies the buffer. - Quitting with @kbd{C-g} also deactivates the mark. Most commands that - use the mark give an error if the mark is inactive, but you can use - @kbd{C-x C-x} to make it active again. Commands that ``leave the mark - behind'' usually change its position but leave it inactive. - - @findex transient-mark-mode - Under X Windows, when Transient Mark mode is enabled, Emacs highlights - the region when the mark is active. This is the main motive for using - Transient Mark mode. To enable this mode, use the command @kbd{M-x - transient-mark-mode}. The mode is also sometimes known as ``Zmacs - mode'' because the Zmacs editor on the MIT Lisp Machine handled the mark - in a similar way. - @kindex C-@@ There is no such character as @kbd{C-@key{SPC}} in ASCII; when you --- 85,88 ---- *************** *** 109,112 **** --- 94,154 ---- @kbd{C-@key{SPC}}. Under X, @kbd{C-@key{SPC}} is actually a distinct character, but its binding is still @code{set-mark-command}. + + @node Transient Mark + @section Transient Mark Mode + @cindex mode, Transient Mark + @cindex Transient Mark mode + + Many Emacs commands move the mark and invisibly set new regions. + This means that there is almost always some region that you can act + on. This is convenient, provided you get used to keeping track of the + mark's position. + + Some people prefer a more rigid mode of operation in which you must + set up a region for each command that uses one---in which the region + ``lasts'' only temporarily. This is called Transient Mark mode. It + is particularly well-suited to window systems such as X, since Emacs + can highlight the region when it is active. + + @findex transient-mark-mode + To enable Transient Mark mode, type @kbd{M-x transient-mark-mode}. + This command toggles the mode, so you can issue it again to return to + the normal Emacs way of handling the mark and the region. + + Here are the details of Transient Mark mode: + + @itemize @bullet + @item + To set the mark, type @kbd{C-@key{SPC}} (@code{set-mark-command}). + This makes the mark active; as you move point, you will see the region + highlighting change in extent. + + @item + On a window system, an easy way to select a region is to press the + button @key{Mouse-1} (normally the left button) at one end of it, drag + the mouse to the other end, and then release the button. + + @item + When the mark is active, you can execute any commands you want on the + region, such as killing, indentation, or writing to a file. + + @item + Any change to the buffer, such as inserting or deleting a character, + deactivates the mark. This means any subsequent command that operates + on a region will get an error and refuse to operate. You can make the + region active again by typing @kbd{C-x C-x}. + + @item + Commands like @kbd{M->} that ``leave the mark behind'' do not activate + the new mark. it. You can activate the new region by executing + @kbd{C-x C-x} (@code{exchange-point-and-mark}). + + @item + Quitting with @kbd{C-g} deactivates the mark. + @end itemize + + Transient Mark mode is also sometimes known as ``Zmacs mode'' + because the Zmacs editor on the MIT Lisp Machine handled the mark in a + similar way. @node Using Region diff -rc2P --exclude-from=exceptions emacs-19.10/man/sc.texinfo emacs-19.11/man/sc.texinfo *** emacs-19.10/man/sc.texinfo --- emacs-19.11/man/sc.texinfo Mon Feb 8 12:00:54 1993 *************** *** 0 **** --- 1,1734 ---- + \input texinfo @comment -*-Texinfo-*- + @setfilename sc.info + @settitle Supercite User's Manual + @iftex + @finalout + @end iftex + @c @setchapternewpage odd % For book style double sided manual. + @c @smallbook + @tex + \overfullrule=0pt + %\global\baselineskip 30pt % For printing in double spaces + @end tex + @ifinfo + This document describes the Supercite package for citing and attributing + the replies for various GNU Emacs mail and news reading subsystems. + + Copyright @copyright{} 1991 Barry A. Warsaw + + Permission is granted to make and distribute verbatim copies of + this manual provided the copyright notice and this permission notice + are preserved on all copies. + + @ignore + Permission is granted to process this file through Tex and print the + results, provided the printed document carries copying permission + notice identical to this one except for the removal of this paragraph + (this paragraph not being relevant to the printed manual). + + @end ignore + @end ifinfo + @c + @titlepage + @sp 6 + @center @titlefont{Supercite User's Manual} + @sp 4 + @center First Edition, Supercite Version 2.3 + @sp 1 + @center May 1991 + @sp 5 + @center Barry A. Warsaw + @center @t{bwarsaw@@cen.com} + @center @t{...!uunet!cen.com!bwarsaw} + @page + @vskip 0pt plus 1filll + Copyright @copyright{} 1991 Barry A. Warsaw + + Permission is granted to make and distribute verbatim copies of + this manual provided the copyright notice and this permission notice + are preserved on all copies. + + @end titlepage + @page + @ifinfo + @node Top, Introduction, , (dir) + @comment node-name, next, previous, up + + This document describes the Supercite package for citing and attributing + the replies for various GNU Emacs mail and news reading subsystems. The + manual is divided into the following chapters. + + @menu + * Introduction:: Overview of Supercite. + * Citation Styles:: Different style for citing the reply. + * References and Information:: Informative headers describing citations. + * Getting Connected:: Connecting supercite to reader subsystems. + * Replying and Yanking:: What happens when you yank-reply a message. + * Post-yank Formatting Commands:: Things you can do after the initial yank. + * Keymaps:: How to customize supercite key bindings. + * Hints to Reader Authors:: Hints to authors of reader packages. + * Thanks and History:: Recognizing those who have contributed. + * The Supercite Mailing List:: How to get on and post articles. + + Indices: + + * Command Index:: Menus of commands and their references. + * Concept Index:: Menus of concepts and their references. + * Key Index:: Menus of command keys and their references. + * Variable Index:: Menus of variables and their references. + @end menu + @end ifinfo + + @node Introduction, Citation Styles, Top, Top + @comment node-name, next, previous, up + @unnumbered Introduction + Supercite is a GNU Emacs package written entirely in elisp which + interfaces to common mail and news reading subsystems, and provides + sophisticated citing and attributing of the original messages. + Supercite has a very specific and limited role in the process of + composing replies to both Netnews and Electronic Mail. + + @cindex readers, mail/news + Supercite is only useful in conjunction with mail/news reading + subsystems such as VM, GNUS, RMAIL, etc. (hereafter referred to + collectively as @dfn{readers}). Supercite is typically called through a + hook, defined by the reader, when the initial reply buffer is set up. + Thereafter, supercite's many commands and formatting styles are + available in that reply buffer until the reply is sent, at which time + supercite is re-initialized and ready for the next reply. + + The current version of supercite is 2.3 and this version is known to + work with GNU Emacs 18.57 based readers such as RMAIL, RNEWS, and MH-E, + as well as all versions of GNUS up to this writing (3.12 and 3.13), + GNEWS, all versions of VM up to this writing (VM version 4 from 4.37 to + 4.41 and VM version 5) and PCMAIL. Only VM and MH-E (version 3.7 which + was released with emacs 18.57) will work with supercite ``out of the + box.'' All other readers must overload interfacing routines, supplied + with the supercite package, to provide the necessary glue between the + reader and supercite. @xref{Getting Connected} for more details. + + As of this writing (30-Dec-1992) version 2.3 is now compatible with + Lucid Emacs 19.3. This is the only substantive difference between + version 2.3 and version 2.2. + + @kindex r + @kindex f + @kindex C-c C-y + + Standard operating procedure is usually as follows. You want to reply or + followup to an article or message in the reader you are using. + Typically, you will enter @kbd{r} or @kbd{f} to begin composing the + reply. The reader you are using will create a buffer and initialize the + mail headers appropriately. At this point you will probably be faced + with an empty reply buffer. Now you decide that you would like to + include part of the original message in your reply so you ``yank'' the + original message into the reply buffer, typically with a key stroke such + as @kbd{C-c C-y}. This should invoke a reader specific function which + fills the buffer with the raw original message and then runs a hook to + massage the reply buffer. When you've connected supercite to this hook, + it will run at this time, extracting useful information from the various + yanked mail headers, creating an attribution string, citing the original + message, and inserting a reference header. + + Because of this clear division of labor between supercite and the + reader, some useful operations, which at first thought should be under + the domain of supercite, are really the responsibility of the reader + package. For example, many people have indicated that they would like to + be able to yank (and cite) only a portion of the original message. + Since supercite only modifies the raw text it finds in the buffer as set + up by the reader, it is the reader's responsibility to do partial + yanking. However, supercite can be told to not modify the text when + called via the hook, in which case the raw reply will remain unchanged, + but supercite will be initialized for manual citing. + @xref{Reply Buffer Initialization}.@refill + + @vindex mail-header-separator + Another potentially useful thing would be for supercite to set up the + outgoing mail headers with information it gleans from the reply buffer + composition. But by previously agreed upon convention, any text above + the @code{mail-header-separator} (typically + @samp{--text follows this line--}) + which separates mail headers from message bodies is not + modifiable by supercite. Supercite has no understanding of the semantics + of these headers. @xref{Hints to Reader Authors} for more + details.@refill + + Though supercite is usually loaded and run initially through a hook + function, it will ``leach'' onto the major-mode of the reply buffer by + extending the keymap of the buffer, and modifying its major-mode + documentation string. In this way, after the initial yank of included + text, all of supercite's post-yank formatting commands will be available + in the reply buffer, without any advanced knowledge by the reader of + supercite's existence or use by you. + + Supercite provides routines to do automatic filling of cited text, + commands to recite or uncite regions of text in the reply buffer, and + commands to perform other beautifications on the reply, maintaining + consistent and informative citations throughout. Supercite tries to be + as configurable as possible to allow for a wide range of personalized + citation styles, but it is also immediately useful with the default + configuration, once it has been properly connected to your reader. + @xref{Getting Connected} for more details. + @node Citation Styles, References and Information, Introduction, Top + @comment node-name, next, previous, up + @chapter Citation Styles + @cindex nested citations + @cindex citation + @cindex nested citations + A @dfn{citation} is the acknowledgment of the original author of a mail + message, in the body of the reply. There are two basic citation styles + which supercite supports. The first, called @dfn{nested citation} style + is an anonymous form of citation; in other words, an indication is made + that the cited line was written by someone @emph{other} that the current + message author (i.e., other than you, composing this reply), but no + reference is made as to the identity of the original author. Here's an + example of what a message buffer would look like using nested citations + after multiple replies: + + @example + >> John originally wrote this + >> and this as well + > Jane said that John didn't know + > what he was talking about + And that's what I think too. + @end example + + Note that multiple inclusions of the original messages result in a + nesting of the ``@code{>}'' characters. This can sometimes be quite + confusing when many levels of citations are included since it may be + difficult or impossible to figure out who actually wrote the first + included message. Also, the multiple nesting of ``@code{>}'' characters + can sometimes make the message very difficult for the eye to scan. + + @cindex non-nested citations + In @dfn{non-nested citation} style, each cited line begins with an + informative string attributing that line to the original author. Only + the first level of attribution will be shown; subsequent citations don't + nest the citation strings. The above dialog might look like this when + non-nested citation style is used: + + @example + John> John originally wrote this + John> and this as well + Jane> Jane said that John didn't know + Jane> what he was talking about + And that's what I think too. + @end example + + Notice here that my inclusion of Jane's inclusion of John's original + message did not result in a line cited with @samp{Jane>John>}. + + @vindex sc-nested-citation-p + @vindex nested-citation-p (sc-) + The supercite variable @code{sc-nested-citation-p} controls the style of + citations. When @code{nil} (the default), non-nested citations are used. + When non-@code{nil}, nested citations are used. + @ifinfo + + @menu + * Citation Elements:: Composing citation strings. + * Attributions:: Automatic attribution string selection. + * Author Names and Nicknames:: How supercite deciphers author's names. + @end menu + @end ifinfo + @node Citation Elements, Attributions, Citation Styles, Citation Styles + @comment node-name, next, previous, up + @section Citation Elements + @cindex citation string + @cindex citation delimiter + @vindex sc-citation-delimiter + @vindex citation-delimiter (sc-) + @dfn{Citation strings} are composed of one or more elements. Nested + citations, being less complex (and less informative) than non-nested + citations, are composed of only a single element, the + @dfn{citation delimiter}. This string is user defined in the variable + @code{sc-citation-delimiter} and has a default value of @code{">"}. + Nested citations will contain a single space between the last level + (oldest) citation and the original text. It is usually a good idea to + make @code{sc-citation-delimiter} a single character. + + Non-nested citations are composed of four elements, three of which are + directly user definable. The elements are concatenated together, in + this order: + + @cindex citation leader + @vindex citation-leader (sc-) + @vindex sc-citation-leader + @enumerate + @item + the @dfn{citation leader}. The citation leader is contained in the + variable @code{sc-citation-leader}, and has the default value of a + string containing a single tab character. + + @cindex attribution string + @item + the @dfn{attribution string}. This element is supplied automatically by + supercite, based on your preferences and the original message's mail + headers, though you may be asked to confirm supercite's choice. + @xref{Attributions} for more details. + + @item + the citation delimiter as described above. + + @cindex citation separator + @vindex citation-separator (sc-) + @vindex sc-citation-separator + @item + the @dfn{citation separator}. The citation separator is contained in + the variable @code{sc-citation-separator}, and has the default value of + a string containing a single space character. + @end enumerate + + @vindex sc-cite-regexp + @vindex cite-regexp (sc-) + For example, suppose, you were using the default values for the above + variables, and supercite provided the attribution string @samp{Jane}. + In this case, the composed, non-nested citation string used might be + something like @samp{\tJane> } (the @samp{\t} represents a tab + character). This citation string will be inserted in front of every line + in the original message that is not already cited. Supercite uses the + regular expression in the variable @code{sc-cite-regexp} to determine + whether a line is already cited or not. The default value for this + variable is: + + @example + "\\s *[-a-zA-Z0-9_.]*>+\\s *" + @end example + + @noindent + Nemacs users may want to set @code{sc-cite-regexp} to: + + @example + "\\s *\\([a-zA-Z0-9]\\|\\cc\\|\\cC\\|\\ch\\|\\cH\\|\\ck\\|\\cK\\)*\\s *>+" + @end example + @node Attributions, Author Names and Nicknames, Citation Elements, Citation Styles + @comment node-name, next, previous, up + @section Attributions + @cindex attribution list + @vindex sc-preferred-attribution + @vindex preferred-attribution (sc-) + The attribution string is the part of the author's name that will be + used in a composed non-nested citation string to acknowledge the + originator of a section of text. Supercite scans the various mail + headers present in the original article and uses a number of heuristics + to extract strings which it puts into the @dfn{attribution list}. This + list contains such information as the author's first, middle, and last + names, the author's initials, and the author's email terminus. It is + consulted during automatic composition of the citation string, and will + be the list presented to you if attribution confirmation is selected + (also @pxref{Replying and Yanking}). The variable + @code{sc-preferred-attribution} allows you to determine which part of + the author's name should be used when supercite composes automatic + citation strings. The value of this variable must be one of the + following quoted symbols: + + @table @code + @item emailname + the author's email terminus. + + @item initials + the author's initials. + + @item firstname + the author's first name. + + @item lastname + the author's last name. + + @item middlename1 + the author's first middle name. + @end table + + Middle name indexes can be any positive integer greater than zero, + though it is unlikely that many authors will supply more than one middle + name, if that many. Default value for @code{sc-preferred-attribution} + is @code{'firstname}. + + @vindex sc-default-author-name + @vindex sc-default-attribution + @vindex default-author-name (sc-) + @vindex default-attribution (sc-) + When, for whatever reason, the author's name cannot be found in the + @samp{From:} mail header, a default author name and attribution string + must be supplied. The default author name is set in the variable + @code{sc-default-author-name} (default value is @code{"Anonymous"}), and + the default attribution string is contained in the variable + @code{sc-default-attribution}, (default value is @code{"Anon"}). Note + that in most circumstances, getting the default author name or + attribution is a sign that something is set up incorrectly. + + @vindex sc-use-only-preference-p + @vindex use-only-preference-p (sc-) + Also, if your preferred attribution cannot be found, or is either + @code{nil} or the empty string, a secondary method can be employed to + find a valid attribution string. The variable + @code{sc-use-only-preference-p} controls what happens in this case. If + @code{sc-use-only-preference-p} is non-@code{nil}, then + @code{sc-default-author-name} and @code{sc-default-attribution} are + used, otherwise, the following steps are taken to find a valid + attribution string. The first step to return a non-@code{nil}, non-empty + string becomes the attribution:@refill + + @vindex sc-confirm-always-p + @vindex confirm-always-p (sc-) + @enumerate + @item + Use the author's first name. + + @item + Find the first non-@code{nil}, non-empty attribution string in the + attribution list. + + @item + If the variable @code{sc-confirm-always-p} is non-@code{nil}, then + you are queried for an attribution string with a completing read. The + possible values for completion are those strings in the attribution + list, however, you can override all presented strings by simply typing + in your attribution at the prompt. + + @item + @code{sc-default-attribution} is used. + @end enumerate + + @vindex sc-downcase-p + @vindex downcase-p (sc-) + Finally, once a legal attribution string is found, you can force the + string to lower case characters by setting the variable + @code{sc-downcase-p} to non-@code{nil}. + @node Author Names and Nicknames, , Attributions, Citation Styles + @comment node-name, next, previous, up + @section Author Names and Nicknames + @cindex author names + Supercite employs a number of heuristics to decipher the author's name + base on the @samp{From:} field. Supercite can recognize @samp{From:} + fields with the following forms: + + @enumerate + @item + @code{From: John Xavier Doe } + @item + @code{From: "John Xavier Doe" } + @item + @code{From: doe@@speedy.computer.com (John Xavier Doe)} + @item + @code{From: computer!speedy!doe (John Xavier Doe)} + @item + @code{From: doe%speedy@@computer.com (John Xavier Doe)} + @item + @code{From: computer!speedy!doe (John Xavier-Doe)} + @item + @code{From: computer!speedy!doe (John Xavier-Doe -- Decent Hacker)} + @item + @code{From: doe@@speedy.computer.com} + @item + @code{From: computer!speedy!doe} + @end enumerate + + @vindex sc-titlecue-regexp + @vindex titlecue-regexp (sc-) + Note that some author fields (as in example 7 above) will contain a + descriptive title. The user can choose to ignore the title, while still + recognizing hyphenated names (as in the second to last example above), + through the use of a regular expression in the variable + @code{sc-titlecue-regexp}. This variable has the default value of + @code{"\\\\s +-+\\\\s +"}. + + @vindex sc-spacify-name-chars + @vindex spacify-name-chars (sc-) + Some author names may contain non-alphanumeric characters, especially if + the author's name is extracted from their email terminus. You can + specify that those characters in the author's name be converted to spaces + with the variable @code{sc-spacify-name-chars}. This is a list of + characters suitable for @code{memq}. Default value for this variable is + @code{'(?_ ?* ?+ ?=)}. + + For @samp{From:} lines matching one of these styles, supercite will be + able to pick out the author's full name (i.e., @code{"John Xavier Doe"}) + and the author's email terminus or email name (i.e., @code{"doe"}). In + examples 8 and 9 above, the author's name will be the email terminus + (i.e., @code{"doe"}). The name extracted by supercite is then split into + its individual components and kept in the attribution list either for + supercite's automatic use, or for presentation to you in a completing + confirmation. When asked to confirm the selected attribution, supercite + will present you with this list, but you can add new attributions to the + list by just typing it in at the prompt. The selected attribution + (whether completed or added) is remembered as the selected attribution + for future operations or completions. + + @vindex sc-nicknames-alist + @vindex nicknames-alist (sc-) + Many names also have common nicknames which supercite cannot + automatically decipher. Therefore, supercite consults a variable + @code{sc-nicknames-alist} which contains a list of common name to + nickname associations. While supercite cannot automatically use a + nickname as the attribution string, matching nicknames will be presented + to you when attribution confirmation is requested (@xref{Post-yank + Formatting Commands}). Any part of the author's name can match an entry + in this list, and one name can match more than one nickname. The list + contains associations of the form:@refill + + @example + (NAME NICKNAME) + @end example + + @noindent + Default value for this variable is: + + @example + @group + '(("Michael" "Mike") + ("Daniel" "Dan") + ("David" "Dave") + ("Jonathan" "John") + ("William" "Bill") + ("Elizabeth" "Beth") + ("Elizabeth" "Betsy") + ("Kathleen" "Kathy") + ("Smith" "Smitty")) + @end group + @end example + @node References and Information, Getting Connected, Citation Styles, Top + @comment node-name, next, previous, up + @chapter References and Information + @cindex reference headers + Supercite will insert an informative @dfn{reference header} at the + beginning of the cited body of text, which provides more detail about + the original article. Whereas the citation string usually only contains + a portion of the original author's name, the reference header can + contain such information as the author's full name, email address, the + original article's subject, etc. In fact, just about any information + contained in the mail headers of the original article can be inserted + into a reference header. + + @cindex header rewrite functions + @vindex sc-rewrite-header-list + @vindex rewrite-header-list (sc-) + There are a number of built-in @dfn{header rewrite functions} supplied + by supercite, but supercite is extensible in that you can write your own + custom header rewrite functions (perhaps using the built-in ones as + examples) and tell supercite to use your function. In fact, supercite + consults a list of header rewrite functions in the variable + @code{sc-rewrite-header-list}. You can put any rewrite function, custom + or built-in, into this list. This list has the default value: + + @example + '((sc-no-header) + (sc-header-on-said) + (sc-header-inarticle-writes) + (sc-header-regarding-adds) + (sc-header-attributed-writes) + (sc-header-verbose) + (sc-no-blank-line-or-header)). + @end example + + @vindex sc-preferred-header-style + @vindex preferred-header-style (sc-) + When supercite is called via its hook function @code{sc-cite-original}, + it will automatically call one of these functions to insert a reference + header. The one it uses is user definable in the variable + @code{sc-preferred-header-style}. The value of this variable is an + integer which is an index into the @code{sc-header-rewrite-list}, with + the first function indexed at zero. The default value for this variable + is 1 (i.e., default values use the function @code{sc-header-on-said} when + automatically rewriting the header). + @ifinfo + + @menu + * The Built-in Header Rewrite Functions:: Inserting informative headers. + * Mail Fields and Information Keys:: How information is obtains. + * Electric References:: View headers before insertion. + @end menu + @end ifinfo + @node The Built-in Header Rewrite Functions, Mail Fields and Information Keys, , References and Information + @comment node-name, next, previous, up + @section The Built-in Header Rewrite Functions + @cindex header rewrite functions, built-in + @ifinfo + + @end ifinfo + Below are examples of the styles of the various built-in header rewrite + functions. Please note the following: first, the text which appears in + the examples below as @samp{@var{fieldkey}} indicates that the value of + a particular @dfn{information key} corresponding to + @samp{@var{fieldkey}} will be inserted there. (@xref{Mail Fields and + Information Keys}). For example, in @code{sc-header-on-said} below, + @samp{@var{date}} and @samp{@var{from}} correspond to the values of the + @samp{Date:} and @samp{From:} mail headers respectively.@refill + + @vindex sc-reference-tag-string + @vindex reference-tag-string (sc-) + Also, the string ``@code{>>>>>}'' below is really the value of the + variable @code{sc-reference-tag-string}, which is user definable. + Finally, the references headers actually written may omit certain parts + of the header if the information key associated with @var{fieldkey} is + not present. In fact, for all built-in headers, if the @samp{From:} + field is not present in the mail headers, the entire reference header + will be omitted. + + @table @code + @findex sc-no-header + @findex no-header (sc-) + @item sc-no-header + This function produces no header. It should be used instead of + @code{nil} to produce a blank header. This header can possibly contain + a blank line after the @code{mail-header-separator} line. + + @item sc-no-blank-line-or-header + @findex sc-no-blank-line-or-header + @findex no-blank-line-or-header (sc-) + This function is similar to @code{sc-no-header} except that any blank + line after the @code{mail-header-separator} line will be removed. + + @item sc-header-on-said + @findex sc-header-on-said + @findex header-on-said (sc-) + @example + >>>>> On @var{date}, @var{from} said: + @end example + + @item sc-header-inarticle-writes + @findex sc-header-inarticle-writes + @findex header-inarticle-writes (sc-) + @example + >>>>> In article @var{message-id}, @var{from} writes: + @end example + + @item sc-header-regarding-adds + @findex sc-header-regarding-adds + @findex header-regarding-adds (sc-) + @example + >>>>> Regarding @var{subject}; @var{from} adds: + @end example + + @item sc-header-attributed-writes + @findex sc-header-attributed-writes + @findex header-attributed-writes (sc-) + @example + >>>>> "@var{sc-attribution}" == @var{sc-author} <@var{sc-reply-address}> writes: + @end example + + @item sc-header-verbose + @findex sc-header-verbose + @findex header-verbose (sc-) + @example + @group + >>>>> On @var{date}, + >>>>> @var{sc-author} + >>>>> from the organization of @var{organization} + >>>>> who can be reached at: @var{sc-reply-address} + >>>>> (whose comments are cited below with: "@var{sc-cite}") + >>>>> had this to say in article @var{message-id} + >>>>> in newsgroups @var{newsgroups} + >>>>> concerning the subject of @var{subject} + >>>>> see @var{references} for more details + @end group + @end example + @end table + @node Mail Fields and Information Keys, Electric References, The Built-in Header Rewrite Functions, References and Information + @comment node-name, next, previous, up + @section Mail Fields and Information Keys + @ifinfo + + @end ifinfo + @cindex information keys + @cindex key-value pairs + @cindex information extracted from mail fields + @findex sc-field + @findex field (sc-) + @dfn{Information keys} are nuggets of information that supercite + extracts from various mail fields placed in the reply buffer by the + reader. Information is kept in a list as @dfn{key-value} pairs and can + be retrieved for use in reference headers with the function + @code{sc-field}. In addition, other bits of data, composed and created + by supercite, are also kept as key-value pairs. In the case of mail + fields, the key is always the name of the field, cast to lower case + characters, without the trailing colon. Thus, if the following fields + were present in the original article:@refill + + @example + Date: 08 April 1991, 17:32:09 EST + Subject: Better get out your asbestos suit + @end example + + @vindex sc-mumble-string + @vindex mumble-string (sc-) + @cindex mumble string + @noindent + then, @code{(sc-field "date")} would return the string + @code{"08 April 1991, 17:32:09 EST"}, and + @code{(sc-field "subject")} would return the + string @code{"Better get out your asbestos suit"}. Since the argument + to @code{sc-field} can be any string, it is possible that the mail field + will not be present, or that the string was incorrectly typed. In this + case, @code{sc-field} will return a @dfn{mumble string} as defined in + the variable @code{sc-mumble-string}. The default value for this + variable is the empty string (i.e., @code{""}).@refill + + @vindex sc-mail-fields-list + @vindex mail-fields-list (sc-) + The variable @code{sc-mail-fields-list} contains a list of mail fields + (as information keys), which supercite will extract for use with + @code{sc-fields}. Only the values of these mail fields will be + extracted. Default value for this variable is: + + @example + '("date" "message-id" "subject" "newsgroups" "references" + "from" "return-path" "path" "reply-to" "organization" + "reply" ) + @end example + + Note that mail headers can also be removed from the body of the reply + once their information has been extracted. + @xref{Reply Buffer Initialization} for more details. + + The @samp{From:} field will always be put into the information list + exactly once. In addition to these information keys, supercite also + always places the following keys into the information list: + + @table @code + @cindex information fields + @vindex sc-attribution field + @vindex attribution(sc-) field + @item sc-attribution + the selected attribution string. + + @item sc-nested-citation + @vindex sc-nested-citation field + @vindex nested-citation(sc-) field + the nested citation string. + + @item sc-citation + @vindex sc-citation field + @vindex citation(sc-) field + the non-nested citation string. + + @item sc-from-address + @vindex sc-from-address field + @vindex from-address(sc-) field + email address extracted from the @samp{From:} field. + + @item sc-reply-address + @vindex sc-reply-address field + @vindex reply-address(sc-) field + email address extracted from the @samp{Reply-To:} field. + + @item sc-emailname + @vindex sc-emailname field + @vindex emailname(sc-) field + email terminus extracted from the @samp{From:} field. + + @item sc-initials + @vindex sc-initials field + @vindex initials(sc-) field + the author's initials. + + @item sc-author + @vindex sc-author field + @vindex author(sc-) field + the author's full name. + + @item sc-firstname + @vindex sc-firstname field + @vindex firstname(sc-) field + the author's first name. + + @item sc-lastname + @vindex sc-lastname field + @vindex lastname(sc-) field + the author's last name. + + @item sc-middlename-1 + @vindex sc-middlename fields + @vindex middlename(sc-) fields + the author's first middle name. + @end table + + As above, if the author's name has more than one middle name, they will + appear as information keys with the appropriate index. + @node Electric References, , Mail Fields and Information Keys, References and Information + @comment node-name, next, previous, up + @section Electric References + @cindex electric references + By default, supercite just goes ahead and inserts the reference header + indexed by @code{sc-preferred-header-style}. However, you may want to + select different reference headers based on the type of reply or + forwarding you are doing. You may also want to preview the reference + header before deciding whether to insert it into the reply buffer or + not. Supercite provides an optional @dfn{electric reference} mode which + you can drop into to give you this functionality. + + @vindex sc-electric-references-p + @vindex electric-references-p (sc-) + Electric reference mode is a quasi-major-mode which you enter whenever + supercite inserts a reference header and the variable + @code{sc-electric-references-p} is non-@code{nil}. Actually you are + placed into a recursive edit inside the electric reference buffer, which + is a read-only buffer.@refill + + When in electric reference mode, you can scan back and forth through the + list of reference headers in @code{sc-rewrite-header-list}. You can + also set a new preferred header style, jump to any header, or jump to + the preferred header. The header will be shown in the electric reference + buffer and the header index will appear in the echo area. You cannot, + however, actually edit the headers while in electric reference mode; you + will have to do that once the header has been inserted into the reply + buffer. + + The following commands are available while in electric reference mode + (shown here with their default key bindings): + + @table @asis + @item @code{sc-eref-next} (@kbd{n}) + @findex sc-eref-next + @findex eref-next (sc-) + @kindex n + @vindex sc-electric-circular-p + @vindex electric-circular-p (sc-) + Displays the next reference header in the other buffer. If the variable + @code{sc-electric-circular-p} is non-@code{nil}, invoking + @code{sc-eref-next} while viewing the last reference header in the list, + will wrap around to the first header. + + @item @code{sc-eref-prev} (@kbd{p}) + @findex sc-eref-prev + @findex eref-prev (sc-) + @kindex p + Displays the previous reference header in the other buffer. If the + variable @code{sc-electric-circular-p} is non-@code{nil}, invoking + @code{sc-eref-prev} will wrap around to the last header. + + @item @code{sc-eref-goto} (@kbd{g}) + @findex sc-eref-goto + @findex eref-goto (sc-) + @kindex g + Display the reference header indexed by @var{refnum} where @var{refnum} + is a valid index into @code{sc-rewrite-header-list}. @var{refnum} can be + supplied as a numeric argument to this command, or you will be queried + for it in the minibuffer. + + @item @code{sc-eref-jump} (@kbd{j}) + @findex sc-eref-jump + @findex eref-jump (sc-) + @kindex j + Display the preferred reference header -- the one indexed by the current + value of @code{sc-preferred-header-style}. + + @item @code{sc-eref-exit} (@kbd{q}, @key{LFD}, and @key{RET}) + @kindex RET + @kindex LFD + @kindex q + @findex sc-eref-exit + @findex eref-exit (sc-) + Exit from electric reference mode and insert the current header into the + reply buffer. Also note that exiting the recursive edit (with command + @code{(exit-recursive-edit)}, typically bound to @kbd{ESC C-c}), + executes sc-eref-exit. + + @item @code{sc-eref-abort} (@kbd{x}) + @findex sc-eref-abort + @findex eref-abort (sc-) + @kindex x + Exit from electric reference mode without inserting the current header. + + @item @code{sc-eref-setn} (@kbd{s}) + @findex sc-eref-setn + @findex eref-setn (sc-) + @kindex s + Set the preferred reference header (i.e., + @code{sc-preferred-header-style}) to the currently displayed header. + @end table + + @vindex sc-electric-mode-hook + @vindex electric-mode-hook (sc-) + @noindent + Supercite will execute the hook @code{sc-electric-mode-hook} before + entering electric reference mode. + @node Getting Connected, Replying and Yanking, References and Information, Top + @comment node-name, next, previous, up + @chapter Getting Connected + Early in supercite's development, the supercite author, many of the + major reader subsystem authors, and some supercite users got together + and agreed upon a standard interface between all readers and any + supercite-like package (of which supercite is the only known one :-). + @xref{Hints to Reader Authors} for more information on the details of + this interface. You may want to also @pxref{Thanks and History} for + details on how this interface was proposed and adopted. + + @cindex overloading + @cindex sc-oloads.el + Suffice to say that at the time of this writing (May 1991), only VM (all + versions after 4.37) and MH-E (version 3.7, which is distributed with + emacs 18.57) conform to this interface ``out of the box.'' If you are + connecting supercite to one of these two packages, you do not need + overloading. All other reader packages must be modified to provide this + interface. The file @file{sc-oloads.el} contains @dfn{overloading} + routines which will allow you to connect supercite with any of the known + major readers currently in existence (@pxref{Overloading for Selected + Readers}). This includes: GNUS (versions 3.12 and 3.13), GNEWS, RMAIL + and RNEWS (as distributed with emacs versions after and including + 18.55), and PCMAIL. If you are using a reader package other than one of + those mentioned above, contact the supercite mailing list about getting + or writing overloading functions for that package (@pxref{The Supercite + Mailing List}). + @ifinfo + + @menu + * Quick Guide for All Readers:: What all users must do. + * Overloading for Selected Readers:: What only some users must do. + @end menu + @end ifinfo + @node Quick Guide for All Readers, Overloading for Selected Readers, Getting Connected, Getting Connected + @comment node-name, next, previous, up + @section Quick Guide for All Readers + @vindex mail-yank-hooks + @vindex mh-yank-hooks + @findex sc-cite-original + @findex cite-original (sc-) + For any reader package except MH-E, you will need to connect supercite + to the standard hook variable @code{mail-yank-hooks}. MH-E users will + need to connect supercite to @code{mh-yank-hooks}. The supercite + function @code{sc-cite-original} is intended to be run from a hook. It + not only cites the text, also does much pre- and post-processing on the + reply buffer (@pxref{Replying and Yanking}) so it should be the first + supercite function to be called on a raw reply buffer. Thus, you will + need one of the following two lines in your @file{.emacs} file: + + @example + (setq mail-yank-hooks 'sc-cite-original) ; for all but MH-E + (setq mh-yank-hooks 'sc-cite-original) ; for MH-E only + @end example + + @cindex .emacs + Also, if supercite is not compiled into your emacs image, you will need + to set up the following autoload, also in your @file{.emacs} file: + + @example + (autoload 'sc-cite-original "sc" "Supercite 2.3" t) + @end example + + @vindex sc-load-hook + @vindex load-hook (sc-) + Supercite will run the user definable hook @code{sc-load-hook} after + loading. Default value for this variable is @code{nil}. + @node Overloading for Selected Readers, , Quick Guide for All Readers, Getting Connected + @comment node-name, next, previous, up + @section Overloading for Selected Readers + @cindex overloading + @ifinfo + + @end ifinfo + Most readers contain hardwired citing styles (often unpopular!) which + cannot be changed. For these readers, you are required to overload the + necessary functions so that they call a hook (i.e., + @code{mail-yank-hooks}) after inserting the original text into the + buffer. This hook can then be set to call @code{sc-cite-original} at + the appropriate time.@refill + + Once again, note that if you are connecting supercite to either MH-E + version 3.7 or VM versions 4.37 and beyond, you do not need overloading + and can skip this section. + @ifinfo + + @menu + * Quick Guide to Overloading:: What you need to put in your .emacs file. + * Overloading Details:: For extending the overloading mechanism. + @end menu + @end ifinfo + @node Quick Guide to Overloading, Overloading Details, Overloading for Selected Readers, Overloading for Selected Readers + @comment node-name, next, previous, up + @subsection Quick Guide to Overloading + @ifinfo + + @end ifinfo + Since supercite's overloading routines are usually not loaded into your + emacs session until they are needed, you should add the following small + function to your @file{.emacs} file. This will load (via the + @code{require}) the supercite overloading package, and then actually + overload the functions for the particular reader your are using. Only + those original reader functions already bound will be overloaded, and + they will only be overloaded once per session.@refill + + @example + (defun my-sc-overload-hook () + (require 'sc-oloads) ; be sure this file is on your load-path + (sc-overload-functions)) + @end example + + Next, you will need to find a hook in the reader which will be called at + an appropriate time to execute @code{my-sc-overload-hook}. It can be + something of a guessing game to find the right hook, but fortunately + that's already been done for all the readers supercite currently knows + about. You should put one of these two lines in your @code{.emacs} + file:@refill + + @vindex news-reply-mode-hook + @vindex mail-setup-hook + @example + (setq news-reply-mode-hook 'my-sc-overload-hook) ; for RNEWS,GNEWS,GNUS + (setq mail-setup-hook 'my-sc-overload-hook) ; for RMAIL,PCMAIL,GNUS + @end example + + Also for GNEWS users, you need to put the following line in your + @code{.emacs} file: + + @vindex gnews-ready-hook + @example + (setq gnews-ready-hook 'my-sc-overload-hook) ; for GNEWS + @end example + + Note that if you have @file{sc-oloads.el} compiled into your emacs + image, you do not need @code{my-sc-overload-hook}. Instead just use one + of the following code fragments:@refill + + @example + (setq news-reply-mode-hook 'sc-overload-functions) ; for RNEWS,GNEWS,GNUS + (setq mail-setup-hook 'sc-overload-functions) ; for RMAIL,PCMAIL,GNUS + (setq gnews-ready-hook 'sc-overload-functions) ; for GNEWS (need both) + @end example + @node Overloading Details, , Quick Guide to Overloading, Overloading for Selected Readers + @comment node-name, next, previous, up + @subsection Overloading Details + @ifinfo + + @end ifinfo + All the overload functions can be found in the file @file{sc-oloads.el}. + In this file are a number of functions which mimic the default behavior + of the yanking functions of the major readers. They are typically + defined with the same name as their original counterparts, except that + ``@code{sc-}'' is prepended to the name. At the appropriate time, the + supercite version will be overloaded onto the original, by way of + @code{fset}-ing the function cell of the original symbol to the function + in the supercite version. In this way, overloading is completely under + the control of the individual users, eliminating the need for a system + administrator's intervention. Overloading is a general solution to the + wider problem of extending the functionality of distribution emacs elisp + code, without requiring the editing or patching of the distribution + files, something that is often not possible for individual users.@refill + + @vindex sc-overload-functions + @findex sc-overload-functions + @vindex overload-functions (sc-) + @findex overload-functions (sc-) + The function @code{sc-overload-functions} performs the actual + @code{fset} modification, though it does it in a slightly intelligent + manner. It will first check to see if the function symbol is bound, and + if not, will skip attempting to overload that symbol. Also, it will + check to see if overloading has already been performed on the symbol, + and will not try to re-overload the function. It does this by setting + the @dfn{property} @code{sc-overloaded} on the symbol after overloading + it.@refill + + The variable @code{sc-overload-functions} contains an association list + of original functions to hook-ified version functions. Entries take the + form: + + @example + (ORIGINAL OVERLOAD) + @end example + + @noindent + and include all the known yank/reply functions for the major reader + subsystems: + + @itemize @bullet + @item + @code{mail-yank-original} + @item + @code{news-reply-yank-original} + @item + @code{reply-yank} + @item + @code{group-reply-yank} + @item + @code{group-follow-yank} + @end itemize + + If you encounter a reader package that requires overloading, but that + supercite does not currently know about, you will need to write the + reply-yanking function which cites the text, to call a hook to do the + citing. You should call that hook @code{mail-yank-hooks} for consistency + and set the default value to the default behavior of the reader. Then + add the name of the original function and the overloading function to + the @code{sc-overload-functions} association list. @xref{Hints to Reader + Authors} for more details.@refill + + @node Replying and Yanking, Post-yank Formatting Commands, Getting Connected, Top + @comment node-name, next, previous, up + @chapter Replying and Yanking + @findex sc-cite-original + @findex cite-original (sc-) + @ifinfo + + @end ifinfo + When you perform a yank in the reply buffer set up by your reader, it + should execute the function @code{sc-cite-original} via one of the hooks + mentioned above (@pxref{Getting Connected}). Since this function is + called by a hook, it is not passed any arguments and so expects the raw + reply buffer to be very specifically formatted + (@pxref{Hints to Reader Authors}). + For the most part, @code{sc-cite-original} will do some + default things, based on your preferences, with very little direct + interaction with you. After the initial yank of the original message, + you can use various supercite commands to reformat and beautify your + reply (@pxref{Post-yank Formatting Commands}).@refill + @ifinfo + + @menu + * Reply Buffer Initialization:: What sc-cite-original does. + * Filling Cited Text:: Automatically filling cited text. + @end menu + @end ifinfo + @node Reply Buffer Initialization, Filling Cited Text, Replying and Yanking, Replying and Yanking + @comment node-name, next, previous, up + @section Reply Buffer Initialization + Executing @code{sc-cite-original} performs the following initializations + of the reply buffer: + @ifinfo + + @end ifinfo + @enumerate + @item + @vindex sc-pre-hook + @vindex pre-hook (sc-) + @emph{Runs @code{sc-pre-hook}.} + You can set this variable to execute any function. It will be called + before supercite does anything. You could conceivably use this hook to + set certain supercite variables based on the reply buffer's mode or name + (i.e., to do something different based on whether you are replying or + following up to an article).@refill + + @item + @emph{Gets information from the mail headers.} + @vindex sc-confirm-always-p + @vindex confirm-always-p (sc-) + All previously retrieved information keys are deleted, then the mail + headers in the body of the text are scanned. Information key-value pairs + are created for each header found. For example, such things as the + author's name and email address are extracted, and the attribution and + citation strings are also derived at this point. If the variable + @code{sc-confirm-always-p} is set, supercite will confirm the selected + attribution string with you at this time before it uses it in the + citation string.@refill + + @item + @vindex sc-nuke-mail-headers-p + @vindex nuke-mail-headers-p (sc-) + @vindex sc-header-nuke-list + @vindex header-nuke-list (sc-) + @emph{``Nukes'' the mail headers.} If the variable + @code{sc-nuke-mail-headers-p} is non-@code{nil}, the mail headers + @strong{in the body of the message}, will be deleted. As mentioned + before, supercite does nothing to the mail headers above the + @code{mail-header-separator} line. You can control which mail + headers are kept and which are deleted by modifying the variable + @code{sc-header-nuke-list}. This variable contains a list of mail + headers to remove, where each entry in the list is a self contained + regular expression unit. These units will be @code{concat}'ed together + into one big regular expression of the form:@refill + + @example + @code{"^@var{header}:\\|^@var{header}:\\|}@dots{}@code{^@var{header}:"} + @end example + + The entries in @code{sc-header-nuke-list} correspond to the individual + @var{header}'s in the above example, and the entries are case + insensitive. If @code{sc-header-nuke-list} is @code{nil}, no headers + will be removed (however, it is better to use + @code{sc-nuke-mail-headers-p} for this). The default value of + @code{sc-header-nuke-list} is: + + @example + '("via" "origin" "status" "received" "remailed" "cc" "sender" "replied" + "organization" "keywords" "distribution" "xref" "references" "expires" + "approved" "summary" "precedence" "subject" "newsgroup[s]?" + "\\(followup\\|apparently\\|errors\\|\\(\\(in-\\)?reply\\)?-\\)?to" + "x-[a-z0-9-]+" "[a-z-]*message-id" "\\(summary-\\)?line[s]" + "\\(\\(return\\|reply\\)-\\)?path" "\\(posted-\\)?date" + "\\(mail-\\)?from") + @end example + + @item + @emph{Cites the message body.} + @vindex sc-all-but-cite-p + @vindex all-but-cite-p (sc-) + If the variable @code{sc-all-but-cite-p} is non-@code{nil}, the message + will not be cited. This way, you can have supercite initialize itself + and do everything but cite the text. This would be useful if you were + citing a very long article (which may take a bit of time), or for some + unique citing formats (i.e., mixed text and code, with different filling + and citing requirements).@refill + + @item + @emph{``Leaches'' onto the current buffer}. + Because supercite is intended to run with a number of different readers, + many of which will have been designed without knowledge of supercite, + and because the supercite package adds functionality to these + subsystems, it must be somewhat subversive in the way it adds its + functions to the keymaps of the current buffers, and its documentation + to the documentation strings of the major-mode of the reply buffer. + @xref{Keymaps} for more information on how supercite sets the keymap of + the reply buffer and how you can change the default key bindings.@refill + + @kindex C-h m + @findex describe-mode + Once supercite has attached itself to the reply buffer, getting + major-mode help, by typing @kbd{C-h m} (@code{describe-mode}) will print + out not only the original mode documentation string, but also + supercite's documentation string. This documentation will describe the + available supercite commands and their key bindings.@refill + + @item + @emph{Runs @code{sc-post-hook}.} + @vindex sc-post-hook + @vindex post-hook (sc-) + This variable is very similar to @code{sc-pre-hook}, except that it runs + after @code{sc-cite-original} is finished. This hook is provided mostly + for completeness and backward compatibility. Perhaps it could be used to + reset certain variables set in @code{sc-pre-hook}.@refill + @end enumerate + + @node Filling Cited Text, , Reply Buffer Initialization, Replying and Yanking + @comment node-name, next, previous, up + @section Filling Cited Text + @ifinfo + + @end ifinfo + @cindex filling paragraphs + @vindex sc-auto-fill-region-p + @vindex auto-fill-region-p (sc-) + @vindex sc-fill-paragraph-hook + @vindex fill-paragraph-hook (sc-) + @findex sc-fill-paragraph + @findex fill-paragraph (sc-) + Supercite provides some paragraph filling functions and will + automatically fill paragraphs as they are cited, when the variable + @code{sc-auto-fill-region-p} is non-@code{nil} (the default value). + There are other packages freely available which work quite well when + filling paragraphs of the non-nested citation style (and probably better + than supercite's built-in functions!) so supercite calls the filling + function via the hook @code{sc-fill-paragraph-hook}. The default is for + supercite to call the function @code{sc-fill-paragraph}.@refill + + @vindex sc-auto-fill-query-each-paragraph-p + @vindex auto-fill-query-each-paragraph-p (sc-) + You can also have supercite query you before filling each paragraph in + the cited region. This would be useful for citing an article with mixed + code and text, where you would want to fill the text regions but not the + code regions. Set the variable + @code{sc-auto-fill-query-each-paragraph-p} to non-@code{nil} (default + value is @code{nil}) for this feature. Note that + @code{sc-auto-fill-region-p} must be non-@code{nil} for query filling + to work.@refill + + Note further that turning off auto-filling does not preclude you from + manually filling each paragraph (@pxref{Post-yank Formatting Commands}). + + @vindex sc-fixup-whitespace-p + @vindex fixup-whitespace-p (sc-) + Finally, supercite will collapse leading whitespace between the citation + string and the text line when the variable @code{sc-fixup-whitespace-p} + is non-@code{nil}. The default value for this variable is + @code{nil}.@refill + + @node Post-yank Formatting Commands, Keymaps, Replying and Yanking, Top + @comment node-name, next, previous, up + @chapter Post-yank Formatting Commands + @ifinfo + + @end ifinfo + Once the original message has been yanked into the reply buffer, and + @code{sc-cite-original} has had a chance to operate on the buffer, a + number of useful supercite commands will be available to you. These + commands are described in this section. Note that the key bindings given + with the command names are those for the default keymap in + @code{sc-default-keymap}. @xref{Keymaps} for more information on + changing the key bindings.@refill + @ifinfo + + @menu + * Commands to Manually Cite Recite and Uncite:: + * String Insertion Commands:: + * Information Commands:: + * Miscellaneous Commands:: + @end menu + @end ifinfo + + @node Commands to Manually Cite Recite and Uncite, String Insertion Commands, Post-yank Formatting Commands, Post-yank Formatting Commands + @comment node-name, next, previous, up + @section Commands to Manually Cite, Recite, and Uncite + @ifinfo + + @end ifinfo + Probably the three most common post-yank formatting operations that you + will perform will be the manual citing, reciting, and un-citing of + regions of text in the reply buffer. Often you may want to recite a + paragraph to use a nickname, or manually cite a paragraph when using + @code{sc-all-but-cite-p}. The following commands perform these + functions on the region of text between @emph{point} and @emph{mark}. + Each of them sets the @dfn{undo boundary} before modifying the region so + that the command can be undone in the standard emacs way.@refill + + @table @asis + @findex sc-cite + @findex cite (sc-) + @kindex C-c C-t + @item @code{sc-cite} (@kbd{C-c C-t}) + @ifinfo + + @end ifinfo + This command cites each line in the region of text, but only if the line + is not already cited as described by @code{sc-cite-regexp}. It also + inserts a reference header at the top of the region. If you supply the + optional numeric argument, it will be passed to + @code{sc-insert-reference} (@pxref{String Insertion Commands}). You + will always be asked to confirm the attribution string before the region + is cited, regardless of the value of @code{sc-confirm-always-p}.@refill + + @findex sc-uncite + @findex uncite (sc-) + @kindex C-c C-u + @item @code{sc-uncite} (@kbd{C-c C-u}) + @ifinfo + + @end ifinfo + This command removes any citation strings from the beginning of each + cited line in the region.@refill + + @findex sc-recite + @findex recite (sc-) + @kindex C-c C-a + @item @code{sc-recite} (@kbd{C-c C-a}) + @ifinfo + + @end ifinfo + This command simply un-cites, then cites the lines in the region, asking + for confirmation of the new attribution string.@refill + @end table + @node String Insertion Commands, Information Commands, Commands to Manually Cite Recite and Uncite, Post-yank Formatting Commands + @comment node-name, next, previous, up + @section String Insertion Commands + These two functions insert strings into the reply buffer. + + @table @asis + @findex sc-insert-reference + @findex insert-reference (sc-) + @kindex C-c C-r + @item @code{sc-insert-reference} (@kbd{C-c C-r}) + @ifinfo + + @end ifinfo + Inserts a reference header into the reply buffer at point. With no + arguments, the header indexed by @code{sc-preferred-header-style} is + inserted. An optional numeric argument is the index into + @code{sc-rewrite-header-list} indicating which reference header to + write. Of course, if @code{sc-electric-references-p} is set, you are + dropped into electric reference mode instead.@refill + + With just the universal argument (@kbd{C-u}), electric reference mode is + entered, regardless of the value of @code{sc-electric-references-p}. + @findex sc-insert-citation + @findex insert-citation (sc-) + @kindex C-c C-i + @item @code{sc-insert-citation} (@kbd{C-c C-i}) + @ifinfo + + @end ifinfo + Inserts the current citation string at the beginning of the line that + point is on. + @end table + @node Information Commands, Miscellaneous Commands, String Insertion Commands, Post-yank Formatting Commands + @comment node-name, next, previous, up + @section Information Commands + These commands allow you to modify and view various bits of information. + + @kindex C-u + @table @asis + @findex sc-modify-information + @findex modify-information (sc-) + @kindex C-c C-m + @item @code{sc-modify-information} (@kbd{C-c C-m}) + @ifinfo + + @end ifinfo + Allows you to interactively modify information key value pairs + (@xref{Mail Fields and Information Keys}). With the universal argument + (@kbd{C-u}), it deletes a key (and its associated value) instead. This + command will ask for completion on the information key to modify. You + can add a new key-value pair by supplying a new key string at the prompt + instead of completing.@refill + + @findex sc-view-field + @findex view-field (sc-) + @kindex C-c f + @item @code{sc-view-field} (@kbd{C-c f}) + @ifinfo + + @end ifinfo + Allows you to simply view information key values. This is essentially an + interactive version of @code{sc-field}. It will prompt you for the + information key to view. With the universal argument (@kbd{C-u}), + this command will also insert the key value into the current buffer at + point.@refill + + @findex sc-glom-headers + @findex glom-headers (sc-) + @kindex C-c g + @item @code{sc-glom-headers} (@kbd{C-c g}) + @ifinfo + + @end ifinfo + Lets you re-initialize supercite's information key-value pairs from a + set of mail headers in the region between point and mark. This function + is especially useful for replying to digest messages where supercite + will initially set up its information for the digest originator, but you + want to cite each component article with the real message author. Note + that unless an error during processing occurs, any old information is + lost.@refill + + @findex sc-version + @findex version (sc-) + @kindex C-c C-v + @item @code{sc-version} (@kbd{C-c C-v}) + @ifinfo + + @end ifinfo + Shows the version of supercite you are using. With the optional universal + argument, this command inserts the version information into the current + buffer (good for identifying bug + reports! -- @pxref{The Supercite Mailing List}).@refill + @end table + @node Miscellaneous Commands, , Information Commands, Post-yank Formatting Commands + @comment node-name, next, previous, up + @section Miscellaneous Commands + @table @asis + @findex sc-open-line + @findex open-line (sc-) + @kindex C-c C-o + @item @code{sc-open-line} (@kbd{C-c C-o}) + @ifinfo + + @end ifinfo + Similar to emacs' standard @code{open-line} commands, but inserts the + citation string in front of the new line. As with @code{open-line}, + an optional numeric argument inserts that many new lines.@refill + + @vindex sc-fill-arg + @vindex fill-arg (sc-) + @findex sc-fill-paragraph-manually + @findex fill-paragraph-manually (sc-) + @kindex C-c C-q + @kindex C-c q + @item @code{sc-fill-paragraph-manually} (@kbd{C-c q} and @kbd{C-c C-q}) + @ifinfo + + @end ifinfo + Manually fills the current paragraph. Actually this is an interactive + version running the hook @code{sc-fill-paragraph-hook}, however it does + bind the global variable @code{sc-fill-arg} to the value of the optional + argument. What this implies of course, is that you can use any paragraph + filling package you want to actually do the filling of the cited + paragraph. If that package takes an argument, you can write a simple + wrapper function to pass @code{sc-fill-arg} as that argument.@refill + + @findex sc-describe + @findex describe (sc-) + @kindex C-c ? + @item @code{sc-describe} (@kbd{C-c ?}) + @ifinfo + + @end ifinfo + This function has been obsoleted by the texinfo manual you are now + reading. It is still provided for compatibility, but it will eventually + go away. + + @end table + + @node Keymaps, Hints to Reader Authors, Post-yank Formatting Commands, Top + @comment node-name, next, previous, up + @chapter Keymaps + @ifinfo + + @end ifinfo + @cindex per-interface keymap + @vindex current-local-map + Since every reader can conceivably use a different buffer and/or + major-mode to reply in, supercite can't know ahead of time what the + state of the buffer is. So supercite needs to leach onto whatever buffer + the reply is being made in, modifying the keymap and the documentation + string for that buffer. A mechanism was developed to provide a + @dfn{per-interface} keymap, which installs itself into the reply + buffer's @code{current-local-map} based on the major-mode of the + buffer.@refill + + @vindex sc-local-keymaps + @vindex local-keymaps (sc-) + The variable @code{sc-local-keymaps} contains an association list of the + form: + + @example + ((MAJOR-MODE [FUNCTION | MAJOR-MODE])+) + @end example + + When it is time to modify the keymap of the current buffer, supercite + looks up that buffer's major-mode in this association list. If it + matches an entry, supercite looks at the value associated with the key. + If the value is a list, it is assumed that this list is a function which + will set the current local keymap as intended. If however, the value is + another major-mode symbol name, then this returned major mode is looked + up in @code{sc-local-keymaps}, and the resulting keymap-setting function + is evaluated. Only one level of indirection is allowed, but this does + let you save space when defining key bindings. If you have many modes + which have the same bindings, you only need define the keymap setting + function once, and then let all other modes refer to this mode's keymap. + + Here is the default value for @code{sc-local-keymaps}: + + @example + '((mail-mode + (lambda () + (local-set-key "\C-c\C-r" 'sc-insert-reference) + (local-set-key "\C-c\C-t" 'sc-cite) + (local-set-key "\C-c\C-a" 'sc-recite) + (local-set-key "\C-c\C-u" 'sc-uncite) + (local-set-key "\C-c\C-i" 'sc-insert-citation) + (local-set-key "\C-c\C-o" 'sc-open-line) + (local-set-key "\C-c\C-q" 'sc-fill-paragraph-manually) + (local-set-key "\C-cq" 'sc-fill-paragraph-manually) + (local-set-key "\C-c\C-m" 'sc-modify-information) + (local-set-key "\C-cf" 'sc-view-field) + (local-set-key "\C-cg" 'sc-glom-headers) + (local-set-key "\C-c\C-v" 'sc-version) + (local-set-key "\C-c?" 'sc-describe) + )) + (mh-letter-mode + (lambda () + (local-set-key "\C-c\C-r" 'sc-insert-reference) + (local-set-key "\C-c\C-t" 'sc-cite) + (local-set-key "\C-c\C-a" 'sc-recite) + (local-set-key "\C-c\C-u" 'sc-uncite) + (local-set-key "\C-ci" 'sc-insert-citation) + (local-set-key "\C-c\C-o" 'sc-open-line) + (local-set-key "\C-cq" 'sc-fill-paragraph-manually) + (local-set-key "\C-c\C-m" 'sc-modify-information) + (local-set-key "\C-cf" 'sc-view-field) + (local-set-key "\C-cg" 'sc-glom-headers) + (local-set-key "\C-c\C-v" 'sc-version) + (local-set-key "\C-c?" 'sc-describe) + )) + (news-reply-mode mail-mode) + (vm-mail-mode mail-mode) + (e-reply-mode mail-mode) + (n-reply-mode mail-mode) + ) + @end example + + @vindex sc-default-keymap + @vindex default-keymap (sc-) + If the major-mode of the buffer is not found in the association list, + then the function in @code{sc-default-keymap} is evaluated. The default + value for @code{sc-default-keymap} is: + + @example + '(lambda () + (local-set-key "\C-c\C-r" 'sc-insert-reference) + (local-set-key "\C-c\C-t" 'sc-cite) + (local-set-key "\C-c\C-a" 'sc-recite) + (local-set-key "\C-c\C-u" 'sc-uncite) + (local-set-key "\C-c\C-i" 'sc-insert-citation) + (local-set-key "\C-c\C-o" 'sc-open-line) + (local-set-key "\C-c\C-q" 'sc-fill-paragraph-manually) + (local-set-key "\C-cq" 'sc-fill-paragraph-manually) + (local-set-key "\C-c\C-m" 'sc-modify-information) + (local-set-key "\C-cf" 'sc-view-field) + (local-set-key "\C-cg" 'sc-glom-headers) + (local-set-key "\C-c\C-v" 'sc-version) + (local-set-key "\C-c?" 'sc-describe) + ) + @end example + + @vindex sc-electric-mode-map + @vindex electric-mode-map (sc-) + The keymap for electric reference mode can also be user defined, but + since there is no need for a per-interface map, there is only a single + variable, @code{sc-electric-mode-map} which contains the keymap. If you + set this variable, you can override the default key bindings for + electric reference mode. @xref{Electric References} for a description + of the default key bindings for this mode. + @node Hints to Reader Authors, Thanks and History, Keymaps, Top + @comment node-name, next, previous, up + @chapter Hints to Reader Authors + In June of 1989, some discussion was held between the various reader + authors, the supercite author, and other supercite users. These + discussions centered around the need for a standard interface between + these readers and supercite (or any future readers, or supercite-like + packages). This interface was formally proposed by Martin Neitzel on + Fri, 23 Jun 89, in a mail message to the supercite mailing list: + + @example + Martin> Each news/mail-reader should provide a form of + Martin> mail-yank-original that + + Martin> 1: inserts the original message incl. header into the + Martin> reply buffer; no indentation/prefixing is done, the header + Martin> tends to be a "full blown" version rather than to be + Martin> stripped down. + + Martin> 2: `point' is at the start of the header, `mark' at the + Martin> end of the message body. + + Martin> 3: (run-hooks 'mail-yank-hooks) + + Martin> [Supercite] should be run as such a hook and merely + Martin> rewrite the message. This way it isn't anymore + Martin> [supercite]'s job to gather the original from obscure + Martin> sources. [...] + @end example + + This proposal was adopted, and thus supercite 2.3 conforms to this + interface, as does VM (versions 4.37 and beyond, including versions + 5.xx), as well as MH-E 3.7 which is distributed with emacs 18.57. + + If you are writing a new reader package, or updating an existing reader + package, you should make it conform to this interface so that your users + will be able to link supercite easily and seamlessly. To do this, when + setting up a reply or forward buffer, your reader should follow these + steps (outlined above and discussed in greater detail below): + + @enumerate + @item + Insert the original message, including the mail headers into the reply + buffer. At this point you should not modify the raw text in any way, and + you should place all the original headers into the body of the reply. + This means that many of the mail headers will be duplicated, one copy + above the @code{mail-header-separator} line and one copy below, + however there will probably be more headers below this line.@refill + + @item + Set ``point'' to the beginning of the line containing the first mail + header in the body of the reply. Set ``mark'' to the end of the message + text. It is very important that the region be set around the text + supercite is to modify and that the mail headers are within this region. + Supercite will not look at or modify anything outside the region, and + anything within the region is fair game, so don't put anything that + @strong{must} remain unchanged inside the region.@refill + + @item + Run the hook @code{mail-yank-hooks}. You will probably want to provide + some kind of default citation functions in cases where the user does not + have supercite installed. By default, your reader should set + @code{mail-yank-hooks} to execute this default citation function. Users + who want to use supercite can then set @code{mail-yank-hooks} to + @code{sc-cite-original}.@refill + @end enumerate + + If you do all this you will not need to provide overloading routines and + your reader will join the ranks of those subsystems who conform to this + interface ``out of the box.'' + @node Thanks and History, The Supercite Mailing List, Hints to Reader Authors, Top + @comment node-name, next, previous, up + @chapter Thanks and History + The supercite package was derived from its predecessor superyank 1.11 + which was inspired by various bits of code and ideas from Martin Neitzel + and Ashwin Ram. They were the folks who came up with the idea of + non-nested citations and implemented some rough code to provide this + style. Superyank and now supercite 2.3, have evolved to the point where + much of the attribution selection mechanism is automatic, and features + have been continuously added through the comments and suggestions of the + supercite mailing list participants. + + Many of these folks have contributed their help in debugging, making + suggestions for enhancements, and supplying support code or bug fixes + for the previous versions of supercite. I would like to thank (in + alphabetical order): + + @itemize @bullet + @item + Mark D. Baushke + @item + Chris Davis + @item + Dan Jacobson + @item + Kyle Jones + @item + David Lawrence + @item + Piet van Oostrum + @item + Khalid Sattar + @item + Kayvan Sylvan + @item + Masanobu Umeda + @item + Joe Wells + @end itemize + + I apologize if I've left anybody out. All who have helped have been + greatly appreciated. + + Also, thanks to David Eckelkamp, John Stoffel, and Walter Rowe for proof + reading the initial drafts of this manual. + @node The Supercite Mailing List, Concept Index, Thanks and History, Top + @comment node-name, next, previous, up + @chapter The Supercite Mailing List + @cindex supercite mailing list address + @cindex mailing list address + The author runs a simple mail expanding mailing list for discussion of + issues related to supercite. This includes enhancement requests, bug + reports, general help questions, etc. To subscribe or unsubscribe to + the mailing list, send a request to the administrative address: + + @example + Internet: supercite-request@@anthem.nlm.nih.gov + UUCP: uunet!anthem.nlm.nih.gov!supercite-request + @end example + + Please be sure to include the most reliable and shortest (preferably + internet) address back to you. To post articles to the list, send your + message to this address (you do not need to be a member to post, but be + sure to indicate this in your article or replies may not be CC'd to + you): + + @example + Internet: supercite@@anthem.nlm.nih.gov + UUCP: uunet!anthem.nlm.nih.gov!supercite + @end example + + If you are sending bug reports, please indicate the version of supercite + and emacs that you are using, and the name and version number of the + reader package you're trying to interface with. Without this + information, it will be difficult to get useful advice. + + @node Concept Index, Command Index, The Supercite Mailing List, Top + @comment node-name, next, previous, up + @unnumbered Concept Index + @printindex cp + + @node Command Index, Key Index, Concept Index, Top + @comment node-name, next, previous, up + @unnumbered Command Index + Since all supercite commands are prepended with the string + ``@code{sc-}'', each appears under its @code{sc-}@var{command} name and + its @var{command} name. + @iftex + @sp 2 + @end iftex + @printindex fn + @node Key Index, Variable Index, Command Index, Top + @comment node-name, next, previous, up + @unnumbered Key Index + @printindex ky + @node Variable Index, , Key Index, Top + @comment node-name, next, previous, up + @unnumbered Variable Index + Since all supercite variables are prepended with the string + ``@code{sc-}'', each appears under its @code{sc-}@var{variable} name and + its @var{variable} name. + @iftex + @sp 2 + @end iftex + @printindex vr + @summarycontents + @contents + @bye diff -rc2P --exclude-from=exceptions emacs-19.10/src/ChangeLog emacs-19.11/src/ChangeLog *** emacs-19.10/src/ChangeLog Sun May 30 01:50:21 1993 --- emacs-19.11/src/ChangeLog Tue Jun 1 04:28:52 1993 *************** *** 1,2 **** --- 1,192 ---- + Tue Jun 1 00:27:03 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Version 19.11 released. + + Tue Jun 1 00:07:11 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * xfns.c (x_set_menu_bar_lines): Use FRAME_NEW_HEIGHT and ..._WIDTH. + + * m/sparc.h [__GNUC__ >= 2]: Don't include alloca.h. + + * xterm.c (x_new_font): If XListFontsWithInfo finds nothing, + try to load the font anyway. + + * ymakefile (emacs): Don't run inc-vers if ../lisp is read-only. + (C_SWITCH_SITE_1): New make variable. + (really-oldXMenu): Pass C_SWITCH_X_SITE_1 as C_SWITCH_X_SITE. + Use C_SWITCH_SITE_1 to pass C_SWITCH_SITE. + + * s/386bsd.h: New file. + + Mon May 31 14:04:22 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * fns.c (internal_equal): Don't let ints be equal to floats. + + * print.c (float_to_string): Skip `-' like digits when ensuring + result looks like a float. + + * data.c (Frem): Fix result sign properly. + + * xrdb.c [__bsdi__]: ALternate decls of getpwuid and getpwnam. + + * emacs.c (main) [BSD]: Delete the setpgrp (both times). + + * m/ibmrs6000.h (NLIST_STRUCT): Defined. + + * ymakefile (GETLOADAVG_OBJ): New macro. + (obj): Use that. + + * s/bsd386.h: New file. + + * term.c (term_get_fkeys): If not initialized, init Vfunction_key_map. + + * m/ibmrs6000.h: Delete ! __GNUC__ conditional. + (LD_SWITCH_MACHINE): Defined. + (ORDINARY_LINK): Defined unconditionally. + + * dispnew.c (update_frame): Make preempt_count positive. + Defend against negative baud_rate. + * scroll.c (calculate_scrolling): Defend against negative baud_rate. + + * mem-limits.h [__bsdi__]: Define BSD4_2. + + * xfns.c (x_window): In XSetClassHint, use a shortened version + of the frame name. + + * s/hpux8.h (C_SWITCH_SYSTEM): Fix typo in X11R5 dirname. + + * xterm.c (XTread_socket, case KeyPress) [HPUX]: Test IsModifiedKey. + + * keyboard.c (kbd_buffer_get_event): + Shorten the first MULTI_FRAME conditional. + + * s/usg5-4-2.h (HAVE_VFORK): Deleted. + + Mon May 31 10:07:48 1993 James Clark (jjc@jclark.com) + + * xselect.c (x_reply_selection_request): Call XFlushQueue. + + * window.c (Fset_window_buffer): Set window's force_start to Qnil. + + Mon May 31 01:33:06 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * syntax.c (Fforward_comment): Set point to where scan stops, + thus moving acros whitespace. When moving fwd, treat Sendcomment + as whitespace; likewise for Scomment when moving back. + (scan_sexps_forward): New arg COMMENTSTOP. + (Fparse_partial_sexp): Likewise. + + * xfns.c (Fx_create_frame): Use bitmapIcon, not iconType. + + Sun May 30 20:04:19 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * data.c (float_arith_driver): Detect division by zero in advance. + (arith_driver, Frem): Likewise. + + * xfns.c (Fx_list_fonts): Handle 0 for FRAME_FACES (f) [face_id]->font. + + * print.c (Fwith_output_to_temp_buffer): Doc fix. + + * sysdep.c (wait_for_termination): Delete LINUX conditionals. + + * s/linux.h (HAVE_TCATTR): Deleted. + (BSD): Don't define. + (read, write, open, close): Defined. + (INTERRUPTIBLE_OPEN, INTERRUPTIBLE_CLOSE, INTERRUPTIBLE_IO): Defined. + (C_SWITCH_SYSTEM): Defined. + + * xterm.c: Include systty.h; don't mess with FIONREAD. + Don't include termio.h dorectly. + + * intervals.c (interval_deletion_adjustment): Delete unreachable abort. + + * fns.c (Fyes_or_no_p): Delete unreachable UNGCPRO. + + * keyboard.c (lispy_function_keys): Add `remove' key. + + Sun May 30 19:24:09 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * buffer.c (Fgenerate_new_buffer_name): Doc fix. + + Sun May 30 19:10:09 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile.in (clean): Delete libXMenu11.a. + + Sun May 30 17:48:11 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * m/mips.h (KERNEL_FILE): Set this to "/unix". + * m/mips4.h (MIPS2): Go ahead and define this. + (C_DEBUG_SWITCH): Add -DMips and -g3, and up Olimit to 2000. + + Sun May 30 16:51:56 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * emacs.c (main) [AIX _I386]: Don't handle SIGIOINT. + + * lisp.h (UCHAR): Don't define if _UCHAR_T. + + * m/ibmps2-aix.h (HAVE_GETTIMEOFDAY): Deleted. + (HAVE_SETSID, HAVE_TERMIOS): Defined. + (HAVE_TERMIO): Add #undef. + (SIGNALS_VIA_CHARACTERS): Defined. + (C_DEBUG_SWITCH): Make definition empty. + (LIBS_DEBUG): Defined. + (BROKEN_TIOCGWINSZ, LIB_X11_LIB): Add #undef. + + * sysdep.c (child_setup_tty) [AIX SIGNALS_VIA_CHARACTERS]: Install + something usefull in the VQUIT and VINTR. + (emacs_set_tty): Try only 10 times to call tcsetattr. + Don't use memcmp to test what it did. + + * systty.h [HAVE_TERMIOS _AIX _I386]: Include termios before termio. + + * dispnew.c (buffer_posn_from_coords): Since COL is already + window-relative, don't subtract window_left. + + Sun May 30 15:49:17 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * xfaces.c (unload_color): Don't #include , + , or . Just write out + "unsigned long" instead of using the "Pixel" typedef; it's in the + protocol, so it's not likely to change. + + * hftctl.c (hft_alrm): Declare and define this to return void, not + int; the AIX #include files have prototypes for it. + + * s/aix3-2.h (LIBS_SYSTEM): Remove -lIM and -liconv from here... + * m/ibmrs6000.h (LIBS_MACHINE): They're already here. Doc fix. + + * Makefile.in (SUBMAKEFLAGS): Remember to propagate MAKE. + + Sun May 30 14:18:26 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * s/sunos4-1-3.h: Delete the #undef of SYSTEM_MALLOC. + + * systty.h [IRIX4]: Include unistd.h. + + * s/irix4-0.h (IRIX4): Defined. + (IRIS_UTIME): #undef this. + + * xfns.c (Fx_open_connection) [NO_XRM_SET_DATABASE]: + Don't call XrmsSetDatabase. + + * xfaces.c: Fix HPUX conditional syntax. + + * s/hpux8.h (random, srandom): Defined. + + * s/usg5-4-2.h: Don't specify s/ dir in #include. + * s/usg5-4-2.h (PTY_TTY_NAME_SPRINTF): Defined. + (HAVE_SYSV_SIGPAUSE): #undef this. + + * sysdep.c (wait_for_termination): Add POSIX_SIGNALS alternative. + + Sun May 30 13:01:54 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu) + + * xfaces.c (init_frame_faces): We have to make sure that face ID's + are valid on all frames or no frames; make sure F has allocated + faces for any face valid on the selected frame. + + * s/hpux9.h: New file; don't use the GNU allocator. Hope we fix + this soon. + Sun May 30 00:15:27 1993 Richard Stallman (rms@mole.gnu.ai.mit.edu) diff -rc2P --exclude-from=exceptions emacs-19.10/src/Makefile.in emacs-19.11/src/Makefile.in *** emacs-19.10/src/Makefile.in Sat May 22 19:17:54 1993 --- emacs-19.11/src/Makefile.in Sun May 30 19:10:08 1993 *************** *** 22,26 **** SHELL = /bin/sh ! SUBMAKEFLAGS = CC='${CC}' LN_S='${LN_S}' CFLAGS='${CFLAGS}' all: doall --- 22,26 ---- SHELL = /bin/sh ! SUBMAKEFLAGS = CC='${CC}' LN_S='${LN_S}' CFLAGS='${CFLAGS}' MAKE='${MAKE}' all: doall *************** *** 35,39 **** clean: ! -rm -f temacs emacs prefix-args xmakefile* core \#* *.o versionclean: --- 35,39 ---- clean: ! -rm -f temacs emacs prefix-args xmakefile* core \#* *.o libXMenu11.a versionclean: diff -rc2P --exclude-from=exceptions emacs-19.10/src/buffer.c emacs-19.11/src/buffer.c *** emacs-19.10/src/buffer.c Sat May 29 18:13:39 1993 --- emacs-19.11/src/buffer.c Sun May 30 19:23:57 1993 *************** *** 337,341 **** 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.") --- 337,341 ---- 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.") diff -rc2P --exclude-from=exceptions emacs-19.10/src/data.c emacs-19.11/src/data.c *** emacs-19.10/src/data.c Sat May 22 14:48:32 1993 --- emacs-19.11/src/data.c Tue Jun 1 01:46:03 1993 *************** *** 1551,1556 **** Lisp_Object ! arith_driver ! (code, nargs, args) enum arithop code; int nargs; --- 1551,1555 ---- Lisp_Object ! arith_driver (code, nargs, args) enum arithop code; int nargs; *************** *** 1608,1612 **** case Adiv: if (!argnum) accum = next; ! else accum /= next; break; case Alogand: accum &= next; break; --- 1607,1616 ---- case Adiv: if (!argnum) accum = next; ! else ! { ! if (next == 0) ! Fsignal (Qarith_error, Qnil); ! accum /= next; ! } break; case Alogand: accum &= next; break; *************** *** 1669,1673 **** accum = next; else ! accum /= next; break; case Alogand: --- 1673,1681 ---- accum = next; else ! { ! if (next == 0) ! Fsignal (Qarith_error, Qnil); ! accum /= next; ! } break; case Alogand: *************** *** 1747,1750 **** --- 1755,1761 ---- f1 = XTYPE (num1) == Lisp_Float ? XFLOAT (num1)->data : XINT (num1); f2 = XTYPE (num2) == Lisp_Float ? XFLOAT (num2)->data : XINT (num2); + if (f2 == 0) + Fsignal (Qarith_error, Qnil); + #if defined (USG) || defined (sun) || defined (ultrix) || defined (hpux) f1 = fmod (f1, f2); *************** *** 1752,1756 **** f1 = drem (f1, f2); #endif ! if (f1 < 0) f1 += f2; return (make_float (f1)); --- 1763,1768 ---- f1 = drem (f1, f2); #endif ! /* If the "remainder" comes out with the wrong sign, fix it. */ ! if ((f1 < 0) != (f2 < 0)) f1 += f2; return (make_float (f1)); *************** *** 1760,1763 **** --- 1772,1778 ---- CHECK_NUMBER_COERCE_MARKER (num2, 1); #endif /* not LISP_FLOAT_TYPE */ + + if (XFASTINT (num2) == 0) + Fsignal (Qarith_error, Qnil); XSET (val, Lisp_Int, XINT (num1) % XINT (num2)); diff -rc2P --exclude-from=exceptions emacs-19.10/src/dispnew.c emacs-19.11/src/dispnew.c *** emacs-19.10/src/dispnew.c Thu May 27 21:52:41 1993 --- emacs-19.11/src/dispnew.c Mon May 31 14:48:06 1993 *************** *** 956,959 **** --- 956,962 ---- #endif + if (preempt_count <= 0) + preempt_count = 1; + if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */ *************** *** 1026,1030 **** #endif outq *= 10; ! sleep (outq / baud_rate); } } --- 1029,1034 ---- #endif outq *= 10; ! if (baud_rate > 0) ! sleep (outq / baud_rate); } } *************** *** 1232,1236 **** (window == XWINDOW (minibuf_window) && startp == 1 ? minibuf_prompt_width : 0), ! ZV, line, col - window_left, window_width, XINT (window->hscroll), 0); --- 1236,1240 ---- (window == XWINDOW (minibuf_window) && startp == 1 ? minibuf_prompt_width : 0), ! ZV, line, col, window_width, XINT (window->hscroll), 0); diff -rc2P --exclude-from=exceptions emacs-19.10/src/emacs.c emacs-19.11/src/emacs.c *** emacs-19.10/src/emacs.c Sat May 29 16:57:08 1993 --- emacs-19.11/src/emacs.c Mon May 31 20:05:59 1993 *************** *** 293,299 **** clearerr (stdin); #ifdef BSD ! setpgrp (0, getpid ()); #endif #ifdef APOLLO --- 293,307 ---- clearerr (stdin); + #if 0 /* Without EMACS_SET_TTY_PGRP, this causes Emacs to hang + when run under a non-job-control shell. + EMACS_SET_TTY_PGRP seems correct, but breaks even more. */ #ifdef BSD ! { ! int pid = getpid (); ! setpgrp (0, pid); ! EMACS_SET_TTY_PGRP (0, &pid); ! } #endif + #endif #ifdef APOLLO *************** *** 324,332 **** #endif /* PRIO_PROCESS */ - #ifdef BSD - /* interrupt_input has trouble if we aren't in a separate process group. */ - setpgrp (getpid (), getpid ()); - #endif - inhibit_window_system = 0; --- 332,335 ---- *************** *** 430,434 **** --- 433,439 ---- signal (SIGPTY, fatal_error_signal); #endif + #ifndef _I386 signal (SIGIOINT, fatal_error_signal); + #endif signal (SIGGRANT, fatal_error_signal); signal (SIGRETRACT, fatal_error_signal); diff -rc2P --exclude-from=exceptions emacs-19.10/src/fns.c emacs-19.11/src/fns.c *** emacs-19.10/src/fns.c Sat May 22 14:54:56 1993 --- emacs-19.11/src/fns.c Mon May 31 23:38:15 1993 *************** *** 821,825 **** Conses are compared by comparing the cars and the cdrs.\n\ Vectors and strings are compared element by element.\n\ ! Numbers are compared by value. Symbols must match exactly.") (o1, o2) register Lisp_Object o1, o2; --- 821,827 ---- Conses are compared by comparing the cars and the cdrs.\n\ Vectors and strings are compared element by element.\n\ ! Numbers are compared by value, but integers cannot equal floats.\n\ ! (Use `=' if you want integers and floats to be able to be equal.)\n\ ! Symbols must match exactly.") (o1, o2) register Lisp_Object o1, o2; *************** *** 839,846 **** if (EQ (o1, o2)) return Qt; #ifdef LISP_FLOAT_TYPE ! if (NUMBERP (o1) && NUMBERP (o2)) ! { ! return (extract_float (o1) == extract_float (o2)) ? Qt : Qnil; ! } #endif if (XTYPE (o1) != XTYPE (o2)) return Qnil; --- 841,846 ---- if (EQ (o1, o2)) return Qt; #ifdef LISP_FLOAT_TYPE ! if (FLOATP (o1) && FLOATP (o2)) ! return (extract_float (o1) == extract_float (o2)) ? Qt : Qnil; #endif if (XTYPE (o1) != XTYPE (o2)) return Qnil; *************** *** 1221,1225 **** Fsleep_for (make_number (2), Qnil); } - UNGCPRO; } --- 1221,1224 ---- diff -rc2P --exclude-from=exceptions emacs-19.10/src/gmalloc.c emacs-19.11/src/gmalloc.c *** emacs-19.10/src/gmalloc.c Sun May 30 02:16:03 1993 --- emacs-19.11/src/gmalloc.c Tue Jun 1 04:34:38 1993 *************** *** 48,56 **** #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 --- 48,55 ---- #undef __ptr_t #define __ptr_t void * ! #define CONST const #else /* Not C++ or ANSI C. */ #undef __P #define __P(args) () #define CONST #undef __ptr_t *************** *** 428,433 **** #ifdef emacs - /* Library fns that call malloc need this - on some systems, such as rpc on Ultrix on Decstation. */ if (size == 0) size = 1; --- 427,430 ---- *************** *** 1153,1160 **** #define _MALLOC_INTERNAL #include - #endif - - #if defined (emacs) || defined (HAVE_CONFIG_H) - #include "config.h" #endif --- 1150,1153 ---- diff -rc2P --exclude-from=exceptions emacs-19.10/src/hftctl.c emacs-19.11/src/hftctl.c *** emacs-19.10/src/hftctl.c Wed Mar 31 04:11:18 1993 --- emacs-19.11/src/hftctl.c Sun May 30 16:15:02 1993 *************** *** 111,115 **** static GT_ACK (int fd, int req, char *buf); static WR_REQ (int fd, int request, int cmdlen, char *cmd, int resplen); ! static hft_alrm(int sig); #else static GT_ACK (); --- 111,115 ---- static GT_ACK (int fd, int req, char *buf); static WR_REQ (int fd, int request, int cmdlen, char *cmd, int resplen); ! static void hft_alrm(int sig); #else static GT_ACK (); *************** *** 276,282 **** /*************** HFT_ALRM FUNCTION ******************************/ ! static int ! hft_alrm (sig) /* Function hft_alrm - handle */ ! int sig; /* alarm signal */ { signal (SIGALRM, sav_alrm); /* reset to previous */ --- 276,282 ---- /*************** HFT_ALRM FUNCTION ******************************/ ! static void ! hft_alrm (sig) /* Function hft_alrm - handle */ ! int sig; /* alarm signal */ { signal (SIGALRM, sav_alrm); /* reset to previous */ diff -rc2P --exclude-from=exceptions emacs-19.10/src/intervals.c emacs-19.11/src/intervals.c *** emacs-19.10/src/intervals.c Fri May 14 10:33:03 1993 --- emacs-19.11/src/intervals.c Sun May 30 20:08:08 1993 *************** *** 836,840 **** /* Never reach here */ - abort (); } --- 836,839 ---- diff -rc2P --exclude-from=exceptions emacs-19.10/src/keyboard.c emacs-19.11/src/keyboard.c *** emacs-19.10/src/keyboard.c Sun May 30 02:06:12 1993 --- emacs-19.11/src/keyboard.c Mon May 31 14:13:12 1993 *************** *** 1875,1879 **** } - #ifdef MULTI_FRAME /* If this event is on a different frame, return a switch-frame this time, and leave the event in the queue for next time. */ --- 1875,1878 ---- *************** *** 1880,1883 **** --- 1879,1883 ---- else { + #ifdef MULTI_FRAME Lisp_Object frame = event->frame_or_window; Lisp_Object focus; *************** *** 1894,1897 **** --- 1894,1898 ---- obj = make_lispy_switch_frame (frame); internal_last_event_frame = frame; + #endif /* MULTI_FRAME */ /* If we didn't decide to make a switch-frame event, go ahead *************** *** 1910,1914 **** } } - #endif } else if (do_mouse_tracking && mouse_moved) --- 1911,1914 ---- *************** *** 2025,2029 **** /* X Keysym value */ ! 0, 0, 0, 0, 0, 0, 0, 0, /* 0xff00 */ "backspace", "tab", --- 2025,2029 ---- /* X Keysym value */ ! "remove", 0, 0, 0, 0, 0, 0, 0, /* 0xff00 */ "backspace", "tab", diff -rc2P --exclude-from=exceptions emacs-19.10/src/lisp.h emacs-19.11/src/lisp.h *** emacs-19.10/src/lisp.h Sun May 23 15:22:58 1993 --- emacs-19.11/src/lisp.h Sun May 30 17:42:19 1993 *************** *** 566,570 **** --- 566,573 ---- /* A character, declared with the following typedef, is a member of some character set associated with the current buffer. */ + #ifndef _UCHAR_T /* Protect against something in ctab.h on AIX. */ + #define _UCHAR_T typedef unsigned char UCHAR; + #endif /* Meanings of slots in a Lisp_Compiled: */ diff -rc2P --exclude-from=exceptions emacs-19.10/src/m/ibmps2-aix.h emacs-19.11/src/m/ibmps2-aix.h *** emacs-19.10/src/m/ibmps2-aix.h Sun May 23 18:00:27 1993 --- emacs-19.11/src/m/ibmps2-aix.h Sun May 30 17:25:49 1993 *************** *** 124,132 **** #define BSTRING - #define HAVE_GETTIMEOFDAY #define HAVE_SELECT #define HAVE_TIMEVAL #define HAVE_VFORK /* * Define SYSV_SYSTEM_DIR to use the V.3 getdents/readir --- 124,138 ---- #define BSTRING #define HAVE_SELECT #define HAVE_TIMEVAL #define HAVE_VFORK + #define HAVE_SETSID + #undef HAVE_TERMIO + #define HAVE_TERMIOS + /* Send signals to subprocesses by "typing" special chars at them. */ + + #define SIGNALS_VIA_CHARACTERS + /* * Define SYSV_SYSTEM_DIR to use the V.3 getdents/readir *************** *** 210,214 **** /* -g fails to work, so it is omitted. */ /* tranle says that -fstrength-reduce does not help. */ ! #define C_DEBUG_SWITCH -O -fwritable-strings #else #define C_ALLOCA --- 216,220 ---- /* -g fails to work, so it is omitted. */ /* tranle says that -fstrength-reduce does not help. */ ! #define C_DEBUG_SWITCH #else #define C_ALLOCA *************** *** 219,222 **** --- 225,229 ---- #define OBJECTS_MACHINE hftctl.o #define LD_SWITCH_MACHINE -T0x00400000 -K -e start + #define LIBS_DEBUG /* no -lg on aix ps/2 */ #ifdef USG5_3 *************** *** 229,234 **** --- 236,243 ---- #undef NOMULTIPLEJOBS #undef BROKEN_TIOCGETC + #undef BROKEN_TIOCGWINSZ #undef LIBX10_SYSTEM #undef LIBX11_SYSTEM + #undef LIB_X11_LIB #endif diff -rc2P --exclude-from=exceptions emacs-19.10/src/m/ibmrs6000.h emacs-19.11/src/m/ibmrs6000.h *** emacs-19.10/src/m/ibmrs6000.h Thu May 27 23:49:05 1993 --- emacs-19.11/src/m/ibmrs6000.h Mon May 31 19:20:05 1993 *************** *** 118,122 **** #define OBJECTS_MACHINE hftctl.o #define C_SWITCH_MACHINE -D_BSD ! /* cdfwz@r2d2.giss.nasa.gov says -lIM -liconv is needed. */ #define LIBS_MACHINE -lrts -lIM -liconv #define START_FILES --- 118,122 ---- #define OBJECTS_MACHINE hftctl.o #define C_SWITCH_MACHINE -D_BSD ! /* IBM's X11R5 use -lIM and -liconv in AIX 3.2.2. */ #define LIBS_MACHINE -lrts -lIM -liconv #define START_FILES *************** *** 131,138 **** #undef NEED_PTEM_H ! #ifdef __GNUC__ ! # define ORDINARY_LINK ! #else ! # undef LINKER ! # define LINKER cc -Wl,-bnso,-bnodelcsect,-bI:/lib/syscalls.exp ! #endif --- 131,138 ---- #undef NEED_PTEM_H ! #define ORDINARY_LINK ! #define LD_SWITCH_MACHINE -Wl,-bnso,-bnodelcsect,-bI:/lib/syscalls.exp ! ! /* AIX supposedly doesn't use this interface, but on thr RS/6000 ! it apparently does. */ ! #define NLIST_STRUCT diff -rc2P --exclude-from=exceptions emacs-19.10/src/m/mips.h emacs-19.11/src/m/mips.h *** emacs-19.10/src/m/mips.h Thu May 27 23:49:10 1993 --- emacs-19.11/src/m/mips.h Sun May 30 17:47:00 1993 *************** *** 86,89 **** --- 86,94 ---- #define LOAD_AVE_CVT(x) (int) (((double) (x)) * 100.0 / 256.0) + /* CDC EP/IX 1.4.3 uses /unix */ + + #undef KERNEL_FILE + #define KERNEL_FILE "/unix" + /* Define CANNOT_DUMP on machines where unexec does not work. Then the function dump-emacs will not be defined diff -rc2P --exclude-from=exceptions emacs-19.10/src/m/mips4.h emacs-19.11/src/m/mips4.h *** emacs-19.10/src/m/mips4.h Fri Jan 31 16:12:21 1992 --- emacs-19.11/src/m/mips4.h Sun May 30 17:52:00 1993 *************** *** 13,17 **** /* Define MIPS2 if you have an R6000 or R4000. */ ! /* #define MIPS2 */ #ifdef __GNUC__ --- 13,17 ---- /* Define MIPS2 if you have an R6000 or R4000. */ ! #define MIPS2 #ifdef __GNUC__ *************** *** 19,25 **** #else #ifdef MIPS2 ! #define C_DEBUG_SWITCH -systype bsd43 -O -Olimit 791 -g3 -mips2 #else ! #define C_DEBUG_SWITCH -systype bsd43 -O -Olimit 791 -g3 #endif #endif --- 19,25 ---- #else #ifdef MIPS2 ! #define C_DEBUG_SWITCH -DMips -systype bsd43 -g3 -O -Olimit 2000 -mips2 #else ! #define C_DEBUG_SWITCH -DMips -systype bsd43 -g3 -O -Olimit 2000 #endif #endif *************** *** 30,34 **** #define START_FILES pre-crt0.o /lib/crt1.o ! #define LIB_STANDARD -lmld -lc /lib/crtn.o --- 30,34 ---- #define START_FILES pre-crt0.o /lib/crt1.o ! #define LIB_STANDARD -lisode -lmld -lc /lib/crtn.o diff -rc2P --exclude-from=exceptions emacs-19.10/src/m/sparc.h emacs-19.11/src/m/sparc.h *** emacs-19.10/src/m/sparc.h Mon Jan 25 15:06:53 1993 --- emacs-19.11/src/m/sparc.h Tue Jun 1 03:33:03 1993 *************** *** 82,86 **** --- 82,88 ---- #define HAVE_ALLOCA + #if __GNUC__ < 2 /* Modern versions of GCC handle alloca directly. */ #include + #endif /* Must use the system's termcap, if we use any termcap. diff -rc2P --exclude-from=exceptions emacs-19.10/src/mem-limits.h emacs-19.11/src/mem-limits.h *** emacs-19.10/src/mem-limits.h Mon May 24 23:02:03 1993 --- emacs-19.11/src/mem-limits.h Mon May 31 17:03:34 1993 *************** *** 6,10 **** 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 1, or (at your option) any later version. --- 6,10 ---- 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. *************** *** 21,24 **** --- 21,28 ---- #include #include + #endif + + #ifdef __bsdi__ + #define BSD4_2 #endif diff -rc2P --exclude-from=exceptions emacs-19.10/src/print.c emacs-19.11/src/print.c *** emacs-19.10/src/print.c Fri May 14 10:33:08 1993 --- emacs-19.11/src/print.c Mon May 31 23:33:06 1993 *************** *** 410,414 **** The value of the last form in BODY is returned.\n\ If BODY does not finish normally, the buffer BUFNAME is not displayed.\n\n\ ! If variable `temp-buffer-show-hook' is non-nil, call it at the end\n\ to get the buffer displayed. It gets one argument, the buffer to display.") (args) --- 410,414 ---- The value of the last form in BODY is returned.\n\ If BODY does not finish normally, the buffer BUFNAME is not displayed.\n\n\ ! If variable `temp-buffer-show-function' is non-nil, call it at the end\n\ to get the buffer displayed. It gets one argument, the buffer to display.") (args) *************** *** 654,658 **** so that the value is readable as a float. */ for (cp = buf; *cp; cp++) ! if (*cp < '0' || *cp > '9') break; --- 654,658 ---- so that the value is readable as a float. */ for (cp = buf; *cp; cp++) ! if ((*cp < '0' || *cp > '9') && *cp != '-') break; diff -rc2P --exclude-from=exceptions emacs-19.10/src/s/386bsd.h emacs-19.11/src/s/386bsd.h *** emacs-19.10/src/s/386bsd.h --- emacs-19.11/src/s/386bsd.h Tue Jun 1 00:07:25 1993 *************** *** 0 **** --- 1,15 ---- + /* s/ file for 386bsd system. */ + + /* Get most of the stuff from bsd4.3 */ + #include "bsd4-3.h" + + /* The folowing should be set to /netbsd if you are running netbsd > 0.8 + Or just link /netbsd -> /386bsd */ + #undef KERNEL_FILE + #define KERNEL_FILE "/386bsd" + + #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base) + + /* Need to use GNU make, as system make has problems */ + #define MAKE_COMMAND gmake + #define LIBS_DEBUG diff -rc2P --exclude-from=exceptions emacs-19.10/src/s/aix3-2.h emacs-19.11/src/s/aix3-2.h *** emacs-19.10/src/s/aix3-2.h Wed May 26 22:06:12 1993 --- emacs-19.11/src/s/aix3-2.h Sun May 30 16:07:37 1993 *************** *** 20,26 **** --karl@cs.umb.edu. */ #undef SYSTEM_MALLOC - - /* - IBM's X11R5 use these libraries in AIX 3.2.2. */ - - #define LIBS_SYSTEM -lIM -liconv --- 20,21 ---- diff -rc2P --exclude-from=exceptions emacs-19.10/src/s/bsd386.h emacs-19.11/src/s/bsd386.h *** emacs-19.10/src/s/bsd386.h --- emacs-19.11/src/s/bsd386.h Mon May 31 17:00:52 1993 *************** *** 0 **** --- 1,17 ---- + /* s/ file for bsd386 system. */ + + #include "bsd4-3.h" + + #define SIGNALS_VIA_CHARACTERS + + #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base) + #define A_TEXT_OFFSET(x) (sizeof (struct exec)) + #define A_TEXT_SEEK(hdr) (N_TXTOFF(hdr) + A_TEXT_OFFSET(hdr)) + + #define HAVE_SETSID + + #define LIBS_DEBUG + #define LIB_X11_LIB -L/usr/X11/lib -lX11 + #define LIBS_SYSTEM -lutil -lkvm -lcompat + + #define HAVE_GETLOADAVG diff -rc2P --exclude-from=exceptions emacs-19.10/src/s/dgux.h emacs-19.11/src/s/dgux.h *** emacs-19.10/src/s/dgux.h Thu May 27 23:48:50 1993 --- emacs-19.11/src/s/dgux.h Sun May 30 16:56:37 1993 *************** *** 262,266 **** #define POSIX_SIGNALS ! /* Not worth converting the old GNU malloc to work with POSIX_SIGNALS. */ #define SYSTEM_MALLOC --- 262,266 ---- #define POSIX_SIGNALS ! /* pmr@rock.concert.net says Emacs fails without this. We don't know why. */ #define SYSTEM_MALLOC diff -rc2P --exclude-from=exceptions emacs-19.10/src/s/hpux8.h emacs-19.11/src/s/hpux8.h *** emacs-19.10/src/s/hpux8.h Sat May 29 02:24:52 1993 --- emacs-19.11/src/s/hpux8.h Mon May 31 14:34:38 1993 *************** *** 13,17 **** #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 /* Don't use shared libraries. unexec doesn't handle them. --- 13,17 ---- #define LIB_X11_LIB -L/usr/lib/X11R5 -L/usr/lib/X11R4 -lX11 ! #define C_SWITCH_SYSTEM -I/usr/include/X11R5 -I/usr/include/X11R4 /* Don't use shared libraries. unexec doesn't handle them. *************** *** 37,38 **** --- 37,46 ---- X11R5 you must comment this out */ /* #define HAVE_RANDOM */ + #define random foo_random + #define srandom foo_srandom + + #if 0 /* This seems to be spurious. */ + /* "X11R5" on hpux8 doesn't have this function, which is supposed to exist + in X11R5. Maybe things will work if we just don't call it. */ + #define NO_XRM_SET_DATABASE + #endif diff -rc2P --exclude-from=exceptions emacs-19.10/src/s/hpux9.h emacs-19.11/src/s/hpux9.h *** emacs-19.10/src/s/hpux9.h --- emacs-19.11/src/s/hpux9.h Sun May 30 13:02:47 1993 *************** *** 0 **** --- 1,10 ---- + /* System description file for hpux version 9. */ + + #include "hpux8.h" + + #define HPUX9 + + /* Try some debugging and see if gnu malloc hurts us */ + #define SYSTEM_MALLOC 1 + #undef GNU_MALLOC + #undef REL_ALLOC diff -rc2P --exclude-from=exceptions emacs-19.10/src/s/irix4-0.h emacs-19.11/src/s/irix4-0.h *** emacs-19.10/src/s/irix4-0.h Wed May 26 03:51:59 1993 --- emacs-19.11/src/s/irix4-0.h Sun May 30 15:11:01 1993 *************** *** 2,5 **** --- 2,6 ---- #define USG5_3 + #define IRIX4 #define HAVE_ALLOCA *************** *** 8,11 **** --- 9,13 ---- #endif + #undef IRIS_UTIME #undef NEED_SIOCTL diff -rc2P --exclude-from=exceptions emacs-19.10/src/s/linux.h emacs-19.11/src/s/linux.h *** emacs-19.10/src/s/linux.h Sat May 29 17:25:08 1993 --- emacs-19.11/src/s/linux.h Sun May 30 20:53:05 1993 *************** *** 29,33 **** /* #define USG5 */ #define USG ! #define BSD #define LINUX --- 29,33 ---- /* #define USG5 */ #define USG ! /* #define BSD */ #define LINUX *************** *** 132,135 **** --- 132,150 ---- (Which you should place, by convention, in sysdep.c). */ + /* On POSIX systems the system calls are interruptible by signals + that the user program has elected to catch. Thus the system call + must be retried in these cases. To handle this without massive + changes in the source code, we remap the standard system call names + to names for our own functions in sysdep.c that do the system call + with retries. */ + + #define read sys_read + #define write sys_write + #define open sys_open + #define close sys_close + + #define INTERRUPTIBLE_OPEN + #define INTERRUPTIBLE_CLOSE + #define INTERRUPTIBLE_IO /* If you mount the proc file system somewhere other than /proc *************** *** 153,156 **** --- 168,174 ---- #include #undef SIGIO + #undef signal + #define signal sys_signal + #include #endif *************** *** 168,172 **** #define HAVE_SYS_SIGLIST #define HAVE_GETWD /* cure conflict with getcwd? */ - #define HAVE_TCATTR /* faith@cs.unc.edu says this is needed. */ #define USE_UTIME /* don't have utimes */ --- 186,189 ---- *************** *** 189,192 **** --- 206,212 ---- #define LD_SWITCH_SYSTEM -L/usr/X386/lib #endif + + /* Work around a bug in glibc with _longjmp. */ + #define C_SWITCH_SYSTEM -D_BSD_SOURCE /* Let's try this out, just in case. */ diff -rc2P --exclude-from=exceptions emacs-19.10/src/s/sunos4-1-3.h emacs-19.11/src/s/sunos4-1-3.h *** emacs-19.10/src/s/sunos4-1-3.h Wed May 26 13:41:48 1993 --- emacs-19.11/src/s/sunos4-1-3.h Sun May 30 15:18:28 1993 *************** *** 1,5 **** --- 1,8 ---- #include "sunos4-1.h" + #if 0 /* jik@gza.com says this didn't work. Too bad. + Can anyone find out why this loses? */ /* The bug that corrupts GNU malloc's memory pool is fixed in SunOS 4.1.3. */ #undef SYSTEM_MALLOC + #endif diff -rc2P --exclude-from=exceptions emacs-19.10/src/s/usg5-4-2.h emacs-19.11/src/s/usg5-4-2.h *** emacs-19.10/src/s/usg5-4-2.h Sat May 29 20:52:14 1993 --- emacs-19.11/src/s/usg5-4-2.h Mon May 31 14:04:20 1993 *************** *** 1,10 **** /* 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 --- 1,10 ---- /* s/ file for System V release 4.2. */ ! #include "usg5-4.h" ! /* pcg@aber.ac.uk says this is useless since fork does copy-on-write ! #define HAVE_VFORK */ ! /* fnf@cygnus.com says these exist. */ #define HAVE_TCATTR #define HAVE_GETHOSTNAME #define HAVE_RANDOM *************** *** 16,17 **** --- 16,44 ---- /* We don't need the definition from usg5-3.h with POSIX_SIGNALS. */ #undef sigsetmask + #undef HAVE_SYSV_SIGPAUSE + + /* This is the same definition as in usg5-4.h, but with sigblock/sigunblock + rather than sighold/sigrelse, which appear to be BSD4.1 specific and won't + work if POSIX_SIGNALS is defined. It may also be appropriate for SVR4.x + (x<2) but I'm not sure. fnf@cygnus.com */ + /* This sets the name of the slave side of the PTY. On SysVr4, + grantpt(3) forks a subprocess, so keep sigchld_handler() from + intercepting that death. If any child but grantpt's should die + within, it should be caught after sigrelse(2). */ + + #undef PTY_TTY_NAME_SPRINTF + #define PTY_TTY_NAME_SPRINTF \ + { \ + char *ptsname(), *ptyname; \ + \ + sigblock(sigmask(SIGCLD)); \ + if (grantpt(fd) == -1) \ + fatal("could not grant slave pty"); \ + sigunblock(sigmask(SIGCLD)); \ + if (unlockpt(fd) == -1) \ + fatal("could not unlock slave pty"); \ + if (!(ptyname = ptsname(fd))) \ + fatal ("could not enable slave pty"); \ + strncpy(pty_name, ptyname, sizeof(pty_name)); \ + pty_name[sizeof(pty_name) - 1] = 0; \ + } diff -rc2P --exclude-from=exceptions emacs-19.10/src/scroll.c emacs-19.11/src/scroll.c *** emacs-19.10/src/scroll.c Sat May 22 15:12:51 1993 --- emacs-19.11/src/scroll.c Mon May 31 15:04:05 1993 *************** *** 109,112 **** --- 109,115 ---- int extra_cost = baud_rate / (10 * 4 * FRAME_HEIGHT (frame)); + if (baud_rate <= 0) + extra_cost = 1; + /* initialize the top left corner of the matrix */ matrix->writecost = 0; diff -rc2P --exclude-from=exceptions emacs-19.10/src/syntax.c emacs-19.11/src/syntax.c *** emacs-19.10/src/syntax.c Tue May 25 16:45:40 1993 --- emacs-19.11/src/syntax.c Mon May 31 20:32:10 1993 *************** *** 566,571 **** DEFUN ("forward-comment", Fforward_comment, Sforward_comment, 1, 1, 0, "Move forward across up to N comments. If N is negative, move backward.\n\ - Set point to the far end of the last comment found.\n\ Stop scanning if we find something other than a comment or whitespace.\n\ If N comments are found as expected, with nothing except whitespace\n\ between them, return t; otherwise return nil.") --- 566,571 ---- DEFUN ("forward-comment", Fforward_comment, Sforward_comment, 1, 1, 0, "Move forward across up to N comments. If N is negative, move backward.\n\ Stop scanning if we find something other than a comment or whitespace.\n\ + Set point to where scanning stops.\n\ If N comments are found as expected, with nothing except whitespace\n\ between them, return t; otherwise return nil.") *************** *** 588,596 **** from = PT; - found = from; while (count1 > 0) { - found = from; stop = ZV; while (from < stop) --- 588,594 ---- *************** *** 620,624 **** { immediate_quit = 0; ! SET_PT (found); return Qnil; } --- 618,622 ---- { immediate_quit = 0; ! SET_PT (from); return Qnil; } *************** *** 642,649 **** break; } ! else if (code != Swhitespace) { immediate_quit = 0; ! SET_PT (found); return Qnil; } --- 640,647 ---- break; } ! else if (code != Swhitespace && code != Sendcomment) { immediate_quit = 0; ! SET_PT (from - 1); return Qnil; } *************** *** 656,661 **** while (count1 < 0) { - found = from; - stop = BEGV; while (from > stop) --- 654,657 ---- *************** *** 697,701 **** { immediate_quit = 0; ! SET_PT (found); return Qnil; } --- 693,697 ---- { immediate_quit = 0; ! SET_PT (from); return Qnil; } *************** *** 818,825 **** } } ! else if (code != Swhitespace || quoted) { immediate_quit = 0; ! SET_PT (found); return Qnil; } --- 814,821 ---- } } ! else if ((code != Swhitespace && code != Scomment) || quoted) { immediate_quit = 0; ! SET_PT (from + 1); return Qnil; } *************** *** 1322,1328 **** assuming that FROM has state OLDSTATE (nil means FROM is start of function), and return a description of the state of the parse at END. ! If STOPBEFORE is nonzero, stop at the start of an atom. */ ! scan_sexps_forward (stateptr, from, end, targetdepth, stopbefore, oldstate) struct lisp_parse_state *stateptr; register int from; --- 1318,1326 ---- assuming that FROM has state OLDSTATE (nil means FROM is start of function), and return a description of the state of the parse at END. ! If STOPBEFORE is nonzero, stop at the start of an atom. ! If COMMENTSTOP is nonzero, stop at the start of a comment. */ ! scan_sexps_forward (stateptr, from, end, targetdepth, ! stopbefore, oldstate, commentstop) struct lisp_parse_state *stateptr; register int from; *************** *** 1329,1332 **** --- 1327,1331 ---- int end, targetdepth, stopbefore; Lisp_Object oldstate; + int commentstop; { struct lisp_parse_state state; *************** *** 1468,1471 **** --- 1467,1472 ---- state.comstart = from; startincomment: + if (commentstop) + goto done; while (1) { *************** *** 1569,1573 **** due to limits in the Unix cpp. ! DEFUN ("parse-partial-sexp", Ffoo, Sfoo, 2, 5, 0, "Parse Lisp syntax starting at FROM until TO; return status of parse at TO.\n\ Parsing stops at TO or when certain criteria are met;\n\ --- 1570,1574 ---- due to limits in the Unix cpp. ! DEFUN ("parse-partial-sexp", Ffoo, Sfoo, 2, 6, 0, "Parse Lisp syntax starting at FROM until TO; return status of parse at TO.\n\ Parsing stops at TO or when certain criteria are met;\n\ *************** *** 1591,1602 **** Fifth arg STATE is a seven-list like what this function returns.\n\ It is used to initialize the state of the parse. Its second and third ! elements are ignored.") ! (from, to, targetdepth, stopbefore, state) */ ! DEFUN ("parse-partial-sexp", Fparse_partial_sexp, Sparse_partial_sexp, 2, 5, 0, 0 /* See immediately above */) ! (from, to, targetdepth, stopbefore, oldstate) ! Lisp_Object from, to, targetdepth, stopbefore, oldstate; { struct lisp_parse_state state; --- 1592,1604 ---- Fifth arg STATE is a seven-list like what this function returns.\n\ It is used to initialize the state of the parse. Its second and third ! elements are ignored. ! Sixth args COMMENTSTOP non-nil means stop at the start of a comment.") ! (from, to, targetdepth, stopbefore, state, commentstop) */ ! DEFUN ("parse-partial-sexp", Fparse_partial_sexp, Sparse_partial_sexp, 2, 6, 0, 0 /* See immediately above */) ! (from, to, targetdepth, stopbefore, oldstate, commentstop) ! Lisp_Object from, to, targetdepth, stopbefore, oldstate, commentstop; { struct lisp_parse_state state; *************** *** 1613,1617 **** validate_region (&from, &to); scan_sexps_forward (&state, XINT (from), XINT (to), ! target, !NILP (stopbefore), oldstate); SET_PT (state.location); --- 1615,1620 ---- validate_region (&from, &to); scan_sexps_forward (&state, XINT (from), XINT (to), ! target, !NILP (stopbefore), oldstate, ! !NILP (commentstop)); SET_PT (state.location); diff -rc2P --exclude-from=exceptions emacs-19.10/src/sysdep.c emacs-19.11/src/sysdep.c *** emacs-19.10/src/sysdep.c Sat May 29 20:50:01 1993 --- emacs-19.11/src/sysdep.c Sun May 30 21:11:52 1993 *************** *** 315,319 **** break; #else /* not VMS */ ! #if (defined (BSD) && !defined (LINUX)) || (defined (HPUX) && !defined (HPUX_5)) /* Note that kill returns -1 even if the process is just a zombie now. But inevitably a SIGCHLD interrupt should be generated --- 315,319 ---- break; #else /* not VMS */ ! #if defined (BSD) || (defined (HPUX) && !defined (HPUX_5)) /* Note that kill returns -1 even if the process is just a zombie now. But inevitably a SIGCHLD interrupt should be generated *************** *** 334,343 **** else sigpause (SIGEMPTYMASK); ! #else /* not BSD, not LINUX, and not HPUX version >= 6 */ ! #if defined (UNIPLUS) || defined (LINUX) if (0 > kill (pid, 0)) break; wait (0); ! #else /* neither BSD nor UNIPLUS nor LINUX: random sysV */ #ifdef HAVE_SYSV_SIGPAUSE sighold (SIGCHLD); --- 334,352 ---- else sigpause (SIGEMPTYMASK); ! #else /* not BSD, and not HPUX version >= 6 */ ! #if defined (UNIPLUS) if (0 > kill (pid, 0)) break; wait (0); ! #else /* neither BSD nor UNIPLUS: random sysV */ ! #ifdef POSIX_SIGNALS /* would this work for LINUX as well? */ ! sigblock (sigmask (SIGCHLD)); ! if (0 > kill (pid, 0)) ! { ! sigunblock (sigmask (SIGCHLD)); ! break; ! } ! sigpause (sigmask (SIGCHLD)); ! #else /* not POSIX_SIGNALS */ #ifdef HAVE_SYSV_SIGPAUSE sighold (SIGCHLD); *************** *** 356,359 **** --- 365,369 ---- sleep (1); #endif /* not HAVE_SYSV_SIGPAUSE */ + #endif /* not POSIX_SIGNALS */ #endif /* not UNIPLUS */ #endif /* not BSD, and not HPUX version >= 6 */ *************** *** 454,459 **** s.main.c_cc[VQUIT] = 0377; s.main.c_cc[VINTR] = 0377; ! s.main.c_cc[VEOL] = 0377; s.main.c_lflag &= ~ISIG; s.main.c_cflag = (s.main.c_cflag & ~CBAUD) | B9600; /* baud rate sanity */ #endif /* AIX */ --- 464,481 ---- s.main.c_cc[VQUIT] = 0377; s.main.c_cc[VINTR] = 0377; ! #ifdef SIGNALS_VIA_CHARACTERS ! /* the QUIT and INTR character are used in process_send_signal ! so set them here to something useful. */ ! if (s.main.c_cc[VQUIT] == 0377) ! s.main.c_cc[VQUIT] = '\\'&037; /* Control-\ */ ! if (s.main.c_cc[VINTR] == 0377) ! s.main.c_cc[VINTR] = 'C'&037; /* Control-C */ ! #else /* no TIOCGPGRP or no TIOCGLTC or no TIOCGETC */ ! /* QUIT and INTR work better as signals, so disable character forms */ ! s.main.c_cc[VQUIT] = 0377; ! s.main.c_cc[VINTR] = 0377; s.main.c_lflag &= ~ISIG; + #endif /* no TIOCGPGRP or no TIOCGLTC or no TIOCGETC */ + s.main.c_cc[VEOL] = 0377; s.main.c_cflag = (s.main.c_cflag & ~CBAUD) | B9600; /* baud rate sanity */ #endif /* AIX */ *************** *** 796,799 **** --- 818,822 ---- /* Set the primary parameters - baud rate, character size, etcetera. */ #ifdef HAVE_TCATTR + int i; /* We have those nifty POSIX tcmumbleattr functions. William J. Smith writes: *************** *** 803,807 **** We must read settings back to ensure tty setup properly. AIX requires this to keep tty from hanging occasionally." */ ! for (;;) if (tcsetattr (fd, waitp ? TCSAFLUSH : TCSADRAIN, &settings->main) < 0) { --- 826,831 ---- We must read settings back to ensure tty setup properly. AIX requires this to keep tty from hanging occasionally." */ ! /* This make sure that we dont loop indefinetly in here. */ ! for (i = 0 ; i < 10 ; i++) if (tcsetattr (fd, waitp ? TCSAFLUSH : TCSADRAIN, &settings->main) < 0) { *************** *** 817,824 **** /* Get the current settings, and see if they're what we asked for. */ tcgetattr (fd, &new); ! if (memcmp (&new, &settings->main, sizeof (new))) ! continue; ! else break; } --- 841,856 ---- /* Get the current settings, and see if they're what we asked for. */ tcgetattr (fd, &new); ! /* We cannot use memcmp on the whole structure here because under ! * aix386 the termios structure has some reserved field that may ! * not be filled in. ! */ ! if ( new.c_iflag == settings->main.c_iflag ! && new.c_oflag == settings->main.c_oflag ! && new.c_cflag == settings->main.c_cflag ! && new.c_lflag == settings->main.c_lflag ! && memcmp(new.c_cc, settings->main.c_cc, NCCS) == 0) break; + else + continue; } diff -rc2P --exclude-from=exceptions emacs-19.10/src/systty.h emacs-19.11/src/systty.h *** emacs-19.10/src/systty.h Sat May 29 16:45:46 1993 --- emacs-19.11/src/systty.h Sun May 30 17:31:22 1993 *************** *** 31,36 **** --- 31,41 ---- #else #ifdef HAVE_TERMIOS + #if defined(_AIX) && defined(_I386) + #include /* termios.h needs to be before termio.h */ #include + #else + #include #include + #endif /* _AIX && _I386 */ #include #else /* neither HAVE_TERMIO nor HAVE_TERMIOS */ *************** *** 107,110 **** --- 112,120 ---- #include #endif /* AIX */ + + #ifdef IRIX4 + /* Get _getpty prototype */ + #include + #endif #ifdef SYSV_PTYS diff -rc2P --exclude-from=exceptions emacs-19.10/src/term.c emacs-19.11/src/term.c *** emacs-19.10/src/term.c Sat May 22 15:23:05 1993 --- emacs-19.11/src/term.c Mon May 31 16:18:20 1993 *************** *** 1241,1244 **** --- 1241,1248 ---- int i; + /* This can happen if CANNOT_DUMP or with strange options. */ + if (!initialized) + Vfunction_key_map = Fmake_sparse_keymap (Qnil); + for (i = 0; i < (sizeof (keys)/sizeof (keys[0])); i++) { diff -rc2P --exclude-from=exceptions emacs-19.10/src/window.c emacs-19.11/src/window.c *** emacs-19.10/src/window.c Wed May 26 23:43:45 1993 --- emacs-19.11/src/window.c Mon May 31 14:22:07 1993 *************** *** 1529,1532 **** --- 1529,1533 ---- buffer); w->start_at_line_beg = Qnil; + w->force_start = Qnil; XFASTINT (w->last_modified) = 0; windows_or_buffers_changed++; diff -rc2P --exclude-from=exceptions emacs-19.10/src/xfaces.c emacs-19.11/src/xfaces.c *** emacs-19.10/src/xfaces.c Sat May 29 17:10:01 1993 --- emacs-19.11/src/xfaces.c Sun May 30 16:33:16 1993 *************** *** 36,40 **** /* Compensate for bug in Xos.h on hpux. */ ! #if HPUX #include #define __TIMEVAL__ --- 36,40 ---- /* Compensate for bug in Xos.h on hpux. */ ! #ifdef HPUX #include #define __TIMEVAL__ *************** *** 41,48 **** #endif /* Display Context for the icons */ #include #include ! /* #include */ /* Appears not to be used */ #include --- 41,52 ---- #endif + /* These don't seem to be used. */ + #if 0 /* Display Context for the icons */ #include #include ! #include ! #endif ! #include *************** *** 91,95 **** Element 0 is the default face --- the one used for normal text. Element 1 is the modeline face. ! These faces have their GC's set; the rest do not. (See src/xterm.h.) The global variables `face_vector' and `nfaces' define another --- 95,102 ---- Element 0 is the default face --- the one used for normal text. Element 1 is the modeline face. ! These faces have their GC's set; the rest do not. ! If faces[i] is filled in (i.e. non-zero) on one frame, then it must ! be filled in on all frames. Code assumes that face ID's can be ! used on any frame. (See src/xterm.h.) The global variables `face_vector' and `nfaces' define another *************** *** 426,430 **** unload_color (f, pixel) struct frame *f; ! Pixel pixel; { /* Since faces get built by copying parameters from other faces, the --- 433,437 ---- unload_color (f, pixel) struct frame *f; ! unsigned long pixel; { /* Since faces get built by copying parameters from other faces, the *************** *** 458,461 **** --- 465,484 ---- recompute_basic_faces (f); + + /* Supposedly, we only apply this function to newly-created frames. */ + if (selected_frame == f) + abort (); + + /* Make sure that all faces valid on the selected frame are also valid + on this new frame. */ + { + int i; + int n_faces = selected_frame->display.x->n_faces; + struct face **faces = selected_frame->display.x->faces; + + for (i = 2; i < n_faces; i++) + if (faces[i]) + ensure_face_ready (f, i); + } } diff -rc2P --exclude-from=exceptions emacs-19.10/src/xfns.c emacs-19.11/src/xfns.c *** emacs-19.10/src/xfns.c Sat May 29 01:57:51 1993 --- emacs-19.11/src/xfns.c Tue Jun 1 03:55:02 1993 *************** *** 947,952 **** FRAME_MENU_BAR_LINES (f) = nlines; x_set_menu_bar_lines_1 (f->root_window, nlines - olines); ! x_set_window_size (f, FRAME_WIDTH (f), ! FRAME_HEIGHT (f) + nlines - olines); } --- 947,960 ---- FRAME_MENU_BAR_LINES (f) = nlines; x_set_menu_bar_lines_1 (f->root_window, nlines - olines); ! /* Use FRAME_NEW_WIDTH, HEIGHT so as not to override a size change ! made by the user but not fully reflected in the Emacs frame object. */ ! x_set_window_size (f, ! (FRAME_NEW_WIDTH (f) ! ? FRAME_NEW_WIDTH (f) ! : FRAME_WIDTH (f)), ! ((FRAME_NEW_HEIGHT (f) ! ? FRAME_NEW_HEIGHT (f) ! : FRAME_HEIGHT (f)) ! + nlines - olines)); } *************** *** 1477,1480 **** --- 1485,1490 ---- unsigned long attribute_mask; XClassHint class_hints; + char *shortname; + char *p; attributes.background_pixel = f->display.x->background_pixel; *************** *** 1502,1506 **** attribute_mask, &attributes); ! class_hints.res_name = (char *) XSTRING (f->name)->data; class_hints.res_class = EMACS_CLASS; XSetClassHint (x_current_display, FRAME_X_WINDOW (f), &class_hints); --- 1512,1524 ---- attribute_mask, &attributes); ! /* X resource names should not have periods in them. ! So copy the frame name, discarding from the first period onward. */ ! shortname = (char *) alloca (XSTRING (f->name)->size + 1); ! bcopy (XSTRING (f->name)->data, shortname, XSTRING (f->name)->size + 1); ! for (p = shortname; *p; p++) ! if (*p == '.') ! *p = 0; ! ! class_hints.res_name = shortname; class_hints.res_class = EMACS_CLASS; XSetClassHint (x_current_display, FRAME_X_WINDOW (f), &class_hints); *************** *** 1751,1755 **** icon-creation functions can say whose icon they're describing. */ x_default_parameter (f, parms, Qicon_type, Qnil, ! "iconType", "IconType", symbol); x_default_parameter (f, parms, Qauto_raise, Qnil, --- 1769,1773 ---- icon-creation functions can say whose icon they're describing. */ x_default_parameter (f, parms, Qicon_type, Qnil, ! "bitmapIcon", "BitmapIcon", symbol); x_default_parameter (f, parms, Qauto_raise, Qnil, *************** *** 2185,2193 **** int face_id = face_name_id_number (f, face); ! if (face_id < 0 || face_id > FRAME_N_FACES (f)) ! face_id = 0; ! size_ref = FRAME_FACES (f) [face_id]->font; ! if (size_ref == (XFontStruct *) (~0)) size_ref = f->display.x->font; } --- 2203,2215 ---- int face_id = face_name_id_number (f, face); ! if (face_id < 0 || face_id >= FRAME_N_FACES (f) ! || FRAME_FACES (f) [face_id] == 0) size_ref = f->display.x->font; + else + { + size_ref = FRAME_FACES (f) [face_id]->font; + if (size_ref == (XFontStruct *) (~0)) + size_ref = f->display.x->font; + } } *************** *** 3448,3452 **** xrm_option = (unsigned char *) 0; xrdb = x_load_resources (x_current_display, xrm_option, EMACS_CLASS); ! #ifdef HAVE_X11R5 XrmSetDatabase (x_current_display, xrdb); #else --- 3470,3474 ---- xrm_option = (unsigned char *) 0; xrdb = x_load_resources (x_current_display, xrm_option, EMACS_CLASS); ! #if defined (HAVE_X11R5) && ! defined (NO_XRM_SET_DATBASE) XrmSetDatabase (x_current_display, xrdb); #else diff -rc2P --exclude-from=exceptions emacs-19.10/src/xrdb.c emacs-19.11/src/xrdb.c *** emacs-19.10/src/xrdb.c Wed May 26 18:12:13 1993 --- emacs-19.11/src/xrdb.c Mon May 31 19:49:36 1993 *************** *** 64,69 **** --- 64,74 ---- #endif + #ifdef __bsdi__ + extern struct passwd *getpwuid (uid_t); + extern struct passwd *getpwnam (const char *); + #else extern struct passwd *getpwuid (); extern struct passwd *getpwnam (); + #endif static char * diff -rc2P --exclude-from=exceptions emacs-19.10/src/xselect.c emacs-19.11/src/xselect.c *** emacs-19.10/src/xselect.c Wed May 26 23:59:32 1993 --- emacs-19.11/src/xselect.c Mon May 31 13:02:30 1993 *************** *** 545,548 **** --- 545,549 ---- PropModeReplace, data, 0); } + XFlushQueue (); UNBLOCK_INPUT; } diff -rc2P --exclude-from=exceptions emacs-19.10/src/xterm.c emacs-19.11/src/xterm.c *** emacs-19.10/src/xterm.c Sat May 29 22:28:57 1993 --- emacs-19.11/src/xterm.c Tue Jun 1 03:54:58 1993 *************** *** 59,63 **** #else /* ! defined (BSD) */ #ifndef VMS - #include #include #endif --- 59,62 ---- *************** *** 64,80 **** #endif /* ! defined (BSD) */ ! /* Allow m- file to inhibit use of FIONREAD. */ ! #ifdef BROKEN_FIONREAD ! #undef FIONREAD ! #endif /* ! defined (BROKEN_FIONREAD) */ ! ! /* We are unable to use interrupts if FIONREAD is not available, ! so flush SIGIO so we won't try. */ ! #ifndef FIONREAD ! #ifdef SIGIO ! #undef SIGIO ! #endif /* ! defined (SIGIO) */ ! #endif /* FIONREAD */ ! #include "systime.h" --- 63,67 ---- #endif /* ! defined (BSD) */ ! #include "systty.h" #include "systime.h" *************** *** 2856,2860 **** if (f != 0) { ! KeySym keysym; char copy_buffer[80]; int modifiers; --- 2843,2847 ---- if (f != 0) { ! KeySym keysym, orig_keysym; char copy_buffer[80]; int modifiers; *************** *** 2876,2879 **** --- 2863,2867 ---- at recognizing the codes. HP servers have extra keysyms that fit into the MiscFunctionKey category. */ + orig_keysym = keysym; keysym &= ~(1<<28); *************** *** 2883,2891 **** || keysym == XK_Delete || 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 --- 2871,2882 ---- || keysym == XK_Delete || IsCursorKey (keysym) /* 0xff50 <= x < 0xff60 */ ! || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */ #ifdef HPUX /* This recognizes the "extended function keys". ! It seems there's no cleaner way. ! Test IsModifierKey to avoid handling mode_switch ! incorrectly. */ ! || (!IsModifierKey (orig_keysym) ! && (unsigned) (keysym) >= XK_Select && (unsigned)(keysym) < XK_KP_Space) #endif *************** *** 3926,3949 **** 1024, &n_matching_fonts, &font_info); ! ! /* If the server couldn't find any fonts whose named matched fontname, ! return an error code. */ ! if (n_matching_fonts == 0) ! return Qnil; /* See if we've already loaded a matching font. */ ! { ! int i, j; ! already_loaded = 0; ! for (i = 0; i < n_fonts; i++) ! for (j = 0; j < n_matching_fonts; j++) ! if (x_font_table[i]->fid == font_info[j].fid) ! { ! already_loaded = i; ! fontname = font_names[j]; ! goto found_font; ! } ! } found_font: --- 3917,3939 ---- 1024, &n_matching_fonts, &font_info); ! /* Don't just give up if n_matching_fonts is 0. ! Apparently there's a bug on Suns: XListFontsWithInfo can ! fail to find a font, but XLoadQueryFont may still find it. */ /* See if we've already loaded a matching font. */ ! if (n_matching_fonts != 0) ! { ! int i, j; ! already_loaded = 0; ! for (i = 0; i < n_fonts; i++) ! for (j = 0; j < n_matching_fonts; j++) ! if (x_font_table[i]->fid == font_info[j].fid) ! { ! already_loaded = i; ! fontname = font_names[j]; ! goto found_font; ! } ! } found_font: *************** *** 3968,3974 **** #endif ! if (i >= n_matching_fonts) ! return Qt; ! else fontname = font_names[i]; --- 3958,3963 ---- #endif ! /* See comment above. */ ! if (n_matching_fonts == 0) fontname = font_names[i]; *************** *** 3975,3979 **** font = (XFontStruct *) XLoadQueryFont (x_current_display, fontname); if (! font) ! return Qnil; /* Do we need to create the table? */ --- 3964,3973 ---- font = (XFontStruct *) XLoadQueryFont (x_current_display, fontname); if (! font) ! { ! /* Free the information from XListFontsWithInfo. */ ! if (n_matching_fonts) ! XFreeFontInfo (font_names, font_info, n_matching_fonts); ! return Qnil; ! } /* Do we need to create the table? */ *************** *** 4103,4110 **** check_frame_size (f, &rows, &cols); ! f->display.x->vertical_scroll_bar_extra = ! (FRAME_HAS_VERTICAL_SCROLL_BARS (f) ! ? VERTICAL_SCROLL_BAR_PIXEL_WIDTH (f) ! : 0); pixelwidth = CHAR_TO_PIXEL_WIDTH (f, cols); pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows); --- 4097,4104 ---- check_frame_size (f, &rows, &cols); ! f->display.x->vertical_scroll_bar_extra ! = (FRAME_HAS_VERTICAL_SCROLL_BARS (f) ! ? VERTICAL_SCROLL_BAR_PIXEL_WIDTH (f) ! : 0); pixelwidth = CHAR_TO_PIXEL_WIDTH (f, cols); pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows); diff -rc2P --exclude-from=exceptions emacs-19.10/src/ymakefile emacs-19.11/src/ymakefile *** emacs-19.10/src/ymakefile Fri May 28 23:26:28 1993 --- emacs-19.11/src/ymakefile Tue Jun 1 02:25:06 1993 *************** *** 375,378 **** --- 375,384 ---- #endif + #ifdef HAVE_GETLOADAVG + #define GETLOADAVG_OBJ + #else + #define GETLOADAVG_OBJ getloadavg.o + #endif + /* lastfile must follow all files whose initialized data areas should be dumped as pure by dump-emacs. */ *************** *** 387,391 **** abbrev.o syntax.o UNEXEC mocklisp.o bytecode.o \ process.o callproc.o \ ! doprnt.o getloadavg.o #ifdef TERMINFO --- 393,397 ---- abbrev.o syntax.o UNEXEC mocklisp.o bytecode.o \ process.o callproc.o \ ! doprnt.o GETLOADAVG_OBJ #ifdef TERMINFO *************** *** 518,525 **** #else #ifdef HAVE_SHM ! w=`pwd`; cd ${srcdir}; $${w}/temacs -nl -batch -l ../lisp/inc-vers ./temacs -nl -batch -l loadup dump #else /* ! defined (HAVE_SHM) */ ! w=`pwd`; cd ${srcdir}; $${w}/temacs -batch -l ../lisp/inc-vers ./temacs -batch -l loadup dump #endif /* ! defined (HAVE_SHM) */ --- 524,535 ---- #else #ifdef HAVE_SHM ! -if [ -w ${srcdir}/../lisp ]; then \ ! w=`pwd`; cd ${srcdir}; $${w}/temacs -nl -batch -l ../lisp/inc-vers; \ ! else true; fi ./temacs -nl -batch -l loadup dump #else /* ! defined (HAVE_SHM) */ ! -if [ -w ${srcdir}/../lisp ]; then \ ! w=`pwd`; cd ${srcdir}; $${w}/temacs -batch -l ../lisp/inc-vers; \ ! else true; fi ./temacs -batch -l loadup dump #endif /* ! defined (HAVE_SHM) */ *************** *** 586,592 **** 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) */ --- 596,606 ---- so we can use $(...) to substitute their values within "...". */ C_SWITCH_SYSTEM_1 = C_SWITCH_SYSTEM + C_SWITCH_SITE_1 = C_SWITCH_SITE C_SWITCH_X_SITE_1 = C_SWITCH_X_SITE really-oldXMenu: ! cd ${oldXMenudir}; ${MAKE} ${MFLAGS} OLDXMENU_OPTIONS \ ! "C_SWITCH_SITE=$(C_SWITCH_SITE_1)" \ ! "C_SWITCH_X_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) */