#!/bin/sh #### Patch script - GNU Emacs - version 19.31 to 19.32 #### This file contains patches to turn version 19.31 of GNU Emacs into #### 19.32. To apply them, cd to the top of the Emacs source tree, and #### then type 'sh '. #### After this script applies the patches, it will attempt to use an #### existing Emacs to recompile the changed Emacs Lisp files. (You may #### use the environment variable $emacs to specify the location of the #### binary, if it's not in your search path.) When this is finished, #### you can build the new Emacs version. #### We don't include patches for Info files since you can #### regenerate them from the Texinfo files that we do include. #### To update the changed info files, do #### (cd man; make) if [ "$0" = sh -o ! -f "$0" ]; then echo "use \`sh PATCHKIT', not \`sh &2 exit 1 fi if [ -d lisp ] ; then me=$0 elif [ -d emacs-19.31/lisp ] ; then cd emacs-19.31 case $0 in /*) me=$0;; *) me=../$0;; esac else (echo "$0: In order to apply this patch, the current directory" echo "must be the top of the Emacs distribution tree.") >&2 exit 1 fi ### moves and renames rm -f etc/MSDOS rm -f lib-src/getdate.c rm -f lib-src/getdate.y rm -f lib-src/timer.c rm -f lib-src/wakeup.c mv src/s/lignux.h src/s/gnu-linux.h ### delete and rebuild these, to avoid confusing the byte-compiler. rm -f lisp/ediff-mult.elc lisp/ediff-util.elc lisp/gnus-cache.elc lisp/gnus.elc tail +86 $me | patch -p1 cd lisp for e in $emacs ../src/emacs emacs emacs19 emacs-19 ''; do if [ -n "$e" ]; then v=`$e --version /dev/null | sed -e 's/.* //' -e 's/\.[0-9]*$//'` case $v in 19.29*|19.[3-9][0-9]*) break;; esac fi done if [ -z "$e" ]; then (echo "I can't find an Emacs to execute." echo "You'll have to byte-compile the lisp directory by hand.") >&2 exit 0 fi echo "byte compiling with $e (version $v)..." >&2 loadpath=${TMPDIR-/tmp}/$$.el trap "rm -f $loadpath; exit 1" 1 2 3 15 echo "(setq load-path (cons \"`pwd`\" load-path))" >$loadpath # First do the new files, and any older files that might need to be compiled # in a particular order. Then do the rest of the directory. set dired.el vc.el \ viper-util.el viper-ex.el viper-keym.el viper-macs.el viper-mous.el \ viper.el ediff-hook.el ediff-init.el ediff-ptch.el ediff-vers.el \ ediff-diff.el ediff-merg.el ediff-wind.el ediff-mult.el ediff-util.el \ ediff.el gnus-ems.el gnus-setup.el nnoo.el timezone.el browse-url.el \ custom.el gnus-cus.el easymenu.el sendmail.el mailheader.el font-lock.el \ lazy-lock.el lisp-mode.el mail-utils.el nnheader.el rmail.el message.el \ nnmail.el gnus.el gnus-cache.el gnus-msg.el gnus-cite.el gnus-demon.el \ gnus-score.el gnus-edit.el gnus-gl.el gnus-kill.el gnus-mh.el \ gnus-nocem.el gnus-salt.el gnus-soup.el gnus-srvr.el gnus-topic.el \ gnus-uu.el gnus-vis.el gnus-vm.el nnsoup.el nntp.el nndb.el \ score-mode.el smtpmail.el for f do echo Compiling $f... $e -batch -l $loadpath -f batch-byte-compile $f done $e -batch -l $loadpath -f batch-byte-recompile-directory . rm $loadpath exit 0 # The rest of this file is the patch kit. It seems to be too big for # some shells to handle as a here-document. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/ChangeLog emacs-19.32/ChangeLog *** emacs-19.31/ChangeLog Sat May 25 15:30:21 1996 --- emacs-19.32/ChangeLog Wed Jul 31 15:09:17 1996 *************** *** 1,2 **** --- 1,99 ---- + Wed Jul 31 13:52:46 1996 Richard Stallman + + * Version 19.32 released. + + * configure.in (*-sco3.2v5*): + Set OVERRIDE_CPPFLAG to a string of one space. + Fix the code that uses OVERRIDE_CPPFLAG. + + Tue Jul 16 18:06:01 1996 Karl Heuer + + * configure.in: Undo previous change. + + Tue Jul 16 01:42:44 1996 Richard Stallman + + * config.sub: Use `pc', not `unknown', when canonicalizing + the vendor for ...86. + + Mon Jul 15 17:09:09 1996 David Mosberger-Tang + + * configure.in: Check for termios.h header. + + Thu Jul 11 19:32:03 1996 Bill Mann + + * configure.in: Use s/usg5-4-3.h for ncr-i[3456]86-sysv4.3 + + Sun Jul 7 18:21:21 1996 Karl Heuer + + * configure.in: Split bsdos2 and bsdos2-1. + + Sat Jul 6 10:33:55 1996 Richard Stallman + + * config.sub: If last two words are not a recognized + KERNEL-OS pair, use just the last word as OS, as in 19.31. + Make conversion of gnu/linux to linux-gnu really work. + + * config.sub: If vendor unspecified with i386, use `pc' not `unknown'. + + Sun Jun 30 03:05:19 1996 Richard Stallman + + * configure.in (check for using Lucid widgets by default): + Eliminate indentation that confuses some compilers. + + Sat Jun 29 03:00:59 1996 Richard Stallman + + * config.sub: Convert linux and gnu/linux to linux-gnu. + + * make-dist: Don't update getdate.c. + Ignore =... files when checking for too-long Lisp file names. + + Fri Jun 28 03:00:59 1996 Richard Stallman + + * configure.in (euidaccess): Check for that, not for eaccess. + + Thu Jun 27 02:14:13 1996 Richard Stallman + + * configure.in (sunos4.1.[3-9]*noshare): Eliminate dash from + before `noshare'. + (mips-sgi-irix6*): Specify NON_GCC_TEST_OPTIONS. + + Fri Jun 21 17:36:42 1996 Richard Stallman + + * configure.in: Rename lignux to linux-gnu in configuration names. + Use gnu-linux as the opsys value (s/ file name). + Allow i686 just like i386, i486, i586. + + Thu Jun 20 13:26:35 1996 Richard Stallman + + * configure.in (i*86-*-sco3.2v5): New alternative. + (OVERRIDE_CPPFLAG): New variable. + (CPPFLAGS): If OVERRIDE_CPPFLAG is set, use that. + + * configure.in: Specify vpath for .texi files. + + Sun Jun 9 16:52:05 1996 Richard Stallman + + * configure.in: Always check for HAVE_X11R5. + Separately decide whether to use a toolkit by default. + + Tue Jun 4 11:34:09 1996 Bill Mann + + * configure.in: If X11R5 is missing the Xaw headers, + default to --with-x-toolkit=no. + + Fri May 31 01:37:44 1996 Richard Stallman + + * configure.in (powerpc-*-solaris2*): Use ibmrs6000, not rs6000. + + Thu May 30 22:09:53 1996 Richard Stallman + + * Makefile.in (install-arch-indep): If cd etc makes output, + don't treat that as part of the tar data. + Check that ./lisp actually exists. + + Wed May 29 10:54:17 1996 Karl Heuer + + * make-dist: Check for long file names. + Sat May 25 15:30:10 1996 Karl Heuer diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/INSTALL emacs-19.32/INSTALL *** emacs-19.31/INSTALL Tue May 7 15:00:45 1996 --- emacs-19.32/INSTALL Thu Aug 1 17:31:33 1996 *************** Installation on MSDOG (a.k.a. MSDOS) *** 512,543 **** To install on MSDOG, you need to have the GNU C compiler for MSDOG ! (also known as djgpp), GNU Make, rm, mv, chmod, and sed. See the ! remarks in config.bat for more information about locations and ! versions. ! ! If you are compiling on an MSDOG-like system which has long file ! names, you may need to do `SET LFN=y' for some of the commands, ! especially the compilation commands. It might be more convenient to ! unpack the Emacs distribution with djtar, which comes with djgpp; if ! you do `SET LFN=n' before unpacking, djtar truncates file names to 8.3 ! naming as it extracts files, even if the system allows long file ! names, and this ensures that build procedures designed for 8.3 file ! names still work. Use djtar with the command `djtar -x foo.tar' or ! `djtar -x foo.tgz'. ! ! Some users report that running Emacs 19.29 requires dpmi memory ! management. We do not know why this is so, since 19.28 did not need ! it. If we find out what change introduced this requirement, we may ! try to eliminate it. ("May" because perhaps djgpp version 2's ! improved dpmi handling means this is no longer a problem.) ! ! It is possible that this problem happens only when there is not enough ! physical memory on the machine. ! ! You can find out if you have a dpmi host by running go32 (part of ! djgpp) without arguments; it will tell you if it uses dpmi memory. ! For more information about dpmi memory, consult the djgpp FAQ. ! ! To build and install Emacs, type these commands: config msdos --- 512,571 ---- To install on MSDOG, you need to have the GNU C compiler for MSDOG ! (also known as djgpp), GNU Make, rm, mv, and sed. See the remarks in ! config.bat for more information about locations and versions. The ! file etc/FAQ includes pointers to Internet sites where you can find ! the necessary utilities; search for "MS-DOS". The configuration step ! (see below) will test for these utilities and will refuse to continue ! if any of them isn't found. ! ! If you are building the MSDOG version of Emacs on an MSDOG-like system ! which supports long file names (e.g. Windows 95), you need to make ! sure that long file names are handled consistently both when you ! unpack the distribution and compile it. If you intend to compile with ! DJGPP v2.0 or later, and long file names support is enabled (LFN=y in ! the environment), you need to unpack Emacs distribution in a way that ! doesn't truncate the original long filenames to the DOS 8.3 namespace; ! the easiest way to do this is to use djtar program which comes with ! DJGPP, since it will note the LFN setting and behave accordingly. ! DJGPP v1 doesn't support long filenames, so you must unpack Emacs with ! a program that truncates the filenames to 8.3 naming as it extracts ! files; again, using djtar after setting LFN=n is the recommended way. ! You can build Emacs with LFN=n even if you use DJGPP v2, if some of ! your tools don't support long file names: just ensure that LFN is set ! to `n' during both unpacking and compiling. ! ! (By the time you read this, you have already unpacked the Emacs ! distribution, but if the explanations above imply that you should have ! done it differently, it's safer to delete the directory tree created ! by the unpacking program and unpack Emacs again, than to risk running ! into problems during the build process.) ! ! It is important to understand that the runtime support of long file ! names by the Emacs binary is NOT affected by the LFN setting during ! compilation; Emacs compiled with DJGPP v2.0 or later will always ! support long file names on Windows 95 no matter what was the setting ! of LFN at compile time. However, if you compiled with LFN disabled ! and want to enable LFN support after Emacs was already built, you need ! to make sure that the support files in the lisp, etc and info ! directories are called by their original long names as found in the ! distribution. You can do this either by renaming the files manually, ! or by extracting them from the original distribution archive with ! djtar after you set LFN=y in the environment. ! ! To unpack Emacs with djtar, type this command: ! ! djtar -x emacs.tgz ! ! (This assumes that the Emacs distribution is called `emacs.tgz' on ! your system.) There are a few files in the archive whose names ! collide with other files under the 8.3 DOS naming. On native MSDOS, ! or if you have set LFN=n on Win95, djtar will ask you to supply ! alternate names for these files; you can just press `Enter' when this ! happens (which makes djtar skip these files) because they aren't ! required for MS-DOS. ! ! When unpacking is done, a directory called `emacs-XX.YY' will be ! created, where XX.YY is the Emacs version. To build and install ! Emacs, chdir to that directory and type these commands: config msdos *************** sibling directory called bin. For examp *** 550,554 **** /emacs/lib-src to the directory /emacs/bin, so you can then delete the subdirectories /emacs/src and /emacs/lib-src if you wish. The only ! subdirectories you need to keep are bin, lisp, etc and info. Emacs on MSDOS finds the lisp, etc and info directories by looking in --- 578,585 ---- /emacs/lib-src to the directory /emacs/bin, so you can then delete the subdirectories /emacs/src and /emacs/lib-src if you wish. The only ! subdirectories you need to keep are bin, lisp, etc and info. The bin ! subdirectory should be added to your PATH. The msdos subdirectory ! includes a PIF and an icon file for Emacs which you might find useful ! if you run Emacs under MS Windows. Emacs on MSDOS finds the lisp, etc and info directories by looking in *************** MSDOG is a not a multitasking operating *** 561,562 **** --- 592,599 ---- as asynchronous subprocesses that depend on multitasking will not work. Synchronous subprocesses do work. + + The current version of djgpp 2.0 (as of August 1996) has two bugs that + affect Emacs. We've included corrected versions of two files from + djgpp in the msdos subdirectory: is-exec.c and sigaction.c. To work + around the bugs, compile these files and link them into temacs. The + next version of djgpp should have these bugs fixed. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/Makefile.in emacs-19.32/Makefile.in *** emacs-19.31/Makefile.in Fri Mar 22 23:25:01 1996 --- emacs-19.32/Makefile.in Mon Jun 3 16:05:39 1996 *************** install-arch-indep: mkdir *** 355,362 **** then \ echo "Copying etc/DOC-* to ${docdir} ..." ; \ ! (cd etc; tar -cf - DOC*)|(cd ${docdir}; umask 0; tar -xvf - ); \ (cd $(docdir); chmod a+r DOC*; rm DOC) \ else true; fi ! if [ x`(cd ./lisp; /bin/pwd)` != x`(cd ${lispdir}; /bin/pwd)` ] \ && [ x`(cd ${srcdir}/lisp; /bin/pwd)` != x`(cd ./lisp; /bin/pwd)` ]; \ then \ --- 355,363 ---- then \ echo "Copying etc/DOC-* to ${docdir} ..." ; \ ! (cd ./etc; tar -cf - DOC*)|(cd ${docdir}; umask 0; tar -xvf - ); \ (cd $(docdir); chmod a+r DOC*; rm DOC) \ else true; fi ! if [ -r ./lisp ] \ ! && [ x`(cd ./lisp; /bin/pwd)` != x`(cd ${lispdir}; /bin/pwd)` ] \ && [ x`(cd ${srcdir}/lisp; /bin/pwd)` != x`(cd ./lisp; /bin/pwd)` ]; \ then \ diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/PROBLEMS emacs-19.32/PROBLEMS *** emacs-19.31/PROBLEMS Thu May 23 12:14:03 1996 --- emacs-19.32/PROBLEMS Thu Aug 1 21:59:12 1996 *************** This file describes various problems tha *** 2,5 **** --- 2,115 ---- in compiling, installing and running GNU Emacs. + * Problems running Perl under Emacs on Windows NT/95. + + `perl -de 0' just hangs when executed in an Emacs subshell. + The fault lies with Perl (indirectly with Windows NT/95). + + The problem is that the Perl debugger explicitly opens a connection to + "CON", which is the DOS/NT equivalent of "/dev/tty", for interacting + with the user. + + On Unix, this is okay, because Emacs (or the shell?) creates a + pseudo-tty so that /dev/tty is really the pipe Emacs is using to + communicate with the subprocess. + + On NT, this fails because CON always refers to the handle for the + relevant console (approximately equivalent to a tty), and cannot be + redirected to refer to the pipe Emacs assigned to the subprocess as + stdin. + + A workaround is to modify perldb.pl to use STDIN/STDOUT instead of CON. + + For Perl 4: + + *** PERL/LIB/PERLDB.PL.orig Wed May 26 08:24:18 1993 + --- PERL/LIB/PERLDB.PL Mon Jul 01 15:28:16 1996 + *************** + *** 68,74 **** + $rcfile=".perldb"; + } + else { + ! $console = "con"; + $rcfile="perldb.ini"; + } + + --- 68,74 ---- + $rcfile=".perldb"; + } + else { + ! $console = ""; + $rcfile="perldb.ini"; + } + + + For Perl 5: + *** perl/5.001/lib/perl5db.pl.orig Sun Jun 04 21:13:40 1995 + --- perl/5.001/lib/perl5db.pl Mon Jul 01 17:00:08 1996 + *************** + *** 22,28 **** + $rcfile=".perldb"; + } + elsif (-e "con") { + ! $console = "con"; + $rcfile="perldb.ini"; + } + else { + --- 22,28 ---- + $rcfile=".perldb"; + } + elsif (-e "con") { + ! $console = ""; + $rcfile="perldb.ini"; + } + else { + + * Problems running DOS programs on Windows NT versions earlier than 3.51. + + Some DOS programs, such as pkzip/pkunzip will not work at all, while + others will only work if their stdin is redirected from a file or NUL. + + When a DOS program does not work, a new process is actually created, but + hangs. It cannot be interrupted from Emacs, and might need to be killed + by an external program if Emacs is hung waiting for the process to + finish. If Emacs is not waiting for it, you should be able to kill the + instance of ntvdm that is running the hung process from Emacs, if you + can find out the process id. + + It is safe to run most DOS programs using call-process (eg. M-! and + M-|) since stdin is then redirected from a file, but not with + start-process since that redirects stdin to a pipe. Also, running DOS + programs in a shell buffer prompt without redirecting stdin does not + work. + + * Problems on MS-DOG if DJGPP v2.0 is used to compile Emacs: + + There are two DJGPP library bugs which cause problems: + + * Running `shell-command' (or `compile', or `grep') you get + `Searching for program: permission denied (EACCES), c:/command.com'; + * After you shell to DOS, Ctrl-Break kills Emacs. + + To work around these bugs, you can use two files in the msdos + subdirectory: `is-exec.c' and `sigaction.c'. Compile them and link + them into the Emacs executable `temacs'; then they will replace the + incorrect library functions. + + * When compiling with DJGPP on Windows 95, Make fails for some targets + like make-docfile. + + This can happen if long file name support (the setting of environment + variable LFN) when Emacs distribution was unpacked and during + compilation are not the same. See the MSDOG section of INSTALL for + the explanation of how to avoid this problem. + + * Emacs compiled for MSDOS cannot find some Lisp files, or other + run-time support files, when long filename support is enabled. + + This can happen if the Emacs distribution was unzipped without LFN + support, thus causing long filenames to be truncated to the 8+3 DOS + namespace. You should unzip the files again with a utility that + supports long filenames (such as djtar from DJGPP). + * On Windows 95, Alt-f6 does not get through to Emacs. *************** by removing this patch and installing pa *** 58,64 **** However, that linker version won't work with CDE. ! On Solaris 2.5, the linker has this bug and there is no patch you ! could remove to get rid of the bug. However, the GNU linker does ! work. * Emacs dumps core if lisp-complete-symbol is called, on Solaris. --- 168,184 ---- However, that linker version won't work with CDE. ! Solaris 2.5 comes with a linker that has this bug. It is reported that if ! you install all the latest patches (as of June 1996), the bug is fixed. ! We suspect the crucial patch is one of these, but we don't know ! for certain. ! ! 103093-03: [README] SunOS 5.5: kernel patch (2140557 bytes) ! 102832-01: [README] OpenWindows 3.5: Xview Jumbo Patch (4181613 bytes) ! ! If you can determine which patch does fix the bug, please tell ! bug-gnu-emacs@prep.ai.mit.edu. ! ! Meanwhile, the GNU linker links Emacs properly on both Solaris 2.4 and ! Solaris 2.5. * Emacs dumps core if lisp-complete-symbol is called, on Solaris. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/README emacs-19.32/README *** emacs-19.31/README Sat May 25 20:17:36 1996 --- emacs-19.32/README Thu Aug 1 22:02:47 1996 *************** *** 1,3 **** ! This directory tree holds version 19.31 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. --- 1,3 ---- ! This directory tree holds version 19.32 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/config.bat emacs-19.32/config.bat *** emacs-19.31/config.bat Mon Apr 15 14:40:49 1996 --- emacs-19.32/config.bat Sat Jul 20 13:56:54 1996 *************** rem GNU General Public License for mor *** 17,22 **** rem You should have received a copy of the GNU General Public License ! rem along with GNU Emacs; see the file COPYING. If not, write to ! rem the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. rem ---------------------------------------------------------------------- rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS: --- 17,23 ---- rem You should have received a copy of the GNU General Public License ! rem along with GNU Emacs; see the file COPYING. If not, write to the ! rem Free Software Foundation, Inc., 59 Temple Place - Suite 330, ! rem Boston, MA 02111-1307, USA. rem ---------------------------------------------------------------------- rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS: diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/config.guess emacs-19.32/config.guess *** emacs-19.31/config.guess Sat May 25 20:17:34 1996 --- emacs-19.32/config.guess Thu Aug 1 22:02:46 1996 *************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ *** 82,86 **** exit 0 ;; i86pc:SunOS:5.*:*) ! echo i386-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) --- 82,86 ---- exit 0 ;; i86pc:SunOS:5.*:*) ! echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) *************** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$ *** 138,142 **** # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` ! if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88100 ] ; then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ -o ${TARGET_BINARY_INTERFACE}x = x ] ; then --- 138,142 ---- # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` ! if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ -o ${TARGET_BINARY_INTERFACE}x = x ] ; then *************** EOF *** 212,216 **** exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and ! echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) --- 212,216 ---- exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and ! echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) *************** EOF *** 315,319 **** exit 0 ;; i[34]86:BSD/386:*:* | *:BSD/OS:*:*) ! echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) --- 315,319 ---- exit 0 ;; i[34]86:BSD/386:*:* | *:BSD/OS:*:*) ! echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) *************** EOF *** 324,328 **** exit 0 ;; i*:CYGWIN*:*) ! echo i386-unknown-cygwin32 exit 0 ;; p*:CYGWIN*:*) --- 324,328 ---- exit 0 ;; i*:CYGWIN*:*) ! echo i386-pc-cygwin32 exit 0 ;; p*:CYGWIN*:*) *************** EOF *** 340,361 **** ld_help_string=`ld --help 2>&1` if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then ! echo "${UNAME_MACHINE}-unknown-lignux" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then ! echo "${UNAME_MACHINE}-unknown-lignuxaout" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then ! echo "${UNAME_MACHINE}-unknown-lignuxcoff" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then ! echo "${UNAME_MACHINE}-unknown-lignux" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then ! echo "${UNAME_MACHINE}-unknown-lignuxaout" ; exit 0 elif test "${UNAME_MACHINE}" = "alpha" ; then ! echo alpha-unknown-lignux ; exit 0 elif test "${UNAME_MACHINE}" = "sparc" ; then ! echo sparc-unknown-lignux ; exit 0 else ! # Either a pre-BFD a.out linker (lignuxoldld) or one that does not give us ! # useful --help. Gcc wants to distinguish between lignuxoldld and lignuxaout. test ! -d /usr/lib/ldscripts/. \ ! && echo "${UNAME_MACHINE}-unknown-lignuxoldld" && exit 0 # Determine whether the default compiler is a.out or elf cat >dummy.c <&1` if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then ! echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then ! echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then ! echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then ! echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then ! echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 elif test "${UNAME_MACHINE}" = "alpha" ; then ! echo alpha-unknown-linux-gnu ; exit 0 elif test "${UNAME_MACHINE}" = "sparc" ; then ! echo sparc-unknown-linux-gnu ; exit 0 else ! # Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us ! # useful --help. Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout. test ! -d /usr/lib/ldscripts/. \ ! && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 # Determine whether the default compiler is a.out or elf cat >dummy.c </dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` --- 390,394 ---- if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` *************** EOF *** 396,406 **** (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 ! echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL else ! echo ${UNAME_MACHINE}-unknown-sysv32 fi exit 0 ;; Intel:Mach:3*:*) ! echo i386-unknown-mach3 exit 0 ;; paragon:*:*:*) --- 396,406 ---- (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 ! echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else ! echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; Intel:Mach:3*:*) ! echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) *************** main () *** 522,526 **** #if defined (__386BSD__) ! printf ("i386-unknown-bsd\n"); exit (0); #endif --- 522,526 ---- #if defined (__386BSD__) ! printf ("i386-pc-bsd\n"); exit (0); #endif diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/config.sub emacs-19.32/config.sub *** emacs-19.31/config.sub Sat May 25 20:17:33 1996 --- emacs-19.32/config.sub Thu Aug 1 22:02:45 1996 *************** *** 42,45 **** --- 42,47 ---- # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM + # or in some cases, the newer four-part form: + # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. *************** case $1 in *** 63,71 **** esac ! # Separate what the user gave into CPU-COMPANY and OS (if any). ! basic_machine=`echo $1 | sed 's/-[^-]*$//'` ! if [ $basic_machine != $1 ] ! then os=`echo $1 | sed 's/.*-/-/'` ! else os=; fi ### Let's recognize common machines as not being operating systems so --- 65,83 ---- esac ! # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). ! # Here we must recognize all the valid KERNEL-OS combinations. ! maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` ! case $maybe_os in ! linux-gnu*) ! os=-$maybe_os ! basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ! ;; ! *) ! basic_machine=`echo $1 | sed 's/-[^-]*$//'` ! if [ $basic_machine != $1 ] ! then os=`echo $1 | sed 's/.*-/-/'` ! else os=; fi ! ;; ! esac ### Let's recognize common machines as not being operating systems so *************** case $os in *** 92,116 **** -sco5) os=sco3.2v5 ! basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` ;; -sco4) os=-sco3.2v4 ! basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` ! basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. ! basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` ;; -sco*) os=-sco3.2v2 ! basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` ;; -isc) os=-isc2.2 ! basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` ;; -clix*) --- 104,128 ---- -sco5) os=sco3.2v5 ! basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 ! basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` ! basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. ! basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 ! basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 ! basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) *************** case $os in *** 118,122 **** ;; -isc*) ! basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'` ;; -lynx*) --- 130,134 ---- ;; -isc*) ! basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) *************** case $basic_machine in *** 138,142 **** # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. ! tahoe | i[3456]86 | i860 | m68k | m68000 | m88k | ns32k | arm \ | arme[lb] | pyramid \ | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \ --- 150,154 ---- # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. ! tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \ | arme[lb] | pyramid \ | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \ *************** case $basic_machine in *** 145,154 **** | pdp11 | mips64el | mips64orion | mips64orionel \ | sparc | sparclet | sparclite | sparc64) ! basic_machine=$basic_machine-unknown ! ;; # Object if more than one company name word. *-*-*) ! echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 ! exit 1 ;; # Recognize the basic CPU types with company name. --- 157,172 ---- | pdp11 | mips64el | mips64orion | mips64orionel \ | sparc | sparclet | sparclite | sparc64) ! basic_machine=$basic_machine-unknown ! ;; ! # We use `pc' rather than `unknown' ! # because (1) that's what they normally are, and ! # (2) the word "unknown" tends to confuse beginning users. ! i[3456]86) ! basic_machine=$basic_machine-pc ! ;; # Object if more than one company name word. *-*-*) ! echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 ! exit 1 ;; # Recognize the basic CPU types with company name. *************** case $basic_machine in *** 203,210 **** os=-aux ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; balance) basic_machine=ns32k-sequent --- 221,224 ---- *************** case $basic_machine in *** 330,346 **** # I'm not sure what "Sysv32" means. Should this be sysv3.2? i[3456]86v32) ! basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` os=-sysv32 ;; i[3456]86v4*) ! basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` os=-sysv4 ;; i[3456]86v) ! basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` os=-sysv ;; i[3456]86sol2) ! basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'` os=-solaris2 ;; --- 344,360 ---- # I'm not sure what "Sysv32" means. Should this be sysv3.2? i[3456]86v32) ! basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i[3456]86v4*) ! basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i[3456]86v) ! basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i[3456]86sol2) ! basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; *************** if [ x"$os" != x"" ] *** 640,643 **** --- 654,659 ---- then case $os in + # First match some system type aliases + # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) *************** case $os in *** 651,658 **** ;; -gnu/linux*) ! os=`echo $os | sed -e 's|gnu/linux|lignux|'` ! ;; ! -linux*) ! os=`echo $os | sed -e 's|linux|lignux|'` ;; # First accept the basic system types. --- 667,671 ---- ;; -gnu/linux*) ! os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. *************** case $os in *** 661,676 **** # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ ! | -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]* \ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \ | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ ! | -riscos* | -lignux* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ ! | -cygwin32* | -pe* | -psos* | -moss* ) # Remember, each alternative MUST END IN *, to match a version number. ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` --- 674,693 ---- # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ ! | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \ | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ ! | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ ! | -cygwin32* | -pe* | -psos* | -moss* | -proelf* \ ! | -linux-gnu*) # Remember, each alternative MUST END IN *, to match a version number. ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` *************** case $basic_machine in *** 897,902 **** vendor=apple ;; - -aux*) - vendor=apple esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` --- 914,917 ---- diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/configure emacs-19.32/configure *** emacs-19.31/configure Sat May 25 11:59:44 1996 --- emacs-19.32/configure Wed Jul 31 15:37:32 1996 *************** ac_help="$ac_help *** 21,25 **** --with-hesiod support Hesiod to get the POP server host" ac_help="$ac_help ! --with-x-toolkit=KIT use an X toolkit (KIT = yes/lucid/athena/motif)" ac_help="$ac_help --with-x use the X Window System" --- 21,25 ---- --with-hesiod support Hesiod to get the POP server host" ac_help="$ac_help ! --with-x-toolkit=KIT use an X toolkit (KIT = yes/lucid/athena/motif/no)" ac_help="$ac_help --with-x use the X Window System" *************** vpath %.y $(srcdir)\ *** 626,630 **** vpath %.l $(srcdir)\ vpath %.s $(srcdir)\ ! vpath %.in $(srcdir)' fi --- 626,631 ---- vpath %.l $(srcdir)\ vpath %.s $(srcdir)\ ! vpath %.in $(srcdir)\ ! vpath %.texi $(srcdir)' fi *************** case "${canonical}" in *** 713,717 **** opsys=netbsd case "${canonical}" in ! i[345]86-*-netbsd*) machine=intel386 ;; m68k-*-netbsd*) # This is somewhat bogus. --- 714,718 ---- opsys=netbsd case "${canonical}" in ! i[3456]86-*-netbsd*) machine=intel386 ;; m68k-*-netbsd*) # This is somewhat bogus. *************** case "${canonical}" in *** 749,754 **** ;; ! alpha-*-linux* | alpha-*-lignux* ) ! machine=alpha opsys=lignux ;; --- 750,755 ---- ;; ! alpha-*-linux-gnu* ) ! machine=alpha opsys=gnu-linux ;; *************** case "${canonical}" in *** 820,824 **** ## Cubix QBx/386 ! i[345]86-cubix-sysv* ) machine=intel386 opsys=usg5-3 ;; --- 821,825 ---- ## Cubix QBx/386 ! i[3456]86-cubix-sysv* ) machine=intel386 opsys=usg5-3 ;; *************** case "${canonical}" in *** 999,1006 **** ## IBM machines ! i[345]86-ibm-aix1.1* ) machine=ibmps2-aix opsys=usg5-2-2 ;; ! i[345]86-ibm-aix1.[23]* | i[345]86-ibm-aix* ) machine=ibmps2-aix opsys=usg5-3 ;; --- 1000,1007 ---- ## IBM machines ! i[3456]86-ibm-aix1.1* ) machine=ibmps2-aix opsys=usg5-2-2 ;; ! i[3456]86-ibm-aix1.[23]* | i[3456]86-ibm-aix* ) machine=ibmps2-aix opsys=usg5-3 ;; *************** case "${canonical}" in *** 1054,1068 **** ## Intel 386 machines where we do care about the manufacturer ! i[345]86-intsys-sysv* ) machine=is386 opsys=usg5-2-2 ;; ## Prime EXL ! i[345]86-prime-sysv* ) machine=i386 opsys=usg5-3 ;; ## Sequent Symmetry running Dynix ! i[345]86-sequent-bsd* ) machine=symmetry opsys=bsd4-3 ;; --- 1055,1069 ---- ## Intel 386 machines where we do care about the manufacturer ! i[3456]86-intsys-sysv* ) machine=is386 opsys=usg5-2-2 ;; ## Prime EXL ! i[3456]86-prime-sysv* ) machine=i386 opsys=usg5-3 ;; ## Sequent Symmetry running Dynix ! i[3456]86-sequent-bsd* ) machine=symmetry opsys=bsd4-3 ;; *************** case "${canonical}" in *** 1070,1081 **** ## Sequent Symmetry running DYNIX/ptx ## Use the old cpp rather than the newer ANSI one. ! i[345]86-sequent-ptx* ) machine=sequent-ptx opsys=ptx NON_GNU_CPP="/lib/cpp" ;; ## Unspecified sysv on an ncr machine defaults to svr4.2. ## (Plain usg5-4 doesn't turn on POSIX signals, which we need.) ! i[345]86-ncr-sysv* ) machine=ncr386 opsys=usg5-4-2 ;; --- 1071,1087 ---- ## Sequent Symmetry running DYNIX/ptx ## Use the old cpp rather than the newer ANSI one. ! i[3456]86-sequent-ptx* ) machine=sequent-ptx opsys=ptx NON_GNU_CPP="/lib/cpp" ;; + ## ncr machine running svr4.3. + i[3456]86-ncr-sysv4.3 ) + machine=ncr386 opsys=usg5-4-3 + ;; + ## Unspecified sysv on an ncr machine defaults to svr4.2. ## (Plain usg5-4 doesn't turn on POSIX signals, which we need.) ! i[3456]86-ncr-sysv* ) machine=ncr386 opsys=usg5-4-2 ;; *************** case "${canonical}" in *** 1206,1210 **** ;; mips-sgi-irix6* ) ! machine=iris4d opsys=irix6-0 NON_GNU_CPP=/lib/cpp ;; mips-sgi-irix5.[01]* ) --- 1212,1218 ---- ;; mips-sgi-irix6* ) ! machine=iris4d opsys=irix6-0 ! NON_GNU_CPP=/lib/cpp ! NON_GCC_TEST_OPTIONS=-32 ;; mips-sgi-irix5.[01]* ) *************** case "${canonical}" in *** 1238,1247 **** ## Suns ! sparc-*-linux* | sparc-*-lignux* ) ! machine=sparc opsys=lignux ;; *-sun-sunos* | *-sun-bsd* | *-sun-solaris* \ ! | i[345]86-*-solaris2* | i[345]86-*-sunos5* | powerpc*-*-solaris2* \ | rs6000-*-solaris2*) case "${canonical}" in --- 1246,1255 ---- ## Suns ! sparc-*-linux-gnu* ) ! machine=sparc opsys=gnu-linux ;; *-sun-sunos* | *-sun-bsd* | *-sun-solaris* \ ! | i[3456]86-*-solaris2* | i[3456]86-*-sunos5* | powerpc*-*-solaris2* \ | rs6000-*-solaris2*) case "${canonical}" in *************** case "${canonical}" in *** 1249,1255 **** m68*-sunos2* ) machine=sun2 ;; m68* ) machine=sun3 ;; ! i[345]86-sun-sunos[34]* ) machine=sun386 ;; ! i[345]86-*-* ) machine=intel386 ;; ! powerpc* | rs6000* ) machine=rs6000 ;; sparc* ) machine=sparc ;; * ) unported=yes ;; --- 1257,1263 ---- m68*-sunos2* ) machine=sun2 ;; m68* ) machine=sun3 ;; ! i[3456]86-sun-sunos[34]* ) machine=sun386 ;; ! i[3456]86-*-* ) machine=intel386 ;; ! powerpc* | rs6000* ) machine=ibmrs6000 ;; sparc* ) machine=sparc ;; * ) unported=yes ;; *************** case "${canonical}" in *** 1257,1261 **** case "${canonical}" in ## The Sun386 didn't get past 4.0. ! i[345]86-*-sunos4 ) opsys=sunos4-0 ;; *-sunos4.0* ) opsys=sunos4-0 ;; *-sunos4.1.[3-9]* | *-sunos4shr*) --- 1265,1269 ---- case "${canonical}" in ## The Sun386 didn't get past 4.0. ! i[3456]86-*-sunos4 ) opsys=sunos4-0 ;; *-sunos4.0* ) opsys=sunos4-0 ;; *-sunos4.1.[3-9]* | *-sunos4shr*) *************** case "${canonical}" in *** 1263,1267 **** NON_GNU_CPP=/usr/lib/cpp ;; ! *-sunos4.1.[3-9]*-noshare ) opsys=sunos4-1-3 NON_GNU_CPP=/usr/lib/cpp --- 1271,1275 ---- NON_GNU_CPP=/usr/lib/cpp ;; ! *-sunos4.1.[3-9]*noshare ) opsys=sunos4-1-3 NON_GNU_CPP=/usr/lib/cpp *************** case "${canonical}" in *** 1381,1385 **** ## Intel 386 machines where we don't care about the manufacturer ! i[345]86-*-* ) machine=intel386 case "${canonical}" in --- 1389,1393 ---- ## Intel 386 machines where we don't care about the manufacturer ! i[3456]86-*-* ) machine=intel386 case "${canonical}" in *************** case "${canonical}" in *** 1395,1402 **** *-esix* ) opsys=esix ;; *-xenix* ) opsys=xenix ;; ! *-linux* | *-lignux* ) opsys=lignux ;; *-sco3.2v4* ) opsys=sco4 ; NON_GNU_CPP=/lib/cpp ;; *-bsd386* | *-bsdi1* ) opsys=bsd386 ;; ! *-bsdi2* ) opsys=bsdos2 ;; *-386bsd* ) opsys=386bsd ;; *-freebsd* ) opsys=freebsd ;; --- 1403,1417 ---- *-esix* ) opsys=esix ;; *-xenix* ) opsys=xenix ;; ! *-linux-gnu* ) opsys=gnu-linux ;; *-sco3.2v4* ) opsys=sco4 ; NON_GNU_CPP=/lib/cpp ;; + *-sco3.2v5* ) opsys=sco5 + NON_GNU_CPP=/lib/cpp + # Prevent -belf from being passed to $CPP. + # /lib/cpp does not accept it. + OVERRIDE_CPPFLAGS=" " + ;; *-bsd386* | *-bsdi1* ) opsys=bsd386 ;; ! *-bsdi2.0* ) opsys=bsdos2 ;; ! *-bsdi2* ) opsys=bsdos2-1 ;; *-386bsd* ) opsys=386bsd ;; *-freebsd* ) opsys=freebsd ;; *************** case "${canonical}" in *** 1406,1412 **** ;; ! ## Lignux/68k ! m68k-*-linux* | m68k-*-lignux* ) ! machine=m68k opsys=lignux ;; --- 1421,1427 ---- ;; ! ## Linux/68k-based GNU system ! m68k-*-linux-gnu* ) ! machine=m68k opsys=gnu-linux ;; *************** else *** 1560,1564 **** #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else --- 1575,1579 ---- #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1578: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else *************** else *** 1670,1674 **** # not just through cpp. cat > conftest.$ac_ext < --- 1685,1689 ---- # not just through cpp. cat > conftest.$ac_ext < *************** Syntax Error *** 1676,1680 **** EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1679: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then --- 1691,1695 ---- EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1694: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then *************** else *** 1685,1689 **** CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < --- 1700,1704 ---- CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < *************** Syntax Error *** 1691,1695 **** EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1694: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then --- 1706,1710 ---- EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then *************** test -n "$YACC" || YACC="yacc" *** 1806,1810 **** echo $ac_n "checking for AIX""... $ac_c" 1>&6 cat > conftest.$ac_ext <&6 cat > conftest.$ac_ext < conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1844: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then --- 1851,1860 ---- else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1859: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then *************** else *** 1874,1882 **** else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } if test -s conftest && (./conftest; exit) 2>/dev/null; then ac_cv_c_cross=no --- 1889,1897 ---- else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } if test -s conftest && (./conftest; exit) 2>/dev/null; then ac_cv_c_cross=no *************** if eval "test \"`echo '$''{'ac_cv_header *** 1896,1900 **** else cat > conftest.$ac_ext < --- 1911,1915 ---- else cat > conftest.$ac_ext < *************** else *** 1904,1908 **** EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1907: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then --- 1919,1923 ---- EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1922: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then *************** if test $ac_cv_header_stdc = yes; then *** 1919,1923 **** # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < --- 1934,1938 ---- # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < *************** if test $ac_cv_header_stdc = yes; then *** 1937,1941 **** # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < --- 1952,1956 ---- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < *************** if test "$cross_compiling" = yes; then *** 1958,1962 **** else cat > conftest.$ac_ext < --- 1973,1977 ---- else cat > conftest.$ac_ext < *************** exit (0); } *** 1969,1973 **** EOF ! { (eval echo configure:1972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } if test -s conftest && (./conftest; exit) 2>/dev/null; then : --- 1984,1988 ---- EOF ! { (eval echo configure:1987: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } if test -s conftest && (./conftest; exit) 2>/dev/null; then : *************** if eval "test \"`echo '$''{'ac_cv_header *** 1993,1997 **** else cat > conftest.$ac_ext < --- 2008,2012 ---- else cat > conftest.$ac_ext < *************** struct tm *tp; *** 2003,2007 **** ; return 0; } EOF ! if { (eval echo configure:2006: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes --- 2018,2022 ---- ; return 0; } EOF ! if { (eval echo configure:2021: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes *************** if eval "test \"`echo '$''{'ac_cv_decl_s *** 2027,2031 **** else cat > conftest.$ac_ext < --- 2042,2046 ---- else cat > conftest.$ac_ext < *************** char *msg = *(sys_siglist + 1); *** 2040,2044 **** ; return 0; } EOF ! if { (eval echo configure:2043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_decl_sys_siglist=yes --- 2055,2059 ---- ; return 0; } EOF ! if { (eval echo configure:2058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_decl_sys_siglist=yes *************** fi *** 2062,2066 **** echo $ac_n "checking for struct utimbuf""... $ac_c" 1>&6 cat > conftest.$ac_ext <&6 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 --- 2097,2101 ---- ; return 0; } EOF ! if { (eval echo configure:2100: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 *************** if eval "test \"`echo '$''{'ac_cv_type_s *** 2101,2105 **** else cat > conftest.$ac_ext < --- 2116,2120 ---- else cat > conftest.$ac_ext < *************** int i; *** 2119,2123 **** ; return 0; } EOF ! if { (eval echo configure:2122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void --- 2134,2138 ---- ; return 0; } EOF ! if { (eval echo configure:2137: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void *************** EOF *** 2139,2143 **** echo $ac_n "checking for struct timeval""... $ac_c" 1>&6 cat > conftest.$ac_ext <&6 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 --- 2171,2175 ---- ; return 0; } EOF ! if { (eval echo configure:2174: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 *************** if eval "test \"`echo '$''{'ac_cv_struct *** 2177,2181 **** else cat > conftest.$ac_ext < --- 2192,2196 ---- else cat > conftest.$ac_ext < *************** struct tm *tp; tp->tm_sec; *** 2186,2190 **** ; return 0; } EOF ! if { (eval echo configure:2189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h --- 2201,2205 ---- ; return 0; } EOF ! if { (eval echo configure:2204: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h *************** if eval "test \"`echo '$''{'ac_cv_struct *** 2210,2214 **** else cat > conftest.$ac_ext < --- 2225,2229 ---- else cat > conftest.$ac_ext < *************** struct tm tm; tm.tm_zone; *** 2219,2223 **** ; return 0; } EOF ! if { (eval echo configure:2222: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm_zone=yes --- 2234,2238 ---- ; return 0; } EOF ! if { (eval echo configure:2237: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm_zone=yes *************** if eval "test \"`echo '$''{'ac_cv_var_tz *** 2242,2246 **** else cat > conftest.$ac_ext < --- 2257,2261 ---- else cat > conftest.$ac_ext < *************** atoi(*tzname); *** 2253,2257 **** ; return 0; } EOF ! if { (eval echo configure:2256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* ac_cv_var_tzname=yes --- 2268,2272 ---- ; return 0; } EOF ! if { (eval echo configure:2271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* ac_cv_var_tzname=yes *************** if eval "test \"`echo '$''{'ac_cv_c_cons *** 2279,2283 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes --- 2344,2348 ---- ; return 0; } EOF ! if { (eval echo configure:2347: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes *************** if test "$ac_x_includes" = NO; then *** 2479,2488 **** # First, try using that file with no special directory specified. cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2487: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then --- 2494,2503 ---- # First, try using that file with no special directory specified. cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2502: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then *************** if test "$ac_x_libraries" = NO; then *** 2551,2555 **** LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* LIBS="$ac_save_LIBS" --- 2574,2578 ---- ; return 0; } EOF ! if { (eval echo configure:2577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* LIBS="$ac_save_LIBS" *************** echo "checking the machine- and system-d *** 2724,2728 **** ### The two are the same except on a few systems, where they are made ### different to work around various lossages. For example, ! ### GCC 2.5 on Lignux needs them to be different because it treats -g ### as implying static linking. --- 2739,2743 ---- ### The two are the same except on a few systems, where they are made ### different to work around various lossages. For example, ! ### GCC 2.5 on GNU/Linux needs them to be different because it treats -g ### as implying static linking. *************** LISP_FLOAT_TYPE=yes *** 2842,2846 **** #### Add the libraries to LIBS and check for some functions. ! CPPFLAGS="$c_switch_system $c_switch_machine $CPPFLAGS" LIBS="$libsrc_libs $LIBS" --- 2857,2866 ---- #### Add the libraries to LIBS and check for some functions. ! if test x"${OVERRIDE_CPPFLAGS}" != x; then ! CPPFLAGS="${OVERRIDE_CPPFLAGS}" ! else ! CPPFLAGS="$c_switch_system $c_switch_machine $CPPFLAGS" ! fi ! LIBS="$libsrc_libs $LIBS" *************** else *** 2853,2857 **** LIBS="-ldnet $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 2885,2889 ---- ; return 0; } EOF ! if { (eval echo configure:2888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** else *** 2898,2902 **** LIBS="-lXbsd $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 2926,2930 ---- ; return 0; } EOF ! if { (eval echo configure:2929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** else *** 2933,2937 **** LIBS="-lpthreads $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 2965,2969 ---- ; return 0; } EOF ! if { (eval echo configure:2968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** if test "${HAVE_X11}" = "yes"; then *** 2997,3004 **** fi ! if test "${opsys}" = "lignux"; then echo $ac_n "checking whether X on GNU/Linux needs -b to link""... $ac_c" 1>&6 cat > conftest.$ac_ext <&6 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* xlinux_first_failure=no --- 3028,3032 ---- ; return 0; } EOF ! if { (eval echo configure:3031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* xlinux_first_failure=no *************** rm -f conftest* *** 3027,3031 **** LIBS="$LIBS -b i486-linuxaout" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* xlinux_second_failure=no --- 3055,3059 ---- ; return 0; } EOF ! if { (eval echo configure:3058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* xlinux_second_failure=no *************** if eval "test \"`echo '$''{'ac_cv_func_$ *** 3068,3072 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" --- 3112,3116 ---- ; return 0; } EOF ! if { (eval echo configure:3115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" *************** if test "${window_system}" = "x11"; then *** 3119,3123 **** echo $ac_n "checking X11 version 6""... $ac_c" 1>&6 cat > conftest.$ac_ext < --- 3139,3143 ---- echo $ac_n "checking X11 version 6""... $ac_c" 1>&6 cat > conftest.$ac_ext < *************** fail; *** 3130,3134 **** ; return 0; } EOF ! if { (eval echo configure:3133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* echo "$ac_t""6 or newer" 1>&6 --- 3150,3154 ---- ; return 0; } EOF ! if { (eval echo configure:3153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* echo "$ac_t""6 or newer" 1>&6 *************** rm -f conftest* *** 3145,3152 **** fi ! if test x"${USE_X_TOOLKIT}" = xmaybe; then echo $ac_n "checking X11 version 5""... $ac_c" 1>&6 cat > conftest.$ac_ext < --- 3165,3172 ---- fi ! if test "${window_system}" = "x11"; then echo $ac_n "checking X11 version 5""... $ac_c" 1>&6 cat > conftest.$ac_ext < *************** fail; *** 3159,3166 **** ; return 0; } EOF ! if { (eval echo configure:3162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* ! echo "$ac_t""5 or newer; use toolkit by default" 1>&6 ! USE_X_TOOLKIT=LUCID cat >> confdefs.h <<\EOF #define HAVE_X11R5 1 --- 3179,3186 ---- ; return 0; } EOF ! if { (eval echo configure:3182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* ! echo "$ac_t""5 or newer" 1>&6 ! HAVE_X11R5=yes cat >> confdefs.h <<\EOF #define HAVE_X11R5 1 *************** EOF *** 3169,3174 **** else rm -rf conftest* ! echo "$ac_t""before 5; do not use toolkit by default" 1>&6 ! USE_X_TOOLKIT=none fi rm -f conftest* --- 3189,3195 ---- else rm -rf conftest* ! ! HAVE_X11R5=no ! echo "$ac_t""before 5" 1>&6 fi rm -f conftest* *************** rm -f conftest* *** 3176,3179 **** --- 3197,3230 ---- fi + if test x"${USE_X_TOOLKIT}" = xmaybe; then + if test x"${HAVE_X11R5}" = xyes; then + echo $ac_n "checking X11 version 5 with Xaw""... $ac_c" 1>&6 + cat > conftest.$ac_ext < + #include + int main() { return 0; } + int t() { + + ; return 0; } + EOF + if { (eval echo configure:3214: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""5 or newer" 1>&6 + USE_X_TOOLKIT=LUCID + else + rm -rf conftest* + echo "$ac_t""before 5 or no Xaw; do not use toolkit by default" 1>&6 + USE_X_TOOLKIT=none + fi + rm -f conftest* + + else + USE_X_TOOLKIT=none + fi + fi + X_TOOLKIT_TYPE=$USE_X_TOOLKIT *************** if test "${USE_X_TOOLKIT}" != "none"; th *** 3181,3185 **** echo $ac_n "checking X11 toolkit version""... $ac_c" 1>&6 cat > conftest.$ac_ext < --- 3232,3236 ---- echo $ac_n "checking X11 toolkit version""... $ac_c" 1>&6 cat > conftest.$ac_ext < *************** fail; *** 3192,3196 **** ; return 0; } EOF ! if { (eval echo configure:3195: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* echo "$ac_t""6 or newer" 1>&6 --- 3243,3247 ---- ; return 0; } EOF ! if { (eval echo configure:3246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* echo "$ac_t""6 or newer" 1>&6 *************** else *** 3222,3226 **** LIBS="-lXmu $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 3285,3289 ---- ; return 0; } EOF ! if { (eval echo configure:3288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** fi *** 3264,3268 **** echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6 cat > conftest.$ac_ext < --- 3315,3319 ---- echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6 cat > conftest.$ac_ext < *************** return h_errno; *** 3272,3276 **** ; return 0; } EOF ! if { (eval echo configure:3275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 --- 3323,3327 ---- ; return 0; } EOF ! if { (eval echo configure:3326: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 *************** if eval "test \"`echo '$''{'ac_cv_header *** 3293,3297 **** else cat > conftest.$ac_ext < --- 3344,3348 ---- else cat > conftest.$ac_ext < *************** char *p = alloca(2 * sizeof(int)); *** 3301,3305 **** ; return 0; } EOF ! if { (eval echo configure:3304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* ac_cv_header_alloca_h=yes --- 3352,3356 ---- ; return 0; } EOF ! if { (eval echo configure:3355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* ac_cv_header_alloca_h=yes *************** if eval "test \"`echo '$''{'ac_cv_func_a *** 3325,3329 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* ac_cv_func_alloca=yes --- 3400,3404 ---- ; return 0; } EOF ! if { (eval echo configure:3403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* ac_cv_func_alloca=yes *************** if eval "test \"`echo '$''{'ac_cv_os_cra *** 3384,3388 **** else cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" --- 3488,3492 ---- ; return 0; } EOF ! if { (eval echo configure:3491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" *************** else *** 3469,3473 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } if test -s conftest && (./conftest; exit) 2>/dev/null; then ac_cv_c_stack_direction=1 --- 3539,3543 ---- } EOF ! { (eval echo configure:3542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } if test -s conftest && (./conftest; exit) 2>/dev/null; then ac_cv_c_stack_direction=1 *************** else *** 3516,3520 **** LIBS="-lm $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 3579,3583 ---- ; return 0; } EOF ! if { (eval echo configure:3582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** fi *** 3555,3559 **** for ac_func in gettimeofday gethostname dup2 rename closedir mkdir rmdir \ random lrand48 bcopy bcmp logb frexp fmod ftime res_init setsid \ ! strerror fpathconf select mktime eaccess getpagesize tzset setlocale do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 --- 3606,3610 ---- for ac_func in gettimeofday gethostname dup2 rename closedir mkdir rmdir \ random lrand48 bcopy bcmp logb frexp fmod ftime res_init setsid \ ! strerror fpathconf select mktime euidaccess getpagesize tzset setlocale do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 *************** if eval "test \"`echo '$''{'ac_cv_func_$ *** 3562,3566 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" --- 3637,3641 ---- ; return 0; } EOF ! if { (eval echo configure:3640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" *************** else *** 3621,3625 **** LIBS="-lncurses $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 3684,3688 ---- ; return 0; } EOF ! if { (eval echo configure:3687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** emacs_cv_localtime_cache=yes *** 3668,3672 **** else cat > conftest.$ac_ext < --- 3719,3723 ---- else cat > conftest.$ac_ext < *************** main() *** 3701,3705 **** } EOF ! { (eval echo configure:3704: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } if test -s conftest && (./conftest; exit) 2>/dev/null; then emacs_cv_localtime_cache=no --- 3752,3756 ---- } EOF ! { (eval echo configure:3755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } if test -s conftest && (./conftest; exit) 2>/dev/null; then emacs_cv_localtime_cache=no *************** if test "x$HAVE_TIMEVAL" = xyes; then *** 3726,3730 **** echo $ac_n "checking whether gettimeofday can't accept two arguments""... $ac_c" 1>&6 cat > conftest.$ac_ext <&6 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* echo "$ac_t""no" 1>&6 --- 3800,3804 ---- ; return 0; } EOF ! if { (eval echo configure:3803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* echo "$ac_t""no" 1>&6 *************** if eval "test \"`echo '$''{'ac_cv_func_s *** 3770,3774 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_func_socket=yes" --- 3845,3849 ---- ; return 0; } EOF ! if { (eval echo configure:3848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then rm -rf conftest* eval "ac_cv_func_socket=yes" *************** if eval "test \"`echo '$''{'ac_cv_header *** 3819,3828 **** else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:3827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then --- 3870,3879 ---- else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:3878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then *************** if eval "test \"`echo '$''{'ac_cv_header *** 3852,3861 **** else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:3860: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then --- 3903,3912 ---- else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:3911: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/configure.in emacs-19.32/configure.in *** emacs-19.31/configure.in Sat May 25 10:23:12 1996 --- emacs-19.32/configure.in Wed Jul 31 13:52:38 1996 *************** dnl GNU General Public License for more *** 19,24 **** dnl dnl You should have received a copy of the GNU General Public License ! dnl along with GNU Emacs; see the file COPYING. If not, write to ! dnl the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. AC_PREREQ(2.8)dnl --- 19,25 ---- dnl dnl You should have received a copy of the GNU General Public License ! dnl along with GNU Emacs; see the file COPYING. If not, write to the ! dnl Free Software Foundation, Inc., 59 Temple Place - Suite 330, ! dnl Boston, MA 02111-1307, USA. AC_PREREQ(2.8)dnl *************** dnl added later on when we find the path *** 50,54 **** dnl keep them together visually. AC_ARG_WITH(x-toolkit, ! [ --with-x-toolkit=KIT use an X toolkit (KIT = yes/lucid/athena/motif)], [ case "${withval}" in y | ye | yes ) val=athena ;; --- 51,55 ---- dnl keep them together visually. AC_ARG_WITH(x-toolkit, ! [ --with-x-toolkit=KIT use an X toolkit (KIT = yes/lucid/athena/motif/no)], [ case "${withval}" in y | ye | yes ) val=athena ;; *************** vpath %.y $(srcdir)\ *** 110,114 **** vpath %.l $(srcdir)\ vpath %.s $(srcdir)\ ! vpath %.in $(srcdir)' fi --- 111,116 ---- vpath %.l $(srcdir)\ vpath %.s $(srcdir)\ ! vpath %.in $(srcdir)\ ! vpath %.texi $(srcdir)' fi *************** case "${canonical}" in *** 154,158 **** opsys=netbsd case "${canonical}" in ! i[345]86-*-netbsd*) machine=intel386 ;; m68k-*-netbsd*) # This is somewhat bogus. --- 156,160 ---- opsys=netbsd case "${canonical}" in ! i[3456]86-*-netbsd*) machine=intel386 ;; m68k-*-netbsd*) # This is somewhat bogus. *************** case "${canonical}" in *** 190,195 **** ;; ! alpha-*-linux* | alpha-*-lignux* ) ! machine=alpha opsys=lignux ;; --- 192,197 ---- ;; ! alpha-*-linux-gnu* ) ! machine=alpha opsys=gnu-linux ;; *************** case "${canonical}" in *** 261,265 **** ## Cubix QBx/386 ! i[345]86-cubix-sysv* ) machine=intel386 opsys=usg5-3 ;; --- 263,267 ---- ## Cubix QBx/386 ! i[3456]86-cubix-sysv* ) machine=intel386 opsys=usg5-3 ;; *************** case "${canonical}" in *** 440,447 **** ## IBM machines ! i[345]86-ibm-aix1.1* ) machine=ibmps2-aix opsys=usg5-2-2 ;; ! i[345]86-ibm-aix1.[23]* | i[345]86-ibm-aix* ) machine=ibmps2-aix opsys=usg5-3 ;; --- 442,449 ---- ## IBM machines ! i[3456]86-ibm-aix1.1* ) machine=ibmps2-aix opsys=usg5-2-2 ;; ! i[3456]86-ibm-aix1.[23]* | i[3456]86-ibm-aix* ) machine=ibmps2-aix opsys=usg5-3 ;; *************** case "${canonical}" in *** 495,509 **** ## Intel 386 machines where we do care about the manufacturer ! i[345]86-intsys-sysv* ) machine=is386 opsys=usg5-2-2 ;; ## Prime EXL ! i[345]86-prime-sysv* ) machine=i386 opsys=usg5-3 ;; ## Sequent Symmetry running Dynix ! i[345]86-sequent-bsd* ) machine=symmetry opsys=bsd4-3 ;; --- 497,511 ---- ## Intel 386 machines where we do care about the manufacturer ! i[3456]86-intsys-sysv* ) machine=is386 opsys=usg5-2-2 ;; ## Prime EXL ! i[3456]86-prime-sysv* ) machine=i386 opsys=usg5-3 ;; ## Sequent Symmetry running Dynix ! i[3456]86-sequent-bsd* ) machine=symmetry opsys=bsd4-3 ;; *************** case "${canonical}" in *** 511,522 **** ## Sequent Symmetry running DYNIX/ptx ## Use the old cpp rather than the newer ANSI one. ! i[345]86-sequent-ptx* ) machine=sequent-ptx opsys=ptx NON_GNU_CPP="/lib/cpp" ;; ## Unspecified sysv on an ncr machine defaults to svr4.2. ## (Plain usg5-4 doesn't turn on POSIX signals, which we need.) ! i[345]86-ncr-sysv* ) machine=ncr386 opsys=usg5-4-2 ;; --- 513,529 ---- ## Sequent Symmetry running DYNIX/ptx ## Use the old cpp rather than the newer ANSI one. ! i[3456]86-sequent-ptx* ) machine=sequent-ptx opsys=ptx NON_GNU_CPP="/lib/cpp" ;; + ## ncr machine running svr4.3. + i[3456]86-ncr-sysv4.3 ) + machine=ncr386 opsys=usg5-4-3 + ;; + ## Unspecified sysv on an ncr machine defaults to svr4.2. ## (Plain usg5-4 doesn't turn on POSIX signals, which we need.) ! i[3456]86-ncr-sysv* ) machine=ncr386 opsys=usg5-4-2 ;; *************** case "${canonical}" in *** 647,651 **** ;; mips-sgi-irix6* ) ! machine=iris4d opsys=irix6-0 NON_GNU_CPP=/lib/cpp ;; mips-sgi-irix5.[01]* ) --- 654,660 ---- ;; mips-sgi-irix6* ) ! machine=iris4d opsys=irix6-0 ! NON_GNU_CPP=/lib/cpp ! NON_GCC_TEST_OPTIONS=-32 ;; mips-sgi-irix5.[01]* ) *************** case "${canonical}" in *** 679,688 **** ## Suns ! sparc-*-linux* | sparc-*-lignux* ) ! machine=sparc opsys=lignux ;; *-sun-sunos* | *-sun-bsd* | *-sun-solaris* \ ! | i[345]86-*-solaris2* | i[345]86-*-sunos5* | powerpc*-*-solaris2* \ | rs6000-*-solaris2*) case "${canonical}" in --- 688,697 ---- ## Suns ! sparc-*-linux-gnu* ) ! machine=sparc opsys=gnu-linux ;; *-sun-sunos* | *-sun-bsd* | *-sun-solaris* \ ! | i[3456]86-*-solaris2* | i[3456]86-*-sunos5* | powerpc*-*-solaris2* \ | rs6000-*-solaris2*) case "${canonical}" in *************** case "${canonical}" in *** 690,696 **** m68*-sunos2* ) machine=sun2 ;; m68* ) machine=sun3 ;; ! i[345]86-sun-sunos[34]* ) machine=sun386 ;; ! i[345]86-*-* ) machine=intel386 ;; ! powerpc* | rs6000* ) machine=rs6000 ;; sparc* ) machine=sparc ;; * ) unported=yes ;; --- 699,705 ---- m68*-sunos2* ) machine=sun2 ;; m68* ) machine=sun3 ;; ! i[3456]86-sun-sunos[34]* ) machine=sun386 ;; ! i[3456]86-*-* ) machine=intel386 ;; ! powerpc* | rs6000* ) machine=ibmrs6000 ;; sparc* ) machine=sparc ;; * ) unported=yes ;; *************** case "${canonical}" in *** 698,702 **** case "${canonical}" in ## The Sun386 didn't get past 4.0. ! i[345]86-*-sunos4 ) opsys=sunos4-0 ;; *-sunos4.0* ) opsys=sunos4-0 ;; *-sunos4.1.[3-9]* | *-sunos4shr*) --- 707,711 ---- case "${canonical}" in ## The Sun386 didn't get past 4.0. ! i[3456]86-*-sunos4 ) opsys=sunos4-0 ;; *-sunos4.0* ) opsys=sunos4-0 ;; *-sunos4.1.[3-9]* | *-sunos4shr*) *************** case "${canonical}" in *** 704,708 **** NON_GNU_CPP=/usr/lib/cpp ;; ! *-sunos4.1.[3-9]*-noshare ) opsys=sunos4-1-3 NON_GNU_CPP=/usr/lib/cpp --- 713,717 ---- NON_GNU_CPP=/usr/lib/cpp ;; ! *-sunos4.1.[3-9]*noshare ) opsys=sunos4-1-3 NON_GNU_CPP=/usr/lib/cpp *************** case "${canonical}" in *** 822,826 **** ## Intel 386 machines where we don't care about the manufacturer ! i[345]86-*-* ) machine=intel386 case "${canonical}" in --- 831,835 ---- ## Intel 386 machines where we don't care about the manufacturer ! i[3456]86-*-* ) machine=intel386 case "${canonical}" in *************** case "${canonical}" in *** 836,843 **** *-esix* ) opsys=esix ;; *-xenix* ) opsys=xenix ;; ! *-linux* | *-lignux* ) opsys=lignux ;; *-sco3.2v4* ) opsys=sco4 ; NON_GNU_CPP=/lib/cpp ;; *-bsd386* | *-bsdi1* ) opsys=bsd386 ;; ! *-bsdi2* ) opsys=bsdos2 ;; *-386bsd* ) opsys=386bsd ;; *-freebsd* ) opsys=freebsd ;; --- 845,859 ---- *-esix* ) opsys=esix ;; *-xenix* ) opsys=xenix ;; ! *-linux-gnu* ) opsys=gnu-linux ;; *-sco3.2v4* ) opsys=sco4 ; NON_GNU_CPP=/lib/cpp ;; + *-sco3.2v5* ) opsys=sco5 + NON_GNU_CPP=/lib/cpp + # Prevent -belf from being passed to $CPP. + # /lib/cpp does not accept it. + OVERRIDE_CPPFLAGS=" " + ;; *-bsd386* | *-bsdi1* ) opsys=bsd386 ;; ! *-bsdi2.0* ) opsys=bsdos2 ;; ! *-bsdi2* ) opsys=bsdos2-1 ;; *-386bsd* ) opsys=386bsd ;; *-freebsd* ) opsys=freebsd ;; *************** case "${canonical}" in *** 847,853 **** ;; ! ## Lignux/68k ! m68k-*-linux* | m68k-*-lignux* ) ! machine=m68k opsys=lignux ;; --- 863,869 ---- ;; ! ## Linux/68k-based GNU system ! m68k-*-linux-gnu* ) ! machine=m68k opsys=gnu-linux ;; *************** AC_CHECKING([the machine- and system-dep *** 1109,1113 **** ### The two are the same except on a few systems, where they are made ### different to work around various lossages. For example, ! ### GCC 2.5 on Lignux needs them to be different because it treats -g ### as implying static linking. --- 1125,1129 ---- ### The two are the same except on a few systems, where they are made ### different to work around various lossages. For example, ! ### GCC 2.5 on GNU/Linux needs them to be different because it treats -g ### as implying static linking. *************** LISP_FLOAT_TYPE=yes *** 1229,1233 **** #### Add the libraries to LIBS and check for some functions. ! CPPFLAGS="$c_switch_system $c_switch_machine $CPPFLAGS" LIBS="$libsrc_libs $LIBS" --- 1245,1254 ---- #### Add the libraries to LIBS and check for some functions. ! if test x"${OVERRIDE_CPPFLAGS}" != x; then ! CPPFLAGS="${OVERRIDE_CPPFLAGS}" ! else ! CPPFLAGS="$c_switch_system $c_switch_machine $CPPFLAGS" ! fi ! LIBS="$libsrc_libs $LIBS" *************** if test "${HAVE_X11}" = "yes"; then *** 1271,1275 **** fi ! if test "${opsys}" = "lignux"; then AC_MSG_CHECKING(whether X on GNU/Linux needs -b to link) AC_TRY_LINK([], --- 1292,1296 ---- fi ! if test "${opsys}" = "gnu-linux"; then AC_MSG_CHECKING(whether X on GNU/Linux needs -b to link) AC_TRY_LINK([], *************** fail; *** 1321,1325 **** fi ! if test x"${USE_X_TOOLKIT}" = xmaybe; then AC_MSG_CHECKING(X11 version 5) AC_TRY_LINK([#include ], --- 1342,1346 ---- fi ! if test "${window_system}" = "x11"; then AC_MSG_CHECKING(X11 version 5) AC_TRY_LINK([#include ], *************** if test x"${USE_X_TOOLKIT}" = xmaybe; th *** 1327,1335 **** fail; #endif ! ], [AC_MSG_RESULT(5 or newer; use toolkit by default) ! USE_X_TOOLKIT=LUCID AC_DEFINE(HAVE_X11R5)], ! [AC_MSG_RESULT(before 5; do not use toolkit by default) ! USE_X_TOOLKIT=none]) fi --- 1348,1375 ---- fail; #endif ! ], [AC_MSG_RESULT(5 or newer) ! HAVE_X11R5=yes AC_DEFINE(HAVE_X11R5)], ! [ ! HAVE_X11R5=no ! AC_MSG_RESULT(before 5)]) ! fi ! ! dnl Do not put whitespace before the #include statements below. ! dnl Older compilers (eg sunos4 cc) choke on it. ! if test x"${USE_X_TOOLKIT}" = xmaybe; then ! if test x"${HAVE_X11R5}" = xyes; then ! AC_MSG_CHECKING(X11 version 5 with Xaw) ! AC_TRY_LINK([ ! #include ! #include ], ! [], ! [AC_MSG_RESULT(5 or newer, with Xaw; use toolkit by default) ! USE_X_TOOLKIT=LUCID], ! [AC_MSG_RESULT(before 5 or no Xaw; do not use toolkit by default) ! USE_X_TOOLKIT=none]) ! else ! USE_X_TOOLKIT=none ! fi fi *************** AC_CHECK_LIB(m, sqrt) *** 1376,1380 **** AC_CHECK_FUNCS(gettimeofday gethostname dup2 rename closedir mkdir rmdir \ random lrand48 bcopy bcmp logb frexp fmod ftime res_init setsid \ ! strerror fpathconf select mktime eaccess getpagesize tzset setlocale) # Check this now, so that we will NOT find the above functions in ncurses. --- 1416,1420 ---- AC_CHECK_FUNCS(gettimeofday gethostname dup2 rename closedir mkdir rmdir \ random lrand48 bcopy bcmp logb frexp fmod ftime res_init setsid \ ! strerror fpathconf select mktime euidaccess getpagesize tzset setlocale) # Check this now, so that we will NOT find the above functions in ncurses. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/ChangeLog emacs-19.32/etc/ChangeLog *** emacs-19.31/etc/ChangeLog Sat May 25 15:30:35 1996 --- emacs-19.32/etc/ChangeLog Wed Jul 31 15:11:06 1996 *************** *** 1,2 **** --- 1,11 ---- + Wed Jul 31 13:52:46 1996 Richard Stallman + + * Version 19.32 released. + + Sun Jun 23 17:12:11 1996 Richard Stallman + + * refcard.ps: File obtained from someone else; + it was generated badly here. + Sat May 25 15:30:10 1996 Karl Heuer diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/FAQ emacs-19.32/etc/FAQ *** emacs-19.31/etc/FAQ Thu Apr 11 18:55:24 1996 --- emacs-19.32/etc/FAQ Sat Jul 20 14:25:47 1996 *************** General Questions *** 491,499 **** E-mail address: gnu@prep.ai.mit.edu ! Phone number: (617) 876-3296 Postal address: Free Software Foundation, Inc. ! 675 Massachusetts Avenue ! Cambridge, MA 02139, USA For details on how to order, see the file etc/ORDERS. --- 491,499 ---- E-mail address: gnu@prep.ai.mit.edu ! Phone number: (617) 542-5942 Postal address: Free Software Foundation, Inc. ! 59 Temple Place - Suite 330 ! Boston, MA 02111-1307, USA. For details on how to order, see the file etc/ORDERS. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/FTP emacs-19.32/etc/FTP *** emacs-19.31/etc/FTP Mon Apr 22 19:38:00 1996 --- emacs-19.32/etc/FTP Fri Jul 19 01:59:09 1996 *************** The files are available via anonymous ft *** 146,190 **** Emacs and other GNU programs may be available via anonymous ftp from ! these US sites: ftp.kpc.com:/pub/mirror/gnu (Silicon Valley, CA) ! ftp.hawaii.edu:/mirrors/gnu, f.ms.uky.edu:/pub3/gnu, ! ftp.digex.net:/pub/gnu (Internet address 164.109.10.23, nightly full ! mirror, ran by mcguire@digex.net), wuarchive.wustl.edu:/systems/gnu, ! uiarchive.cso.uiuc.edu:/pub/gnu (Internet address 128.174.5.14, ! nightly full mirror, ran by ftpadmin@uiuc.edu), ! ftp.cs.columbia.edu:/archives/gnu/prep, jaguar.utah.edu:/gnustuff, ! gatekeeper.dec.com:/pub/GNU, labrea.stanford.edu, ! archive.cis.ohio-state.edu, and ftp.uu.net:/archive/systems/gnu. ! And these foreign sites: ftp.cs.ubc.ca:/mirror2/gnu (Western Canada, daily full mirror, ran by ftp-admin@cs.ubc.ca), ! ftp.inf.utfsm.cl:/pub/gnu (Chile 146.83.198.3 nightly full mirror, ran ! by ftp@inf.utfsm.cl), ftp.unicamp.br:/pub/gnu (Brazil manual mirror, ! ran by oliva@dcc.unicamp.br), archie.au:/gnu (Australia (archie.oz or ! archie.oz.au for ACSnet)), ftp.technion.ac.il:/pub/unsupported/gnu ! (Israel, daily full mirror, ran by ftp-admin), ftp.sun.ac.za:/pub/gnu ! (South Africa), ftp.etsimo.uniovi.es:/pub/gnu (Spain), ! ftp.mcc.ac.uk:/pub/gnu (130.88.203.12 daily full mirror, ran by ! root@ftp.mcc.ac.uk), unix.hensa.ac.uk:/mirrors/uunet/systems/gnu, ! ftp.warwick.ac.uk (137.205.192.14 daily full mirror, ran by ! unixhelp@warwick.ac.uk), ftp.informatik.tu-muenchen.de, ! ftp.informatik.rwth-aachen.de, or germany.eu.net (mirror ran by ! archive-admin@germany.eu.net) (Germany), isy.liu.se (Sweden), ! ftp.stacken.kth.se or ftp.luth.se:/pub/unix/gnu (Sweden), ! ftp.sunet.se:/pub/gnu (Sweden 130.238.127.3 daily mirror, ran by ! archive@ftp.sunet.se (also mirrors the Mailing List Archives) ! ftp.nl.net (Netherlands), ftp.win.tue.nl:/pub/gnu (Netherlands ! 131.155.70.100 daily mirror, ran by ftp@win.tue.nl), ! ftp.funet.fi:/pub/gnu (Finland 128.214.6.100, ran by gnu-adm), ! ftp.denet.dk (Denmark), ugle.unit.no (Norway 129.241.1.97), ! ftp.eunet.ch or nic.switch.ch:/mirror/gnu (Switzerland), ! irisa.irisa.fr:/pub/gnu or ftp.univ-lyon1.fr:pub/gnu (ran by ftpmaint@ftp.univ-lyon1.fr) (France), ftp.ieunet.ie:pub/gnu (Ireland 192.111.39.1 weekly mirror, ran by archive@ieunet.ie), archive.eu.net ! (Europe 192.16.202.1), cair-archive.kaist.ac.kr:/pub/gnu (Korea 143.248.11.171, ran by ftpkeeper@cair-archive.kaist.ac.kr), ! ftp.nectec.or.th:/pub/mirrors/gnu (Thailand 192.150.251.32 daily mirror, ran by ftp@nwg.nectec.or.th), ! utsun.s.u-tokyo.ac.jp:/ftpsync/prep or ftp.cs.titech.ac.jp (Japan, ! nemacs, the japanese port of GNU Emacs, is under ~ftp/JAPAN). * Getting GNU software in Great Britain --- 146,193 ---- Emacs and other GNU programs may be available via anonymous ftp from ! these US sites: ftp.kpc.com/pub/mirror/gnu (Silicon Valley, CA) ! ftp.hawaii.edu/mirrors/gnu, f.ms.uky.edu/pub3/gnu, ! ftp.digex.net/pub/gnu (Internet address 164.109.10.23, nightly full ! mirror, ran by mcguire@digex.net), wuarchive.wustl.edu/systems/gnu, ! uiarchive.cso.uiuc.edu/pub/gnu (Internet address 128.174.5.14, nightly ! full mirror, ran by ftpadmin@uiuc.edu), ! ftp.cs.columbia.edu/archives/gnu/prep, jaguar.utah.edu/gnustuff, ! gatekeeper.dec.com/pub/GNU, labrea.stanford.edu, ! archive.cis.ohio-state.edu, and ftp.uu.net/archive/systems/gnu. ! And these foreign sites: ftp.cs.ubc.ca/mirror2/gnu (Western Canada, daily full mirror, ran by ftp-admin@cs.ubc.ca), ! ftp.inf.utfsm.cl/pub/gnu (Chile 146.83.198.3 nightly full mirror, ran ! by ftp@inf.utfsm.cl), ftp.unicamp.br/pub/gnu (Brazil manual mirror, ! ran by oliva@dcc.unicamp.br), archie.au/gnu (Australia ran by ! gnu@archie.au (archie.oz or archie.oz.au for ACSnet)), ! ftp.technion.ac.il/pub/unsupported/gnu (Israel, daily full mirror, ran ! by ftp-admin), ftp.sun.ac.za/pub/gnu (South Africa), ! ftp.etsimo.uniovi.es/pub/gnu (Spain), ftp.mcc.ac.uk/pub/gnu ! (130.88.203.12 daily full mirror, ran by root@ftp.mcc.ac.uk), ! unix.hensa.ac.uk/mirrors/uunet/systems/gnu, ftp.warwick.ac.uk ! (137.205.192.14 daily full mirror, ran by unixhelp@warwick.ac.uk), ! ftp.informatik.tu-muenchen.de, ftp.informatik.rwth-aachen.de (Germany, ! ran by sunsite@sunsite.informatik.rwth-aachen.de), germany.eu.net ! (Germany, ran by archive-admin@germany.eu.net), isy.liu.se (Sweden, ! ran by ftpadm@isy.liu.se), ftp.stacken.kth.se or ! ftp.luth.se/pub/unix/gnu (Sweden), ftp.sunet.se/pub/gnu (Sweden ! 130.238.127.3 daily mirror, ran by archive@ftp.sunet.se (also mirrors ! the Mailing List Archives) ftp.nl.net (Netherlands), ! ftp.win.tue.nl/pub/gnu (Netherlands 131.155.70.100 daily mirror, ran ! by ftp@win.tue.nl), ftp.funet.fi/pub/gnu (Finland 128.214.6.100, ran ! by gnu-adm), ftp.denet.dk (Denmark), ugle.unit.no (Norway ! 129.241.1.97), ftp.eunet.ch or nic.switch.ch/mirror/gnu (Switzerland), ! irisa.irisa.fr/pub/gnu or ftp.univ-lyon1.fr:pub/gnu (ran by ftpmaint@ftp.univ-lyon1.fr) (France), ftp.ieunet.ie:pub/gnu (Ireland 192.111.39.1 weekly mirror, ran by archive@ieunet.ie), archive.eu.net ! (Europe 192.16.202.1), cair-archive.kaist.ac.kr/pub/gnu (Korea 143.248.11.171, ran by ftpkeeper@cair-archive.kaist.ac.kr), ! ftp.nectec.or.th/pub/mirrors/gnu (Thailand 192.150.251.32 daily mirror, ran by ftp@nwg.nectec.or.th), ! tron.um.u-tokyo.ac.jp/pub/GNU/prep (Japan - ran by ! ftp-admin@tron.um.u-tokyo.ac.jp) or ftp.cs.titech.ac.jp (Japan, ran by ! ftp-admin@cs.titech.ac.jp - nemacs, the japanese port of GNU Emacs, is ! under ~ftp/JAPAN). * Getting GNU software in Great Britain diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/LINUX-GNU emacs-19.32/etc/LINUX-GNU *** emacs-19.31/etc/LINUX-GNU Sun May 19 18:50:49 1996 --- emacs-19.32/etc/LINUX-GNU Sat Jun 29 02:43:23 1996 *************** Ghostscript. The components in this las *** 15,24 **** The GNU system consists of all three categories together. ! The GNU project is not just about developing and distributing free ! software. The heart of the GNU project is an idea: that software ! should be free, and that the users' freedom is worth defending. For ! if people have freedom but do not value it, they will not keep it for ! long. In order to make freedom last, we have to teach people to value ! it. The GNU project's method is that free software and the idea of users' --- 15,25 ---- The GNU system consists of all three categories together. ! The GNU project is not just about developing and distributing some ! useful free software. The heart of the GNU project is an idea: that ! software should be free, and that the users' freedom is worth ! defending. For if people have freedom but do not consciously ! appreciate it, they will not keep it for long. If we want to make ! freedom last, we need to call people's attention to the freedoms they ! have in free software. The GNU project's method is that free software and the idea of users' *************** freedom support each other. We develop *** 26,60 **** encounter GNU programs or the GNU system and start to use them, they also think about the GNU idea. The software shows that the idea can ! work in practice. People who come to agree with the idea are likely ! to write additional free software. Thus, the software embodies the ! idea, spreads the idea, and grows from the idea. ! ! This method was working well--until someone combined the Linux kernel ! with the GNU system (which still lacked a kernel), and called the ! combination a "Linux system." ! ! The Linux kernel is a free Unix-compatible kernel written by Linus ! Torvalds. It was not written specifically for the GNU project, but ! the Linux kernel and the GNU system work together well. In fact, ! adding Linux to the GNU system brought the system to completion: it ! made a free Unix-compatible operating system available for use. ! ! But ironically, the practice of calling it a "Linux system" undermines ! our method of communicating the GNU idea. At first impression, a ! "Linux system" sounds like something completely distinct from the "GNU ! system." And that is what most users think it is. Most introductions to the "Linux system" acknowledge the role played by the GNU software components. But they don't say that the system as ! a whole is more or less the same GNU system that the GNU project has ! been compiling for a decade. They don't say that the idea of a free ! Unix-like system originates from the GNU project. So most users don't ! know these things. ! ! This leads many of those users to identify themselves as a separate ! community of "Linux users", distinct from the GNU user community. ! They use all of the GNU software; in fact, they use almost all of the ! GNU system; but they don't think of themselves as GNU users, and they ! may not think about the GNU idea. It leads to other problems as well--even hampering cooperation on --- 27,74 ---- encounter GNU programs or the GNU system and start to use them, they also think about the GNU idea. The software shows that the idea can ! work in practice. Some of these people come to agree with the idea, ! and then they are more likely to write additional free software. ! Thus, the software embodies the idea, spreads the idea, and grows from ! the idea. ! ! By 1992, we had found or written all of the essential major components ! of the system except the kernel, which we were writing. (This kernel ! consists of the Mach microkernel plus the GNU HURD. Currently it is ! running but not ready for users. We are hoping for an alpha release ! soon.) ! ! Then the Linux kernel became available. Linux is a free ! Unix-compatible kernel initially written by Linus Torvalds. It was ! not written for the GNU project, but Linux and the almost-complete GNU ! system made a useful combination. This combination provided all the ! major essential components of a Unix-compatible operating system, and ! with some work, people made it into a usable system. It was a variant ! GNU system, based on the Linux kernel. ! ! Ironically, the popularity of these systems undermines our method of ! communicating the GNU idea to people who use GNU. These systems are ! mostly the same as the GNU system--the main difference being the ! choice of kernel. But people usually call them "Linux systems". At ! first impression, a "Linux system" sounds like something completely ! distinct from the "GNU system," and that is what most users think it ! is. Most introductions to the "Linux system" acknowledge the role played by the GNU software components. But they don't say that the system as ! a whole is a variant of the GNU system that the GNU project has been ! compiling for a decade. They don't say that the goal of a free ! Unix-like system like this one came from the GNU project. So most ! users don't know these things. ! ! Since human beings tend to correct their first impressions less than ! subsequent information calls for, those users who later learn about ! the relationship between these systems and the GNU project still often ! underestimate it. ! ! This leads many users to identify themselves as a separate community ! of "Linux users", distinct from the GNU user community. They use all ! of the GNU software; in fact, they use almost all of the GNU system; ! but they don't think of themselves as GNU users, and often they don't ! think that the GNU idea relates to them. It leads to other problems as well--even hampering cooperation on *************** software maintenance. Normally when use *** 62,67 **** make it work better on a particular system, they send the change to the maintainer of that program; then they work with the maintainer, ! explaining the change, arguing for it and sometimes rewriting it, to ! get it installed. But people who think of themselves as "Linux users" are more likely to --- 76,82 ---- make it work better on a particular system, they send the change to the maintainer of that program; then they work with the maintainer, ! explaining the change, arguing for it, and sometimes rewriting it for ! the sake of the overall coherence and maintainability of the package, ! to get the patch installed. But people who think of themselves as "Linux users" are more likely to *************** box" on Linux-based systems; but if the *** 71,76 **** becomes much harder to achieve. ! So how should the GNU project respond? What should we do now to ! spread the idea that freedom for computer users is important? We should continue to talk about the freedom to share and change --- 86,91 ---- becomes much harder to achieve. ! How should the GNU project deal with this problem? What should we do ! now to spread the idea that freedom for computer users is important? We should continue to talk about the freedom to share and change *************** encouraging others to write additional f *** 82,95 **** additional proprietary software. ! We should not accept the splitting of the community in two. Instead ! we should spread the word that "Linux systems" are variant GNU ! systems--that users of these systems are GNU users, and that they ! ought to consider the GNU philosophy which brought these systems into ! existence. ! ! This article is one way of doing that. Another way is to use the ! terms "Linux-based GNU system" (or "GNU/Linux system" or "Lignux" for ! short) to refer to the combination of the Linux kernel and the GNU ! system. Copyright 1996 Richard Stallman --- 97,111 ---- additional proprietary software. ! We should not accept the idea of two separate communities for GNU and ! Linux. Instead we should spread understanding that "Linux systems" ! are variants of the GNU system, and that the users of these systems ! are as GNU users as well as Linux users (users of the Linux kernel). ! Users who know this will naturally tend to take a look at the GNU ! philosophy which brought these systems into existence. ! ! I've written this article as one way of doing that. Another way is to ! use the terms "Linux-based GNU system" or "GNU/Linux system", instead ! of "Linux system," when you write about or mention such a system. ! Copyright 1996 Richard Stallman diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/MACHINES emacs-19.32/etc/MACHINES *** emacs-19.31/etc/MACHINES Sun Apr 28 01:51:21 1996 --- emacs-19.32/etc/MACHINES Thu Jul 11 20:34:25 1996 *************** Hewlett-Packard 9000 series 200 or 300 ( *** 352,356 **** Version 19 works under BSD. The 19.26 pretest was reported ! to work on HPUX 9. These machines are 68000-series CPUs running HP/UX --- 352,357 ---- Version 19 works under BSD. The 19.26 pretest was reported ! to work on HPUX 9. 19.31 works on HPUX 10.01, but there are ! some problems on 10.10 which have not been resolved. These machines are 68000-series CPUs running HP/UX *************** HP 9000 series 700 or 800 (Spectrum) (hp *** 430,436 **** this patch by using telnet to access the machine support.mayfield.hp.com and logging in as "hpslreg" and following ! the instructions there. Do not ask FSF for further support on ! this. If you have any trouble obtaining the patch, contact HP ! Software Support. If your buffer fills up with nulls (^@) at some point, it could well --- 431,442 ---- this patch by using telnet to access the machine support.mayfield.hp.com and logging in as "hpslreg" and following ! the instructions there. Or you may be able to use this ! web site: ! ! HP Patch Server: http://support.mayfield.hp.com/patches/html/patches.html ! HP Support Line: http://support.mayfield.hp.com ! ! Please do not ask FSF for further support on this. If you have any ! trouble obtaining the patch, contact HP Software Support. If your buffer fills up with nulls (^@) at some point, it could well *************** IBM RS/6000 (rs6000-ibm-aix*) *** 485,489 **** There are reports that IBM compiler versions earlier than 1.03.00.02 ! fail even without -O. As of 19.11, if you strip the Emacs executable, it ceases to work. --- 491,496 ---- There are reports that IBM compiler versions earlier than 1.03.00.02 ! fail even without -O. However, another report said that compiler ! version 1.02.01.00 did work, on AIX 3.2.4, with Emacs 19.31. As of 19.11, if you strip the Emacs executable, it ceases to work. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/MAILINGLISTS emacs-19.32/etc/MAILINGLISTS *** emacs-19.31/etc/MAILINGLISTS Thu May 23 20:05:27 1996 --- emacs-19.32/etc/MAILINGLISTS Wed Jun 19 23:27:01 1996 *************** *** 1,3 **** ! GNU Project Electronic Mailing Lists. Last Updated 4 Mar 96 Please report improvements to: gnu@prep.ai.mit.edu --- 1,4 ---- ! GNU Project Electronic Mailing Lists and gnUSENET Newsgroups ! Last Updated 19 Jun 96 Please report improvements to: gnu@prep.ai.mit.edu Only in emacs-19.31/etc: MSDOS diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/NEWS emacs-19.32/etc/NEWS *** emacs-19.31/etc/NEWS Wed May 15 10:51:58 1996 --- emacs-19.32/etc/NEWS Thu Aug 1 00:58:41 1996 *************** *** 1,3 **** ! GNU Emacs NEWS -- history of user-visible changes. 15 May 1996 Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc. See the end for copying conditions. --- 1,3 ---- ! GNU Emacs NEWS -- history of user-visible changes. 1 Aug 1996 Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc. See the end for copying conditions. *************** Please send Emacs bug reports to bug-gnu *** 6,9 **** --- 6,274 ---- For older news, see the file ONEWS. + * Editing Changes in Emacs 19.32 + + ** C-x f with no argument now signals an error. + To set the fill column at the current column, use C-u C-x f. + + ** Expanding dynamic abbrevs with M-/ is now smarter about case + conversion. If you type the abbreviation with mixed case, and it + matches the beginning of the expansion including case, then the + expansion is copied verbatim. Using SPC M-/ to copy an additional + word always copies it verbatim except when the previous copied word is + all caps. + + ** On a non-windowing terminal, which can display only one Emacs frame + at a time, creating a new frame with C-x 5 2 also selects that frame. + + When using a display that can show multiple frames at once, C-x 5 2 + does make the frame visible, but does not select it. This is the same + as in previous Emacs versions. + + ** You can use C-x 5 2 to create multiple frames on MSDOS, just as on a + non-X terminal on Unix. Of course, only one frame is visible at any + time, since your terminal doesn't have the ability to display multiple + frames. + + ** On Windows, set win32-pass-alt-to-system to a non-nil value + if you would like tapping the Alt key to invoke the Windows menu. + This feature is not enabled by default; since the Alt key is also the + Meta key, it is too easy and painful to activate this feature by + accident. + + ** The command apply-macro-to-region-lines repeats the last defined + keyboard macro once for each complete line within the current region. + It does this line by line, by moving point to the beginning of that + line and then executing the macro. + + This command is not new, but was never documented before. + + ** You can now use Mouse-1 to place the region around a string constant + (something surrounded by doublequote characters or other delimiter + characters of like syntax) by double-clicking on one of delimiting + characters. + + ** Font Lock mode + + *** Font Lock support modes + + Font Lock can be configured to use Fast Lock mode and Lazy Lock mode (see + below) in a flexible way. Rather than adding the appropriate function to the + hook font-lock-mode-hook, you can use the new variable font-lock-support-mode + to control which modes have Fast Lock mode or Lazy Lock mode turned on when + Font Lock mode is enabled. + + For example, to use Fast Lock mode when Font Lock mode is turned on, put: + + (setq font-lock-support-mode 'fast-lock-mode) + + in your ~/.emacs. + + *** lazy-lock + + The lazy-lock package speeds up Font Lock mode by making fontification occur + only when necessary, such as when a previously unfontified part of the buffer + becomes visible in a window. When you create a buffer with Font Lock mode and + Lazy Lock mode turned on, the buffer is not fontified. When certain events + occur (such as scrolling), Lazy Lock makes sure that the visible parts of the + buffer are fontified. Lazy Lock also defers on-the-fly fontification until + Emacs has been idle for a given amount of time. + + To use this package, put in your ~/.emacs: + + (setq font-lock-support-mode 'lazy-lock-mode) + + To control the package behaviour, see the documentation for `lazy-lock-mode'. + + ** Changes in BibTeX mode. + + *** For all entries allow spaces and tabs between opening brace or + paren and key. + + *** Non-escaped double-quoted characters (as in `Sch"of') are now + supported. + + ** Gnus changes. + + Gnus, the Emacs newsreader, has undergone further rewriting. Many new + commands and variables have been added. There should be no + significant incompatibilities between this Gnus version and the + previously released version, except in the message composition area. + + Below is a list of the more user-visible changes. Coding changes + between Gnus 5.1 and 5.2 are more extensive. + + *** A new message composition mode is used. All old customization + variables for mail-mode, rnews-reply-mode and gnus-msg are now + obsolete. + + *** Gnus is now able to generate "sparse" threads -- threads where + missing articles are represented by empty nodes. + + (setq gnus-build-sparse-threads 'some) + + *** Outgoing articles are stored on a special archive server. + + To disable this: (setq gnus-message-archive-group nil) + + *** Partial thread regeneration now happens when articles are + referred. + + *** Gnus can make use of GroupLens predictions: + + (setq gnus-use-grouplens t) + + *** A trn-line tree buffer can be displayed. + + (setq gnus-use-trees t) + + *** An nn-like pick-and-read minor mode is available for the summary + buffers. + + (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode) + + *** In binary groups you can use a special binary minor mode: + + `M-x gnus-binary-mode' + + *** Groups can be grouped in a folding topic hierarchy. + + (add-hook 'gnus-group-mode-hook 'gnus-topic-mode) + + *** Gnus can re-send and bounce mail. + + Use the `S D r' and `S D b'. + + *** Groups can now have a score, and bubbling based on entry frequency + is possible. + + (add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group) + + *** Groups can be process-marked, and commands can be performed on + groups of groups. + + *** Caching is possible in virtual groups. + + *** nndoc now understands all kinds of digests, mail boxes, rnews news + batches, ClariNet briefs collections, and just about everything else. + + *** Gnus has a new backend (nnsoup) to create/read SOUP packets. + + *** The Gnus cache is much faster. + + *** Groups can be sorted according to many criteria. + + For instance: (setq gnus-group-sort-function 'gnus-group-sort-by-rank) + + *** New group parameters have been introduced to set list-address and + expiry times. + + *** All formatting specs allow specifying faces to be used. + + *** There are several more commands for setting/removing/acting on + process marked articles on the `M P' submap. + + *** The summary buffer can be limited to show parts of the available + articles based on a wide range of criteria. These commands have been + bound to keys on the `/' submap. + + *** Articles can be made persistent -- as an alternative to saving + articles with the `*' command. + + *** All functions for hiding article elements are now toggles. + + *** Article headers can be buttonized. + + (add-hook 'gnus-article-display-hook 'gnus-article-add-buttons-to-head) + + *** All mail backends support fetching articles by Message-ID. + + *** Duplicate mail can now be treated properly. See the + `nnmail-treat-duplicates' variable. + + *** All summary mode commands are available directly from the article + buffer. + + *** Frames can be part of `gnus-buffer-configuration'. + + *** Mail can be re-scanned by a daemonic process. + + *** Gnus can make use of NoCeM files to filter spam. + + (setq gnus-use-nocem t) + + *** Groups can be made permanently visible. + + (setq gnus-permanently-visible-groups "^nnml:") + + *** Many new hooks have been introduced to make customizing easier. + + *** Gnus respects the Mail-Copies-To header. + + *** Threads can be gathered by looking at the References header. + + (setq gnus-summary-thread-gathering-function + 'gnus-gather-threads-by-references) + + *** Read articles can be stored in a special backlog buffer to avoid + refetching. + + (setq gnus-keep-backlog 50) + + *** A clean copy of the current article is always stored in a separate + buffer to allow easier treatment. + + *** Gnus can suggest where to save articles. See `gnus-split-methods'. + + *** Gnus doesn't have to do as much prompting when saving. + + (setq gnus-prompt-before-saving t) + + *** gnus-uu can view decoded files asynchronously while fetching + articles. + + (setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view) + + *** Filling in the article buffer now works properly on cited text. + + *** Hiding cited text adds buttons to toggle hiding, and how much + cited text to hide is now customizable. + + (setq gnus-cited-lines-visible 2) + + *** Boring headers can be hidden. + + (add-hook 'gnus-article-display-hook 'gnus-article-hide-boring-headers) + + *** Default scoring values can now be set from the menu bar. + + *** Further syntax checking of outgoing articles have been added. + + The Gnus manual has been expanded. It explains all these new features + in greater detail. + + * Lisp Changes in Emacs 19.32 + + ** The function set-visited-file-name now accepts an optional + second argument NO-QUERY. If it is non-nil, then the user is not + asked for confirmation in the case where the specified file already + exists. + + ** The variable print-length applies to printing vectors and bitvectors, + as well as lists. + + ** The new function keymap-parent returns the parent keymap + of a given keymap. + + ** The new function set-keymap-parent specifies a new parent for a + given keymap. The arguments are KEYMAP and PARENT. PARENT must be a + keymap or nil. + + ** Sometimes menu keymaps use a command name, a symbol, which is really + an automatically generated alias for some other command, the "real" + name. In such a case, you should give that alias symbol a non-nil + menu-alias property. That property tells the menu system to look for + equivalent keys for the real name instead of equivalent keys for the + alias. + * Editing Changes in Emacs 19.31 *************** documentation of variables `mail-directo *** 170,174 **** skeletons with completing read for tags and attributes, typing named characters including optionally all 8bit characters, making tags invisible ! with optional alternate display text, skipping and deleting tag(pair)s Note: since Emacs' syntax feature cannot limit the special meaning of ', " and --- 435,439 ---- skeletons with completing read for tags and attributes, typing named characters including optionally all 8bit characters, making tags invisible ! with optional alternate display text, skipping and deleting tag(pair)s. Note: since Emacs' syntax feature cannot limit the special meaning of ', " and *************** headline or C-c u for unordered list (se *** 181,185 **** Text Properties / Face or M-g combinations create tags as applicable. Outline minor mode is supported and level 1 font-locking tries to ! fontify tag contents (which only works when they fit on one line due to a limitation in font-lock). --- 446,450 ---- Text Properties / Face or M-g combinations create tags as applicable. Outline minor mode is supported and level 1 font-locking tries to ! fontify tag contents (which only works when they fit on one line, due to a limitation in font-lock). *************** command M-x follow-delete-other-windows- *** 265,269 **** The hooks hs-hide-hooks and hs-show-hooks have been renamed ! to hs-hide-hook and hs-show-hook. to follow the convention for normal hooks. --- 530,534 ---- The hooks hs-hide-hooks and hs-show-hooks have been renamed ! to hs-hide-hook and hs-show-hook, to follow the convention for normal hooks. *************** call looks like this: *** 371,381 **** SECS says how many seconds of idleness should elapse before the timer ! happens. It may be an integer or a floating point number. When the timer becomes ripe, the action is to call FUNCTION with arguments ARGS. REPEAT, if non-nil, means this timer should be activated again each ! time Emacs becomes idle. If REPEAT is nil, the timer runs just once, ! the first time Emacs is idle for SECS seconds. *** post-command-idle-hook is now obsolete; you shouldn't use it at --- 636,654 ---- SECS says how many seconds of idleness should elapse before the timer ! runs. It may be an integer or a floating point number. When the timer becomes ripe, the action is to call FUNCTION with arguments ARGS. + Emacs becomes idle whenever it finishes executing a keyboard or mouse + command. It remains idle until it receives another keyboard or mouse + command. + REPEAT, if non-nil, means this timer should be activated again each ! time Emacs becomes idle and remains idle for SECS seconds The timer ! does not repeat if Emacs *remains* idle; it runs at most once after ! each time Emacs becomes idle. ! ! If REPEAT is nil, the timer runs just once, the first time Emacs is ! idle for SECS seconds. *** post-command-idle-hook is now obsolete; you shouldn't use it at *************** the tar file. *** 6182,6186 **** Copyright information: ! Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc. Permission is granted to anyone to make or distribute verbatim copies --- 6455,6459 ---- Copyright information: ! Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc. Permission is granted to anyone to make or distribute verbatim copies *************** Copyright (C) 1993, 1994, 1995 Free Soft *** 6195,6199 **** Local variables: ! mode: text end: --- 6468,6473 ---- Local variables: ! mode: outline ! paragraph-separate: "[ ]*$" end: diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/ORDERS.JAPAN emacs-19.32/etc/ORDERS.JAPAN *** emacs-19.31/etc/ORDERS.JAPAN Sat Mar 16 15:24:18 1996 --- emacs-19.32/etc/ORDERS.JAPAN Mon Jul 8 20:07:13 1996 *************** Prices and contents may change without n *** 35,41 **** yet to the Compiler Tools Binaries CD-ROM.) - * Source Code on Tape Y30,000 ________ __________ - (per tape; see the next page for more details.) - Emacs manual, with reference card Y3,700 ________ __________ (Eleventh Edition for Version 19.29) --- 35,38 ---- *************** number, and your signature. Bank transf *** 159,172 **** following account: ! Bank: Sanwa Bank ! Branch: Azabu Branch (#620) ! Account name: Free Software Foundation ! Account number: 3683216 Prices and contents may change without notice after June 30, 1996. All software and publications are distributed with permission to copy and to ! redistribute. Texinfo source for each manual is on the Source Code CD-ROM ! and/or on the appropriate tape. We will ship the latest version of each ! manual, unless you instruct us otherwise. The minimum order amount (before postage) is Y5,000. The FSF regrets that it --- 156,169 ---- following account: ! Bank: Sanwa Bank ! Branch: Azabu Branch (#620) ! Account name: Free Software Foundation ! Account number: 3683216 Prices and contents may change without notice after June 30, 1996. All software and publications are distributed with permission to copy and to ! redistribute. Texinfo source for each manual is on the Source Code CD-ROM. ! We will ship the latest version of each manual, unless you instruct us ! otherwise. The minimum order amount (before postage) is Y5,000. The FSF regrets that it *************** Stallman in Japan. The price for the co *** 183,222 **** For more information, contact the FSF directly. ! Software may also be ordered on magnetic tape. The following tape titles are ! available: ! * Lisps/Emacs ! * Languages ! * Utilities ! * Scheme ! * 4.4BSD-Lite ! * X11R6-Required ! X11R6-Optional ! X11R5-Required ! X11R5-Optional ! ! The following tape formats are available: ! ! Generic Unix tar 9-track 1600bpi 1/2" reel tape ! ! Generic Unix tar DAT 4mm cartridge tape ! ! Generic Unix tar Exabyte 8mm cartridge tape ! ! Sun Unix tar QIC-24 DC300XLP 1/4" cartridge tape ! (may also be read on other systems) ! ! HP Unix tar 16-track DC600HC 1/4" cartridge tape ! ! IBM RS/6000 Unix tar QIC-150 DC600A 1/4" cartridge tape ! (may also be read on other systems) ! ! VMS backup 9-track 1600bpi 1/2" reel tape ! (only two titles: GNU Emacs and GCC/GAS/Bison) ! ! Please indicate your desired tape titles and formats on a separate sheet of ! paper and fax that along with your order. If you need information regarding ! which programs are on which tapes, please consult the Japanese edition of the ! January 1996 GNU Bulletin. If you do not have a copy of the Japanese edition ! of the GNU Bulletin, please contact the FSF. For T-shirt orders, please circle desired color. --- 180,186 ---- For more information, contact the FSF directly. ! If you need further information about the FSF and it offerings, please consult ! the Japanese edition of the January 1996 GNU's Bulletin. If you do not have a ! copy of the Japanese edition of the GNU's Bulletin, please contact the FSF. For T-shirt orders, please circle desired color. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/SERVICE emacs-19.32/etc/SERVICE *** emacs-19.31/etc/SERVICE Sun Mar 10 07:42:09 1996 --- emacs-19.32/etc/SERVICE Fri Jul 26 10:22:05 1996 *************** *** 1,3 **** ! -*- text -*- GNU Service Directory --------------------- --- 1,3 ---- ! -*- text -*- GNU Service Directory --------------------- *************** For a current copy of this directory, or *** 39,43 **** --- 39,65 ---- ** Please keep the entries in this file alphabetical ** +  + Magnus Alvestad + + GNU Emacs, GCC, the Unix tools. + + Rates: Free, or from $50/hour. + + Entered: 1996-07-09 +  + AO UrbanSoft + St. Petersburg State University Science Campus + St. Petersburg, Russia + www.usoft.spb.ru + AO UrbanSoft packages, markets and supports + industry standard free software products, + including the Linux operating system and + TeX document compiler. + The company also provides programming + services based on TeX, HTML, WWW and Perl. + Rates approximately 20 USD per hour. + + Updated: 1996-06-26  Joseph Arceneaux *************** particular job. I am also very interest *** 66,72 **** selected non-profit organizations with worthy goals, I work for free. ! Updated: 17Oct95  ! Gerd Aschemann Osannstr. 49 D-64285 Darmstadt --- 88,94 ---- selected non-profit organizations with worthy goals, I work for free. ! Updated: 1995-10-17  ! Gerd Aschemann Osannstr. 49 D-64285 Darmstadt *************** http://www.informatik.th-darmstadt.de/~a *** 75,83 **** - System Administrator (UNIX) at CS Department, TU Darmstadt, Germany ! - 15 years expirience with CS, Systemadministration on different platforms ! - 8 years with UNIX/Networking/FreeWare/GNU/X11 ! - 6 years organizer of Operating Systems and Distributed Systems courses - Lectures on System and Network Administration ! - Platforms: Solaris, SunOS, Ultrix, OSF1, HP-UX, Linux, FreeBSD, AIX - Experience with parallel environments (Connection Machine, Meiko, Parsytec) - Consultant for other UNIX users at TU Darmstadt --- 97,106 ---- - System Administrator (UNIX) at CS Department, TU Darmstadt, Germany ! - 16 years expirience with CS, Systemadministration on different platforms ! - 9 years with UNIX/Networking/FreeWare/GNU/X11 ! - 7 years organizer of Operating Systems and Distributed Systems courses - Lectures on System and Network Administration ! - Platforms: Solaris, SunOS, Ultrix, OSF1, HP-UX, Linux, FreeBSD, AIX, SCO ! - Distributed Platforms and Information Systems (CORBA, WWW, Java, FTP) - Experience with parallel environments (Connection Machine, Meiko, Parsytec) - Consultant for other UNIX users at TU Darmstadt *************** Rates are at 100,-- DM (~60 US$) per hou *** 86,90 **** I am willing to travel for sufficiently large jobs. ! Updated: 17Oct95  Giuseppe Attardi --- 109,113 ---- I am willing to travel for sufficiently large jobs. ! Updated: 1996-06-24  Giuseppe Attardi *************** I-56125 Pisa, Italy *** 94,101 **** +39 50 887-244 ! GNU: help on obtaininig GNU, for italian sites. ! Updated: 5Apr94  James Craig Burley 97 Arrowhead Circle --- 117,232 ---- +39 50 887-244 ! GNU: help on obtaining GNU, for italian sites. ! Updated: 1994-04-05  + Basis Technology Corp. + One Kendall Square, Bldg 200 + Cambridge, MA 02139 + U.S.A. + + Tel: +1-617-252-5636 + Fax: +1-617-252-9150 + E-mail: + Web: http://www.basistech.com + + Technical Expertise: + Multilingual software development + Internationalization and localization of software products + International character encodings, including Unicode, ISO-10646, + ISO-2022, ISO-8859-n, JIS, KSC5601, BIG5, GB2312 + Translation of technical materials into Japanese, Korean, and Chinese + including HTML, SGML, RTF, MIF, etc. + + GNU-related Services: + Custom internationalization and localization of GNU software, or + applications developed using GNU tools (GCC, G++, Emacs Lisp, etc.) + Custom multilingual application development based on MULE. + + GNU Contributions: + Organized 1992, 1993, and 1994 fund-raising seminars and lecture + tours for FSF in Japan. + Negotiated book royalty agreements with Japanese publishers on + behalf of the FSF. + Negotiated hardware contributions from Japanese PC vendors to + the FSF. + + Contacts: + Carl Hoffman, Steve Cohen, or Karen Watts + + Entered: 1996-07-15 + ^_ + Laurent Bernardin + 16, rue Dicks + L-6944 Niederanven + Luxemburg + + +41 1 632 7469 + + Support and installation of all GNU software. + + Expertise: C, C++, Java, Motif, X, Unix administration, network security + + Rates: ~60 US$ / hour (Flux 2000.-) + + Entered: 1996-07-16 + ^_ + Paul Black + Sydney, Australia + + I am available for general consulting on GNU software. My specific + areas of interest are: + - general C, C++, ADA and APL programming + - Gnu/unix utilities + - Troff + - Real Time Software + - Linux + - IP Comms, SMTP, NNTP, HTTP and WWW + - Simulation + + I am happy to provide free consulting/services if the work is of the order of + a couple of hours. If more time is required, I am happy to negotiate depending + on the nature of the work, my indicative rate is $40 per hour. + + Entered: 1996-07-10 + ^_ + Keith Bostic + + I'm interested in supporting/extending the ex/vi editors, + which I wrote. On-site or by email, rates are based on the + project. + + Entered: 1996-07-15 + ^_ + Philip Brown + + (703) 893-8967 (prefer email) + Northern-VA, D.C. Area + Rates: $40/Hr; less for educational or charitable organizations + + Systems Supported: + HP9000/7xx running HP/UX 8.07 - 10.X + IBM RS6000 running AIX 3.2.X + Also SGI/Indy and Sun/Sparcs + + Software Supported: + Most all FSF (Gnu) software + esp. GCC, Emacs, Binutils, GS, etc... + + Statement: + + I'd be more than happy to assist anyone in my area with acquiring, + installing, and configuring any FSF tools/utilities on any of the + above systems. I can help with other systems but I won't make any + guarantees about them... I'm also willing to share my many years + of experience with anyone having difficulty with these tools. I've + been installing and using them for about 5 years now and I'll + swear by their quality and the people/principles that made them + available. + + Phil Brown + + Entered: 1996-07-15 + ^_ James Craig Burley 97 Arrowhead Circle *************** Expertise: *** 120,131 **** languages, and so on ! Rate: $70/hour -- willing to consider flat-fee arrangements ! Updated: 14Aug95  ! Michael I. Bushnell ! 545 Technology Square, NE43-426 ! Cambridge, MA 02139 ! (617) 253-8568 All GNU software: Installation, customization, answering simple or --- 251,264 ---- languages, and so on ! Rate: $90/hour -- willing to consider flat-fee arrangements ! Updated: 1996-06-26  ! Michael I. Bushnell, p/BSG ! Becket House ! 66 Highland Ave. No. 8 ! Somerville, MA 02143 ! (617) 623-0654 ! All GNU software: Installation, customization, answering simple or *************** I am willing to travel for sufficiently *** 141,152 **** Rates: $100/hr, negotiable, less for non-profit organizaions. ! Updated: 5Apr94  ! C2V Renaud Dumeur ! 82 bd Haussmann Michel Delval ! 75009 Paris Jean-Alain Le Borgne France ! Tel (1) 40.08.07.07 ! Fax (1) 43.87.35.99 We offer source or source+binary distribution, installation, training, --- 274,286 ---- Rates: $100/hr, negotiable, less for non-profit organizaions. ! Updated: 1996-07-09  ! C2V Michel Delval ! 82 bd Haussmann Jean-Alain Le Borgne ! 75008 Paris France ! Tel (33 1) 40.08.07.07 ! Fax (33 1) 43.87.35.99 ! Compuserve 100413,1012 We offer source or source+binary distribution, installation, training, *************** Rates: from 2000 FF/day to 150 000 FF/ye *** 165,169 **** educational institutions, add taxes and expenses. Ask for list. ! Entered: 5May94  Contributed Software --- 299,303 ---- educational institutions, add taxes and expenses. Ask for list. ! Updated: 1996-06-26  Contributed Software *************** sites and configuration management. Tra *** 186,191 **** Free Archive login for downloading on above modem numbers. ! Updated: 5Apr94  Stuart Cracraft 25682 Cresta Loma --- 320,352 ---- Free Archive login for downloading on above modem numbers. ! Updated: 1994-04-05 ! ^_ ! Kevin Cosgrove ! ! ! I can help folks with porting & installation of many GNU ! and X packages on a variety of Unix platforms. ! ! ! My rates depend on the scope of each project but range ! from $35 to $90 per hour. ! ! Entered: 1996-07-15  + Couvares Consulting + 146 Mill Lane + Amherst, MA 01002, USA + Phone: (413) 253-2589 + EMail: + Contact: Peter F. Couvares + + Type of support: We offer phone/email support, installation, ongoing + administration, training, programming, and specialized consulting for + free software and other UNIX systems. + + Sample prices: USD50/hour commercial, USA25/hour nonprofit, sliding scale for individuals. + + Entered: 1996-07-15 + ^- Stuart Cracraft 25682 Cresta Loma *************** to Solaris (System V Release 4). Experti *** 205,210 **** Customized programming also available. ! Entered: 5Apr94 !  Cygnus Support 1937 Landings Drive ...uunet!cygint!info --- 366,371 ---- Customized programming also available. ! Updated: 1996-06-26 ! ^_ Cygnus Support 1937 Landings Drive ...uunet!cygint!info *************** configurations. *** 229,243 **** Updated: 2Feb95  Edgar Der-Danieliantz ! P.O. Box 10 ! Yerevan 375009 AM ARMENIA ! ! Support for GCC (C & Objective C), X Window System, World Wide Web, x86-based embedded systems, logic programming, etc. ! Via Internet (mail, talk, irc, etc.) ! Experience: OS's: 4.3 & 4.4 BSD, SVR3.2 & 4.2, FreeBSD, Linux, --- 390,423 ---- Updated: 2Feb95 + ^_ + Marcus G. Daniels + 31060 S. Kaufman Rd. + Canby, OR 97013-9520 + (503) 651-2694 + + I can customize, extend, port, and repair many types of free software. + I maintain the CLISP Common Lisp implementation and contribute to + several GNU packages, such as Emacs. Ten years of C and Unix + experience. + + Consulting rates are negotiable, but starting at around $40 US/hr. + I like fixed price contracts. Commuting about the Pacific Northwest US + is practical for me and travel is fine for larger projects. + + Feel free to email me if you have a problem in mind or would like an + estimate. I may also be able to assist in redirecting you. + + Entered: 1996-07-15  Edgar Der-Danieliantz ! P.O. Box 10 ! Yerevan 375009 AM ARMENIA ! ! Support for GCC (C & Objective C), X Window System, World Wide Web, x86-based embedded systems, logic programming, etc. ! Via Internet (mail, talk, irc, etc.) ! Experience: OS's: 4.3 & 4.4 BSD, SVR3.2 & 4.2, FreeBSD, Linux, *************** Experience: *** 246,250 **** Bourne Shell, PostScript, HTML, Prolog. Platforms: Intel, SPARC, Mac, VAX, NeXT. ! Rates: Depending on type of work, appx $20/hour. Contact for more information. Negotiable for individuals and non-profit organizations. --- 426,430 ---- Bourne Shell, PostScript, HTML, Prolog. Platforms: Intel, SPARC, Mac, VAX, NeXT. ! Rates: Depending on type of work, appx $20/hour. Contact for more information. Negotiable for individuals and non-profit organizations. *************** Rates: Depending on type of work, appx $ *** 252,256 **** Payment by international wire transfer. ! Entered: 6Mar96  Free Software Association of Germany --- 432,436 ---- Payment by international wire transfer. ! Entered: 1996-03-06  Free Software Association of Germany *************** ert (24h Emergency *** 274,278 **** response team) : 300 US$ / hour ! Entered: 14Apr94  Noah Friedman --- 454,458 ---- response team) : 300 US$ / hour ! Entered: 1994-04-14  Noah Friedman *************** or anywhere accessible on the Internet. *** 297,304 **** to travel. ! Updated: 16Aug95  Ronald F. Guilmette ! Infinite Monkeys & Co. 1751 East Roseville Pkwy. #1828 Roseville, CA 95661 --- 477,484 ---- to travel. ! Updated: 1996-06-26  Ronald F. Guilmette ! RG Consulting 1751 East Roseville Pkwy. #1828 Roseville, CA 95661 *************** Other qualifications: *** 340,363 **** Rates: Variable depending upon contract duration. Call for quote. ! Updated: 23Sep95 !  ! Hundred Acre Consulting ! 1155 W Fourth St Ste 225 ! PO Box 6209 ! Reno NV 89513-6209 ! (702)-348-7299 ! Hundred Acre is a consulting group providing support and development ! services to organizations of all sizes. We support GNU C++ and C in ! particular, but also provide support for all other GNU software and ! certain non-GNU public domain software as well. We work on a "service ! contract" basis for support -- for a yearly fee, we provide multiple ! levels of email and toll free telephone support, and free updates and ! bug fixes. The highersupport levels have on-site support. Development ! is charged on either an hourly or fixed bid basis. ! ! Consulting rates: $70 to $90 per hour, or fixed bid. ! Support contracts: Several levels, from $495 to $90000 per year. ! ! Updated: 27Dec94  Interactive Information Limited --- 520,524 ---- Rates: Variable depending upon contract duration. Call for quote. ! Updated: 1996-06-26  Interactive Information Limited *************** You can contact us *** 384,415 **** Scotland ! Entered: 13Nov95  ! Scott D. Kalter 2032 Corral Canyon Malibu, CA 90265-9503 Home: (310) 456-0254 ! Very familiar with all levels of Elisp programming. Taught Emacs use ! and customization in universities and industry. Extensive ! troubleshooting and user support experience. Co-developed an ! object-oriented extension to Elisp (Eoops) that can be used for ! projects. Extensive Elisp level modification for rapid prototyping of ! designs used in groupware research. This includes the development of ! an infrastructure to support multiple, communicating Emacs processes. ! Prefer e-mail communication to telephone calls. ! Updated: 1996-07-15  KAMAN SCIENCES CORPORATION *************** hourly or as a fixed price contract. *** 433,438 **** Consulting rates: $70 to $200 per hour. ! Entered: 13Jan95 !  Scott J. Kramer P.O. Box 620207 --- 584,633 ---- Consulting rates: $70 to $200 per hour. ! Entered: 1995-01-13 ! ^_ ! Ehud Karni ! ! I am an UNIX system programmer. My skills include writing in C and scripts. ! ! In the GNU domain, I consider myself an expert on Emacs. I have written several ! packages in emacs-lisp (.el) including: better Hebrew support, another marking ! system, emulation for CDC full screen editor (FSE), COBOL mode, mathematical ! expression computing, and enhancements to vc.el (customization) and to ange-ftp ! (added Novell and NT operating systems). ! I have installed and tested Emacs and my el's on several machines: DG, ! HP, Alpha (OSF) and PC (DOS). ! I installed and worked with several other GNU packages - RCS, Gmake, GCC ! and more, but I'm not an expert in these packages. ! ! I work in Israel and my normal rate is $40 per hour. ! ! Entered: 1996-07-15 !  ! Joseph R. Kiniry ! Caltech Mailstop 256-80 http://www.cs.caltech.edu/~kiniry/ ! Pasadena, CA 91125 ! Phone: 818-395-6846 ! Fax: 818-792-4257 ! ! Long-term high-level consultant in a variety of domains. See ! http://www.cs.caltech.edu/~kiniry/resume.html for more information on ! professional and academic background. ! ! I provide installation, porting, debugging, customization, design, and ! development of GNU and other UNIX and non-UNIX software. I am or have ! been a certified developer with Microsoft, SunSoft, NeXT, and Amiga. ! I have a great deal of development and management experience and an ! extremely broad background which contributes to my excellent system ! integration capabilities. I have a special expertise and conduct ! research in distributed technologies. ! ! Time and material rates for local work vary regionally, but are ! currently $200 per hour on the west coast. Other rates apply for ! long-term jobs (day rates, travel, etc.) and remote work (usually 1/2 ! fee). I am interested in fixed-bid jobs and will work for lower rates ! for non-profit organizations and educational institutions. ! ! Entered: 1996-07-24 ! ^_ Scott J. Kramer P.O. Box 620207 *************** Systems Administration: Sun (SunOS & So *** 450,469 **** Rate: Task- and time-dependent; non-monetary offers accepted. ! Updated: 12Apr94 !  ! Fen Labalme ! http://www.smart.net/~bkuhn ! ! I am available for primarily Unix system administration consulting, including ! but not limited to installation, configuration and integration of GNU tools ! and other copy-lefted software such as GNU/Linux. ! ! I am particularly skilled at user hand-holding and assisting in the ! integration of GNU and other copy-lefted software into new environments that ! have not used such tools in the past. ! ! Please visit my homepage for more information on my background and skills. ! ! I am available for both 1099 (preferred) and W2 contracting in the Baltimore, ! MD metropolitan area. My rate is in the $40/hour range, depending on the ! circumstances. Rates for non-profit organizations are substantially lower, ! and possibly free. ! ! Entered: 1996-07-15 !  ! Fen Labalme ! CoMedia Consulting //www.comedia.com ! 40 Carl Street #4 ! San Francisco CA 94117 WE ARE EVERYWHERE ! (415) 731-1174 JUST SAY "KNOW" Consulting, installation, customization and training for GNU Emacs, ! and selected other GNU & network software. Design & implementation ! of free software projects, as well as software engineering & system ! design. I have been hacking Emacs since '76 when it was TECO and ^R ! macros (don't ask), and am inter/intra-network, UNIX & Web friendly. ! ! Rates: $75 hour & up, depending; flat rate jobs considered. ! Lower rates, barter or free for selected non-profits. ! Updated: 1996-07-15  Greg Lehey *************** products. *** 481,485 **** Experience: 20 years OS and compiler experience, portations of most ! GNU products. Author of ported software CD-ROM for Unix 4.2. Rates: Choice of DM 150 per hour or hotline rates 3 DM per minute + 10 --- 699,705 ---- Experience: 20 years OS and compiler experience, portations of most ! GNU products. Author of ported software CD-ROM for Unix 4.2, "Porting ! UNIX Software" (O'Reilly), "Installing and Running FreeBSD" and "The ! Complete FreeBSD" (both Walnut Creek). Rates: Choice of DM 150 per hour or hotline rates 3 DM per minute + 10 *************** DM per phone call. Quick questions may b *** 487,491 **** available for purchasers of LEMIS CD-ROMs. ! Updated: 21Feb95  Marty Leisner --- 707,711 ---- available for purchasers of LEMIS CD-ROMs. ! Updated: 1996-07-06  Marty Leisner *************** Degree : BS CS, Cornell University *** 500,538 **** Rates: $75/hr - - marty ! Updated: 15Apr94  Richard Levitte (in TeX: Richard Levitte ! Södra Långgatan 39, II S\"odra L{\aa}nggatan 39, II ! S-171 49 Solna S-171 49 Solna Sweden Sweden) ! Tel.nr.: +46 (8) 18 30 99 (there is an answering machine) ! e-mail: (preferred) ! What I do: ! Primarly I work on GNU software for VMS, both VAX and AXP. I ! also work on GNU stuff for Unix on occasion. I'm familiar with ! SunOS (version 4.x.x), BSD (version 4.2 and up), ! Ultrix (version 4.2 and up). ! I've been porting GNU Emacs to VMS since spring 1991. This ! includes versions 18.57 to 18.59 and version 19.22. ! I maintain GNU vmslib. Programs supported: ! GNU vmslib: extending, installation, upgrading aid, ! simple and complex questions, you name it. ! GNU Emacs: porting, extending, installation, upgrading aid, ! customization, simple or complex questions, ! training, you name it. ! GNU autoconf: porting, extending, installation, upgrading aid. ! GNU zip, diffutils, m4, patch, texinfo: ! porting, installation, upgrading aid. ! GNU C/C++: installation, upgrading aid. I might start to ! hack at it some day. The list of programs I currently support represents both my interests and --- 720,801 ---- Rates: $75/hr marty ! Updated: 1994-04-15 ! ^_ ! Rohan Lenard ! 32 Holtermann St, ! Crows Nest, NSW 2065 ! AUSTRALIA ! +61 411250024 ! ! * The person behind much of bug-g++@prep.ai.mit.edu interaction - also known ! as . ! ! * Interested in providing first line support down-under. ! ! Experience: 10+ years C/Unix, 6+ years C++ ! Extensive experience with GNU tools, cross-compilers, ! embedded/hosted systems, realtime, simulations, ! and military software. ! ! Degrees: BSc (CS), BE (Comms), University of Melbourne ! ! Rates: AUS $75+/hr neg. ! ! Entered: 1996-07-17 ! ^_ ! Reuven M. Lerner ! 17 Disraeli Street ! Haifa 34333 ! Israel ! Telephone: 04-824-2265 (within Israel) ! +972-4-824-2265 (outside of Israel) ! http://www.netvision.net.il/php/reuven ! ! - System and network administration, especially Linux systems and ! networks ! - Administration, training, and programming for Internet nodes and ! World-Wide Web sites ! - Installation, support and training in the use of Linux, Emacs, Perl, ! and other free software ! - Expertise in C, Emacs Lisp, and Perl ! ! Consulting rates: $50-75/hour, less for non-profit organizations. ! ! Entered: 1996-07-10  Richard Levitte (in TeX: Richard Levitte ! Levitte Programming Levitte Programming ! Spannvdgen 38, I Spannv\"agen 28, I ! S-161 43 Bromma S-161 43 Bromma Sweden Sweden) ! Tel.nr.: +46 (8) 26 52 47 (there is an answering machine) ! e-mail: What I do: ! Primarly I work on GNU software for VMS, both VAX and AXP. I ! also work on GNU stuff for Unix on occasion. I'm familiar with ! SunOS (version 4.x.x), BSD (version 4.2 and up), ! Ultrix (version 4.2 and up) and Linux/Slackware. ! I've been porting GNU Emacs to VMS since spring 1991. This ! includes versions 18.57 to 18.59 and versions 19.22 and 19.28. ! I've also ported a few other programs, most notably autoconf ! version 1.x. Version 2.x is underway at the time of updating ! this entry. ! I maintain GNU vmslib. Programs supported: ! GNU vmslib: extending, installation, upgrading aid, ! simple and complex questions, you name it. ! GNU Emacs: porting, extending, installation, upgrading aid, ! customization, simple or complex questions, ! training, you name it. ! GNU autoconf: porting, extending, installation, upgrading aid. ! GNU zip, diffutils, m4, patch, texinfo: ! porting, installation, upgrading aid. ! GNU C/C++: installation, upgrading aid. I might start to ! hack at it some day. The list of programs I currently support represents both my interests and *************** current priorities. Your interest and f *** 540,560 **** Experience: ! Fluent in C, C++, Emacs Lisp, Pascal as well as assembler ! on VAX, Motorola 680x0, Intel 8086 and 80x86. Modified key ! elements in Emacs (e.g., memory and process management) to work ! transparently on VMS. I have very good knowledge in the VMS ! operating system, as well as MS-DOS and IBM PC compatibles. ! I have worked for four and a half years as a VMS system manager. ! I've also provided consulting services on IBM PC compatibles, ! as well as held classes for IBM PC users. ! A reference list is available on request. Your Rate: ! $50-$80/hour (400-700 SEK in sweden), plus expenses. My rates ! are negotiable, depending on how interesting the project is to me. ! Entered: 18Aug94 !  Roland McGrath 545 Tech Sq, Rm 426 --- 803,885 ---- Experience: ! Fluent in TeX/LaTeX, C, C++, Perl, Emacs Lisp, Pascal as well as ! assembler on VAX, Motorola 680x0, Intel 8086 and 80x86. Modified ! key elements in Emacs (e.g., memory and process management) to ! work transparently on VMS. I have very good knowledge in the VMS ! operating system, as well as MS-DOS and IBM PC compatibles. ! I'm also knowledged in the a few Unix flavors. ! I have worked for four and a half years as a VMS system manager. ! I've also provided consulting services on IBM PC compatibles, ! as well as held classes for IBM PC users. ! A reference list is available on request. Your Rate: ! $70-$100/hour (500-800 SEK in sweden), plus expenses. My rates ! are negotiable, depending on how interesting the project is to me. ! $70-$100/hour (500-800 SEK in sweden), plus expenses. My rates ! are negotiable, depending on how interesting the project is to me. ! ! Updated: 1996-06-26 !  ! Gord Matzigkeit ! 2220 Capitol Hill Crescent http://www.enci.ucalgary.ca/~gord/ ! Calgary, Alberta T2M 4B9 Voice: (403) 282-1387 ! CANADA BBS: (403) 282-3919 ! ! I care more about people than I do computers. I enjoy helping novices ! learn more about free software, and I want to make free software fit ! *your needs* rather than vice versa. ! ! I am eager to help install badly-behaved source code packages, and have ! experience fixing them to conform to GNU standards. ! ! I am the maintainer of GNU dld and GNU libtool. I am very interested in ! dynamic technology, especially adaptive and highly flexible systems. ! ! I have administered free and proprietary systems in the departments of ! Civil, Electrical, and Undergraduate Engineering at the University of ! Calgary. I know how to diagnose a complex existing computer system and ! incrementally replace it with a superior free system without disrupting ! service. ! ! I have over 2 years of experience with all the major free operating ! systems: FreeBSD, GNU/Hurd, GNU/Linux, and NetBSD. I also have ! experience with some of the Project Athena distributed system tools: ! Hesiod, Kerberos 5, Moira, and Zephyr. ! ! I don't believe in making more money than I need. My rates start at ! $10/hr (dirt cheap). When I am not starving, I do not charge worthy ! non-profit organizations. ! ! Entered: 1996-07-15 ! ^_ ! Andrew McCallum ! 6623 Dalzell Place ! Pittsburgh, PA 15217 ! Home: (412) 422-0688 ! ! http://www.cs.rochester.edu/u/mccallum ! ! Services: Support, enhancements, new development in: ! GNU Objective C ! GNUstep, both graphical and non-graphical. ! GNUstep Base Library: libgnustep-base ! (especially Distributed Objects) ! Interface between Objective-C and Guile or TCL: libguileobjc. ! ! Experience: 10+ years of UNIX experience. ! Programming for NeXTSTEP since version 0.8, 1988. ! MA and PhD in Computer Science. ! Extensive work on GNU Objective C Runtime. ! Author of GNUstep Base Library, including Distributed Objects ! FSF Chief Maintainer of the GNUstep Project. ! Contributor to GCC, Emacs, Guile. ! C, Objective-C, Postscript, Scheme, Lisp, ELisp, Linux. ! English and Francais. + Rates: $90-$150 / hour, negotiable, depending on many variables. ! Entered: 1996-07-15 ! ^_ Roland McGrath 545 Tech Sq, Rm 426 *************** only jobs that either can be done entire *** 576,580 **** short-term, or that are very interesting. ! Updated: 21Jan95  Erik Naggum --- 901,905 ---- short-term, or that are very interesting. ! Updated: 1995-01-21  Erik Naggum *************** Please call only about actual work, I pr *** 602,605 **** --- 927,1034 ---- I accept VISA and Mastercard, preferred for remote jobs and small amounts. + + Updated: 1996-06-28 + ^_ + NET-Community + 38403 Pelton Road http://www.net-community.com + Willoughby, OH 44094 USA finger info@net-community.com + 1-800-919-0060 voice + 1-216-946-7884 voice + 1-216-953-5829 fax + + NET-Community provides support for the complete GNUstep toolset including + the Objective-C runtime within GCC, the GNUstep Base Library, the GNUstep + GUI Library, the GNUstep X/DPS GUI Backend, and the GNUstep Database + Library. NET-Community also provides support for its own MediaBook software + including the MediaBook Random Library and the MediaBook Speech Synthesis + Library. NET-Community actively supports and develops free software on all + GNUstep platforms; a portion of the proceeds, usually 20%, generated from + CD-ROM sales go towards additional development and enhancement of GNUstep. + + Entered: 1996-07-25 + ^_ + Open Systems Consultants a.s + St. Olavsgt. 24 + N-0166 OSLO + NORWAY + + Phone: Fax: + +47 22 20 40 50 +47 22 20 02 85 + + Web: E-mail: + http://www.osc.no + + Open Systems Consultants a.s can provide programming support for all + GNU software -- extending or adopting it to meet customer needs. + Prices vary with software and project. Hourly fees are in the $80-120 + range. Fixed-priced projects are also available. No phone support. + + Entered: 1996-07-17 + ^_ + Francesco Potorti` + Via S.Stefano, 8 + 56123 Pisa, Italy + Tel. (050)560671 + + Emacs: installation and maintenance, training and tutorials, + customisation, extensions, troubleshooting. Author of some of + the packages in the emacs distribution, has made the porting + of emacs to the Motorola Delta architecture. + + Other: installation and maintenance of GNU software. Experience with + RCS, gperf, etags, smail, indent, diff, gawk, gcc, screen. Is + the current maintainer of etags. + + Rates: 30-80 KL/hr, depending on experience on the particular task. + Average is 50 KL/hr $50/hr. + Prefer e-mail communication to telephone. + + Qualifications: Electronic Engineering degree, Pisa. Full time + researcher in CNUCE-CNR. + Familiar with elisp programming and porting of C programs. + + Entered: 1996-07-10 + ^_ + Dipl.-Inform. Klaus Kdmpf + proGIS Software + Jakobstr. 117 + D-52064 Aachen + Germany + http://www.progis.de + Tel +49 241 470670 + Fax +49 241 4706729 + + - 15 years C/Unix experience + - 6 years VMS experience + - Ported BFD library, Binutils, GNU Assembler, and GNU C + to openVMS/Alpha. + + We do a lot of cross-platform (Unix-VMS-WindowsNT) development + mostly with the GNU compiler environment. We are actively + supporting GNU software on openVMS/Alpha. + + Rates start at 160.- DM / hour for support and + installation. Larger projects are negotiable. + + Entered: 1996-07-25 + ^_ + Quiotix Corporation + Menlo Park, CA + + Contact: Jeffrey Siegal + jbs@quiotix.com + 415 324-0535 + + Area of focus: Embedded systems--using GNU software to develop for + embedded systems, porting GNU software to embedded systems, extending GNU + software to better support embedded environments, developing new tools and + utilities for embedded development using GNU software. + + Services: porting, development, support, project management, advisory + consulting. + + Rates: $125-$250/hour or fixed fees depending on services provided. + + Entered: 1996-07-10  Wolfgang S. Rupprecht *************** author of the floating point additions i *** 614,624 **** Rates: $95/hr. ! Updated: 14Apr94  Signum Support AB ! Box 2044 _ ...!seunet!signum!info ! S-580 02 Linkoping, Sweden +46 13 21 46 00 voice +46 13 21 47 00 fax Signum Support AB is a company dedicated to supporting, developing --- 1043,1054 ---- Rates: $95/hr. ! Updated: 1996-07-03  Signum Support AB ! Teknikringen 8 ! S-583 30 Linkoping, Sweden +46 13 21 46 00 voice +46 13 21 47 00 fax + http://www.signum.se Signum Support AB is a company dedicated to supporting, developing *************** programs, both administrating it and fin *** 631,634 **** --- 1061,1067 ---- Services offered: + - Support on Internet service software, especially the free + Readynet Internet server we have developed for Linux and Solaris. + - Support on Linux. - Installation and customizing GNU and other free software. We will make free software as easy to install and use as shrink wrapped *************** Services offered: *** 643,649 **** Rates: For software items, request our price list. ! For consulting, 400-800 SEK/hour. ! Updated: 14Apr94  Small Business Systems, Inc. --- 1076,1082 ---- Rates: For software items, request our price list. ! For consulting, 700-900 SEK/hour. ! Updated: 1996-06-26  Small Business Systems, Inc. *************** Rate: Varies depending on complexity of *** 656,697 **** Programs Supported: All ! Updated: 14Apr94 !  ! Julian H. Stacey. ! Vector Systems Ltd, Holz Strasse 27d, D 80469 Munich (Muenchen), GERMANY. ! Tel. +49 89 268616 (089 268616 in Germany) 09:00-21:00 Timezone=GMT+01:00 ! ! Sources: All FSF/GNU, FreeBSD-current, X-Windows, XFree86, NetBSD, Mach, etc. ! (Plus various other things, such as, but not limited to: ! blas blt cflow CAD cnews crypt dvi2lj eispack elm encryption expect ! ezd f2c flexfax gic gopher info-zip ingres inn jpeg kermit ksh ! less lha linpack md5 mh mprof mtools mush nntp octave pbmplus ! popper sather sc schemetoc slurp sml spreadsheet sup tcl tcl-dp ! tcsh tcx term tex tiff tk top trn unarj ups urt wine xlock xv ! xview xxgdb zmodem zip zircon zoo zsh.) ! Media: QIC 1/4" Cartridge 525M, 150M, & 60M, TEAC CAS-60 60M Cassette, ! CD-ROM, Floppies 1.4M & 1.2 & 720K & 360K. DAT arrangeable. ! Postal Service C.O.D.(=`Nachnahme') or pre payment available. Commercial Consultancy: ! Custom Designs, Provision & support of FreeBSD or Unix, C, FSF tools, ! X Windows, own tools, systems engineering, hardware interfacing, ! multi lingual European, Cyrillic & Chinese tools & systems, ! Unix, MSDOS, real time etc, communications & scientific & industrial. ! DEUTSCH + FRANCAIS: Man kann mir in Deutsch schreiben, (oder mich anrufen). Je comprend Francais, mais je n'ecris pas des responses en Francais. ! (Contact me in English, German, or French). ! FREE for Symmetric Computer Systems Model 375 owners: ! Free Binaries & sources on SCS/375's TEAC 50/60M Cassette, for: ! GCC-1.40, UUCP-1.4, Ghostscript 2.3, Tar-1.08, Gzip-1.2.2 etc. ! (Native SCS compiler can't compile GCC on this NSC32016 based BSD4.2) ! On Request: Resume, Company Profile, Index of public & proprietary tools, ! Rate: ~120 DM/hour. ~100DM/Cartridge. (1.5DM = $1 USA = 0.6 UK Pounds @4/'94) ! Short enquiries free. (Kurze Anfragen Ohne Gebuhr). ! Updated: 14Jun94  ! Richard M. Stallman ! UUCP: {mit-eddie,ucbvax,uunet,harvard,uw-beaver}!ai.mit.edu!rms 545 Tech Sq, Rm 430 Cambridge, MA 02139 --- 1089,1156 ---- Programs Supported: All ! Updated: 1994-04-14 ! ^_ ! Jon Solomon ! 235 Main St., Apt 3C-1 ! East Hartford, Conn. 06118 ! +1 860 939-5573 ! ! Maintains all GNU software... Available for General Consulting ! (contact me if you are interested)... ! Sendmail a specialty... Can answer questions pertaining to the ! installation, maintainence, bug reporting and fixing for ! most GNU products... Adhering to the FSF/GNU copyleft for all ! work... (I only charge for the time it takes to do the above, ! the software (and most GNU copyleft'd software) is free. ! I can make tapes for you if you need that... ! ! Entered: 1996-04-09 ! ^_ ! Julian H. Stacey. http://www.freebsd.org/~jhs/ ! Tel. +49 89 268616 (089 268616) Time zone: +01:00 ! Vector Systems Ltd, Holz Strasse 27d, D 80469 Munich (Muenchen), Germany. ! ! NO FREE HELPDESK ! ! Do Not Phone Me Unless You Either ! - Send me a DM 100 Eurocheque, 7 days before phoning, Or... ! - Start by negotiating the contract for my consultancy fees ! ! I earn my living from consultancy fees. ! I contribute code to public domain software projects. ! I don't mind giving a little free help occasionally, ! But be reasonable, define the human parameters First, ! Before you explain your technical wishes. ! Those I Hate Hearing From: ! Those who phone late evening, with complex weird problems, ! who want my time for free, who make no effort to speak my language ! (English), who are too lazy or mean to phone me a week or so later ! to hear any follow-up, who are too lazy to find a friend's ! email for me to forward Internet news/mail group follow-up to, ! who want me make expensive long distance calls phoning them back, ! after I've spent my free time on their problems. ! To those people: ... Don't phone me ! & I won't phone you ! Commercial Consultancy: ! Unix C X-Windows, Internet, with FSF FreeBSD etc. ! Systems engineering, hardware interfacing, real time, comms & ! scientific industrial, even Cyrillic & Chinese etc. ! Commercial Rate: ! DM/hr ~130-170. No Emacs. DM 1.5 = $1USA, DM 2.3 = 1 British Pound ! Work Place: ! Munich Germany, anywhere on the Internet. ! Resume, Company Profile: ! See my web page. ! Free Sources: ! FSF, FreeBSD current & releases, X-Windows, XFree86, NetBSD etc ! will be available for ISDN public access ftp around 8/96. ! Dial in, & write your own tapes for postal delivery. ! Access details available later via http://www.freebsd.org/~jhs/ ! QIC 1/4" 525M, 150M, & 60M, CAS-60M Cassette, Floppies. DM 100. ! Deutsch & Francais: I'm British, Man kann mir in Deutsch schreiben, (oder mich anrufen). Je comprend Francais, mais je n'ecris pas des responses en Francais. ! Free GCC-1.40 for Symmetric Computer Systems Model 375 (native cc fails): ! Updated: 1996-06-28  ! Richard M. Stallman 545 Tech Sq, Rm 430 Cambridge, MA 02139 *************** Original inventor of Emacs and main auth *** 704,708 **** Rates: $6/min or $250/hr. ! Updated: 14Apr94  JoS-Ware Comp Tech Johan Svensson --- 1163,1167 ---- Rates: $6/min or $250/hr. ! Updated: 1996-06-26  JoS-Ware Comp Tech Johan Svensson *************** Rates: 550SEK (+ tax) per hour within Sw *** 730,740 **** Note: fees may vary and special arrangements may be considered ! Entered: 7Apr94  ! Kayvan Sylvan Sylvan Associates 879 Lewiston Drive ! San Jose, CA 95136 ! Phone: 408-978-1407 I will help you port, install and customize GNU Emacs, GCC, G++, --- 1189,1200 ---- Note: fees may vary and special arrangements may be considered ! Entered: 1994-04-07  ! Kayvan Sylvan Sylvan Associates 879 Lewiston Drive ! San Jose, CA 95136-1517 ! Phone: (408) 978-1407 ! Fax: (408) 978-1417 I will help you port, install and customize GNU Emacs, GCC, G++, *************** also do ongoing support and periodic upg *** 744,758 **** software subscription list. ! Rates: $60-$100/hour, depending on type of work. Substantial discounts for long-term contracts and also for educational or non-profit institutions. ! Experience: Many different Unix systems (2.9BSD to 4.4BSD, SVR3 and ! SVR4, Linux, Xenix). Systems programming and system administration on all brands of Unix. Kernel hacking experience. Lots of porting experience. - I can port anything to anything (within reason). ! Updated: 14Apr94  Leonard H. Tower Jr. 36 Porter Street --- 1204,1253 ---- software subscription list. ! Rates: $70-$100/hour, depending on type of work. Substantial discounts for long-term contracts and also for educational or non-profit institutions. ! Experience: Many different Unix systems (2.9BSD to 4.4BSD, Xenix, SVR3 and ! SVR4, Linux, FreeBSD). Systems programming and system administration on all brands of Unix. Kernel hacking experience. Lots of porting experience. ! Updated: 1996-06-26  + TerraTel AB + Tankeg=E5ngen 4 + S-417 56 G=F6teborg, Sweden + +46 31 50 79 40 voice + +46 31 50 79 39 fax + http://www.netg.se + + TerraTel AB is a company that does consultant jobs and holds courses + in the fields of Unix software, TCP/IP networking and Internet + applications. The people behind TerraTel AB have many years + of general UNIX experience, both as system administrators and as + programmers, and also extensive experience in maintaining the GNU + programs; in administration as well as finding and fixing bugs. + + Services offered: + + - Installation and customizing GNU and other free software. We will + make free software as easy to install and use as shrink wrapped + programs. + - Service and support subscriptions. + - Warranty protection. + - Customization and porting. + - Subscriptions to new versions which we will send monthly or with + any other interval. + - Finding, recommending and investigating free software in any + area of the customers choice. + - Regular consulting. + - Support on Internet service software, especially the free + - Support on Linux. + - Freeware based courses in Unix usage, C, C++, or any GNU tools + + Rates: For courses, contact us for a quote, + For consulting, $60-120/hour, depending on contract length. + + Entered: 1996-07-15 + ^_ Leonard H. Tower Jr. 36 Porter Street *************** Rates: 100.00/hour + travel expenses. N *** 767,798 **** Experience: Have hacked on over a dozen architectures in many languages. Have system mothered several varieties of Unixes. Assisted rms with the front end ! of gcc and it's back-end support. Resume available on request. ! ! Entered: 14Apr94 !  ! UrbanSoft AO ! 68 Malooktinskii Prospect ! St. Petersburg, Russia 195272 ! ! Custom GhostScript and TeX programming by e-mail. ! Database documents, directories, standard forms. ! ! UrbanSoft uses a portion of its revenues to contribute ! diskette distributions of GNU software to Russian ! universities (most of which lack FTP access). ! Rates: 30,000 rubles (currently USD 16.80) per hour. ! Fixed rate contracts also possible. ! Payable by bank transfer. ! ! Updated: 20Apr94  ! noris network Matthias Urlichs Schleiermacherstrasse 12 90491 Nuernberg Germany ! Phone: +49 911 9959621 ! Fax: +49 911 5980150 http://info.noris.de/ (German) --- 1262,1276 ---- Experience: Have hacked on over a dozen architectures in many languages. Have system mothered several varieties of Unixes. Assisted rms with the front end ! of gcc and its back-end support. Resume available on request. ! Updated: 1996-06-29  ! noris network GmbH Matthias Urlichs Schleiermacherstrasse 12 90491 Nuernberg Germany ! Phone: +49 911 59818-0 ! Fax: +49 911 59818-11 http://info.noris.de/ (German) *************** Rates: *** 821,826 **** Rates don't include taxes. ! Entered: 16Aug94  Joe Wells Postal Address: --- 1299,1324 ---- Rates don't include taxes. ! Updated: 1996-07-05  + Paul C.A. van Gool + + + Address: Faculty of Aerospace Engineering + Delft University of Technology + Kluyverweg 1, 2629 HS Delft + The Netherlands + + Phone: +31-15-2785312 + Fax : +31-15-2786480 + + I would like to provide unpaid support for the following things: + + - C + - C++ + - f2c + - compilation and installation of most GNU packages + + Entered: 1996-07-15 + ^_ Joe Wells Postal Address: *************** Rates: $65/hour as an independent contra *** 866,871 **** higher rates if extensive travel is required. ! Updated: 27Sep94.  Herb Wood phone: 1-415-789-7173 --- 1364,1402 ---- higher rates if extensive travel is required. ! Updated: 1994-09-27 ! ^_ ! ! Arne Wichmann ! ! EMail: ! Telephone on request. ! ! I support GNU software on the following platforms: ! ! Linux ! SunOS 4.X 5.X ! HPUX 9.X ! other platforms on request. ! ! Usual rates: 20DM per hour. Free support for private people as time ! permits. ! ! Entered: 1996-07-22  + Jody Winston + xprt Computer Consulting, Inc. + 731 Voyager + Houston, TX, 77058 + (713) 480-UNIX, + + We have supported, installed, and used the entire GNU software suite + for over 8 years on many different Unix platforms. We have written + character device drivers and proc file systems for custom hardware + running on Linux. In addition, we have developed a custom X11 server + and X input extensions. Our consulting rate is $150.00 US dollars per + hour, negotiable, plus a per diem for out of town work. + + Entered: 1996-07-15 + ^_ Herb Wood phone: 1-415-789-7173 *************** Rather, I excel in domains that require *** 878,882 **** theoretical parts of computer science --for example, logic, formal methods of program development, and functional programming. I can write, and I have ! "tutoring" (teaching one-on-one) experience, an, unlike some programmers, I enjoy doing these things. --- 1409,1413 ---- theoretical parts of computer science --for example, logic, formal methods of program development, and functional programming. I can write, and I have ! "tutoring" (teaching one-on-one) experience, and, unlike some programmers, I enjoy doing these things. *************** Emacs and VM. I think I can customize E *** 885,889 **** effectively. ! Entered: 30Jul95  Yggdrasil Computing, Inc./ Freesoft, Inc. --- 1416,1420 ---- effectively. ! Entered: 1995-07-30  Yggdrasil Computing, Inc./ Freesoft, Inc. *************** San Jose, CA 95129 *** 893,898 **** (800) 261 6630 ! Updated: 14Apr94  For a current copy of this directory, or to have yourself listed, ask: --- 1424,1445 ---- (800) 261 6630 ! Updated: 1994-04-14  + Lige Zhou + Consultant + Open Technologies Corporation + Sun Lotus Bldg.2nd Floor + 2-9-1 Chuou, Nakano-ku, Tokyo 164 Japan + Tel: +81-3-3365-2911 Fax: +81-3-3365-2920 + E-mail: + + I have two years of experience porting and supporting GNU C Compiler and + GNU Assember at the Wingnut project of SRA, Inc., Tokyo. + + I can provide free consultation on these products if the problem is not + time-consuming. + + Entered: 1996-07-15 + ^_ For a current copy of this directory, or to have yourself listed, ask: diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/TODO emacs-19.32/etc/TODO *** emacs-19.31/etc/TODO Wed Dec 31 19:00:00 1969 --- emacs-19.32/etc/TODO Sat Jul 27 20:34:33 1996 *************** *** 0 **** --- 1,38 ---- + * Change vc-directory so that in the CVS case + it does `cvs status .' to get the whole directory status at once + and then parse the output to find out about each file. + + * Change the Windows NT menu code + so that it handles the deep_p argument and avoids + regenerating the whole menu bar menu tree except + when the user tries to use the menubar. + + This requires the RIT to forward the WM_INITMENU message to + the main thread, and not return from that message until the main + thread has processed the menu_bar_activate_event and regenerated + the whole menu bar. In the mean time, it should process other messages. + + * Put the scroll bars on the left of the windows. + + * Enable use of X toolkit scroll bars. + + * Put cross-references into the documentation strings. + + * Implement radio buttons in menus. + + * Save undo information in files, and reload it when needed + for undoing. + + * Support multiple terminal-input descriptors, + and thus allow having both terminal and X frames at once. + + * Implement other text formatting properties. + ** Spaces of fractional width. + ** Footnotes that can appear either in place + or at the end of the page. + ** text property that says "don't break line in middle of this". + Don't break the line between two characters that have the + same value of this property. + ** Discretionary hyphens that disappear at end of line. + ** Text property for raising or lowering text. + ** Text property for making text smaller or bigger by one level of size. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/TUTORIAL emacs-19.32/etc/TUTORIAL *** emacs-19.31/etc/TUTORIAL Sat May 25 19:10:31 1996 --- emacs-19.32/etc/TUTORIAL Fri Jun 14 09:41:03 1996 *************** surrounding the parentheses around the m *** 791,808 **** example, you might see [(Fundamental)] instead of (Fundamental). ! To get out of the recursive editing level, type ! M-x top-level. ! >> Try that now; it should display "Back to top level" ! at the bottom of the screen. ! ! In fact, you were ALREADY at top level (not inside a recursive editing ! level) if you have obeyed instructions. M-x top-level does not care; ! it gets out of any number of recursive editing levels, perhaps zero, ! to get back to top level. You can't use C-g to get out of a recursive editing level because C-g ! is used for discarding numeric arguments and partially typed commands ! WITHIN the recursive editing level. --- 791,803 ---- example, you might see [(Fundamental)] instead of (Fundamental). ! To get out of the recursive editing level, type ESC ESC ESC. That is ! an all-purpose "get out" command. You can also use it for eliminating ! extra windows, and getting out of the minibuffer. ! >> Type M-x to get into a minibuffer; then type ESC ESC ESC to get out. You can't use C-g to get out of a recursive editing level because C-g ! is used for canceling commands and arguments WITHIN the recursive ! editing level. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/WHY-FREE emacs-19.32/etc/WHY-FREE *** emacs-19.31/etc/WHY-FREE Fri Feb 23 00:47:31 1996 --- emacs-19.32/etc/WHY-FREE Fri Jun 7 12:37:31 1996 *************** *** 3,7 **** by Richard Stallman ! Digital information technology's contributes to the world by making it easier to copy and modify information. Computers promise to make this easier for all of us. --- 3,7 ---- by Richard Stallman ! Digital information technology contributes to the world by making it easier to copy and modify information. Computers promise to make this easier for all of us. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/edt-user.doc emacs-19.32/etc/edt-user.doc *** emacs-19.31/etc/edt-user.doc Thu Jan 4 14:54:45 1996 --- emacs-19.32/etc/edt-user.doc Sat Jul 20 14:12:10 1996 *************** GNU General Public License for more deta *** 22,27 **** 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. ============================================================================ --- 22,28 ---- 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, Inc., 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. ============================================================================ *************** G-C-\: Split Window *** 618,623 **** ;; 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: --- 619,625 ---- ;; 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, Inc., 59 Temple Place - Suite 330, ! ;; Boston, MA 02111-1307, USA. ;;; Commentary: diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/gnus-tut.txt emacs-19.32/etc/gnus-tut.txt *** emacs-19.31/etc/gnus-tut.txt Thu Jan 4 14:54:56 1996 --- emacs-19.32/etc/gnus-tut.txt Thu Jun 27 18:32:29 1996 *************** Message-ID: *** 6,30 **** Actually, since you are reading this, chances are you are already ! using the new Gnus. Congratulations. This entire newsgroup you are reading is, in fact, no real newsgroup ! at all, in the traditional sense. It is an example of one of the "foreign" select methods that Gnus may use. The text you are now reading is stored in the "etc" directory with the ! rest of the Emacs sources. You are using the "nndir" backend for ! accessing it. Scary, isn't it? ! This isn't the real documentation. `M-x info', `m gnus ' to read ! that. This "newsgroup" is intended as a kinder, gentler way of getting people started. ! Gnus is a rewrite of GNUS 4.1, written by Masanobu Umeda. The rewrite was done by moi, yours truly, your humble servant, Lars Magne ! Ingebrigtsen. If you have a WWW browser, you can investigate to your heart's delight at . - Much code (especially the score code) was written by Per Abrahamsen. - ;; Copyright (C) 1995 Free Software Foundation, Inc. --- 6,28 ---- Actually, since you are reading this, chances are you are already ! using the new Gnus. Congratulations. This entire newsgroup you are reading is, in fact, no real newsgroup ! at all, in the traditional sense. It is an example of one of the "foreign" select methods that Gnus may use. The text you are now reading is stored in the "etc" directory with the ! rest of the Emacs sources. You are using the "nndoc" backend for ! accessing it. Scary, isn't it? ! This isn't the real documentation. `M-x info', `m gnus ' to read ! that. This "newsgroup" is intended as a kinder, gentler way of getting people started. ! Gnus is a rewrite of GNUS 4.1, written by Masanobu Umeda. The rewrite was done by moi, yours truly, your humble servant, Lars Magne ! Ingebrigtsen. If you have a WWW browser, you can investigate to your heart's delight at . ;; Copyright (C) 1995 Free Software Foundation, Inc. *************** Much code (especially the score code) wa *** 45,50 **** ;; 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. From lars Thu Feb 23 23:20:38 1995 --- 43,49 ---- ;; 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, Inc., 59 Temple Place - Suite 330, ! ;; Boston, MA 02111-1307, USA. From lars Thu Feb 23 23:20:38 1995 *************** Message-ID: *** 55,59 **** If you are having problems with Gnus not finding your server, you have ! to set `gnus-select-method'. A "method" is a way of specifying *how* the news is to be found, and from *where*. --- 54,58 ---- If you are having problems with Gnus not finding your server, you have ! to set `gnus-select-method'. A "method" is a way of specifying *how* the news is to be found, and from *where*. *************** Message-ID: *** 84,88 **** If this is the first time you have used a newsreader, you won't have a ! .newsrc file. This means that Gnus will think that all the newsgroups on the server are "new", and kill them all. --- 83,87 ---- If this is the first time you have used a newsreader, you won't have a ! .newsrc file. This means that Gnus will think that all the newsgroups on the server are "new", and kill them all. *************** This means that all the groups have been *** 94,110 **** quite dead, but not exactly alive, either. ! Jump back to the *Group* buffer, and type `C-c C-z' to list all the ! zombie groups. Look though the list, and subscribe to the groups you ! want to read by pressing `u' on the one you think look interesting. ! If all the groups have been killed, type `C-c C-k' to list all the ! killed groups. Subscribe to them the same way. ! When you are satisfied, press `M-z' to kill all the zombie groups. Now you should have a nice list of all groups you are interested in. ! (If you later want to subscribe to more groups, press `C-c C-k' to ! list all the kill groups, and repeat. You can also type `U' and be prompted for groups to subscribe to.) --- 93,109 ---- quite dead, but not exactly alive, either. ! Jump back to the *Group* buffer, and type `A z' to list all the zombie ! groups. Look though the list, and subscribe to the groups you want to ! read by pressing `u' on the one you think look interesting. ! If all the groups have been killed, type `A k' to list all the killed ! groups. Subscribe to them the same way. ! When you are satisfied, press `S z' to kill all the zombie groups. Now you should have a nice list of all groups you are interested in. ! (If you later want to subscribe to more groups, press `A k' to ! list all the kill groups, and repeat. You can also type `U' and be prompted for groups to subscribe to.) *************** Message-ID: *** 118,130 **** Yes, Virginia, you can read mail with Gnus. ! First you have to decide which mail backend you want to use. You have nnml, which is a one-file-one-mail backend, which is quite nice, but apt to make your systems administrator go crazy and come after you with a shotgun. ! nnmbox uses a Unix mail box to store mail. Nice, but slow. ! nnmh uses mh-e folders, which is also a one-file-one-mail thingy, but ! slower than nnml. (It doesn't support NOV files.) So if you want to go with nnmbox, you can simply say: --- 117,129 ---- Yes, Virginia, you can read mail with Gnus. ! First you have to decide which mail backend you want to use. You have nnml, which is a one-file-one-mail backend, which is quite nice, but apt to make your systems administrator go crazy and come after you with a shotgun. ! nnmbox uses a Unix mail box to store mail. Nice, but slow. ! nnmh uses mh-e folders, which is also a one-file-one-mail thingie, but ! slower than nnml. (It doesn't support NOV files.) So if you want to go with nnmbox, you can simply say: *************** Message-ID: *** 156,169 **** These are groups that do not come from `gnus-select-method'. ! Say you want to read "alt.furniture.couches" from "news.funet.fi". You can then either type `B news.funet.fi ' to browse that server and subscribe to that group, or you can type ! `M-a alt.furniture.couchesnntpnews.funet.fi', if you like to type a lot. If you want to read a directory as a newsgroup, you can create an ! nndir group, much the same way. There's a shorthand for that, ! though. If, for instance, you want to read the (ding) list archives, ! you could type `D /ftp '. There's lots more to know about foreign groups, but you have to read --- 155,168 ---- These are groups that do not come from `gnus-select-method'. ! Say you want to read "alt.furniture.couches" from "news.funet.fi". You can then either type `B news.funet.fi ' to browse that server and subscribe to that group, or you can type ! `G m alt.furniture.couchesnntpnews.funet.fi', if you like to type a lot. If you want to read a directory as a newsgroup, you can create an ! nndir group, much the same way. There's a shorthand for that, ! though. If, for instance, you want to read the (ding) list archives, ! you could type `G d /ftp '. There's lots more to know about foreign groups, but you have to read *************** Subject: Low level changes in GNUS, or, *** 177,188 **** Message-ID: ! Gnus really isn't GNUS, even though it looks like it. If you scrape the surface, you'll find that most things have changed. ! This means that old code that relies on GNUS internals will fail. In particular, `gnus-newsrc-hashtb', `gnus-newsrc-assoc', `gnus-killed-list', the `nntp-header-' macros and the display formats ! have all changed. If you have some code lying around that depend on these, or change these, you'll have to re-write your code. --- 176,187 ---- Message-ID: ! Gnus really isn't GNUS, even though it looks like it. If you scrape the surface, you'll find that most things have changed. ! This means that old code that relies on GNUS internals will fail. In particular, `gnus-newsrc-hashtb', `gnus-newsrc-assoc', `gnus-killed-list', the `nntp-header-' macros and the display formats ! have all changed. If you have some code lying around that depend on these, or change these, you'll have to re-write your code. *************** remove all hihit code from all the Gnus *** 192,199 **** `gnus-summary-article-hook'). (Well, at the very least the first two.) Gnus provides various integrated functions for highlighting, ! which are both faster and more accurate. There is absolutely no chance, whatsoever, of getting Gnus to work ! with Emacs 18. --- 191,199 ---- `gnus-summary-article-hook'). (Well, at the very least the first two.) Gnus provides various integrated functions for highlighting, ! which are both faster and more accurated. There is absolutely no chance, whatsoever, of getting Gnus to work ! with Emacs 18. It won't even work on Emacsen older than Emacs ! 19.30/XEmacs 19.13. Upgrade your Emacs or die. *************** From lars Thu Feb 23 23:20:38 1995 *** 201,231 **** From: larsi@ifi.uio.no (ding) Date: Fri Feb 24 13:40:45 1995 - Subject: Bugs & stuff - Message-ID: - - If you want to report a bug, please type `M-x gnus-bug'. This will - give me a precise overview of your Gnus and Emacs version numbers, - along with a look at all Gnus variables you have changed. - - Du not expect a reply back, but your bug should be fixed in the next - version. If the bug persists, please re-submit your bug report. - - When a bug occurs, I need a recipe for how to trigger the bug. You - have to tell me exactly what you do to uncover the bug, and you should - (setq debug-on-error t) and send me the backtrace along with the bug - report. - - If I am not able to reproduce the bug, I won't be able to fix it. - - I would, of course, prefer that you locate the bug, fix it, and mail - me the patches, but one can't have everything. - - If you have any questions on usage, the "ding@ifi.uio.no" mailing list - is where to post the questions. - - - From lars Thu Feb 23 23:20:38 1995 - From: larsi@ifi.uio.no (ding) - Date: Fri Feb 24 13:40:45 1995 Subject: How do I re-scan my mail groups? Message-ID: --- 201,204 ---- *************** Just press `M-g' on the mail groups, and *** 236,240 **** You can also re-scan all the mail groups by putting them on level 1 ! (`1 S'), and saying `1 g' to re-scan all level 1 groups. --- 209,213 ---- You can also re-scan all the mail groups by putting them on level 1 ! (`S l 1'), and saying `1 g' to re-scan all level 1 groups. *************** Subject: How do I set up virtual newsgro *** 245,249 **** Message-ID: ! Virtual newsgroups are collections of other newsgroups. Why people want this is beyond me, but here goes: --- 218,222 ---- Message-ID: ! Virtual newsgroups are collections of other newsgroups. Why people want this is beyond me, but here goes: *************** Create the group by saying *** 254,258 **** This will create the group "nnvirtual:my.virtual.newsgroup", which will collect all articles from all the groups in the "rec.aquaria" ! hierarchy. If you want to edit the regular expression, just type `M-e' on the --- 227,231 ---- This will create the group "nnvirtual:my.virtual.newsgroup", which will collect all articles from all the groups in the "rec.aquaria" ! hierarchy. If you want to edit the regular expression, just type `M-e' on the *************** group line. *** 260,270 **** Note that all the groups that are part of the virtual group have to be ! alive. This means that the cannot, absolutely not, be zombie or ! killed. They can be unsubscribed; that's no problem. You can combine groups from different servers in the same virtual ! newsgroup, something that may actually be useful. Say you have the group "comp.headers" on the server "news.server.no" and the same group ! on "news.server.edu". If people have posted articles with Distribution headers that stop propagation of their articles, combining these two newsgroups into one virtual newsgroup should give you a better view of --- 233,243 ---- Note that all the groups that are part of the virtual group have to be ! alive. This means that the cannot, absolutely not, be zombie or ! killed. They can be unsubscribed; that's no problem. You can combine groups from different servers in the same virtual ! newsgroup, something that may actually be useful. Say you have the group "comp.headers" on the server "news.server.no" and the same group ! on "news.server.edu". If people have posted articles with Distribution headers that stop propagation of their articles, combining these two newsgroups into one virtual newsgroup should give you a better view of *************** what's going on. *** 273,278 **** One caveat, though: The virtual group article numbers from the first source group (group A) will always be lower than the article numbers ! from the second (group B). This means that Gnus will believe that ! articles from group A are older than articles from group B. Threading will lessen these problems, but it might be a good idea to sort the threads over the date of the articles to get a correct feel for the --- 246,251 ---- One caveat, though: The virtual group article numbers from the first source group (group A) will always be lower than the article numbers ! from the second (group B). This means that Gnus will believe that ! articles from group A are older than articles from group B. Threading will lessen these problems, but it might be a good idea to sort the threads over the date of the articles to get a correct feel for the *************** From lars Thu Feb 23 23:20:38 1995 *** 296,356 **** From: larsi@ifi.uio.no (ding) Date: Fri Feb 24 13:40:45 1995 ! Subject: I want to kiboze everything in sight! ! Message-ID: ! ! The nnkiboze backend collects articles that you are interested in from ! groups you are interested in. Below is a description for how you can ! gather all posts from me, and all posts about Gnus in the gnu.emacs ! hierarchy in one handy, easy to read group. ! ! Gnus will let you eat up all available machine resources, grinding ! everything to a halt. Including your nntp server. Who says Gnus isn't ! friendly? ! ! You want to do this, of course. ! ! Create an nnkiboze group the normal way: ! ! `M-a my.groupnnkiboze^gnu.emacs.*' ! ! You now have a shiny new group that you can't enter. How... ! practical. ! ! But just wait, it gets worse. ! ! You now have to create a score file. ! ! `C-x C-f ~/News/nnkiboze:my.group.SCORE' ! ! Put something like the following in this file: ! ! (setq gnus-score-alist ! '(("from" ! ("Ingebrigtsen" nil 1000) ! ("lmi" nil 5000)) ! ("subject" ! ("Gnus" nil 10000)) ! (touched))) ! ! Save the file, and go to a shell window. ! ! Type: ! $ emacs -batch -l ~/.emacs -l nnkiboze -f nnkiboze-generate-groups ! Wait a few hours, and all articles from me, or articles about Gnus, ! will appear, as if by magic, in the nnkiboze group. You really want ! that, of course. ! Gnus actually grabs the headers of all the groups that supply the ! nnkiboze group with articles, so this isn't very kind. Pleasy only do ! it at night (`at' is a fine command), and please, *please*, limit the ! number of groups that supply articles to the group. If you specify "" ! as the address of this group, nnkiboze will ask for headers from *all* ! groups, and this is megs and megs and megs of data. ! Use it, don't abuse it. Be nice. --- 269,294 ---- From: larsi@ifi.uio.no (ding) Date: Fri Feb 24 13:40:45 1995 ! Subject: Bugs & stuff ! Message-ID: ! If you want to report a bug, please type `M-x gnus-bug'. This will ! give me a precice overview of your Gnus and Emacs version numbers, ! along with a look at all Gnus variables you have changed. ! Du not expect a reply back, but your bug should be fixed in the next ! version. If the bug persists, please re-submit your bug report. ! When a bug occurs, I need a recipe for how to trigger the bug. You ! have to tell me exactly what you do to uncover the bug, and you should ! (setq debug-on-error t) and send me the backtrace along with the bug ! report. ! If I am not able to reproduce the bug, I won't be able to fix it. + I would, of course, prefer that you locate the bug, fix it, and mail + me the patches, but one can't have everything. + If you have any questions on usage, the "ding@ifi.uio.no" mailing list + is where to post the questions. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/refcard.bit emacs-19.32/etc/refcard.bit *** emacs-19.31/etc/refcard.bit Wed Dec 31 19:00:00 1969 --- emacs-19.32/etc/refcard.bit Sun Jun 23 17:06:00 1996 *************** *** 0 **** --- 1 ---- + @end diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/refcard.ps emacs-19.32/etc/refcard.ps *** emacs-19.31/etc/refcard.ps Thu Mar 21 22:35:11 1996 --- emacs-19.32/etc/refcard.ps Sun Jun 23 20:51:08 1996 *************** *** 1,592 **** %!PS-Adobe-2.0 ! %%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software %%Title: refcard.dvi ! %%Pages: 6 ! %%PageOrder: Ascend ! %%BoundingBox: 0 0 596 842 %%EndComments ! %DVIPSCommandLine: dvips refcard.dvi ! %DVIPSParameters: dpi=300, compressed, comments removed ! %DVIPSSource: TeX output 1996.03.21:2231 ! %%BeginProcSet: texc.pro ! /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N ! /X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 ! mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} ! ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale ! isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div ! hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul ! TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} ! forall round exch round exch]setmatrix}N /@landscape{/isls true N}B ! /@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B ! /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ ! /nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N ! string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N ! end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ ! /sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] ! N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup ! length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ ! 128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub ! get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data ! dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N ! /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup ! /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx ! 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff ! setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff ! .1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N ! /cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id ! gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp ! add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add ! /gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{ ! dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 ! adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2 ! idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string ! putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval ! adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg} ! {adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{ ! adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2 ! chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{] ! }if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup ! length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ ! cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin ! 0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul ! add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict ! /eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook ! known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X ! /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for ! 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 ! 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V ! {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 ! getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} ! ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false ! RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 ! false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform ! round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg ! rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail ! {dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} ! B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ ! 4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ ! p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p ! a}B /bos{/SS save N}B /eos{SS restore}B end %%EndProcSet ! TeXDict begin 39158280 55380996 1000 300 300 (refcard.dvi) ! @start /Fa 1 59 df<126012F0A2126004047C830C>58 D E /Fb ! 19 122 df45 D97 D<123F1207A2120EA45AA4EA39 ! E0EA3A18EA3C0C12381270130EA3EAE01CA31318133813301360EA60C0EA3180EA1E000F ! 1D7C9C13>I<13F8EA0304120EEA1C0EEA181CEA30001270A25AA51304EA60081310EA30 ! 60EA0F800F127C9113>II<13F8EA0704 ! 120CEA1802EA38041230EA7008EA7FF0EAE000A5EA60041308EA30101360EA0F800F127C ! 9113>I103 ! DII108 ! D<391C1E078039266318C0394683A0E0384703C0008E1380A2120EA2391C0701C0A3EC03 ! 80D8380E1388A2EC0708151039701C032039300C01C01D127C9122>II<13F8EA030CEA0E06487E1218123000701380A238E00700A3130EA25BEA60 ! 185BEA30E0EA0F8011127C9115>I<380387803804C860EBD03013E0EA09C014381201A2 ! 38038070A31460380700E014C0EB0180EB8300EA0E86137890C7FCA25AA45AB4FC151A80 ! 9115>I ! 114 DI<12035AA3120EA4EAFFE0EA1C00A35AA4 ! 5AA4EAE080A2EAE100A2126612380B1A7C990E>I<381C0180EA2E03124EA2388E0700A2 ! 121CA2EA380EA438301C80A3EA383C38184D00EA0F8611127C9116>I<381C0180EA2E03 ! 124EA2388E0700A2121CA2EA380EA4EA301CA3EA383CEA1878EA0FB8EA003813301370EA ! E0605BEA81800043C7FC123C111A7C9114>121 D E /Fc 1 14 df13 D E /Fd 47 122 df<124012E012601220A31240A2128003097D8209>44 ! D<12FFA2080280860B>I<124012E0124003037D8209>I<120FEA30C0EA6060A2EA4020EA ! C030A9EA4020EA6060A2EA30C0EA0F000C137E9211>48 D<120C121C12EC120CAFEAFFC0 ! 0A137D9211>I<121FEA60C01360EAF07013301260EA0070A2136013C012011380EA0200 ! 5AEA08101210EA2020EA7FE012FF0C137E9211>II53 DI<1240EA7FFC13F8EA ! 4010EA80301320EA00401380EA0100A25A12021206A2120EA512040E147E9311>I<120F ! EA3080EA6040EA4060EAC0201330A31240EA6070EA30B0EA0F30120013201360EAE04013 ! 80EA4100123E0C137E9211>57 D<1330A21378A3139CA2EA019E130EA2EA0207A2000613 ! 80EA07FFEA0403380801C0A2001813E0EA380038FE07FC16147F9319>65 ! DII69 DII73 D<00FEEB0FE0001E140000171317A338138027A238 ! 11C047A23810E087A3EB7107A2133AA2131CA2123839FE083FE01B147F931E>77 ! D<38FC01FC381E00700017132013801213EA11C0EA10E01370A21338131C130E130F1307 ! EB03A0EB01E01300A20038136000FE132016147F9319>I80 D83 D<387FFFF03860703000401310A200801308A300001300ACEA07FF15147F ! 9318>I<38FF81FC381C00701420AD120C000E13400006138038038300EA00FC16147F93 ! 19>I<127FEAE1C0EAE040EA40601200EA07E0EA3860126012C01364A2EA61E4EA3E380E ! 0D7E8C11>97 D<12F01230A6EA33E0EA3430EA3808EA300C1306A5130CEA3808EA3430EA ! 23E00F147F9312>II<13781318A6EA0F98EA1878EA2038EA601812C0A51260EA2038EA1858EA0F ! 9E0F147F9312>IIII<12F01230A6EA33E0EA3430EA38181230 ! A9EAFC7E0F147F9312>I<1220127012201200A512F01230AB12FC06157F9409>I<12F012 ! 30A6137C133013601380EA31001233EA3F801231EA30C0136013701330EAFC7C0E147F93 ! 11>107 D<12F01230B212FC06147F9309>I<38F3E1F03834321838381C0CEA3018A938FC ! 7E3F180D7F8C1B>IIII114 DI<1210A312301270EAFF80EA3000A71380 ! A3EA1100120E09127F910D>III<38F87CF8 ! 3870703038305820A238188840138CA2380D04801306A238060300A3150D7F8C18>III E /Fe 25 122 df<90383FE3F83901F03F1C3903C03E3E ! 0007137CEA0F80151C1500A5B612C0A2390F807C00AE397FE1FF80A21F1D809C1C>11 ! D97 DIIII<137F3801E3803803C7C0EA ! 0787120FEB8380EB8000A5EAFFF8A2EA0F80AEEA7FF0A2121D809C0F>I<3803F0F0380E ! 1F38EA3C0F3838073000781380A400381300EA3C0FEA1E1CEA33F00030C7FCA3EA3FFF14 ! C06C13E014F0387801F838F00078A300701370007813F0381E03C03807FF00151B7F9118 ! >II<12 ! 1E123FA4121EC7FCA6127FA2121FAEEAFFC0A20A1E7F9D0E>I107 DI<39FF0FC07E903831E18F3A1F ! 40F20780D980FC13C0A2EB00F8AB3AFFE7FF3FF8A225127F9128>I<38FF0FC0EB31E038 ! 1F40F0EB80F8A21300AB38FFE7FFA218127F911B>II<38FF3F80EBE1E0381F80F0EB0078147C143C143EA6143C147C1478EB80F0EBC1E0 ! EB3F0090C7FCA6EAFFE0A2171A7F911B>I<3803F060380F0CE0EA1E07EA3C03127C1278 ! 12F8A61278127C123CEA1C07EA0E0FEA03F3EA0003A6EB1FFCA2161A7E9119>III<1203A45AA25AA2EA3FFC12FFEA1F00A9130CA4EA0F08EA0798EA03F00E ! 1A7F9913>I<38FF07F8A2EA1F00AC1301120F380786FFEA01F818127F911B>I<38FFC1FC ! A2381F00601380000F13C0A23807C180A23803E300A213F7EA01F613FE6C5AA21378A213 ! 3016127F9119>I<39FF8FF8FEA2391F03E030A3390F87F06013869038C6F8E03907CC78 ! C0A23903FC7D80EBF83D143F3901F01F00A20000131EEBE00EA21F127F9122>I<38FFC7 ! FCA2381F81C0380F83803807C700EA03EEEA01FC5B1200137C13FEEA01DF38039F80EA07 ! 0F380607C0380C03E038FF07FCA216127F9119>I<38FFC1FCA2381F00601380000F13C0 ! A23807C180A23803E300A213F7EA01F613FE6C5AA21378A21330A25B1270EAF8E05BEAF9 ! 800073C7FC123E161A7F9119>I E /Ff 75 126 df<126012F0AF12601200A4126012F0 ! A212600419779816>33 DII< ! 13C01201A3EA07F0EA1FFC48B4FCEA7DCF38F1C78012E1A338F1C300EA79C0127FEA1FF0 ! EA07FCEA01FE13CFEBC780EAF1C3A3EAE1C712F13879DF00EA3FFE6C5AEA07E0EA01C0A2 ! 120011207E9C16>I<38380180EA7C03EAFE07140012EE5B130E131EEAFE1C133CEA7C38 ! 1238EA0078137013F05BA212015B12035BEB8380380787C0EB0FE0EA0F0E120E121E121C ! A2EA3C0F383807C03818038013207F9C16>I<12301278127C123C121CA3123C12381278 ! 12F012E012C0060D789816>39 D<13E01201EA07C013005A121E5A123812781270A312F0 ! 5AA77E1270A312781238123C7E7E7E13C0EA01E012000B217A9C16>I<12E07E127C121C ! 121E7EEA0780120313C01201A313E01200A7120113C0A3120313801207EA0F00121E121C ! 127C12F05A0B217C9C16>II<13E0A8B512E0A33800E000A813137F9516> ! I<1238127C127EA2123E120E121E123C127C12F81260070B798416>II<127012F8A312700505788416>III<12035A5AA2 ! 5AB4FCA212F71207AEEAFFF8A30D197B9816>III<137C13 ! FC13DC1201EA039CA2EA071C120F120E121E123C1238127812F0B512E0A338001C00A538 ! 01FFC0A313197F9816>II<127012F8 ! A312701200A8127012F8A312700512789116>58 D60 D<12E07E12FC123E6C7EEA07E06C7EEA00FC133EEB1F801307131FEB3E ! 0013FCEA03F0485AEA1F80003EC7FC12FC12F05A11157E9616>62 ! DI<13F8EA03FEEA0FFF381F0F80EA3E3FEA3CFF007913C0 ! EA73C7EAF38312E71301A5138300F31380EA73C73879FF006C5AEA3E38381F03C0EA0FFF ! 00031300EA00FC12197E9816>I<13E0487EA213B0A2EA03B8A31318EA071CA5EA0E0EA2 ! EA0FFEA2487EEA1C07A3387E0FC038FF1FE0387E0FC013197F9816>II<3801F180EA07FF5AEA1F0FEA3C0712781303127000F0C7 ! FC5AA77E387003801278A2EA3C07381F0F00EA0FFE6C5AEA01F011197E9816>II<387FFFC0B5FC7EEA1C01A490C7FCA2131CA2EA1FFCA3EA ! 1C1CA290C7FC14E0A5EA7FFFB5FC7E13197F9816>I<387FFFE0B5FC7EEA1C00A41400A2 ! 131CA2EA1FFCA3EA1C1CA290C7FCA6EA7F80487E6C5A13197F9816>I<3801F180EA07FF ! 5AEA1F0FEA3C0712781303127000F0C7FC5AA4EB1FC014E014C038F003801270EA7807A2 ! EA3C0FEA1E1FEA0FFFEA07FBEA01F313197F9816>I76 D<38FC07E0EAFE0FA2383A0B80EA3B1BA513BBEA39B3A413F3EA ! 38E3A21303A538FE0FE0A313197F9816>I<387E07F038FF0FF8387F07F0381D81C0A313 ! C1121C13E1A213611371A313311339A21319131D130DA3EA7F07EAFF87EA7F0315198098 ! 16>I80 D82 DI<387F ! FFE0B5FCA2EAE0E0A400001300AFEA07FC487E6C5A13197F9816>I<387E03F038FF07F8 ! 387E03F0383800E0A4381C01C0A3137113F9A213D9A2000C1380A3EA0DDD138DA338078F ! 00A213071519809816>87 D91 ! D<12E0A27E127012781238123C121C121E120E120F7E7F12037F1201A27F12007F137013 ! 781338133C131C131E130E130F7F14801303130111207E9C16>II<1207EA1FC0EA7FF0EAFDF8EAF078EA40100D067C9816>II<120C121C123C1278127012F012E0A312F012F812781230060D789B ! 16>II<12FCA3121CA4137CEA1DFF001F1380EB ! 07C0EA1E03381C01E0A21300A41301001E13C01303381F078013FF381DFE00EA0C781319 ! 7F9816>II<133FA31307A4EA03C7EA0FF7EA3FFFEA3C1F487EEA ! 700712F012E0A412F05BEA781FEA7C3F383FFFE0EA1FF7EA07C713197F9816>II<131FEBFF805AEA03C7EB83001380A2EA7FFFB5FCA2 ! EA0380ACEA7FFC487E6C5A11197F9816>I<3803E3C0380FFFE05A381E3CC0383C1E00EA ! 380EA3EA3C1E6C5AEA1FFC5BEA3BE00038C7FCA2EA1FFC13FF4813C0EA780338F001E0EA ! E000A3EAF001387C07C0383FFF80380FFE00EA03F8131C7F9116>I<12FCA3121CA41378 ! EA1DFEEA1FFF130FEA1E07A2121CA938FF8FE0139F138F13197F9816>I<1203EA0780A2 ! EA0300C7FCA4EAFF80A31203ACEAFFFC13FE13FC0F1A7C9916>I<13301378A213301300 ! A4EA0FF8121F120FEA0038B3EA6078EAF0F0EAFFE0EA7FC0EA3F800D237E9916>I<127E ! 12FE127E120EA4EB7FE0A3EB0F00131E5B5B5BEA0FF8A213BC131EEA0E0E130FEB078038 ! 7F87F0EAFFCFEA7F871419809816>II<38F9C38038FFEFC0EBFFE0EA3E7CEA3C78EA3870AA38FE7CF8A315128091 ! 16>IIII<38 ! 03E380EA0FFBEA1FFFEA3E1FEA780FEA7007EAF00312E0A412F0EA7007EA780FEA3C1FEA ! 3FFFEA0FFBEA03E3EA0003A6EB1FF0EB3FF8EB1FF0151B7F9116>I<387F0FC038FF3FE0 ! EA7F7F3807F040EBE0005B5BA290C7FCA7EA7FFC12FF127F13127F9116>II<12035AA4EA7FFFB5FCA20007C7FCA75BEB0380A2130713 ! 873803FF005BEA00F811177F9616>II<387F1FC038FF9FE0387F1FC0381C0700A2EA0E0EA36C5AA4EA03B8A3EA ! 01F0A26C5A13127F9116>I<38FF1FE0A338380380A4EA39F3A20019130013B3A3EA1DB7 ! 1317EA1F1FEA0F1EEA0E0E13127F9116>I<387F1FC0133F131F380F1E006C5AEA03B813 ! F012016C5A12017FEA03B8EA073C131CEA0E0E387F1FC038FF3FE0387F1FC013127F9116 ! >I<387F1FC038FF9FE0387F1FC0381C0700120E130EA212075BA2EA039CA21398EA01B8 ! A2EA00F0A35BA3485A1279127BEA7F8090C7FC123C131B7F9116>I<383FFFC05AA23870 ! 0780EB0F00131EC65A13F8485A485A485A48C7FC381E01C0123C1278B5FCA312127F9116 ! >II<12E0B3AE0320779C16>I<12FCB4FC13C012031201A97F6CB4 ! FCEB7F80A2EBFF00EA01E05BA9120312FF90C7FC12FC11207E9C16>I ! E /Fg 42 123 df<903901FF81FE011F9038EFFF80903A7F80FF87C0D9FE00EB0FE03903 ! FC01FE13F8D807F013FCEE07C093C7FCA7B712F8A32707F001FCC7FCB3A33A7FFF1FFFE0 ! A32B2A7FA928>11 D65 DI<91393FF00180903903FFFE07010FEBFF ! 8F90393FF007FF9038FF80014848C7127FD807FC143F49141F4848140F485A003F15075B ! 007F1503A3484891C7FCAB6C7EEE0380A2123F7F001F15076C6C15006C6C5C6D141ED801 ! FE5C6C6C6C13F890393FF007F0010FB512C0010391C7FC9038003FF829297CA832>IIII<91393FF00180903903FFFE07010FEBFF8F90393FF007FF9038FF80014848C712 ! 7FD807FC143F49141F4848140F485A003F15075B007F1503A3484891C7FCA992387FFFFC ! A26C7E9238007F80A26C7EA26C7E120F6C7E7FD801FE14FF6C6C7E90383FF003010FB512 ! DF010314079039003FF8012E297CA836>III ! 75 DII81 DI<90387F80603903FFF0E0000F13FF38 ! 1F807F383F001F007E13071403127C00FC1301A214007EA26C140013C0EA7FFEEBFFE06C ! 13FC14FF6C1480000714C06C14E0C66C13F01307EB007FEC0FF81407140312E01401A37E ! 15F06C13036C14E0B413079038E01FC090B5120000E15B38C01FF01D297CA826>I<007F ! B712C0A39039803FC03FD87E00140700781503A20070150100F016E0A2481500A5C71500 ! B3A4017FB512E0A32B287EA730>I87 D<3803FF80000F13F0381F01FC383F80FE14 ! 7FA2EC3F80EA1F00C7FCA3EB0FFF90B5FC3807FC3FEA1FE0EA3F80127F130012FEA3147F ! 7E6CEBFFC0393F83DFFC380FFF8F3801FC031E1B7E9A21>97 DIIIII<9038FF81F00003EBE7FC390FC1FE7C381F80FC003F13FE9038007E1048EB7F00A66C ! 137EEB80FE001F5B380FC1F8381FFFE0001813800038C8FC123CA2123E383FFFF814FF6C ! 14C06C14E06C14F0121F397E0007F8007C13015A1400A36C1301007EEB03F06CEB07E039 ! 0FC01F803903FFFE0038007FF01E287E9A22>II<12 ! 07EA1FC0EA3FE0A5EA1FC0EA0700C7FCA7EAFFE0A3120FB3A3EAFFFEA30F2B7DAA14>I< ! EAFFE0A3120FACEC1FFCA3EC07C0EC0F80EC1E00147C5CEBE1F0EBE3E0EBE7C0EBEFE0EB ! FFF0A280EBF3FCEBE1FE13C080EC7F80143F15C0EC1FE0EC0FF039FFFC3FFEA31F2A7EA9 ! 24>107 DI<3BFFC07F800FF0903AC1FFE03F ! FC903AC783F0F07E3B0FCE03F9C07F903ADC01FB803F01F8D9FF00138001F05BA301E05B ! AF3CFFFE1FFFC3FFF8A3351B7D9A3A>I<38FFC07F9038C1FFC09038C787E0390FCE07F0 ! 9038DC03F813F813F0A313E0AF3AFFFE3FFF80A3211B7D9A26>II<38FFE1FE9038 ! E7FF809038FE07E0390FF803F8496C7E01E07F140081A2ED7F80A9EDFF00A25DEBF0014A ! 5A01F85B9038FE0FE09038EFFF80D9E1FCC7FC01E0C8FCA9EAFFFEA321277E9A26>I<38 ! FFC1F0EBC7FCEBCE3E380FDC7F13D813F813F0143E14005BAFB5FCA3181B7E9A1C>114 ! D<3803FE30380FFFF0EA3E03EA7800127000F01370A27E00FE1300EAFFE013FE387FFFC0 ! 6C13E06C13F0000713F8C613FC1307EAE000147C6C133CA27E14787E38FF01F038F7FFC0 ! 00C11300161B7E9A1B>I<1370A413F0A312011203A21207381FFFF0B5FCA23807F000AD ! 1438A73803F870000113F03800FFE0EB1F8015267FA51B>I<39FFE03FF8A3000F1303B1 ! 1407A2140F0007131F3A03F03BFF803801FFF338003FC3211B7D9A26>I<3AFFFE03FF80 ! A33A0FF0007800000714706D13F000035CEBFC0100015CA26C6C485AA2EBFF07017F90C7 ! FC148FEB3F8E14CEEB1FDCA2EB0FF8A36D5AA26D5AA26D5A211B7F9A24>I<3BFFFC3FFC ! 0FFEA33B0FE007E000E03B07F003F001C0A29039F807F80300031680A23B01FC0EFC0700 ! A291381EFE0F3A00FE1C7E0EA29039FF383F1E017F141C147890393FF01FB8A29138E00F ! F8011F5CA26D486C5AA36D486C5AA22F1B7F9A32>I<39FFFC0FFFA33907F003C0D803F8 ! 5B3801FC076C6C48C7FCEBFF1E6D5AEB3FF86D5AA2130F130780497E497E131EEB3C7F49 ! 6C7E496C7ED801E07F3803C00F6E7E3AFFF01FFF80A3211B7F9A24>I<3AFFFE03FF80A3 ! 3A0FF0007800000714706D13F000035CEBFC0100015CA26C6C485AA2EBFF07017F90C7FC ! 148FEB3F8E14CEEB1FDCA2EB0FF8A36D5AA26D5AA26D5AA2495AA2EA3807007C90C8FCEA ! FE0F130E5B133CEA7C78EA3FE0EA0F8021277F9A24>I<003FB51280A21300003C140038 ! 3801FE387803FC130700705B495A495A1200495A495A13FF91C7FC3901FE0380EA03FCA2 ! EA07F8380FF007121F01E0130048485A48485A00FF137F90B5FCA2191B7E9A1F>I ! E /Fh 62 124 df11 D<137E3801C180EA0301380703C0120EEB ! 018090C7FCA5B512C0EA0E01B0387F87F8151D809C17>I34 D<126012F012F812681208A3 ! 1210A2122012401280050C7C9C0C>39 D<1380EA0100120212065AA25AA25AA35AA412E0 ! AC1260A47EA37EA27EA27E12027EEA0080092A7C9E10>I<7E12407E12307EA27EA27EA3 ! 7EA41380AC1300A41206A35AA25AA25A12205A5A092A7E9E10>I<126012F0A212701210 ! A41220A212401280040C7C830C>44 DI<126012F0A212600404 ! 7C830C>I<1303A213071306A2130E130C131C1318A213381330A213701360A213E013C0 ! A21201138012031300A25A1206A2120E120CA2121C1218A21238123012701260A212E05A ! A210297E9E15>I<5A1207123F12C71207B3A5EAFFF80D1C7C9B15>49 ! DI< ! EA07E0EA1830EA201CA2EA781E130E131E1238EA001CA2131813301360EA07C0EA003013 ! 1CA2130E130FA2127012F8A3EAF00EEA401C1220EA1830EA07C0101D7E9B15>I<130CA2 ! 131C133CA2135C13DC139CEA011C120312021204120C1208121012301220124012C0B512 ! C038001C00A73801FFC0121C7F9B15>II<13F0EA030CEA0404EA0C0EEA181E1230130CEA7000A21260EAE3E0EAE4 ! 30EAE818EAF00C130EEAE0061307A51260A2EA7006EA300E130CEA1818EA0C30EA03E010 ! 1D7E9B15>I57 D<126012F0A212601200AA126012F0A2126004127C910C>I<1306A3130FA3 ! EB1780A2EB37C01323A2EB43E01341A2EB80F0A338010078A2EBFFF83802003CA3487FA2 ! 000C131F80001E5BB4EBFFF01C1D7F9C1F>65 D68 ! DII<90381F8080EBE061380180 ! 1938070007000E13035A14015A00781300A2127000F01400A6ECFFF0EC0F800070130712 ! 78A212387EA27E6C130B380180113800E06090381F80001C1E7E9C21>I<39FFF0FFF039 ! 0F000F00AC90B5FCEB000FAD39FFF0FFF01C1C7F9B1F>II76 DIII<007FB512C038700F010060130000401440A200C014201280A3000014 ! 00B1497E3803FFFC1B1C7F9B1E>84 D<39FFF01FF0390F000380EC0100B3A26C13021380 ! 00035BEA01C03800E018EB7060EB0F801C1D7F9B1F>I<39FFE00FF0391F0003C0EC0180 ! 6C1400A238078002A213C000035BA2EBE00C00011308A26C6C5AA213F8EB7820A26D5AA3 ! 6D5AA2131F6DC7FCA21306A31C1D7F9B1F>I<3AFFE1FFC0FF3A1F003E003C001E013C13 ! 186C6D1310A32607801F1320A33A03C0278040A33A01E043C080A33A00F081E100A39038 ! F900F3017913F2A2017E137E013E137CA2013C133C011C1338A20118131801081310281D ! 7F9B2B>I<39FFF07FC0390FC01E003807800CEBC00800035B6C6C5A13F000005BEB7880 ! 137C013DC7FC133E7F7F80A2EB13C0EB23E01321EB40F0497E14783801007C00027F141E ! 0006131F001F148039FF807FF01C1C7F9B1F>I92 D97 ! D<12FC121CAA137CEA1D87381E0180381C00C014E014601470A6146014E014C0381E0180 ! 38190700EA10FC141D7F9C17>IIII<13F8EA018CEA071E1206EA0E0C1300A6EAFFE0EA0E00B0EA7F ! E00F1D809C0D>II<12FC121CAA137C1387EA1D03001E1380121CAD38 ! FF9FF0141D7F9C17>I<1218123CA21218C7FCA712FC121CB0EAFF80091D7F9C0C>I<13C0 ! EA01E0A2EA00C01300A7EA07E01200B3A21260EAF0C012F1EA6180EA3E000B25839C0D> ! I<12FC121CAAEB0FE0EB0780EB06005B13105B5B13E0121DEA1E70EA1C781338133C131C ! 7F130F148038FF9FE0131D7F9C16>I<12FC121CB3A9EAFF80091D7F9C0C>I<39FC7E07E0 ! 391C838838391D019018001EEBE01C001C13C0AD3AFF8FF8FF8021127F9124>IIII<3803E080EA0E19EA1805EA3807EA7003A212E0 ! A61270A2EA38071218EA0E1BEA03E3EA0003A7EB1FF0141A7F9116>II ! I<1204A4120CA2121C123CEAFFE0EA1C00A91310A5120CEA0E20EA03C00C1A7F9910>I< ! 38FC1F80EA1C03AD1307120CEA0E1B3803E3F014127F9117>I<38FF07E0383C0380381C ! 0100A2EA0E02A2EA0F06EA0704A2EA0388A213C8EA01D0A2EA00E0A3134013127F9116> ! I<39FF3FC7E0393C0703C0001CEB01801500130B000E1382A21311000713C4A213203803 ! A0E8A2EBC06800011370A2EB8030000013201B127F911E>I<38FF0FE0381E0700EA1C06 ! EA0E046C5AEA039013B0EA01E012007F12011338EA021C1204EA0C0E487E003C138038FE ! 1FF014127F9116>I<38FF07E0383C0380381C0100A2EA0E02A2EA0F06EA0704A2EA0388 ! A213C8EA01D0A2EA00E0A31340A25BA212F000F1C7FC12F312661238131A7F9116>III E /Fi ! 15 116 df<913A03FF800380023FEBF00749B5EAFC0F01079038007F1FD91FF8EB0FFFD9 ! 7FE0130349487F4890C8FC4848157F0007163F4848151F485A170F123F5B1707127FA249 ! 92C7FC12FFAB127F7FEF0380123FA27F001F160718006C6C5D6C6C150E6C6C151E6C5E6C ! 01C05C6D6C495AD91FF8495AD907FFEB3F800101D9FFFEC7FCD9003F13F8020313803131 ! 7BB03C>67 D69 D<913A03FF800380023FEBF00749 ! B5EAFC0F01079038007F1FD91FF8EB0FFFD97FE0130349487F4890C8FC4848157F000716 ! 3F4848151F485A170F123F5B1707127FA24992C7FC12FFA90307B512FEA2127F6DD90001 ! 1380A2123FA27F121F7F120F6C7E6C7E6C7F6C6D5B6D7ED91FF85B903907FF803F010190 ! 38FFFE1FD9003FEBF8070203EBC00137317BB041>71 D ! 78 D82 D85 D97 D99 ! DII<14FF010713C0011F13F0EB7FC79038FF0FF85A13FE ! 120313FCEC07F0EC01C091C7FCA7B512FCA3D803FCC7FCB3A8387FFFF0A31D327EB119> ! I<2703F007F8EB0FF000FFD93FFFEB7FFE4A6DB5FC903CF1F03FC3E07F803D0FF3C01FE7 ! 803FC02607F780EBEF009126000FFEEB1FE001FE5C495CA2495CB3B500C1B50083B5FCA3 ! 40207D9F45>109 D<3903F007F800FFEB3FFF4A7F9039F1F03FC03A0FF3C01FE03807F7 ! 804A6C7E13FE5BA25BB3B500C1B51280A329207D9F2E>I<3803F03F00FFEBFFC001F113 ! F0EBF3C7390FF78FF80007130F13FEA29038FC07F0EC03E0EC008015005BB1B512E0A31D ! 207E9F22>114 DI ! E end %%EndProlog %%BeginSetup ! %%Feature: *Resolution 300dpi ! TeXDict begin ! %%PaperSize: a4 ! %%EndSetup %%Page: 1 1 ! 1 0 bop 79 -160 a Fi(GNU)27 b(Emacs)g(Reference)f(Card)461 ! -92 y Fh(\(for)14 b(v)o(ersion)g(19\))0 28 y Fg(Starting)23 ! b(Emacs)0 125 y Fh(T)m(o)13 b(en)o(ter)i(GNU)f(Emacs)f(19,)g(just)h(t)o ! (yp)q(e)g(its)g(name:)j Ff(emacs)0 192 y Fh(T)m(o)c(read)h(in)g(a)f ! (\014le)h(to)g(edit,)g(see)h(Files,)e(b)q(elo)o(w.)0 ! 306 y Fg(Lea)n(ving)23 b(Emacs)0 403 y Fh(susp)q(end)15 ! b(Emacs)f(\(or)g(iconify)e(it)i(under)h(X\))202 b Ff(C-z)0 ! 453 y Fh(exit)14 b(Emacs)f(p)q(ermanen)o(tly)458 b Ff(C-x)21 ! b(C-c)0 567 y Fg(Files)0 665 y Fe(read)13 b Fh(a)h(\014le)g(in)o(to)f ! (Emacs)490 b Ff(C-x)21 b(C-f)0 715 y Fe(sa)o(v)o(e)13 ! b Fh(a)h(\014le)g(bac)o(k)g(to)f(disk)478 b Ff(C-x)21 ! b(C-s)0 764 y Fh(sa)o(v)o(e)14 b Fe(all)f Fh(\014les)678 ! b Ff(C-x)21 b(s)0 814 y Fe(insert)12 b Fh(con)o(ten)o(ts)j(of)e ! (another)h(\014le)g(in)o(to)f(this)h(bu\013er)68 b Ff(C-x)21 ! b(i)0 864 y Fh(replace)15 b(this)f(\014le)g(with)f(the)i(\014le)f(y)o ! (ou)f(really)g(w)o(an)o(t)98 b Ff(C-x)21 b(C-v)0 914 ! y Fh(write)14 b(bu\013er)h(to)f(a)f(sp)q(eci\014ed)j(\014le)369 ! b Ff(C-x)21 b(C-w)0 964 y Fh(v)o(ersion)14 b(con)o(trol)g(c)o(hec)o ! (kin/c)o(hec)o(k)o(out)310 b Ff(C-x)21 b(C-q)0 1084 y ! Fg(Getting)h(Help)0 1182 y Fh(The)14 b(Help)f(system)g(is)g(simple.)j ! (T)o(yp)q(e)d Ff(C-h)g Fh(\(or)g Ff(F1)p Fh(\))g(and)g(follo)o(w)e(the) ! i(direc-)0 1231 y(tions.)18 b(If)13 b(y)o(ou)h(are)g(a)g(\014rst-time)f ! (user,)h(t)o(yp)q(e)h Ff(C-h)21 b(t)14 b Fh(for)f(a)h ! Fe(tutorial)p Fh(.)0 1298 y(remo)o(v)o(e)f(Help)h(windo)o(w)522 ! b Ff(C-x)21 b(1)0 1347 y Fh(scroll)14 b(Help)g(windo)o(w)555 ! b Ff(C-M-v)0 1414 y Fh(aprop)q(os:)18 b(sho)o(w)c(commands)d(matc)o ! (hing)i(a)g(string)100 b Ff(C-h)21 b(a)0 1463 y Fh(sho)o(w)14 ! b(the)g(function)g(a)g(k)o(ey)f(runs)376 b Ff(C-h)21 ! b(c)0 1513 y Fh(describ)q(e)16 b(a)d(function)556 b Ff(C-h)21 ! b(f)0 1563 y Fh(get)14 b(mo)q(de-sp)q(eci\014c)g(information)361 ! b Ff(C-h)21 b(m)0 1677 y Fg(Error)j(Reco)n(v)n(ery)0 ! 1775 y Fe(ab)q(ort)13 b Fh(partially)f(t)o(yp)q(ed)j(or)f(executing)g ! (command)75 b Ff(C-g)0 1825 y Fe(reco)o(v)o(er)13 b Fh(a)g(\014le)h ! (lost)g(b)o(y)f(a)h(system)g(crash)144 b Ff(M-x)21 b(recover-file)0 ! 1874 y Fe(undo)12 b Fh(an)i(un)o(w)o(an)o(ted)g(c)o(hange)414 ! b Ff(C-x)21 b(u)h Fh(or)g Ff(C-_)0 1924 y Fh(restore)16 ! b(a)d(bu\013er)i(to)f(its)g(original)e(con)o(ten)o(ts)115 ! b Ff(M-x)21 b(revert-buffer)0 1974 y Fh(redra)o(w)14 b(garbaged)g(screen)476 b Ff(C-l)0 2088 y Fg(Incremen)n(tal)21 ! b(Searc)n(h)0 2186 y Fh(searc)o(h)15 b(forw)o(ard)635 ! b Ff(C-s)0 2236 y Fh(searc)o(h)15 b(bac)o(kw)o(ard)602 ! b Ff(C-r)0 2285 y Fh(regular)14 b(expression)h(searc)o(h)448 ! b Ff(C-M-s)0 2335 y Fh(rev)o(erse)16 b(regular)e(expression)h(searc)o ! (h)309 b Ff(C-M-r)0 2401 y Fh(select)15 b(previous)f(searc)o(h)i ! (string)391 b Ff(M-p)0 2451 y Fh(select)15 b(next)g(later)f(searc)o(h)h ! (string)366 b Ff(M-n)0 2501 y Fh(exit)14 b(incremen)o(tal)f(searc)o(h) ! 482 b Ff(RET)0 2551 y Fh(undo)14 b(e\013ect)h(of)f(last)f(c)o(haracter) ! 395 b Ff(DEL)0 2601 y Fh(ab)q(ort)14 b(curren)o(t)h(searc)o(h)533 ! b Ff(C-g)0 2667 y Fh(Use)18 b Ff(C-s)e Fh(or)h Ff(C-r)f ! Fh(again)f(to)i(rep)q(eat)h(the)f(searc)o(h)h(in)f(either)g(direction.) ! 27 b(If)0 2717 y(Emacs)13 b(is)h(still)f(searc)o(hing,)h ! Ff(C-g)f Fh(cancels)i(only)e(the)i(part)f(not)f(done.)129 ! 2783 y Fd(c)120 2784 y Fc(\015)e Fd(1996)e(F)m(ree)j(Soft)o(w)o(are)e ! (F)m(oundation,)j(Inc.)i(P)o(ermissions)e(on)e(bac)o(k.)k(v2.1)1929 ! 2832 y Fh(1)p eop %%Page: 2 2 ! 2 1 bop 0 -168 a Fg(Motion)0 -65 y Fe(en)o(tit)o(y)13 ! b(to)j(mo)o(v)o(e)f(o)o(v)o(er)350 b(bac)o(kw)o(ard)41 ! b(forw)o(ard)0 -15 y Fh(c)o(haracter)593 b Ff(C-b)173 ! b(C-f)0 35 y Fh(w)o(ord)670 b Ff(M-b)173 b(M-f)0 84 y ! Fh(line)694 b Ff(C-p)173 b(C-n)0 134 y Fh(go)13 b(to)h(line)f(b)q ! (eginning)h(\(or)g(end\))237 b Ff(C-a)173 b(C-e)0 184 ! y Fh(sen)o(tence)610 b Ff(M-a)173 b(M-e)0 234 y Fh(paragraph)574 ! b Ff(M-{)173 b(M-})0 284 y Fh(page)676 b Ff(C-x)21 b([)130 ! b(C-x)21 b(])0 333 y Fh(sexp)680 b Ff(C-M-b)129 b(C-M-f)0 ! 383 y Fh(function)610 b Ff(C-M-a)129 b(C-M-e)0 433 y ! Fh(go)13 b(to)h(bu\013er)h(b)q(eginning)e(\(or)h(end\))197 ! b Ff(M-<)173 b(M->)0 501 y Fh(scroll)14 b(to)f(next)i(screen)538 ! b Ff(C-v)0 551 y Fh(scroll)14 b(to)f(previous)i(screen)466 ! b Ff(M-v)0 600 y Fh(scroll)14 b(left)732 b Ff(C-x)21 ! b(<)0 650 y Fh(scroll)14 b(righ)o(t)704 b Ff(C-x)21 b(>)0 ! 700 y Fh(scroll)14 b(curren)o(t)h(line)f(to)f(cen)o(ter)j(of)d(screen) ! 238 b Ff(C-u)21 b(C-l)0 821 y Fg(Killi)o(ng)g(and)i(Deleting)0 ! 925 y Fe(en)o(tit)o(y)13 b(to)j(kill)496 b(bac)o(kw)o(ard)41 ! b(forw)o(ard)0 975 y Fh(c)o(haracter)15 b(\(delete,)g(not)f(kill\))282 ! b Ff(DEL)173 b(C-d)0 1024 y Fh(w)o(ord)670 b Ff(M-DEL)129 ! b(M-d)0 1074 y Fh(line)13 b(\(to)h(end)h(of)s(\))482 ! b Ff(M-0)21 b(C-k)86 b(C-k)0 1124 y Fh(sen)o(tence)610 b Ff(C-x)21 b(DEL)86 b(M-k)0 1174 y Fh(sexp)680 b Ff(M--)21 ! b(C-M-k)42 b(C-M-k)0 1242 y Fh(kill)12 b Fe(region)699 ! b Ff(C-w)0 1291 y Fh(cop)o(y)14 b(region)g(to)f(kill)g(ring)485 ! b Ff(M-w)0 1341 y Fh(kill)12 b(through)i(next)h(o)q(ccurrence)h(of)e ! Fb(char)246 b Ff(M-z)21 b Fb(char)0 1409 y Fh(y)o(ank)13 ! b(bac)o(k)h(last)g(thing)f(killed)417 b Ff(C-y)0 1459 ! y Fh(replace)15 b(last)e(y)o(ank)h(with)f(previous)i(kill)262 ! b Ff(M-y)0 1585 y Fg(Marking)0 1688 y Fh(set)15 b(mark)d(here)653 ! b Ff(C-@)21 b Fh(or)h Ff(C-SPC)0 1738 y Fh(exc)o(hange)15 ! b(p)q(oin)o(t)e(and)h(mark)438 b Ff(C-x)21 b(C-x)0 1806 ! y Fh(set)15 b(mark)d Fb(ar)n(g)17 b Fe(w)o(ords)c Fh(a)o(w)o(a)o(y)428 ! b Ff(M-@)0 1856 y Fh(mark)12 b Fe(paragraph)579 b Ff(M-h)0 ! 1906 y Fh(mark)12 b Fe(page)697 b Ff(C-x)21 b(C-p)0 1955 ! y Fh(mark)12 b Fe(sexp)700 b Ff(C-M-@)0 2005 y Fh(mark)12 b Fe(function)619 b Ff(C-M-h)0 2055 y Fh(mark)12 b(en)o(tire)j Fe(bu\013er)552 b Ff(C-x)21 b(h)0 2176 y Fg(Query)i(Replace)0 --- 1,910 ---- %!PS-Adobe-2.0 ! %%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software %%Title: refcard.dvi ! %%Pages: 6 1 ! %%BoundingBox: 0 0 612 792 %%EndComments ! %%BeginProcSet: tex.pro ! /TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch ! load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{ ! isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale ! Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get ! round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10 ! N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{ ! /vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{ ! statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N ! /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin ! /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array ! /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 ! array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail} ! B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont ! setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup ! length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ ! ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B ! /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 ! N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S ! dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ! ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ! ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image} ! imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr ! put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf ! div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook ! known{bop-hook}if /SI save N @rigin 0 0 moveto}N /eop{clear SI restore ! showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook ! known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256 ! array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}N /p /show load N ! /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X ! /rulex X V}B /V statusdict begin /product where{pop product dup length 7 ge{0 ! 7 getinterval(Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1 ! TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 ! -.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{ ! moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{ ! S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B ! /j{3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w ! }B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p ! a}B /bos{/SS save N}B /eos{clear SS restore}B end ! /TeXscale { 65536 div } def ! ! /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap ! currentlinejoin currentdash currentgray currentmiterlimit ] cvx def ! ! /startTexFig { ! /SavedState save def ! userdict maxlength dict begin ! currentpoint transform ! ! DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap ! setlinewidth setmatrix ! ! itransform moveto ! ! /ury exch TeXscale def ! /urx exch TeXscale def ! /lly exch TeXscale def ! /llx exch TeXscale def ! /y exch TeXscale def ! /x exch TeXscale def ! ! currentpoint /cy exch def /cx exch def ! ! /sx x urx llx sub div def % scaling for x ! /sy y ury lly sub div def % scaling for y ! ! sx sy scale % scale by (sx,sy) ! ! cx sx div llx sub ! cy sy div ury sub translate ! ! /DefFigCTM matrix currentmatrix def ! ! /initmatrix { ! DefFigCTM setmatrix ! } def ! /defaultmatrix { ! DefFigCTM exch copy ! } def ! ! /initgraphics { ! DocumentInitState setmiterlimit setgray setdash ! setlinejoin setlinecap setlinewidth setmatrix ! DefFigCTM setmatrix ! } def ! ! /showpage { ! initgraphics ! } def ! /erasepage { ! initgraphics ! } def ! /copypage {} def ! ! } def ! /clipFig { ! currentpoint 6 2 roll ! newpath 4 copy ! 4 2 roll moveto ! 6 -1 roll exch lineto ! exch lineto ! exch lineto ! closepath clip ! newpath ! moveto ! } def ! /doclip { llx lly urx ury clipFig } def ! /endTexFig { ! end SavedState restore ! } def %%EndProcSet ! TeXDict begin 1000 300 300 @start /Fa 1 59 df<60F0F06004047C830C>58 ! D E /Fb 19 122 df45 D<03CC063C0C3C181C3838303870387038 ! E070E070E070E070E0E2C0E2C0E261E462643C380F127B9115>97 D<3F00070007000E000E000E ! 000E001C001C001C001C0039C03E60383038307038703870387038E070E070E070E060E0E0C0C0 ! C1C0618063003C000D1D7B9C13>I<01F007080C08181C3838300070007000E000E000E000E000 ! E000E008E010602030C01F000E127B9113>I<001F800003800003800007000007000007000007 ! 00000E00000E00000E00000E0003DC00063C000C3C00181C00383800303800703800703800E070 ! 00E07000E07000E07000E0E200C0E200C0E20061E4006264003C3800111D7B9C15>I<01E00710 ! 0C1018083810701070607F80E000E000E000E000E000E0086010602030C01F000D127B9113>I< ! 00F3018F030F06070E0E0C0E1C0E1C0E381C381C381C381C383830383038187818F00F70007000 ! 7000E000E0C0C0E1C0C3007E00101A7D9113>103 D<0FC00001C00001C0000380000380000380 ! 000380000700000700000700000700000E78000E8C000F0E000E0E001C0E001C0E001C0E001C0E ! 00381C00381C00381C00383800703880703880707080707100E03200601C00111D7D9C15>I<01 ! 800380010000000000000000000000000000001C002600470047008E008E000E001C001C001C00 ! 38003800710071007100720072003C00091C7C9B0D>I<1F800380038007000700070007000E00 ! 0E000E000E001C001C001C001C0038003800380038007000700070007000E400E400E400E40068 ! 003800091D7C9C0B>108 D<3C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380 ! E00E0380E01C0701C01C0701C01C0701C01C070380380E0388380E0388380E0708380E0710701C ! 0320300C01C01D127C9122>I<3C3C002646004687004707008E07008E07000E07000E07001C0E ! 001C0E001C0E001C1C00381C40381C40383840383880701900300E0012127C9117>I<01E00718 ! 0C0C180C380C300E700E700EE01CE01CE01CE018E038E030E06060C031801E000F127B9115>I< ! 07870004D98008E0C008E0C011C0E011C0E001C0E001C0E00381C00381C00381C0038180070380 ! 0703000707000706000E8C000E70000E00000E00001C00001C00001C00001C00003C0000FF8000 ! 131A7F9115>I<3C3C26C2468747078E068E000E000E001C001C001C001C003800380038003800 ! 7000300010127C9112>114 D<01F006080C080C1C18181C001F001FC00FF007F0007800386030 ! E030C030806060C01F000E127D9111>I<00C001C001C001C00380038003800380FFE007000700 ! 07000E000E000E000E001C001C001C001C00384038403840388019000E000B1A7D990E>I<1E03 ! 00270700470700470700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C003838803838 ! 801838801839001C5900078E0011127C9116>I<1E03270747074707870E870E0E0E0E0E1C1C1C ! 1C1C1C1C1C38383838183818381C7007F00070007000E0E0C0E1C0818047003C00101A7C9114> ! 121 D E /Fc 1 14 df<003F800000FFE00003C0780007001C000C000600180003003000018030 ! 000180600000C0600000C0C0000060C0000060C0000060C0000060C0000060C0000060600000C0 ! 600000C03000018030000180180003000C00060007001C0003C0780000FFE000003F80001B1A7E ! 9321>13 D E /Fd 47 122 df<40E06020202040408003097D8209>44 DI< ! 40E04003037D8209>I<0F0030C0606060604020C030C030C030C030C030C030C030C030C03040 ! 206060606030C00F000C137E9211>48 D<0C001C00EC000C000C000C000C000C000C000C000C00 ! 0C000C000C000C000C000C000C00FFC00A137D9211>I<1F0060C06060F070F030603000700070 ! 006000C001C00180020004000810101020207FE0FFE00C137E9211>I<0FC03070703870387038 ! 0038003000E00FC0007000380018001C601CF01CF018E03860701FC00E137F9211>I<60607FC0 ! 7F8044004000400040004F0070C040E0006000700070E070E070E06040E021C01F000C137E9211 ! >53 D<07C00C201070207060006000C000CF00D0C0E060C020C030C030C03040306020206010C0 ! 0F000C137E9211>I<40007FFC7FF8401080108020004000800100010003000200060006000E00 ! 0E000E000E000E0004000E147E9311>I<0F00308060404060C020C030C030C0304030607030B0 ! 0F30003000200060E040E08041003E000C137E9211>57 D<003000003000007800007800007800 ! 009C00009C00011E00010E00010E0002070002070004038007FF800403800801C00801C01000E0 ! 3800E0FE07FC16147F9319>65 DI<00FC200703600C00E0180060300060700020600020E00000E00000E00000E00000E00000 ! E000006000207000203000201800400C008007030000FC0013147E9318>I69 DI<00FC200703600C00E0180060300060700020600020E00000E00000E000 ! 00E00000E00FF8E000E06000E07000E03000E01800E00C00E007036000FC2015147E931A>I73 D77 DI80 ! D<1F1030F06030C030C010C010E00070007F003FC00FF000F000380018801880188018C030F060 ! 8FC00D147E9312>83 D<7FFFF06070304070104070108070088070088070080070000070000070 ! 0000700000700000700000700000700000700000700000700000700007FF0015147F9318>II<7F00E1C0E0404060006007E0 ! 38606060C060C064C06461E43E380E0D7E8C11>97 DI<0FE0187020706020C0 ! 00C000C000C000C0006000201018200FC00C0D7F8C0F>I<00780018001800180018001800180F ! 98187820386018C018C018C018C018C0186018203810580F9E0F147F9312>I<0F801040202060 ! 30C010FFF0C000C000C0006000201018200FC00C0D7F8C0F>I<03C00CE018E018401800180018 ! 00FF00180018001800180018001800180018001800180018007F000B1480930A>I<0F3C30E620 ! 40606060606060204030C02F00600060003FE03FF06018C00CC00CC00C601830300FC00F147F8C ! 11>II<2070200000000000F03030303030303030303030FC06157F9409>I107 DIII<0FC01860 ! 20106018C00CC00CC00CC00CC00C6018601838700FC00E0D7F8C11>II114 ! D<3E806180C080C080E0007E003F8003C080C080C0C0C0E1809F000A0D7F8C0D>I<1000100010 ! 0030007000FF80300030003000300030003000300030803080308011000E0009127F910D>IIIIII ! E /Fe 25 122 df<003FE3F801F03F1C03C03E3E07C07C3E0F807C3E0F807C1C0F807C000F807C ! 000F807C000F807C000F807C00FFFFFFC0FFFFFFC00F807C000F807C000F807C000F807C000F80 ! 7C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C007F ! E1FFC07FE1FFC01F1D809C1C>11 D<0FF8001C1E003E0F803E07803E07C01C07C00007C0007FC0 ! 07E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F815127F9117>97 ! DI<03FC000E0E001C1F003C1F00781F00780E00F80000F8 ! 0000F80000F80000F80000F800007800007801803C01801C03000E0E0003F80011127E9115>I< ! 000FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F001F9F00F07F0 ! 1C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801F0F801F07801F07801F03C01F0 ! 1C03F00F0FFE03F9FE171D7E9C1B>I<01FC000F07001C03803C01C07801C07801E0F801E0F801 ! E0FFFFE0F80000F80000F800007800007C00603C00601E00C00F038001FC0013127F9116>I<00 ! 7F0001E38003C7C00787C00F87C00F83800F80000F80000F80000F80000F8000FFF800FFF8000F ! 80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F ! 80007FF8007FF800121D809C0F>I<03F8F00E0F381E0F381C07303C07803C07803C07803C0780 ! 1C07001E0F000E0E001BF8001000001800001800001FFF001FFFC00FFFE01FFFF07801F8F00078 ! F00078F000787000707800F01E03C007FF00151B7F9118>II<1E003F003F003F003F001E00000000000000000000000000FF00FF001F001F001F001F001F ! 001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F9D0E>I107 DIII<01FC ! 000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F800F8F800F87800F07800 ! F03C01E01E03C00F078001FC0015127F9118>II<03F0600F0CE01E07E03C03E0 ! 7C03E07803E0F803E0F803E0F803E0F803E0F803E0F803E07803E07C03E03C03E01C07E00E0FE0 ! 03F3E00003E00003E00003E00003E00003E00003E0001FFC001FFC161A7E9119>II<1FD830786018E018E018F000FF807FE07FF01FF807FC ! 007CC01CC01CE01CE018F830CFC00E127E9113>I<0300030003000300070007000F000F003FFC ! FFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F00E1A7F9913 ! >IIIIII ! E /Ff 75 126 df<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0600000000060F0F0600419779816> ! 33 DI<0387000387000387 ! 000387000387000387007FFFC0FFFFE0FFFFE0070E00070E00070E000E1C000E1C000E1C000E1C ! 00FFFFE0FFFFE07FFFC01C38001C38001C38001C38001C38001C380013197F9816>I<00C00001 ! C00001C00001C00007F0001FFC003FFE007DCF0071C780E1C380E1C780E1C780F1C30079C0003F ! C0001FF00007FC0001FE0001CF0001C70061C380F1C380F1C380E1C38071C70079DF003FFE001F ! F80007E00001C00001C00000C00011207E9C16>I<3801807C03807C0380EE0700EE0700EE0E00 ! EE0E00EE0E00EE1C007C1C007C380038380000700000700000700000E00000E00001C00001C000 ! 01C0000380000383800707C00707C00E0EE00E0EE00E0EE01C0EE01C0EE03807C03807C0180380 ! 13207F9C16>I<30787C3C1C1C1C1C3878F0E040060D789816>39 D<00E001E0038007000E001C ! 001C0038003800700070007000E000E000E000E000E000E000E000E000E0007000700070003800 ! 38001C001C000E000700038001E000E00B217A9C16>II<01C00001C00001C00001C00071C700F9CF807FFF00 ! 1FFC0007F00007F0001FFC007FFF00F9CF8071C70001C00001C00001C00001C00011127E9516> ! I<01C00001C00001C00001C00001C00001C00001C00001C000FFFF80FFFF80FFFF8001C00001C0 ! 0001C00001C00001C00001C00001C00001C00011137E9516>I<387C7E7E3E0E1E1C78F060070B ! 798416>II<70F8F8F8700505788416>I<00018000038000 ! 0380000700000700000E00000E00001C00001C0000380000380000700000700000E00000E00001 ! C00001C0000380000380000700000700000E00000E00001C00001C000038000038000070000070 ! 0000E00000E00000C0000011207E9C16>I<03E0000FF8001FFC001E3C00380E00780F00700700 ! 700700E00380E00380E00380E00380E00380E00380E00380E00380F00780700700700700780F00 ! 3C1E001E3C001FFC000FF80003E00011197E9816>I<01800380038007800F807F80FF80738003 ! 8003800380038003800380038003800380038003800380038003807FF87FFC7FF80E197C9816> ! I<07E0001FF8003FFC00783E00E00700F00780F00380600380000380000380000700000700000E ! 00001C0000380000700000E00001C0000380000F00001E03803803807FFF80FFFF807FFF801119 ! 7E9816>I<07E0001FF8003FFC00781E00780700300700000700000700000E00003E0007FC0007 ! F00007FC00001E00000700000300000380000380600380F00380E00700781E003FFC001FF80007 ! E00011197E9816>I<007C0000FC0000DC0001DC00039C00039C00071C000F1C000E1C001E1C00 ! 3C1C00381C00781C00F01C00FFFFE0FFFFE0FFFFE0001C00001C00001C00001C00001C0001FFC0 ! 01FFC001FFC013197F9816>I<3FFE003FFE003FFE003800003800003800003800003800003800 ! 003800003BF0003FFC003FFE003C0F00300700000380000380600380F00380F00380E00700781E ! 003FFC001FF80007E00011197E9816>I<70F8F8F870000000000000000070F8F8F87005127891 ! 16>58 D<000180000780001F80003E0000F80001F00007C0000F80003E0000FC0000F00000FC00 ! 003E00000F800007C00001F00000F800003E00001F8000078000018011157E9616>60 ! D62 ! D<0FE03FF87FFCF01EF00EF00E601E003C007800F001C003800380038003800380030000000000 ! 0000000003000780078003000F197D9816>I<00F80003FC0007FE000F07001C3F80387F8078FF ! 8071C3C071C3C0E381C0E381C0E381C0E381C0E381C0E381C0E381C071C38071C38078FF00387E ! 001C3C000F03C007FFC003FF0000FC0012197E9816>I<00E00001F00001F00001B00001B00003 ! B80003B80003B800031800071C00071C00071C00071C00071C000E0E000E0E000FFE000FFE001F ! FF001C07001C07001C07007F1FC0FF1FE07F1FC013197F9816>I<7FF800FFFE007FFF001C0F00 ! 1C07801C03801C03801C03801C07801C07001FFF001FFE001FFE001C1F001C03801C03C01C01C0 ! 1C01C01C01C01C01C01C03C01C07807FFF80FFFF007FFC0012197F9816>I<01F18007FB800FFF ! 801F0F803C0780380380700380700380F00000E00000E00000E00000E00000E00000E00000E000 ! 00F000007003807003803803803C07001F0F000FFE0007FC0001F00011197E9816>I<7FF800FF ! FE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E01C00E01C00E01C00E01C00E01C ! 00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00FFFE007FF8001319809816>I< ! 7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C1C001C1C001FFC001FFC00 ! 1FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C00E07FFFE0FFFFE07FFFE013197F ! 9816>II<03E30007FF000FFF001E1F003C0F00380700700700700700F00000E00000E0 ! 0000E00000E00000E03F80E07FC0E03F80F00700700700700700380F003C0F001E1F000FFF0007 ! F70003E70012197E9816>I76 DI<7E1FC0FF3FE07F1FC01D07001D87001D8700 ! 1D87001DC7001DC7001CC7001CC7001CE7001CE7001CE7001C67001C67001C77001C77001C3700 ! 1C37001C37001C17007F1F00FF9F007F0F0013197F9816>I<7FF800FFFE007FFF001C0F801C03 ! 801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FF8001C00001C00001C00 ! 001C00001C00001C00001C00007F0000FF80007F000012197F9816>80 D<7FE000FFF8007FFC00 ! 1C1E001C0F001C07001C07001C07001C07001C0F001C1E001FFC001FF8001FFC001C1C001C0E00 ! 1C0E001C0E001C0E001C0E201C0E701C0E707F07E0FF87E07F03C014197F9816>82 ! D<07E3001FFF003FFF00781F00F00700E00700E00700E00000F000007800003F80001FF00007FC ! 0000FE00000F00000700000380000380600380E00380E00700F80F00FFFE00FFFC00C7F0001119 ! 7E9816>I<7FFFE0FFFFE0FFFFE0E0E0E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000 ! E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007 ! FC0013197F9816>I87 D91 DII<03000F803FE0FDF8F07840100D ! 067C9816>II<081C3C7870E0E0E0E0F0F87830060D789B16 ! >I<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E00E0 ! 0E00E00E00783E007FFFE03FE7E00F83E013127E9116>I<7E0000FE00007E00000E00000E0000 ! 0E00000E00000E3E000EFF000FFF800F83C00F00E00E00E00E00700E00700E00700E00700E0070 ! 0E00700E00E00F01E00F83C00FFF800EFF00063C001419809816>I<03F80FFC1FFE3C1E780C70 ! 00E000E000E000E000E000F000700778073E0E1FFC0FF803F010127D9116>I<003F00007F0000 ! 3F0000070000070000070000070003C7000FF7001FFF003C1F00780F00700700E00700E00700E0 ! 0700E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E014197F9816>I<03E00F ! F81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03F010127D9116> ! I<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00FFFF0001C00001C00001C0 ! 0001C00001C00001C00001C00001C00001C00001C00001C00001C0003FFE007FFF003FFE001119 ! 7F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E00380E00380E00380E001C1C000FF8001F ! F0001BE0003800001800001FFC001FFF003FFF807803C0E000E0E000E0E000E0E000E07001C07C ! 07C03FFF800FFE0003F800131C7F9116>I<7E0000FE00007E00000E00000E00000E00000E0000 ! 0E3C000EFE000FFF000F87800F03800E03800E03800E03800E03800E03800E03800E03800E0380 ! 0E03800E03807FC7F0FFE7F87FC7F01519809816>I<018003C003C0018000000000000000007F ! C07FC07FC001C001C001C001C001C001C001C001C001C001C001C001C07FFFFFFF7FFF101A7D99 ! 16>I<003000780078003000000000000000001FF81FF81FF80038003800380038003800380038 ! 0038003800380038003800380038003800380038003800386070F0F0FFE07FC03F800D237E9916 ! >I<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F000E1E000E ! 3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FFCFF07F87F014 ! 19809816>III<7E3C00FEFE007F ! FF000F87800F03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03807F ! C7F0FFE7F87FC7F01512809116>I<03E0000FF8001FFC003C1E00780F00700700E00380E00380 ! E00380E00380E00380F00780700700780F003C1E001FFC000FF80003E00011127E9116>I<7E3E ! 00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E00F01 ! E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E00000E00007FC000FFE0007FC0 ! 00141B809116>I<07C7000FE7001FF7003C1F00700F00700F00E00700E00700E00700E00700E0 ! 0700E00700700F00700F003C3F003FF7001FE70007C70000070000070000070000070000070000 ! 0700003FE0007FF0003FE0141B7E9116>I ! I<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7E00F12 ! 7D9116>I<0300000700000700000700000700007FFF00FFFF00FFFF0007000007000007000007 ! 000007000007000007000007010007038007038007038007870003FE0001FC0000F80011177F96 ! 16>I<7E1F80FE3F807E1F800E03800E03800E03800E03800E03800E03800E03800E03800E0380 ! 0E03800E03800E0F800FFFF007FBF803E3F01512809116>I<7F1FC0FF1FE07F1FC01C07001E0F ! 000E0E000E0E000E0E00071C00071C00071C00071C0003B80003B80003B80001F00001F00000E0 ! 0013127F9116>II<7F1FC07F3FC07F1FC0 ! 0F1C00073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F1FC0 ! FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E00071C ! 00071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E00000E00001C0 ! 0079C0007BC0007F80003F00003C0000131B7F9116>I<3FFFC07FFFC07FFFC0700780700F0070 ! 1E00003C0000780001F00003E0000780000F00001E01C03C01C07801C0FFFFC0FFFFC0FFFFC012 ! 127F9116>I<001F80007F8000FF8001E00001C00001C00001C00001C00001C00001C00001C000 ! 01C00001C00003C0007F8000FF0000FF00007F800003C00001C00001C00001C00001C00001C000 ! 01C00001C00001C00001C00001E00000FF80007F80001F8011207E9C16>II<7C0000FF0000FF80 ! 0003C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001E00000FF00007F ! 80007F8000FF0001E00001C00001C00001C00001C00001C00001C00001C00001C00001C00003C0 ! 00FF8000FF00007C000011207E9C16>I E /Fg 42 123 df<0001FF81FE00001FFFEFFF80007F ! 80FF87C000FC00FE0FE001F801FE0FE003F801FC0FE007F001FC0FE007F001FC07C007F001FC00 ! 0007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC0000FFFF ! FFFFF800FFFFFFFFF800FFFFFFFFF80007F001FC000007F001FC000007F001FC000007F001FC00 ! 0007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F0 ! 01FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC000007F001FC00 ! 0007F001FC000007F001FC000007F001FC000007F001FC00007FFF1FFFE0007FFF1FFFE0007FFF ! 1FFFE0002B2A7FA928>11 D<000003800000000007C00000000007C0000000000FE0000000000F ! E0000000000FE0000000001FF0000000001FF0000000003FF8000000003FF8000000003FF80000 ! 000073FC0000000073FC00000000F3FE00000000E1FE00000000E1FE00000001C0FF00000001C0 ! FF00000003C0FF80000003807F80000007807FC0000007003FC0000007003FC000000E003FE000 ! 000E001FE000001E001FF000001C000FF000001FFFFFF000003FFFFFF800003FFFFFF800007800 ! 07FC0000700003FC0000700003FC0000E00001FE0000E00001FE0001E00001FF0001C00000FF00 ! 01C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001FFFFE2F297EA834>65 ! DI<00003FF001800003FFFE0380000FFFFF878000 ! 3FF007DF8000FF8001FF8001FE00007F8003FC00003F8007F000001F800FF000000F801FE00000 ! 07801FE0000007803FC0000007803FC0000003807FC0000003807F80000003807F8000000000FF ! 8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000 ! 0000FF8000000000FF80000000007F80000000007F80000000007FC0000003803FC0000003803F ! C0000003801FE0000003801FE0000007000FF00000070007F000000E0003FC00001E0001FE0000 ! 3C0000FF8000F800003FF007E000000FFFFFC0000003FFFF000000003FF8000029297CA832>I< ! FFFFFFF80000FFFFFFFF8000FFFFFFFFE00003FC001FF80003FC0007FC0003FC0001FE0003FC00 ! 00FF0003FC00007F8003FC00003FC003FC00001FC003FC00001FE003FC00001FE003FC00000FF0 ! 03FC00000FF003FC00000FF003FC00000FF003FC00000FF803FC00000FF803FC00000FF803FC00 ! 000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF8 ! 03FC00000FF003FC00000FF003FC00000FF003FC00001FE003FC00001FE003FC00001FC003FC00 ! 003FC003FC00007F8003FC00007F0003FC0001FE0003FC0003FC0003FC001FF800FFFFFFFFE000 ! FFFFFFFF8000FFFFFFFC00002D297DA835>III<00007FE003000003FFFC0700001FFFFF0F00003FF00FFF0000 ! FF8001FF0001FE0000FF0003F800003F0007F000003F000FF000001F001FE000000F001FE00000 ! 0F003FC000000F003FC0000007007FC0000007007F80000007007F8000000000FF8000000000FF ! 8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000 ! 0000FF8001FFFFF87F8001FFFFF87F8001FFFFF87FC00000FF003FC00000FF003FC00000FF001F ! E00000FF001FE00000FF000FF00000FF0007F00000FF0003F80000FF0001FE0000FF0000FF8001 ! FF00003FF007BF00001FFFFF1F000003FFFE0F0000007FF003002D297CA836>III75 DII<0000FFE000000007FFFC0000003FC07F8000007F001FC00001FC0007F00003 ! F80003F80007F00001FC000FF00001FE001FE00000FF001FE00000FF003FC000007F803FC00000 ! 7F807FC000007FC07FC000007FC07F8000003FC07F8000003FC0FF8000003FE0FF8000003FE0FF ! 8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF800000 ! 3FE0FF8000003FE07F8000003FC07F8000003FC07FC000007FC03FC000007F803FC000007F801F ! E00000FF001FE01F00FF000FF03F81FE0007F060C1FC0003F8C063F80001FCC077F00000FFC07F ! E000003FE07F8000000FFFFE00000000FFFE00600000003E00600000003F00600000001F81E000 ! 00001FFFE00000001FFFC00000000FFFC00000000FFFC000000007FF8000000007FF8000000003 ! FF0000000001FE000000000078002B357CA834>81 DI<007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001E0FC0001E0FC ! 0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC001FFFFE00 ! 0FFFFF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000FF8000007F8000003F8600001 ! F8E00001F8E00001F8E00001F8F00001F0F00001F0F80003F0FC0003E0FF0007C0FFE01F80F3FF ! FF00E0FFFE00C01FF0001D297CA826>I<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC0 ! 3FC07E003FC007C078003FC003C078003FC003C070003FC001C0F0003FC001E0F0003FC001E0E0 ! 003FC000E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E000003FC0000000003FC0 ! 000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000 ! 003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 ! 000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000 ! 003FC00000007FFFFFE000007FFFFFE000007FFFFFE0002B287EA730>I87 D<01FF800007FFF0000F81F8001FC07E001FC07E001FC0 ! 3F000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F803F ! 803F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E007F807F00DF803F839FFC ! 0FFF0FFC01FC03FC1E1B7E9A21>97 DI<00 ! 1FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F0000007F000000 ! FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F0000007F8000 ! 003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE0001A1B7E9A1F>I<00003F ! F80000003FF80000003FF800000003F800000003F800000003F800000003F800000003F8000000 ! 03F800000003F800000003F800000003F800000003F800000003F800000003F800001FE3F80000 ! FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003F8007F0003F800 ! 7F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8 ! 007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007C00FF80003F03B ! FF8000FFF3FF80003FC3FF80212A7EA926>I<003FE00001FFF80003F07E0007C01F000F801F80 ! 1F800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF0000 ! 00FF000000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC001C007E0038003F8 ! 1F0000FFFE00001FF0001B1B7E9A20>I<0007F0003FFC00FE3E01F87F03F87F03F07F07F07F07 ! F03E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007 ! F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007 ! F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915>I<00FF81F003FF ! E7F80FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F007F007F007F007F007F ! 007F003F007E001F007C001F80FC000FC1F8001FFFE00018FF800038000000380000003C000000 ! 3E0000003FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000 ! F8F80000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE00007FF0001E28 ! 7E9A22>II<07000F801FC03FE03FE03FE0 ! 1FC00F8007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00F ! E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7DAA ! 14>I107 DIII<003FE00001FFFC0003F07E000FC01F ! 801F800FC03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF00 ! 07F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800FC00F ! C01F8007F07F0001FFFC00003FE0001D1B7E9A22>II ! 114 D<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF80 ! 3FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC0070FF01E0 ! F7FFC0C1FF00161B7E9A1B>I<00700000700000700000700000F00000F00000F00001F00003F0 ! 0003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007F0 ! 0007F00007F00007F00007F00007F00007F03807F03807F03807F03807F03807F03803F03803F8 ! 7001F86000FFC0001F8015267FA51B>IIIIII<3FFFFF803F ! FFFF803F007F003C00FE003801FE007803FC007803F8007007F800700FF000700FE000001FC000 ! 003FC000007F8000007F000000FF000001FE038001FC038003F8038007F803800FF007800FE007 ! 801FE007003FC00F003F801F007F007F00FFFFFF00FFFFFF00191B7E9A1F>I ! E /Fh 62 124 df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0 ! 000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E01 ! C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E ! 01C0007F87FC001A1D809C18>11 D<007E0001C1800301800703C00E03C00E01800E00000E0000 ! 0E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 ! 0E01C00E01C00E01C00E01C00E01C00E01C00E01C07F87F8151D809C17>I<6060F0F0F8F86868 ! 080808080808101010102020404080800D0C7F9C15>34 D<60F0F8680808081010204080050C7C ! 9C0C>39 D<004000800100020006000C000C0018001800300030007000600060006000E000E000 ! E000E000E000E000E000E000E000E000E000E000600060006000700030003000180018000C000C ! 00060002000100008000400A2A7D9E10>I<800040002000100018000C000C0006000600030003 ! 00038001800180018001C001C001C001C001C001C001C001C001C001C001C001C0018001800180 ! 038003000300060006000C000C00180010002000400080000A2A7E9E10>I<60F0F07010101010 ! 20204080040C7C830C>44 DI<60F0F06004047C830C>I<000100030006 ! 00060006000C000C000C0018001800180030003000300060006000C000C000C001800180018003 ! 0003000300060006000C000C000C00180018001800300030003000600060006000C000C0001029 ! 7E9E15>I<030007003F00C7000700070007000700070007000700070007000700070007000700 ! 0700070007000700070007000700070007000F80FFF80D1C7C9B15>49 D<07C01830201C400C40 ! 0EF00FF80FF807F8077007000F000E000E001C001C00380070006000C00180030006010C011801 ! 10023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C781E780E781E381E001C001C00180030 ! 006007E00030001C001C000E000F000F700FF80FF80FF80FF00E401C201C183007E0101D7E9B15 ! >I<000C00000C00001C00003C00003C00005C0000DC00009C00011C00031C00021C00041C000C ! 1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C0000 ! 1C00001C0001FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E02430 ! 2818301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0101D7E9B15 ! >I<00F0030C06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006E007E007E0 ! 07E007E007600760077006300E300C18180C3003E0101D7E9B15>I<03C00C301818300C700C60 ! 0EE006E006E007E007E007E007E0076007700F300F18170C2707C700060006000E300C780C7818 ! 7010203030C00F80101D7E9B15>57 D<60F0F0600000000000000000000060F0F06004127C910C ! >I<000600000006000000060000000F0000000F0000000F000000178000001780000017800000 ! 23C0000023C0000023C0000041E0000041E0000041E0000080F0000080F0000180F80001007800 ! 01FFF80003007C0002003C0002003C0006003E0004001E0004001E000C001F001E001F00FF80FF ! F01C1D7F9C1F>65 D68 DII<00 ! 1F808000E0618001801980070007800E0003801C0003801C000180380001807800008078000080 ! 70000080F0000000F0000000F0000000F0000000F0000000F0000000F000FFF0F0000F80700007 ! 807800078078000780380007801C0007801C0007800E00078007000B800180118000E06080001F ! 80001C1E7E9C21>III76 D ! II<003F800000E0E0000380380007001C000E000E001C0007003C00078038000380780003C0 ! 780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001 ! E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C000380380000E0 ! E000003F80001B1E7E9C20>I<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F ! 0020800F0020800F0020000F0000000F0000000F0000000F0000000F0000000F0000000F000000 ! 0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000 ! 001F800003FFFC001B1C7F9B1E>84 DIII<7FF0FFC00FC03E000780180003C018 ! 0003E0100001E0200001F0600000F0400000788000007D8000003D0000001E0000001F0000000F ! 0000000F8000000F80000013C0000023E0000021E0000041F00000C0F8000080780001007C0003 ! 003C0002001E0006001F001F003F80FFC0FFF01C1C7F9B1F>I<08081010202040404040808080 ! 808080B0B0F8F8787830300D0C7A9C15>92 D<1FC000307000783800781C00301C00001C00001C ! 0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C40304E801F870012127E9115 ! >97 DI<07E00C301878307870306000E000E000E000E000 ! E000E00060007004300418080C3007C00E127E9112>I<003F0000070000070000070000070000 ! 070000070000070000070000070000070003E7000C1700180F00300700700700600700E00700E0 ! 0700E00700E00700E00700E00700600700700700300700180F000C370007C7E0131D7E9C17>I< ! 03E00C301818300C700E6006E006FFFEE000E000E000E00060007002300218040C1803E00F127F ! 9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E000E ! 000E000E000E000E000E000E000E000E000E000E007FE00F1D809C0D>I<00038003C4C00C38C0 ! 1C3880181800381C00381C00381C00381C001818001C38000C300013C000100000300000180000 ! 1FF8001FFF001FFF803003806001C0C000C0C000C0C000C06001803003001C0E0007F800121C7F ! 9215>II<18003C003C0018000000000000000000000000 ! 000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80 ! 091D7F9C0C>I<00C001E001E000C000000000000000000000000000000FE000E000E000E000E0 ! 00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0F1C061 ! 803E000B25839C0D>IIIII<03F0000E1C00180600300300700380600180E001C0E001C0 ! E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F00012127F9115>II<03C1000C3300180B00300F00700700700700E00700E00700E00700E00700E00700E0 ! 0700600700700700300F00180F000C370007C70000070000070000070000070000070000070000 ! 0700003FE0131A7E9116>II<1F9030704030C010C010E010F8007F803FE00FF000F880 ! 388018C018C018E010D0608FC00D127F9110>I<04000400040004000C000C001C003C00FFE01C ! 001C001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910> ! IIII<7F8FF00F03800F030007020003840001C80001D80000F00000700000780000F8 ! 00009C00010E00020E000607000403801E07C0FF0FF81512809116>II<7FFC70 ! 386038407040F040E041C003C0038007000F040E041C043C0C380870087038FFF80E127F9112> ! II E /Fi 15 116 df<000003FF80018000003FFFF003800001FFFFFC0F ! 800007FF007F1F80001FF8000FBF80003FE00003FF8000FF800000FF8001FF0000007F8003FE00 ! 00003F8007FC0000003F8007FC0000001F800FF80000001F801FF80000000F801FF00000000F80 ! 3FF000000007803FF000000007807FF000000007807FE000000007807FE000000000007FE00000 ! 000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FF ! E00000000000FFE00000000000FFE00000000000FFE000000000007FE000000000007FE0000000 ! 00007FE000000000007FF000000003803FF000000003803FF000000003801FF000000003801FF8 ! 00000007800FF8000000070007FC000000070007FC0000000E0003FE0000001E0001FF0000003C ! 0000FF8000007800003FE00000F000001FF80003E0000007FF003F80000001FFFFFE000000003F ! FFF80000000003FF80000031317BB03C>67 D69 D<000003FF80018000003FFFF003800001FFFFFC0F ! 800007FF007F1F80001FF8000FBF80003FE00003FF8000FF800000FF8001FF0000007F8003FE00 ! 00003F8007FC0000003F8007FC0000001F800FF80000001F801FF80000000F801FF00000000F80 ! 3FF000000007803FF000000007807FF000000007807FE000000007807FE000000000007FE00000 ! 000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FF ! E00000000000FFE00000000000FFE00000000000FFE00007FFFFFE7FE00007FFFFFE7FE00007FF ! FFFE7FE0000001FF807FF0000001FF803FF0000001FF803FF0000001FF801FF0000001FF801FF8 ! 000001FF800FF8000001FF8007FC000001FF8007FC000001FF8003FE000001FF8001FF000001FF ! 8000FF800001FF80003FE00003FF80001FF80007FF800007FF803F3F800001FFFFFE1F8000003F ! FFF80780000003FFC0018037317BB041>71 D78 D82 ! D85 D<007FF8000003FFFF000007FFFFC0000FE01FE0001FF007F0001FF003 ! F8001FF003FC001FF001FE000FE001FE0007C001FE00010001FE00000001FE00000001FE000001 ! FFFE00003FFFFE0001FFF1FE0007FE01FE000FF001FE001FC001FE003F8001FE007F8001FE00FF ! 0001FE00FF0001FE00FF0001FE00FF0001FE00FF0003FE007F8003FE007FC00EFE003FF03CFF00 ! 0FFFF87FF807FFF03FF800FF800FF825207E9F28>97 D<0007FF00007FFFE000FFFFF003FC03F8 ! 07F007FC0FE007FC1FE007FC3FC007FC3FC003F87FC001F07F8000407F800000FF800000FF8000 ! 00FF800000FF800000FF800000FF800000FF800000FF8000007F8000007FC000007FC000003FC0 ! 000E3FE0000E1FE0001C0FF0001C07F8007803FF01F000FFFFE0007FFF800007FC001F207D9F25 ! >99 D<00000007E0000003FFE0000003FFE0000003FFE00000003FE00000001FE00000001FE000 ! 00001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE0 ! 0000001FE00000001FE00000001FE0000FF81FE0007FFF1FE001FFFFDFE003FE03FFE007F800FF ! E00FE0003FE01FE0001FE03FC0001FE03FC0001FE07F80001FE07F80001FE07F80001FE0FF8000 ! 1FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE07F80 ! 001FE07F80001FE07F80001FE03FC0001FE03FC0001FE01FC0003FE00FE0007FE007F001FFE003 ! FC07DFF001FFFF9FFF007FFE1FFF000FF01FFF28327DB12E>I<0007FC0000003FFF800000FFFF ! E00003FC07F00007F801F8000FE000FC001FE0007E003FC0007E003FC0003F007FC0003F007F80 ! 003F007F80003F80FF80003F80FF80003F80FFFFFFFF80FFFFFFFF80FFFFFFFF80FF80000000FF ! 80000000FF800000007F800000007F800000003FC00000003FC00003801FC00003801FE0000780 ! 0FF0000F0007F8001E0003FE00FC0000FFFFF800003FFFE0000003FF000021207E9F26>I<0000 ! FF000007FFC0001FFFE0003FC7F0007F0FF800FE0FF801FE0FF801FC0FF803FC07F003FC03E003 ! FC01C003FC000003FC000003FC000003FC000003FC000003FC000003FC0000FFFFF800FFFFF800 ! FFFFF80003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00 ! 0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC ! 000003FC000003FC000003FC000003FC000003FC000003FC000003FC00007FFFF0007FFFF0007F ! FFF0001D327EB119>I<03F007F8000FF000FFF03FFF007FFE00FFF07FFF80FFFF00FFF0F03FC1 ! E07F800FF1C01FE3803FC007F3000FE6001FC007F6000FFC001FE007FE000FFC001FE007FC000F ! F8001FE007FC000FF8001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F800 ! 0FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8 ! 000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007 ! F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE0 ! 07F8000FF0001FE0FFFFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF40207D9F45> ! 109 D<03F007F80000FFF03FFF0000FFF07FFF8000FFF0F03FC0000FF1C01FE00007F3000FE000 ! 07F6000FF00007FE000FF00007FC000FF00007FC000FF00007F8000FF00007F8000FF00007F800 ! 0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000 ! 07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800 ! 0FF00007F8000FF00007F8000FF00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF80 ! 29207D9F2E>I<03F03F00FFF07FC0FFF1FFE0FFF3C7F00FF38FF807F70FF807F60FF807FE0FF8 ! 07FC07F007FC03E007FC008007F8000007F8000007F8000007F8000007F8000007F8000007F800 ! 0007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8 ! 000007F80000FFFFE000FFFFE000FFFFE0001D207E9F22>114 D<00FF870007FFEF001FFFFF00 ! 3F007F003C001F0078000F00F8000700F8000700F8000700FC000700FF000000FFF800007FFFC0 ! 003FFFF0003FFFFC000FFFFE0007FFFF0001FFFF80001FFF800000FFC000001FC060000FC0E000 ! 07C0E00007C0F00007C0F8000780F8000F80FE000F00FF803E00FFFFFC00F3FFF800C07FC0001A ! 207D9F21>I E end %%EndProlog %%BeginSetup ! %%Feature: *Resolution 300 ! TeXDict begin %%EndSetup %%Page: 1 1 ! bop 79 -160 a Fi(GNU)27 b(Emacs)g(Reference)f(Card)461 -92 ! y Fh(\(for)14 b(v)o(ersion)g(19\))0 28 y Fg(Starting)23 b(Emacs)0 ! 125 y Fh(T)m(o)13 b(en)o(ter)i(GNU)f(Emacs)f(19,)g(just)h(t)o(yp)q(e)g(its)g ! (name:)j Ff(emacs)0 192 y Fh(T)m(o)c(read)h(in)g(a)f(\014le)h(to)g(edit,)g ! (see)h(Files,)e(b)q(elo)o(w.)0 306 y Fg(Lea)n(ving)23 b(Emacs)0 ! 403 y Fh(susp)q(end)15 b(Emacs)f(\(or)g(iconify)e(it)i(under)h(X\))202 ! b Ff(C-z)0 453 y Fh(exit)14 b(Emacs)f(p)q(ermanen)o(tly)458 ! b Ff(C-x)21 b(C-c)0 567 y Fg(Files)0 665 y Fe(read)13 b Fh(a)h(\014le)g(in)o ! (to)f(Emacs)490 b Ff(C-x)21 b(C-f)0 715 y Fe(sa)o(v)o(e)13 ! b Fh(a)h(\014le)g(bac)o(k)g(to)f(disk)478 b Ff(C-x)21 b(C-s)0 ! 764 y Fh(sa)o(v)o(e)14 b Fe(all)f Fh(\014les)678 b Ff(C-x)21 ! b(s)0 814 y Fe(insert)12 b Fh(con)o(ten)o(ts)j(of)e(another)h(\014le)g(in)o ! (to)f(this)h(bu\013er)68 b Ff(C-x)21 b(i)0 864 y Fh(replace)15 ! b(this)f(\014le)g(with)f(the)i(\014le)f(y)o(ou)f(really)g(w)o(an)o(t)98 ! b Ff(C-x)21 b(C-v)0 914 y Fh(write)14 b(bu\013er)h(to)f(a)f(sp)q(eci\014ed)j ! (\014le)369 b Ff(C-x)21 b(C-w)0 964 y Fh(v)o(ersion)14 b(con)o(trol)g(c)o ! (hec)o(kin/c)o(hec)o(k)o(out)310 b Ff(C-x)21 b(C-q)0 1084 y ! Fg(Getting)h(Help)0 1182 y Fh(The)14 b(Help)f(system)g(is)g(simple.)j(T)o(yp) ! q(e)d Ff(C-h)g Fh(\(or)g Ff(F1)p Fh(\))g(and)g(follo)o(w)e(the)i(direc-)0 ! 1231 y(tions.)18 b(If)13 b(y)o(ou)h(are)g(a)g(\014rst-time)f(user,)h(t)o(yp)q ! (e)h Ff(C-h)21 b(t)14 b Fh(for)f(a)h Fe(tutorial)p Fh(.)0 1298 ! y(remo)o(v)o(e)f(Help)h(windo)o(w)522 b Ff(C-x)21 b(1)0 1347 ! y Fh(scroll)14 b(Help)g(windo)o(w)555 b Ff(C-M-v)0 1414 y Fh(aprop)q(os:)18 ! b(sho)o(w)c(commands)d(matc)o(hing)i(a)g(string)100 b Ff(C-h)21 ! b(a)0 1463 y Fh(sho)o(w)14 b(the)g(function)g(a)g(k)o(ey)f(runs)376 ! b Ff(C-h)21 b(c)0 1513 y Fh(describ)q(e)16 b(a)d(function)556 ! b Ff(C-h)21 b(f)0 1563 y Fh(get)14 b(mo)q(de-sp)q(eci\014c)g(information)361 ! b Ff(C-h)21 b(m)0 1677 y Fg(Error)j(Reco)n(v)n(ery)0 1775 y ! Fe(ab)q(ort)13 b Fh(partially)f(t)o(yp)q(ed)j(or)f(executing)g(command)75 ! b Ff(C-g)0 1825 y Fe(reco)o(v)o(er)13 b Fh(a)g(\014le)h(lost)g(b)o(y)f(a)h ! (system)g(crash)144 b Ff(M-x)21 b(recover-file)0 1874 y Fe(undo)12 ! b Fh(an)i(un)o(w)o(an)o(ted)g(c)o(hange)414 b Ff(C-x)21 b(u)h ! Fh(or)g Ff(C-_)0 1924 y Fh(restore)16 b(a)d(bu\013er)i(to)f(its)g(original)e ! (con)o(ten)o(ts)115 b Ff(M-x)21 b(revert-buffer)0 1974 y Fh(redra)o(w)14 b(garbaged)g(screen)476 b Ff(C-l)0 2088 y Fg(Incremen)n(tal)21 ! b(Searc)n(h)0 2186 y Fh(searc)o(h)15 b(forw)o(ard)635 b Ff(C-s)0 ! 2236 y Fh(searc)o(h)15 b(bac)o(kw)o(ard)602 b Ff(C-r)0 2285 ! y Fh(regular)14 b(expression)h(searc)o(h)448 b Ff(C-M-s)0 2335 ! y Fh(rev)o(erse)16 b(regular)e(expression)h(searc)o(h)309 b ! Ff(C-M-r)0 2401 y Fh(select)15 b(previous)f(searc)o(h)i(string)391 ! b Ff(M-p)0 2451 y Fh(select)15 b(next)g(later)f(searc)o(h)h(string)366 ! b Ff(M-n)0 2501 y Fh(exit)14 b(incremen)o(tal)f(searc)o(h)482 ! b Ff(RET)0 2551 y Fh(undo)14 b(e\013ect)h(of)f(last)f(c)o(haracter)395 ! b Ff(DEL)0 2601 y Fh(ab)q(ort)14 b(curren)o(t)h(searc)o(h)533 ! b Ff(C-g)0 2667 y Fh(Use)18 b Ff(C-s)e Fh(or)h Ff(C-r)f Fh(again)f(to)i(rep)q ! (eat)h(the)f(searc)o(h)h(in)f(either)g(direction.)27 b(If)0 ! 2717 y(Emacs)13 b(is)h(still)f(searc)o(hing,)h Ff(C-g)f Fh(cancels)i(only)e ! (the)i(part)f(not)f(done.)129 2783 y Fd(c)120 2784 y Fc(\015)e ! Fd(1996)e(F)m(ree)j(Soft)o(w)o(are)e(F)m(oundation,)j(Inc.)i(P)o(ermissions)e ! (on)e(bac)o(k.)k(v2.1)1929 2832 y Fh(1)p eop %%Page: 2 2 ! bop 0 -168 a Fg(Motion)0 -65 y Fe(en)o(tit)o(y)13 b(to)j(mo)o(v)o(e)f(o)o(v)o ! (er)350 b(bac)o(kw)o(ard)41 b(forw)o(ard)0 -15 y Fh(c)o(haracter)593 ! b Ff(C-b)173 b(C-f)0 35 y Fh(w)o(ord)670 b Ff(M-b)173 b(M-f)0 ! 84 y Fh(line)694 b Ff(C-p)173 b(C-n)0 134 y Fh(go)13 b(to)h(line)f(b)q ! (eginning)h(\(or)g(end\))237 b Ff(C-a)173 b(C-e)0 184 y Fh(sen)o(tence)610 ! b Ff(M-a)173 b(M-e)0 234 y Fh(paragraph)574 b Ff(M-{)173 b(M-})0 ! 284 y Fh(page)676 b Ff(C-x)21 b([)130 b(C-x)21 b(])0 333 y ! Fh(sexp)680 b Ff(C-M-b)129 b(C-M-f)0 383 y Fh(function)610 ! b Ff(C-M-a)129 b(C-M-e)0 433 y Fh(go)13 b(to)h(bu\013er)h(b)q(eginning)e ! (\(or)h(end\))197 b Ff(M-<)173 b(M->)0 501 y Fh(scroll)14 b(to)f(next)i ! (screen)538 b Ff(C-v)0 551 y Fh(scroll)14 b(to)f(previous)i(screen)466 ! b Ff(M-v)0 600 y Fh(scroll)14 b(left)732 b Ff(C-x)21 b(<)0 ! 650 y Fh(scroll)14 b(righ)o(t)704 b Ff(C-x)21 b(>)0 700 y Fh(scroll)14 ! b(curren)o(t)h(line)f(to)f(cen)o(ter)j(of)d(screen)238 b Ff(C-u)21 ! b(C-l)0 821 y Fg(Killi)o(ng)g(and)i(Deleting)0 925 y Fe(en)o(tit)o(y)13 ! b(to)j(kill)496 b(bac)o(kw)o(ard)41 b(forw)o(ard)0 975 y Fh(c)o(haracter)15 ! b(\(delete,)g(not)f(kill\))282 b Ff(DEL)173 b(C-d)0 1024 y ! Fh(w)o(ord)670 b Ff(M-DEL)129 b(M-d)0 1074 y Fh(line)13 b(\(to)h(end)h(of)s ! (\))482 b Ff(M-0)21 b(C-k)86 b(C-k)0 1124 y Fh(sen)o(tence)610 b Ff(C-x)21 b(DEL)86 b(M-k)0 1174 y Fh(sexp)680 b Ff(M--)21 ! b(C-M-k)42 b(C-M-k)0 1242 y Fh(kill)12 b Fe(region)699 b Ff(C-w)0 ! 1291 y Fh(cop)o(y)14 b(region)g(to)f(kill)g(ring)485 b Ff(M-w)0 ! 1341 y Fh(kill)12 b(through)i(next)h(o)q(ccurrence)h(of)e Fb(char)246 ! b Ff(M-z)21 b Fb(char)0 1409 y Fh(y)o(ank)13 b(bac)o(k)h(last)g(thing)f ! (killed)417 b Ff(C-y)0 1459 y Fh(replace)15 b(last)e(y)o(ank)h(with)f ! (previous)i(kill)262 b Ff(M-y)0 1585 y Fg(Marking)0 1688 y ! Fh(set)15 b(mark)d(here)653 b Ff(C-@)21 b Fh(or)h Ff(C-SPC)0 ! 1738 y Fh(exc)o(hange)15 b(p)q(oin)o(t)e(and)h(mark)438 b Ff(C-x)21 ! b(C-x)0 1806 y Fh(set)15 b(mark)d Fb(ar)n(g)17 b Fe(w)o(ords)c ! Fh(a)o(w)o(a)o(y)428 b Ff(M-@)0 1856 y Fh(mark)12 b Fe(paragraph)579 ! b Ff(M-h)0 1906 y Fh(mark)12 b Fe(page)697 b Ff(C-x)21 b(C-p)0 ! 1955 y Fh(mark)12 b Fe(sexp)700 b Ff(C-M-@)0 2005 y Fh(mark)12 b Fe(function)619 b Ff(C-M-h)0 2055 y Fh(mark)12 b(en)o(tire)j Fe(bu\013er)552 b Ff(C-x)21 b(h)0 2176 y Fg(Query)i(Replace)0 *************** Fe(bu\013er)552 b Ff(C-x)21 b(h)0 2176 y *** 594,641 **** b Ff(M-\045)0 2330 y Fh(using)14 b(regular)g(expressions)226 b Ff(M-x)21 b(query-replace-rege)o(xp)0 2397 y Fh(V)m(alid)12 ! b(resp)q(onses)17 b(in)c(query-replace)i(mo)q(de)e(are)0 ! 2465 y Fe(replace)f Fh(this)i(one,)g(go)f(on)h(to)g(next)327 ! b Ff(SPC)0 2515 y Fh(replace)15 b(this)f(one,)f(don't)h(mo)o(v)o(e)387 b Ff(,)0 2565 y Fe(skip)13 b Fh(to)g(next)i(without)e(replacing)340 b Ff(DEL)0 2614 y Fh(replace)15 b(all)d(remaining)g(matc)o(hes)361 ! b Ff(!)0 2664 y Fe(bac)o(k)16 b(up)d Fh(to)g(the)i(previous)f(matc)o(h) ! 322 b Ff(^)0 2714 y Fe(exit)13 b Fh(query-replace)566 ! b Ff(RET)0 2764 y Fh(en)o(ter)15 b(recursiv)o(e)g(edit)f(\()p ! Ff(C-M-c)f Fh(to)h(exit\))265 b Ff(C-r)1929 2832 y Fh(2)p ! eop %%Page: 3 3 ! 3 2 bop 0 -168 a Fg(Multiple)20 b(Windo)n(ws)0 -86 y ! Fh(When)14 b(t)o(w)o(o)f(commands)f(are)i(sho)o(wn,)g(the)g(second)h ! (is)f(for)f(\\other)i(frame.")0 -24 y(delete)g(all)e(other)h(windo)o ! (ws)460 b Ff(C-x)21 b(1)0 38 y Fh(split)13 b(windo)o(w)h(in)f(t)o(w)o ! (o)g(v)o(ertically)230 b Ff(C-x)21 b(2)129 b(C-x)21 b(5)h(2)0 ! 88 y Fh(delete)15 b(this)f(windo)o(w)429 b Ff(C-x)21 ! b(0)129 b(C-x)21 b(5)h(0)0 150 y Fh(split)13 b(windo)o(w)h(in)f(t)o(w)o ! (o)g(horizon)o(tally)314 b Ff(C-x)21 b(3)0 213 y Fh(scroll)14 ! b(other)g(windo)o(w)545 b Ff(C-M-v)0 275 y Fh(switc)o(h)14 ! b(cursor)h(to)f(another)g(windo)o(w)174 b Ff(C-x)21 b(o)129 ! b(C-x)21 b(5)h(o)0 325 y Fh(select)15 b(bu\013er)g(in)f(other)g(windo)o ! (w)241 b Ff(C-x)21 b(4)h(b)85 b(C-x)21 b(5)h(b)0 375 ! y Fh(displa)o(y)13 b(bu\013er)i(in)e(other)i(windo)o(w)213 b Ff(C-x)21 b(4)h(C-o)41 b(C-x)21 b(5)h(C-o)0 424 y Fh(\014nd)14 b(\014le)g(in)f(other)i(windo)o(w)323 b Ff(C-x)21 b(4)h(f)85 ! b(C-x)21 b(5)h(f)0 474 y Fh(\014nd)14 b(\014le)g(read-only)f(in)h ! (other)g(windo)o(w)140 b Ff(C-x)21 b(4)h(r)85 b(C-x)21 ! b(5)h(r)0 524 y Fh(run)14 b(Dired)g(in)f(other)i(windo)o(w)282 ! b Ff(C-x)21 b(4)h(d)85 b(C-x)21 b(5)h(d)0 574 y Fh(\014nd)14 ! b(tag)g(in)f(other)h(windo)o(w)319 b Ff(C-x)21 b(4)h(.)85 ! b(C-x)21 b(5)h(.)0 636 y Fh(gro)o(w)13 b(windo)o(w)g(taller)554 ! b Ff(C-x)21 b(^)0 686 y Fh(shrink)14 b(windo)o(w)f(narro)o(w)o(er)464 ! b Ff(C-x)21 b({)0 736 y Fh(gro)o(w)13 b(windo)o(w)g(wider)550 ! b Ff(C-x)21 b(})0 830 y Fg(F)-6 b(ormatting)0 912 y Fh(inden)o(t)14 ! b(curren)o(t)h Fe(line)d Fh(\(mo)q(de-dep)q(enden)o(t\))209 ! b Ff(TAB)0 962 y Fh(inden)o(t)14 b Fe(region)e Fh(\(mo)q(de-dep)q ! (enden)o(t\))299 b Ff(C-M-\\)0 1012 y Fh(inden)o(t)14 ! b Fe(sexp)f Fh(\(mo)q(de-dep)q(enden)o(t\))336 b Ff(C-M-q)0 ! 1062 y Fh(inden)o(t)14 b(region)g(rigidly)e Fb(ar)n(g)17 ! b Fh(columns)295 b Ff(C-x)21 b(TAB)0 1124 y Fh(insert)15 ! b(newline)f(after)g(p)q(oin)o(t)441 b Ff(C-o)0 1174 y ! Fh(mo)o(v)o(e)12 b(rest)j(of)f(line)f(v)o(ertically)g(do)o(wn)309 ! b Ff(C-M-o)0 1224 y Fh(delete)15 b(blank)e(lines)h(around)g(p)q(oin)o (t)335 b Ff(C-x)21 b(C-o)0 1273 y Fh(join)13 b(line)g(with)h(previous)g (\(with)g(arg,)f(next\))191 b Ff(M-^)0 1323 y Fh(delete)15 --- 912,955 ---- b Ff(M-\045)0 2330 y Fh(using)14 b(regular)g(expressions)226 b Ff(M-x)21 b(query-replace-rege)o(xp)0 2397 y Fh(V)m(alid)12 ! b(resp)q(onses)17 b(in)c(query-replace)i(mo)q(de)e(are)0 2465 ! y Fe(replace)f Fh(this)i(one,)g(go)f(on)h(to)g(next)327 b Ff(SPC)0 ! 2515 y Fh(replace)15 b(this)f(one,)f(don't)h(mo)o(v)o(e)387 b Ff(,)0 2565 y Fe(skip)13 b Fh(to)g(next)i(without)e(replacing)340 b Ff(DEL)0 2614 y Fh(replace)15 b(all)d(remaining)g(matc)o(hes)361 ! b Ff(!)0 2664 y Fe(bac)o(k)16 b(up)d Fh(to)g(the)i(previous)f(matc)o(h)322 ! b Ff(^)0 2714 y Fe(exit)13 b Fh(query-replace)566 b Ff(RET)0 ! 2764 y Fh(en)o(ter)15 b(recursiv)o(e)g(edit)f(\()p Ff(C-M-c)f ! Fh(to)h(exit\))265 b Ff(C-r)1929 2832 y Fh(2)p eop %%Page: 3 3 ! bop 0 -168 a Fg(Multiple)20 b(Windo)n(ws)0 -86 y Fh(When)14 ! b(t)o(w)o(o)f(commands)f(are)i(sho)o(wn,)g(the)g(second)h(is)f(for)f(\\other) ! i(frame.")0 -24 y(delete)g(all)e(other)h(windo)o(ws)460 b Ff(C-x)21 ! b(1)0 38 y Fh(split)13 b(windo)o(w)h(in)f(t)o(w)o(o)g(v)o(ertically)230 ! b Ff(C-x)21 b(2)129 b(C-x)21 b(5)h(2)0 88 y Fh(delete)15 b(this)f(windo)o(w) ! 429 b Ff(C-x)21 b(0)129 b(C-x)21 b(5)h(0)0 150 y Fh(split)13 ! b(windo)o(w)h(in)f(t)o(w)o(o)g(horizon)o(tally)314 b Ff(C-x)21 ! b(3)0 213 y Fh(scroll)14 b(other)g(windo)o(w)545 b Ff(C-M-v)0 ! 275 y Fh(switc)o(h)14 b(cursor)h(to)f(another)g(windo)o(w)174 ! b Ff(C-x)21 b(o)129 b(C-x)21 b(5)h(o)0 325 y Fh(select)15 b(bu\013er)g(in)f ! (other)g(windo)o(w)241 b Ff(C-x)21 b(4)h(b)85 b(C-x)21 b(5)h(b)0 ! 375 y Fh(displa)o(y)13 b(bu\013er)i(in)e(other)i(windo)o(w)213 b Ff(C-x)21 b(4)h(C-o)41 b(C-x)21 b(5)h(C-o)0 424 y Fh(\014nd)14 b(\014le)g(in)f(other)i(windo)o(w)323 b Ff(C-x)21 b(4)h(f)85 ! b(C-x)21 b(5)h(f)0 474 y Fh(\014nd)14 b(\014le)g(read-only)f(in)h(other)g ! (windo)o(w)140 b Ff(C-x)21 b(4)h(r)85 b(C-x)21 b(5)h(r)0 524 ! y Fh(run)14 b(Dired)g(in)f(other)i(windo)o(w)282 b Ff(C-x)21 ! b(4)h(d)85 b(C-x)21 b(5)h(d)0 574 y Fh(\014nd)14 b(tag)g(in)f(other)h(windo)o ! (w)319 b Ff(C-x)21 b(4)h(.)85 b(C-x)21 b(5)h(.)0 636 y Fh(gro)o(w)13 ! b(windo)o(w)g(taller)554 b Ff(C-x)21 b(^)0 686 y Fh(shrink)14 ! b(windo)o(w)f(narro)o(w)o(er)464 b Ff(C-x)21 b({)0 736 y Fh(gro)o(w)13 ! b(windo)o(w)g(wider)550 b Ff(C-x)21 b(})0 830 y Fg(F)-6 b(ormatting)0 ! 912 y Fh(inden)o(t)14 b(curren)o(t)h Fe(line)d Fh(\(mo)q(de-dep)q(enden)o ! (t\))209 b Ff(TAB)0 962 y Fh(inden)o(t)14 b Fe(region)e Fh(\(mo)q(de-dep)q ! (enden)o(t\))299 b Ff(C-M-\\)0 1012 y Fh(inden)o(t)14 b Fe(sexp)f ! Fh(\(mo)q(de-dep)q(enden)o(t\))336 b Ff(C-M-q)0 1062 y Fh(inden)o(t)14 ! b(region)g(rigidly)e Fb(ar)n(g)17 b Fh(columns)295 b Ff(C-x)21 ! b(TAB)0 1124 y Fh(insert)15 b(newline)f(after)g(p)q(oin)o(t)441 ! b Ff(C-o)0 1174 y Fh(mo)o(v)o(e)12 b(rest)j(of)f(line)f(v)o(ertically)g(do)o ! (wn)309 b Ff(C-M-o)0 1224 y Fh(delete)15 b(blank)e(lines)h(around)g(p)q(oin)o (t)335 b Ff(C-x)21 b(C-o)0 1273 y Fh(join)13 b(line)g(with)h(previous)g (\(with)g(arg,)f(next\))191 b Ff(M-^)0 1323 y Fh(delete)15 *************** b(all)e(white)h(space)h(around)e(p)q(oin *** 643,827 **** 1373 y Fh(put)14 b(exactly)g(one)g(space)h(at)f(p)q(oin)o(t)348 b Ff(M-SPC)0 1435 y Fh(\014ll)13 b(paragraph)655 b Ff(M-q)0 ! 1485 y Fh(set)15 b(\014ll)e(column)642 b Ff(C-x)21 b(f)0 ! 1535 y Fh(set)15 b(pre\014x)f(eac)o(h)h(line)e(starts)i(with)350 ! b Ff(C-x)21 b(.)0 1597 y Fh(set)15 b(face)765 b Ff(M-g)0 ! 1697 y Fg(Case)23 b(Change)0 1779 y Fh(upp)q(ercase)16 ! b(w)o(ord)618 b Ff(M-u)0 1829 y Fh(lo)o(w)o(ercase)15 ! b(w)o(ord)628 b Ff(M-l)0 1879 y Fh(capitalize)13 b(w)o(ord)627 ! b Ff(M-c)0 1941 y Fh(upp)q(ercase)16 b(region)596 b Ff(C-x)21 ! b(C-u)0 1991 y Fh(lo)o(w)o(ercase)15 b(region)606 b Ff(C-x)21 ! b(C-l)0 2085 y Fg(The)h(Minibu\013er)0 2167 y Fh(The)14 ! b(follo)o(wing)e(k)o(eys)i(are)g(de\014ned)h(in)f(the)g(minibu\013er.)0 ! 2230 y(complete)f(as)h(m)o(uc)o(h)f(as)h(p)q(ossible)370 b Ff(TAB)0 2279 y Fh(complete)13 b(up)h(to)g(one)g(w)o(ord)449 ! b Ff(SPC)0 2329 y Fh(complete)13 b(and)h(execute)511 ! b Ff(RET)0 2379 y Fh(sho)o(w)14 b(p)q(ossible)g(completions)425 ! b Ff(?)0 2429 y Fh(fetc)o(h)14 b(previous)h(minibu\013er)d(input)337 ! b Ff(M-p)0 2479 y Fh(fetc)o(h)14 b(next)h(later)f(minibu\013er)e(input) ! 312 b Ff(M-n)0 2528 y Fh(regexp)15 b(searc)o(h)g(bac)o(kw)o(ard)f ! (through)f(history)173 b Ff(M-r)0 2578 y Fh(regexp)15 ! b(searc)o(h)g(forw)o(ard)e(through)h(history)206 b Ff(M-s)0 ! 2628 y Fh(ab)q(ort)14 b(command)610 b Ff(C-g)0 2690 y ! Fh(T)o(yp)q(e)13 b Ff(C-x)21 b(ESC)g(ESC)12 b Fh(to)g(edit)h(and)g(rep) ! q(eat)g(the)g(last)g(command)c(that)k(used)0 2740 y(the)g ! (minibu\013er.)k(T)o(yp)q(e)c Ff(F10)f Fh(to)g(activ)n(ate)h(the)g(men) ! o(u)f(bar)h(using)f(the)h(mini-)0 2790 y(bu\013er.)1929 2832 y(3)p eop %%Page: 4 4 ! 4 3 bop 79 -160 a Fi(GNU)27 b(Emacs)g(Reference)f(Card)0 ! -21 y Fg(Bu\013ers)0 82 y Fh(select)15 b(another)g(bu\013er)530 ! b Ff(C-x)21 b(b)0 132 y Fh(list)13 b(all)g(bu\013ers)653 ! b Ff(C-x)21 b(C-b)0 182 y Fh(kill)12 b(a)i(bu\013er)691 ! b Ff(C-x)21 b(k)0 303 y Fg(T)-6 b(ransp)r(osing)0 407 ! y Fh(transp)q(ose)15 b Fe(c)o(haracters)500 b Ff(C-t)0 ! 457 y Fh(transp)q(ose)15 b Fe(w)o(ords)591 b Ff(M-t)0 ! 506 y Fh(transp)q(ose)15 b Fe(lines)618 b Ff(C-x)21 b(C-t)0 ! 556 y Fh(transp)q(ose)15 b Fe(sexps)602 b Ff(C-M-t)0 ! 678 y Fg(Sp)r(elling)21 b(Chec)n(k)0 781 y Fh(c)o(hec)o(k)15 ! b(sp)q(elling)e(of)g(curren)o(t)j(w)o(ord)356 b Ff(M-$)0 ! 831 y Fh(c)o(hec)o(k)15 b(sp)q(elling)e(of)g(all)g(w)o(ords)h(in)g ! (region)166 b Ff(M-x)21 b(ispell-region)0 881 y Fh(c)o(hec)o(k)15 ! b(sp)q(elling)e(of)g(en)o(tire)i(bu\013er)282 b Ff(M-x)21 ! b(ispell-buffer)0 1006 y Fg(T)-6 b(ags)0 1110 y Fh(\014nd)14 ! b(a)g(tag)f(\(a)h(de\014nition\))473 b Ff(M-.)0 1160 ! y Fh(\014nd)14 b(next)g(o)q(ccurrence)j(of)c(tag)412 ! b Ff(C-u)21 b(M-.)0 1210 y Fh(sp)q(ecify)14 b(a)g(new)g(tags)g(\014le) ! 366 b Ff(M-x)21 b(visit-tags-table)0 1277 y Fh(regexp)15 ! b(searc)o(h)g(on)e(all)g(\014les)h(in)g(tags)g(table)129 ! b Ff(M-x)21 b(tags-search)0 1327 y Fh(run)14 b(query-replace)h(on)f ! (all)f(the)h(\014les)133 b Ff(M-x)21 b(tags-query-repla)o(ce)0 ! 1377 y Fh(con)o(tin)o(ue)14 b(last)g(tags)g(searc)o(h)h(or)e ! (query-replace)150 b Ff(M-,)0 1498 y Fg(Shells)0 1602 ! y Fh(execute)16 b(a)d(shell)h(command)444 b Ff(M-!)0 ! 1651 y Fh(run)14 b(a)g(shell)g(command)d(on)i(the)i(region)265 ! b Ff(M-|)0 1701 y Fh(\014lter)14 b(region)g(through)g(a)f(shell)h ! (command)212 b Ff(C-u)21 b(M-|)0 1751 y Fh(start)15 b(a)e(shell)h(in)f ! (windo)o(w)g Ff(*shell*)231 b(M-x)21 b(shell)0 1872 y ! Fg(Rectangles)0 1976 y Fh(cop)o(y)14 b(rectangle)h(to)e(register)442 ! b Ff(C-x)21 b(r)h(r)0 2026 y Fh(kill)12 b(rectangle)667 ! b Ff(C-x)21 b(r)h(k)0 2075 y Fh(y)o(ank)13 b(rectangle)637 ! b Ff(C-x)21 b(r)h(y)0 2125 y Fh(op)q(en)14 b(rectangle,)h(shifting)e ! (text)h(righ)o(t)288 b Ff(C-x)21 b(r)h(o)0 2175 y Fh(blank)13 ! b(out)h(rectangle)549 b Ff(C-x)21 b(r)h(c)0 2225 y Fh(pre\014x)15 ! b(eac)o(h)f(line)f(with)h(a)g(string)378 b Ff(C-x)21 ! b(r)h(t)0 2346 y Fg(Abbrevs)0 2450 y Fh(add)14 b(global)e(abbrev)574 ! b Ff(C-x)21 b(a)h(g)0 2499 y Fh(add)14 b(mo)q(de-lo)q(cal)e(abbrev)486 ! b Ff(C-x)21 b(a)h(l)0 2549 y Fh(add)14 b(global)e(expansion)i(for)f ! (this)h(abbrev)237 b Ff(C-x)21 b(a)h(i)f(g)0 2599 y Fh(add)14 ! b(mo)q(de-lo)q(cal)e(expansion)h(for)h(this)g(abbrev)149 ! b Ff(C-x)21 b(a)h(i)f(l)0 2649 y Fh(explicitly)13 b(expand)h(abbrev)453 ! b Ff(C-x)21 b(a)h(e)0 2716 y Fh(expand)14 b(previous)g(w)o(ord)g ! (dynamically)266 b Ff(M-/)1929 2832 y Fh(4)p eop %%Page: 5 5 ! 5 4 bop 0 -168 a Fg(Regular)22 b(Expressions)0 -65 y ! Fh(an)o(y)13 b(single)h(c)o(haracter)h(except)h(a)d(newline)224 ! b Ff(.)43 b Fh(\(dot\))0 -15 y(zero)15 b(or)f(more)e(rep)q(eats)529 ! b Ff(*)0 35 y Fh(one)14 b(or)g(more)f(rep)q(eats)540 ! b Ff(+)0 84 y Fh(zero)15 b(or)f(one)g(rep)q(eat)572 b ! Ff(?)0 134 y Fh(an)o(y)13 b(c)o(haracter)j(in)d(the)i(set)470 ! b Ff([)22 b Fa(:)7 b(:)g(:)20 b Ff(])0 184 y Fh(an)o(y)13 ! b(c)o(haracter)j(not)d(in)h(the)g(set)397 b Ff([^)21 ! b Fa(:)7 b(:)g(:)21 b Ff(])0 234 y Fh(b)q(eginning)13 ! b(of)h(line)597 b Ff(^)0 284 y Fh(end)14 b(of)g(line)709 ! b Ff($)0 333 y Fh(quote)14 b(a)g(sp)q(ecial)g(c)o(haracter)h ! Fb(c)416 b Ff(\\)p Fb(c)0 383 y Fh(alternativ)o(e)14 ! b(\(\\or"\))581 b Ff(\\|)0 433 y Fh(grouping)740 b Ff(\\\()21 ! b Fa(:)7 b(:)g(:)21 b Ff(\\\))0 483 y Fb(n)s Fh(th)15 ! b(group)716 b Ff(\\)p Fb(n)0 533 y Fh(b)q(eginning)13 ! b(of)h(bu\013er)558 b Ff(\\`)0 583 y Fh(end)14 b(of)g(bu\013er)670 ! b Ff(\\')0 632 y Fh(w)o(ord)14 b(break)697 b Ff(\\b)0 ! 682 y Fh(not)14 b(b)q(eginning)f(or)h(end)g(of)g(w)o(ord)370 ! b Ff(\\B)0 732 y Fh(b)q(eginning)13 b(of)h(w)o(ord)573 ! b Ff(\\<)0 782 y Fh(end)14 b(of)g(w)o(ord)685 b Ff(\\>)0 ! 832 y Fh(an)o(y)13 b(w)o(ord-syn)o(tax)h(c)o(haracter)420 ! b Ff(\\w)0 881 y Fh(an)o(y)13 b(non-w)o(ord-syn)o(tax)h(c)o(haracter) ! 339 b Ff(\\W)0 931 y Fh(c)o(haracter)15 b(with)f(syn)o(tax)g ! Fb(c)472 b Ff(\\s)p Fb(c)0 981 y Fh(c)o(haracter)15 b(with)f(syn)o(tax) ! g(not)f Fb(c)399 b Ff(\\S)p Fb(c)0 1102 y Fg(Registers)0 ! 1206 y Fh(sa)o(v)o(e)14 b(region)g(in)f(register)505 ! b Ff(C-x)21 b(r)h(s)0 1256 y Fh(insert)15 b(register)g(con)o(ten)o(ts)g ! (in)o(to)e(bu\013er)284 b Ff(C-x)21 b(r)h(i)0 1323 y ! Fh(sa)o(v)o(e)14 b(v)n(alue)f(of)h(p)q(oin)o(t)f(in)g(register)367 ! b Ff(C-x)21 b(r)h(SPC)0 1373 y Fh(jump)12 b(to)i(p)q(oin)o(t)f(sa)o(v)o ! (ed)h(in)g(register)340 b Ff(C-x)21 b(r)h(j)0 1499 y ! Fg(Info)0 1603 y Fh(en)o(ter)15 b(the)g(Info)e(do)q(cumen)o(tation)g ! (reader)242 b Ff(C-h)21 b(i)0 1671 y Fh(Mo)o(ving)13 ! b(within)g(a)g(no)q(de:)42 1738 y(scroll)g(forw)o(ard)611 ! b Ff(SPC)42 1788 y Fh(scroll)13 b(rev)o(erse)627 b Ff(DEL)42 ! 1838 y Fh(b)q(eginning)13 b(of)g(no)q(de)535 b Ff(.)43 ! b Fh(\(dot\))0 1906 y(Mo)o(ving)13 b(b)q(et)o(w)o(een)i(no)q(des:)42 ! 1973 y Fe(next)e Fh(no)q(de)666 b Ff(n)42 2023 y Fe(previous)11 ! b Fh(no)q(de)583 b Ff(p)42 2073 y Fh(mo)o(v)o(e)12 b ! Fe(up)697 b Ff(u)42 2123 y Fh(select)15 b(men)o(u)e(item)f(b)o(y)i ! (name)383 b Ff(m)42 2173 y Fh(select)15 b Fb(n)s Fh(th)f(men)o(u)f ! (item)g(b)o(y)g(n)o(um)o(b)q(er)h(\(1{9\))155 b Fb(n)42 ! 2222 y Fh(follo)o(w)11 b(cross)k(reference)i(\(return)e(with)f ! Ff(l)p Fh(\))186 b Ff(f)42 2272 y Fh(return)15 b(to)e(last)h(no)q(de)g ! (y)o(ou)g(sa)o(w)357 b Ff(l)42 2322 y Fh(return)15 b(to)e(directory)i ! (no)q(de)418 b Ff(d)42 2372 y Fh(go)13 b(to)h(an)o(y)f(no)q(de)h(b)o(y) ! g(name)418 b Ff(g)0 2439 y Fh(Other:)42 2507 y(run)14 ! b(Info)f Fe(tutorial)537 b Ff(h)42 2557 y Fh(list)13 ! b(Info)g(commands)510 b Ff(?)42 2607 y Fe(quit)12 b Fh(Info)689 ! b Ff(q)42 2657 y Fh(searc)o(h)15 b(no)q(des)f(for)g(regexp)434 ! b Ff(M-s)1929 2832 y Fh(5)p eop %%Page: 6 6 ! 6 5 bop 0 -168 a Fg(Keyb)r(oard)24 b(Macros)0 -65 y Fe(start)13 b Fh(de\014ning)g(a)h(k)o(eyb)q(oard)g(macro)304 b Ff(C-x)21 b(\()0 -15 y Fe(end)13 b Fh(k)o(eyb)q(oard)h(macro)e(de\014nition)336 ! b Ff(C-x)21 b(\))0 35 y Fe(execute)13 b Fh(last-de\014ned)i(k)o(eyb)q ! (oard)f(macro)215 b Ff(C-x)21 b(e)0 84 y Fh(app)q(end)14 ! b(to)g(last)g(k)o(eyb)q(oard)g(macro)332 b Ff(C-u)21 ! b(C-x)g(\()0 134 y Fh(name)13 b(last)g(k)o(eyb)q(oard)h(macro)218 ! b Ff(M-x)21 b(name-last-kbd-mac)o(ro)0 184 y Fh(insert)15 ! b(Lisp)e(de\014nition)h(in)f(bu\013er)221 b Ff(M-x)21 ! b(insert-kbd-macro)0 305 y Fg(Commands)h(Dealing)g(with)f(Emacs)i(Lisp) ! 0 409 y Fh(ev)n(al)13 b Fe(sexp)g Fh(b)q(efore)i(p)q(oin)o(t)490 ! b Ff(C-x)21 b(C-e)0 459 y Fh(ev)n(al)13 b(curren)o(t)j ! Fe(defun)553 b Ff(C-M-x)0 508 y Fh(ev)n(al)13 b Fe(region)598 ! b Ff(M-x)21 b(eval-region)0 558 y Fh(ev)n(al)13 b(en)o(tire)i ! Fe(bu\013er)374 b Ff(M-x)21 b(eval-current-buff)o(er)0 ! 608 y Fh(read)14 b(and)g(ev)n(al)f(minibu\013er)456 b ! Ff(M-:)0 658 y Fh(re-execute)16 b(last)e(minibu\013er)f(command)246 ! b Ff(C-x)21 b(ESC)g(ESC)0 708 y Fh(read)14 b(and)g(ev)n(al)f(Emacs)h ! (Lisp)f(\014le)280 b Ff(M-x)21 b(load-file)0 757 y Fh(load)13 ! b(from)f(standard)i(system)g(directory)152 b Ff(M-x)21 ! b(load-library)0 884 y Fg(Simple)f(Customization)0 987 ! y Fh(Here)15 b(are)f(some)f(examples)g(of)h(binding)f(global)f(k)o(eys) ! i(in)g(Emacs)f(Lisp.)0 1055 y Ff(\(global-set-key)19 ! b("\\C-cg")h('goto-line\))0 1105 y(\(global-set-key)f("\\C-x\\C-k")g ! ('kill-region\))0 1155 y(\(global-set-key)g("\\M-#")h ! ('query-replace-rege)o(xp\))0 1222 y Fh(An)14 b(example)f(of)g(setting) ! h(a)g(v)n(ariable)f(in)g(Emacs)g(Lisp:)0 1290 y Ff(\(setq)21 ! b(backup-by-copyin)o(g-whe)o(n-lin)o(ked)e(t\))0 1416 ! y Fg(W)-6 b(riting)22 b(Commands)0 1520 y Ff(\(defun)f ! Fb(c)n(ommand-name)26 b Ff(\()p Fb(ar)n(gs)s Ff(\))44 ! 1570 y(")p Fb(do)n(cumentation)s Ff(")44 1619 y(\(interactive)19 ! b(")p Fb(template)s Ff("\))44 1669 y Fb(b)n(o)n(dy)t ! Ff(\))0 1737 y Fh(An)14 b(example:)0 1805 y Ff(\(defun)21 ! b(this-line-to-to)o(p-of-)o(windo)o(w)e(\(line\))44 1854 ! y("Reposition)g(line)i(point)g(is)g(on)h(to)f(top)g(of)h(window.)0 ! 1904 y(With)f(ARG,)g(put)g(point)g(on)g(line)g(ARG.)0 ! 1954 y(Negative)f(counts)h(from)g(bottom.")44 2004 y(\(interactive)e ! ("P"\))44 2054 y(\(recenter)h(\(if)h(\(null)f(line\))349 ! 2103 y(0)305 2153 y(\(prefix-numeric-va)o(lue)f(line\)\)\)\))0 ! 2221 y Fh(The)12 b(argumen)o(t)e(to)i Ff(interactive)d ! Fh(is)i(a)g(string)h(sp)q(ecifying)f(ho)o(w)g(to)h(get)f(the)0 ! 2271 y(argumen)o(ts)16 b(when)h(the)h(function)e(is)h(called)g(in)o ! (teractiv)o(ely)m(.)26 b(T)o(yp)q(e)17 b Ff(C-h)k(f)0 ! 2321 y(interactive)12 b Fh(for)h(more)g(information.)238 2466 y Fd(Cop)o(yrigh)o(t)403 2465 y(c)393 2466 y Fc(\015)f Fd(1996)d(F)m(ree)j(Soft)o(w)o(are)e(F)m(oundation,)j(Inc.)269 ! 2506 y(designed)e(b)o(y)i(Stephen)f(Gildea,)f(Marc)o(h)g(1996)e(v2.1) ! 281 2545 y(for)i(GNU)f(Emacs)h(v)o(ersion)h(19)e(on)h(Unix)h(systems)0 ! 2603 y(P)o(ermission)g(is)f(gran)o(ted)e(to)h(mak)o(e)h(and)f ! (distribute)i(copies)e(of)h(this)g(card)f(pro)o(vided)h(the)g(cop)o(y-) ! 0 2643 y(righ)o(t)h(notice)e(and)i(this)g(p)q(ermission)g(notice)f(are) ! g(preserv)o(ed)g(on)h(all)f(copies.)0 2701 y(F)m(or)g(copies)f(of)g ! (the)h(GNU)e(Emacs)h(man)o(ual,)i(write)e(to)g(the)h(F)m(ree)f(Soft)o ! (w)o(are)g(F)m(oundation,)i(Inc.,)0 2741 y(59)e(T)m(emple)i(Place,)f ! (Suite)h(330,)f(Boston,)g(MA)f(02111-1307)e(USA)1929 ! 2832 y Fh(6)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF --- 957,1126 ---- 1373 y Fh(put)14 b(exactly)g(one)g(space)h(at)f(p)q(oin)o(t)348 b Ff(M-SPC)0 1435 y Fh(\014ll)13 b(paragraph)655 b Ff(M-q)0 ! 1485 y Fh(set)15 b(\014ll)e(column)642 b Ff(C-x)21 b(f)0 1535 ! y Fh(set)15 b(pre\014x)f(eac)o(h)h(line)e(starts)i(with)350 ! b Ff(C-x)21 b(.)0 1597 y Fh(set)15 b(face)765 b Ff(M-g)0 1697 ! y Fg(Case)23 b(Change)0 1779 y Fh(upp)q(ercase)16 b(w)o(ord)618 ! b Ff(M-u)0 1829 y Fh(lo)o(w)o(ercase)15 b(w)o(ord)628 b Ff(M-l)0 ! 1879 y Fh(capitalize)13 b(w)o(ord)627 b Ff(M-c)0 1941 y Fh(upp)q(ercase)16 ! b(region)596 b Ff(C-x)21 b(C-u)0 1991 y Fh(lo)o(w)o(ercase)15 ! b(region)606 b Ff(C-x)21 b(C-l)0 2085 y Fg(The)h(Minibu\013er)0 ! 2167 y Fh(The)14 b(follo)o(wing)e(k)o(eys)i(are)g(de\014ned)h(in)f(the)g ! (minibu\013er.)0 2230 y(complete)f(as)h(m)o(uc)o(h)f(as)h(p)q(ossible)370 b Ff(TAB)0 2279 y Fh(complete)13 b(up)h(to)g(one)g(w)o(ord)449 ! b Ff(SPC)0 2329 y Fh(complete)13 b(and)h(execute)511 b Ff(RET)0 ! 2379 y Fh(sho)o(w)14 b(p)q(ossible)g(completions)425 b Ff(?)0 ! 2429 y Fh(fetc)o(h)14 b(previous)h(minibu\013er)d(input)337 ! b Ff(M-p)0 2479 y Fh(fetc)o(h)14 b(next)h(later)f(minibu\013er)e(input)312 ! b Ff(M-n)0 2528 y Fh(regexp)15 b(searc)o(h)g(bac)o(kw)o(ard)f(through)f ! (history)173 b Ff(M-r)0 2578 y Fh(regexp)15 b(searc)o(h)g(forw)o(ard)e ! (through)h(history)206 b Ff(M-s)0 2628 y Fh(ab)q(ort)14 b(command)610 ! b Ff(C-g)0 2690 y Fh(T)o(yp)q(e)13 b Ff(C-x)21 b(ESC)g(ESC)12 ! b Fh(to)g(edit)h(and)g(rep)q(eat)g(the)g(last)g(command)c(that)k(used)0 ! 2740 y(the)g(minibu\013er.)k(T)o(yp)q(e)c Ff(F10)f Fh(to)g(activ)n(ate)h(the) ! g(men)o(u)f(bar)h(using)f(the)h(mini-)0 2790 y(bu\013er.)1929 2832 y(3)p eop %%Page: 4 4 ! bop 79 -160 a Fi(GNU)27 b(Emacs)g(Reference)f(Card)0 -21 y ! Fg(Bu\013ers)0 82 y Fh(select)15 b(another)g(bu\013er)530 b ! Ff(C-x)21 b(b)0 132 y Fh(list)13 b(all)g(bu\013ers)653 b Ff(C-x)21 ! b(C-b)0 182 y Fh(kill)12 b(a)i(bu\013er)691 b Ff(C-x)21 b(k)0 ! 303 y Fg(T)-6 b(ransp)r(osing)0 407 y Fh(transp)q(ose)15 b ! Fe(c)o(haracters)500 b Ff(C-t)0 457 y Fh(transp)q(ose)15 b ! Fe(w)o(ords)591 b Ff(M-t)0 506 y Fh(transp)q(ose)15 b Fe(lines)618 ! b Ff(C-x)21 b(C-t)0 556 y Fh(transp)q(ose)15 b Fe(sexps)602 ! b Ff(C-M-t)0 678 y Fg(Sp)r(elling)21 b(Chec)n(k)0 781 y Fh(c)o(hec)o(k)15 ! b(sp)q(elling)e(of)g(curren)o(t)j(w)o(ord)356 b Ff(M-$)0 831 ! y Fh(c)o(hec)o(k)15 b(sp)q(elling)e(of)g(all)g(w)o(ords)h(in)g(region)166 ! b Ff(M-x)21 b(ispell-region)0 881 y Fh(c)o(hec)o(k)15 b(sp)q(elling)e(of)g ! (en)o(tire)i(bu\013er)282 b Ff(M-x)21 b(ispell-buffer)0 1006 ! y Fg(T)-6 b(ags)0 1110 y Fh(\014nd)14 b(a)g(tag)f(\(a)h(de\014nition\))473 ! b Ff(M-.)0 1160 y Fh(\014nd)14 b(next)g(o)q(ccurrence)j(of)c(tag)412 ! b Ff(C-u)21 b(M-.)0 1210 y Fh(sp)q(ecify)14 b(a)g(new)g(tags)g(\014le)366 ! b Ff(M-x)21 b(visit-tags-table)0 1277 y Fh(regexp)15 b(searc)o(h)g(on)e(all)g ! (\014les)h(in)g(tags)g(table)129 b Ff(M-x)21 b(tags-search)0 ! 1327 y Fh(run)14 b(query-replace)h(on)f(all)f(the)h(\014les)133 ! b Ff(M-x)21 b(tags-query-repla)o(ce)0 1377 y Fh(con)o(tin)o(ue)14 ! b(last)g(tags)g(searc)o(h)h(or)e(query-replace)150 b Ff(M-,)0 ! 1498 y Fg(Shells)0 1602 y Fh(execute)16 b(a)d(shell)h(command)444 ! b Ff(M-!)0 1651 y Fh(run)14 b(a)g(shell)g(command)d(on)i(the)i(region)265 ! b Ff(M-|)0 1701 y Fh(\014lter)14 b(region)g(through)g(a)f(shell)h(command)212 ! b Ff(C-u)21 b(M-|)0 1751 y Fh(start)15 b(a)e(shell)h(in)f(windo)o(w)g ! Ff(*shell*)231 b(M-x)21 b(shell)0 1872 y Fg(Rectangles)0 1976 ! y Fh(cop)o(y)14 b(rectangle)h(to)e(register)442 b Ff(C-x)21 ! b(r)h(r)0 2026 y Fh(kill)12 b(rectangle)667 b Ff(C-x)21 b(r)h(k)0 ! 2075 y Fh(y)o(ank)13 b(rectangle)637 b Ff(C-x)21 b(r)h(y)0 ! 2125 y Fh(op)q(en)14 b(rectangle,)h(shifting)e(text)h(righ)o(t)288 ! b Ff(C-x)21 b(r)h(o)0 2175 y Fh(blank)13 b(out)h(rectangle)549 ! b Ff(C-x)21 b(r)h(c)0 2225 y Fh(pre\014x)15 b(eac)o(h)f(line)f(with)h(a)g ! (string)378 b Ff(C-x)21 b(r)h(t)0 2346 y Fg(Abbrevs)0 2450 ! y Fh(add)14 b(global)e(abbrev)574 b Ff(C-x)21 b(a)h(g)0 2499 ! y Fh(add)14 b(mo)q(de-lo)q(cal)e(abbrev)486 b Ff(C-x)21 b(a)h(l)0 ! 2549 y Fh(add)14 b(global)e(expansion)i(for)f(this)h(abbrev)237 ! b Ff(C-x)21 b(a)h(i)f(g)0 2599 y Fh(add)14 b(mo)q(de-lo)q(cal)e(expansion)h ! (for)h(this)g(abbrev)149 b Ff(C-x)21 b(a)h(i)f(l)0 2649 y Fh(explicitly)13 ! b(expand)h(abbrev)453 b Ff(C-x)21 b(a)h(e)0 2716 y Fh(expand)14 ! b(previous)g(w)o(ord)g(dynamically)266 b Ff(M-/)1929 2832 y ! Fh(4)p eop %%Page: 5 5 ! bop 0 -168 a Fg(Regular)22 b(Expressions)0 -65 y Fh(an)o(y)13 ! b(single)h(c)o(haracter)h(except)h(a)d(newline)224 b Ff(.)43 ! b Fh(\(dot\))0 -15 y(zero)15 b(or)f(more)e(rep)q(eats)529 b ! Ff(*)0 35 y Fh(one)14 b(or)g(more)f(rep)q(eats)540 b Ff(+)0 ! 84 y Fh(zero)15 b(or)f(one)g(rep)q(eat)572 b Ff(?)0 134 y Fh(an)o(y)13 ! b(c)o(haracter)j(in)d(the)i(set)470 b Ff([)22 b Fa(:)7 b(:)g(:)20 ! b Ff(])0 184 y Fh(an)o(y)13 b(c)o(haracter)j(not)d(in)h(the)g(set)397 ! b Ff([^)21 b Fa(:)7 b(:)g(:)21 b Ff(])0 234 y Fh(b)q(eginning)13 ! b(of)h(line)597 b Ff(^)0 284 y Fh(end)14 b(of)g(line)709 b ! Ff($)0 333 y Fh(quote)14 b(a)g(sp)q(ecial)g(c)o(haracter)h ! Fb(c)416 b Ff(\\)p Fb(c)0 383 y Fh(alternativ)o(e)14 b(\(\\or"\))581 ! b Ff(\\|)0 433 y Fh(grouping)740 b Ff(\\\()21 b Fa(:)7 b(:)g(:)21 ! b Ff(\\\))0 483 y Fb(n)s Fh(th)15 b(group)716 b Ff(\\)p Fb(n)0 ! 533 y Fh(b)q(eginning)13 b(of)h(bu\013er)558 b Ff(\\`)0 583 ! y Fh(end)14 b(of)g(bu\013er)670 b Ff(\\')0 632 y Fh(w)o(ord)14 ! b(break)697 b Ff(\\b)0 682 y Fh(not)14 b(b)q(eginning)f(or)h(end)g(of)g(w)o ! (ord)370 b Ff(\\B)0 732 y Fh(b)q(eginning)13 b(of)h(w)o(ord)573 ! b Ff(\\<)0 782 y Fh(end)14 b(of)g(w)o(ord)685 b Ff(\\>)0 832 ! y Fh(an)o(y)13 b(w)o(ord-syn)o(tax)h(c)o(haracter)420 b Ff(\\w)0 ! 881 y Fh(an)o(y)13 b(non-w)o(ord-syn)o(tax)h(c)o(haracter)339 ! b Ff(\\W)0 931 y Fh(c)o(haracter)15 b(with)f(syn)o(tax)g Fb(c)472 ! b Ff(\\s)p Fb(c)0 981 y Fh(c)o(haracter)15 b(with)f(syn)o(tax)g(not)f ! Fb(c)399 b Ff(\\S)p Fb(c)0 1102 y Fg(Registers)0 1206 y Fh(sa)o(v)o(e)14 ! b(region)g(in)f(register)505 b Ff(C-x)21 b(r)h(s)0 1256 y Fh(insert)15 ! b(register)g(con)o(ten)o(ts)g(in)o(to)e(bu\013er)284 b Ff(C-x)21 ! b(r)h(i)0 1323 y Fh(sa)o(v)o(e)14 b(v)n(alue)f(of)h(p)q(oin)o(t)f(in)g ! (register)367 b Ff(C-x)21 b(r)h(SPC)0 1373 y Fh(jump)12 b(to)i(p)q(oin)o(t)f ! (sa)o(v)o(ed)h(in)g(register)340 b Ff(C-x)21 b(r)h(j)0 1499 ! y Fg(Info)0 1603 y Fh(en)o(ter)15 b(the)g(Info)e(do)q(cumen)o(tation)g ! (reader)242 b Ff(C-h)21 b(i)0 1671 y Fh(Mo)o(ving)13 b(within)g(a)g(no)q(de:) ! 42 1738 y(scroll)g(forw)o(ard)611 b Ff(SPC)42 1788 y Fh(scroll)13 ! b(rev)o(erse)627 b Ff(DEL)42 1838 y Fh(b)q(eginning)13 b(of)g(no)q(de)535 ! b Ff(.)43 b Fh(\(dot\))0 1906 y(Mo)o(ving)13 b(b)q(et)o(w)o(een)i(no)q(des:) ! 42 1973 y Fe(next)e Fh(no)q(de)666 b Ff(n)42 2023 y Fe(previous)11 ! b Fh(no)q(de)583 b Ff(p)42 2073 y Fh(mo)o(v)o(e)12 b Fe(up)697 ! b Ff(u)42 2123 y Fh(select)15 b(men)o(u)e(item)f(b)o(y)i(name)383 ! b Ff(m)42 2173 y Fh(select)15 b Fb(n)s Fh(th)f(men)o(u)f(item)g(b)o(y)g(n)o ! (um)o(b)q(er)h(\(1{9\))155 b Fb(n)42 2222 y Fh(follo)o(w)11 ! b(cross)k(reference)i(\(return)e(with)f Ff(l)p Fh(\))186 b ! Ff(f)42 2272 y Fh(return)15 b(to)e(last)h(no)q(de)g(y)o(ou)g(sa)o(w)357 ! b Ff(l)42 2322 y Fh(return)15 b(to)e(directory)i(no)q(de)418 ! b Ff(d)42 2372 y Fh(go)13 b(to)h(an)o(y)f(no)q(de)h(b)o(y)g(name)418 ! b Ff(g)0 2439 y Fh(Other:)42 2507 y(run)14 b(Info)f Fe(tutorial)537 ! b Ff(h)42 2557 y Fh(list)13 b(Info)g(commands)510 b Ff(?)42 ! 2607 y Fe(quit)12 b Fh(Info)689 b Ff(q)42 2657 y Fh(searc)o(h)15 ! b(no)q(des)f(for)g(regexp)434 b Ff(M-s)1929 2832 y Fh(5)p eop %%Page: 6 6 ! bop 0 -168 a Fg(Keyb)r(oard)24 b(Macros)0 -65 y Fe(start)13 b Fh(de\014ning)g(a)h(k)o(eyb)q(oard)g(macro)304 b Ff(C-x)21 b(\()0 -15 y Fe(end)13 b Fh(k)o(eyb)q(oard)h(macro)e(de\014nition)336 ! b Ff(C-x)21 b(\))0 35 y Fe(execute)13 b Fh(last-de\014ned)i(k)o(eyb)q(oard)f ! (macro)215 b Ff(C-x)21 b(e)0 84 y Fh(app)q(end)14 b(to)g(last)g(k)o(eyb)q ! (oard)g(macro)332 b Ff(C-u)21 b(C-x)g(\()0 134 y Fh(name)13 ! b(last)g(k)o(eyb)q(oard)h(macro)218 b Ff(M-x)21 b(name-last-kbd-mac)o(ro)0 ! 184 y Fh(insert)15 b(Lisp)e(de\014nition)h(in)f(bu\013er)221 ! b Ff(M-x)21 b(insert-kbd-macro)0 305 y Fg(Commands)h(Dealing)g(with)f(Emacs)i ! (Lisp)0 409 y Fh(ev)n(al)13 b Fe(sexp)g Fh(b)q(efore)i(p)q(oin)o(t)490 ! b Ff(C-x)21 b(C-e)0 459 y Fh(ev)n(al)13 b(curren)o(t)j Fe(defun)553 ! b Ff(C-M-x)0 508 y Fh(ev)n(al)13 b Fe(region)598 b Ff(M-x)21 ! b(eval-region)0 558 y Fh(ev)n(al)13 b(en)o(tire)i Fe(bu\013er)374 ! b Ff(M-x)21 b(eval-current-buff)o(er)0 608 y Fh(read)14 b(and)g(ev)n(al)f ! (minibu\013er)456 b Ff(M-:)0 658 y Fh(re-execute)16 b(last)e(minibu\013er)f ! (command)246 b Ff(C-x)21 b(ESC)g(ESC)0 708 y Fh(read)14 b(and)g(ev)n(al)f ! (Emacs)h(Lisp)f(\014le)280 b Ff(M-x)21 b(load-file)0 757 y ! Fh(load)13 b(from)f(standard)i(system)g(directory)152 b Ff(M-x)21 ! b(load-library)0 884 y Fg(Simple)f(Customization)0 987 y Fh(Here)15 ! b(are)f(some)f(examples)g(of)h(binding)f(global)f(k)o(eys)i(in)g(Emacs)f ! (Lisp.)0 1055 y Ff(\(global-set-key)19 b("\\C-cg")h('goto-line\))0 ! 1105 y(\(global-set-key)f("\\C-x\\C-k")g('kill-region\))0 1155 ! y(\(global-set-key)g("\\M-#")h('query-replace-rege)o(xp\))0 ! 1222 y Fh(An)14 b(example)f(of)g(setting)h(a)g(v)n(ariable)f(in)g(Emacs)g ! (Lisp:)0 1290 y Ff(\(setq)21 b(backup-by-copyin)o(g-whe)o(n-lin)o(ked)e(t\))0 ! 1416 y Fg(W)-6 b(riting)22 b(Commands)0 1520 y Ff(\(defun)f ! Fb(c)n(ommand-name)26 b Ff(\()p Fb(ar)n(gs)s Ff(\))44 1570 ! y(")p Fb(do)n(cumentation)s Ff(")44 1619 y(\(interactive)19 ! b(")p Fb(template)s Ff("\))44 1669 y Fb(b)n(o)n(dy)t Ff(\))0 ! 1737 y Fh(An)14 b(example:)0 1805 y Ff(\(defun)21 b(this-line-to-to)o(p-of-)o ! (windo)o(w)e(\(line\))44 1854 y("Reposition)g(line)i(point)g(is)g(on)h(to)f ! (top)g(of)h(window.)0 1904 y(With)f(ARG,)g(put)g(point)g(on)g(line)g(ARG.)0 ! 1954 y(Negative)f(counts)h(from)g(bottom.")44 2004 y(\(interactive)e("P"\))44 ! 2054 y(\(recenter)h(\(if)h(\(null)f(line\))349 2103 y(0)305 ! 2153 y(\(prefix-numeric-va)o(lue)f(line\)\)\)\))0 2221 y Fh(The)12 ! b(argumen)o(t)e(to)i Ff(interactive)d Fh(is)i(a)g(string)h(sp)q(ecifying)f ! (ho)o(w)g(to)h(get)f(the)0 2271 y(argumen)o(ts)16 b(when)h(the)h(function)e ! (is)h(called)g(in)o(teractiv)o(ely)m(.)26 b(T)o(yp)q(e)17 b ! Ff(C-h)k(f)0 2321 y(interactive)12 b Fh(for)h(more)g(information.)238 2466 y Fd(Cop)o(yrigh)o(t)403 2465 y(c)393 2466 y Fc(\015)f Fd(1996)d(F)m(ree)j(Soft)o(w)o(are)e(F)m(oundation,)j(Inc.)269 ! 2506 y(designed)e(b)o(y)i(Stephen)f(Gildea,)f(Marc)o(h)g(1996)e(v2.1)281 ! 2545 y(for)i(GNU)f(Emacs)h(v)o(ersion)h(19)e(on)h(Unix)h(systems)0 ! 2603 y(P)o(ermission)g(is)f(gran)o(ted)e(to)h(mak)o(e)h(and)f(distribute)i ! (copies)e(of)h(this)g(card)f(pro)o(vided)h(the)g(cop)o(y-)0 ! 2643 y(righ)o(t)h(notice)e(and)i(this)g(p)q(ermission)g(notice)f(are)g ! (preserv)o(ed)g(on)h(all)f(copies.)0 2701 y(F)m(or)g(copies)f(of)g(the)h(GNU) ! e(Emacs)h(man)o(ual,)i(write)e(to)g(the)h(F)m(ree)f(Soft)o(w)o(are)g(F)m ! (oundation,)i(Inc.,)0 2741 y(59)e(T)m(emple)i(Place,)f(Suite)h(330,)f ! (Boston,)g(MA)f(02111-1307)e(USA)1929 2832 y Fh(6)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF + diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/refcard.tex emacs-19.32/etc/refcard.tex *** emacs-19.31/etc/refcard.tex Fri Mar 22 17:02:33 1996 --- emacs-19.32/etc/refcard.tex Thu Jun 6 16:54:15 1996 *************** When two commands are shown, the second *** 391,398 **** {\setbox0=\hbox{\kbd{0}}\advance\hsize by 0\wd0 \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr ! \threecol{split window in two vertically}{C-x 2\ \ \ \ }{C-x 5 2} \threecol{delete this window}{C-x 0\ \ \ \ }{C-x 5 0} }} ! \key{split window in two horizontally}{C-x 3} \key{scroll other window}{C-M-v} --- 391,398 ---- {\setbox0=\hbox{\kbd{0}}\advance\hsize by 0\wd0 \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr ! \threecol{split window, above and below}{C-x 2\ \ \ \ }{C-x 5 2} \threecol{delete this window}{C-x 0\ \ \ \ }{C-x 5 0} }} ! \key{split window, side by side}{C-x 3} \key{scroll other window}{C-M-v} diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/vipcard.tex emacs-19.32/etc/vipcard.tex *** emacs-19.31/etc/vipcard.tex Wed Jun 9 06:56:01 1993 --- emacs-19.32/etc/vipcard.tex Sat Jul 20 14:13:43 1996 *************** are preserved on all copies. *** 74,78 **** For copies of the GNU Emacs manual, write to the Free Software ! Foundation, Inc., 1000 Massachusetts Ave, Cambridge MA 02138. \endgroup} --- 74,78 ---- For copies of the GNU Emacs manual, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. \endgroup} diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/etc/viperCard.tex emacs-19.32/etc/viperCard.tex *** emacs-19.31/etc/viperCard.tex Thu Jan 4 14:55:14 1996 --- emacs-19.32/etc/viperCard.tex Sat Jul 20 14:15:11 1996 *************** are preserved on all copies. *** 83,87 **** For copies of the GNU Emacs manual, write to the Free Software ! Foundation, Inc., 1000 Massachusetts Ave, Cambridge MA 02138. \endgroup} --- 83,87 ---- For copies of the GNU Emacs manual, write to the Free Software ! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. \endgroup} diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/info/dir emacs-19.32/info/dir *** emacs-19.31/info/dir Thu Jan 25 02:13:38 1996 --- emacs-19.32/info/dir Fri Jul 12 20:52:51 1996 *************** File: dir Node: Top This is the top of t *** 25,31 **** * CL: (cl). Partial Common Lisp support for Emacs Lisp. * SC: (sc). Supercite lets you cite parts of messages you're ! replying to, in hairy ways. * Dired-X: (dired-x). Dired Extra Features. * Ediff: (ediff). A comprehensive visual interface to diff & patch. ! * CC mode: (ccmode). The GNU Emacs mode for editing C, C++, and ! Objective-C code. --- 25,31 ---- * CL: (cl). Partial Common Lisp support for Emacs Lisp. * SC: (sc). Supercite lets you cite parts of messages you're ! replying to, in flexible ways. * Dired-X: (dired-x). Dired Extra Features. * Ediff: (ediff). A comprehensive visual interface to diff & patch. ! * CC mode: (ccmode). The GNU Emacs mode for editing C, C++, Objective-C ! and Java code. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/install.sh emacs-19.32/install.sh *** emacs-19.31/install.sh Sat May 25 20:17:34 1996 --- emacs-19.32/install.sh Thu Aug 1 22:02:46 1996 *************** *** 2,6 **** # # install - install a program, script, or datafile ! # This comes from X11R5. # # Calling this script install-sh is preferred over install.sh, to prevent --- 2,18 ---- # # install - install a program, script, or datafile ! # This comes from X11R5 (mit/util/scripts/install.sh). ! # ! # Copyright 1991 by the Massachusetts Institute of Technology ! # ! # Permission to use, copy, modify, distribute, and sell this software and its ! # documentation for any purpose is hereby granted without fee, provided that ! # the above copyright notice appear in all copies and that both that ! # copyright notice and this permission notice appear in supporting ! # documentation, and that the name of M.I.T. not be used in advertising or ! # publicity pertaining to distribution of the software without specific, ! # written prior permission. M.I.T. makes no representations about the ! # suitability of this software for any purpose. It is provided "as is" ! # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/ChangeLog emacs-19.32/lib-src/ChangeLog *** emacs-19.31/lib-src/ChangeLog Sat May 25 15:30:54 1996 --- emacs-19.32/lib-src/ChangeLog Wed Jul 31 15:11:28 1996 *************** *** 1,2 **** --- 1,66 ---- + Wed Jul 31 13:52:46 1996 Richard Stallman + + * Version 19.32 released. + + Tue Jul 23 14:41:32 1996 Andrew Innes + + * etags.c (readline_internal) [DOS_NT]: Don't include CRs when + computing character positions in source files. + + Tue Jul 16 19:20:25 1996 Andrew Innes + + * makefile.nt (clean): Use OBJDIR macro. + + Tue Jul 16 18:08:18 1996 Karl Heuer + + * cvtmail.c, sorted-doc.c, yow.c, emacsserver.c: Undo previous change. + + Mon Jul 15 17:10:20 1996 David Mosberger-Tang + + * cvtmail.c, sorted-doc.c, yow.c: [__GNU_LIBRARY__]: Use . + * emacsserver.c (main) [__GNU_LIBRARY__]: Use size_t for fromlen. + * etags.c, fakemail.c, profile.c: Declare main as int, not void. + + Mon Jul 15 15:56:14 1996 Andrew Innes + + * ntlib.h: Correct return type of getwd. + * ntlib.c (getwd): Correct return type. + + Tue Jul 2 17:56:47 1996 Richard Stallman + + * emacsserver.c (main) [HAVE_SOCKETS]: Call rewind before writing + to infile. + + Mon Jul 01 16:00:07 1996 Andrew Innes + + * makefile.nt: Remove all references to wakeup. + + Fri Jun 28 16:51:32 1996 Francesco Potorti` + + * etags.c (C_stab_entry): New keywords for C++ namespace, bool, + explicit, mutable, typename. + + Sat Jun 29 02:16:46 1996 Richard Stallman + + * emacsclient.c (main) [HAVE_SOCKETS]: Use two separate stdio + streams, one for sending and one for reading the reply. + + Fri Jun 21 01:43:45 1996 Richard Stallman + + * Makefile.in (timer, timer.o, getdate.o, $(srcdir)/getdate.c) + (wakeup): Target deleted. + (UTILITIES): Delete wakeup and timer. + + * wakeup.c, timer.c, getdate.y, getdate.c: Files deleted. + + Tue Jun 11 10:27:00 1996 Geoff Voelker + + * etags.c (etags_getcwd) [DOS_NT]: Change conditional to MSDOS only. + * makefile.nt (ETAGS_CFLAGS): Define HAVE_GETCWD macro. + + Thu Jun 6 10:05:51 1996 Richard Stallman + + * etags.c (main): Copy cwd when appending slash. + Sat May 25 15:30:10 1996 Karl Heuer diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/Makefile.in emacs-19.32/lib-src/Makefile.in *** emacs-19.31/lib-src/Makefile.in Fri Feb 16 21:22:31 1996 --- emacs-19.32/lib-src/Makefile.in Fri Jun 21 01:45:18 1996 *************** INSTALLABLE_SCRIPTS = rcs-checkin *** 94,99 **** # Things that Emacs runs internally, or during the build process, # which should not be installed in bindir. ! UTILITIES= wakeup profile digest-doc \ ! sorted-doc movemail cvtmail fakemail yow emacsserver hexl timer DONT_INSTALL= test-distrib make-docfile --- 94,99 ---- # Things that Emacs runs internally, or during the build process, # which should not be installed in bindir. ! UTILITIES= profile digest-doc \ ! sorted-doc movemail cvtmail fakemail yow emacsserver hexl DONT_INSTALL= test-distrib make-docfile *************** ${archlibdir}: all *** 252,257 **** fi - /* We don't need to install `wakeup' explicitly, because it will be - copied when this whole directory is copied. */ install: ${archlibdir} @echo --- 252,255 ---- *************** ctags: etags *** 339,345 **** $(CC) ${ALL_CFLAGS} -DCTAGS -DVERSION="\"${version}\"" -DETAGS_REGEXPS ${srcdir}/etags.c $(GETOPTOBJS) $(REGEXPOBJ) $(LOADLIBES) -o ctags - wakeup: ${srcdir}/wakeup.c - $(CC) ${ALL_CFLAGS} ${srcdir}/wakeup.c $(LOADLIBES) -o wakeup - profile: ${srcdir}/profile.c $(CC) ${ALL_CFLAGS} ${srcdir}/profile.c $(LOADLIBES) -o profile --- 337,340 ---- *************** emacsclient: ${srcdir}/emacsclient.c ../ *** 383,398 **** hexl: ${srcdir}/hexl.c $(CC) ${ALL_CFLAGS} ${srcdir}/hexl.c $(LOADLIBES) -o hexl - - TIMEROBJS=getdate.o timer.o $(ALLOCA) - $(srcdir)/getdate.c: ${srcdir}/getdate.y - cd $(srcdir); ${YACC} ${YFLAGS} getdate.y - cd $(srcdir); mv y.tab.c getdate.c - getdate.o: ${srcdir}/getdate.c ../src/config.h - $(CC) $(CPP_CFLAGS) -Demacs -c ${srcdir}/getdate.c - - timer.o: ${srcdir}/timer.c ../src/config.h - $(CC) -c $(CPP_CFLAGS) ${srcdir}/timer.c - timer: ${TIMEROBJS} - $(CC) $(LINK_CFLAGS) ${TIMEROBJS} $(LOADLIBES) -o timer /* These are NOT included in INSTALLABLES or UTILITIES. --- 378,381 ---- diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/alloca.c emacs-19.32/lib-src/alloca.c *** emacs-19.31/lib-src/alloca.c Sat May 25 20:21:30 1996 --- emacs-19.32/lib-src/alloca.c Thu Aug 1 22:06:58 1996 *************** alloca (size) *** 181,185 **** /* Reclaim garbage, defined as all alloca'd storage that ! was allocated from deeper in the stack than currently. */ { --- 181,185 ---- /* Reclaim garbage, defined as all alloca'd storage that ! was allocated from deeper in the stack than currently. */ { *************** struct stk_trailer *** 351,355 **** #ifdef CRAY2 /* Determine a "stack measure" for an arbitrary ADDRESS. ! I doubt that "lint" will like this much. */ static long --- 351,355 ---- #ifdef CRAY2 /* Determine a "stack measure" for an arbitrary ADDRESS. ! I doubt that "lint" will like this much. */ static long diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/emacsclient.c emacs-19.32/lib-src/emacsclient.c *** emacs-19.31/lib-src/emacsclient.c Mon Apr 8 16:52:51 1996 --- emacs-19.32/lib-src/emacsclient.c Tue Jul 23 10:18:33 1996 *************** main (argc, argv) *** 64,68 **** char system_name[32]; int s, i; ! FILE *out; struct sockaddr_un server; char *homedir, *cwd, *str; --- 64,68 ---- char system_name[32]; int s, i; ! FILE *out, *in; struct sockaddr_un server; char *homedir, *cwd, *str; *************** main (argc, argv) *** 133,136 **** --- 133,138 ---- exit (1); } + + /* We use the stream OUT to send our command to the server. */ if ((out = fdopen (s, "r+")) == NULL) { *************** main (argc, argv) *** 140,143 **** --- 142,157 ---- } + /* We use the stream IN to read the response. + We used to use just one stream for both output and input + on the socket, but reversing direction works nonportably: + on some systems, the output appears as the first input; + on other systems it does not. */ + if ((in = fdopen (s, "r+")) == NULL) + { + fprintf (stderr, "%s: ", argv[0]); + perror ("fdopen"); + exit (1); + } + #ifdef BSD cwd = getwd (string); *************** main (argc, argv) *** 171,183 **** fflush (stdout); ! rewind (out); /* re-read the output */ ! str = fgets (string, BUFSIZ, out); ! printf ("\n"); ! ! /* Now, wait for an answer and print any messages. */ ! while (str = fgets (string, BUFSIZ, out)) printf ("%s", str); ! return 0; } --- 185,196 ---- fflush (stdout); ! /* Now, wait for an answer and print any messages. On some systems, ! the first line we read will actually be the output we just sent. ! We can't predict whether that will happen, so if it does, we ! detect it by recognizing `Client: ' at the beginning. */ ! while (str = fgets (string, BUFSIZ, in)) printf ("%s", str); ! return 0; } diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/emacsserver.c emacs-19.32/lib-src/emacsserver.c *** emacs-19.31/lib-src/emacsserver.c Tue Apr 9 17:17:41 1996 --- emacs-19.32/lib-src/emacsserver.c Tue Jul 16 18:09:29 1996 *************** extern int errno; *** 82,85 **** --- 82,86 ---- #endif /* no FD_SET */ + int main () { *************** main () *** 229,232 **** --- 230,234 ---- /* Transfer text from Emacs to the client, up to a newline. */ infile = openfiles[infd]; + rewind (infile); while (1) { diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/etags.c emacs-19.32/lib-src/etags.c *** emacs-19.31/lib-src/etags.c Fri May 17 12:46:15 1996 --- emacs-19.32/lib-src/etags.c Tue Jul 23 12:32:10 1996 *************** Inc., 59 Temple Place - Suite 330, Bosto *** 32,36 **** */ ! char pot_etags_version[] = "@(#) pot revision number is 11.63"; #define TRUE 1 --- 32,36 ---- */ ! char pot_etags_version[] = "@(#) pot revision number is 11.66"; #define TRUE 1 *************** char *massage_name (s) *** 694,698 **** ! void main (argc, argv) int argc; --- 694,698 ---- ! int main (argc, argv) int argc; *************** main (argc, argv) *** 857,862 **** tagfile = CTAGS ? "tags" : "TAGS"; cwd = etags_getcwd (); /* the current working directory */ ! if (cwd[strlen(cwd)-1] != '/') ! strcat (cwd, "/"); if (streq (tagfile, "-")) tagfiledir = cwd; --- 857,862 ---- tagfile = CTAGS ? "tags" : "TAGS"; cwd = etags_getcwd (); /* the current working directory */ ! if (cwd[strlen (cwd) - 1] != '/') ! cwd = concat (cwd, "/", ""); if (streq (tagfile, "-")) tagfiledir = cwd; *************** enum sym_type *** 1499,1503 **** /* Feed stuff between (but not including) %[ and %] lines to: ! gperf -c -k1,3 -o -p -r -t %[ struct C_stab_entry { char *name; int c_ext; enum sym_type type; } --- 1499,1503 ---- /* Feed stuff between (but not including) %[ and %] lines to: ! gperf -c -k 1,3 -o -p -r -t %[ struct C_stab_entry { char *name; int c_ext; enum sym_type type; } *************** struct C_stab_entry { char *name; int c_ *** 1508,1511 **** --- 1508,1512 ---- @end, 0, st_C_objend class, C_PLPL, st_C_struct + namespace, C_PLPL, st_C_struct domain, C_STAR, st_C_struct union, 0, st_C_struct *************** enum, 0, st_C_enum *** 1514,1517 **** --- 1515,1519 ---- typedef, 0, st_C_typedef define, 0, st_C_define + bool, C_PLPL, st_C_typespec long, 0, st_C_typespec short, 0, st_C_typespec *************** static, 0, st_C_typespec *** 1528,1531 **** --- 1530,1536 ---- const, 0, st_C_typespec volatile, 0, st_C_typespec + explicit, C_PLPL, st_C_typespec + mutable, C_PLPL, st_C_typespec + typename, C_PLPL, st_C_typespec # DEFUN used in emacs, the next three used in glibc (SYSCALL only for mach). DEFUN, 0, st_C_gnumacro *************** PSEUDO, 0, st_C_gnumacro *** 1540,1545 **** and replace lines between %< and %> with its output. */ /*%<*/ ! /* C code produced by gperf version 1.8.1 (K&R C version) */ ! /* Command-line: gperf -c -k1,3 -o -p -r -t */ --- 1545,1550 ---- and replace lines between %< and %> with its output. */ /*%<*/ ! /* C code produced by gperf version 2.1 (K&R C version) */ ! /* Command-line: gperf -c -k 1,3 -o -p -r -t */ *************** struct C_stab_entry { char *name; int c_ *** 1548,1578 **** #define MIN_WORD_LENGTH 3 #define MAX_WORD_LENGTH 15 ! #define MIN_HASH_VALUE 7 ! #define MAX_HASH_VALUE 63 /* ! 29 keywords ! 57 is the maximum key range */ static int hash (str, len) ! register char *str; ! register int len; { static unsigned char hash_table[] = { ! 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, ! 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, ! 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, ! 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, ! 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, ! 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, ! 63, 63, 63, 63, 17, 63, 63, 63, 4, 14, ! 4, 63, 63, 63, 63, 63, 63, 63, 63, 63, ! 8, 63, 63, 0, 23, 63, 63, 63, 63, 63, ! 63, 63, 63, 63, 63, 63, 63, 28, 63, 28, ! 10, 31, 27, 18, 63, 6, 63, 63, 26, 1, ! 11, 2, 29, 63, 29, 16, 26, 13, 15, 63, ! 63, 63, 63, 63, 63, 63, 63, 63, }; return len + hash_table[str[2]] + hash_table[str[0]]; --- 1553,1583 ---- #define MIN_WORD_LENGTH 3 #define MAX_WORD_LENGTH 15 ! #define MIN_HASH_VALUE 34 ! #define MAX_HASH_VALUE 121 /* ! 34 keywords ! 88 is the maximum key range */ static int hash (str, len) ! register char *str; ! register unsigned int len; { static unsigned char hash_table[] = { ! 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, ! 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, ! 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, ! 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, ! 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, ! 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, ! 121, 121, 121, 121, 45, 121, 121, 121, 16, 19, ! 61, 121, 121, 121, 121, 121, 121, 121, 121, 121, ! 10, 121, 121, 20, 53, 121, 121, 121, 121, 121, ! 121, 121, 121, 121, 121, 121, 121, 41, 45, 22, ! 60, 47, 37, 28, 121, 55, 121, 121, 20, 14, ! 29, 30, 5, 121, 50, 59, 30, 54, 6, 121, ! 121, 121, 121, 121, 121, 121, 121, 121, }; return len + hash_table[str[2]] + hash_table[str[0]]; *************** hash (str, len) *** 1580,1631 **** struct C_stab_entry * ! in_word_set (str, len) register char *str; ! register int len; { static struct C_stab_entry wordlist[] = { ! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"SYSCALL", 0, st_C_gnumacro}, ! {"",}, {"",}, {"",}, {"",}, {"",}, ! {"DEFUN", 0, st_C_gnumacro}, ! {"",}, {"",}, {"",}, ! {"domain", C_STAR, st_C_struct}, ! {"",}, {"",}, {"",}, {"",}, {"",}, ! {"short", 0, st_C_typespec}, ! {"union", 0, st_C_struct}, {"void", 0, st_C_typespec}, ! {"",}, {"",}, ! {"PSEUDO", 0, st_C_gnumacro}, ! {"double", 0, st_C_typespec}, ! {"",}, {"",}, ! {"@end", 0, st_C_objend}, ! {"@implementation", 0, st_C_objimpl}, {"float", 0, st_C_typespec}, ! {"int", 0, st_C_typespec}, ! {"",}, ! {"unsigned", 0, st_C_typespec}, {"@interface", 0, st_C_objprot}, ! {"",}, {"signed", 0, st_C_typespec}, ! {"long", 0, st_C_typespec}, ! {"ENTRY", 0, st_C_gnumacro}, {"define", 0, st_C_define}, ! {"const", 0, st_C_typespec}, ! {"",}, {"",}, {"",}, {"enum", 0, st_C_enum}, - {"volatile", 0, st_C_typespec}, {"static", 0, st_C_typespec}, {"struct", 0, st_C_struct}, ! {"",}, {"",}, {"",}, ! {"@protocol", 0, st_C_objprot}, ! {"",}, {"",}, ! {"auto", 0, st_C_typespec}, ! {"",}, ! {"char", 0, st_C_typespec}, ! {"class", C_PLPL, st_C_struct}, ! {"typedef", 0, st_C_typedef}, ! {"extern", 0, st_C_typespec}, }; --- 1585,1649 ---- struct C_stab_entry * ! in_word_set (str, len) register char *str; ! register unsigned int len; { static struct C_stab_entry wordlist[] = { ! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, ! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, ! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, ! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, ! {"volatile", 0, st_C_typespec}, ! {"PSEUDO", 0, st_C_gnumacro}, ! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, ! {"typedef", 0, st_C_typedef}, ! {"typename", C_PLPL, st_C_typespec}, ! {"",}, {"",}, {"",}, {"SYSCALL", 0, st_C_gnumacro}, ! {"",}, {"",}, {"",}, ! {"mutable", C_PLPL, st_C_typespec}, ! {"namespace", C_PLPL, st_C_struct}, ! {"long", 0, st_C_typespec}, ! {"",}, {"",}, ! {"const", 0, st_C_typespec}, ! {"",}, {"",}, {"",}, ! {"explicit", C_PLPL, st_C_typespec}, ! {"",}, {"",}, {"",}, {"",}, {"void", 0, st_C_typespec}, ! {"",}, ! {"char", 0, st_C_typespec}, ! {"class", C_PLPL, st_C_struct}, ! {"",}, {"",}, {"",}, {"float", 0, st_C_typespec}, ! {"",}, ! {"@implementation", 0, st_C_objimpl}, ! {"auto", 0, st_C_typespec}, ! {"",}, ! {"ENTRY", 0, st_C_gnumacro}, ! {"@end", 0, st_C_objend}, ! {"bool", C_PLPL, st_C_typespec}, ! {"domain", C_STAR, st_C_struct}, ! {"",}, ! {"DEFUN", 0, st_C_gnumacro}, ! {"extern", 0, st_C_typespec}, {"@interface", 0, st_C_objprot}, ! {"",}, {"",}, {"",}, ! {"int", 0, st_C_typespec}, ! {"",}, {"",}, {"",}, {"",}, {"signed", 0, st_C_typespec}, ! {"short", 0, st_C_typespec}, ! {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"define", 0, st_C_define}, ! {"@protocol", 0, st_C_objprot}, {"enum", 0, st_C_enum}, {"static", 0, st_C_typespec}, + {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, + {"union", 0, st_C_struct}, {"struct", 0, st_C_struct}, ! {"",}, {"",}, {"",}, {"",}, ! {"double", 0, st_C_typespec}, ! {"unsigned", 0, st_C_typespec}, }; *************** readline_internal (linebuffer, stream) *** 4088,4092 **** --- 4106,4119 ---- { *--p = '\0'; + #ifdef DOS_NT + /* Assume CRLF->LF translation will be performed by Emacs + when loading this file, so CRs won't appear in the buffer. + It would be cleaner to compensate within Emacs; + however, Emacs does not know how many CRs were deleted + before any given point in the file. */ + chars_deleted = 1; + #else chars_deleted = 2; + #endif } else *************** char * *** 4306,4310 **** etags_getcwd () { ! #ifdef DOS_NT char *p, path[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */ --- 4333,4337 ---- etags_getcwd () { ! #ifdef MSDOS char *p, path[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */ *************** etags_getcwd () *** 4317,4321 **** return strdup (path); ! #else /* not DOS_NT */ #if HAVE_GETCWD int bufsize = 200; --- 4344,4348 ---- return strdup (path); ! #else /* not MSDOS */ #if HAVE_GETCWD int bufsize = 200; *************** etags_getcwd () *** 4331,4335 **** return path; ! #else /* not DOS_NT and not HAVE_GETCWD */ struct linebuffer path; FILE *pipe; --- 4358,4362 ---- return path; ! #else /* not MSDOS and not HAVE_GETCWD */ struct linebuffer path; FILE *pipe; *************** etags_getcwd () *** 4343,4347 **** return path.buffer; #endif /* not HAVE_GETCWD */ ! #endif /* not DOS_NT */ } --- 4370,4374 ---- return path.buffer; #endif /* not HAVE_GETCWD */ ! #endif /* not MSDOS */ } diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/fakemail.c emacs-19.32/lib-src/fakemail.c *** emacs-19.31/lib-src/fakemail.c Sun Apr 28 14:25:12 1996 --- emacs-19.32/lib-src/fakemail.c Mon Jul 15 16:52:39 1996 *************** Boston, MA 02111-1307, USA. */ *** 25,37 **** #if defined (BSD) && !defined (BSD4_1) && !defined (USE_FAKEMAIL) /* This program isnot used in BSD, so just avoid loader complaints. */ ! void main () { } #else /* not BSD 4.2 (or newer) */ #ifdef MSDOS ! void main () { } #else /* not MSDOS */ --- 25,39 ---- #if defined (BSD) && !defined (BSD4_1) && !defined (USE_FAKEMAIL) /* This program isnot used in BSD, so just avoid loader complaints. */ ! int main () { + return 0; } #else /* not BSD 4.2 (or newer) */ #ifdef MSDOS ! int main () { + return 0; } #else /* not MSDOS */ *************** write_header (the_header) *** 696,700 **** } ! void main (argc, argv) int argc; --- 698,702 ---- } ! int main (argc, argv) int argc; Only in emacs-19.31/lib-src: getdate.c Only in emacs-19.31/lib-src: getdate.y diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/getopt.c emacs-19.32/lib-src/getopt.c *** emacs-19.31/lib-src/getopt.c Wed May 22 17:44:40 1996 --- emacs-19.32/lib-src/getopt.c Mon Jun 24 17:40:30 1996 *************** *** 69,73 **** #endif ! #ifdef WIN32 /* It's not Unix, really. See? Capital letters. */ #include --- 69,73 ---- #endif ! #if defined (WIN32) && !defined (__CYGWIN32__) /* It's not Unix, really. See? Capital letters. */ #include diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/makefile.nt emacs-19.32/lib-src/makefile.nt *** emacs-19.31/lib-src/makefile.nt Sat May 18 16:14:40 1996 --- emacs-19.32/lib-src/makefile.nt Sat Jul 20 14:08:55 1996 *************** *** 16,21 **** # # 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. */ # --- 16,22 ---- # # 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, Inc., 59 Temple Place - Suite 330, ! # Boston, MA 02111-1307, USA. # *************** LINK_FLAGS = $(ARCH_LDFLAGS) -debug:PART *** 31,35 **** ALL = $(BLD)\make-docfile.exe \ $(BLD)\hexl.exe \ - $(BLD)\wakeup.exe \ $(BLD)\ctags.exe \ $(BLD)\etags.exe \ --- 32,35 ---- *************** $(BLD)\make-docfile.exe: $(BLD)\make-do *** 56,61 **** $(LINK) -out:$@ $(LINK_FLAGS) $(BLD)\make-docfile.obj $(BLD)\ntlib.obj $(LIBS) $(BLD)\hexl.exe: $(BLD)\hexl.obj - $(BLD)\wakeup.exe: $(BLD)\wakeup.obj $(BLD)\ntlib.obj - $(LINK) -out:$@ $(LINK_FLAGS) $(BLD)\wakeup.obj $(BLD)\ntlib.obj $(LIBS) $(BLD)\movemail.exe: $(BLD)\movemail.obj $(BLD)\pop.obj $(BLD)\ntlib.obj $(LINK) -out:$@ $(LINK_FLAGS) -debug:FULL $(BLD)\movemail.obj $(BLD)\pop.obj $(BLD)\ntlib.obj $(LIBS) wsock32.lib --- 56,59 ---- *************** $(BLD)\fakemail.exe: $(BLD)\fakemail.o *** 64,68 **** make-docfile: $(BLD) $(BLD)\make-docfile.exe - wakeup: $(BLD) $(BLD)\wakeup.exe etags: $(BLD) $(BLD)\etags.exe hexl: $(BLD) $(BLD)\hexl.exe --- 62,65 ---- *************** $(BLD)\regex.obj: ../src/regex.c ../src/ *** 86,90 **** ../src/regex.c -Fo$@ ! ETAGS_CFLAGS = -DETAGS_REGEXPS $(BLD)\etags.obj: etags.c $(CC) $(CFLAGS) $(ETAGS_CFLAGS) -Fo$@ etags.c --- 83,87 ---- ../src/regex.c -Fo$@ ! ETAGS_CFLAGS = -DETAGS_REGEXPS -DHAVE_GETCWD $(BLD)\etags.obj: etags.c $(CC) $(CFLAGS) $(ETAGS_CFLAGS) -Fo$@ etags.c *************** install: $(INSTALL_FILES) *** 197,201 **** $(CP) $(BLD)\ctags.exe $(INSTALL_DIR)\bin $(CP) $(BLD)\hexl.exe $(INSTALL_DIR)\bin - $(CP) $(BLD)\wakeup.exe $(INSTALL_DIR)\bin $(CP) $(BLD)\movemail.exe $(INSTALL_DIR)\bin $(CP) $(BLD)\fakemail.exe $(INSTALL_DIR)\bin --- 194,197 ---- *************** install: $(INSTALL_FILES) *** 208,212 **** clean:; - $(DEL) *~ *.pdb DOC* - $(DEL_TREE) deleted ! - $(DEL_TREE) obj # --- 204,208 ---- clean:; - $(DEL) *~ *.pdb DOC* - $(DEL_TREE) deleted ! - $(DEL_TREE) $(OBJDIR) # *************** $(BLD)\timer.obj : \ *** 355,364 **** $(EMACS_ROOT)\src\m\intel386.h \ $(EMACS_ROOT)\lib-src\..\src\config.h - - $(BLD)\wakeup.obj : \ - $(SRC)\wakeup.c \ - $(EMACS_ROOT)\src\s\windowsnt.h \ - $(EMACS_ROOT)\src\m\intel386.h \ - $(EMACS_ROOT)\src\config.h $(BLD)\yow.obj : \ --- 351,354 ---- diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/ntlib.c emacs-19.32/lib-src/ntlib.c *** emacs-19.31/lib-src/ntlib.c Fri May 3 14:26:50 1996 --- emacs-19.32/lib-src/ntlib.c Mon Jul 15 15:55:55 1996 *************** sleep(int seconds) *** 42,46 **** /* Get the current working directory. */ ! int getwd (char *dir) { --- 42,46 ---- /* Get the current working directory. */ ! char * getwd (char *dir) { diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/ntlib.h emacs-19.32/lib-src/ntlib.h *** emacs-19.31/lib-src/ntlib.h Fri May 3 12:34:26 1996 --- emacs-19.32/lib-src/ntlib.h Sat Jul 20 14:06:53 1996 *************** *** 14,20 **** 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. */ --- 14,21 ---- 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, Inc., 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ *************** *** 24,28 **** void sleep(int seconds); ! int getwd (char *dir); int getppid(void); char * getlogin (); --- 25,29 ---- void sleep(int seconds); ! char *getwd (char *dir); int getppid(void); char * getlogin (); diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/profile.c emacs-19.32/lib-src/profile.c *** emacs-19.31/lib-src/profile.c Tue Apr 9 19:42:07 1996 --- emacs-19.32/lib-src/profile.c Mon Jul 15 16:52:42 1996 *************** gettimeofday (tp, tzp) *** 80,84 **** #endif ! void main () { --- 80,84 ---- #endif ! int main () { diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lib-src/rcs2log emacs-19.32/lib-src/rcs2log *** emacs-19.31/lib-src/rcs2log Sun Jan 14 20:17:56 1996 --- emacs-19.32/lib-src/rcs2log Sat Jul 20 14:08:05 1996 *************** *** 13,17 **** # Author: Paul Eggert ! # $Id: rcs2log,v 1.27 1996/01/15 01:17:03 eggert Exp $ # Copyright 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. --- 13,17 ---- # Author: Paul Eggert ! # $Id: rcs2log,v 1.28 1996/07/20 18:08:03 kwzh Exp $ # Copyright 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. *************** *** 28,33 **** # # You should have received a copy of the GNU General Public License ! # along with this program; see the file COPYING. If not, write to ! # the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. tab=' ' --- 28,34 ---- # # 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, Inc., 59 Temple Place - Suite 330, ! # Boston, MA 02111-1307, USA. tab=' ' Only in emacs-19.31/lib-src: timer.c Only in emacs-19.31/lib-src: wakeup.c diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ChangeLog emacs-19.32/lisp/ChangeLog *** emacs-19.31/lisp/ChangeLog Sat May 25 15:31:23 1996 --- emacs-19.32/lisp/ChangeLog Thu Aug 1 18:38:40 1996 *************** *** 1,2 **** --- 1,1059 ---- + Thu Aug 1 18:36:15 1996 Richard Stallman + + * Version 19.32 released. + + * gud.el (gdb): Undo previous change. + + Thu Aug 1 10:16:04 1996 Simon Marshall + + * comint.el (comint-file-name-chars): Was comint-file-name-regexp. + Give it a non-nil default value. + + * shell.el (shell-file-name-chars): Was shell-file-name-regexp. + (shell-mode): Set comint-file-name-chars to this variable. + + Wed Jul 31 12:34:47 1996 Richard Stallman + + * dabbrev.el (dabbrev-expand): When snarfing consecutive words, + if previous one was upcased, upcase this one too. + (dabbrev--substitute-expansion): When snarfing consecutive words, + don't case convert here. + + * help.el (help-font-lock-keywords): Undo July 26 change. + + * term/x-win.el: Delete code to disable f10 if motif. + + * gud.el (gdb): Bind comint-file-name-regexp. + + Tue Jul 30 17:53:46 1996 Richard Stallman + + * emerge.el (emerge-files-with-ancestor, emerge-files): + Use add-hook to add to QUIT-HOOKS. + + Mon Jul 29 19:31:37 1996 Richard Stallman + + * help.el (help-fontify-buffer-function): Function deleted. + (help-mode): Set font-lock-defaults in simple way again. + + Mon Jul 29 00:00:00 1996 Erik Naggum + + * ange-ftp.el (ange-ftp-read-passwd): Let first input override + default, and let RET use the default value. + (ange-ftp-get-passwd): Make prompt clearer. + + Sat Jul 27 00:14:21 1996 Richard Stallman + + * complete.el (PC-complete): When command is repeated, + scroll the completion buffer. + + * gud.el (gud-display-line): Don't crash if BUFFER is nil. + + * font-lock.el (font-lock-mode): Don't add to after-change-functions + if font-lock-fontify-region-function is `ignore'. + + Fri Jul 26 17:22:04 1996 Richard Stallman + + * help.el (help-font-lock-keywords): Use font-lock-function-name-face + for variables, too. + + * dabbrev.el (dabbrev--substitute-expansion): Use just ABBREV, not OLD, + in previous change. + + * vc.el (vc-do-command): Bind win32-quote-process-args. + + Fri Jul 26 14:14:22 1996 Simon Marshall + + * help.el (help-mode): Set font-lock-defaults to provide bindings for + local fontification functions. + (help-fontify-buffer-function): New function. + + Tue Jul 23 23:53:53 1996 Richard Stallman + + * edebug.el (edebug-trace-display): Save and restore current buffer. + + Tue Jul 23 18:30:56 1996 Erik Naggum + + * etags.el (tag-exact-file-name-match-p): Fix previous change. + + Tue Jul 23 15:07:47 1996 Andrew Innes + + * winnt.el (file-name-buffer-file-type-alist): Load TAGS files as + text, not binary. + + Tue Jul 23 15:07:47 1996 Paul Eggert + + * completion.el (cmpl-hours-since-origin): Fix bug: + microseconds count was being used instead of seconds count. + + Tue Jul 23 14:17:40 1996 Richard Stallman + + * loaddefs.el (ctl-x-map): Bind C-x M-:. + + Tue Jul 23 12:17:42 1996 Roland McGrath + + Fixes from Robert Praetorius : + * etags.el (etags-goto-tag-location): New local variable LINE; use it. + Fix typo in direct-file-tag case: position -> startpos. + (tag-word-match-p, tag-exact-file-name-match-p): Fix off-by-one errors. + + Tue Jul 23 09:56:21 1996 Richard Stallman + + * shadow.el (list-load-path-shadows): Doc fix. + + Mon Jul 22 15:06:08 1996 Richard Stallman + + * gud.el (perldb-command-name): New variable. + (perldb): Use it. + + Sun Jul 21 20:31:10 1996 Ralf Fassel + + * files.el (dabbrev-case-fold-search, dabbrev-case-replace): Set + `risky-local-variable' property, since these get eval'ed. + + * dabbrev.el (dabbrev-case-fold-search, dabbrev-case-replace): + Undo previous change. + + Sun Jul 21 15:47:16 1996 Richard Stallman + + * dabbrev.el (dabbrev--search): Don't downcase the result here. + (dabbrev-completion): Bind completion-ignore-case. + (dabbrev--substitute-expansion): Downcase the expansion here, + but not if case pattern matches start of original expansion. + + * executable.el (executable-find): Doc fix. + + * time.el (display-time): Fix prev change: use display-time-update. + + Sun Jul 21 15:19:24 1996 Karl Heuer + + * viper-util.el (vip-ms-style-os-p, vip-vms-os-p): Moved here from + viper.el. + + * rmail.el (rmail-next-same-subject): Don't set search-regexp + until after adjusting subject string. + + Sun Jul 21 14:38:08 1996 Richard Stallman + + * browse-url.el (browse-url-choose-browser): New function. + (browse-url-browser-function): Use browse-url-choose-browser + as the initial value. + + * time.el (display-time): Call display-time-event-handler directly + to make the time appear right away. + + Sun Jul 21 13:52:09 1996 Karl Heuer + + * executable.el (executable-find): Doc fix. + + Sat Jul 20 13:19:50 1996 Karl Heuer + + * viper.el (vip-ms-style-os-p): Doc fix. + + Sat Jul 20 02:14:40 1996 Richard Stallman + + * view.el (view-mode-auto-exit): Doc fix. + + Sat Jul 20 02:11:53 1996 Simon Marshall + + * shadow.el (list-load-path-shadows): Fix ambiguous wording. + + Sat Jul 20 02:07:36 1996 Karl Heuer + + * gnus-cus.el: Don't test X colors unless using X. + + Fri Jul 19 15:23:12 1996 Karl Heuer + + * gnus-cus.el: If no dark magenta, use maroon. + (gnus-face-dark-name-list): If no dark blue, use royal blue. + + Wed Jul 17 15:54:40 1996 Karl Heuer + + * viper-util.el (vip-get-filenames-from-buffer): Add &optional. + + * time.el (display-time): Starting time should be future, not past. + + Tue Jul 16 19:29:03 1996 Lars Magne Ingebrigtsen + + * message.el (message-send): Don't use mail-hist by default. + + Mon Jul 15 16:22:45 1996 Paul Eggert + + * appt.el (appt-check, appt-make-list): Avoid race condition + by getting current time only once. + * texinfmt.el (texinfo-format-today): Likewise. + + Mon Jul 15 16:17:26 1996 Richard Stallman + + * sh-script.el (sh-mode): Call sh-set-shell only for a writable + empty buffer. + + * executable.el (executable-set-magic): Don't put a space at end + if user says no. + + Mon Jul 15 16:00:03 1996 Andrew Innes + + * smtpmail.el (smtpmail-send-data-1): Escape "." at the start of + any line of data, not just lines containing nothing else. + + Sun Jul 14 10:31:02 1996 Lars Magne Ingebrigtsen + + * gnus-cache.el: Make sure byte-compilation doesn't trip on + the undefined `gnus-add-shutdown'. + + * gnus.el: Make sure `gnus-directory' is defined + when byte-compiling. + + Sat Jul 13 14:14:09 1996 Karl Heuer + + * allout.el (outline-auto-activation, outline-layout) + (outline-primary-bullet, outline-plain-bullets-string) + (outline-distinctive-bullets-string, outline-old-style-prefixes) + (outline-stylish-prefixes, outline-file-xref-bullet) + (outline-use-hanging-indents, outline-bullets-string) + (outline-write-file-hook, outline-mode, outline-prefix-data) + (outline-before-change-protect, outline-make-topic-prefix) + (outline-rebullet-current-heading, outline-rebullet-heading) + (outline-listify-exposed, outline-expose-topic) + (outline-old-expose-topic, outline-exposure) + (outline-latex-verbatim-quote-curr-line) + (outline-show-current-subtree, outline-hide-current-subtree) + (outline-hide-current-leaves, outline-new-exposure): Doc fix. + + Sat Jul 13 13:57:13 1996 Francois Pinard + + * allout.el (outline-resolve-xref): Do not mistake a blank line + following an xref (@) bullet as part of the rerefenced file name. + + Sat Jul 13 13:53:31 1996 Christopher J. Madsen + + * time.el (display-time): Fix start time for run-at-time. + + Fri Jul 12 20:51:32 1996 Richard Stallman + + * rmailsum.el (rmail-summary-next-labeled-message) + (rmail-summary-previous-labeled-message): + Call rmail-summary-goto-msg to move point in the summary. + + * mouse.el (mouse-major-mode-menu-1): No need to copy the top + levels of structure. + + * browse-url.el (browse-url-netscape-program): New variable. + (browse-url-mosaic-program): New variable. + (browse-url-mosaic, browse-url-netscape): Use them. + + Fri Jul 12 03:34:21 1996 Simon Marshall + + * font-lock.el (font-lock-comment-start-regexp): New variable. + (font-lock-fontify-syntactically-region): Use it. + When matching comments, use (match-end 1) as the start, if non-nil. + (font-lock-defaults-alist): Provide value for Lisp/C/C++ modes. + Remove obsolete entry for bibtex-mode. Doc fix. + (font-lock-match-c++-style-declaration-item-and-skip-to-next): Don't + treat a ; character as a declaration item separator. + + * comint.el (comint-truncate-buffer): Count lines from process-mark, + not point-max, as the input may span lines. + (comint-postoutput-scroll-to-bottom): Don't subtract from process-mark, + use comint-last-output-start, since the buffer string may have changed. + (comint-dynamic-complete-as-filename): Don't bind + file-name-handler-alist to nil, it interferes with directory tracking. + (comint-dynamic-list-filename-completions): Likewise. + (comint-replace-by-expanded-history): Only match leading ^ in input. + (comint-file-name-regexp): New variable. + (comint-mode): Make it buffer-local. + (comint-match-partial-filename): Use it. + + * shell.el (shell-file-name-quote-list): Default to nil on MSDOS/NT. + (shell-file-name-regexp): New variable. + (shell-mode): Set comint-file-name-regexp to its value. + + Thu Jul 11 20:31:10 1996 Ralf Fassel + + * dabbrev.el (dabbrev-case-fold-search, dabbrev-case-replace): Set + `risky-local-variable' property, since these get eval'ed. + + Thu Jul 11 20:09:27 1996 Ronan Waide + + * smtpmail.el (smtpmail-deduce-address-list): Handle RESENT-* fields. + + Thu Jul 11 19:26:18 1996 Richard Stallman + + * startup.el (normal-top-level-add-to-load-path): + Use directory-file-name since load-path elements don't end in /. + + * rmailsum.el (rmail-make-basic-summary-line): + If user-mail-address is nil, use alternative. + + * tex-mode.el (tex-validate-region): Skip fwd over whitespace + and punctuation, to find point of mismatch. + (validate-tex-buffer): Don't include the blank lines + before a paragraph in the paragraph being checked. + + * mouse.el (mouse-drag-region): Cope if stop-point is nil. + + * mouse.el (mouse-major-mode-menu-compute-equiv-keys): Deleted. + (mouse-major-mode-menu-1): Copy the top levels of structure, + if we use all of MENUBAR. + Set mouse-major-mode-menu-prefix. + (mouse-major-mode-menu): Total rewrite. + + Thu Jul 11 19:07:52 1996 Stefan Schoef + + * bibtex.el (bibtex-reference-head): Allow spaces and tabs between + opening brace or paren and key. Simplify regexp. + (bibtex-type-in-head, bibtex-key-in-head): Decrement. + (bibtex-mode): Use new function run-with-idle-timer instead of + auto-save-hook for periodically parsing keys. + (bibtex-mode-syntax-table, bibtex-autokey-name-change-strings, + bibtex-autokey-titleword-change-strings): Support non-escaped + double-quoted characters (as with german styles). + (bibtex-field-string-quoted): Disallow lines like + author = "Stefan Sch"of" + until BibTeX supports them. + + Sun Jul 7 20:17:11 1996 Richard Stallman + + * mouse.el (mouse-major-mode-menu-1): Always return just a keymap; + never (STRING . KEYMAP). + (mouse-major-mode-menu): Discard the `keymap' from the front of + the keymap we get from mouse-major-mode-menu-1. + Construct the menu name string from major-mode. + + Sun Jul 7 18:28:35 1996 Dave Love + + * gud.el (gud-irix-p): Exclude Irix6.1 up. + (gud-dbx-use-stopformat-p): New variable. + (dbx): Use it to send $stopformat for Irix6. + (gud-irixdbx-marker-filter): Cast $curline to int, not long (see + added comments). + (dbx): Likewise. + + Sun Jul 7 13:29:05 1996 Karl Heuer + + * ps-print.el (ps-article-subject): Don't die if header is missing. + (ps-article-author, ps-info-file, ps-info-node): Likewise. + + Sun Jul 7 00:00:00 1996 Francois Pinard + + * timezone.el (timezone-parse-date): Handle ISO 8601 dates, so + rmailsort does the right thing with them. + + Sat Jul 6 16:03:13 1996 Richard Stallman + + * mouse.el (mouse-show-mark): In transient mark mode, + delete mouse-drag-overlay. + (mouse-undouble-last-event): New function. + (mouse-show-mark): Call mouse-undouble-last-event. + + Sat Jul 6 16:03:13 1996 Richard Stallman + + * tar-mode.el (tar-mode-map): Bind up and down like C-p, C-n. + + Sat Jul 6 21:05:11 1996 Erik Naggum + + * files.el (insert-directory): Fix previous change. + + Fri Jul 5 22:04:17 1996 Lars Magne Ingebrigtsen + + * gnus-cus.el (()): Make sure that calling `gnus-visual-p' during + byte-compilation doesn't bug out. + + Fri Jul 5 09:35:58 1996 Simon Marshall + + * mail-utils.el (mail-strip-quoted-names): Removed debugging code. + + Thu Jul 4 13:22:28 1996 Richard Stallman + + * simple.el (newline): Don't do the optimization if the newline before + point is intangible or read-only or invisible. + + Wed Jul 3 11:13:42 1996 Richard Stallman + + * subr.el (unfocus-frame, focus-frame): Define as no-ops. + + Wed Jul 3 11:13:42 1996 Richard Stallman + + * scheme.el (scheme-mode-variables): Set comment-start-skip + to ignore backslash-quoted semicolons. + + * lisp-mode.el (lisp-mode-variables): Set comment-start-skip + to ignore backslash-quoted semicolons. + + Wed Jul 3 11:13:42 1996 Richard Stallman + + * files.el (insert-directory): When converting SWITCHES + string to a list, put back in original order. + + Thu Jul 4 00:15:19 1996 Lars Magne Ingebrigtsen + + * gnus.el (gnus-summary-prepare-threads): Would infloop under + certain obscure conditions. + + Wed Jul 3 11:13:42 1996 Richard Stallman + + * smtpmail.el (smtpmail-send-it): Ignore `To:' if there is a + `Resent-to':. + + Mon Jul 1 10:58:01 1996 Richard Stallman + + * winnt.el (using-unix-filesystems): Doc fix. + + Tue Jul 2 17:13:04 1996 Richard Stallman + + * reporter.el (mail-user-agent): Add autoload cookie. + + Tue Jul 2 17:12:20 1996 Barry A. Warsaw + + * reporter.el: Major rewrite. + + Tue Jul 2 19:36:28 1996 Lars Magne Ingebrigtsen + + * gnus-cache.el (gnus-cache-possibly-alter-active): Check for + gnus-cache-active-hashtb before using it. + + Mon Jul 1 10:58:01 1996 Richard Stallman + + * tcl-mode.el (tcl-imenu-generic-expression): Add nil as 1st elt. + + * mail-hist.el (mail-hist-current-header-name): + Use buffer-substring-no-properties. + + Mon Jul 1 00:00:00 1996 Francois Pinard + + * rmailsum.el (rmail-make-basic-summary-line): Accept ISO 8601 + dates as well. + + Fri Jun 30 22:38:46 1996 Michael Kifer + + * viper-util.el (vip-read-key): inhibit quit added. + + Sun Jun 30 14:06:36 1996 Lars Magne Ingebrigtsen + + * score-mode.el: Renamed from "gnus-scomo.el". + + Sun Jun 30 04:10:54 1996 Richard Stallman + + * info.el (Info-next-preorder): After we move up, move forward again. + (Info-last-preorder): After we move down or to the prev, + move down again. + + Sat Jun 29 15:50:40 1996 Richard Stallman + + * userlock.el (ask-user-about-supersession-help): Change help text. + (ask-user-about-supersession-threat): Add new `r' alternative. + + * files.el (set-visited-file-name): New optional arg NO-QUERY. + + Sat Jun 29 09:20:29 1996 Lars Magne Ingebrigtsen + + * nnheaderems.el: Deleted. + + Fri Jun 28 16:03:05 1996 Richard Stallman + + * view.el (view-mode): Doc fix. + + Fri Jun 28 15:49:41 1996 Ethan Bradford + + * ispell.el (ispell-message): Support message-mode. + + Fri Jun 28 11:21:42 1996 Per Abrahamsen + + * mouse.el (mouse-start-end): Support selecting strings by double + clicking on a character with quote syntax. + + Fri Jun 28 02:55:21 1996 Richard Stallman + + * cal-french.el (french-calendar-accents): New variable. + (french-calendar-month-name-array): Check that variable. + (french-calendar-special-days-array): Likewise. + (calendar-french-date-string): Likewise. + (calendar-goto-french-date): Likewise. + + * rmail.el (rmail-get-new-mail): Run rmail-before-get-new-mail-hook. + + * files.el (abbreviate-file-name): Ignore automount-dir-prefix if nil. + + * rmail.el (rmail-send-actions-rmail-buffer): Mark as permanent-local. + (rmail-send-actions-rmail-msg-number): Likewise. + + * sendmail.el (mail-reply-buffer, mail-send-actions): + Mark them as permanent-local. + (mail-mode): Don't set mail-reply-buffer to nil. + + * files.el (auto-mode-alist): Treat .pm like .pl. + + * term/x-win.el (x-handle-name-switch): Renamed from + x-handle-name-rn-switch. + + * startup.el (command-line-x-option-alist): Don't handle -rn. + x-handle-name-rn-switch renamed to x-handle-name-switch. + + * tmm.el (tmm-add-prompt): If tmm-completion-prompt is nil, + don't insert it; instead delete the usual completion helptext. + (tmm-completion-prompt): Doc fix. + + * mh-utils.el (mail-user-agent): Replaces mua-paradigm. + (mh-find-path): Set mail-user-agent. + + Thu Jun 27 17:53:34 1996 Francesco Potorti` + + * profile.el (profile-functions): No need to assume that the + current buffer is writable. + (profile-print, profile-results): Changed to display number of + calls and average time per call. + (profile-update-function): Update the number of calls. + (profile-a-function): Init the number of calls. + + Thu Jun 27 18:00:13 1996 Paul Eggert + + * rmail.el (rmail-unix-mail-delimiter): + Accept more user names, since they can be + mangled badly by modern Unix mailers (e.g. Solaris 2.5 mail.local). + Be a little more picky about dates to compensate. + Match all the digits of a year, as per RFC 1123 section 5.2.14. + (rmail-nuke-pinhead-header): Adjust to regexp renumbering in + rmail-unix-mail-delimiter. + + Thu Jun 27 01:54:01 1996 Richard Stallman + + * bibtex.el (bibtex-reference-head): Allow whitespace after the open + paren. + + * make-mode.el (makefile-gnumake-functions-alist): Add `addprefix'. + + * comint.el (comint-send-input): Use insert-before-markers + for all the insertions. + + Wed Jun 26 14:03:20 1996 Richard Stallman + + * mail-extr.el (mail-extract-address-components): Rename ,-pos + to comma-pos. + + * noutline.el (outline-minor-mode): No longer permanent local. + + Tue Jun 25 18:35:27 1996 Richard Stallman + + * tex-mode.el (tex-common-initialization): + Set skeleton-further-elements. + (tex-latex-block): Define as a skeleton. + + Tue Jun 25 18:22:54 1996 Lars Magne Ingebrigtsen + + * nnvirtual.el, nntp.el, nnspool.el, nnml.el, nnmh.el, nnmbox.el, + * nnmail.el, nnkiboze.el, nnheader.el, nnfolder.el, nneething.el, + * nndoc.el, nndir.el, nnbabyl.el, gnus.el, gnus-vm.el, + * gnus-vis.el, gnus-uu.el, gnus-score.el, gnus-msg.el, gnus-mh.el, + * gnus-kill.el, gnus-ems.el, gnus-edit.el, gnus-cite.el, + * gnus-cache.el, custom.el: New versions installed. + + * nnsoup.el, nnoo.el, nnheaderems.el, nndb.el, message.el, + * mailheader.el, gnus-topic.el, gnus-srvr.el, gnus-soup.el, + * gnus-setup.el, gnus-scomo.el, gnus-salt.el, gnus-nocem.el, + * gnus-gl.el, gnus-demon.el: New files. + + Tue Jun 25 14:46:53 1996 Richard Stallman + + * executable.el (executable-set-magic): Add space at end of line + if user says no to adding the shell's usual arguments. + Don't clear the buffer's modified-flag. + + * skeleton.el (skeleton-proxy-new): New function. + (define-skeleton): Define the skeleton as a defun + using skeleton-proxy-new. + + Tue Jun 25 15:01:46 1996 Simon Marshall + + * rmailsum.el (rmail-summary-mode-map): Add rmail-summary-by-senders. + + Tue Jun 25 01:13:11 1996 Richard Stallman + + * noutline.el (outline-minor-mode): Using change-major-mode-hook, + turn this mode off if we change major modes. + + Mon Jun 24 00:47:28 1996 + + * skeleton.el (local-variables-section): Adapted comment to outline + minor mode. + (skeleton-pair-insert-maybe): Rewritten to support autowrapping. + (mirror-mode): Fixed change of pair-* to skeleton-pair-*. Also pairs + 8 bit characters. + + Mon Jun 24 02:43:03 1996 Richard Stallman + + * mail-extr.el (mail-extract-address-components): Quote the comma + in ,-pos. + + * rmail.el (rmail-summary-by-senders): FIx typo in fn name. + + * goto-addr.el (goto-address-url-face, goto-address-mail-face) + (goto-address-url-mouse-face): New variables. + (goto-address-fontify): Use them. + + * files.el (set-auto-mode): Run multiple mode: specs + in left-to-right order. + + Mon Jun 24 01:45:37 1996 Simon Marshall + + * font-lock.el (font-lock-verbose): Default to 0. Doc fix. + (font-lock-default-fontify-buffer): Interpret numeric value. + (font-lock-fontified): Don't make it permanent-local. + (font-lock-mode): Remove before-revert-hook and after-revert-hook code. + Call font-lock-turn-on-thing-lock before font-lock-mode-hook. Doc fix. + (font-lock-revert-setup, font-lock-revert-cleanup): Deleted. + (turn-on-font-lock): Don't test font-lock-defaults et. al here again. + (turn-on-font-lock-if-enabled): Do it here again. + (font-lock-support-mode): New variable. + (font-lock-turn-on-thing-lock): New function. Use it. + (font-lock-turn-off-thing-lock): Renamed font-lock-thing-lock-cleanup. + (font-lock-change-major-mode): Turn off Font Lock mode if it is on. + Add font-lock-change-major-mode to change-major-mode-hook at top level. + + * fast-lock.el: New version. Barf if loaded on 8+3 filename pseudo-OS. + (fast-lock-mode): Wrap font-lock-support-mode not font-lock-mode-hook. + (fast-lock-save-cache): Use font-lock-value-in-major-mode. + (fast-lock-set-face-properties): Wrap with save-buffer-state. + + * lazy-lock.el: New file. + + * rmail.el (rmail-variables): Include font-lock-maximum-size in + font-lock-defaults. + + * mailalias.el (mail-complete): Reread mail aliases if necessary. + + Sun Jun 23 15:00:42 1996 Erik Naggum + + * term.el (term-exec-1): Run process on pty if possible. + + Sun Jun 23 01:56:15 1996 Noah Friedman + + * rlogin.el (rlogin): make comint-output-filter-functions local + before adding hooks. + + Sat Jun 22 00:49:00 1996 Richard Stallman + + * gnus-ems.el (gnus-background-mode): Set threshold for "light color" + at .6 of the total for white. + + * font-lock.el (font-lock-make-faces): Set threshold for "light color" + at .6 of the total for white. + + * faces.el (x-create-frame-with-faces): Set threshold for "light color" + at .6 of the total for white. + + * simple.el (choose-completion-string): Don't exit the minibuffer + when a directory name is chosen. + + Sat Jun 22 00:56:36 1996 + + * skeleton.el (skeleton-autowrap): New variable. + (skeleton-abbrev-cleanup): Added variable documentation. + (skeleton-proxy): Added optional autowrappping feature. + (skeleton-proxy, skeleton-abbrev-cleanup): Use `post-command-hook' + instead of someday to be obsolete defer. + + Fri Jun 21 22:05:06 1996 Michael Kifer + + * ediff-diff.el (ediff-setup-fine-diff-regions): + allow diff options to be passed to the diff program. + (ediff-make-diff2-buffer): Don't run Posix diff on remote files. + (ediff-make-diff2-buffer): Refuses to diff remote files. + (ediff-make-diff2-buffer,ediff-setup-diff-regions): Changed functions. + (ediff-make-diff2-buffer): New function. + Added ^\C-m$ to ok-lines regexps + + * ediff-ptch.el: New file. + + * ediff-util.el (ediff-verify-file-buffer): No longer reverts + buffers that have file name handlers. + + * ediff-mult.el (ediff-meta-insert-file-info): Write `remote file' + in the file size/modtime positions, if a file is remote. + + * ediff-wind.el (ediff-make-base-title): New function. + (ediff-refresh-control-frame): Modified. + + Fri Jun 21 21:05:06 1996 Michael Kifer + + * viper-ex.el: Fixed the :e command for NT + + * viper.el: replaced all checks for (or (numberp ...) + (characterp ...)) with vip-characterp + (vip-change): Now hides replace overlay even for multiline changes. + (vip-paren-match): Goes to closing paren first. + + * viper.el (vip-find-char-forward,vip-find-char-backward, + vip-goto-char-forward,vip-goto-char-backward): + (viper-mode): Don't delete the startup message. + (vip-set-hooks): Added fortran-mode to viper. + + * viper-util.el (vip-ex-nontrivial-find-file-unix) + (vip-ex-nontrivial-find-file-ms,vip-get-filenames-from-buffer) + (vip-wildcard-to-regexp,vip-glob-ms-windows-files): New functions. + + Fri Jun 21 01:16:36 1996 Richard Stallman + + * asm-mode.el (asm-mode-map): Bind C-c ; to comment-region. + + * mouse.el (mouse-drag-region): Be smart about which end + gets point and which end gets the mark. + + * hilit19.el (LaTeX-mode): Change handling of escaped $. + + * mouse.el (mouse-buffer-menu): Use aref rather than string-match. + + Wed Jun 19 18:12:09 1996 Richard Stallman + + * rmailsum.el (rmail-summary-bury): New function. + (rmail-summary-mode-map): Put rmail-summary-bury on b. + + * paths.el (Info-default-directory-list): Doc fix. + + Wed Jun 19 18:55:02 1996 Dave Love + + * gud.el (gud-irixdbx-marker-filter): Use %1ld, not %1d, + when printing $curline. + (dbx, irix case): Likewise in arg of gud-down. + + Tue Jun 18 13:14:11 1996 Brian D. Carlstrom + + * smtpmail.el (smtpmail-send-it): Don't handle FCC fields until after + determining FROM field. + Delete code that converted "S:" to "Subject:". + Insert FROM field unless it already exists (code from sendmail.el). + + Tue Jun 18 13:14:11 1996 Andrew Innes + + * smtpmail.el (smtpmail-smtp-service): Use port 25 as default. + (smtpmail-send-it): Require mail-utils upon entry. + Don't invoke sendmail-synch-aliases. + (smtpmail-deduce-address-list): Only use text matched in regexp group, + not the whole regexp. + + * smtpmail.el (smtpmail-read-response): Goto smtpmail-read-point + on every iteration to deal with multiple line banners. + + * smptmail.el (smtpmail-via-smtp): Bracket names in FROM + and RCPT TO commands. + + Tue Jun 18 12:50:58 1996 Richard Stallman + + * ange-ftp.el (ange-ftp-kill-ftp-process): Really use the BUFFER arg. + Make it optional. + + * vc-hooks.el (vc-mode-line): If user is root, + verify file really has user-writable bit. + + Tue Jun 18 13:23:29 1996 Kim F. Storm + + * hippie.el (he-concat-directory-file-name): Directory part may be nil. + (he-file-name-nondirectory): Referenced external variable. + + Tue Jun 18 11:47:00 1996 Richard Stallman + + * pp.el (pp-to-string): Treat #( like (. + + Tue Jun 18 11:06:32 1996 Francesco Potorti` + + * files.el (auto-mode-alist): Add uppercase version of archive + mode file name extensions ARC, ZIP, LXH, ZOO. + + Mon Jun 17 23:46:40 1996 Richard Stallman + + * noutline.el (outline-up-heading): Fix error message. + (outline-backward-same-level, outline-forward-same-level): Likewise. + + Sun Jun 16 14:22:58 1996 Richard Stallman + + * font-lock.el (global-font-lock-mode): Set up find-file-hooks. + (font-lock-default-fontify-buffer, font-lock-fontify-block) + (font-lock-mode): Fix syntax of msgs such as Fontifying...done. + + * skeleton.el (local-variables-section): Deleted. + + * undigest.el (unforward-rmail-message): In summary buffer, + switch temporarily to Rmail buffer. + + Sat Jun 15 19:54:54 1996 Paul Eggert + + * mail-utils.el (mail-strip-quoted-names): + `"' is not special inside an RFC 822 comment. + + Sat Jun 15 19:05:06 1996 Richard Stallman + + * sgml-mode.el (html-list): Definition deleted. + (html-headline): Definition deleted. + (html-ordered-list, html-unordered-list): New definitions. + (html-headline-1 ... html-headline-6): New definitions. + (html-mode-map): Use new commands. + + Fri Jun 14 17:29:30 1996 Richard Stallman + + * rlogin.el (rlogin): Doc fix. + + Fri Jun 14 14:34:54 1996 Ed Reingold + + * cal-tex.el (cal-tex-mini-calendar): Add optional paramter COLSEP. + (cal-tex-cursor-filofax-year): Use it. Also, adjust other sizes. + + Thu Jun 13 16:33:15 1996 Richard Stallman + + * simple.el (set-fill-column): Error if no argument. + + * easymenu.el (easy-menu-create-keymaps): Add menu-alias property. + + * lmenu.el (make-lucid-menu-keymap): Add menu-alias property. + + Tue Jun 11 13:11:08 1996 Andrew Innes + + * nnmail.el (nnmail-move-inbox): Prompt for POP3 password if + required, and include on the movemail command line. + + Wed Jun 12 00:26:30 1996 Richard Stallman + + * imenu.el (imenu--mouse-menu): Don't check imenu-use-keymap-menu. + + * files.el (find-alternate-file): Don't clear buffer-file-truename + and friends until after calling unlock-buffer. + + Wed Jun 12 05:32:05 1996 enami tsugutomo + + * rmailsum.el (rmail-new-summary): Fix typo; (concat ": " + description) should be eval'ed. + + Tue Jun 11 15:44:21 1996 Richard Stallman + + * tar-mode.el (tar-mode-revert): Cope if user cancels the revert. + + Mon Jun 10 17:35:58 1996 Richard Stallman + + * term.el (term-terminal-menu): Don't make a self-recursive keymap. + + * rmail.el (rmail-retry-failure): Nicer error message + if can't find mail-unsent-separator. + + * hexl.el (hexl-mode): Run hexl-mode-hook. + + Sun Jun 9 13:08:37 1996 Eli Zaretskii + + * term/pc-win.el (msdos-face-setup): Use `terminal-frame' for + initial frame setup. + (make-msdos-frame): New MSDOS-specific frame creation function. + (focus-frame, unfocus-frame): Don't set to 'ignore. + (auto-raise-mode, auto-lower-mode): Likewise. + (set-background-color, set-foreground-color): Definitions deleted. + + * loadup.el: On MSDOS, don't assume that `make-frame' + is only bound under an X emulator; use `x-create-frame' instead. + + * frame.el (frame-initialize): Don't count MSDOS neither as + window-system nor as a terminal frame here. + + * dos-fns.el: No need to require 'faces and set menu-bar-mode. + (window-frame): Remove; it is now on `frame.c'. + (raise-frame, select-frame): Likewise. + + Mon Jun 10 12:59:12 1996 Richard Stallman + + * hexl.el (hexl-mode): Set hexl-max-address early on + and call hexl-goto-address afterward. + And call hexlify-buffer even earlier. + + Sat Jun 8 16:03:24 1996 Geoff Voelker + + * comint.el (comint-substitute-in-file-name): New function. + (comint-match-partial-filename): Use comint-substitute-in-file-name + to handle system-specific syntax. + + * shell.el (shell-directory-tracker): Use + comint-substitute-in-file-name to handle system-specific syntax. + + * comint.el (comint-dynamic-complete-as-filename) + (omint-dynamic-simple-complete) + (comint-dynamic-list-filename-completions) [ms-dos, windows-nt]: + Set completion-ignore-case to t for these systems. + + * shell.el (shell-chdrive-regexp): New variable. + (shell-mode): Update doc string. + (shell-directory-tracker): Update doc string. + Detect drive changes. + + Sun Jun 9 15:10:44 1996 Richard Stallman + + * frame.el (make-frame-command): Treat msdos like no window system. + + Sun Jun 9 08:51:17 1996 Karl Heuer + + * comint.el (comint-file-name-quote-list): Doc fix. + * texnfo-upd.el (texinfo-find-pointer): Doc fix. + (texinfo-sequentially-find-pointer): Doc fix. + (texinfo-copy-menu): Use double backslash to quote regexp. + + Sat Jun 8 14:24:36 1996 Roland McGrath + + * etags.el (etags-list-tags): When there is an explicit tag name, skip + the \177 before it. + + Fri Jun 7 20:55:32 1996 Karl Heuer + + * facemenu.el (facemenu-complete-face-list): Doc fix. + + Fri Jun 7 13:06:53 1996 Roland McGrath + + * etags.el (tag-lines-already-matched): Remove defvar. + (initialize-new-tags-table): Don't make that var local. + (tag-lines-already-matched): Add docless defvar near find-tag-in-order + defun; this is a global state variable for that one function. + (find-tag-in-order): Move clearing of tag-lines-already-matched out of + loop. Make it a list of markers and search it with member; it is now + global, not buffer-local in the tags table, and records all matches in + any tags table during a single find-tag loop. When we run out of + matches, clear it and null out the markers. + + Fri Jun 7 10:21:52 1996 Richard Stallman + + * imenu.el (imenu--mouse-menu): Always use nested keymaps. + (imenu-use-keymap-menu): Variable deleted. + + * cmacexp.el (c-macro-preprocessor): New clause for Solaris. + + * winnt.el (x-set-selection, x-get-selection): Define them + to really use TYPE. + + * smtpmail.el: New file. + (smtpmail-send-it): Fix error messages. + (smtpmail-deduce-address-list): Bind recipient-address-list with let. + (smtpmail-via-smtp): Bind greeting, n, process-buffer. + + Thu Jun 6 10:34:19 1996 Richard Stallman + + * files.el (hack-local-variables-prop-line): Bind enable-local-eval. + + * hexl.el (hexl-mode-map): Bind prior, home, deletechar, deleteline, + insertline, S-delete, and DEL. Don't bind prev. + + Mon Jun 3 20:58:42 1996 Geoff Voelker + + * comint.el (comint-dynamic-complete-filename) [ms-dos, windows-nt]: + Always use backslash as a directory separator when completing + in shell mode on these systems. + + * winnt.el (shell-mode-hook): Set comint-completion-addsuffix + so that the directory suffix is backslash and the file suffix is space. + + Wed Jun 5 13:18:37 1996 Richard Stallman + + * comint.el (comint-unquote-filename): Handle quoted backslashes. + + * vc.el (vc-cancel-version): Fix paren error. + + * imenu.el (imenu): In interactive spec, pass the entire + index item, not just the string. + + Tue Jun 4 17:30:07 1996 Per Abrahamsen + + * xt-mouse.el (xterm-mouse-event): Adjust for minibuffer prompt + width. + + Tue Jun 4 12:37:13 1996 Richard Stallman + + * dired.el (dired-chown-program): Try /usr/sbin/chown. + + * frame.el (make-frame-command): New function. + (ctl-x-5-map): Change C-x 5 2 to make-frame-command. + + * hippie-exp.el (he-file-name-chars): Check windows-nt, not ms-windows. + + Tue Jun 04 14:50:26 1996 Kim F. Storm + + * files.el (buffer-file-numbers-unique): New variable; + initialize to nil for windows-nt. + (find-buffer-visiting): Skip search for buffer based + on buffer-file-number if these are not unique. + + Tue Jun 4 11:27:36 1996 Richard Stallman + + * replace.el (occur): Avoid "1 lines" in echo area. + + * shell.el (shell-match-partial-variable): Doc fix. + + Mon Jun 3 10:38:45 1996 Richard Stallman + + * mouse.el (mouse-show-mark): Use temporary highlighting if possible + instead of a pause. + (mouse-drag-region): Use mouse-show-mark to do temp highlighting. + (mouse-save-then-kill): Call mouse-show-mark for a new selection + if we have a window system. + + * reporter.el (reporter-submit-bug-report): + Bind same-window-regexps, same-window-buffer-names, to nil. + + Sun Jun 2 17:55:45 1996 Richard Stallman + + * rmail.el (rmail-get-new-mail): If conversion to BABYL fails + for the default inboxes, rename them so they won't be tried again. + + Sun Jun 2 11:27:13 1996 Eli Zaretskii + + * term/pc-win.el (msdos-color-aliases): Define more colors. + (msdos-color-translate): Fix `substring' arguments. Recognize + ``medium'' prefix. + + Fri May 31 17:04:19 1996 Karl Heuer + + * loaddefs.el (debug-ignored-errors): Don't use concat inside + quoted list. + + Fri May 31 00:16:17 1996 Richard Stallman + + * ehelp.el (electric-helpify): Allow NAME to be given as arg. + (electric-command-apropos): Specify *Apropos* as buffer name. + + * fill.el (fill-individual-paragraphs): Don't get stuck + if no newline at the end of the region. + + Thu May 30 19:13:40 1996 Richard Stallman + + * ispell.el (ispell-region): Handle ispell-skip-sgml properly + with an re-search. + + * reporter.el (reporter-submit-bug-report): + Use display-buffer to re-show the original buffer. + + Thu May 30 15:44:36 1996 Karl Heuer + + * simple.el (shell-command-on-region): In output buffer, display + first page by setting point, not window-start (which can leave + point in an unexpected place). + + * info.el (Info-insert-dir): Fix default directory. + + Thu May 30 13:11:29 1996 Per Abrahamsen + + * custom.el (event-point): Fix fboundp test surrounding this. + + Wed May 29 13:10:04 1996 Karl Heuer + + * debug.el, edebug.el, icomplete.el, macros.el, simple.el: + Use executing-kbd-macro, not executing-macro. + + Tue May 28 11:46:10 1996 Karl Heuer + + * add-log.el (change-log-font-lock-keywords): Require colon after + parenthesized function name. + + Tue May 28 11:21:40 1996 Paul Eggert + + * gnus.el (gnus-article-date-ut): Avoid race condition. + * gnus-msg.el (gnus-inews-date): Likewise. + + * gnus.el (gnus-gmt-to-local): When rewriting a date to local time, + use the UTC offset in effect then, not the current UTC offset. + + Sun May 26 19:12:21 1996 Roland McGrath + + * mailabbrev.el (mail-abbrev-expand-hook): Disable abbrev mode + temporarily while working, to avoid recursion in indent-relative + expanding part of the abbrev expansion as an abbrev itself. + Sat May 25 15:30:10 1996 Karl Heuer *************** Fri May 17 17:02:04 1996 Richard Stallm *** 58,62 **** Wed May 15 10:47:32 1996 Richard Stallman ! * tex-mode.el (latex-imenu-create-index): Change the regexp to match the * versions of commands. (latex-mode): Make imenu-create-index-function buffer-local. --- 1115,1119 ---- Wed May 15 10:47:32 1996 Richard Stallman ! * tex-mode.el (latex-imenu-create-index): Change the regexp to match the * versions of commands. (latex-mode): Make imenu-create-index-function buffer-local. *************** Sat May 11 14:29:44 1996 Andrew Innes < *** 83,87 **** (scroll-bar-maybe-set-window-start): New function. ! * term/win32-win.el (win32-handle-scroll-bar-event): Use scroll-bar-maybe-set-window-start. --- 1140,1144 ---- (scroll-bar-maybe-set-window-start): New function. ! * term/win32-win.el (win32-handle-scroll-bar-event): Use scroll-bar-maybe-set-window-start. *************** Fri May 10 18:41:10 1996 Richard Stallm *** 103,107 **** * vc.el (vc-rename-file): After renaming, update VC info and modeline. Preserve buffer-read-only. ! Thu May 9 13:35:20 1996 Richard Stallman --- 1160,1164 ---- * vc.el (vc-rename-file): After renaming, update VC info and modeline. Preserve buffer-read-only. ! Thu May 9 13:35:20 1996 Richard Stallman *************** Wed May 8 17:03:41 1996 Richard Stallm *** 119,125 **** (bookmark-insert-current-bookmark, bookmark-send-edited-annotation) (bookmark-read-annotation, bookmark-read-annotation-text-func) ! (bookmark-send-annotation, bookmark-insert-file-format-version-stamp): Doc fix. ! Wed May 8 14:43:02 1996 Karl Fogel --- 1176,1182 ---- (bookmark-insert-current-bookmark, bookmark-send-edited-annotation) (bookmark-read-annotation, bookmark-read-annotation-text-func) ! (bookmark-send-annotation, bookmark-insert-file-format-version-stamp): Doc fix. ! Wed May 8 14:43:02 1996 Karl Fogel *************** Mon May 6 19:17:04 1996 Richard Stallm *** 158,162 **** * gulp.el: New file. ! * info.el (Info-enable-active-nodes): Default to nil. Mark it risky. --- 1215,1219 ---- * gulp.el: New file. ! * info.el (Info-enable-active-nodes): Default to nil. Mark it risky. *************** Fri Apr 26 22:15:40 1996 Andrew Innes < *** 255,259 **** * loadup.el [windows-nt]: Load disp-table. ! * rmail.el (rmail-insert-inbox-text): When required, prompt for pop password and pass on to movemail. (rmail-pop-password, rmail-pop-password-required): New variables. --- 1312,1316 ---- * loadup.el [windows-nt]: Load disp-table. ! * rmail.el (rmail-insert-inbox-text): When required, prompt for pop password and pass on to movemail. (rmail-pop-password, rmail-pop-password-required): New variables. *************** Fri Apr 19 05:30:53 1996 Richard Stallm *** 346,350 **** (metamail-interpret-header, metamail-interpret-body): New functions. (metamail-region, metamail-buffer): New arg VIEWMODE. ! * Optional argument which value is passed to the environment variable EMACS_VIEW_MODE is added to the function metamail-buffer --- 1403,1407 ---- (metamail-interpret-header, metamail-interpret-body): New functions. (metamail-region, metamail-buffer): New arg VIEWMODE. ! * Optional argument which value is passed to the environment variable EMACS_VIEW_MODE is added to the function metamail-buffer *************** Sat Mar 23 00:32:19 1996 Per Abrahamsen *** 641,647 **** * custom.el (custom-type-properties): ! Use custom-asis instead of as-is. (custom-asis): Set it to itself. ! * gnus-cus.el: Use custom-asis instead of as-is. Fri Mar 22 18:25:21 1996 Michelangelo Grigni --- 1698,1704 ---- * custom.el (custom-type-properties): ! Use custom-asis instead of as-is. (custom-asis): Set it to itself. ! * gnus-cus.el: Use custom-asis instead of as-is. Fri Mar 22 18:25:21 1996 Michelangelo Grigni *************** Fri Mar 22 08:20:31 1996 Richard Stallm *** 661,665 **** * faces.el (x-frob-font-slant): Properly handle a match against x-font-regexp-head. ! (x-frob-font-weight): Separate two cond cases by analogy with x-frob-font-slant. --- 1718,1722 ---- * faces.el (x-frob-font-slant): Properly handle a match against x-font-regexp-head. ! (x-frob-font-weight): Separate two cond cases by analogy with x-frob-font-slant. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/MANIFEST emacs-19.32/lisp/MANIFEST *** emacs-19.31/lisp/MANIFEST Wed Dec 31 19:00:00 1969 --- emacs-19.32/lisp/MANIFEST Thu Aug 1 22:14:25 1996 *************** *** 0 **** --- 1,402 ---- + abbrev.el --- abbrev mode commands for Emacs + abbrevlist.el --- list one abbrev table alphabetically ordered. + ada-mode.el --- An Emacs major-mode for editing Ada source. + add-log.el --- change log maintenance commands for Emacs + advice.el --- an overloading mechanism for Emacs Lisp functions + allout.el --- Extensive outline mode for use alone and with other modes. + ange-ftp.el --- transparent FTP support for GNU Emacs + appt.el --- appointment notification functions. + apropos.el --- apropos commands for users and programmers. + arc-mode.el --- simple editing of archives + array.el --- array editing commands for Gnu Emacs + asm-mode.el --- mode for editing assembler code + assoc.el --- insert/delete/sort functions on association lists + auto-show.el --- perform automatic horizontal scrolling as point moves + autoinsert.el --- automatic mode-dependent insertion of text into new files + autoload.el --- maintain autoloads in loaddefs.el. + avoid.el --- make mouse pointer stay out of the way of editing + awk-mode.el --- AWK code editing commands for Emacs + backquote.el --- implement the ` Lisp construct + bib-mode.el --- bib-mode, major mode for editing bib files. + bibtex.el --- BibTeX mode for GNU Emacs + blackbox.el --- blackbox game in Emacs Lisp + blessmail.el --- Decide whether movemail needs special privileges. + bookmark.el --- set bookmarks, maybe annotate them, jump to them later. + browse-url.el --- ask a WWW browser to load a URL + buff-menu.el --- buffer menu main function and support functions. + byte-opt.el --- the optimization passes of the emacs-lisp byte compiler. + byte-run.el --- byte-compiler support for inlining + bytecomp.el --- compilation of Lisp code into byte code. + c-mode.el --- C code editing commands for Emacs + cal-china.el --- calendar functions for the Chinese calendar. + cal-coptic.el --- calendar functions for the Coptic/Ethiopic calendars. + cal-dst.el --- calendar functions for daylight savings rules. + cal-french.el --- calendar functions for the French Revolutionary calendar. + cal-hebrew.el --- calendar functions for the Hebrew calendar. + cal-islam.el --- calendar functions for the Islamic calendar. + cal-iso.el --- calendar functions for the ISO calendar. + cal-julian.el --- calendar functions for the Julian calendar. + cal-mayan.el --- calendar functions for the Mayan calendars. + cal-menu.el --- calendar functions for menu bar and popup menu support + cal-move.el --- calendar functions for movement in the calendar + cal-persia.el --- calendar functions for the Persian calendar. + cal-tex.el --- calendar functions for printing calendars with LaTeX. + cal-x.el --- calendar windows in dedicated frames in X + calendar.el --- Calendar functions. + case-table.el --- code to extend the character set and support case tables. + cc-compat.el --- cc-mode compatibility with c-mode.el confusion + cc-mode.el --- major mode for editing C, C++, and Objective-C code + cdl.el --- Common Data Language (CDL) utility functions for Gnu Emacs + chistory.el --- list command history + cl-compat.el --- Common Lisp extensions for GNU Emacs Lisp (compatibility) + cl-extra.el --- Common Lisp extensions for GNU Emacs Lisp (part two) + cl-indent.el --- enhanced lisp-indent mode + cl-macs.el --- Common Lisp extensions for GNU Emacs Lisp (part four) + cl-seq.el --- Common Lisp extensions for GNU Emacs Lisp (part three) + cl-specs.el --- Edebug specs for cl.el + cl.el --- Common Lisp extensions for GNU Emacs Lisp + cmacexp.el --- expand C macros in a region + cmuscheme.el --- Scheme process in a buffer. Adapted from tea.el. + comint.el --- general command interpreter in a window stuff + compare-w.el --- compare text between windows for Emacs. + compile.el --- run compiler as inferior of Emacs, parse error messages. + complete.el --- partial completion mechanism plus other goodies + completion.el --- dynamic word-completion code + cookie1.el --- retrieve random phrases from fortune cookie files + copyright.el --- update the copyright notice in current buffer + cplus-md.el --- C++ code editing commands for Emacs + cpp.el --- Highlight or hide text according to cpp conditionals. + cust-print.el --- handles print-level and print-circle. + custom.el --- User friendly customization support. + dabbrev.el --- dynamic abbreviation package + debug.el --- debuggers and related commands for Emacs + decipher.el --- Cryptanalyze monoalphabetic substitution ciphers + ;;I turned this off because I don't want it + delsel.el --- delete selection if you insert + derived.el --- allow inheritance of major modes. + desktop.el --- save partial status of Emacs when killed + diary-lib.el --- diary functions. + diff.el --- Run `diff' in compilation-mode. + dired-aux.el --- less commonly used parts of dired -*-byte-compile-dynamic: t;-*- + dired-x.el --- Sebastian Kremer's Extra DIRED hacked up for GNU Emacs19 + dired.el --- directory-browsing commands + disass.el --- disassembler for compiled Emacs Lisp code + disp-table.el --- functions for dealing with char tables. + dissociate.el --- scramble text amusingly for Emacs. + docref.el --- Simple cross references for Elisp documentation strings + doctor.el --- psychological help for frustrated users. + dos-fns.el --- MS-Dos specific functions. + double.el --- Support for keyboard remapping with double clicking + dunnet.el --- Text adventure for Emacs + easymenu.el --- support the easymenu interface for defining a menu. + ebuff-menu.el --- electric-buffer-list mode + echistory.el --- Electric Command History Mode + edebug.el --- a source-level debugger for Emacs Lisp + ediff-diff.el --- diff-related utilities + ediff-hook.el --- setup for Ediff's menus and autoloads + ediff-init.el --- Macros, variables, and defsubsts used by Ediff + ediff-merg.el --- merging utilities + ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff + ediff-ptch.el --- Ediff's patch support + ediff-util.el --- the core commands and utilities of ediff + ediff-vers.el --- version control interface to Ediff + ediff-wind.el --- window manipulation utilities + ediff.el --- a comprehensive visual interface to diff & patch + edmacro.el --- keyboard macro editor + edt-lk201.el --- Enhanced EDT Keypad Mode Emulation for LK-201 Keyboards + edt-mapper.el --- Create an EDT LK-201 Map File for X-Windows Emacs + edt-pc.el --- Enhanced EDT Keypad Mode Emulation for PC 101 Keyboards + edt-vt100.el --- Enhanced EDT Keypad Mode Emulation for VT Series Terminals + edt.el --- Enhanced EDT Keypad Mode Emulation for GNU Emacs 19 + ehelp.el --- bindings for electric-help mode + electric.el --- window maker and Command loop for `electric' modes. + elp.el --- Emacs Lisp Profiler + emacs-lock.el --- prevents you from exiting emacs if a buffer is locked + emacsbug.el --- command to report Emacs bugs to appropriate mailing list. + emerge.el --- merge diffs under Emacs control + enriched.el --- read and save files in text/enriched format + env.el --- functions to manipulate environment variables. + etags.el --- etags facility for Emacs + eval-reg.el --- Redefine eval-region, and subrs that use it, in Lisp + executable.el --- base functionality for executable interpreter scripts + f90.el --- Fortran-90 mode (free format) + facemenu.el --- create a face menu for interactively adding fonts to text + faces.el --- Lisp interface to the c "face" structure + fast-lock.el --- Automagic text properties caching for fast Font Lock mode. + ffap.el --- find file or url at point + files.el --- file input and output commands for Emacs + fill.el --- fill commands for Emacs + find-dired.el --- run a `find' command and dired the output + find-file.el --- find a file corresponding to this one given a pattern + find-gc.el --- detect functions that call the garbage collector + finder-inf.el --- keyword-to-package mapping + finder.el --- topic & keyword-based code finder + float-sup.el --- detect absence of floating-point support in Emacs runtime + float.el --- floating point arithmetic package. + flow-ctrl.el --- help for lusers on cu(1) or ttys with wired-in ^S/^Q flow control + foldout.el --- Folding extensions for outline-mode and outline-minor-mode. + follow.el --- Minor mode, Synchronize windows showing the same buffer. + font-lock.el --- Electric font lock mode + format.el --- read and save files in multiple formats + forms-d2.el --- demo forms-mode + forms-pass.el --- passwd file demo for forms-mode + forms.el --- Forms mode: edit a file as a form to fill in + fortran.el --- Fortran mode for GNU Emacs + frame.el --- multi-frame management independent of window systems. + gnus-cache.el --- cache interface for Gnus + gnus-cite.el --- parse citations in articles for Gnus + gnus-cus.el --- User friendly customization of Gnus + gnus-demon.el --- daemonic Gnus behaviour + gnus-edit.el --- Gnus SCORE file editing + gnus-ems.el --- functions for making Gnus work under different Emacsen + gnus-gl.el --- an interface to GroupLens for Gnus + gnus-kill.el --- kill commands for Gnus + gnus-mh.el --- mh-e interface for Gnus + gnus-msg.el --- mail and post interface for Gnus + gnus-nocem.el --- NoCeM pseudo-cancellation treatment + gnus-salt.el --- alternate summary mode interfaces for Gnus + gnus-score.el --- scoring code for Gnus + gnus-setup.el --- Initialization & Setup for Gnus 5 + gnus-soup.el --- SOUP packet writing support for Gnus + gnus-srvr.el --- virtual server support for Gnus + gnus-topic.el --- a folding minor mode for Gnus group buffers + gnus-uu.el --- extract (uu)encoded files in Gnus + gnus-vis.el --- display-oriented parts of Gnus + gnus-vm.el --- vm interface for Gnus + gnus.el --- a newsreader for GNU Emacs + gomoku.el --- Gomoku game between you and Emacs + goto-addr.el --- click to browse URL or to send to e-mail address + gud.el --- Grand Unified Debugger mode for gdb, sdb, dbx, or xdb under Emacs + gulp.el --- Ask for updates for Lisp packages + hanoi.el --- towers of hanoi in GNUmacs + help-macro.el --- Makes command line help such as help-for-help + help.el --- help commands for Emacs + helper.el --- utility help package supporting help in electric modes + hexl.el --- edit a file in a hex dump format using the hexl filter. + hide-ifdef-mode.el --- hides selected code within ifdef. + hideshow.el --- minor mode cmds to selectively display blocks of code + hilit19.el --- customizable highlighting for Emacs19 + hippie-exp.el --- expand text trying various ways to find its expansion. + holidays.el --- holiday functions for the calendar package + icomplete.el --- minibuffer completion incremental feedback + icon.el --- mode for editing Icon code + ielm.el --- interaction mode for Emacs Lisp + imenu.el --- Framework for mode-specific buffer indexes. + indent.el --- indentation commands for Emacs + inf-lisp.el --- an inferior-lisp mode + info.el --- info package for Emacs. + informat.el --- info support functions package for Emacs + isearch.el --- incremental search minor mode. + iso-acc.el --- minor mode providing electric accent keys + iso-ascii.el --- set up char tables for ISO 8859/1 on ASCII terminals. + iso-cvt.el --- translate to ISO 8859-1 from/to net/TeX conventions + iso-insert.el --- insert functions for ISO 8859/1. + iso-swed.el --- set up char tables for ISO 8859/1 for Swedish/Finnish ttys + iso-syntax.el --- set up case-conversion and syntax tables for ISO 8859/1 + iso-transl.el --- keyboard input definitions for ISO 8859/1. + iso02-syn.el --- set up case-conversion and syntax tables for ISO 8859-2 + ispell.el --- spell checking using Ispell + ispell4.el --- this is the GNU EMACS interface to GNU ISPELL version 4. + jka-compr.el --- reading/writing/loading compressed files + kermit.el --- additions to shell mode for use with kermit, etc. + lazy-lock.el --- Lazy demand-driven fontification for fast Font Lock mode. + ledit.el --- Emacs side of ledit interface + levents.el --- emulate the Lucid event data type and associated functions. + life.el --- John Horton Conway's `Life' game for GNU Emacs + lisp-mnt.el --- minor mode for Emacs Lisp maintainers + lisp-mode.el --- Lisp mode, and its idiosyncratic commands. + lisp.el --- Lisp editing commands for Emacs + lmenu.el --- emulate Lucid's menubar support + loaddefs.el --- define standard autoloads and keys of other files + loadhist.el --- lisp functions for working with feature groups + loadup.el --- load up standardly loaded Lisp files for Emacs. + lpr.el --- print Emacs buffer on line printer. + ls-lisp.el --- emulate insert-directory completely in Emacs Lisp + lselect.el --- Lucid interface to X Selections + lucid.el --- Emulate some Lucid Emacs functions. + lunar.el --- calendar functions for phases of the moon. + macros.el --- non-primitive commands for keyboard macros. + mail-extr.el --- extract full name and address from RFC 822 mail header. + mail-hist.el --- Headers and message body history for outgoing mail. + mail-utils.el --- utility functions used both by rmail and rnews + mailabbrev.el --- abbrev-expansion of mail aliases. + mailalias.el --- expand and complete mailing address aliases + mailheader.el --- Mail header parsing, merging, formatting + mailpost.el --- RMAIL coupler to /usr/uci/post mailer + make-mode.el --- makefile editing commands for Emacs + makeinfo.el --- run makeinfo conveniently + makesum.el --- generate key binding summary for Emacs + man.el --- browse UNIX manual pages + map-ynp.el --- General-purpose boolean question-asker. + meese.el --- protect the impressionable young minds of America + menu-bar.el --- define a default menu bar. + message.el --- composing mail and news messages + metamail.el --- Metamail interface for GNU Emacs + mh-comp --- mh-e functions for composing messages + mh-e.el --- GNU Emacs interface to the MH mail system + mh-funcs --- mh-e functions not everyone will use right away + mh-mime --- mh-e support for composing MIME messages + mh-pick --- make a search pattern and search for a message in mh-e + mh-seq --- mh-e sequences support + mh-utils.el --- mh-e code needed for both sending and reading + misc.el --- basic editing commands for Emacs + mlconvert.el --- convert buffer of Mocklisp code to real lisp. + mldrag.el --- mode line and vertical line dragging to resize windows + mlsupport.el --- run-time support for mocklisp code. + modula2.el --- Modula-2 editing support package + morse.el --- Convert text to morse code and back. + mouse-sel.el --- Multi-click selection support for Emacs 19 + mouse.el --- window system-independent mouse support + mpuz.el --- multiplication puzzle for GNU Emacs + msb.el --- Customizable buffer-selection with multiple menus. + nnbabyl.el --- rmail mbox access for Gnus + nndb.el --- nndb access for Gnus + nndir.el --- single directory newsgroup access for Gnus + nndoc.el --- single file access for Gnus + nneething.el --- random file access for Gnus + nnfolder.el --- mail folder access for Gnus + nnheader.el --- header access macros for Gnus and its backends + nnkiboze.el --- select virtual news access for Gnus + nnmail.el --- mail support functions for the Gnus mail backends + nnmbox.el --- mail mbox access for Gnus + nnmh.el --- mhspool access for Gnus + nnml.el --- mail spool access for Gnus + nnoo.el --- OO Gnus Backends + nnsoup.el --- SOUP access for Gnus + nnspool.el --- spool access for GNU Emacs + nntp.el --- nntp access for Gnus + nnvirtual.el --- virtual newsgroups access for Gnus + outline.el --- outline mode commands for Emacs + novice.el --- handling of disabled commands ("novice mode") for Emacs. + nroff-mode.el --- GNU Emacs major mode for editing nroff source + options.el --- edit Options command for Emacs. + outline.el --- outline mode commands for Emacs + page-ext.el --- extended page handling commands + page.el --- page motion commands for emacs. + paragraphs.el --- paragraph and sentence parsing. + paren.el --- highlight matching paren. + pascal.el --- major mode for editing pascal source in Emacs + paths.el --- define pathnames for use by various Emacs commands. + pc-mode.el --- emulate certain key bindings used on PCs. + pc-select.el --- emulate mark, cut, copy and paste from motif + perl-mode.el --- Perl code editing commands for GNU Emacs + picture.el --- "Picture mode" -- editing using quarter-plane screen model. + pp.el --- pretty printer for Emacs Lisp + profile.el --- generate run time measurements of Emacs Lisp functions + prolog.el --- major mode for editing and running Prolog under Emacs + ps-print.el --- Jim's Pretty-Good PostScript Generator for Emacs 19. + rcompile.el --- run a compilation on a remote machine + rect.el --- rectangle functions for GNU Emacs. + refbib.el --- convert refer-style references to ones usable by Latex bib + refer.el --- look up references in bibliography files. + regi.el --- REGular expression Interpreting engine + register.el --- register commands for Emacs. + replace.el --- replace commands for Emacs. + reporter.el --- customizable bug reporting of lisp programs + reposition.el --- center a Lisp function or comment on the screen + resume.el --- process command line args from within a suspended Emacs job + rfc822.el --- hairy rfc822 parser for mail and news and suchlike + ring.el --- handle rings of items + rlogin.el --- remote login interface + rmail.el --- main code of "RMAIL" mail reader for Emacs. + rmailedit.el --- "RMAIL edit mode" Edit the current message. + rmailkwd.el --- part of the "RMAIL" mail reader for Emacs. + rmailmsc.el --- miscellaneous support functions for the RMAIL mail reader + rmailout.el --- "RMAIL" mail reader for Emacs: output message to a file. + rmailsort.el --- Rmail: sort messages. + rmailsum.el --- make summary buffers for the mail reader + rnews.el --- USENET news reader for gnu emacs + rnewspost.el --- USENET news poster/mailer for GNU Emacs + rot13.el --- display a buffer in rot13. + rsz-mini.el --- dynamically resize minibuffer to display entire contents + s-region.el --- set region using shift key. + saveplace.el --- automatically save place in files. + scheme.el --- Scheme mode, and its idiosyncratic commands. + score-mode.el --- mode for editing Gnus score files + scribe.el --- scribe mode, and its idiosyncratic commands. + scroll-bar.el --- window system-independent scroll bar support. + select.el --- lisp portion of standard selection support. + sendmail.el --- mail sending commands for Emacs. + server.el --- Lisp code for GNU Emacs running as server process. + sgml-mode.el --- SGML- and HTML-editing modes + sh-script.el --- shell-script editing commands for Emacs + shadow.el --- Locate Emacs Lisp file shadowings. + shadowfile.el --- automatic file copying for Emacs 19 + shell.el --- specialized comint.el for running the shell. + simple.el --- basic editing commands for Emacs + simula.el --- SIMULA 87 code editing commands for Emacs + skeleton.el --- Lisp language extension for writing statement skeletons + ;; Simple SMTP protocol (RFC 821) for sending mail + solar.el --- calendar functions for solar events. + solitaire.el --- game of solitaire in Emacs Lisp + sort.el --- commands to sort text in an Emacs buffer. + soundex.el --- implement Soundex algorithm + spell.el --- spelling correction interface for Emacs. + spook.el --- spook phrase utility for overloading the NSA line eater + startup.el --- process Emacs shell arguments + studly.el --- StudlyCaps (tm)(r)(c)(xxx) + subr.el --- basic lisp subroutines for Emacs + sun-curs.el --- cursor definitions for Sun windows + sun-fns.el --- subroutines of Mouse handling for Sun windows + supercite.el --- minor mode for citing mail and news replies + swedish.el --- miscellaneous functions for dealing with Swedish. + tabify.el --- tab conversion commands for Emacs + talk.el --- Allow several users to talk to each other through Emacs. + tar-mode.el --- simple editing of tar files from GNU emacs + tcl-mode.el --- a major-mode for editing tcl/tk scripts + tcp.el --- TCP/IP stream emulation for GNU Emacs + telnet.el --- run a telnet session from within an Emacs buffer + tempo.el --- Flexible template insertion + term-nasty.el --- Damned Things from terminfo.el + term.el --- general command interpreter in a window stuff + terminal.el --- terminal emulator for GNU Emacs. + tex-mode.el --- TeX, LaTeX, and SliTeX mode commands. + texinfmt.el --- format Texinfo files into Info files. + texinfo.el --- major mode for editing Texinfo files + texnfo-upd.el --- utilities for updating nodes and menus in Texinfo files + text-mode.el --- text mode, and its idiosyncratic commands. + thingatpt.el --- Get the `thing' at point + time-stamp.el --- Maintain last change time stamps in files edited by Emacs + time.el --- display time and load in mode line of Emacs. + timer.el --- run a function with args at some time in future. + timezone.el --- time zone package for GNU Emacs + tmm.el --- text mode access to menu-bar + tpu-edt.el --- Emacs emulating TPU emulating EDT + tpu-extras.el --- Scroll margins and free cursor mode for TPU-edt + tpu-mapper.el --- Create a TPU-edt X-windows keymap file + tq.el --- utility to maintain a transaction queue + trace.el --- tracing facility for Emacs Lisp functions + two-column.el --- minor mode for editing of two-column text + type-break.el --- encourage rests from typing at appropriate intervals + uncompress.el --- auto-decompression hook for visiting .Z files + underline.el --- insert/remove underlining (done by overstriking) in Emacs. + undigest.el --- digest-cracking support for the RMAIL mail reader + uniquify.el --- unique buffer names dependent on file name + unrmail.el --- convert Rmail files to mailbox files. + unused.el --- editing commands in GNU Emacs that turned out not to be used. + userlock.el --- handle file access contention between multiple users + vc-hooks.el --- resident support for version-control + vc.el --- drive a version-control system from within Emacs + version.el --- record version number of Emacs. + vi.el --- major mode for emulating "vi" editor under GNU Emacs. + view.el --- peruse file or buffer without editing. + vip.el --- a VI Package for GNU Emacs + viper-ex.el --- functions implementing the Ex commands for Viper + viper-keym.el --- Viper keymaps + viper-macs.el --- functions implementing keyboard macros for Viper + viper-mous.el --- mouse support for Viper + viper-util.el --- Utilities used by viper.el + viper.el --- A full-featured Vi emulator for GNU Emacs 19 and XEmacs 19, + vms-patch.el --- override parts of files.el for VMS. + vms-pmail.el --- use Emacs as the editor within VMS mail. + vmsproc.el --- run asynchronous VMS subprocesses under Emacs + vt-control.el --- Common VTxxx control functions + vt100-led.el --- functions for LED control on VT-100 terminals & clones. + window.el --- GNU Emacs window commands aside from those written in C. + winnt.el --- Lisp routines for Windows NT. + ws-mode.el --- WordStar emulation mode for GNU Emacs + x-apollo.el --- Apollo support functions + x-menu.el --- menu support for X + xscheme.el --- run Scheme under Emacs + xt-mouse.el --- Support the mouse when emacs run in an xterm. + yow.el --- quote random zippyisms diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/abbrevlist.el emacs-19.32/lisp/abbrevlist.el *** emacs-19.31/lisp/abbrevlist.el Thu Mar 18 16:29:42 1993 --- emacs-19.32/lisp/abbrevlist.el Sat Jul 20 13:48:27 1996 *************** *** 20,25 **** ;; 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. ;;; Code: --- 20,26 ---- ;; 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, Inc., 59 Temple Place - Suite 330, ! ;; Boston, MA 02111-1307, USA. ;;; Code: diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/add-log.el emacs-19.32/lisp/add-log.el *** emacs-19.31/lisp/add-log.el Fri Mar 22 08:22:18 1996 --- emacs-19.32/lisp/add-log.el Fri Jun 28 03:41:22 1996 *************** This defaults to the value of `user-mail *** 50,54 **** '(("^[SMTWF].+" . font-lock-function-name-face) ; Date line. ("^\t\\* \\([^ :\n]+\\)" 1 font-lock-comment-face) ; File name. ! ("\(\\([^)\n]+\\)\)" 1 font-lock-keyword-face)) ; Function name. "Additional expressions to highlight in Change Log mode.") --- 50,54 ---- '(("^[SMTWF].+" . font-lock-function-name-face) ; Date line. ("^\t\\* \\([^ :\n]+\\)" 1 font-lock-comment-face) ; File name. ! ("(\\([^)\n]+\\)):" 1 font-lock-keyword-face)) ; Function name. "Additional expressions to highlight in Change Log mode.") diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/allout.el emacs-19.32/lisp/allout.el *** emacs-19.31/lisp/allout.el Mon Jan 29 17:52:43 1996 --- emacs-19.32/lisp/allout.el Sat Jul 13 14:45:56 1996 *************** *** 34,43 **** ;; sensitive text, eg programming languages. (For an example, see the ;; allout code itself, which is organized in outline structure.) ! ;; ;; It also includes such things as topic-oriented repositioning, cut, and ;; paste; integral outline exposure-layout; incremental search with ;; dynamic exposure/concealment of concealed text; automatic topic-number ;; maintenance; and many other features. ! ;; ;; See the docstring of the variables `outline-layout' and ;; `outline-auto-activation' for details on automatic activation of --- 34,43 ---- ;; sensitive text, eg programming languages. (For an example, see the ;; allout code itself, which is organized in outline structure.) ! ;; ;; It also includes such things as topic-oriented repositioning, cut, and ;; paste; integral outline exposure-layout; incremental search with ;; dynamic exposure/concealment of concealed text; automatic topic-number ;; maintenance; and many other features. ! ;; ;; See the docstring of the variables `outline-layout' and ;; `outline-auto-activation' for details on automatic activation of *************** *** 45,50 **** ;; 3.x, for those of you that depend on the old method.) ;; ! ;; Note - the lines beginning with ';;;_' are outline topic headers. ! ;; Just 'ESC-x eval-current-buffer' to give it a whirl. ;;Ken Manheimer 301 975-3539 --- 45,50 ---- ;; 3.x, for those of you that depend on the old method.) ;; ! ;; Note - the lines beginning with `;;;_' are outline topic headers. ! ;; Just `ESC-x eval-current-buffer' to give it a whirl. ;;Ken Manheimer 301 975-3539 *************** With value `ask', auto-mode-activation i *** 81,86 **** performing auto-layout is asked of the user each time. ! With value `activate', only auto-mode-activation is enabled, auto- ! layout is not. With value `nil', neither auto-mode-activation nor auto-layout are --- 81,86 ---- performing auto-layout is asked of the user each time. ! With value `activate', only auto-mode-activation is enabled, ! auto-layout is not. With value `nil', neither auto-mode-activation nor auto-layout are *************** Buffer-specific. *** 96,102 **** A list value specifies a default layout for the current buffer, to be ! applied upon activation of allout outline-mode. Any non-nil value ! will automatically trigger allout outline-mode, provided `outline- ! init' has been called to enable it. See the docstring for `outline-init' for details on setting up for --- 96,102 ---- A list value specifies a default layout for the current buffer, to be ! applied upon activation of allout outline-mode. Any non-nil value will ! automatically trigger allout outline-mode, provided `outline-init' ! has been called to enable it. See the docstring for `outline-init' for details on setting up for *************** activated when the file is visited, foll *** 117,124 **** the allout.el, itself.) ! Also, allout's mode-specific provisions will make topic prefixes ! default to the comment-start string, if any, of the language of the ! file. This is modulo the setting of `outline-use-mode-specific- ! leader', which see.") (make-variable-buffer-local 'outline-layout) --- 117,123 ---- the allout.el, itself.) ! Also, allout's mode-specific provisions will make topic prefixes default ! to the comment-start string, if any, of the language of the file. This ! is modulo the setting of `outline-use-mode-specific-leader', which see.") (make-variable-buffer-local 'outline-layout) *************** prefix, which is concluded by bullets th *** 141,145 **** var and the respective outline-*-bullets-string vars. ! The value of an asterisk ('*') provides for backwards compatibility with the original emacs outline mode. See outline-plain-bullets-string and outline-distinctive-bullets-string for the range of available --- 140,144 ---- var and the respective outline-*-bullets-string vars. ! The value of an asterisk (`*') provides for backwards compatibility with the original emacs outline mode. See outline-plain-bullets-string and outline-distinctive-bullets-string for the range of available *************** bullets.") *** 151,158 **** "*The bullets normally used in outline topic prefixes. ! See 'outline-distinctive-bullets-string' for the other kind of bullets. ! DO NOT include the close-square-bracket, ']', as a bullet. Outline mode has to be reactivated in order for changes to the value --- 150,157 ---- "*The bullets normally used in outline topic prefixes. ! See `outline-distinctive-bullets-string' for the other kind of bullets. ! DO NOT include the close-square-bracket, `]', as a bullet. Outline mode has to be reactivated in order for changes to the value *************** shifting the level of a topic. See `out *** 168,175 **** the selection of alternating bullets. ! You must run 'set-outline-regexp' in order for changes to the value of this var to effect outline-mode operation. ! DO NOT include the close-square-bracket, ']', on either of the bullet strings.") (make-variable-buffer-local 'outline-distinctive-bullets-string) --- 167,174 ---- the selection of alternating bullets. ! You must run `set-outline-regexp' in order for changes to the value of this var to effect outline-mode operation. ! DO NOT include the close-square-bracket, `]', on either of the bullet strings.") (make-variable-buffer-local 'outline-distinctive-bullets-string) *************** strings.") *** 181,185 **** Allout outline mode will use the mode-specific `outline-mode-leaders' and/or comment-start string, if any, to lead the topic prefix string, ! so topic headers look like comments in the programming language. String values are used as they stand. --- 180,184 ---- Allout outline mode will use the mode-specific `outline-mode-leaders' and/or comment-start string, if any, to lead the topic prefix string, ! so topic headers look like comments in the programming language. String values are used as they stand. *************** Value `nil' means to always use the defa *** 195,204 **** comment-start strings that do not end in spaces are tripled, and an ! '_' underscore is tacked on the end, to distinguish them from regular comment strings. comment-start strings that do end in spaces are not ! tripled, but an underscore is substituted for the space. \[This presumes that the space is for appearance, not comment syntax. You can use `outline-mode-leaders' to override this behavior, when ! incorrect.\]") ;;;_ = outline-mode-leaders (defvar outline-mode-leaders '() --- 194,203 ---- comment-start strings that do not end in spaces are tripled, and an ! `_' underscore is tacked on the end, to distinguish them from regular comment strings. comment-start strings that do end in spaces are not ! tripled, but an underscore is substituted for the space. [This presumes that the space is for appearance, not comment syntax. You can use `outline-mode-leaders' to override this behavior, when ! incorrect.]") ;;;_ = outline-mode-leaders (defvar outline-mode-leaders '() *************** from regular comments that start at bol. *** 215,219 **** ;;;_ = outline-old-style-prefixes (defvar outline-old-style-prefixes nil ! "*When non-nil, use only old-and-crusty outline-mode '*' topic prefixes. Non-nil restricts the topic creation and modification --- 214,218 ---- ;;;_ = outline-old-style-prefixes (defvar outline-old-style-prefixes nil ! "*When non-nil, use only old-and-crusty outline-mode `*' topic prefixes. Non-nil restricts the topic creation and modification *************** Non-nil enables topic creation, modifica *** 231,235 **** functions to vary the topic bullet char (the char that marks the topic depth) just preceding the start of the topic text) according to level. ! Otherwise, only asterisks ('*') and distinctive bullets are used. This is how an outline can look (but sans indentation) with stylish --- 230,234 ---- functions to vary the topic bullet char (the char that marks the topic depth) just preceding the start of the topic text) according to level. ! Otherwise, only asterisks (`*') and distinctive bullets are used. This is how an outline can look (but sans indentation) with stylish *************** disables numbering maintenance.") *** 283,291 **** Set this var to the bullet you want to use for file cross-references. ! Set it 'nil' if you want to inhibit this capability.") ;;;_ + LaTeX formatting ;;;_ - outline-number-pages ! (defvar outline-number-pages nil "*Non-nil turns on page numbering for LaTeX formatting of an outline.") ;;;_ - outline-label-style --- 282,290 ---- Set this var to the bullet you want to use for file cross-references. ! Set it to nil if you want to inhibit this capability.") ;;;_ + LaTeX formatting ;;;_ - outline-number-pages ! (defvar outline-number-pages nil "*Non-nil turns on page numbering for LaTeX formatting of an outline.") ;;;_ - outline-label-style *************** formatted copy.") *** 315,319 **** ;;;_ = outline-keybindings-list ! ;;; You have to reactivate outline-mode - '(outline-mode t)' - to ;;; institute changes to this var. (defvar outline-keybindings-list () --- 314,318 ---- ;;;_ = outline-keybindings-list ! ;;; You have to reactivate outline-mode - `(outline-mode t)' - to ;;; institute changes to this var. (defvar outline-keybindings-list () *************** relevant mostly for use with indented-te *** 380,385 **** where auto-fill occurs. ! [This feature no longer depends in any way on the 'filladapt.el' ! lisp-archive package.]") (make-variable-buffer-local 'outline-use-hanging-indents) --- 379,384 ---- where auto-fill occurs. ! \[This feature no longer depends in any way on the `filladapt.el' ! lisp-archive package.\]") (make-variable-buffer-local 'outline-use-hanging-indents) *************** by set-outline-regexp.") *** 445,451 **** "A string dictating the valid set of outline topic bullets. ! This var should *not* be set by the user - it is set by 'set-outline-regexp', ! and is produced from the elements of 'outline-plain-bullets-string' ! and 'outline-distinctive-bullets-string'.") (make-variable-buffer-local 'outline-bullets-string) ;;;_ = outline-bullets-string-len --- 444,450 ---- "A string dictating the valid set of outline topic bullets. ! This var should *not* be set by the user - it is set by `set-outline-regexp', ! and is produced from the elements of `outline-plain-bullets-string' ! and `outline-distinctive-bullets-string'.") (make-variable-buffer-local 'outline-bullets-string) ;;;_ = outline-bullets-string-len *************** and 'outline-distinctive-bullets-string' *** 458,462 **** \(Ie, C-j, *or* C-m, for prefixes of hidden topics). This is properly ! set when outline-regexp is produced by 'set-outline-regexp', so that (match-beginning 2) and (match-end 2) delimit the prefix.") (make-variable-buffer-local 'outline-line-boundary-regexp) --- 457,461 ---- \(Ie, C-j, *or* C-m, for prefixes of hidden topics). This is properly ! set when outline-regexp is produced by `set-outline-regexp', so that (match-beginning 2) and (match-end 2) delimit the prefix.") (make-variable-buffer-local 'outline-line-boundary-regexp) *************** invoking it directly." *** 531,535 **** comment-start ;; Use comment-start, maybe tripled, and with ! ;; underscore: (concat (if (string= " " --- 530,534 ---- comment-start ;; Use comment-start, maybe tripled, and with ! ;; underscore: (concat (if (string= " " *************** See doc string for outline-keybindings-l *** 631,640 **** map)) ;;;_ = outline-prior-bindings - being deprecated. ! (defvar outline-prior-bindings nil "Variable for use in V18, with outline-added-bindings, for resurrecting, on mode deactivation, bindings that existed before activation. Being deprecated.") ;;;_ = outline-added-bindings - being deprecated ! (defvar outline-added-bindings nil "Variable for use in V18, with outline-prior-bindings, for resurrecting, on mode deactivation, bindings that existed before --- 630,639 ---- map)) ;;;_ = outline-prior-bindings - being deprecated. ! (defvar outline-prior-bindings nil "Variable for use in V18, with outline-added-bindings, for resurrecting, on mode deactivation, bindings that existed before activation. Being deprecated.") ;;;_ = outline-added-bindings - being deprecated ! (defvar outline-added-bindings nil "Variable for use in V18, with outline-prior-bindings, for resurrecting, on mode deactivation, bindings that existed before *************** from the list." *** 659,663 **** (let ((on-list (assq name outline-mode-prior-settings)) ! prior-capsule ; By 'capsule' i mean a list ; containing a value, so we can ; distinguish nil from no value. --- 658,662 ---- (let ((on-list (assq name outline-mode-prior-settings)) ! prior-capsule ; By `capsule' i mean a list ; containing a value, so we can ; distinguish nil from no value. *************** It's automatically reset to nil after ev *** 722,726 **** ;;;_ > outline-unprotected (expr) (defmacro outline-unprotected (expr) ! "Evaluate EXPRESSION with `outline-override-protect' let-bound 't'." (` (let ((outline-override-protect t)) (, expr)))) --- 721,725 ---- ;;;_ > outline-unprotected (expr) (defmacro outline-unprotected (expr) ! "Evaluate EXPRESSION with `outline-override-protect' let-bound to t." (` (let ((outline-override-protect t)) (, expr)))) *************** to track repeats.") *** 741,746 **** "In outline mode, run as a local-write-file-hooks activity. ! Currently just sets 'outline-during-write-cue', so outline-change- ! protection knows to keep inactive during file write." (setq outline-during-write-cue t) nil) --- 740,745 ---- "In outline mode, run as a local-write-file-hooks activity. ! Currently just sets `outline-during-write-cue', so outline-change-protection ! knows to keep inactive during file write." (setq outline-during-write-cue t) nil) *************** So outline-post-command-business should *** 765,773 **** MODE is one of the following symbols: ! - nil \(or no argument) deactivate auto-activation/layou; ! - 'activate', enable auto-activation only; ! - 'ask', enable auto-activation, and enable auto-layout but with confirmation for layout operation solicited from user each time; ! - 'report', just report and return the current auto-activation state; - anything else \(eg, t) for auto-activation and auto-layout, without any confirmation check. --- 764,772 ---- MODE is one of the following symbols: ! - nil \(or no argument) deactivate auto-activation/layout; ! - `activate', enable auto-activation only; ! - `ask', enable auto-activation, and enable auto-layout but with confirmation for layout operation solicited from user each time; ! - `report', just report and return the current auto-activation state; - anything else \(eg, t) for auto-activation and auto-layout, without any confirmation check. *************** the following two lines in your emacs in *** 806,810 **** ((hook 'outline-find-file-hook) (curr-mode 'outline-auto-activation)) ! (cond ((not mode) (setq find-file-hooks (delq hook find-file-hooks)) --- 805,809 ---- ((hook 'outline-find-file-hook) (curr-mode 'outline-auto-activation)) ! (cond ((not mode) (setq find-file-hooks (delq hook find-file-hooks)) *************** the following two lines in your emacs in *** 817,821 **** (outline-init (symbol-value curr-mode)))) (t (add-hook 'find-file-hooks hook) ! (set curr-mode ; 'set', not 'setq'! (cond ((eq mode 'activate) (message --- 816,820 ---- (outline-init (symbol-value curr-mode)))) (t (add-hook 'find-file-hooks hook) ! (set curr-mode ; `set', not `setq'! (cond ((eq mode 'activate) (message *************** the following two lines in your emacs in *** 833,837 **** "Outline mode auto-activation and -layout enabled.") 'full))))))) ! ;;;_ > outline-mode (&optional toggle) ;;;_ : Defun: --- 832,836 ---- "Outline mode auto-activation and -layout enabled.") 'full))))))) ! ;;;_ > outline-mode (&optional toggle) ;;;_ : Defun: *************** C-c , outline-open-supertopic ... a sibl *** 885,889 **** C-c > outline-shift-in Shift current topic and all offspring deeper. C-c < outline-shift-out ... less deep. ! C-c outline-rebullet-topic Reconcile bullets of topic and its' offspring - distinctive bullets are not changed, others alternated according to nesting depth. --- 884,888 ---- C-c > outline-shift-in Shift current topic and all offspring deeper. C-c < outline-shift-out ... less deep. ! C-c outline-rebullet-topic Reconcile bullets of topic and its offspring - distinctive bullets are not changed, others alternated according to nesting depth. *************** CHILDREN: *** 963,971 **** SIBLINGS: Topics having the same parent and depth. ! Topic text constituents: HEADER: The first line of a topic, include the topic PREFIX and header ! text. PREFIX: The leading text of a topic which which distinguishes it from normal text. It has a strict form, which consists of a --- 962,970 ---- SIBLINGS: Topics having the same parent and depth. ! Topic text constituents: HEADER: The first line of a topic, include the topic PREFIX and header ! text. PREFIX: The leading text of a topic which which distinguishes it from normal text. It has a strict form, which consists of a *************** PREFIX: The leading text of a topic whic *** 977,981 **** of the topic. PREFIX-LEAD: ! The string at the beginning of a topic prefix, normally a '.'. It can be customized by changing the setting of `outline-header-prefix' and then reinitializing outline-mode. --- 976,980 ---- of the topic. PREFIX-LEAD: ! The string at the beginning of a topic prefix, normally a `.'. It can be customized by changing the setting of `outline-header-prefix' and then reinitializing outline-mode. *************** PREFIX-PADDING: *** 990,995 **** bullet, according to the depth of the topic. BULLET: A character at the end of the topic prefix, it must be one of ! the characters listed on 'outline-plain-bullets-string' or ! 'outline-distinctive-bullets-string'. (See the documentation for these variables for more details.) The default choice of bullet when generating varies in a cycle with the depth of the --- 989,994 ---- bullet, according to the depth of the topic. BULLET: A character at the end of the topic prefix, it must be one of ! the characters listed on `outline-plain-bullets-string' or ! `outline-distinctive-bullets-string'. (See the documentation for these variables for more details.) The default choice of bullet when generating varies in a cycle with the depth of the *************** BODY: Same as ENTRY. *** 1001,1013 **** EXPOSURE: The state of a topic which determines the on-screen visibility ! of its' offspring and contained text. CONCEALED: Topics and entry text whose display is inhibited. Contiguous ! units of concealed text is represented by '...' ellipses. ! (Ref the 'selective-display' var.) Concealed topics are effectively collapsed within an ancestor. CLOSED: A topic whose immediate offspring and body-text is concealed. ! OPEN: A topic that is not closed, though its' offspring or body may be." ;;;_ . Code (interactive "P") --- 1000,1012 ---- EXPOSURE: The state of a topic which determines the on-screen visibility ! of its offspring and contained text. CONCEALED: Topics and entry text whose display is inhibited. Contiguous ! units of concealed text is represented by `...' ellipses. ! (Ref the `selective-display' var.) Concealed topics are effectively collapsed within an ancestor. CLOSED: A topic whose immediate offspring and body-text is concealed. ! OPEN: A topic that is not closed, though its offspring or body may be." ;;;_ . Code (interactive "P") *************** OPEN: A topic that is not closed, though *** 1015,1019 **** (let* ((active (and (not (equal major-mode 'outline)) (outline-mode-p))) ! ; Massage universal-arg 'toggle' val: (toggle (and toggle (or (and (listp toggle)(car toggle)) --- 1014,1018 ---- (let* ((active (and (not (equal major-mode 'outline)) (outline-mode-p))) ! ; Massage universal-arg `toggle' val: (toggle (and toggle (or (and (listp toggle)(car toggle)) *************** OPEN: A topic that is not closed, though *** 1049,1053 **** emacs-version)); 19.19. t) ! ;; Deactivation: ((and (not explicit-activation) --- 1048,1052 ---- emacs-version)); 19.19. t) ! ;; Deactivation: ((and (not explicit-activation) *************** OPEN: A topic that is not closed, though *** 1132,1136 **** (current-local-map))) ) ! ; selective-display is the ; emacs conditional exposure --- 1131,1135 ---- (current-local-map))) ) ! ; selective-display is the ; emacs conditional exposure *************** OPEN: A topic that is not closed, though *** 1201,1205 **** (outline-this-or-next-heading) (condition-case err ! (progn (apply 'outline-expose-topic (list outline-layout)) (message "Adjusting '%s' exposure... done." (buffer-name))) --- 1200,1204 ---- (outline-this-or-next-heading) (condition-case err ! (progn (apply 'outline-expose-topic (list outline-layout)) (message "Adjusting '%s' exposure... done." (buffer-name))) *************** OPEN: A topic that is not closed, though *** 1236,1240 **** "Register outline-prefix state data - BEGINNING and END of prefix. ! For reference by 'outline-recent' funcs. Returns BEGINNING." (` (setq outline-recent-prefix-end (, end) outline-recent-prefix-beginning (, beg)))) --- 1235,1239 ---- "Register outline-prefix state data - BEGINNING and END of prefix. ! For reference by `outline-recent' funcs. Returns BEGINNING." (` (setq outline-recent-prefix-end (, end) outline-recent-prefix-beginning (, beg)))) *************** Returns the location of the heading, or *** 1367,1371 **** '(if (re-search-forward outline-line-boundary-regexp nil 0) (progn ; Got valid location state - set vars: ! (outline-prefix-data (goto-char (or (match-beginning 2) outline-recent-prefix-beginning)) --- 1366,1370 ---- '(if (re-search-forward outline-line-boundary-regexp nil 0) (progn ; Got valid location state - set vars: ! (outline-prefix-data (goto-char (or (match-beginning 2) outline-recent-prefix-beginning)) *************** Return the location of the beginning of *** 1391,1395 **** (looking-at outline-bob-regexp)) (progn ; Got valid location state - set vars: ! (outline-prefix-data (goto-char (or (match-beginning 2) outline-recent-prefix-beginning)) --- 1390,1394 ---- (looking-at outline-bob-regexp)) (progn ; Got valid location state - set vars: ! (outline-prefix-data (goto-char (or (match-beginning 2) outline-recent-prefix-beginning)) *************** not be specified by external callers. O *** 1429,1433 **** starting point, and PREV-DEPTH is depth of prior topic." ! (let ((original (not orig-depth)) ; 'orig-depth' set only in recursion. chart curr-depth) --- 1428,1432 ---- starting point, and PREV-DEPTH is depth of prior topic." ! (let ((original (not orig-depth)) ; `orig-depth' set only in recursion. chart curr-depth) *************** starting point, and PREV-DEPTH is depth *** 1488,1492 **** (forward-char -1)) (setq outline-recent-end-of-subtree (point)))) ! chart ; (nreverse chart) not necessary, ; and maybe not preferable. --- 1487,1491 ---- (forward-char -1)) (setq outline-recent-end-of-subtree (point)))) ! chart ; (nreverse chart) not necessary, ; and maybe not preferable. *************** starting point, and PREV-DEPTH is depth *** 1495,1499 **** (defun outline-chart-siblings (&optional start end) "Produce a list of locations of this and succeeding sibling topics. ! Effectively a top-level chart of siblings. See 'outline-chart-subtree' for an explanation of charts." (save-excursion --- 1494,1498 ---- (defun outline-chart-siblings (&optional start end) "Produce a list of locations of this and succeeding sibling topics. ! Effectively a top-level chart of siblings. See `outline-chart-subtree' for an explanation of charts." (save-excursion *************** exposed reside. *** 1550,1557 **** opened. - Lists signify the beginning and end points of regions that should ! be flagged, and the flag to employ. (For concealment: '\(\?r\)', and exposure:" (while spec ! (cond ((listp spec) ) ) --- 1549,1556 ---- opened. - Lists signify the beginning and end points of regions that should ! be flagged, and the flag to employ. (For concealment: `\(\?r\)', and exposure:" (while spec ! (cond ((listp spec) ) ) *************** Changes to concealed regions are ignored *** 1909,1921 **** writes, like crypt and zip modes.) ! Locally bound in outline buffers to 'before-change-function', which in emacs 19 is run before any change to the buffer. (Has no effect ! in Emacs 18, which doesn't support before-change-function.) ! Any functions which set ['this-command' to 'undo', or which set] ! 'outline-override-protect' non-nil (as does, eg, outline-flag-chars) are exempt from this restriction." (if (and (outline-mode-p) ! ; outline-override-protect ; set by functions that know what ; they're doing, eg outline internals: --- 1908,1920 ---- writes, like crypt and zip modes.) ! Locally bound in outline buffers to `before-change-function', which in emacs 19 is run before any change to the buffer. (Has no effect ! in Emacs 18, which doesn't support before-change-function.) ! Any functions which set [`this-command' to `undo', or which set] ! `outline-override-protect' non-nil (as does, eg, outline-flag-chars) are exempt from this restriction." (if (and (outline-mode-p) ! ; outline-override-protect ; set by functions that know what ; they're doing, eg outline internals: *************** are exempt from this restriction." *** 1952,1956 **** (outline-hidden-p))) rehide-place) ! (save-excursion (if (condition-case err --- 1951,1955 ---- (outline-hidden-p))) rehide-place) ! (save-excursion (if (condition-case err *************** are exempt from this restriction." *** 1967,1971 **** ; Then interpret the response: (while ! (progn (message (concat "Change inside concealed" " region - do it? " --- 1966,1970 ---- ; Then interpret the response: (while ! (progn (message (concat "Change inside concealed" " region - do it? " *************** are exempt from this restriction." *** 1982,1986 **** ((eq response ??) (message ! "'r' means 'yes, then reclose") nil) (t (message "Please answer y, n, or r") --- 1981,1985 ---- ((eq response ??) (message ! "`r' means `yes, then reclose'") nil) (t (message "Please answer y, n, or r") *************** motion command to relocate the cursor of *** 2093,2097 **** (eq this-command 'self-insert-command) (eq (point)(outline-current-bullet-pos))) ! (let* ((this-key-num (if (numberp last-command-event) last-command-event)) --- 2092,2096 ---- (eq this-command 'self-insert-command) (eq (point)(outline-current-bullet-pos))) ! (let* ((this-key-num (if (numberp last-command-event) last-command-event)) *************** choice among the valid bullets. (This o *** 2223,2227 **** options, including, eg, a distinctive PRIOR-BULLET.) ! Fifth arg, NUMBER-CONTROL, matters only if 'outline-numbered-bullet' is non-nil *and* soliciting was not explicitly invoked. Then NUMBER-CONTROL non-nil forces prefix to either numbered or --- 2222,2226 ---- options, including, eg, a distinctive PRIOR-BULLET.) ! Fifth arg, NUMBER-CONTROL, matters only if `outline-numbered-bullet' is non-nil *and* soliciting was not explicitly invoked. Then NUMBER-CONTROL non-nil forces prefix to either numbered or *************** Nuances: *** 2389,2393 **** ; padding - only if not ; opening-on-blank: ! (progn (goto-char ref-topic) (setq dbl-space ; Determine double space action: --- 2388,2392 ---- ; padding - only if not ; opening-on-blank: ! (progn (goto-char ref-topic) (setq dbl-space ; Determine double space action: *************** Nuances: *** 2496,2500 **** ;;;_ ; level 1 topics have special provisions also - double space. ;;;_ ; location of new topic ! ;;;_ . ;;;_ > outline-open-subtopic (arg) (defun outline-open-subtopic (arg) --- 2495,2499 ---- ;;;_ ; level 1 topics have special provisions also - double space. ;;;_ ; location of new topic ! ;;;_ . ;;;_ > outline-open-subtopic (arg) (defun outline-open-subtopic (arg) *************** Note that refill of indented paragraphs *** 2564,2568 **** ;; to the new margin and the shift in depth: (old-margin (+ old-depth (- new-margin new-depth)))) ! ;; Process lines up to (but excluding) next topic header: (outline-unprotected --- 2563,2567 ---- ;; to the new margin and the shift in depth: (old-margin (+ old-depth (- new-margin new-depth)))) ! ;; Process lines up to (but excluding) next topic header: (outline-unprotected *************** Note that refill of indented paragraphs *** 2573,2577 **** t) ;; Register the indent data, before we reset the ! ;; match data with a subsequent 'looking-at': (setq old-indent-begin (match-beginning 1) old-indent-end (match-end 1)) --- 2572,2576 ---- t) ;; Register the indent data, before we reset the ! ;; match data with a subsequent `looking-at': (setq old-indent-begin (match-beginning 1) old-indent-end (match-end 1)) *************** Note that refill of indented paragraphs *** 2588,2592 **** ;;;_ > outline-rebullet-current-heading (arg) (defun outline-rebullet-current-heading (arg) ! "Like non-interactive version 'outline-rebullet-heading'. But \(only\) affects visible heading containing point. --- 2587,2591 ---- ;;;_ > outline-rebullet-current-heading (arg) (defun outline-rebullet-current-heading (arg) ! "Like non-interactive version `outline-rebullet-heading'. But \(only\) affects visible heading containing point. *************** of the topics current depth. *** 2622,2626 **** Third arg NUMBER-CONTROL can force the prefix to or away from ! numbered form. It has effect only if 'outline-numbered-bullet' is non-nil and soliciting was not explicitly invoked (via first arg). Its effect, numbering or denumbering, then depends on the setting --- 2621,2625 ---- Third arg NUMBER-CONTROL can force the prefix to or away from ! numbered form. It has effect only if `outline-numbered-bullet' is non-nil and soliciting was not explicitly invoked (via first arg). Its effect, numbering or denumbering, then depends on the setting *************** Fifth arg DO-SUCCESSORS t means re-resol *** 2638,2643 **** siblings. ! Cf vars 'outline-stylish-prefixes', 'outline-old-style-prefixes', ! and 'outline-numbered-bullet', which all affect the behavior of this function." --- 2637,2642 ---- siblings. ! Cf vars `outline-stylish-prefixes', `outline-old-style-prefixes', ! and `outline-numbered-bullet', which all affect the behavior of this function." *************** Leaves primary topic's trailing vertical *** 2923,2927 **** (>= (outline-recent-depth) depth)))) (forward-char 1))) ! (kill-region beg (point)) (sit-for 0) --- 2922,2926 ---- (>= (outline-recent-depth) depth)))) (forward-char 1))) ! (kill-region beg (point)) (sit-for 0) *************** however, are left exactly like normal, n *** 2956,2965 **** (let* ((subj-beg (point)) (subj-end (mark-marker)) ! ;; 'resituate' if yanking an entire topic into topic header: (resituate (and (outline-e-o-prefix-p) (looking-at (concat "\\(" outline-regexp "\\)")) (outline-prefix-data (match-beginning 1) (match-end 1)))) ! ;; 'rectify-numbering' if resituating (where several topics may ;; be resituating) or yanking a topic into a topic slot (bol): (rectify-numbering (or resituate --- 2955,2964 ---- (let* ((subj-beg (point)) (subj-end (mark-marker)) ! ;; `resituate' if yanking an entire topic into topic header: (resituate (and (outline-e-o-prefix-p) (looking-at (concat "\\(" outline-regexp "\\)")) (outline-prefix-data (match-beginning 1) (match-end 1)))) ! ;; `rectify-numbering' if resituating (where several topics may ;; be resituating) or yanking a topic into a topic slot (bol): (rectify-numbering (or resituate *************** however, are left exactly like normal, n *** 3040,3044 **** (exchange-point-and-mark)))) (if rectify-numbering ! (progn (save-excursion ; Give some preliminary feedback: --- 3039,3043 ---- (exchange-point-and-mark)))) (if rectify-numbering ! (progn (save-excursion ; Give some preliminary feedback: *************** by pops to non-distinctive yanks. Bug.. *** 3114,3126 **** (if (not outline-file-xref-bullet) (error ! "outline cross references disabled - no 'outline-file-xref-bullet'") (if (not (string= (outline-current-bullet) outline-file-xref-bullet)) ! (error "current heading lacks cross-reference bullet '%s'" outline-file-xref-bullet) (let (file-name) (save-excursion (let* ((text-start outline-recent-prefix-end) ! (heading-end (progn (outline-pre-next-preface) ! (point)))) (goto-char text-start) (setq file-name --- 3113,3124 ---- (if (not outline-file-xref-bullet) (error ! "outline cross references disabled - no `outline-file-xref-bullet'") (if (not (string= (outline-current-bullet) outline-file-xref-bullet)) ! (error "current heading lacks cross-reference bullet `%s'" outline-file-xref-bullet) (let (file-name) (save-excursion (let* ((text-start outline-recent-prefix-end) ! (heading-end (progn (end-of-line) (point)))) (goto-char text-start) (setq file-name *************** by pops to non-distinctive yanks. Bug.. *** 3130,3134 **** (if (not (= (aref file-name 0) ?:)) (expand-file-name file-name) ! ; A registry-files ref, strip the ':' ; and try to follow it: (let ((reg-ref (reference-registered-file --- 3128,3132 ---- (if (not (= (aref file-name 0) ?:)) (expand-file-name file-name) ! ; A registry-files ref, strip the `:' ; and try to follow it: (let ((reg-ref (reference-registered-file *************** See `outline-flag-region' for more detai *** 3183,3187 **** "Produce a list representing exposed topics in current region. ! This list can then be used by 'outline-process-exposed' to manipulate the subject region. --- 3181,3185 ---- "Produce a list representing exposed topics in current region. ! This list can then be used by `outline-process-exposed' to manipulate the subject region. *************** exposed components in subtopic. *** 3191,3195 **** Each component list contains: - a number representing the depth of the topic, ! - a string representing the header-prefix (ref. 'outline-header-prefix'), - a string representing the bullet character, - and a series of strings, each containing one line of the exposed --- 3189,3193 ---- Each component list contains: - a number representing the depth of the topic, ! - a string representing the header-prefix (ref. `outline-header-prefix'), - a string representing the bullet character, - and a series of strings, each containing one line of the exposed *************** Each component list contains: *** 3200,3204 **** (let* (strings pad result depth bullet beg next done) ; State vars. (goto-char start) ! (beginning-of-line) (if (not (outline-goto-prefix)) ; Get initial position within a topic: (outline-next-visible-heading 1)) --- 3198,3202 ---- (let* (strings pad result depth bullet beg next done) ; State vars. (goto-char start) ! (beginning-of-line) (if (not (outline-goto-prefix)) ; Get initial position within a topic: (outline-next-visible-heading 1)) *************** warn people about the change, and then d *** 3363,3367 **** (interactive "p") ;;(beep) ! ;;(message (format "Use '%s' instead of '%s' (%s)." ;; "outline-show-children" ;; "outline-show-current-children" --- 3361,3365 ---- (interactive "p") ;;(beep) ! ;;(message (format "Use `%s' instead of `%s' (%s)." ;; "outline-show-children" ;; "outline-show-current-children" *************** exposed by outline-show-entry but are wi *** 3454,3458 **** (defun outline-show-current-subtree (&optional arg) "Show everything within the current topic. With a repeat-count, ! expose this topic and its' siblings." (interactive "P") (save-excursion --- 3452,3456 ---- (defun outline-show-current-subtree (&optional arg) "Show everything within the current topic. With a repeat-count, ! expose this topic and its siblings." (interactive "P") (save-excursion *************** expose this topic and its' siblings." *** 3473,3477 **** If this topic is closed and it's a top level topic, close this topic ! and its' siblings. If optional arg JUST-CLOSE is non-nil, do not treat the parent or --- 3471,3475 ---- If this topic is closed and it's a top level topic, close this topic ! and its siblings. If optional arg JUST-CLOSE is non-nil, do not treat the parent or *************** siblings, even if the target topic is al *** 3512,3516 **** ;;;_ > outline-hide-current-leaves () (defun outline-hide-current-leaves () ! "Hide the bodies of the current topic and all its' offspring." (interactive) (outline-back-to-current-heading) --- 3510,3514 ---- ;;;_ > outline-hide-current-leaves () (defun outline-hide-current-leaves () ! "Hide the bodies of the current topic and all its offspring." (interactive) (outline-back-to-current-heading) *************** Non-null lists recursively designate exp *** 3567,3573 **** subtopics of the current topic. ! The ':' repeat spec is used to specify exposure for any number of successive siblings, up to the trailing ones for which there are ! explicit specs following the ':'. Simple (numeric and null-list) specs are interpreted as follows: --- 3565,3571 ---- subtopics of the current topic. ! The `:' repeat spec is used to specify exposure for any number of successive siblings, up to the trailing ones for which there are ! explicit specs following the `:'. Simple (numeric and null-list) specs are interpreted as follows: *************** Simple (numeric and null-list) specs are *** 3580,3586 **** number, but do not force already opened subtopics to be closed. - 0 means to close topic - hide all offspring. ! : - 'repeat' apply prior element to all siblings at current level, *up to* ! those siblings that would be covered by specs following the ':' on the list. Ie, apply to all topics at level but the last ones. \(Only first of multiple colons at same level is --- 3578,3584 ---- number, but do not force already opened subtopics to be closed. - 0 means to close topic - hide all offspring. ! : - `repeat' apply prior element to all siblings at current level, *up to* ! those siblings that would be covered by specs following the `:' on the list. Ie, apply to all topics at level but the last ones. \(Only first of multiple colons at same level is *************** Examples: *** 3629,3633 **** ((eq curr-elem ':) (setq stay t) ! ;; Expand the 'repeat' spec to an explicit version, ;; w.r.t. remaining siblings: (let ((residue ; = # of sibs not covered by remaining spec --- 3627,3631 ---- ((eq curr-elem ':) (setq stay t) ! ;; Expand the `repeat' spec to an explicit version, ;; w.r.t. remaining siblings: (let ((residue ; = # of sibs not covered by remaining spec *************** Simple (numeric and null-list) specs are *** 3687,3693 **** - positive numbers just open to the relative depth indicated by the number. - 0 just closes ! - '*' completely opens the topic, including bodies. ! - '+' shows all the sub headers, but not the bodies ! - '-' exposes the body and immediate offspring of the corresponding topic. If the spec is a list, the first element must be a number, which --- 3685,3691 ---- - positive numbers just open to the relative depth indicated by the number. - 0 just closes ! - `*' completely opens the topic, including bodies. ! - `+' shows all the sub headers, but not the bodies ! - `-' exposes the body and immediate offspring of the corresponding topic. If the spec is a list, the first element must be a number, which *************** need not be quoted in outline-new-exposu *** 3749,3753 **** Cursor is left at start position. ! Use this instead of obsolete 'outline-exposure'. Examples: --- 3747,3751 ---- Cursor is left at start position. ! Use this instead of obsolete `outline-exposure'. Examples: *************** Examples: *** 3759,3763 **** Close all topics at current level to expose only their immediate children, except for the last topic at the current ! level, in which even its' immediate children are hidden. \(outline-exposure -2 : -1 *) Expose children and grandchildren of first topic at current --- 3757,3761 ---- Close all topics at current level to expose only their immediate children, except for the last topic at the current ! level, in which even its immediate children are hidden. \(outline-exposure -2 : -1 *) Expose children and grandchildren of first topic at current *************** Examples: *** 3771,3775 **** ;;;_ > outline-exposure '() (defmacro outline-exposure (&rest spec) ! "Being deprecated - use more recent 'outline-new-exposure' instead. Literal frontend for `outline-old-expose-topic', doesn't evaluate arguments --- 3769,3773 ---- ;;;_ > outline-exposure '() (defmacro outline-exposure (&rest spec) ! "Being deprecated - use more recent `outline-new-exposure' instead. Literal frontend for `outline-old-expose-topic', doesn't evaluate arguments *************** Used by isearch-terminate/outline-provis *** 3796,3800 **** isearch-done/outline-provisions") ! ;;;_ > outline-enwrap-isearch () (defun outline-enwrap-isearch () --- 3794,3798 ---- isearch-done/outline-provisions") ! ;;;_ > outline-enwrap-isearch () (defun outline-enwrap-isearch () *************** The function checks to ensure that the r *** 3819,3823 **** (if (or (and (fboundp 'isearch-mode) (fboundp 'isearch-quote-char)) ! (condition-case error (load-library outline-enwrap-isearch-mode) (file-error (message "Skipping isearch-mode provisions - %s '%s'" --- 3817,3821 ---- (if (or (and (fboundp 'isearch-mode) (fboundp 'isearch-quote-char)) ! (condition-case error (load-library outline-enwrap-isearch-mode) (file-error (message "Skipping isearch-mode provisions - %s '%s'" *************** The function checks to ensure that the r *** 3829,3843 **** ;; Isearch-mode loaded, encapsulate specific entry points for ;; outline dynamic-exposure business: ! (progn ! ;; stash crucial isearch-mode funcs under known, private ;; names, then register wrapper functions under the old ! ;; names, in their stead: 'isearch-quit' is pre isearch v 1.2. (fset 'real-isearch-terminate ! ; 'isearch-quit is pre v 1.2: (or (if (fboundp 'isearch-quit) (symbol-function 'isearch-quit)) (if (fboundp 'isearch-abort) ! ; 'isearch-abort' is v 1.2 and on: (symbol-function 'isearch-abort)))) (fset 'isearch-quit 'isearch-terminate/outline-provisions) --- 3827,3841 ---- ;; Isearch-mode loaded, encapsulate specific entry points for ;; outline dynamic-exposure business: ! (progn ! ;; stash crucial isearch-mode funcs under known, private ;; names, then register wrapper functions under the old ! ;; names, in their stead: `isearch-quit' is pre isearch v 1.2. (fset 'real-isearch-terminate ! ; `isearch-quit' is pre v 1.2: (or (if (fboundp 'isearch-quit) (symbol-function 'isearch-quit)) (if (fboundp 'isearch-abort) ! ; `isearch-abort' is v 1.2 and on: (symbol-function 'isearch-abort)))) (fset 'isearch-quit 'isearch-terminate/outline-provisions) *************** string across latex processing." *** 4010,4014 **** Adjust line contents so it is unaltered \(from the original line) ! across latex processing, within the context of a 'verbatim' environment. Leaves point at the end of the line." (beginning-of-line) --- 4008,4012 ---- Adjust line contents so it is unaltered \(from the original line) ! across latex processing, within the context of a `verbatim' environment. Leaves point at the end of the line." (beginning-of-line) *************** BULLET string, and a list of TEXT string *** 4114,4118 **** body-content bop) ; Do the head line: ! (insert-string (concat "\\OneHeadLine{\\verb\1 " (outline-latex-verb-quote bullet) "\1}{" --- 4112,4116 ---- body-content bop) ; Do the head line: ! (insert-string (concat "\\OneHeadLine{\\verb\1 " (outline-latex-verb-quote bullet) "\1}{" *************** Optional arg DO-DEFAULTING indicates to *** 4242,4246 **** ;; We do our own reading here, so we can circumvent, eg, special ! ;; treatment for '?' character. (Might oughta change minibuffer ;; keymap instead, oh well.) (setq got --- 4240,4244 ---- ;; We do our own reading here, so we can circumvent, eg, special ! ;; treatment for `?' character. (Might oughta change minibuffer ;; keymap instead, oh well.) (setq got *************** Optional arg SUCCESSIVE-BACKSLASHES is u *** 4293,4297 **** (defun add-hook (hook function &optional append) "Add to the value of HOOK the function FUNCTION unless already present. ! \(It becomes the first hook on the list unless optional APPEND is non-nil, in which case it becomes the last). HOOK should be a symbol, and FUNCTION may be any valid function. HOOK's value should be a list of functions, not a single --- 4291,4295 ---- (defun add-hook (hook function &optional append) "Add to the value of HOOK the function FUNCTION unless already present. ! \(It becomes the first hook on the list unless optional APPEND is non-nil, in which case it becomes the last). HOOK should be a symbol, and FUNCTION may be any valid function. HOOK's value should be a list of functions, not a single *************** function. If HOOK is void, it is first *** 4304,4308 **** (equal function tail)) (memq function (symbol-value hook))) ! (set hook (if append (nconc (symbol-value hook) (list function)) --- 4302,4306 ---- (equal function tail)) (memq function (symbol-value hook))) ! (set hook (if append (nconc (symbol-value hook) (list function)) *************** function. If HOOK is void, it is first *** 4318,4322 **** "ISearch for topic with bullet: " (regexp-sans-escapes outline-bullets-string)))) ! (let ((isearch-regexp t) (isearch-string (concat "^" --- 4316,4320 ---- "ISearch for topic with bullet: " (regexp-sans-escapes outline-bullets-string)))) ! (let ((isearch-regexp t) (isearch-string (concat "^" *************** function. If HOOK is void, it is first *** 4327,4331 **** (isearch-mode t))) ;;;_ ? Re hooking up with isearch - use isearch-op-fun rather than ! ;;; wrapping the isearch functions. ;;;_* Local emacs vars. --- 4325,4329 ---- (isearch-mode t))) ;;;_ ? Re hooking up with isearch - use isearch-op-fun rather than ! ;;; wrapping the isearch functions. ;;;_* Local emacs vars. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ange-ftp.el emacs-19.32/lisp/ange-ftp.el *** emacs-19.31/lisp/ange-ftp.el Sun Mar 24 19:14:32 1996 --- emacs-19.32/lisp/ange-ftp.el Mon Jul 29 12:26:55 1996 *************** only return the directory part of FILE." *** 1009,1013 **** End with RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line. Optional DEFAULT is password to start with." ! (let ((pass (if default default "")) (c 0) (echo-keystrokes 0) --- 1009,1013 ---- End with RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line. Optional DEFAULT is password to start with." ! (let ((pass nil) (c 0) (echo-keystrokes 0) *************** Optional DEFAULT is password to start wi *** 1026,1030 **** (message "") (ange-ftp-repaint-minibuffer) ! pass)) (defmacro ange-ftp-generate-passwd-key (host user) --- 1026,1030 ---- (message "") (ange-ftp-repaint-minibuffer) ! (or pass default ""))) (defmacro ange-ftp-generate-passwd-key (host user) *************** Optional DEFAULT is password to start wi *** 1103,1107 **** ;; Try that account. (ange-ftp-read-passwd ! (format "passwd for %s@%s (same as %s@%s): " user host user other) (ange-ftp-lookup-passwd other user)) --- 1103,1107 ---- ;; Try that account. (ange-ftp-read-passwd ! (format "passwd for %s@%s (default same as %s@%s): " user host user other) (ange-ftp-lookup-passwd other user)) *************** Optional DEFAULT is password to start wi *** 1362,1367 **** (auto-save-mode ange-ftp-auto-save))) ! (defun ange-ftp-kill-ftp-process (buffer) ! "Kill the FTP process associated with BUFFER. If the BUFFER's visited filename or default-directory is an ftp filename then kill the related ftp process." --- 1362,1367 ---- (auto-save-mode ange-ftp-auto-save))) ! (defun ange-ftp-kill-ftp-process (&optional buffer) ! "Kill the FTP process associated with BUFFER (the current buffer, if nil). If the BUFFER's visited filename or default-directory is an ftp filename then kill the related ftp process." *************** then kill the related ftp process." *** 1369,1373 **** (if (null buffer) (setq buffer (current-buffer))) ! (let ((file (or (buffer-file-name) default-directory))) (if file (let ((parsed (ange-ftp-ftp-name (expand-file-name file)))) --- 1369,1374 ---- (if (null buffer) (setq buffer (current-buffer))) ! (let ((file (or (buffer-file-name buffer) ! (save-excursion (set-buffer buffer) default-directory)))) (if file (let ((parsed (ange-ftp-ftp-name (expand-file-name file)))) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/appt.el emacs-19.32/lisp/appt.el *** emacs-19.31/lisp/appt.el Sun Jan 14 02:34:30 1996 --- emacs-19.32/lisp/appt.el Mon Jul 15 16:21:37 1996 *************** Therefore, you need to have `(display-ti *** 247,254 **** ;; from midnight. ie. 12:01am = 1, midnight = 0. ! (let* ((cur-hour(string-to-int ! (substring (current-time-string) 11 13))) ! (cur-min (string-to-int ! (substring (current-time-string) 14 16))) (cur-comp-time (+ (* cur-hour 60) cur-min))) --- 247,253 ---- ;; from midnight. ie. 12:01am = 1, midnight = 0. ! (let* ((now (decode-time)) ! (cur-hour (nth 2 now)) ! (cur-min (nth 1 now)) (cur-comp-time (+ (* cur-hour 60) cur-min))) *************** The time should be in either 24 hour for *** 531,538 **** ;; be removed. ! (let* ((cur-hour(string-to-int ! (substring (current-time-string) 11 13))) ! (cur-min (string-to-int ! (substring (current-time-string) 14 16))) (cur-comp-time (+ (* cur-hour 60) cur-min)) (appt-comp-time (car (car (car appt-time-msg-list))))) --- 530,536 ---- ;; be removed. ! (let* ((now (decode-time)) ! (cur-hour (nth 2 now)) ! (cur-min (nth 1 now)) (cur-comp-time (+ (* cur-hour 60) cur-min)) (appt-comp-time (car (car (car appt-time-msg-list))))) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/asm-mode.el emacs-19.32/lisp/asm-mode.el *** emacs-19.31/lisp/asm-mode.el Sun Jan 14 02:34:30 1996 --- emacs-19.32/lisp/asm-mode.el Fri Jun 21 22:14:01 1996 *************** *** 68,71 **** --- 68,72 ---- ;; Note that the comment character isn't set up until asm-mode is called. (define-key asm-mode-map ":" 'asm-colon) + (define-key asm-mode-map "\C-c;" 'comment-region) (define-key asm-mode-map "\C-i" 'tab-to-tab-stop) (define-key asm-mode-map "\C-j" 'asm-newline) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/bibtex.el emacs-19.32/lisp/bibtex.el *** emacs-19.31/lisp/bibtex.el Fri Mar 8 12:42:37 1996 --- emacs-19.32/lisp/bibtex.el Thu Jul 11 19:07:04 1996 *************** This variable is buffer local.") *** 96,99 **** --- 96,106 ---- (make-variable-buffer-local 'bibtex-maintain-sorted-entries) + (defvar bibtex-parse-keys-timeout auto-save-timeout + "*Specifies interval for parsing buffer for keys. + The buffer is checked every bibtex-parse-keys-timeout seconds if it is + modified since last parsing and is parsed if necessary. This is needed + only if buffer is maintained sorted (bibtex-maintain-sorted-entries + non-nil).") + (defvar bibtex-entry-field-alist '( *************** See the documentation of function bibtex *** 327,330 **** --- 334,339 ---- ("\\\\\\\"s" "ss") ("\\\\\\\"A" "Ae") ("\\\\\\\"O" "Oe") ("\\\\\\\"U" "Ue") + ("\\\"a" "ae") ("\\\"o" "oe") ("\\\"u" "ue") ("\\\"s" "ss") + ("\\\"A" "Ae") ("\\\"O" "Oe") ("\\\"U" "Ue") ("{" "") ("}" "")) "Alist of (old-regexp new-string) pairs. *************** See the documentation of function bibtex *** 380,383 **** --- 389,394 ---- ("\\\\\\\"s" "ss") ("\\\\\\\"A" "Ae") ("\\\\\\\"O" "Oe") ("\\\\\\\"U" "Ue") + ("\\\"a" "ae") ("\\\"o" "oe") ("\\\"u" "ue") ("\\\"s" "ss") + ("\\\"A" "Ae") ("\\\"O" "Oe") ("\\\"U" "Ue") ("{" "") ("}" "")) "Alist of (old-regexp new-string) pairs. *************** See the documentation of function bibtex *** 414,419 **** (defvar bibtex-mode-syntax-table (let ((st (make-syntax-table))) ! ;; [alarson:19920214.1004CST] make double quote a string quote ! (modify-syntax-entry ?\" "\"" st) (modify-syntax-entry ?$ "$$ " st) (modify-syntax-entry ?% "< " st) --- 425,430 ---- (defvar bibtex-mode-syntax-table (let ((st (make-syntax-table))) ! (modify-syntax-entry ?\" "w" st) ! ;; this was formerly "\"". Does this cause any problems? (modify-syntax-entry ?$ "$$ " st) (modify-syntax-entry ?% "< " st) *************** See the documentation of function bibtex *** 650,655 **** "\\(" "[^\"\\]" "\\)" ;; every character except quote or backslash "\\|" ! "\\(" "\"[A-Za-z-]" "\\)" ;; a quote followed by a letter or dash ! "\\|" "\\(" "\\\\.\\|\n" "\\)" ;; a backslash followed by any character "\\)*" --- 661,669 ---- "\\(" "[^\"\\]" "\\)" ;; every character except quote or backslash "\\|" ! ;; "\\(" "\"[A-Za-z-]" "\\)" ;; a quote followed by a letter or dash ! ;; "\\|" ! ;; last two lines commented out until lines like ! ;; author = "Stefan Sch"of" ! ;; are supported by BibTeX "\\(" "\\\\.\\|\n" "\\)" ;; a backslash followed by any character "\\)*" *************** See the documentation of function bibtex *** 694,700 **** (defconst bibtex-reference-head ! (concat "^\\( \\|\t\\)*\\(" bibtex-reference-type ! "\\)[ \t]*[({]\\(" bibtex-reference-key "\\)")) --- 708,714 ---- (defconst bibtex-reference-head ! (concat "^[ \t]*\\(" bibtex-reference-type ! "\\)[ \t]*[({][ \t]*\\(" bibtex-reference-key "\\)")) *************** See the documentation of function bibtex *** 707,715 **** ;; BibTeX reference entry (without reference key). ! (defconst bibtex-type-in-head 2) ;; The regexp subexpression number of the type part in ;; bibtex-reference-head. ! (defconst bibtex-key-in-head 3) ;; The regexp subexpression number of the key part in ;; bibtex-reference-head. --- 721,729 ---- ;; BibTeX reference entry (without reference key). ! (defconst bibtex-type-in-head 1) ;; The regexp subexpression number of the type part in ;; bibtex-reference-head. ! (defconst bibtex-key-in-head 2) ;; The regexp subexpression number of the key part in ;; bibtex-reference-head. *************** non-nil." *** 1458,1463 **** (error "File %s not in $BIBINPUTS paths" filename))))) bibtex-string-files) ! (add-hook ! 'auto-save-hook (function (lambda () --- 1472,1477 ---- (error "File %s not in $BIBINPUTS paths" filename))))) bibtex-string-files) ! (run-with-idle-timer ! bibtex-parse-keys-timeout bibtex-parse-keys-timeout (function (lambda () diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/browse-url.el emacs-19.32/lisp/browse-url.el *** emacs-19.31/lisp/browse-url.el Sat Mar 2 01:35:56 1996 --- emacs-19.32/lisp/browse-url.el Sun Jul 21 15:13:14 1996 *************** *** 262,269 **** (defvar browse-url-browser-function ! 'browse-url-netscape "*Function to display the current buffer in a WWW browser. ! Used by the `browse-url-at-point', `browse-url-at-mouse', and ! `browse-url-of-file' commands.") (defvar browse-url-netscape-arguments nil --- 262,273 ---- (defvar browse-url-browser-function ! 'browse-url-choose-browser "*Function to display the current buffer in a WWW browser. ! This is used by the `browse-url-at-point', `browse-url-at-mouse', and ! `browse-url-of-file' commands. ! The function should take one argument, an URL.") ! ! (defvar browse-url-netscape-program "netscape" ! "*The name for invoking Netscape.") (defvar browse-url-netscape-arguments nil *************** Passing an interactive argument to \\[br *** 276,279 **** --- 280,286 ---- Netscape version 1.1N or later or XMosaic version 2.5 or later.") + (defvar browse-url-mosaic-program "xmosaic" + "*The name for invoking Mosaic.") + (defvar browse-url-mosaic-arguments nil "*A list of strings to pass to Mosaic as arguments.") *************** used instead of browse-url-new-window-p. *** 488,492 **** (null current-prefix-arg)))))) (let ((res ! (apply 'call-process "netscape" nil nil nil (append browse-url-netscape-arguments (if new-window '("-noraise")) --- 495,499 ---- (null current-prefix-arg)))))) (let ((res ! (apply 'call-process browse-url-netscape-program nil nil nil (append browse-url-netscape-arguments (if new-window '("-noraise")) *************** used instead of browse-url-new-window-p. *** 501,505 **** (progn ; Netscape not running - start it (message "Starting Netscape...") ! (apply 'start-process "netscape" nil "netscape" (append browse-url-netscape-arguments (list url)))))))) --- 508,512 ---- (progn ; Netscape not running - start it (message "Starting Netscape...") ! (apply 'start-process "netscape" nil browse-url-netscape-program (append browse-url-netscape-arguments (list url)))))))) *************** Default to the URL around or before poin *** 542,546 **** ;; Mosaic not running - start it (message "Starting Mosaic...") ! (apply 'start-process "xmosaic" nil "xmosaic" (append browse-url-mosaic-arguments (list url))) (message "Starting Mosaic...done")))) --- 549,553 ---- ;; Mosaic not running - start it (message "Starting Mosaic...") ! (apply 'start-process "xmosaic" nil browse-url-mosaic-program (append browse-url-mosaic-arguments (list url))) (message "Starting Mosaic...done")))) *************** Default to the URL around or before poin *** 585,588 **** --- 592,603 ---- (interactive (browse-url-interactive-arg "W3 URL: ")) (w3-fetch url)) + + (defun browse-url-choose-browser (argument) + "Decide which browser to use, then invoke it. + This is the default value of `browse-url-browser-function'." + (if (fboundp 'w3-fetch) + (setq browse-url-browser-function 'browse-url-w3) + (setq browse-url-browser-function 'browse-url-netscape)) + (funcall browse-url-browser-function argument)) (provide 'browse-url) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/cal-french.el emacs-19.32/lisp/cal-french.el *** emacs-19.31/lisp/cal-french.el Sun Jan 14 02:34:30 1996 --- emacs-19.32/lisp/cal-french.el Fri Jun 28 04:41:46 1996 *************** *** 30,37 **** ;; Technical details of the French Revolutionary calendar can be found in ! ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' ! ;; by E. M. Reingold, N. Dershowitz, and S. M. Clamen, ! ;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993), ! ;; pages 383-404. ;; Comments, corrections, and improvements should be sent to --- 30,36 ---- ;; Technical details of the French Revolutionary calendar can be found in ! ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' by ! ;; E. M. Reingold, N. Dershowitz, and S. M. Clamen, Software--Practice and ! ;; Experience, Volume 23, Number 4 (April, 1993), pages 383-404. ;; Comments, corrections, and improvements should be sent to *************** *** 45,54 **** (require 'calendar) (defconst french-calendar-epoch (calendar-absolute-from-gregorian '(9 22 1792)) "Absolute date of start of French Revolutionary calendar = September 22, 1792.") (defconst french-calendar-month-name-array ! ["Vende'miaire" "Brumaire" "Frimaire" "Nivo^se" "Pluvio^se" "Vento^se" ! "Germinal" "Flore'al" "Prairial" "Messidor" "Thermidor" "Fructidor"]) (defconst french-calendar-day-name-array --- 44,61 ---- (require 'calendar) + (defvar french-calendar-accents + (and (char-table-p standard-display-table) + (equal (aref standard-display-table 161) [161])) + "True if diacritical marks are available.") + (defconst french-calendar-epoch (calendar-absolute-from-gregorian '(9 22 1792)) "Absolute date of start of French Revolutionary calendar = September 22, 1792.") (defconst french-calendar-month-name-array ! (if french-calendar-accents ! ["Vendémiaire" "Brumaire" "Frimaire" "Nivôse" "Pluviôse" "Ventôse" ! "Germinal" "Floréal" "Prairial" "Messidor" "Thermidor" "Fructidor"] ! ["Vende'miaire" "Brumaire" "Frimaire" "Nivo^se" "Pluvio^se" "Vento^se" ! "Germinal" "Flore'al" "Prairial" "Messidor" "Thermidor" "Fructidor"])) (defconst french-calendar-day-name-array *************** *** 57,62 **** (defconst french-calendar-special-days-array ! ["de la Vertu" "du Genie" "du Labour" "de la Raison" "de la Re'compense" ! "de la Re'volution"]) (defun french-calendar-leap-year-p (year) --- 64,72 ---- (defconst french-calendar-special-days-array ! (if french-calendar-accents ! ["de la Vertu" "du Genie" "du Labour" "de la Raison" ! "de la Récompense" "de la Révolution"] ! ["de la Vertu" "du Genie" "du Labour" "de la Raison" "de la Re'compense" ! "de la Re'volution"])) (defun french-calendar-leap-year-p (year) *************** Defaults to today's date if DATE is not *** 144,155 **** (cond ((< y 1) "") ! ((= m 13) (format "Jour %s de l'Anne'e %d de la Re'volution" (aref french-calendar-special-days-array (1- d)) y)) ! (t (format "De'cade %s, %s de %s de l'Anne'e %d de la Re'volution" ! (make-string (1+ (/ (1- d) 10)) ?I) ! (aref french-calendar-day-name-array (% (1- d) 10)) ! (aref french-calendar-month-name-array (1- m)) ! y))))) (defun calendar-print-french-date () --- 154,170 ---- (cond ((< y 1) "") ! ((= m 13) (format (if french-calendar-accents ! "Jour %s de l'Année %d de la Révolution" ! "Jour %s de l'Anne'e %d de la Re'volution") (aref french-calendar-special-days-array (1- d)) y)) ! (t (format ! (if french-calendar-accents ! "Décade %s, %s de %s de l'Année %d de la Révolution" ! "De'cade %s, %s de %s de l'Anne'e %d de la Re'volution") ! (make-string (1+ (/ (1- d) 10)) ?I) ! (aref french-calendar-day-name-array (% (1- d) 10)) ! (aref french-calendar-month-name-array (1- m)) ! y))))) (defun calendar-print-french-date () *************** Echo French Revolutionary date unless NO *** 166,170 **** (interactive (let* ((year (calendar-read ! "Anne'e de la Re'volution (>0): " '(lambda (x) (> x 0)) (int-to-string --- 181,187 ---- (interactive (let* ((year (calendar-read ! (if french-calendar-accents ! "Année de la Révolution (>0): " ! "Anne'e de la Re'volution (>0): ") '(lambda (x) (> x 0)) (int-to-string *************** Echo French Revolutionary date unless NO *** 200,204 **** 1 (calendar-read ! "De'cade (1-3): " '(lambda (x) (memq x '(1 2 3)))))) (day (if (> month 12) --- 217,223 ---- 1 (calendar-read ! (if french-calendar-accents ! "Décade (1-3): " ! "De'cade (1-3): ") '(lambda (x) (memq x '(1 2 3)))))) (day (if (> month 12) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/cal-tex.el emacs-19.32/lisp/cal-tex.el *** emacs-19.31/lisp/cal-tex.el Wed Jan 24 10:57:21 1996 --- emacs-19.32/lisp/cal-tex.el Fri Jun 14 15:02:40 1996 *************** Optional parameter specifies number of y *** 301,310 **** (cal-tex-cmd "\\textwidth 3.25in") (cal-tex-cmd "\\textheight 6.5in") ! (cal-tex-cmd "\\oddsidemargin 1.6in") ! (cal-tex-cmd "\\evensidemargin 1.55in") (cal-tex-cmd "\\topmargin 0pt") (cal-tex-cmd "\\headheight -0.875in") (cal-tex-cmd "\\pagestyle{empty}") (cal-tex-b-document) (calendar-for-loop j from 1 to n do (insert (format "\\hfil {\\Large \\bf %s} \\hfil\\\\\n" year)) --- 301,312 ---- (cal-tex-cmd "\\textwidth 3.25in") (cal-tex-cmd "\\textheight 6.5in") ! (cal-tex-cmd "\\oddsidemargin 1.675in") ! (cal-tex-cmd "\\evensidemargin 1.675in") (cal-tex-cmd "\\topmargin 0pt") (cal-tex-cmd "\\headheight -0.875in") + (cal-tex-cmd "\\fboxsep 0.5mm") (cal-tex-cmd "\\pagestyle{empty}") (cal-tex-b-document) + (cal-tex-cmd "\\vspace*{0.25in}") (calendar-for-loop j from 1 to n do (insert (format "\\hfil {\\Large \\bf %s} \\hfil\\\\\n" year)) *************** Optional parameter specifies number of y *** 317,321 **** (insert (cal-tex-mini-calendar i year (calendar-month-name i) ! "1.05in" ".8in" "tiny"))) (insert "\\noindent\\fbox{\\January}\\fbox{\\February}\\fbox{\\March}\\\\ --- 319,323 ---- (insert (cal-tex-mini-calendar i year (calendar-month-name i) ! "1in" ".9in" "tiny" "0.6mm"))) (insert "\\noindent\\fbox{\\January}\\fbox{\\February}\\fbox{\\March}\\\\ *************** Optional parameter specifies number of y *** 327,333 **** (cal-tex-e-center) (setq year (1+ year)) ! (if (/= j n) ! (cal-tex-newpage) ! (cal-tex-end-document)) (run-hooks 'cal-tex-year-hook)) (run-hooks 'cal-tex-hook))) --- 329,336 ---- (cal-tex-e-center) (setq year (1+ year)) ! (if (= j n) ! (cal-tex-end-document) ! (cal-tex-newpage) ! (cal-tex-cmd "\\vspace*{0.25in}")) (run-hooks 'cal-tex-year-hook)) (run-hooks 'cal-tex-hook))) *************** Optional prefix argument specifies numbe *** 1276,1282 **** ;;; ! (defun cal-tex-mini-calendar (month year name width height &optional size) "Produce mini-calendar for MONTH, YEAR in macro NAME with WIDTH and HEIGHT. ! Optional SIZE gives the point size; scriptsize is the default," (let* ((blank-days;; at start of month (mod --- 1279,1286 ---- ;;; ! (defun cal-tex-mini-calendar (month year name width height &optional ptsize colsep) "Produce mini-calendar for MONTH, YEAR in macro NAME with WIDTH and HEIGHT. ! Optional PTSIZE gives the point ptsize; scriptsize is the default. Optional ! COLSEP gives the column separation; 1mm is the default." (let* ((blank-days;; at start of month (mod *************** Optional SIZE gives the point size; scri *** 1284,1301 **** calendar-week-start-day) 7)) ! (last (calendar-last-day-of-month month year)) (str (concat "\\def\\" name "{\\hbox to" width "{%\n" "\\vbox to" height "{%\n" "\\vfil \\hbox to" width "{%\n" "\\hfil\\" ! (if size size "scriptsize") "\\begin{tabular}" ! "{@{\\hspace{1mm}}r@{\\hspace{1mm}}r@{\\hspace{1mm}}r@{\\hspace{1mm}}" ! "r@{\\hspace{1mm}}r@{\\hspace{1mm}}r@{\\hspace{1mm}}r@{\\hspace{1mm}}}%\n" "\\multicolumn{7}{c}{" (calendar-month-name month) " " (int-to-string year) ! "}\\\\[0.5mm]\n"))) (calendar-for-loop i from 0 to 6 do (setq str (concat str --- 1288,1308 ---- calendar-week-start-day) 7)) ! (last (calendar-last-day-of-month month year)) ! (colsep (if colsep colsep "1mm")) (str (concat "\\def\\" name "{\\hbox to" width "{%\n" "\\vbox to" height "{%\n" "\\vfil \\hbox to" width "{%\n" "\\hfil\\" ! (if ptsize ptsize "scriptsize") "\\begin{tabular}" ! "{@{\\hspace{0mm}}r@{\\hspace{" colsep ! "}}r@{\\hspace{" colsep "}}r@{\\hspace{" colsep ! "}}r@{\\hspace{" colsep "}}r@{\\hspace{" colsep ! "}}r@{\\hspace{" colsep "}}r@{\\hspace{0mm}}}%\n" "\\multicolumn{7}{c}{" (calendar-month-name month) " " (int-to-string year) ! "}\\\\[1mm]\n"))) (calendar-for-loop i from 0 to 6 do (setq str (concat str *************** Optional SIZE gives the point size; scri *** 1305,1309 **** (if (/= i 6) " & " ! "\\\\[0.5mm]\n")))) (calendar-for-loop i from 1 to blank-days do (setq str (concat str " & "))) --- 1312,1316 ---- (if (/= i 6) " & " ! "\\\\[0.7mm]\n")))) (calendar-for-loop i from 1 to blank-days do (setq str (concat str " & "))) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/calendar.el emacs-19.32/lisp/calendar.el *** emacs-19.31/lisp/calendar.el Mon May 20 11:35:45 1996 --- emacs-19.32/lisp/calendar.el Mon Jun 3 01:05:50 1996 *************** *** 65,69 **** ;; cal-tex.el Calendars in LaTeX ;; cal-x.el X-windows dedicated frame functions ! ;; diary.el Diary functions ;; holidays.el Holiday functions ;; lunar.el Phases of the moon --- 65,69 ---- ;; cal-tex.el Calendars in LaTeX ;; cal-x.el X-windows dedicated frame functions ! ;; diary-lib.el Diary functions ;; holidays.el Holiday functions ;; lunar.el Phases of the moon diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/cmacexp.el emacs-19.32/lisp/cmacexp.el *** emacs-19.31/lisp/cmacexp.el Tue May 21 11:42:19 1996 --- emacs-19.32/lisp/cmacexp.el Fri Jun 7 18:59:28 1996 *************** *** 4,8 **** ;; Author: Francesco Potorti` ! ;; Version: $Id: cmacexp.el,v 1.25 1996/05/21 15:42:13 kwzh Exp $ ;; Adapted-By: ESR ;; Keywords: c --- 4,8 ---- ;; Author: Francesco Potorti` ! ;; Version: $Id: cmacexp.el,v 1.26 1996/06/07 22:59:27 rms Exp $ ;; Adapted-By: ESR ;; Keywords: c *************** *** 99,103 **** (defvar c-macro-preprocessor ;; Cannot rely on standard directory on MS-DOS to find CPP. ! (if (eq system-type 'ms-dos) "cpp -C" "/lib/cpp -C") "The preprocessor used by the cmacexp package. --- 99,109 ---- (defvar c-macro-preprocessor ;; Cannot rely on standard directory on MS-DOS to find CPP. ! (cond ((eq system-type 'ms-dos) "cpp -C") ! ;; Solaris has it in an unusual place. ! ((and (string-match "^[^-]*-[^-]*-\\(solaris\\|sunos5\\)" ! system-configuration) ! (file-exists-p "/opt/SUNWspro/SC3.0.1/bin/acomp")) ! "/opt/SUNWspro/SC3.0.1/bin/acomp -C -E") ! (t "/lib/cpp -C")) "The preprocessor used by the cmacexp package. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/comint.el emacs-19.32/lisp/comint.el *** emacs-19.31/lisp/comint.el Sun Mar 17 10:28:55 1996 --- emacs-19.32/lisp/comint.el Thu Aug 1 18:30:38 1996 *************** *** 1,5 **** ;;; comint.el --- general command interpreter in a window stuff ! ;; Copyright (C) 1988, 90, 92, 93, 94, 95 Free Software Foundation, Inc. ;; Author: Olin Shivers --- 1,5 ---- ;;; comint.el --- general command interpreter in a window stuff ! ;; Copyright (C) 1988, 90, 92, 93, 94, 95, 96 Free Software Foundation, Inc. ;; Author: Olin Shivers *************** *** 108,139 **** ;;============================================================================ ;; Comint mode buffer local variables: ! ;; comint-prompt-regexp - string comint-bol uses to match prompt ! ;; comint-delimiter-argument-list - list For delimiters and arguments ! ;; comint-last-input-start - marker Handy if inferior always echoes ! ;; comint-last-input-end - marker For comint-kill-output command ! ;; comint-input-ring-size - integer For the input history ! ;; comint-input-ring - ring mechanism ! ;; comint-input-ring-index - number ... ! ;; comint-input-autoexpand - symbol ... ! ;; comint-input-ignoredups - boolean ... ! ;; comint-last-input-match - string ... ! ;; comint-dynamic-complete-functions - hook For the completion mechanism ! ;; comint-completion-fignore - list ... ! ;; comint-file-name-quote-list - list ... ! ;; comint-get-old-input - function Hooks for specific ! ;; comint-input-filter-functions - hook process-in-a-buffer ! ;; comint-output-filter-functions - hook function modes. ! ;; comint-input-filter - function ... ! ;; comint-input-sender - function ... ! ;; comint-eol-on-send - boolean ... ! ;; comint-process-echoes - boolean ... ! ;; comint-scroll-to-bottom-on-input - symbol For scroll behavior ! ;; comint-scroll-to-bottom-on-output - symbol ... ! ;; comint-scroll-show-maximum-output - boolean... ;; ;; Comint mode non-buffer local variables: ! ;; comint-completion-addsuffix - boolean/cons For file name completion ! ;; comint-completion-autolist - boolean behavior ! ;; comint-completion-recexact - boolean ... (defvar comint-prompt-regexp "^" --- 108,140 ---- ;;============================================================================ ;; Comint mode buffer local variables: ! ;; comint-prompt-regexp string comint-bol uses to match prompt ! ;; comint-delimiter-argument-list list For delimiters and arguments ! ;; comint-last-input-start marker Handy if inferior always echoes ! ;; comint-last-input-end marker For comint-kill-output command ! ;; comint-input-ring-size integer For the input history ! ;; comint-input-ring ring mechanism ! ;; comint-input-ring-index number ... ! ;; comint-input-autoexpand symbol ... ! ;; comint-input-ignoredups boolean ... ! ;; comint-last-input-match string ... ! ;; comint-dynamic-complete-functions hook For the completion mechanism ! ;; comint-completion-fignore list ... ! ;; comint-file-name-chars string ... ! ;; comint-file-name-quote-list list ... ! ;; comint-get-old-input function Hooks for specific ! ;; comint-input-filter-functions hook process-in-a-buffer ! ;; comint-output-filter-functions hook function modes. ! ;; comint-input-filter function ... ! ;; comint-input-sender function ... ! ;; comint-eol-on-send boolean ... ! ;; comint-process-echoes boolean ... ! ;; comint-scroll-to-bottom-on-input symbol For scroll behavior ! ;; comint-scroll-to-bottom-on-output symbol ... ! ;; comint-scroll-show-maximum-output boolean ... ;; ;; Comint mode non-buffer local variables: ! ;; comint-completion-addsuffix boolean/cons For file name ! ;; comint-completion-autolist boolean completion behavior ! ;; comint-completion-recexact boolean ... (defvar comint-prompt-regexp "^" *************** This variable is buffer-local.") *** 263,267 **** "Functions to call after output is inserted into the buffer. One possible function is `comint-postoutput-scroll-to-bottom'. ! These functions get one argument, a string containing the text just inserted. This variable is buffer-local.") --- 264,271 ---- "Functions to call after output is inserted into the buffer. One possible function is `comint-postoutput-scroll-to-bottom'. ! These functions get one argument, a string containing the text as originally ! inserted. Note that this might not be the same as the buffer contents between ! `comint-last-output-start' and the buffer's `process-mark', if other filter ! functions have already modified the buffer. This variable is buffer-local.") *************** Entry to this mode runs the hooks on `co *** 394,397 **** --- 398,402 ---- (make-local-variable 'comint-exec-hook) (make-local-variable 'comint-process-echoes) + (make-local-variable 'comint-file-name-chars) (make-local-variable 'comint-file-name-quote-list) (run-hooks 'comint-mode-hook)) *************** Returns t if successful." *** 896,900 **** (interactive) (if (and comint-input-autoexpand ! (string-match "[!^]" (funcall comint-get-old-input)) (save-excursion (beginning-of-line) (looking-at comint-prompt-regexp))) --- 901,905 ---- (interactive) (if (and comint-input-autoexpand ! (string-match "!\\|^\\^" (funcall comint-get-old-input)) (save-excursion (beginning-of-line) (looking-at comint-prompt-regexp))) *************** Similarly for Soar, Scheme, etc." *** 1167,1175 **** (let ((copy (buffer-substring pmark (point)))) (delete-region pmark (point)) ! (insert input) copy)))) (if comint-process-echoes (delete-region pmark (point)) ! (insert ?\n)) (if (and (funcall comint-input-filter history) (or (null comint-input-ignoredups) --- 1172,1180 ---- (let ((copy (buffer-substring pmark (point)))) (delete-region pmark (point)) ! (insert-before-markers input) copy)))) (if comint-process-echoes (delete-region pmark (point)) ! (insert-before-markers ?\n)) (if (and (funcall comint-input-filter history) (or (null comint-input-ignoredups) *************** This function should be in the list `com *** 1281,1290 **** (if (and (< (point) (process-mark process)) (or (eq scroll t) (eq scroll 'all) ! ;; Maybe user wants point to jump to the end. (and (eq scroll 'this) (eq selected window)) (and (eq scroll 'others) (not (eq selected window))) ! ;; If point was at the end, keep it at the end. ! (>= (point) ! (- (process-mark process) (length string))))) (goto-char (process-mark process))) ;; Optionally scroll so that the text --- 1286,1294 ---- (if (and (< (point) (process-mark process)) (or (eq scroll t) (eq scroll 'all) ! ;; Maybe user wants point to jump to end. (and (eq scroll 'this) (eq selected window)) (and (eq scroll 'others) (not (eq selected window))) ! ;; If point was at the end, keep it at end. ! (>= (point) comint-last-output-start))) (goto-char (process-mark process))) ;; Optionally scroll so that the text *************** This function could be on `comint-output *** 1304,1308 **** (interactive) (save-excursion ! (goto-char (point-max)) (forward-line (- comint-buffer-maximum-size)) (beginning-of-line) --- 1308,1312 ---- (interactive) (save-excursion ! (goto-char (process-mark (get-buffer-process (current-buffer)))) (forward-line (- comint-buffer-maximum-size)) (beginning-of-line) *************** The string is sent using `comint-input-s *** 1440,1444 **** Security bug: your string can still be temporarily recovered with \\[view-lossage]." ! (interactive "P") ; Defeat snooping via C-x esc (let ((proc (get-buffer-process (current-buffer)))) (if (not proc) --- 1444,1448 ---- Security bug: your string can still be temporarily recovered with \\[view-lossage]." ! (interactive "P") ; Defeat snooping via C-x ESC ESC (let ((proc (get-buffer-process (current-buffer)))) (if (not proc) *************** This is used by comint's and shell's com *** 1824,1829 **** directory tracking functions.") (defvar comint-file-name-quote-list nil ! "List of characters to quote with `\' when in a file name. This is a good thing to set in mode hooks.") --- 1828,1841 ---- directory tracking functions.") + (defvar comint-file-name-chars + (if (memq system-type '(ms-dos windows-nt)) + "~/A-Za-z0-9_^$!#%&{}@`'.()-" + "~/A-Za-z0-9+@:_.$#%,={}-") + "String of characters valid in a file name. + + This is a good thing to set in mode hooks.") + (defvar comint-file-name-quote-list nil ! "List of characters to quote with `\\' when in a file name. This is a good thing to set in mode hooks.") *************** inside of a \"[...]\" (see `skip-chars-f *** 1855,1864 **** (match-string 0)))))) (defun comint-match-partial-filename () "Return the filename at point, or nil if non is found. Environment variables are substituted. See `comint-word'." ! (let ((filename (comint-word "~/A-Za-z0-9+@:_.$#%,={}-"))) ! (and filename (substitute-in-file-name (comint-unquote-filename filename))))) --- 1867,1894 ---- (match-string 0)))))) + (defun comint-substitute-in-file-name (filename) + "Return FILENAME with environment variables substituted. + Supports additional environment variable syntax of the command + interpreter (e.g., the percent notation of cmd.exe on NT)." + (let ((name (substitute-in-file-name filename))) + (if (memq system-type '(ms-dos windows-nt)) + (let (env-var-name + env-var-val) + (save-match-data + (while (string-match "%\\([^\\\\/]*\\)%" name) + (setq env-var-name + (substring name (match-beginning 1) (match-end 1))) + (setq env-var-val (if (getenv env-var-name) + (getenv env-var-name) + "")) + (setq name (replace-match env-var-val nil nil name)))))) + name)) (defun comint-match-partial-filename () "Return the filename at point, or nil if non is found. Environment variables are substituted. See `comint-word'." ! (let ((filename (comint-word comint-file-name-chars))) ! (and filename (comint-substitute-in-file-name ! (comint-unquote-filename filename))))) *************** Magic characters are those in `comint-fi *** 1881,1886 **** filename (save-match-data ! (while (string-match "\\\\\\(.\\)" filename) ! (setq filename (replace-match "\\1" nil nil filename))) filename))) --- 1911,1918 ---- filename (save-match-data ! (let ((i 0)) ! (while (string-match "\\\\\\(.\\)" filename i) ! (setq filename (replace-match "\\1" nil nil filename)) ! (setq i (+ 1 (match-beginning 0))))) filename))) *************** Returns t if successful." *** 1911,1925 **** (interactive) (if (comint-match-partial-filename) ! (prog2 (or (window-minibuffer-p (selected-window)) ! (message "Completing file name...")) ! (comint-dynamic-complete-as-filename)))) ! (defun comint-dynamic-complete-as-filename () "Dynamically complete at point as a filename. See `comint-dynamic-complete-filename'. Returns t if successful." ! (let* ((completion-ignore-case nil) (completion-ignored-extensions comint-completion-fignore) ! (file-name-handler-alist nil) (minibuffer-p (window-minibuffer-p (selected-window))) (success t) --- 1943,1962 ---- (interactive) (if (comint-match-partial-filename) ! (let ((directory-sep-char (if (memq system-type '(ms-dos windows-nt)) ! ?\\ ! ?/))) ! (prog2 (or (window-minibuffer-p (selected-window)) ! (message "Completing file name...")) ! (comint-dynamic-complete-as-filename))))) (defun comint-dynamic-complete-as-filename () "Dynamically complete at point as a filename. See `comint-dynamic-complete-filename'. Returns t if successful." ! (let* ((completion-ignore-case (memq system-type '(ms-dos windows-nt))) (completion-ignored-extensions comint-completion-fignore) ! ;; If we bind this, it breaks remote directory tracking in rlogin.el. ! ;; I think it was originally bound to solve file completion problems, ! ;; but subsequent changes may have made this unnecessary. sm. ! ;;(file-name-handler-alist nil) (minibuffer-p (window-minibuffer-p (selected-window))) (success t) *************** Returns `listed' if a completion listing *** 1993,1997 **** See also `comint-dynamic-complete-filename'." ! (let* ((completion-ignore-case nil) (suffix (cond ((not comint-completion-addsuffix) "") ((not (consp comint-completion-addsuffix)) " ") --- 2030,2034 ---- See also `comint-dynamic-complete-filename'." ! (let* ((completion-ignore-case (memq system-type '(ms-dos windows-nt))) (suffix (cond ((not comint-completion-addsuffix) "") ((not (consp comint-completion-addsuffix)) " ") *************** See also `comint-dynamic-complete-filena *** 2034,2039 **** "List in help buffer possible completions of the filename at point." (interactive) ! (let* ((completion-ignore-case nil) ! (file-name-handler-alist nil) (filename (or (comint-match-partial-filename) "")) (pathdir (file-name-directory filename)) --- 2071,2079 ---- "List in help buffer possible completions of the filename at point." (interactive) ! (let* ((completion-ignore-case (memq system-type '(ms-dos windows-nt))) ! ;; If we bind this, it breaks remote directory tracking in rlogin.el. ! ;; I think it was originally bound to solve file completion problems, ! ;; but subsequent changes may have made this unnecessary. sm. ! ;;(file-name-handler-alist nil) (filename (or (comint-match-partial-filename) "")) (pathdir (file-name-directory filename)) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/complete.el emacs-19.32/lisp/complete.el *** emacs-19.31/lisp/complete.el Mon May 20 17:03:04 1996 --- emacs-19.32/lisp/complete.el Sat Jul 27 23:21:15 1996 *************** Word-delimiters for the purposes of Part *** 179,183 **** (if (PC-was-meta-key) (minibuffer-complete) ! (PC-do-completion nil))) --- 179,197 ---- (if (PC-was-meta-key) (minibuffer-complete) ! ;; If the previous command was not this one, ! ;; never scroll, always retry completion. ! (or (eq last-command this-command) ! (setq minibuffer-scroll-window nil)) ! (let ((window minibuffer-scroll-window)) ! ;; If there's a fresh completion window with a live buffer, ! ;; and this command is repeated, scroll that window. ! (if (and window (window-buffer window) ! (buffer-name (window-buffer window))) ! (save-excursion ! (set-buffer (window-buffer window)) ! (if (pos-visible-in-window-p (point-max) window) ! (set-window-start window (point-min) nil) ! (scroll-other-window))) ! (PC-do-completion nil))))) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/completion.el emacs-19.32/lisp/completion.el *** emacs-19.31/lisp/completion.el Sat Apr 13 15:44:07 1996 --- emacs-19.32/lisp/completion.el Tue Jul 23 16:00:03 1996 *************** Used to decide whether to save completio *** 471,477 **** (defun cmpl-hours-since-origin () (let ((time (current-time))) ! (truncate ! (+ (* (/ (car time) 3600.0) (lsh 1 16)) ! (/ (nth 2 time) 3600.0))))) ;;--------------------------------------------------------------------------- --- 471,475 ---- (defun cmpl-hours-since-origin () (let ((time (current-time))) ! (floor (+ (* 65536.0 (nth 0 time)) (nth 1 time)) 3600))) ;;--------------------------------------------------------------------------- diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/custom.el emacs-19.32/lisp/custom.el *** emacs-19.31/lisp/custom.el Tue Mar 26 19:00:58 1996 --- emacs-19.32/lisp/custom.el Tue Jun 25 18:26:06 1996 *************** *** 69,81 **** ;;; Code: ;;; Compatibility: ! (or (fboundp 'buffer-substring-no-properties) ! ;; Introduced in Emacs 19.29. ! (defun buffer-substring-no-properties (beg end) ! "Return the text from BEG to END, without text properties, as a string." ! (let ((string (buffer-substring beg end))) ! (set-text-properties 0 (length string) nil string) ! string))) (or (fboundp 'add-to-list) --- 69,116 ---- ;;; Code: + (eval-when-compile + (require 'cl)) + ;;; Compatibility: ! (defun custom-xmas-add-text-properties (start end props &optional object) ! (add-text-properties start end props object) ! (put-text-property start end 'start-open t object) ! (put-text-property start end 'end-open t object)) ! ! (defun custom-xmas-put-text-property (start end prop value &optional object) ! (put-text-property start end prop value object) ! (put-text-property start end 'start-open t object) ! (put-text-property start end 'end-open t object)) ! ! (defun custom-xmas-extent-start-open () ! (map-extents (lambda (extent arg) ! (set-extent-property extent 'start-open t)) ! nil (point) (min (1+ (point)) (point-max)))) ! ! (if (string-match "XEmacs\\|Lucid" emacs-version) ! (progn ! (fset 'custom-add-text-properties 'custom-xmas-add-text-properties) ! (fset 'custom-put-text-property 'custom-xmas-put-text-property) ! (fset 'custom-extent-start-open 'custom-xmas-extent-start-open) ! (fset 'custom-set-text-properties ! (if (fboundp 'set-text-properties) ! 'set-text-properties)) ! (fset 'custom-buffer-substring-no-properties ! (if (fboundp 'buffer-substring-no-properties) ! 'buffer-substring-no-properties ! 'custom-xmas-buffer-substring-no-properties))) ! (fset 'custom-add-text-properties 'add-text-properties) ! (fset 'custom-put-text-property 'put-text-property) ! (fset 'custom-extent-start-open 'ignore) ! (fset 'custom-set-text-properties 'set-text-properties) ! (fset 'custom-buffer-substring-no-properties ! 'buffer-substring-no-properties)) ! ! (defun custom-xmas-buffer-substring-no-properties (beg end) ! "Return the text from BEG to END, without text properties, as a string." ! (let ((string (buffer-substring beg end))) ! (custom-set-text-properties 0 (length string) nil string) ! string)) (or (fboundp 'add-to-list) *************** STRING should be given if the last searc *** 172,187 **** (funcall 'set-face-underline-p 'underline t)))) ! (or (fboundp 'set-text-properties) ! ;; Missing in XEmacs 19.12. ! (defun set-text-properties (start end props &optional buffer) ! (if (or (null buffer) (bufferp buffer)) ! (if props ! (while props ! (put-text-property ! start end (car props) (nth 1 props) buffer) ! (setq props (nthcdr 2 props))) ! (remove-text-properties start end ()))))) ! (or (fboundp 'event-closest-point) ;; Missing in Emacs 19.29. (defun event-point (event) --- 207,220 ---- (funcall 'set-face-underline-p 'underline t)))) ! (defun custom-xmas-set-text-properties (start end props &optional buffer) ! (if (null buffer) ! (if props ! (while props ! (custom-put-text-property ! start end (car props) (nth 1 props) buffer) ! (setq props (nthcdr 2 props))) ! (remove-text-properties start end ())))) ! (or (fboundp 'event-point) ;; Missing in Emacs 19.29. (defun event-point (event) *************** into the buffer visible in the event's w *** 202,259 **** (defvar custom-field-active-face nil)) - (or (and (fboundp 'modify-face) (not (featurep 'face-lock))) - ;; Introduced in Emacs 19.29. Incompatible definition also introduced - ;; by face-lock.el version 3.00 and above for Emacs 19.28 and below. - ;; face-lock does not call modify-face, so we can safely redefine it. - (defun modify-face (face foreground background stipple - bold-p italic-p underline-p) - "Change the display attributes for face FACE. - FOREGROUND and BACKGROUND should be color strings or nil. - STIPPLE should be a stipple pattern name or nil. - BOLD-P, ITALIC-P, and UNDERLINE-P specify whether the face should be set bold, - in italic, and underlined, respectively. (Yes if non-nil.) - If called interactively, prompts for a face and face attributes." - (interactive - (let* ((completion-ignore-case t) - (face (symbol-name (read-face-name "Modify face: "))) - (colors (mapcar 'list x-colors)) - (stipples (mapcar 'list - (apply 'nconc - (mapcar 'directory-files - x-bitmap-file-path)))) - (foreground (modify-face-read-string - face (face-foreground (intern face)) - "foreground" colors)) - (background (modify-face-read-string - face (face-background (intern face)) - "background" colors)) - (stipple (modify-face-read-string - face (face-stipple (intern face)) - "stipple" stipples)) - (bold-p (y-or-n-p (concat "Set face " face " bold "))) - (italic-p (y-or-n-p (concat "Set face " face " italic "))) - (underline-p (y-or-n-p (concat "Set face " face " underline ")))) - (message "Face %s: %s" face - (mapconcat 'identity - (delq nil - (list (and foreground (concat (downcase foreground) " foreground")) - (and background (concat (downcase background) " background")) - (and stipple (concat (downcase stipple) " stipple")) - (and bold-p "bold") (and italic-p "italic") - (and underline-p "underline"))) ", ")) - (list (intern face) foreground background stipple - bold-p italic-p underline-p))) - (condition-case nil (set-face-foreground face foreground) (error nil)) - (condition-case nil (set-face-background face background) (error nil)) - (condition-case nil (set-face-stipple face stipple) (error nil)) - (if (string-match "XEmacs" emacs-version) - (progn - (funcall (if bold-p 'make-face-bold 'make-face-unbold) face) - (funcall (if italic-p 'make-face-italic 'make-face-unitalic) face)) - (funcall (if bold-p 'make-face-bold 'make-face-unbold) face nil t) - (funcall (if italic-p 'make-face-italic 'make-face-unitalic) face nil t)) - (set-face-underline-p face underline-p) - (and (interactive-p) (redraw-display)))) - ;; We can't easily check for a working intangible. (defconst intangible (if (and (boundp 'emacs-minor-version) --- 235,238 ---- *************** If called interactively, prompts for a f *** 282,288 **** ;; Put it in the Help menu, if possible. (if (string-match "XEmacs" emacs-version) ! ;; XEmacs (disabled because it doesn't work) ! (and current-menubar ! (add-menu-item '("Help") "Customize..." 'customize nil)) ;; Emacs 19.28 and earlier (global-set-key [ menu-bar help customize ] --- 261,268 ---- ;; Put it in the Help menu, if possible. (if (string-match "XEmacs" emacs-version) ! (if (featurep 'menubar) ! ;; XEmacs (disabled because it doesn't work) ! (and current-menubar ! (add-menu-item '("Help") "Customize..." 'customize t))) ;; Emacs 19.28 and earlier (global-set-key [ menu-bar help customize ] *************** If called interactively, prompts for a f *** 360,364 **** (defun custom-category-set (from to category) "Make text between FROM and TWO have category CATEGORY." ! (put-text-property from to 'category category))) ;;; External Data: --- 340,344 ---- (defun custom-category-set (from to category) "Make text between FROM and TWO have category CATEGORY." ! (custom-put-text-property from to 'category category))) ;;; External Data: *************** If called interactively, prompts for a f *** 420,424 **** ;; property and `custom-type-properties'. ! (defvar custom-file (convert-standard-filename "~/.custom.el") "Name of file with customization information.") --- 400,404 ---- ;; property and `custom-type-properties'. ! (defvar custom-file "~/.custom.el" "Name of file with customization information.") *************** If optional ORIGINAL is non-nil, conside *** 1081,1084 **** --- 1061,1065 ---- (data (vector repeat nil start end)) field) + (custom-extent-start-open) (insert-before-markers "\n") (backward-char 1) *************** If optional ORIGINAL is non-nil, conside *** 1310,1314 **** current) (if face-tag ! (put-text-property from (+ from (length (custom-tag custom))) 'face (funcall face-tag field value))) (if original --- 1291,1295 ---- current) (if face-tag ! (custom-put-text-property from (+ from (length (custom-tag custom))) 'face (funcall face-tag field value))) (if original *************** If optional ORIGINAL is non-nil, conside *** 1396,1402 **** (setq begin (point) found (custom-insert (custom-property custom 'none) nil)) ! (add-text-properties begin (point) ! (list rear-nonsticky t ! 'face custom-field-uninitialized-face))) (or original (custom-field-original-set found (custom-field-original field))) --- 1377,1384 ---- (setq begin (point) found (custom-insert (custom-property custom 'none) nil)) ! (custom-add-text-properties ! begin (point) ! (list rear-nonsticky t ! 'face custom-field-uninitialized-face))) (or original (custom-field-original-set found (custom-field-original field))) *************** If optional ORIGINAL is non-nil, conside *** 1484,1488 **** (defun custom-face-import (custom value) "Modify CUSTOM's VALUE to match internal expectations." ! (let ((name (symbol-name value))) (list (if (string-match "\ custom-face-\\(.*\\)-\\(.*\\)-\\(.*\\)-\\(.*\\)-\\(.*\\)-\\(.*\\)" --- 1466,1471 ---- (defun custom-face-import (custom value) "Modify CUSTOM's VALUE to match internal expectations." ! (let ((name (or (and (facep value) (symbol-name (face-name value))) ! (symbol-name value)))) (list (if (string-match "\ custom-face-\\(.*\\)-\\(.*\\)-\\(.*\\)-\\(.*\\)-\\(.*\\)-\\(.*\\)" *************** custom-face-\\(.*\\)-\\(.*\\)-\\(.*\\)-\ *** 1497,1503 **** value)))) ! (defun custom-face-lookup (fg bg stipple bold italic underline) ! "Lookup or create a face with specified attributes. ! FG BG STIPPLE BOLD ITALIC UNDERLINE" (let ((name (intern (format "custom-face-%s-%s-%s-%S-%S-%S" (or fg "default") --- 1480,1485 ---- value)))) ! (defun custom-face-lookup (&optional fg bg stipple bold italic underline) ! "Lookup or create a face with specified attributes." (let ((name (intern (format "custom-face-%s-%s-%s-%S-%S-%S" (or fg "default") *************** FG BG STIPPLE BOLD ITALIC UNDERLINE" *** 1508,1517 **** (fboundp 'make-face)) () ! (make-face name) ! (modify-face name ! (if (string-equal fg "default") nil fg) ! (if (string-equal bg "default") nil bg) ! (if (string-equal stipple "default") nil stipple) ! bold italic underline)) name)) --- 1490,1524 ---- (fboundp 'make-face)) () ! (copy-face 'default name) ! (when (and fg ! (not (string-equal fg "default"))) ! (condition-case () ! (set-face-foreground name fg) ! (error nil))) ! (when (and bg ! (not (string-equal bg "default"))) ! (condition-case () ! (set-face-background name bg) ! (error nil))) ! (when (and stipple ! (not (string-equal stipple "default")) ! (not (eq stipple 'custom:asis)) ! (fboundp 'set-face-stipple)) ! (set-face-stipple name stipple)) ! (when (and bold ! (not (eq bold 'custom:asis))) ! (condition-case () ! (make-face-bold name) ! (error nil))) ! (when (and italic ! (not (eq italic 'custom:asis))) ! (condition-case () ! (make-face-italic name) ! (error nil))) ! (when (and underline ! (not (eq underline 'custom:asis))) ! (condition-case () ! (set-face-underline-p name t) ! (error nil)))) name)) *************** FG BG STIPPLE BOLD ITALIC UNDERLINE" *** 1529,1533 **** (from (point))) (custom-text-insert (custom-tag custom)) ! (add-text-properties from (point) (list 'face face rear-nonsticky t)) --- 1536,1540 ---- (from (point))) (custom-text-insert (custom-tag custom)) ! (custom-add-text-properties from (point) (list 'face face rear-nonsticky t)) *************** FG BG STIPPLE BOLD ITALIC UNDERLINE" *** 1540,1544 **** (let ((from (custom-field-start field)) (custom (custom-field-custom field))) ! (put-text-property from (+ from (length (custom-tag custom))) 'face (custom-field-face field)))) --- 1547,1551 ---- (let ((from (custom-field-start field)) (custom (custom-field-custom field))) ! (custom-put-text-property from (+ from (length (custom-tag custom))) 'face (custom-field-face field)))) *************** If the optional argument SAVE is non-nil *** 1829,1835 **** (insert tag) (custom-category-set from (point) 'custom-button-properties) ! (put-text-property from (point) 'custom-tag field) (if data ! (add-text-properties from (point) (list 'custom-data data))))) (defun custom-documentation-insert (custom &rest ignore) --- 1836,1842 ---- (insert tag) (custom-category-set from (point) 'custom-button-properties) ! (custom-put-text-property from (point) 'custom-tag field) (if data ! (custom-add-text-properties from (point) (list 'custom-data data))))) (defun custom-documentation-insert (custom &rest ignore) *************** If the optional argument SAVE is non-nil *** 1850,1858 **** (let ((from (point))) (insert "`" (key-description (where-is-internal command nil t)) "'") ! (set-text-properties from (point) ! (list 'face custom-button-face ! mouse-face custom-mouse-face ! 'custom-jump t ;Make TAB jump over it. ! 'custom-tag command)) (custom-category-set from (point) 'custom-documentation-properties)) (custom-help-insert ": " (custom-first-line (documentation command)) "\n")) --- 1857,1867 ---- (let ((from (point))) (insert "`" (key-description (where-is-internal command nil t)) "'") ! (custom-set-text-properties from (point) ! (list 'face custom-button-face ! mouse-face custom-mouse-face ! 'custom-jump t ;Make TAB jump over it. ! 'custom-tag command ! 'start-open t ! 'end-open t)) (custom-category-set from (point) 'custom-documentation-properties)) (custom-help-insert ": " (custom-first-line (documentation command)) "\n")) *************** If the optional argument is non-nil, sho *** 2176,2190 **** (- (custom-width custom) (- (point) from))) (custom-field-move field from (point)) ! (set-text-properties from (point) (list 'custom-field field 'custom-tag field 'face (custom-field-face field) ! front-sticky t)))) (defun custom-field-read (field) ;; Read the screen content of FIELD. (custom-read (custom-field-custom field) ! (buffer-substring-no-properties (custom-field-start field) (custom-field-end field)))) --- 2185,2200 ---- (- (custom-width custom) (- (point) from))) (custom-field-move field from (point)) ! (custom-set-text-properties from (point) (list 'custom-field field 'custom-tag field 'face (custom-field-face field) ! 'start-open t ! 'end-open t)))) (defun custom-field-read (field) ;; Read the screen content of FIELD. (custom-read (custom-field-custom field) ! (custom-buffer-substring-no-properties (custom-field-start field) (custom-field-end field)))) *************** If the optional argument is non-nil, sho *** 2197,2201 **** (let ((before-change-functions nil) (after-change-functions nil)) ! (put-text-property (custom-field-start field) (custom-field-end field) 'face (custom-field-face field)))) --- 2207,2211 ---- (let ((before-change-functions nil) (after-change-functions nil)) ! (custom-put-text-property (custom-field-start field) (custom-field-end field) 'face (custom-field-face field)))) *************** If the optional argument is non-nil, sho *** 2215,2219 **** (if (< pos (point)) (goto-char pos)))) ! (put-text-property start end 'face custom-field-active-face))) (defun custom-field-resize (field) --- 2225,2229 ---- (if (< pos (point)) (goto-char pos)))) ! (custom-put-text-property start end 'face custom-field-active-face))) (defun custom-field-resize (field) *************** If the optional argument is non-nil, sho *** 2297,2301 **** (custom-assert '(prog1 field (setq custom-field-was nil))) ;; Prevent mixing fields properties. ! (put-text-property begin end 'custom-field field) ;; Update the field after modification. (if (eq (custom-field-property begin) field) --- 2307,2311 ---- (custom-assert '(prog1 field (setq custom-field-was nil))) ;; Prevent mixing fields properties. ! (custom-put-text-property begin end 'custom-field field) ;; Update the field after modification. (if (eq (custom-field-property begin) field) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/dabbrev.el emacs-19.32/lisp/dabbrev.el *** emacs-19.31/lisp/dabbrev.el Wed Jan 24 14:01:08 1996 --- emacs-19.32/lisp/dabbrev.el Thu Aug 1 00:52:58 1996 *************** if there is a suitable one already." *** 339,343 **** ;; Find all expansion (let ((completion-list ! (dabbrev--find-all-expansions abbrev ignore-case-p))) ;; Make an obarray with all expansions (setq my-obarray (make-vector (length completion-list) 0)) --- 339,344 ---- ;; Find all expansion (let ((completion-list ! (dabbrev--find-all-expansions abbrev ignore-case-p)) ! (completion-ignore-case ignore-case-p)) ;; Make an obarray with all expansions (setq my-obarray (make-vector (length completion-list) 0)) *************** See also `dabbrev-abbrev-char-regexp' an *** 438,442 **** (marker-position dabbrev--last-abbrev-location) (= (point) (1+ dabbrev--last-abbrev-location))) ! (progn ;; The "abbrev" to expand is just the space. (setq abbrev " ") --- 439,450 ---- (marker-position dabbrev--last-abbrev-location) (= (point) (1+ dabbrev--last-abbrev-location))) ! (let* ((prev-expansion ! (buffer-substring-no-properties ! (- dabbrev--last-abbrev-location (length dabbrev--last-expansion)) ! dabbrev--last-abbrev-location)) ! ;; If the previous expansion was upcased. ! ;; upcase this one too. ! (upcase-it ! (equal prev-expansion (upcase prev-expansion)))) ;; The "abbrev" to expand is just the space. (setq abbrev " ") *************** See also `dabbrev-abbrev-char-regexp' an *** 459,462 **** --- 467,472 ---- (buffer-substring dabbrev--last-expansion-location (point))) + (if upcase-it + (setq expansion (upcase expansion))) ;; Record the end of this expansion, in case we repeat this. *************** See also `dabbrev-abbrev-char-regexp' an *** 748,751 **** --- 758,774 ---- (setq old (concat abbrev (or old ""))) (setq expansion (concat abbrev expansion))) + ;; If the given abbrev is mixed case and its case pattern + ;; matches the start of the expansion, + ;; copy the expansion's case + ;; instead of downcasing all the rest. + (if (and (string= abbrev + (substring expansion 0 (length abbrev))) + (not (string= abbrev (downcase abbrev))) + (not (string= abbrev (upcase abbrev)))) + (setq use-case-replace nil)) + (if (equal abbrev " ") + (setq use-case-replace nil)) + (if use-case-replace + (setq expansion (downcase expansion))) (if old (save-excursion *************** See also `dabbrev-abbrev-char-regexp' an *** 829,833 **** (cons found-string dabbrev--last-table)) (if (and ignore-case (eval dabbrev-case-replace)) ! (downcase result) result))))))) --- 852,856 ---- (cons found-string dabbrev--last-table)) (if (and ignore-case (eval dabbrev-case-replace)) ! result result))))))) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/debug.el emacs-19.32/lisp/debug.el *** emacs-19.31/lisp/debug.el Sun Jan 14 02:34:30 1996 --- emacs-19.32/lisp/debug.el Wed May 29 13:14:43 1996 *************** first will be printed into the backtrace *** 78,82 **** (debugger-step-after-exit nil) ;; Don't keep reading from an executing kbd macro! ! (executing-macro nil) ;; Save the outer values of these vars for the `e' command ;; before we replace the values. --- 78,82 ---- (debugger-step-after-exit nil) ;; Don't keep reading from an executing kbd macro! ! (executing-kbd-macro nil) ;; Save the outer values of these vars for the `e' command ;; before we replace the values. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/decipher.el emacs-19.32/lisp/decipher.el *** emacs-19.31/lisp/decipher.el Fri Feb 23 18:50:19 1996 --- emacs-19.32/lisp/decipher.el Sat Jul 20 13:27:18 1996 *************** *** 19,24 **** ;; ;; 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. ;;; Quick Start: --- 19,25 ---- ;; ;; 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, Inc., 59 Temple Place - Suite 330, ! ;; Boston, MA 02111-1307, USA. ;;; Quick Start: diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/dired.el emacs-19.32/lisp/dired.el *** emacs-19.31/lisp/dired.el Fri Apr 5 14:10:39 1996 --- emacs-19.32/lisp/dired.el Tue Jun 4 13:51:20 1996 *************** may contain even `F', `b', `i' and `s'. *** 50,54 **** (defvar dired-chown-program (if (memq system-type '(hpux dgux usg-unix-v irix linux lignux)) ! "chown" "/etc/chown") "Name of chown command (usually `chown' or `/etc/chown').") --- 50,57 ---- (defvar dired-chown-program (if (memq system-type '(hpux dgux usg-unix-v irix linux lignux)) ! "chown" ! (if (file-exists-p "/usr/sbin/chown") ! "/usr/sbin/chown" ! "/etc/chown")) "Name of chown command (usually `chown' or `/etc/chown').") diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/dos-fns.el emacs-19.32/lisp/dos-fns.el *** emacs-19.31/lisp/dos-fns.el Sat May 18 16:07:57 1996 --- emacs-19.32/lisp/dos-fns.el Mon Jun 10 17:17:50 1996 *************** against the file name, and TYPE is nil f *** 193,208 **** (int86 33 regs)) - ;; Extra stub to functions in src/frame.c - ;; Emacs aborts during dump if the following don't have a doc string. - (defun window-frame (window) - "Return the frame that WINDOW resides on." - (selected-frame)) - (defun raise-frame (frame) - "Raise FRAME to the top of the desktop." - nil) - (defun select-frame (frame &optional no-enter) - "Select FRAME for input events." - (selected-frame)) - ;; Support for printing under MS-DOS, see lpr.el and ps-print.el. (defvar dos-printer "PRN" --- 193,196 ---- diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/easymenu.el emacs-19.32/lisp/easymenu.el *** emacs-19.31/lisp/easymenu.el Sun Jan 14 02:34:30 1996 --- emacs-19.32/lisp/easymenu.el Thu Jun 13 16:45:53 1996 *************** is a list of menu items, as above." *** 175,179 **** (if (symbolp callback) (fset command callback) ! (fset command (list 'lambda () '(interactive) callback))))) (if (null command) ;; Handle inactive strings specially--allow any number --- 175,180 ---- (if (symbolp callback) (fset command callback) ! (fset command (list 'lambda () '(interactive) callback))) ! (put command 'menu-alias t))) (if (null command) ;; Handle inactive strings specially--allow any number diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/edebug.el emacs-19.32/lisp/edebug.el *** emacs-19.31/lisp/edebug.el Wed Mar 20 08:31:01 1996 --- emacs-19.32/lisp/edebug.el Wed Jul 24 12:36:53 1996 *************** *** 9,13 **** ;; edebug|Daniel LaLiberte|liberte@cs.uiuc.edu ;; |A source level debugger for Emacs Lisp. ! ;; |$Date: 1996/03/20 13:30:16 $|$Revision: 3.6 $|~/modes/edebug.el| ;; This file is part of GNU Emacs. --- 9,13 ---- ;; edebug|Daniel LaLiberte|liberte@cs.uiuc.edu ;; |A source level debugger for Emacs Lisp. ! ;; |$Date: 1996/07/24 16:36:41 $|$Revision: 3.8 $|~/modes/edebug.el| ;; This file is part of GNU Emacs. *************** *** 86,90 **** (defconst edebug-version ! (let ((raw-version "$Revision: 3.6 $")) (substring raw-version (string-match "[0-9.]*" raw-version) (match-end 0)))) --- 86,90 ---- (defconst edebug-version ! (let ((raw-version "$Revision: 3.8 $")) (substring raw-version (string-match "[0-9.]*" raw-version) (match-end 0)))) *************** error is signaled again." *** 2264,2268 **** ;; Save the outside value of executing macro. (here??) ! (edebug-outside-executing-macro executing-macro) (edebug-outside-pre-command-hook pre-command-hook) (edebug-outside-post-command-hook post-command-hook) --- 2264,2268 ---- ;; Save the outside value of executing macro. (here??) ! (edebug-outside-executing-macro executing-kbd-macro) (edebug-outside-pre-command-hook pre-command-hook) (edebug-outside-post-command-hook post-command-hook) *************** error is signaled again." *** 2272,2277 **** ;; within edebug unless edebug-continue-kbd-macro is ;; non-nil. Again, local binding may not be best. ! (executing-macro ! (if edebug-continue-kbd-macro executing-macro)) ;; Disable command hooks. This is essential when --- 2272,2277 ---- ;; within edebug unless edebug-continue-kbd-macro is ;; non-nil. Again, local binding may not be best. ! (executing-kbd-macro ! (if edebug-continue-kbd-macro executing-kbd-macro)) ;; Disable command hooks. This is essential when *************** error is signaled again." *** 2291,2295 **** (fset 'signal (symbol-function 'edebug-original-signal)))) ;; Reset global variables in case outside value was changed. ! (setq executing-macro edebug-outside-executing-macro pre-command-hook edebug-outside-pre-command-hook post-command-hook edebug-outside-post-command-hook --- 2291,2295 ---- (fset 'signal (symbol-function 'edebug-original-signal)))) ;; Reset global variables in case outside value was changed. ! (setq executing-kbd-macro edebug-outside-executing-macro pre-command-hook edebug-outside-pre-command-hook post-command-hook edebug-outside-post-command-hook *************** Return the result of the last expression *** 3566,3570 **** (standard-input edebug-outside-standard-input) ! (executing-macro edebug-outside-executing-macro) (defining-kbd-macro edebug-outside-defining-kbd-macro) (pre-command-hook edebug-outside-pre-command-hook) --- 3566,3570 ---- (standard-input edebug-outside-standard-input) ! (executing-kbd-macro edebug-outside-executing-macro) (defining-kbd-macro edebug-outside-defining-kbd-macro) (pre-command-hook edebug-outside-pre-command-hook) *************** Return the result of the last expression *** 3608,3612 **** edebug-outside-standard-input standard-input ! edebug-outside-executing-macro executing-macro edebug-outside-defining-kbd-macro defining-kbd-macro edebug-outside-pre-command-hook pre-command-hook --- 3608,3612 ---- edebug-outside-standard-input standard-input ! edebug-outside-executing-macro executing-kbd-macro edebug-outside-defining-kbd-macro defining-kbd-macro edebug-outside-pre-command-hook pre-command-hook *************** You must include newlines in FMT to brea *** 4141,4145 **** ;; "saving: point = %s window-start = %s" ;; (point) (window-start)) ! (let* ((selected-window (selected-window)) (buffer (get-buffer-create buf-name)) buf-window) --- 4141,4146 ---- ;; "saving: point = %s window-start = %s" ;; (point) (window-start)) ! (let* ((oldbuf (current-buffer)) ! (selected-window (selected-window)) (buffer (get-buffer-create buf-name)) buf-window) *************** You must include newlines in FMT to brea *** 4157,4161 **** ;; (edebug-sit-for 0) (bury-buffer buffer) ! (select-window selected-window)) buf-name) --- 4158,4163 ---- ;; (edebug-sit-for 0) (bury-buffer buffer) ! (select-window selected-window) ! (set-buffer oldbuf)) buf-name) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ediff-diff.el emacs-19.32/lisp/ediff-diff.el *** emacs-19.31/lisp/ediff-diff.el Mon May 6 19:16:44 1996 --- emacs-19.32/lisp/ediff-diff.el Fri Jun 21 23:20:35 1996 *************** *** 1,5 **** ;;; ediff-diff.el --- diff-related utilities ! ;; Copyright (C) 1994, 1995 Free Software Foundation, Inc. ;; Author: Michael Kifer --- 1,5 ---- ;;; ediff-diff.el --- diff-related utilities ! ;; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. ;; Author: Michael Kifer *************** *** 29,33 **** (defvar ediff-shell (cond ((eq system-type 'emx) "cmd") ; OS/2 ! ((eq system-type 'ms-dos) shell-file-name) ; no standard name on MS-DOS ((memq system-type '(vax-vms axp-vms)) "*dcl*") ; VMS (t "sh")) ; UNIX --- 29,34 ---- (defvar ediff-shell (cond ((eq system-type 'emx) "cmd") ; OS/2 ! ((memq system-type '(ms-dos windows-nt windows-95)) ! shell-file-name) ; no standard name on MS-DOS ((memq system-type '(vax-vms axp-vms)) "*dcl*") ; VMS (t "sh")) ; UNIX *************** Must produce output compatible with Unix *** 64,68 **** "*Options to pass to `ediff-diff3-program'.") (defvar ediff-diff3-ok-lines-regexp ! "^\\([1-3]:\\|====\\| \\|.*Warning *:\\|.*No newline\\|.*missing newline\\)" "*Regexp that matches normal output lines from `ediff-diff3-program'. Lines that do not match are assumed to be error messages.") --- 65,69 ---- "*Options to pass to `ediff-diff3-program'.") (defvar ediff-diff3-ok-lines-regexp ! "^\\([1-3]:\\|====\\| \\|.*Warning *:\\|.*No newline\\|.*missing newline\\|^\C-m$\\)" "*Regexp that matches normal output lines from `ediff-diff3-program'. Lines that do not match are assumed to be error messages.") *************** Lines that do not match are assumed to b *** 72,87 **** (ediff-defvar-local ediff-diff-status "" "") - ;; Support for patch - - (defvar ediff-patch-program "patch" - "*Name of the program that applies patches.") - (defvar ediff-patch-options "" - "*Options to pass to ediff-patch-program.") - - ;; The buffer of the patch file. - (defvar ediff-patch-buf nil) - ;; The buffer where patch would display its diagnostics. - (defvar ediff-patch-diagnostics nil) - ;;; Fine differences --- 73,76 ---- *************** This variable can be set either in .emac *** 100,110 **** Use `setq-default' if setting it in .emacs") ! (ediff-defvar-local ediff-auto-refine-limit 700 ! "Auto-refine only those regions that are smaller than this number of bytes.") ;;; General (defvar ediff-diff-ok-lines-regexp ! "^\\([0-9,]+[acd][0-9,]+$\\|[<>] \\|---\\|.*Warning *:\\|.*No newline\\|.*missing newline\\)" "Regexp that matches normal output lines from `ediff-diff-program'. This is mostly lifted from Emerge, except that Ediff also considers --- 89,99 ---- Use `setq-default' if setting it in .emacs") ! (ediff-defvar-local ediff-auto-refine-limit 1400 ! "*Auto-refine only the regions of this size \(in bytes\) or less.") ;;; General (defvar ediff-diff-ok-lines-regexp ! "^\\([0-9,]+[acd][0-9,]+$\\|[<>] \\|---\\|.*Warning *:\\|.*No +newline\\|.*missing +newline\\|^\C-m$\\)" "Regexp that matches normal output lines from `ediff-diff-program'. This is mostly lifted from Emerge, except that Ediff also considers *************** one optional arguments, diff-number to r *** 139,155 **** ;;; (if ediff-xemacs-p (setq synchronize-minibuffers t)) (or (ediff-buffer-live-p ediff-diff-buffer) (setq ediff-diff-buffer (get-buffer-create (ediff-unique-buffer-name "*ediff-diff" "*")))) ! ! (message "Computing differences ...") ! (ediff-exec-process ediff-diff-program ediff-diff-buffer 'synchronize ! ediff-diff-options file-A file-B) ! (ediff-prepare-error-list ediff-diff-ok-lines-regexp ediff-diff-buffer) - ;;(message "Computing differences ... done") (ediff-convert-diffs-to-overlays (ediff-extract-diffs ediff-diff-buffer ediff-word-mode ediff-narrow-bounds))) ;; If file-A/B/C is nil, do 2-way comparison with the non-nil buffers --- 128,171 ---- ;;; (if ediff-xemacs-p (setq synchronize-minibuffers t)) + ;; create, if it doesn't exist (or (ediff-buffer-live-p ediff-diff-buffer) (setq ediff-diff-buffer (get-buffer-create (ediff-unique-buffer-name "*ediff-diff" "*")))) ! (ediff-make-diff2-buffer ediff-diff-buffer file-A file-B) (ediff-prepare-error-list ediff-diff-ok-lines-regexp ediff-diff-buffer) (ediff-convert-diffs-to-overlays (ediff-extract-diffs ediff-diff-buffer ediff-word-mode ediff-narrow-bounds))) + + ;; Run the diff program on FILE1 and FILE2 and put the output in DIFF-BUFFER + ;; Return the size of DIFF-BUFFER + (defun ediff-make-diff2-buffer (diff-buffer file1 file2) + (cond ((< (ediff-file-size file1) 0) + (message "Can't diff remote files: %s" + (ediff-abbreviate-file-name file1)) + (sit-for 2) + ;; 1 is an error exit code + 1) + ((< (ediff-file-size file2) 0) + (message "Can't diff remote file: %s" + (ediff-abbreviate-file-name file2)) + (sit-for 2) + (message "") + ;; 1 is an error exit code + 1) + (t (message "Computing differences between %s and %s ..." + (file-name-nondirectory file1) + (file-name-nondirectory file2)) + ;; this erases the diff buffer automatically + (ediff-exec-process ediff-diff-program + diff-buffer + 'synchronize + ediff-diff-options file1 file2) + ;;(message "Computing differences ... done") + (message "") + (ediff-eval-in-buffer diff-buffer + (buffer-size))))) + + ;; If file-A/B/C is nil, do 2-way comparison with the non-nil buffers *************** one optional arguments, diff-number to r *** 501,505 **** (if (< ediff-number-of-differences 1) ! (error "Sorry, it is not my job to munch identical variants...")) (if ediff-word-mode --- 517,521 ---- (if (< ediff-number-of-differences 1) ! (error ediff-NO-DIFFERENCES)) (if ediff-word-mode *************** one optional arguments, diff-number to r *** 525,529 **** ;; don't compute fine diffs if diff vector exists (if (ediff-no-fine-diffs-p n) ! (ediff-message-if-verbose "Only white-space differences in region %d" (1+ n)))) ;; If one of the regions is empty (or 2 in 3way comparison) --- 541,546 ---- ;; don't compute fine diffs if diff vector exists (if (ediff-no-fine-diffs-p n) ! ;;(ediff-message-if-verbose ! (message "Only white-space differences in region %d" (1+ n)))) ;; If one of the regions is empty (or 2 in 3way comparison) *************** one optional arguments, diff-number to r *** 549,555 **** (empty-C 'C))) ) ! ;; if all regions happen to be whitespace, indicate this (if (and whitespace-A whitespace-B whitespace-C) (ediff-mark-diff-as-space-only n t) (ediff-mark-diff-as-space-only n nil))) ;; don't compute fine diffs for this region --- 566,575 ---- (empty-C 'C))) ) ! ;; if all regions happen to be whitespace (if (and whitespace-A whitespace-B whitespace-C) + ;; mark as space only (ediff-mark-diff-as-space-only n t) + ;; if some regions are white and others don't, then mark as + ;; non-white-space-only (ediff-mark-diff-as-space-only n nil))) ;; don't compute fine diffs for this region *************** one optional arguments, diff-number to r *** 558,562 **** (memq ediff-auto-refine '(off nix)) (ediff-message-if-verbose ! "Region %d exceeds auto-refine limit. `%s' force-refines" (1+ n) (substitute-command-keys --- 578,582 ---- (memq ediff-auto-refine '(off nix)) (ediff-message-if-verbose ! "Region %d exceeds auto-refine limit. Type `%s' to refine" (1+ n) (substitute-command-keys *************** one optional arguments, diff-number to r *** 606,612 **** (ediff-setup-fine-diff-regions file-A nil file-C n)) ((and ediff-3way-job ! (or whitespace-C ! (and ediff-merge-job ! (ediff-looks-like-combined-merge n)))) (ediff-setup-fine-diff-regions file-A file-B nil n)) (t --- 626,632 ---- (ediff-setup-fine-diff-regions file-A nil file-C n)) ((and ediff-3way-job ! ;; In merge-jobs, whitespace-C is t, since ! ;; ediff-empty-diff-region-p returns t in this case ! whitespace-C) (ediff-setup-fine-diff-regions file-A file-B nil n)) (t *************** one optional arguments, diff-number to r *** 615,623 **** (setq cumulative-fine-diff-length (+ (length (ediff-get-fine-diff-vector n 'A)) ! (length (ediff-get-fine-diff-vector n 'B)) ! (if file-C ! (length ! (ediff-get-fine-diff-vector n 'C)) ! 0))) (cond ((or --- 635,643 ---- (setq cumulative-fine-diff-length (+ (length (ediff-get-fine-diff-vector n 'A)) ! (length (ediff-get-fine-diff-vector n 'B)) ! ;; in merge jobs, the merge buffer is never refined ! (if (and file-C (not ediff-merge-job)) ! (length (ediff-get-fine-diff-vector n 'C)) ! 0))) (cond ((or *************** one optional arguments, diff-number to r *** 633,637 **** "Only white-space differences in region %d" (1+ n))) ((eq cumulative-fine-diff-length 0) ! (ediff-mark-diff-as-space-only n nil) (ediff-message-if-verbose "Only white-space differences in region %d %s" --- 653,657 ---- "Only white-space differences in region %d" (1+ n))) ((eq cumulative-fine-diff-length 0) ! (ediff-mark-diff-as-space-only n t) (ediff-message-if-verbose "Only white-space differences in region %d %s" *************** one optional arguments, diff-number to r *** 848,852 **** (beginning-of-line 2) (let ((agreement (buffer-substring (match-beginning 1) (match-end 1)))) ! ;; if the A and B files are the same and not 3way-comparison, ;; ignore the difference (if (or three-way-comp (not (string-equal agreement "3"))) --- 868,872 ---- (beginning-of-line 2) (let ((agreement (buffer-substring (match-beginning 1) (match-end 1)))) ! ;; if the files A and B are the same and not 3way-comparison, ;; ignore the difference (if (or three-way-comp (not (string-equal agreement "3"))) *************** argument to `skip-chars-forward'." *** 1164,1167 **** --- 1184,1192 ---- (point)))) + + ;;; Local Variables: + ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun) + ;;; eval: (put 'ediff-eval-in-buffer 'lisp-indent-hook 1) + ;;; End: (provide 'ediff-diff) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ediff-hook.el emacs-19.32/lisp/ediff-hook.el *** emacs-19.31/lisp/ediff-hook.el Fri Feb 16 01:28:45 1996 --- emacs-19.32/lisp/ediff-hook.el Fri Jun 21 21:43:36 1996 *************** *** 1,5 **** ;;; ediff-hook.el --- setup for Ediff's menus and autoloads ! ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Michael Kifer --- 1,5 ---- ;;; ediff-hook.el --- setup for Ediff's menus and autoloads ! ;; Copyright (C) 1995, 1996 Free Software Foundation, Inc. ;; Author: Michael Kifer *************** *** 26,33 **** ;;; These must be placed in menu-bar.el in Emacs ;; - ;; (define-key menu-bar-tools-menu [ediff-doc] - ;; '("Ediff Manual..." . ediff-documentation)) - ;; (define-key menu-bar-tools-menu [eregistry] - ;; '("List Ediff Sessions..." . ediff-show-registry)) ;; (define-key menu-bar-tools-menu [epatch] ;; '("Apply Patch" . menu-bar-epatch-menu)) --- 26,29 ---- *************** *** 37,40 **** --- 33,41 ---- ;; '("Compare" . menu-bar-ediff-menu)) + ;; Compiler pacifier + (defvar ediff-menu) + (defvar ediff-merge-menu) + (defvar epatch-menu) + ;; end pacifier (defun ediff-xemacs-init-menus () *************** *** 49,58 **** (add-menu-button '("Tools") - ["List Ediff Sessions..." ediff-show-registry t] "OO-Browser...") - (add-menu-button - '("Tools") - ["Ediff Manual..." ediff-documentation t] "OO-Browser...") - (add-menu-button - '("Tools") ["-------" nil nil] "OO-Browser...") ))) --- 50,53 ---- *************** *** 79,82 **** --- 74,80 ---- ["Regions Word-by-word..." ediff-regions-wordwise t] ["Regions Line-by-line..." ediff-regions-linewise t] + "---" + ["List Ediff Sessions..." ediff-show-registry t] + ["Ediff Manual..." ediff-documentation t] )) (defvar ediff-merge-menu *************** *** 98,101 **** --- 96,102 ---- ["Directory Revisions with Ancestor..." ediff-merge-directory-revisions-with-ancestor t] + "---" + ["List Ediff Sessions..." ediff-show-registry t] + ["Ediff Manual..." ediff-documentation t] )) (defvar epatch-menu *************** *** 103,106 **** --- 104,110 ---- ["To a file..." ediff-patch-file t] ["To a buffer..." ediff-patch-buffer t] + "---" + ["List Ediff Sessions..." ediff-show-registry t] + ["Ediff Manual..." ediff-documentation t] )) *************** *** 123,126 **** --- 127,135 ---- ;; define ediff-menu + (define-key menu-bar-ediff-menu [ediff-doc] + '("Ediff Manual..." . ediff-documentation)) + (define-key menu-bar-ediff-menu [eregistry] + '("List Ediff Sessions..." . ediff-show-registry)) + (define-key menu-bar-ediff-menu [separator-ediff-manual] '("--")) (define-key menu-bar-ediff-menu [window] '("This Window and Next Window" . compare-windows)) *************** *** 155,158 **** --- 164,173 ---- ;; define merge menu + (define-key menu-bar-ediff-merge-menu [ediff-doc2] + '("Ediff Manual..." . ediff-documentation)) + (define-key menu-bar-ediff-merge-menu [eregistry2] + '("List Ediff Sessions..." . ediff-show-registry)) + (define-key + menu-bar-ediff-merge-menu [separator-ediff-merge-manual] '("--")) (define-key menu-bar-ediff-merge-menu [ediff-merge-dir-revisions-with-ancestor] *************** *** 188,191 **** --- 203,211 ---- ;; define epatch menu + (define-key menu-bar-epatch-menu [ediff-doc3] + '("Ediff Manual..." . ediff-documentation)) + (define-key menu-bar-epatch-menu [eregistry3] + '("List Ediff Sessions..." . ediff-show-registry)) + (define-key menu-bar-epatch-menu [separator-epatch] '("--")) (define-key menu-bar-epatch-menu [ediff-patch-buffer] '("To a Buffer..." . ediff-patch-buffer)) *************** *** 203,209 **** --- 223,231 ---- (autoload 'ediff-files "ediff" "Compare two files" t) (autoload 'ediff-buffers "ediff" "Compare two bufers" t) + (autoload 'ebuffers "ediff" "Compare two bufers" t) (autoload 'ediff3 "ediff" "Compare three files" t) (autoload 'ediff-files3 "ediff" "Compare three files" t) (autoload 'ediff-buffers3 "ediff" "Compare three bufers" t) + (autoload 'ebuffers3 "ediff" "Compare three bufers" t) (autoload 'ediff-revision "ediff" "Compare versions of a file" t) *************** *** 211,274 **** ;; compare regions and windows (autoload 'ediff-windows-wordwise ! "ediff" "Compare two windows word-by-word" t) (autoload 'ediff-regions-wordwise ! "ediff" "Compare two regions word-by-word" t) (autoload 'ediff-windows-linewise ! "ediff" "Compare two windows line-by-line" t) (autoload 'ediff-regions-linewise ! "ediff" "Compare two regions line-by-line" t) ;; patch ! (autoload 'ediff-patch-file "ediff" "Patch a file" t) ! (autoload 'epatch "ediff" "Patch a file" t) ! (autoload 'ediff-patch-buffer "ediff" "Patch a buffer") ! (autoload 'epatch-buffer "ediff" "Patch a buffer" t) ;; merge ! (autoload 'ediff-merge "ediff" "Merge two files" t) ! (autoload 'ediff-merge-files "ediff" "Merge two files" t) (autoload 'ediff-merge-files-with-ancestor ! "ediff" "Merge two files using a third file as an ancestor" t) ! (autoload 'ediff-merge-buffers "ediff" "Merge two buffers" t) (autoload 'ediff-merge-buffers-with-ancestor ! "ediff" "Merge two buffers using a third buffer as an ancestor" t) ! (autoload 'ediff-merge-revisions "ediff" "Merge two versions of a file" t) (autoload 'ediff-merge-revisions-with-ancestor ! "ediff" "Merge two versions of a file" t) ;; compare directories ! (autoload 'edirs "ediff" "Compare files in two directories" t) ! (autoload 'ediff-directories "ediff" "Compare files in two directories" t) ! (autoload 'edirs3 "ediff" "Compare files in three directories" t) ! (autoload 'ediff-directories3 "ediff" "Compare files in three directories" t) (autoload 'edir-revisions ! "ediff" "Compare two versions of a file" t) (autoload 'ediff-directory-revisions ! "ediff" "Compare two versions of a file" t) ;; merge directories ! (autoload 'edirs-merge "ediff" "Merge files in two directories" t) (autoload 'ediff-merge-directories ! "ediff" "Merge files in two directories" t) (autoload 'edirs-merge-with-ancestor "ediff" ! "Merge files in two directories using files in a third dir as ancestors" t) (autoload 'ediff-merge-directories-with-ancestor "ediff" ! "Merge files in two directories using files in a third dir as ancestors" t) (autoload 'edir-merge-revisions ! "ediff" "Merge versions of files in a directory" t) (autoload 'ediff-merge-directory-revisions ! "ediff" "Merge versions of files in a directory" t) (autoload 'ediff-merge-directory-revisions-with-ancestor "ediff" ! "Merge versions of files in a directory using other versions as ancestors" t) (autoload 'edir-merge-revisions-with-ancestor "ediff" ! "Merge versions of files in a directory using other versions as ancestors" t) --- 233,299 ---- ;; compare regions and windows (autoload 'ediff-windows-wordwise ! "ediff" "Compare two windows word-by-word." t) (autoload 'ediff-regions-wordwise ! "ediff" "Compare two regions word-by-word." t) (autoload 'ediff-windows-linewise ! "ediff" "Compare two windows line-by-line." t) (autoload 'ediff-regions-linewise ! "ediff" "Compare two regions line-by-line." t) ;; patch ! (autoload 'ediff-patch-file "ediff" "Patch a file." t) ! (autoload 'epatch "ediff" "Patch a file." t) ! (autoload 'ediff-patch-buffer "ediff" "Patch a buffer.") ! (autoload 'epatch-buffer "ediff" "Patch a buffer." t) ;; merge ! (autoload 'ediff-merge "ediff" "Merge two files." t) ! (autoload 'ediff-merge-files "ediff" "Merge two files." t) (autoload 'ediff-merge-files-with-ancestor ! "ediff" "Merge two files using a third file as an ancestor." t) ! (autoload 'ediff-merge-buffers "ediff" "Merge two buffers." t) (autoload 'ediff-merge-buffers-with-ancestor ! "ediff" "Merge two buffers using a third buffer as an ancestor." t) ! (autoload 'ediff-merge-revisions "ediff" "Merge two versions of a file." t) (autoload 'ediff-merge-revisions-with-ancestor ! "ediff" "Merge two versions of a file." t) ;; compare directories ! (autoload 'edirs "ediff" "Compare files in two directories." t) ! (autoload 'ediff-directories "ediff" "Compare files in two directories." t) ! (autoload 'edirs3 "ediff" "Compare files in three directories." t) ! (autoload ! 'ediff-directories3 "ediff" "Compare files in three directories." t) (autoload 'edir-revisions ! "ediff" "Compare two versions of a file." t) (autoload 'ediff-directory-revisions ! "ediff" "Compare two versions of a file." t) ;; merge directories ! (autoload 'edirs-merge "ediff" "Merge files in two directories." t) (autoload 'ediff-merge-directories ! "ediff" "Merge files in two directories." t) (autoload 'edirs-merge-with-ancestor "ediff" ! "Merge files in two directories using files in a third dir as ancestors." ! t) (autoload 'ediff-merge-directories-with-ancestor "ediff" ! "Merge files in two directories using files in a third dir as ancestors." ! t) (autoload 'edir-merge-revisions ! "ediff" "Merge versions of files in a directory." t) (autoload 'ediff-merge-directory-revisions ! "ediff" "Merge versions of files in a directory." t) (autoload 'ediff-merge-directory-revisions-with-ancestor "ediff" ! "Merge versions of files in a directory using other versions as ancestors." t) (autoload 'edir-merge-revisions-with-ancestor "ediff" ! "Merge versions of files in a directory using other versions as ancestors." t) *************** *** 276,284 **** (autoload 'ediff-show-registry "ediff-meta" ! "Display the registry of active Ediff sessions" t) (autoload 'ediff-version "ediff" ! "Show Ediff's version and last modification date" t) ) ; if purify-flag --- 301,313 ---- (autoload 'ediff-show-registry "ediff-meta" ! "Display the registry of active Ediff sessions." ! t) ! (autoload 'ediff-documentation ! "ediff" ! "Display Ediff's manual." t) (autoload 'ediff-version "ediff" ! "Show Ediff's version and last modification date." t) ) ; if purify-flag diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ediff-init.el emacs-19.32/lisp/ediff-init.el *** emacs-19.31/lisp/ediff-init.el Fri Feb 16 01:28:47 1996 --- emacs-19.32/lisp/ediff-init.el Fri Jun 21 21:51:49 1996 *************** *** 1,5 **** ;;; ediff-init.el --- Macros, variables, and defsubsts used by Ediff ! ;; Copyright (C) 1994, 1995 Free Software Foundation, Inc. ;; Author: Michael Kifer --- 1,5 ---- ;;; ediff-init.el --- Macros, variables, and defsubsts used by Ediff ! ;; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. ;; Author: Michael Kifer *************** *** 24,31 **** --- 24,48 ---- ;;; Code: + ;; Start compiler pacifier + (defvar ediff-metajob-name) + (defvar ediff-meta-buffer) + (defvar pm-color-alist) + (defvar ediff-grab-mouse) + (defvar ediff-mouse-pixel-position) + (defvar ediff-mouse-pixel-threshold) + (defvar ediff-whitespace) + (defvar ediff-multiframe) + ;; end pacifier + ;; Is it XEmacs? (defconst ediff-xemacs-p (string-match "XEmacs" emacs-version)) ;; Is it Emacs? (defconst ediff-emacs-p (not ediff-xemacs-p)) + + (defvar ediff-force-faces nil + "If t, Ediff will think that it is running on a display that supports faces. + This is provided as a temporary relief for users of face-capable displays + that Ediff doesn't know about.") + ;; Are we running as a window application or on a TTY? (defsubst ediff-device-type () *************** *** 33,36 **** --- 50,54 ---- window-system (device-type (selected-device)))) + ;; in XEmacs: device-type is tty on tty and stream in batch. (defun ediff-window-display-p () *************** *** 46,49 **** --- 64,96 ---- (ediff-xemacs-p (memq (ediff-device-type) '(tty pc))))) + + ;; Defines SYMBOL as an advertised local variable. + ;; Performs a defvar, then executes `make-variable-buffer-local' on + ;; the variable. Also sets the `permanent-local' property, + ;; so that `kill-all-local-variables' (called by major-mode setting + ;; commands) won't destroy Ediff control variables. + ;; + ;; Plagiarised from `emerge-defvar-local' for XEmacs. + (defmacro ediff-defvar-local (var value doc) + (` (progn + (defvar (, var) (, value) (, doc)) + (make-variable-buffer-local '(, var)) + (put '(, var) 'permanent-local t)))) + + + + ;; Variables that control each Ediff session---local to the control buffer. + + ;; Mode variables + ;; The buffer in which the A variant is stored. + (ediff-defvar-local ediff-buffer-A nil "") + ;; The buffer in which the B variant is stored. + (ediff-defvar-local ediff-buffer-B nil "") + ;; The buffer in which the C variant is stored. + (ediff-defvar-local ediff-buffer-C nil "") + ;; Ancestor buffer + (ediff-defvar-local ediff-ancestor-buffer nil "") + ;; The control buffer of ediff. + (ediff-defvar-local ediff-control-buffer nil "") ;;; Macros *************** *** 131,148 **** (ediff-get-difference (, n) (, buf-type))))) - - ;; Defines SYMBOL as an advertised local variable. - ;; Performs a defvar, then executes `make-variable-buffer-local' on - ;; the variable. Also sets the `permanent-local' property, - ;; so that `kill-all-local-variables' (called by major-mode setting - ;; commands) won't destroy Ediff control variables. - ;; - ;; Plagiarised from `emerge-defvar-local' for XEmacs. - (defmacro ediff-defvar-local (var value doc) - (` (progn - (defvar (, var) (, value) (, doc)) - (make-variable-buffer-local '(, var)) - (put '(, var) 'permanent-local t)))) - ;; Macro to switch to BUFFER, evaluate FORMS, returns to original buffer. ;; Differs from `save-excursion' in that it doesn't save the point and mark. --- 178,181 ---- *************** *** 230,236 **** ediff-merge-directory-revisions ediff-merge-directory-revisions-with-ancestor))) ! ;; metajob involving only one directory ! (defsubst ediff-dir1-metajob (&optional metajob) (or (ediff-revision-metajob metajob) ;; add more here )) --- 263,274 ---- ediff-merge-directory-revisions ediff-merge-directory-revisions-with-ancestor))) ! (defsubst ediff-patch-metajob (&optional metajob) ! (memq (or metajob ediff-metajob-name) ! '(ediff-multifile-patch))) ! ;; metajob involving only one group of files, such as multipatch or directory ! ;; revision ! (defsubst ediff-one-filegroup-metajob (&optional metajob) (or (ediff-revision-metajob metajob) + (ediff-patch-metajob metajob) ;; add more here )) *************** the value of this variable and the varia *** 432,436 **** "You have killed a vital Ediff buffer---you must leave Ediff now!") (defconst ediff-NO-DIFFERENCES ! "Sorry, it is not my job to munch identical variants...") ;; Selective browsing --- 470,477 ---- "You have killed a vital Ediff buffer---you must leave Ediff now!") (defconst ediff-NO-DIFFERENCES ! "Sorry, comparison of identical variants is not what I am made for...") ! (defconst ediff-BAD-DIFF-NUMBER ! ;; %S stands for this-command, %d - diff number, %d - max diff ! "%S: Bad diff region number, %d. Valid numbers are 1 to %d") ;; Selective browsing *************** This variable can be set either in .emac *** 512,521 **** Use `setq-default' if setting it in .emacs") - (defvar ediff-force-faces nil - "If t, Ediff will think that it is running on a display that supports faces. - This is provided as a temporary relief for users of face-capable displays - that Ediff doesn't know about.") - - ;; this indicates that diff regions are word-size, so fine diffs are ;; permanently nixed; used in ediff-windows-wordwise and ediff-regions-wordwise --- 553,556 ---- *************** ediff-toggle-hilit. Use `setq-default' t *** 561,580 **** (ediff-defvar-local ediff-highlighting-style nil "") - - ;; Variables that control each Ediff session. They are local to the - ;; control buffer. - - ;; Mode variables - ;; The buffer in which the A variant is stored. - (ediff-defvar-local ediff-buffer-A nil "") - ;; The buffer in which the B variant is stored. - (ediff-defvar-local ediff-buffer-B nil "") - ;; The buffer in which the C variant is stored. - (ediff-defvar-local ediff-buffer-C nil "") - ;; Ancestor buffer - (ediff-defvar-local ediff-ancestor-buffer nil "") - ;; The control buffer of ediff. - (ediff-defvar-local ediff-control-buffer nil "") - ;; The suffix of the control buffer name. --- 596,599 ---- *************** appropriate symbol: `rcs', `pcl-cvs', or *** 798,813 **** (face (ediff-overlay-get extent 'face)) (diff-num (ediff-overlay-get extent 'ediff-diff-num)) ! face-help help-msg) ;; This happens only for refinement overlays (setq face-help (and face (get face 'ediff-help-echo))) ! (setq help-msg ! (cond ((and is-current diff-num) ; current diff region ! (format "Difference region %S -- current" (1+ diff-num))) ! (face-help) ; refinement of current diff region ! (diff-num ; non-current ! (format "Difference region %S -- non-current" (1+ diff-num))) ! (t ""))))) ; none (defun ediff-set-face (ground face color) --- 817,832 ---- (face (ediff-overlay-get extent 'face)) (diff-num (ediff-overlay-get extent 'ediff-diff-num)) ! face-help) ;; This happens only for refinement overlays (setq face-help (and face (get face 'ediff-help-echo))) ! (cond ((and is-current diff-num) ; current diff region ! (format "Difference region %S -- current" (1+ diff-num))) ! (face-help) ; refinement of current diff region ! (diff-num ; non-current ! (format "Difference region %S -- non-current" (1+ diff-num))) ! (t "")) ; none ! )) (defun ediff-set-face (ground face color) *************** More precisely, a regexp to match any on *** 1354,1358 **** (if ediff-emacs-p (overlay-buffer overl) ! (and (extent-live-p overl) (extent-buffer overl)))) ;; like overlay-get in Emacs. In XEmacs, returns nil if the extent is --- 1373,1377 ---- (if ediff-emacs-p (overlay-buffer overl) ! (and (extent-live-p overl) (extent-object overl)))) ;; like overlay-get in Emacs. In XEmacs, returns nil if the extent is *************** More precisely, a regexp to match any on *** 1482,1485 **** --- 1501,1517 ---- (if ediff-verbose-p (apply 'message string args))) + + (defun ediff-file-attributes (filename attr-number) + (let ((handler (find-file-name-handler filename 'find-file-noselect))) + (if (and handler (string-match "ange-ftp" (format "%S" handler))) + -1 + (nth attr-number (file-attributes filename))))) + (defsubst ediff-file-size (filename) + (ediff-file-attributes filename 7)) + (defsubst ediff-file-modtime (filename) + (ediff-file-attributes filename 5)) + + + diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ediff-merg.el emacs-19.32/lisp/ediff-merg.el *** emacs-19.31/lisp/ediff-merg.el Fri Feb 16 01:28:50 1996 --- emacs-19.32/lisp/ediff-merg.el Fri Jun 21 21:52:50 1996 *************** *** 1,5 **** ;;; ediff-merg.el --- merging utilities ! ;; Copyright (C) 1994, 1995 Free Software Foundation, Inc. ;; Author: Michael Kifer --- 1,5 ---- ;;; ediff-merg.el --- merging utilities ! ;; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. ;; Author: Michael Kifer *************** *** 26,29 **** --- 26,30 ---- (require 'ediff-init) + (defvar ediff-default-variant 'combined "*The variant to be used as a default for buffer C in merging. *************** skiped over. Nil means show all regions. *** 115,121 **** (if (< diff-num 0) (setq diff-num 0)) (let ((n diff-num) ! (default-state-of-merge (format "%S" ediff-default-variant)) do-not-copy state-of-merge) (while (< n ediff-number-of-differences) (if (= (mod n 10) 0) (message "%s buffers A & B into C ... region %d of %d" --- 116,123 ---- (if (< diff-num 0) (setq diff-num 0)) (let ((n diff-num) ! ;;(default-state-of-merge (format "%S" ediff-default-variant)) do-not-copy state-of-merge) (while (< n ediff-number-of-differences) + (setq do-not-copy nil) ; reset after each cycle (if (= (mod n 10) 0) (message "%s buffers A & B into C ... region %d of %d" *************** skiped over. Nil means show all regions. *** 131,137 **** (reg-C (ediff-get-region-contents n 'C ediff-control-buffer))) ! ;;; was edited since first set by default (if (or (and (string= state-of-merge "default-A") ! (not (string= reg-A reg-C))) ;; was edited since first set by default (and (string= state-of-merge "default-B") --- 133,139 ---- (reg-C (ediff-get-region-contents n 'C ediff-control-buffer))) ! ;; if region was edited since it was first set by default (if (or (and (string= state-of-merge "default-A") ! (not (string= reg-A reg-C))) ;; was edited since first set by default (and (string= state-of-merge "default-B") diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ediff-mult.el emacs-19.32/lisp/ediff-mult.el *** emacs-19.31/lisp/ediff-mult.el Fri Feb 16 01:28:52 1996 --- emacs-19.32/lisp/ediff-mult.el Fri Jun 21 21:54:21 1996 *************** *** 1,5 **** ;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff ! ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Michael Kifer --- 1,5 ---- ;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff ! ;; Copyright (C) 1995, 1996 Free Software Foundation, Inc. ;; Author: Michael Kifer *************** *** 24,30 **** ;;; Commentary: ! ;; Users are strongly encouraged to add functionality to this file. ! ;; In particular, epatch needs to be enhanced to work with multi-file ! ;; patches. The present file contains all the infrastructure needed for that. ;; ;; Generally, to to implement a new multisession capability within Ediff, --- 24,29 ---- ;;; Commentary: ! ;; Users are encouraged to add functionality to this file. ! ;; The present file contains all the infrastructure needed for that. ;; ;; Generally, to to implement a new multisession capability within Ediff, *************** *** 38,51 **** ;; directly or after a small modification. ;; 2. What action to take when the user clicks button 2 or types v,e, or ! ;; RET. See ediff-dir-action. ;; 3. Provide a list of pairs or triples of file names (or buffers, ;; depending on the particular Ediff operation you want to invoke) ;; in the following format: ! ;; ((obj1 obj2 [optional obj3]) (...) ...) ;; Actually, the format of this list is pretty much up to the ! ;; developer. The only thing is that it must be a list of lists. ;; Also, keep in mind that the function ediff-prepare-meta-buffer ! ;; (which see) prepends nil in front of each list (i.e., the above list ! ;; will become ((nil obj1 obj2 ...) (nil ...) ...). ;; Ediff expects that your function (in 2 above) will arrange to ;; replace this prepended nil (via setcar) with the actual ediff --- 37,57 ---- ;; directly or after a small modification. ;; 2. What action to take when the user clicks button 2 or types v,e, or ! ;; RET. See ediff-filegroup-action. ;; 3. Provide a list of pairs or triples of file names (or buffers, ;; depending on the particular Ediff operation you want to invoke) ;; in the following format: ! ;; (descriptor (obj1 obj2 obj3) (...) ...) ;; Actually, the format of this list is pretty much up to the ! ;; developer. The only thing is that it must be a list of lists, ! ;; and the first list must describe the meta session, and subsequent ! ;; elements must describe individual sessions. ! ;; This descriptor must be a list of two, three, or four elements (nil ! ;; or string). The function ediff-redraw-registry-buffer displays the ! ;; second through last of these in the registry buffer. ;; Also, keep in mind that the function ediff-prepare-meta-buffer ! ;; (which see) prepends the session group buffer to the descriptor and ! ;; nil in front of each subsequent list (i.e., the above list ! ;; will become ! ;; ((meta-buf descriptor) (nil obj1 obj2 obj3) (nil ...) ...) ;; Ediff expects that your function (in 2 above) will arrange to ;; replace this prepended nil (via setcar) with the actual ediff *************** *** 53,57 **** ;; This is arranged through internal startup hooks that can be passed ;; to any of Ediff major entries (such as ediff-files, epatch, etc.). ! ;; See how this is done in ediff-dir-action. ;; 4. Write a function that makes a call to ediff-prepare-meta-buffer ;; passing all this info. --- 59,70 ---- ;; This is arranged through internal startup hooks that can be passed ;; to any of Ediff major entries (such as ediff-files, epatch, etc.). ! ;; See how this is done in ediff-filegroup-action. ! ;; ! ;; Session descriptions are of the form (obj1 obj2 obj3), which ! ;; describe objects relevant to the session. Usually they are names of ! ;; files, but sometimes they may be other things. For instance, obj3 is ! ;; nil for jobs that involve only two files. For patch jobs, obj2 and ! ;; obj3 are markers that specify the patch corresponding to the file ! ;; (whose name is obj1). ;; 4. Write a function that makes a call to ediff-prepare-meta-buffer ;; passing all this info. *************** *** 65,75 **** ;; ediff-directories-internal. ;; ! ;; In case of multifile patching, the easiest thing is to first apply the patch ! ;; and then find out which files were patched (using the algorithm utilized by ! ;; Unix patch and by parsing the patch file). The procedure ediff-patch-file ! ;; works for single-file patches only. However, it can deal with remote and ! ;; compressed files. Check out ediff-patch-file for details. ! ;; ! ;; Another useful addition here could be session groups selected by patterns ;; (which are different in each directory). For instance, one may want to ;; compare files of the form abc{something}.c to files old{something}.d --- 78,82 ---- ;; ediff-directories-internal. ;; ! ;; A useful addition here could be session groups selected by patterns ;; (which are different in each directory). For instance, one may want to ;; compare files of the form abc{something}.c to files old{something}.d *************** *** 80,84 **** ;; up appropriate files. It will also require a generalization of the functions ;; that do the layout of the meta- and differences buffers and of ! ;; ediff-dir-action. ;;; Code: --- 87,91 ---- ;; up appropriate files. It will also require a generalization of the functions ;; that do the layout of the meta- and differences buffers and of ! ;; ediff-filegroup-action. ;;; Code: *************** *** 96,104 **** Useful commands: button2, `v', RET over a session line: start that Ediff session ! `M' in any session invoked from here: bring back this buffer `R':\tdisplay the registry of active Ediff sessions ! `h':\tmark session for hiding; with prefix arg--unmark `x':\thide marked sessions; with prefix arg--unhide hidden sessions ! `m':\tmark session for non-hiding operation; with prefix arg--unmark SPC:\tnext session DEL:\tprevious session --- 103,111 ---- Useful commands: button2, `v', RET over a session line: start that Ediff session ! `M':\tin any session invoked from here, brings back this group panel `R':\tdisplay the registry of active Ediff sessions ! `h':\tmark session for hiding (toggle) `x':\thide marked sessions; with prefix arg--unhide hidden sessions ! `m':\tmark session for a non-hiding operation (toggle) SPC:\tnext session DEL:\tprevious session *************** directories.") *** 114,123 **** ;; Variable specifying the action to take when the use invokes ediff in the ! ;; meta buffer. This is usually ediff-registry-action or ediff-dir-action (ediff-defvar-local ediff-meta-action-function nil "") ;; Tells ediff-update-meta-buffer how to redraw it (ediff-defvar-local ediff-meta-redraw-function nil "") ! ;; Tells ediff-dir-action and similar procedures how to invoke Ediff for the ! ;; sessions in a given session group (ediff-defvar-local ediff-session-action-function nil "") --- 121,130 ---- ;; Variable specifying the action to take when the use invokes ediff in the ! ;; meta buffer. This is usually ediff-registry-action or ediff-filegroup-action (ediff-defvar-local ediff-meta-action-function nil "") ;; Tells ediff-update-meta-buffer how to redraw it (ediff-defvar-local ediff-meta-redraw-function nil "") ! ;; Tells ediff-filegroup-action and similar procedures how to invoke Ediff for ! ;; the sessions in a given session group (ediff-defvar-local ediff-session-action-function nil "") *************** directories.") *** 131,135 **** ;; This has the form ((ctl-buf file1 file2) (stl-buf file1 file2) ...) ! ;; If ctl-buf is nil, the file-pare wasn't processed yet. If it is ;; killed-buffer object, the file pair has been processed. If it is a live ;; buffer, this means ediff is still working on the pair --- 138,142 ---- ;; This has the form ((ctl-buf file1 file2) (stl-buf file1 file2) ...) ! ;; If ctl-buf is nil, the file-pair wasn't processed yet. If it is ;; killed-buffer object, the file pair has been processed. If it is a live ;; buffer, this means ediff is still working on the pair *************** ediff-directories, is run.") *** 154,163 **** "*Hooks run just after a session group buffer is shown.") ! ;;; API (defun ediff-get-group-buffer (meta-list) (nth 0 (car meta-list))) (defun ediff-get-group-regexp (meta-list) (nth 1 (car meta-list))) (defun ediff-get-group-objA (meta-list) (nth 2 (car meta-list))) --- 161,175 ---- "*Hooks run just after a session group buffer is shown.") ! ;; buffer holding the multi-file patch. local to the meta buffer ! (ediff-defvar-local ediff-meta-patchbufer nil "") ! ! ;;; API for ediff-meta-list + ;; group buffer/regexp (defun ediff-get-group-buffer (meta-list) (nth 0 (car meta-list))) (defun ediff-get-group-regexp (meta-list) (nth 1 (car meta-list))) + ;; group objects (defun ediff-get-group-objA (meta-list) (nth 2 (car meta-list))) *************** ediff-directories, is run.") *** 166,173 **** --- 178,189 ---- (defun ediff-get-group-objC (meta-list) (nth 4 (car meta-list))) + ;; session buffer (defun ediff-get-session-buffer (elt) (nth 0 elt)) (defun ediff-get-session-status (elt) (nth 1 elt)) + (defun ediff-set-session-status (session-info new-status) + (setcar (cdr session-info) new-status)) + ;; session objects (defun ediff-get-session-objA (elt) (nth 2 elt)) *************** ediff-directories, is run.") *** 176,181 **** (defun ediff-get-session-objC (elt) (nth 4 elt)) ! (defun ediff-set-session-status (session-info new-status) ! (setcar (cdr session-info) new-status)) ;; set up the keymap in the meta buffer --- 192,206 ---- (defun ediff-get-session-objC (elt) (nth 4 elt)) ! (defun ediff-get-session-objA-name (elt) ! (car (nth 2 elt))) ! (defun ediff-get-session-objB-name (elt) ! (car (nth 3 elt))) ! (defun ediff-get-session-objC-name (elt) ! (car (nth 4 elt))) ! ;; equality indicators ! (defsubst ediff-get-file-eqstatus (elt) ! (nth 1 elt)) ! (defsubst ediff-set-file-eqstatus (elt value) ! (setcar (cdr elt) value)) ;; set up the keymap in the meta buffer *************** ediff-directories, is run.") *** 192,195 **** --- 217,222 ---- (define-key ediff-meta-buffer-map [delete] 'ediff-previous-meta-item) (define-key ediff-meta-buffer-map [backspace] 'ediff-previous-meta-item) + (or (ediff-one-filegroup-metajob) + (define-key ediff-meta-buffer-map "=" 'ediff-meta-mark-equal-files)) (if ediff-no-emacs-help-in-control-buffer (define-key ediff-meta-buffer-map "\C-h" 'ediff-previous-meta-item)) *************** Moves in circular fashion. With numeric *** 254,258 **** (if pos (goto-char pos)) (if (eq ediff-metajob-name 'ediff-registry) ! (if (search-forward "*Ediff" nil t) (skip-chars-backward "a-zA-Z*")) (if (> (skip-chars-forward "-+?H* \t0-9") 0) --- 281,286 ---- (if pos (goto-char pos)) (if (eq ediff-metajob-name 'ediff-registry) ! (if (and (ediff-get-meta-info (current-buffer) pos 'noerror) ! (search-forward "*Ediff" nil t)) (skip-chars-backward "a-zA-Z*")) (if (> (skip-chars-forward "-+?H* \t0-9") 0) *************** Moves in circular fashion. With numeric *** 279,286 **** (if pos (goto-char pos)) (if (eq ediff-metajob-name 'ediff-registry) ! (if (search-forward "*Ediff" nil t) (skip-chars-backward "a-zA-Z*")) (if (> (skip-chars-forward "-+?H* \t0-9") 0) ! (backward-char 1))))) --- 307,316 ---- (if pos (goto-char pos)) (if (eq ediff-metajob-name 'ediff-registry) ! (if (and (ediff-get-meta-info (current-buffer) pos 'noerror) ! (search-forward "*Ediff" nil t)) (skip-chars-backward "a-zA-Z*")) (if (> (skip-chars-forward "-+?H* \t0-9") 0) ! (backward-char 1))) ! )) *************** Moves in circular fashion. With numeric *** 471,483 **** ediff-meta-buffer-map "M" 'ediff-show-meta-buff-from-registry)) ;; initialize the meta list -- don't do this for registry we prepend ! ;; '(nil nil) nil to all elts of meta-list, except the first. The ;; first nil will later be replaced by the session buffer. The second ;; is reserved for session status. ;; (car ediff-meta-list) gets cons'ed with the session group buffer. (setq ediff-meta-list (cons (cons meta-buffer (car meta-list)) (mapcar (function (lambda (elt) ! (cons nil (cons nil elt)))) (cdr meta-list))))) --- 501,524 ---- ediff-meta-buffer-map "M" 'ediff-show-meta-buff-from-registry)) ;; initialize the meta list -- don't do this for registry we prepend ! ;; '(nil nil) to all elts of meta-list, except the first. The ;; first nil will later be replaced by the session buffer. The second ;; is reserved for session status. ;; (car ediff-meta-list) gets cons'ed with the session group buffer. + ;; Also, session objA/B/C are turned into lists (obj eq-indicator) + ;; For now, the eq-indicator is used only for 2 and 3-file jobs. (setq ediff-meta-list (cons (cons meta-buffer (car meta-list)) (mapcar (function (lambda (elt) ! (cons nil ! (cons nil ! ;; convert each obj to (obj nil), ! ;; where nil may later be replaced ! ;; by =, if this file equals some ! ;; other file in the same session ! (mapcar (function ! (lambda (obj) ! (list obj nil))) ! elt))))) (cdr meta-list))))) *************** Moves in circular fashion. With numeric *** 497,501 **** ;; must be after run startup-hooks, since ediff-dir-difference-list is ;; set inside these hooks ! (if (eq action-func 'ediff-dir-action) (progn ;; put meta buffer in (car ediff-dir-difference-list) --- 538,542 ---- ;; must be after run startup-hooks, since ediff-dir-difference-list is ;; set inside these hooks ! (if (eq action-func 'ediff-filegroup-action) (progn ;; put meta buffer in (car ediff-dir-difference-list) *************** Moves in circular fashion. With numeric *** 504,508 **** (cdr ediff-dir-difference-list))) ! (or (ediff-dir1-metajob jobname) (ediff-draw-dir-diffs ediff-dir-difference-list)) (define-key ediff-meta-buffer-map "h" 'ediff-mark-for-hiding) --- 545,549 ---- (cdr ediff-dir-difference-list))) ! (or (ediff-one-filegroup-metajob jobname) (ediff-draw-dir-diffs ediff-dir-difference-list)) (define-key ediff-meta-buffer-map "h" 'ediff-mark-for-hiding) *************** Moves in circular fashion. With numeric *** 510,516 **** ediff-meta-buffer-map "x" 'ediff-hide-marked-sessions) (define-key ediff-meta-buffer-map "m" 'ediff-mark-for-operation) ! (if (ediff-collect-diffs-metajob jobname) ! (define-key ! ediff-meta-buffer-map "P" 'ediff-collect-custom-diffs)) (define-key ediff-meta-buffer-map "u" 'ediff-up-meta-hierarchy) (define-key ediff-meta-buffer-map "D" 'ediff-show-dir-diffs))) --- 551,560 ---- ediff-meta-buffer-map "x" 'ediff-hide-marked-sessions) (define-key ediff-meta-buffer-map "m" 'ediff-mark-for-operation) ! (cond ((ediff-collect-diffs-metajob jobname) ! (define-key ! ediff-meta-buffer-map "P" 'ediff-collect-custom-diffs)) ! ((ediff-patch-metajob jobname) ! (define-key ! ediff-meta-buffer-map "P" 'ediff-meta-show-patch))) (define-key ediff-meta-buffer-map "u" 'ediff-up-meta-hierarchy) (define-key ediff-meta-buffer-map "D" 'ediff-show-dir-diffs))) *************** Moves in circular fashion. With numeric *** 540,549 **** (setq regexp (ediff-get-group-regexp meta-list)) ! (if (ediff-collect-diffs-metajob) ! (insert ! " `P':\tcollect custom diffs of all marked sessions\n")) (insert ! " `u':\tshow parent session group ! `D':\tdisplay differences among the contents of directories\n\n") (if (and (stringp regexp) (> (length regexp) 0)) --- 584,599 ---- (setq regexp (ediff-get-group-regexp meta-list)) ! (cond ((ediff-collect-diffs-metajob) ! (insert ! " `P':\tcollect custom diffs of all marked sessions\n")) ! ((ediff-patch-metajob) ! (insert ! " `P':\tshow patch appropriately for the context (session or group)\n"))) (insert ! " `u':\tshow parent session group\n") ! (or (ediff-one-filegroup-metajob) ! (insert ! " `D':\tshow differences among directories\n" ! " `=':\tmark identical files in each session\n\n")) (if (and (stringp regexp) (> (length regexp) 0)) *************** Moves in circular fashion. With numeric *** 551,555 **** (insert "\n ! Size Name ----------------------------------------------------------------------- --- 601,605 ---- (insert "\n ! Size Last modified Name ----------------------------------------------------------------------- *************** Moves in circular fashion. With numeric *** 570,579 **** ;; now organize file names like this: - ;; preferred format: ;; use-mark sizeA dateA sizeB dateB filename - ;; I don't have time to mess up with calculating last modtimes - ;; (XEmacs has no decode-time function), so - ;; the actual format is: - ;; use-mark Size filename ;; make sure directories are displayed with a trailing slash. ;; If one is a directory and another isn't, indicate this with a `?' --- 620,624 ---- *************** Moves in circular fashion. With numeric *** 610,616 **** ;; when the ancestor is a directory rather than a file. (defun ediff-problematic-session-p (session) ! (let ((f1 (ediff-get-session-objA session)) ! (f2 (ediff-get-session-objB session)) ! (f3 (ediff-get-session-objC session))) (cond ((and (stringp f1) (not (file-directory-p f1)) (stringp f2) (not (file-directory-p f2)) --- 655,661 ---- ;; when the ancestor is a directory rather than a file. (defun ediff-problematic-session-p (session) ! (let ((f1 (ediff-get-session-objA-name session)) ! (f2 (ediff-get-session-objB-name session)) ! (f3 (ediff-get-session-objC-name session))) (cond ((and (stringp f1) (not (file-directory-p f1)) (stringp f2) (not (file-directory-p f2)) *************** Moves in circular fashion. With numeric *** 621,637 **** (t nil)))) ! (defun ediff-meta-insert-file-info (file) ! (if (stringp file) ! (insert ! (format ! " %10d %s\n" ! (nth 7 (file-attributes file)) ! ;; dir names in meta lists have no trailing `/' so insert it ! (cond ((file-directory-p file) ! (file-name-as-directory (ediff-abbreviate-file-name file))) ! (t (ediff-abbreviate-file-name file))))) ! )) ! (defun ediff-draw-dir-diffs (diff-list) --- 666,716 ---- (t nil)))) ! (defun ediff-meta-insert-file-info (fileinfo) ! (let ((file-size -1) ! (fname (car fileinfo)) ! (feq (ediff-get-file-eqstatus fileinfo)) ! (file-modtime "*file doesn't exist*")) ! ! (if (and (stringp fname) (file-exists-p fname)) ! (setq file-size (ediff-file-size fname) ! file-modtime (ediff-file-modtime fname))) ! (if (stringp fname) ! (insert ! (format ! "%s %s %-20s %s\n" ! (if feq "=" " ") ; equality indicator ! (format "%10s" (if (< file-size 0) ! "remote" ! file-size)) ! (if (< file-size 0) ! "file" ! (ediff-format-date (decode-time file-modtime))) ! ;; dir names in meta lists have no trailing `/' so insert it ! (cond ((file-directory-p fname) ! (file-name-as-directory (ediff-abbreviate-file-name fname))) ! (t (ediff-abbreviate-file-name fname))))) ! ))) + (defconst ediff-months '((1 . "Jan") (2 . "Feb") (3 . "Mar") (4 . "Apr") + (5 . "May") (6 . "Jun") (7 . "Jul") (8 . "Aug") + (9 . "Sep") (10 . "Oct") (11 . "Nov") (12 . "Dec")) + "Months' associative array.") + + ;; TIME is like the output of decode-time + (defun ediff-format-date (time) + (format "%s %2d %4d %s:%s:%s" + (cdr (assoc (nth 4 time) ediff-months)) ; month + (nth 3 time) ; day + (nth 5 time) ; year + (ediff-fill-leading-zero (nth 2 time)) ; hour + (ediff-fill-leading-zero (nth 1 time)) ; min + (ediff-fill-leading-zero (nth 0 time)) ; sec + )) + + ;; returns 2char string + (defsubst ediff-fill-leading-zero (num) + (if (< num 10) + (format "0%d" num) + (number-to-string num))) (defun ediff-draw-dir-diffs (diff-list) *************** Useful commands: *** 741,745 **** "Display differences among the directories involved in session group." (interactive) ! (if (ediff-dir1-metajob) (error "This command is inapplicable in the present context")) (or (ediff-buffer-live-p ediff-dir-diffs-buffer) --- 820,824 ---- "Display differences among the directories involved in session group." (interactive) ! (if (ediff-one-filegroup-metajob) (error "This command is inapplicable in the present context")) (or (ediff-buffer-live-p ediff-dir-diffs-buffer) *************** Useful commands: *** 811,817 **** (ediff-get-group-objA meta-list)) (ediff-abbreviate-file-name ! (or (ediff-get-group-objB meta-list) "")) (ediff-abbreviate-file-name ! (or (ediff-get-group-objC meta-list) "")))) (ediff-set-meta-overlay pt (point) elt)) (progn --- 890,902 ---- (ediff-get-group-objA meta-list)) (ediff-abbreviate-file-name ! (if (stringp ! (ediff-get-group-objB meta-list)) ! (ediff-get-group-objB meta-list) ! "")) (ediff-abbreviate-file-name ! (if (stringp ! (ediff-get-group-objC meta-list)) ! (ediff-get-group-objC meta-list) ! "")))) (ediff-set-meta-overlay pt (point) elt)) (progn *************** Useful commands: *** 868,871 **** --- 953,958 ---- (session-buf (ediff-get-session-buffer info))) + (if (eq (ediff-get-session-status info) ?H) + (setq unmark t)) (if unmark (ediff-set-session-status info nil) *************** Useful commands: *** 873,876 **** --- 960,965 ---- (error "Can't hide active session, %s" (buffer-name session-buf))) (ediff-set-session-status info ?H)) + (or unmark + (ediff-next-meta-item 1)) (ediff-update-meta-buffer meta-buf) )) *************** Useful commands: *** 884,890 **** --- 973,983 ---- (info (ediff-get-meta-info meta-buf pos))) + (if (eq (ediff-get-session-status info) ?*) + (setq unmark t)) (if unmark (ediff-set-session-status info nil) (ediff-set-session-status info ?*)) + (or unmark + (ediff-next-meta-item 1)) (ediff-update-meta-buffer meta-buf) )) *************** Useful commands: *** 898,909 **** (to (if unhide ?H ?I)) (numMarked 0) ! elt) (while meta-list (setq elt (car meta-list) ! meta-list (cdr meta-list)) (if (eq (ediff-get-session-status elt) from) (progn (setq numMarked (1+ numMarked)) ! (ediff-set-session-status elt to)))) (if (> numMarked 0) (ediff-update-meta-buffer grp-buf) --- 991,1007 ---- (to (if unhide ?H ?I)) (numMarked 0) ! active-sessions-exist session-buf elt) (while meta-list (setq elt (car meta-list) ! meta-list (cdr meta-list) ! session-buf (ediff-get-session-buffer elt)) ! (if (eq (ediff-get-session-status elt) from) (progn (setq numMarked (1+ numMarked)) ! (if (and (eq to ?I) (buffer-live-p session-buf)) ! ;; shouldn't hide active sessions ! (setq active-sessions-exist t) ! (ediff-set-session-status elt to))))) (if (> numMarked 0) (ediff-update-meta-buffer grp-buf) *************** Useful commands: *** 912,915 **** --- 1010,1015 ---- (message "Nothing to reveal...") (message "Nothing to hide..."))) + (if active-sessions-exist + (message "Note: didn't hide active sessions!")) )) *************** Useful commands: *** 969,974 **** (format "%s %s %s %s" ediff-custom-diff-program ediff-custom-diff-options ! (ediff-get-session-objA session) ! (ediff-get-session-objB session)) t)) (save-excursion --- 1069,1074 ---- (format "%s %s %s %s" ediff-custom-diff-program ediff-custom-diff-options ! (ediff-get-session-objA-name session) ! (ediff-get-session-objB-name session)) t)) (save-excursion *************** all marked sessions must be active." *** 1000,1006 **** (message "No marked sessions found"))) ;; This function executes in meta buffer. It knows where event happened. ! (defun ediff-dir-action () "Execute appropriate action for the selected session." (interactive) --- 1100,1128 ---- (message "No marked sessions found"))) + (defun ediff-meta-show-patch () + "Show the multi-file patch associated with this group session." + (interactive) + (let* ((pos (ediff-event-point last-command-event)) + (meta-buf (ediff-event-buffer last-command-event)) + (info (ediff-get-meta-info meta-buf pos 'noerror)) + (patchbuffer ediff-meta-patchbufer)) + (if (ediff-buffer-live-p patchbuffer) + (ediff-eval-in-buffer patchbuffer + (save-restriction + (if (not info) + (widen) + (narrow-to-region + (ediff-get-session-objB-name info) + (ediff-get-session-objC-name info))) + (set-buffer (get-buffer-create ediff-tmp-buffer)) + (erase-buffer) + (insert-buffer patchbuffer) + (display-buffer ediff-tmp-buffer 'not-this-window) + )) + (error "The patch buffer wasn't found")))) + ;; This function executes in meta buffer. It knows where event happened. ! (defun ediff-filegroup-action () "Execute appropriate action for the selected session." (interactive) *************** all marked sessions must be active." *** 1012,1022 **** (setq session-buf (ediff-get-session-buffer info) ! file1 (ediff-get-session-objA info) ! file2 (ediff-get-session-objB info) ! file3 (ediff-get-session-objC info)) ;; make sure we don't start on hidden sessions ;; ?H means marked for hiding. ?I means invalid (hidden). ! (if (memq (ediff-get-session-status info) '(?H ?I)) (progn (beep) --- 1134,1144 ---- (setq session-buf (ediff-get-session-buffer info) ! file1 (ediff-get-session-objA-name info) ! file2 (ediff-get-session-objB-name info) ! file3 (ediff-get-session-objC-name info)) ;; make sure we don't start on hidden sessions ;; ?H means marked for hiding. ?I means invalid (hidden). ! (if (memq (ediff-get-session-status info) '(?I)) (progn (beep) *************** all marked sessions must be active." *** 1053,1057 **** ;; Do ediff-revision on a subdirectory ! ((and (ediff-dir1-metajob) (file-directory-p file1)) (if (ediff-buffer-live-p session-buf) (ediff-show-meta-buffer session-buf) --- 1175,1181 ---- ;; Do ediff-revision on a subdirectory ! ((and (ediff-one-filegroup-metajob) ! (ediff-revision-metajob) ! (file-directory-p file1)) (if (ediff-buffer-live-p session-buf) (ediff-show-meta-buffer session-buf) *************** all marked sessions must be active." *** 1071,1075 **** ;; From here on---only individual session handlers ! ;; handle an individual session with live control buffer ((ediff-buffer-live-p session-buf) (ediff-eval-in-buffer session-buf --- 1195,1199 ---- ;; From here on---only individual session handlers ! ;; handle an individual session with a live control buffer ((ediff-buffer-live-p session-buf) (ediff-eval-in-buffer session-buf *************** all marked sessions must be active." *** 1083,1087 **** (ediff-merge-files file1 file2 ! ;; arrange startup hooks (` (list (lambda () (setq ediff-meta-buffer (, (current-buffer))) --- 1207,1211 ---- (ediff-merge-files file1 file2 ! ;; provide startup hooks (` (list (lambda () (setq ediff-meta-buffer (, (current-buffer))) *************** all marked sessions must be active." *** 1090,1097 **** (quote (, info)) ediff-control-buffer))))) (error "Aborted"))) ! ((ediff-dir1-metajob) ; needs 1 file arg (funcall ediff-session-action-function file1 ! ;; arrange startup hooks (` (list (lambda () (setq ediff-meta-buffer (, (current-buffer))) --- 1214,1221 ---- (quote (, info)) ediff-control-buffer))))) (error "Aborted"))) ! ((ediff-one-filegroup-metajob) ; needs 1 file arg (funcall ediff-session-action-function file1 ! ;; provide startup hooks (` (list (lambda () (setq ediff-meta-buffer (, (current-buffer))) *************** all marked sessions must be active." *** 1102,1106 **** (funcall ediff-session-action-function file1 file2 ! ;; arrange startup hooks (` (list (lambda () (setq ediff-meta-buffer (, (current-buffer))) --- 1226,1230 ---- (funcall ediff-session-action-function file1 file2 ! ;; provide startup hooks (` (list (lambda () (setq ediff-meta-buffer (, (current-buffer))) *************** If this is a session registry buffer the *** 1322,1333 **** (cond ((and (ediff-safe-to-quit buf) (y-or-n-p "Quit this session group? ")) (ediff-dispose-of-meta-buffer buf)) ((ediff-safe-to-quit buf) (bury-buffer)) (t ! (bury-buffer) ! (beep) ! (message ! "Session group suspended, not deleted (has active sessions)"))) (ediff-cleanup-meta-buffer parent-buf) (ediff-kill-buffer-carefully dir-diffs-buffer) --- 1446,1456 ---- (cond ((and (ediff-safe-to-quit buf) (y-or-n-p "Quit this session group? ")) + (message "") (ediff-dispose-of-meta-buffer buf)) ((ediff-safe-to-quit buf) (bury-buffer)) (t ! (error ! "This session group has active sessions---cannot exit"))) (ediff-cleanup-meta-buffer parent-buf) (ediff-kill-buffer-carefully dir-diffs-buffer) *************** If this is a session registry buffer the *** 1379,1416 **** ;; return location of the next meta overlay after point (defun ediff-next-meta-overlay-start (point) ! (let (overl) ! (if ediff-xemacs-p ! (progn ! (setq overl (extent-at point (current-buffer) 'ediff-meta-info)) ! (if overl ! (setq overl (next-extent overl)) ! (setq overl (next-extent (current-buffer)))) ! (if overl ! (extent-start-position overl) ! (point-max))) ! (if (= point (point-max)) (setq point (point-min))) ! (setq overl (car (overlays-at point))) ! (if (and overl (overlay-get overl 'ediff-meta-info)) ! (overlay-end overl) ! (next-overlay-change point))))) (defun ediff-previous-meta-overlay-start (point) ! (let (overl) ! (if ediff-xemacs-p ! (progn ! (setq overl (extent-at point (current-buffer) 'ediff-meta-info)) ! (if overl ! (setq overl (previous-extent overl)) ! (setq overl (previous-extent (current-buffer)))) ! (if overl ! (extent-start-position overl) ! (point-max))) ! ;;(if (bobp) (setq point (point-max))) ! (setq overl (car (overlays-at point))) ! (setq point (if (and overl (overlay-get overl 'ediff-meta-info)) ! (previous-overlay-change (overlay-start overl)) ! (previous-overlay-change point))) ! (if (= point (point-min)) (point-max) point) ! ))) --- 1502,1616 ---- ;; return location of the next meta overlay after point (defun ediff-next-meta-overlay-start (point) ! (if (eobp) ! (goto-char (point-min)) ! (let (overl) ! (if ediff-xemacs-p ! (progn ! (setq overl (extent-at point (current-buffer) 'ediff-meta-info)) ! (if overl ! (setq overl (next-extent overl)) ! (setq overl (next-extent (current-buffer)))) ! (if overl ! (extent-start-position overl) ! (point-max))) ! (setq overl (car (overlays-at point))) ! (if (and overl (overlay-get overl 'ediff-meta-info)) ! ;; note: end of current overlay is the beginning of the next one ! (overlay-end overl) ! (next-overlay-change point)))) ! )) (defun ediff-previous-meta-overlay-start (point) ! (if (bobp) ! (goto-char (point-max)) ! (let (overl) ! (if ediff-xemacs-p ! (progn ! (setq overl (extent-at point (current-buffer) 'ediff-meta-info)) ! (if overl ! (setq overl (previous-extent overl)) ! (setq overl (previous-extent (current-buffer)))) ! (if overl ! (extent-start-position overl) ! (point-min))) ! (setq overl (car (overlays-at point))) ! (if (and overl (overlay-get overl 'ediff-meta-info)) ! (setq point (overlay-start overl))) ! ;; to get to the beginning of prev overlay ! (if (not (bobp)) ! ;; trickery to overcome an emacs bug--doesn't always find previous ! ;; overlay change correctly ! (setq point (1- point))) ! (setq point (previous-overlay-change point)) ! ;; If we are not over an overlay after subtracting 1, it means we are ! ;; in the description area preceding session records. In this case, ! ;; goto the top of the registry buffer. ! (or (car (overlays-at point)) ! (setq point (point-min))) ! point ! )))) ! ! ;; this is the action invoked when the user selects a patch from the meta ! ;; buffer. ! (defun ediff-patch-file-form-meta (file &optional startup-hooks) ! (let* ((pos (ediff-event-point last-command-event)) ! (meta-buf (ediff-event-buffer last-command-event)) ! ;; ediff-get-meta-info gives error if meta-buf or pos are invalid ! (info (ediff-get-meta-info meta-buf pos)) ! (meta-patchbuf ediff-meta-patchbufer) ! session-buf beg-marker end-marker) ! ! (if (or (file-directory-p file) (string-match "/dev/null" file)) ! (error "`%s' is not an ordinary file" (file-name-as-directory file))) ! (setq session-buf (ediff-get-session-buffer info) ! beg-marker (ediff-get-session-objB-name info) ! end-marker (ediff-get-session-objC-name info)) ! ! (or (ediff-buffer-live-p session-buf) ; either an active patch session ! (null session-buf) ; or it is a virgin session ! (error ! "Patch has been already applied to this file--cannot be repeated!")) ! ! (ediff-eval-in-buffer meta-patchbuf ! (save-restriction ! (widen) ! (narrow-to-region beg-marker end-marker) ! (ediff-patch-file-internal meta-patchbuf file startup-hooks))))) ! ! ! (defun ediff-meta-mark-equal-files () ! "Run though the session list and mark identical files. ! This is used only for sessions that involve 2 or 3 files at the same time." ! (interactive) ! (let ((list (cdr ediff-meta-list)) ! fileinfo1 fileinfo2 fileinfo3 elt) ! (while (setq elt (car list)) ! (setq fileinfo1 (ediff-get-session-objA elt) ! fileinfo2 (ediff-get-session-objB elt) ! fileinfo3 (ediff-get-session-objC elt)) ! (ediff-set-file-eqstatus fileinfo1 nil) ! (ediff-set-file-eqstatus fileinfo2 nil) ! (ediff-set-file-eqstatus fileinfo3 nil) ! ! (ediff-mark-if-equal fileinfo1 fileinfo2) ! (if (ediff-metajob3) ! (progn ! (ediff-mark-if-equal fileinfo1 fileinfo3) ! (ediff-mark-if-equal fileinfo2 fileinfo3))) ! (setq list (cdr list)))) ! (ediff-update-meta-buffer (current-buffer))) ! ! ;; mark files 1 and 2 as equal, if they are. ! (defun ediff-mark-if-equal (fileinfo1 fileinfo2) ! (get-buffer-create ediff-tmp-buffer) ! (or (file-directory-p (car fileinfo1)) ! (file-directory-p (car fileinfo2)) ! (if (= (ediff-make-diff2-buffer ! ediff-tmp-buffer (car fileinfo1) (car fileinfo2)) ! 0) ! (progn ! (ediff-set-file-eqstatus fileinfo1 t) ! (ediff-set-file-eqstatus fileinfo2 t))))) ! diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ediff-ptch.el emacs-19.32/lisp/ediff-ptch.el *** emacs-19.31/lisp/ediff-ptch.el Wed Dec 31 19:00:00 1969 --- emacs-19.32/lisp/ediff-ptch.el Fri Jun 21 21:44:35 1996 *************** *** 0 **** --- 1,562 ---- + ;;; ediff-ptch.el --- Ediff's patch support + + ;; Copyright (C) 1996 Free Software Foundation, Inc. + + ;; Author: Michael Kifer + + ;; 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, Inc., 59 Temple Place - Suite 330, + ;; Boston, MA 02111-1307, USA. + + + ;;; Code: + + (defvar ediff-last-dir-patch nil + "Last directory used by an Ediff command for file to patch.") + + (defvar ediff-backup-extension + (if (memq system-type '(vax-vms axp-vms emx ms-dos windows-nt windows-95)) + "_orig" ".orig") + "Default backup extension for the patch program.") + + (defvar ediff-patch-default-directory nil + "*Default directory to look for patches.") + + (defvar ediff-context-diff-label-regexp + (concat "\\(" ; context diff 2-liner + "^\\*\\*\\* \\([^ \t]+\\)[^*]+[\t ]*\n--- \\([^ \t]+\\)" + "\\|" ; GNU unified format diff 2-liner + "^--- \\([^ \t]+\\)[^-]+[\t ]*\n\\+\\+\\+ \\([^ \t]+\\)" + "\\)") + "*Regexp matching filename 2-liners at the start of each context diff.") + + (defvar ediff-patch-program "patch" + "*Name of the program that applies patches.") + (defvar ediff-patch-options "" + "*Options to pass to ediff-patch-program.") + + ;; The buffer of the patch file. Local to control buffer. + (ediff-defvar-local ediff-patchbufer nil "") + + ;; The buffer where patch displays its diagnostics. + (ediff-defvar-local ediff-patch-diagnostics nil "") + + ;; Map of patch buffer. Has the form: + ;; ((filename1 marker1 marker2) (filename2 marker1 marker2) ...) + ;; where filenames are files to which patch would have applied the patch; + ;; marker1 delimits the beginning of the corresponding patch and marker2 does + ;; it for the end. + (ediff-defvar-local ediff-patch-map nil "") + + ;; strip prefix from filename + ;; returns /dev/null, if can't strip prefix + (defsubst ediff-file-name-sans-prefix (filename prefix) + (save-match-data + (if (string-match (concat "^" prefix) filename) + (substring filename (match-end 0)) + (concat "/null/" filename)))) + + + + ;; no longer used + ;; return the number of matches of regexp in buf starting from the beginning + (defun ediff-count-matches (regexp buf) + (ediff-eval-in-buffer buf + (let ((count 0) opoint) + (save-excursion + (goto-char (point-min)) + (while (and (not (eobp)) + (progn (setq opoint (point)) + (re-search-forward regexp nil t))) + (if (= opoint (point)) + (forward-char 1) + (setq count (1+ count))))) + count))) + + ;; Scan BUF (which is supposed to contain a patch) and make a list of the form + ;; ((filename1 marker1 marker2) (filename2 marker1 marker2) ...) + ;; where filenames are files to which patch would have applied the patch; + ;; marker1 delimits the beginning of the corresponding patch and marker2 does + ;; it for the end. This list is then assigned to ediff-patch-map. + ;; Returns the number of elements in the list ediff-patch-map + (defun ediff-map-patch-buffer (buf) + (ediff-eval-in-buffer buf + (let ((count 0) + (mark1 (move-marker (make-marker) (point-min))) + (mark1-end (point-min)) + (possible-file-names '("/dev/null" . "/dev/null")) + mark2-end mark2 filenames + beg1 beg2 end1 end2 + patch-map opoint) + (save-excursion + (goto-char (point-min)) + (setq opoint (point)) + (while (and (not (eobp)) + (re-search-forward ediff-context-diff-label-regexp nil t)) + (if (= opoint (point)) + (forward-char 1) ; ensure progress towards the end + (setq mark2 (move-marker (make-marker) (match-beginning 0)) + mark2-end (match-end 0) + beg1 (match-beginning 2) + end1 (match-end 2) + beg2 (match-beginning 3) + end2 (match-end 3)) + ;; possible-file-names is holding the new file names until we + ;; insert the old file name in the patch map + ;; It is a pair (filename from 1st header line . fn from 2nd line) + (setq possible-file-names + (cons (if (and beg1 end1) + (buffer-substring beg1 end1) + "/dev/null") + (if (and beg2 end2) + (buffer-substring beg2 end2) + "/dev/null"))) + ;; check for any `Index:' or `Prereq:' lines, but don't use them + (if (re-search-backward "^Index:" mark1-end 'noerror) + (move-marker mark2 (match-beginning 0))) + (if (re-search-backward "^Prereq:" mark1-end 'noerror) + (move-marker mark2 (match-beginning 0))) + + (goto-char mark2-end) + + (if filenames + (setq patch-map (cons (list filenames mark1 mark2) patch-map))) + (setq mark1 mark2 + mark1-end mark2-end + filenames possible-file-names)) + (setq opoint (point) + count (1+ count)))) + (setq mark2 (point-max-marker) + patch-map (cons (list possible-file-names mark1 mark2) patch-map)) + (setq ediff-patch-map (nreverse patch-map)) + count))) + + ;; Fix up the file names in the list using the argument FILENAME + ;; Algorithm: find the first file's directory and cut it out from each file + ;; name in the patch. Prepend the directory of FILENAME to each file in the + ;; patch. In addition, the first file in the patch is replaced by FILENAME. + ;; Each file is actually a file-pair of files found in the context diff header + ;; In the end, for each pair, we select the shortest existing file. + ;; Note: Ediff doesn't recognize multi-file patches that are separated + ;; with the `Index:' line. It treats them as a single-file patch. + ;; + ;; Executes inside the patch buffer + (defun ediff-fixup-patch-map (filename) + (setq filename (expand-file-name filename)) + (let ((actual-dir (if (file-directory-p filename) + ;; directory part of filename + (file-name-as-directory filename) + (file-name-directory filename))) + ;; directory part of the first file in the patch + (base-dir1 (file-name-directory (car (car (car ediff-patch-map))))) + (base-dir2 (file-name-directory (cdr (car (car ediff-patch-map))))) + ) + + ;; chop off base-dirs + (mapcar (function (lambda (triple) + (or (string= (car (car triple)) "/dev/null") + (setcar (car triple) + (ediff-file-name-sans-prefix + (car (car triple)) base-dir1))) + (or (string= (cdr (car triple)) "/dev/null") + (setcdr (car triple) + (ediff-file-name-sans-prefix + (cdr (car triple)) base-dir2))) + )) + ediff-patch-map) + + ;; take the given file name into account + (or (file-directory-p filename) + (string= "/dev/null" filename) + (progn + (setcar (car ediff-patch-map) + (cons (file-name-nondirectory filename) + (file-name-nondirectory filename))))) + + ;; prepend actual-dir + (mapcar (function (lambda (triple) + (if (and (string-match "^/null/" (car (car triple))) + (string-match "^/null/" (cdr (car triple)))) + ;; couldn't strip base-dir1 and base-dir2 + ;; hence, something wrong + (progn + (with-output-to-temp-buffer ediff-msg-buffer + (princ + (format " + The patch file contains a context diff for + %s + %s + + However, Ediff cannot infer the name of the actual file + to be patched on your system. If you know the correct file name, + please enter it now. + + If you don't know and still would like to apply patches to + other files, enter /dev/null + " + (substring (car (car triple)) 6) + (substring (cdr (car triple)) 6)))) + (let ((directory t) + user-file) + (while directory + (setq user-file + (read-file-name + "Please enter file name: " + actual-dir actual-dir t)) + (if (not (file-directory-p user-file)) + (setq directory nil) + (setq directory t) + (beep) + (message "%s is a directory" user-file) + (sit-for 2))) + (setcar triple (cons user-file user-file)))) + (setcar (car triple) + (expand-file-name + (concat actual-dir (car (car triple))))) + (setcdr (car triple) + (expand-file-name + (concat actual-dir (cdr (car triple)))))) + )) + ediff-patch-map) + ;; check for the shorter existing file in each pair and discard the other + ;; one + (mapcar (function (lambda (triple) + (let* ((file1 (car (car triple))) + (file2 (cdr (car triple))) + (f1-exists (file-exists-p file1)) + (f2-exists (file-exists-p file2))) + (cond + ((and (< (length file2) (length file1)) + f2-exists) + (setcar triple file2)) + ((and (< (length file1) (length file2)) + f1-exists) + (setcar triple file1)) + ((and f1-exists f2-exists + (string= file1 file2)) + (setcar triple file1)) + ((and f1-exists f2-exists) + (with-output-to-temp-buffer ediff-msg-buffer + (princ (format " + Ediff has inferred that + %s + %s + are possible targets for applying the patch. + Both files seem to be plausible alternatives. + + Please advice: + Type `y' to use %s as the target; + Type `n' to use %s as the target. + " + file1 file2 file2 file1))) + (setcar triple + (if (y-or-n-p (format "Use %s ? " file2)) + file2 file1))) + (f2-exists (setcar triple file2)) + (f1-exists (setcar triple file1)) + (t + (with-output-to-temp-buffer ediff-msg-buffer + (princ (format " + Ediff inferred that + %s + %s + are possible alternative targets for this patch. + + However, these files do not exist. + + Please enter an alternative patch target ... + " + file1 file2))) + (let ((directory t) + target) + (while directory + (setq target (read-file-name + "Please enter a patch target: " + actual-dir actual-dir t)) + (if (not (file-directory-p target)) + (setq directory nil) + (beep) + (message "%s is a directory" target) + (sit-for 2))) + (setcar triple target))))))) + ediff-patch-map) + )) + + (defun ediff-show-patch-diagnostics () + (interactive) + (cond ((window-live-p ediff-window-A) + (set-window-buffer ediff-window-A ediff-patch-diagnostics)) + ((window-live-p ediff-window-B) + (set-window-buffer ediff-window-B ediff-patch-diagnostics)) + (t (display-buffer ediff-patch-diagnostics 'not-this-window)))) + + (defun ediff-get-patch-buffer () + "Obtain patch buffer. If patch is already in a buffer---use it. + Else, read patch file into a new buffer." + (let ((dir (cond (ediff-patch-default-directory) ; try patch default dir + (ediff-use-last-dir ediff-last-dir-patch) + (t default-directory))) + patch-buf) + (if (y-or-n-p "Is the patch already in a buffer? ") + (setq patch-buf + (get-buffer + (read-buffer + "Which buffer contains the patch? " + (current-buffer) 'must-match))) + (setq patch-buf + (find-file-noselect + (read-file-name "Which file contains the patch? " dir)))) + + (ediff-eval-in-buffer patch-buf + (goto-char (point-min)) + (or (ediff-get-visible-buffer-window patch-buf) + (progn + (pop-to-buffer patch-buf 'other-window) + (select-window (previous-window))))) + (ediff-map-patch-buffer patch-buf) + patch-buf)) + + ;; Dispatch the right patch file function: regular or meta-level, + ;; depending on how many patches are in the patch file. + ;; At present, there is no support for meta-level patches. + ;; Should return either the ctl buffer or the meta-buffer + (defun ediff-dispatch-file-patching-job (patch-buf filename + &optional startup-hooks) + (ediff-eval-in-buffer patch-buf + ;; relativize names in the patch with respect to source-file + (ediff-fixup-patch-map filename) + (if (< (length ediff-patch-map) 2) + (ediff-patch-file-internal + patch-buf + (if (and (not (string-match "^/dev/null" (car (car ediff-patch-map)))) + (> (length (car (car ediff-patch-map))) 1)) + (car (car ediff-patch-map)) + filename) + startup-hooks) + (ediff-multi-patch-internal patch-buf startup-hooks)) + )) + + + (defun ediff-patch-buffer-internal (patch-buf buf-to-patch-name + &optional startup-hooks) + (let* ((buf-to-patch (get-buffer buf-to-patch-name)) + (file-name-ok (if buf-to-patch (buffer-file-name buf-to-patch))) + (buf-mod-status (buffer-modified-p buf-to-patch)) + (multifile-patch-p (> (length (ediff-eval-in-buffer patch-buf + ediff-patch-map)) 1)) + default-dir file-name ctl-buf) + (if file-name-ok + (setq file-name file-name-ok) + (if multifile-patch-p + (error + "Can't apply multi-file patches to buffers that visit no files")) + (ediff-eval-in-buffer buf-to-patch + (setq default-dir default-directory) + (setq file-name (ediff-make-temp-file buf-to-patch)) + (set-visited-file-name file-name) + (setq buffer-auto-save-file-name nil) ; don't create auto-save file + ;;don't confuse the user with a new bufname + (rename-buffer buf-to-patch-name) + (set-buffer-modified-p nil) + (set-visited-file-modtime) ; sync buffer and temp file + (setq default-directory default-dir) + )) + + ;; dispatch a patch function + (setq ctl-buf (ediff-dispatch-file-patching-job + patch-buf file-name startup-hooks)) + + (if file-name-ok + () + ;; buffer wasn't visiting any file, + ;; so we will not run meta-level ediff here + (ediff-eval-in-buffer ctl-buf + (delete-file (buffer-file-name ediff-buffer-A)) + (delete-file (buffer-file-name ediff-buffer-B)) + (ediff-eval-in-buffer ediff-buffer-A + (if default-dir (setq default-directory default-dir)) + (set-visited-file-name nil) + (rename-buffer buf-to-patch-name) + (set-buffer-modified-p buf-mod-status)) + (ediff-eval-in-buffer ediff-buffer-B + (setq buffer-auto-save-file-name nil) ; don't create auto-save file + (if default-dir (setq default-directory default-dir)) + (set-visited-file-name nil) + (rename-buffer (ediff-unique-buffer-name + (concat buf-to-patch-name "_patched") "")) + (set-buffer-modified-p t)))) + )) + + (defun ediff-patch-file-internal (patch-buf source-filename + &optional startup-hooks) + (setq source-filename (expand-file-name source-filename)) + + (let* ((backup-extension + ;; if the user specified a -b option, extract the backup + ;; extension from there; else use ediff-backup-extension + (substring ediff-patch-options + (if (string-match "-b[ \t]+" ediff-patch-options) + (match-end 0) 0) + (if (string-match "-b[ \t]+[^ \t]+" ediff-patch-options) + (match-end 0) 0))) + (shell-file-name ediff-shell) + (patch-diagnostics (get-buffer-create "*ediff patch diagnostics*")) + ;; ediff-find-file may use a temp file to do the patch + ;; so, we save source-filename and true-source-filename as a var + ;; that initially is source-filename but may be changed to a temp + ;; file for the purpose of patching. + (true-source-filename source-filename) + (target-filename source-filename) + target-buf buf-to-patch file-name-magic-p ctl-buf backup-style) + + ;; if the user didn't specify a backup extension, use + ;; ediff-backup-extension + (if (string= backup-extension "") + (setq backup-extension ediff-backup-extension)) + (if (string-match "-V" ediff-patch-options) + (error + "Ediff doesn't take the -V option in `ediff-patch-options'--sorry")) + + ;; Make a temp file, if source-filename has a magic file handler (or if + ;; it is handled via auto-mode-alist and similar magic). + ;; Check if there is a buffer visiting source-filename and if they are in + ;; sync; arrange for the deletion of temp file. + (ediff-find-file 'true-source-filename 'buf-to-patch + 'ediff-last-dir-patch 'startup-hooks) + + ;; Check if source file name has triggered black magic, such as file name + ;; handlers or auto mode alist, and make a note of it. + ;; true-source-filename should be either the original name or a + ;; temporary file where we put the after-product of the file handler. + (setq file-name-magic-p (not (equal (file-truename true-source-filename) + (file-truename source-filename)))) + + ;; Checkout orig file, if necessary, so that the patched file could be + ;; checked back in. + (if (ediff-file-checked-in-p (buffer-file-name buf-to-patch)) + (ediff-toggle-read-only buf-to-patch)) + + (ediff-eval-in-buffer patch-diagnostics + (insert-buffer patch-buf) + (message "Applying patch ... ") + ;; fix environment for gnu patch, so it won't make numbered extensions + (setq backup-style (getenv "VERSION_CONTROL")) + (setenv "VERSION_CONTROL" nil) + ;; always pass patch the -f option, so it won't ask any questions + (shell-command-on-region + (point-min) (point-max) + (format "%s -f %s -b %s %s" + ediff-patch-program ediff-patch-options + backup-extension + (expand-file-name true-source-filename)) + t) + ;; restore environment for gnu patch + (setenv "VERSION_CONTROL" backup-style)) + + (message "Applying patch ... done") + (message "") + + (switch-to-buffer patch-diagnostics) + (sit-for 0) ; synchronize - let the user see diagnostics + + (or (file-exists-p (concat true-source-filename backup-extension)) + (error "Patch appears to have failed")) + + ;; If black magic is involved, apply patch to a temp copy of the + ;; file. Otherwise, apply patch to the orig copy. If patch is applied + ;; to temp copy, we name the result old-name_patched for local files + ;; and temp-copy_patched for remote files. The orig file name isn't + ;; changed, and the temp copy of the original is later deleted. + ;; Without magic, the original file is renamed (usually into + ;; old-name_orig) and the result of patching will have the same name as + ;; the original. + (if (not file-name-magic-p) + (ediff-eval-in-buffer buf-to-patch + (set-visited-file-name (concat source-filename backup-extension)) + (set-buffer-modified-p nil)) + + ;; Black magic in effect. + ;; If orig file was remote, put the patched file in the temp directory. + ;; If orig file is local, put the patched file in the directory of + ;; the orig file. + (setq target-filename + (concat + (if (ediff-file-remote-p (file-truename source-filename)) + true-source-filename + source-filename) + "_patched")) + + (rename-file true-source-filename target-filename t) + + ;; arrange that the temp copy of orig will be deleted + (rename-file (concat true-source-filename backup-extension) + true-source-filename t)) + + ;; make orig buffer read-only + (setq startup-hooks + (cons 'ediff-set-read-only-in-buf-A startup-hooks)) + + ;; set up a buf for the patched file + (setq target-buf (find-file-noselect target-filename)) + + (setq ctl-buf + (ediff-buffers-internal + buf-to-patch target-buf nil + startup-hooks 'epatch)) + (ediff-eval-in-buffer ctl-buf + (setq ediff-patchbufer patch-buf + ediff-patch-diagnostics patch-diagnostics)) + + (bury-buffer patch-diagnostics) + (message "Type `P', if you need to see patch diagnostics") + ctl-buf)) + + (defun ediff-multi-patch-internal (patch-buf &optional startup-hooks) + (let (meta-buf) + (setq startup-hooks + ;; this sets various vars in the meta buffer inside + ;; ediff-prepare-meta-buffer + (cons (` (lambda () + ;; tell what to do if the user clicks on a session record + (setq ediff-session-action-function + 'ediff-patch-file-form-meta + ediff-meta-patchbufer patch-buf) + )) + startup-hooks)) + (setq meta-buf (ediff-prepare-meta-buffer + 'ediff-filegroup-action + (ediff-eval-in-buffer patch-buf + ;; nil replaces a regular expression + (cons (list nil (format "%S" patch-buf)) + ediff-patch-map)) + "*Ediff Session Group Panel" + 'ediff-redraw-directory-group-buffer + 'ediff-multifile-patch + startup-hooks)) + (ediff-show-meta-buffer meta-buf) + )) + + + + + ;;; Local Variables: + ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun) + ;;; eval: (put 'ediff-eval-in-buffer 'lisp-indent-hook 1) + ;;; End: + + (provide 'ediff-ptch) + + ;;; ediff-ptch.el ends here diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ediff-util.el emacs-19.32/lisp/ediff-util.el *** emacs-19.31/lisp/ediff-util.el Wed Feb 21 15:21:35 1996 --- emacs-19.32/lisp/ediff-util.el Fri Jun 21 21:48:02 1996 *************** *** 1,5 **** ;;; ediff-util.el --- the core commands and utilities of ediff ! ;; Copyright (C) 1994, 1995 Free Software Foundation, Inc. ;; Author: Michael Kifer --- 1,5 ---- ;;; ediff-util.el --- the core commands and utilities of ediff ! ;; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. ;; Author: Michael Kifer *************** *** 27,30 **** --- 27,35 ---- (require 'ediff-mult) + ;; Pacify compiler and avoid the need in checking for boundp + (defvar ediff-patch-diagnostics nil) + (defvar ediff-patchbufer nil) + ;; end pacifier + ;;; Functions *************** This mode is entered through one of the *** 36,42 **** --- 41,49 ---- `ediff-files' `ediff-buffers' + `ebuffers' `ediff3' `ediff-files3' `ediff-buffers3' + `ebuffers3' `ediff-merge' `ediff-merge-files' *************** to invocation.") *** 177,180 **** --- 184,189 ---- (define-key ediff-mode-map "wb" 'ediff-save-buffer) (define-key ediff-mode-map "wd" 'ediff-save-buffer) + (if (fboundp 'ediff-show-patch-diagnostics) + (define-key ediff-mode-map "P" 'ediff-show-patch-diagnostics)) (if ediff-3way-job (progn *************** to invocation.") *** 243,247 **** (make-local-hook 'pre-command-hook) (if (ediff-window-display-p) ! (add-hook 'pre-command-hook 'ediff-spy-after-mouse)) (setq ediff-mouse-pixel-position (mouse-pixel-position)) --- 252,256 ---- (make-local-hook 'pre-command-hook) (if (ediff-window-display-p) ! (add-hook 'pre-command-hook 'ediff-spy-after-mouse nil t)) (setq ediff-mouse-pixel-position (mouse-pixel-position)) *************** to invocation.") *** 274,278 **** (funcall (ediff-eval-in-buffer buf major-mode)) ;; after Stig@hackvan.com ! (add-hook 'local-write-file-hooks 'ediff-set-merge-mode) ))) (setq buffer-read-only nil --- 283,287 ---- (funcall (ediff-eval-in-buffer buf major-mode)) ;; after Stig@hackvan.com ! (add-hook 'local-write-file-hooks 'ediff-set-merge-mode nil t) ))) (setq buffer-read-only nil *************** Reestablish the default three-window dis *** 741,746 **** (ediff-buffer-live-p ediff-buffer-B) (or (not ediff-3way-job) ! (ediff-buffer-live-p ediff-buffer-C)) ! ) (progn (or no-rehighlight --- 750,754 ---- (ediff-buffer-live-p ediff-buffer-B) (or (not ediff-3way-job) ! (ediff-buffer-live-p ediff-buffer-C))) (progn (or no-rehighlight *************** This is especially useful when comparing *** 1171,1175 **** (defun ediff-toggle-multiframe () "Switch from the multiframe display to single-frame display and back. ! This is primarily for debugging, but one can use it for fun, too." (interactive) (ediff-barf-if-not-control-buffer) --- 1179,1184 ---- (defun ediff-toggle-multiframe () "Switch from the multiframe display to single-frame display and back. ! For a permanent change, set the variable `ediff-window-setup-function', ! which see." (interactive) (ediff-barf-if-not-control-buffer) *************** the width of the A/B/C windows." *** 1382,1386 **** ;;BEG, END show the region to be positioned. ! ;;JOB-NAME holds ediff-job-name. Ediff-windows job positions regions ;;differently. (defun ediff-position-region (beg end pos job-name) --- 1391,1395 ---- ;;BEG, END show the region to be positioned. ! ;;JOB-NAME holds ediff-job-name. The ediff-windows job positions regions ;;differently. (defun ediff-position-region (beg end pos job-name) *************** the width of the A/B/C windows." *** 1450,1480 **** (defun ediff-get-region-size-coefficient (buf-type op &optional n ctl-buf) (ediff-eval-in-buffer (or ctl-buf ediff-control-buffer) ! (let* ((func (cond ((eq op 'scroll-down) 'ediff-get-lines-to-region-start) ! ((eq op 'scroll-up) 'ediff-get-lines-to-region-end) ! (t '(lambda (a b c) 0)))) ! (max-lines (max (funcall func 'A n ctl-buf) ! (funcall func 'B n ctl-buf) ! (if (ediff-buffer-live-p ediff-buffer-C) ! (funcall func 'C n ctl-buf) ! 0)))) ! ;; this covers the horizontal coefficient as well: ! ;; if max-lines = 0 then coef = 1 ! (if (> max-lines 0) ! (/ (+ (funcall func buf-type n ctl-buf) 0.0) ! (+ max-lines 0.0)) ! 1) ! ))) (defun ediff-next-difference (&optional arg) "Advance to the next difference. ! With a prefix argument, go back that many differences." ! (interactive "P") (ediff-barf-if-not-control-buffer) (if (< ediff-current-difference ediff-number-of-differences) (let ((n (min ediff-number-of-differences ! (+ ediff-current-difference (if arg arg 1)))) regexp-skip) --- 1459,1499 ---- + ;; region size coefficient is a coefficient by which to adjust scrolling + ;; up/down of the window displaying buffer of type BUFTYPE. + ;; The purpose of this coefficient is to make the windows scroll in sync, so + ;; that it won't happen that one diff region is scrolled off while the other is + ;; still seen. + ;; + ;; If the difference region is invalid, the coefficient is 1 (defun ediff-get-region-size-coefficient (buf-type op &optional n ctl-buf) (ediff-eval-in-buffer (or ctl-buf ediff-control-buffer) ! (if (ediff-valid-difference-p n) ! (let* ((func (cond ((eq op 'scroll-down) ! 'ediff-get-lines-to-region-start) ! ((eq op 'scroll-up) ! 'ediff-get-lines-to-region-end) ! (t '(lambda (a b c) 0)))) ! (max-lines (max (funcall func 'A n ctl-buf) ! (funcall func 'B n ctl-buf) ! (if (ediff-buffer-live-p ediff-buffer-C) ! (funcall func 'C n ctl-buf) ! 0)))) ! ;; this covers the horizontal coefficient as well: ! ;; if max-lines = 0 then coef = 1 ! (if (> max-lines 0) ! (/ (+ (funcall func buf-type n ctl-buf) 0.0) ! (+ max-lines 0.0)) ! 1)) ! 1))) (defun ediff-next-difference (&optional arg) "Advance to the next difference. ! With a prefix argument, go forward that many differences." ! (interactive "p") (ediff-barf-if-not-control-buffer) (if (< ediff-current-difference ediff-number-of-differences) (let ((n (min ediff-number-of-differences ! (+ ediff-current-difference arg))) regexp-skip) *************** With a prefix argument, go back that man *** 1509,1516 **** "Go to the previous difference. With a prefix argument, go back that many differences." ! (interactive "P") (ediff-barf-if-not-control-buffer) (if (> ediff-current-difference -1) ! (let ((n (max -1 (- ediff-current-difference (if arg arg 1)))) regexp-skip) --- 1528,1535 ---- "Go to the previous difference. With a prefix argument, go back that many differences." ! (interactive "p") (ediff-barf-if-not-control-buffer) (if (> ediff-current-difference -1) ! (let ((n (max -1 (- ediff-current-difference arg))) regexp-skip) *************** With a prefix argument, go back that man *** 1542,1568 **** (error "At beginning of the difference list"))) (defun ediff-jump-to-difference (difference-number) ! "Go to the difference specified as a prefix argument." (interactive "p") (ediff-barf-if-not-control-buffer) ! (setq difference-number (1- difference-number)) (if (and (>= difference-number -1) ! (< difference-number (1+ ediff-number-of-differences))) (ediff-unselect-and-select-difference difference-number) ! (error "Bad difference number, %d. Valid numbers are 1 to %d" ! (1+ difference-number) ediff-number-of-differences))) ! (defun ediff-jump-to-difference-at-point () "Go to difference closest to the point in buffer A, B, or C. ! The type of buffer depends on last command character \(a, b, or c\) that ! invoked this command." ! (interactive) (ediff-barf-if-not-control-buffer) ! (let ((buf-type (ediff-char-to-buftype last-command-char))) ! (ediff-jump-to-difference (ediff-diff-at-point buf-type)))) ;; find region most related to the current point position (or POS, if given) ! (defun ediff-diff-at-point (buf-type &optional pos) (let ((buffer (ediff-get-buffer buf-type)) (ctl-buffer ediff-control-buffer) --- 1561,1647 ---- (error "At beginning of the difference list"))) + ;; The diff number is as perceived by the user (i.e., 1+ the internal + ;; representation) (defun ediff-jump-to-difference (difference-number) ! "Go to the difference specified as a prefix argument. ! If the prefix is negative, count differences from the end." (interactive "p") (ediff-barf-if-not-control-buffer) ! (setq difference-number ! (cond ((< difference-number 0) ! (+ ediff-number-of-differences difference-number)) ! ((> difference-number 0) (1- difference-number)) ! (t -1))) ! ;; -1 is allowed by ediff-unselect-and-select-difference --- it is the ! ;; position before the first one. (if (and (>= difference-number -1) ! (<= difference-number ediff-number-of-differences)) (ediff-unselect-and-select-difference difference-number) ! (error ediff-BAD-DIFF-NUMBER ! this-command (1+ difference-number) ediff-number-of-differences))) ! (defun ediff-jump-to-difference-at-point (arg) "Go to difference closest to the point in buffer A, B, or C. ! The buffer depends on last command character \(a, b, or c\) that invoked this ! command. For instance, if the command was `ga' then the point value in buffer A ! is used. ! With a prefix argument, synchronize all files around the current point position ! in the specified buffer." ! (interactive "P") (ediff-barf-if-not-control-buffer) ! (let* ((buf-type (ediff-char-to-buftype last-command-char)) ! (buffer (ediff-get-buffer buf-type)) ! (pt (ediff-eval-in-buffer buffer (point))) ! (diff-no (ediff-diff-at-point buf-type nil (if arg 'after))) ! (past-last-diff (< ediff-number-of-differences diff-no)) ! (beg (if past-last-diff ! (ediff-eval-in-buffer buffer (point-max)) ! (ediff-get-diff-posn buf-type 'beg (1- diff-no)))) ! ctl-wind wind-A wind-B wind-C ! shift) ! (if past-last-diff ! (ediff-jump-to-difference -1) ! (ediff-jump-to-difference diff-no)) ! (setq ctl-wind (selected-window) ! wind-A ediff-window-A ! wind-B ediff-window-B ! wind-C ediff-window-C) ! (if arg ! (progn ! (ediff-eval-in-buffer buffer ! (setq shift (- beg pt))) ! (select-window wind-A) ! (if past-last-diff (goto-char (point-max))) ! (condition-case nil ! (backward-char shift) ; noerror, if beginning of buffer ! (error)) ! (recenter) ! (select-window wind-B) ! (if past-last-diff (goto-char (point-max))) ! (condition-case nil ! (backward-char shift) ; noerror, if beginning of buffer ! (error)) ! (recenter) ! (if (window-live-p wind-C) ! (progn ! (select-window wind-C) ! (if past-last-diff (goto-char (point-max))) ! (condition-case nil ! (backward-char shift) ; noerror, if beginning of buffer ! (error)) ! (recenter) ! )) ! (select-window ctl-wind) ! )) ! )) ;; find region most related to the current point position (or POS, if given) ! ;; returns diff number as seen by the user (i.e., 1+ the internal ! ;; representation) ! ;; The optional argument WHICH-DIFF can be `after' or `before'. If `after', ! ;; find the diff after the point. If `before', find the diff before the ! ;; point. If the point is inside a diff, return that diff. ! (defun ediff-diff-at-point (buf-type &optional pos which-diff) (let ((buffer (ediff-get-buffer buf-type)) (ctl-buffer ediff-control-buffer) *************** invoked this command." *** 1585,1592 **** ) ! (if (< (abs (- pos prev-end)) ! (abs (- pos beg))) ! diff-no ! (1+ diff-no)) ; jump-to-diff works with diff nums higher by 1 ))) --- 1664,1679 ---- ) ! ;; boost diff-no by 1, if past the last diff region ! (if (and (memq which-diff '(after before)) ! (> pos beg) (= diff-no max-dif-num)) ! (setq diff-no (1+ diff-no))) ! ! (cond ((eq which-diff 'after) (1+ diff-no)) ! ((eq which-diff 'before) diff-no) ! ((< (abs (count-lines pos (max 1 prev-end))) ! (abs (count-lines pos (max 1 beg)))) ! diff-no) ; choose prev difference ! (t ! (1+ diff-no))) ; choose next difference ))) *************** determine the source and the target buff *** 1608,1613 **** (ediff-barf-if-not-control-buffer) (or keys (setq keys (this-command-keys))) ! (if (numberp arg) ! (ediff-jump-to-difference arg)) (let* ((key1 (aref keys 0)) (key2 (aref keys 1)) --- 1695,1701 ---- (ediff-barf-if-not-control-buffer) (or keys (setq keys (this-command-keys))) ! (if (eq arg '-) (setq arg -1)) ; translate neg arg to -1 ! (if (numberp arg) (ediff-jump-to-difference arg)) ! (let* ((key1 (aref keys 0)) (key2 (aref keys 1)) *************** a regular expression typed in by the use *** 1867,1871 **** (cond ((or (and (eq ediff-skip-diff-region-function ! 'ediff-focus-on-regexp-matches-function) (eq last-command-char ?f)) (and (eq ediff-skip-diff-region-function --- 1955,1959 ---- (cond ((or (and (eq ediff-skip-diff-region-function ! ediff-focus-on-regexp-matches-function) (eq last-command-char ?f)) (and (eq ediff-skip-diff-region-function *************** temporarily reverses the meaning of this *** 2064,2074 **** (interactive "P") (ediff-barf-if-not-control-buffer) ! (if (prog1 ! (y-or-n-p ! (format "Quit this Ediff session%s? " ! (if (ediff-buffer-live-p ediff-meta-buffer) ! " & show containing session group" ""))) ! (message "")) ! (ediff-really-quit reverse-default-keep-variants))) --- 2152,2162 ---- (interactive "P") (ediff-barf-if-not-control-buffer) ! (if (y-or-n-p (format "Quit this Ediff session%s? " ! (if (ediff-buffer-live-p ediff-meta-buffer) ! " & show containing session group" ""))) ! (progn ! (message "") ! (ediff-really-quit reverse-default-keep-variants)) ! (message ""))) *************** buffer in another session as well." *** 2259,2263 **** (buf-B-wind (ediff-get-visible-buffer-window buf-B)) (buf-C-wind (ediff-get-visible-buffer-window buf-C)) ! (buf-patch ediff-patch-buf) (buf-patch-diag ediff-patch-diagnostics) (buf-err ediff-error-buffer) --- 2347,2351 ---- (buf-B-wind (ediff-get-visible-buffer-window buf-B)) (buf-C-wind (ediff-get-visible-buffer-window buf-C)) ! (buf-patch ediff-patchbufer) (buf-patch-diag ediff-patch-diagnostics) (buf-err ediff-error-buffer) *************** Hit \\[ediff-recenter] to reset the wind *** 2317,2321 **** (save-excursion (ediff-skip-unsuitable-frames)) ! (with-output-to-temp-buffer " *ediff-info*" (princ (ediff-version)) (princ "\n\n") --- 2405,2410 ---- (save-excursion (ediff-skip-unsuitable-frames)) ! (with-output-to-temp-buffer ediff-msg-buffer ! (raise-frame (selected-frame)) (princ (ediff-version)) (princ "\n\n") *************** Hit \\[ediff-recenter] to reset the wind *** 2526,2536 **** (setq f (expand-file-name (read-file-name ! (format "%s%s: " prompt ! (if default-file ! (concat " (default " default-file ")") ! "")) default-dir ! default-file t ; must match, no-confirm (if default-file (file-name-directory default-file)) --- 2615,2626 ---- (setq f (expand-file-name (read-file-name ! (format "%s%s " prompt ! (cond (default-file ! (concat " (default " default-file "):")) ! ;;((string-match "[?:!,;][ \t]*$" prompt) "") ! (t (concat " (default " default-dir "):")))) default-dir ! (or default-file default-dir) t ; must match, no-confirm (if default-file (file-name-directory default-file)) *************** Hit \\[ediff-recenter] to reset the wind *** 2602,2608 **** ;; Signal an error if we can't make them the same, or the user doesn't want ;; to do what is necessary to make them the same. ! ;; If file has file handlers (indicated by the optional arg), then we ! ;; offer to revert instead of saving. This is one difference with Emerge. ! ;; Another is that we always offer to revert obsolete files, whether they ;; are modified or not. (defun ediff-verify-file-buffer (&optional file-magic) --- 2692,2696 ---- ;; Signal an error if we can't make them the same, or the user doesn't want ;; to do what is necessary to make them the same. ! ;; Also, Ediff always offers to revert obsolete buffers, whether they ;; are modified or not. (defun ediff-verify-file-buffer (&optional file-magic) *************** Hit \\[ediff-recenter] to reset the wind *** 2612,2630 **** ;; If buffer is not obsolete and is modified, offer to save (if (yes-or-no-p ! (format "Buffer out of sync with visited file. %s file %s? " ! (if file-magic "Revert" "Save") buffer-file-name)) ! (if (not file-magic) (save-buffer) ! ;; for some reason, file-name-handlers append instead of ! ;; replacing, so we have to erase first. ! (erase-buffer) ! (revert-buffer t t)) ! (error "Buffer out of sync for file %s" buffer-file-name)) ;; If buffer is not obsolete and is not modified, do nothing nil) ;; If buffer is obsolete, offer to revert (if (yes-or-no-p ! (format "Buffer out of sync with visited file. Revert file %s? " buffer-file-name)) (progn --- 2700,2716 ---- ;; If buffer is not obsolete and is modified, offer to save (if (yes-or-no-p ! (format "Buffer out of sync with visited file. Save file %s? " buffer-file-name)) ! (condition-case nil (save-buffer) ! (error ! (beep) ! (message "Couldn't save %s" buffer-file-name))) ! (error "Buffer is out of sync for file %s" buffer-file-name)) ;; If buffer is not obsolete and is not modified, do nothing nil) ;; If buffer is obsolete, offer to revert (if (yes-or-no-p ! (format "Buffer is out of sync with visited file. REVERT file %s? " buffer-file-name)) (progn *************** Without an argument, it saves customized *** 2777,2790 **** (defun ediff-get-diff-posn (buf-type pos &optional n control-buf) - "Returns positions of difference sectors in the BUF-TYPE buffer. - BUF-TYPE should be a symbol--either `A' or `B'. - POS is either `beg' or `end'--it specifies whether you want the position at the - beginning of a difference or at the end. - - The optional argument N says which difference \(default: - `ediff-current-difference'\). The optional argument CONTROL-BUF says - which control buffer is in effect in case it is not the current - buffer." (let (diff-overlay) (or control-buf --- 2863,2877 ---- + ;; Returns positions of difference sectors in the BUF-TYPE buffer. + ;; BUF-TYPE should be a symbol -- `A', `B', or `C'. + ;; POS is either `beg' or `end'--it specifies whether you want the position at + ;; the beginning of a difference or at the end. + ;; + ;; The optional argument N says which difference (default: + ;; `ediff-current-difference'). N is the internal difference number (1- what + ;; the user sees). The optional argument CONTROL-BUF says + ;; which control buffer is in effect in case it is not the current + ;; buffer. (defun ediff-get-diff-posn (buf-type pos &optional n control-buf) (let (diff-overlay) (or control-buf *************** buffer." *** 2795,2800 **** (if (or (< n 0) (>= n ediff-number-of-differences)) (if (> ediff-number-of-differences 0) ! (error "Bad difference number, %d. Valid numbers are 1 to %d" ! (1+ n) ediff-number-of-differences) (error ediff-NO-DIFFERENCES))) (setq diff-overlay (ediff-get-diff-overlay n buf-type))) --- 2882,2887 ---- (if (or (< n 0) (>= n ediff-number-of-differences)) (if (> ediff-number-of-differences 0) ! (error ediff-BAD-DIFF-NUMBER ! this-command (1+ n) ediff-number-of-differences) (error ediff-NO-DIFFERENCES))) (setq diff-overlay (ediff-get-diff-overlay n buf-type))) *************** Checks if overlay's buffer exists." *** 2958,2971 **** (if ediff-xemacs-p (make-extent beg end buff) ! ;; don't advance front, but advance rear (make-overlay beg end buff nil 'rear-advance))) ! (if ediff-emacs-p ! (ediff-overlay-put overl 'evaporate nil) ; don't detach ! (ediff-overlay-put overl 'detachable nil) ; don't detach ! ;; don't advance front, but advance rear ! (ediff-overlay-put overl 'start-open nil) ! (ediff-overlay-put overl 'end-open nil)) ! (ediff-overlay-put overl 'ediff-diff-num 0) overl)))) --- 3045,3060 ---- (if ediff-xemacs-p (make-extent beg end buff) ! ;; advance front and rear of the overlay (make-overlay beg end buff nil 'rear-advance))) ! ;; never detach ! (ediff-overlay-put ! overl (if ediff-emacs-p 'evaporate 'detachable) nil) ! ;; make vip-minibuffer-overlay open-ended ! ;; In emacs, it is made open ended at creation time ! (if ediff-xemacs-p ! (progn ! (ediff-overlay-put overl 'start-open nil) ! (ediff-overlay-put overl 'end-open nil))) (ediff-overlay-put overl 'ediff-diff-num 0) overl)))) *************** Mail anyway? (y or n) ") *** 3266,3271 **** (setq ediff-command-begin-time '(0 0 0)) (message "Ediff profiling disabled")) ! (add-hook pre-hook 'ediff-save-time t) ! (add-hook post-hook 'ediff-calc-command-time) (message "Ediff profiling enabled")))) --- 3355,3360 ---- (setq ediff-command-begin-time '(0 0 0)) (message "Ediff profiling disabled")) ! (add-hook pre-hook 'ediff-save-time t t) ! (add-hook post-hook 'ediff-calc-command-time nil t) (message "Ediff profiling enabled")))) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ediff-vers.el emacs-19.32/lisp/ediff-vers.el *** emacs-19.31/lisp/ediff-vers.el Fri Feb 16 01:36:08 1996 --- emacs-19.32/lisp/ediff-vers.el Fri Jun 21 21:46:24 1996 *************** *** 1,5 **** ;;; ediff-vers.el --- version control interface to Ediff ! ;;; Copyright (C) 1994, 1995 Free Software Foundation, Inc. ;; Author: Michael Kifer --- 1,5 ---- ;;; ediff-vers.el --- version control interface to Ediff ! ;;; Copyright (C) 1995, 1996 Free Software Foundation, Inc. ;; Author: Michael Kifer *************** *** 24,27 **** --- 24,41 ---- ;;; Code: + + ;; Compiler pacifier + (defvar rcs-default-co-switches) + (defvar sc-mode) + (defvar cvs-shell) + (defvar cvs-program) + (defvar cvs-cookie-handle) + + (eval-when-compile + (load "pcl-cvs" 'noerror) + (load "rcs" 'noerror) + (load "generic-sc" 'noerror) + (load "vc" 'noerror)) + ;; end pacifier ;; VC.el support diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ediff-wind.el emacs-19.32/lisp/ediff-wind.el *** emacs-19.31/lisp/ediff-wind.el Fri Feb 16 01:28:58 1996 --- emacs-19.32/lisp/ediff-wind.el Fri Jun 21 21:48:53 1996 *************** *** 1,5 **** ;;; ediff-wind.el --- window manipulation utilities ! ;; Copyright (C) 1994, 1995 Free Software Foundation, Inc. ;; Author: Michael Kifer --- 1,5 ---- ;;; ediff-wind.el --- window manipulation utilities ! ;; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. ;; Author: Michael Kifer *************** *** 26,29 **** --- 26,41 ---- (require 'ediff-init) + ;; Compiler pacifier + (defvar icon-title-format) + (defvar top-toolbar-height) + (defvar bottom-toolbar-height) + (defvar left-toolbar-height) + (defvar right-toolbar-height) + (defvar left-toolbar-width) + (defvar right-toolbar-width) + (defvar default-menubar) + (defvar frame-icon-title-format) + ;; end pacifier + (defvar ediff-window-setup-function (if (ediff-window-display-p) *************** In this case, Ediff will use those frame *** 94,98 **** '(scrollbar-width . 0) ; XEmacs only '(menu-bar-lines . 0) ; Emacs only - '(visibility . nil) ; doesn't work for XEmacs yet ;; don't lower and auto-raise '(auto-lower . nil) --- 106,109 ---- *************** into icons, regardless of the window man *** 396,406 **** (defun ediff-setup-windows-multiframe-merge (buf-A buf-B buf-C control-buf) ;;; Algorithm: ! ;;; If A and B are in the same frame but C's frame is different--- use one ! ;;; frame for A and B and use a separate frame for C. ! ;;; If C's frame is non-existent, then: if the first suitable ! ;;; non-dedicated frame is different from A&B's, then use it for C. ! ;;; Otherwise, put A,B, and C in one frame. ! ;;; If buffers A, B, C are is separate frames, use them to display these ! ;;; buffers. ;; Skip dedicated or iconified frames. --- 407,419 ---- (defun ediff-setup-windows-multiframe-merge (buf-A buf-B buf-C control-buf) ;;; Algorithm: ! ;;; 1. Never use frames that have dedicated windows in them---it is bad to ! ;;; destroy dedicated windows. ! ;;; 2. If A and B are in the same frame but C's frame is different--- use one ! ;;; frame for A and B and use a separate frame for C. ! ;;; 3. If C's frame is non-existent, then: if the first suitable ! ;;; non-dedicated frame is different from A&B's, then use it for C. ! ;;; Otherwise, put A,B, and C in one frame. ! ;;; 4. If buffers A, B, C are is separate frames, use them to display these ! ;;; buffers. ;; Skip dedicated or iconified frames. *************** into icons, regardless of the window man *** 424,434 **** --- 437,456 ---- (orig-frame (selected-frame)) (use-same-frame (or force-one-frame + ;; A and C must be in one frame (eq frame-A (or frame-C orig-frame)) + ;; B and C must be in one frame (eq frame-B (or frame-C orig-frame)) + ;; A or B is not visible (not (frame-live-p frame-A)) (not (frame-live-p frame-B)) + ;; A or B is not suitable for display + (not (ediff-window-ok-for-display wind-A)) + (not (ediff-window-ok-for-display wind-B)) + ;; A and B in the same frame, and no good frame + ;; for C (and (eq frame-A frame-B) (not (frame-live-p frame-C))) )) + ;; use-same-frame-for-AB implies wind A and B are ok for display (use-same-frame-for-AB (and (not use-same-frame) (eq frame-A frame-B))) *************** into icons, regardless of the window man *** 441,475 **** ;; buf-A on its own (if (and (window-live-p wind-A) ! (null use-same-frame) (null use-same-frame-for-AB)) ! (progn (select-window wind-A) (delete-other-windows) - (switch-to-buffer buf-A) (setq wind-A (selected-window)) (setq done-A t))) ;; buf-B on its own ! (if (and (window-live-p wind-B) (null use-same-frame)) ; buf B on its own ! (progn (select-window wind-B) (delete-other-windows) - (switch-to-buffer buf-B) (setq wind-B (selected-window)) (setq done-B t))) ;; buf-C on its own ! (if (and (window-live-p wind-C) (null use-same-frame)) ; buf C on its own (progn (select-window wind-C) (delete-other-windows) - (switch-to-buffer buf-C) (setq wind-C (selected-window)) (setq done-C t))) ! (if use-same-frame-for-AB (progn ! (select-frame frame-A) ! (switch-to-buffer buf-A) (delete-other-windows) (setq wind-A (selected-window)) --- 463,502 ---- ;; buf-A on its own (if (and (window-live-p wind-A) ! (null use-same-frame) ; implies wind-A is suitable (null use-same-frame-for-AB)) ! (progn ; bug A on its own ! ;; buffer buf-A is seen in live wind-A (select-window wind-A) (delete-other-windows) (setq wind-A (selected-window)) (setq done-A t))) ;; buf-B on its own ! (if (and (window-live-p wind-B) ! (null use-same-frame) ; implies wind-B is suitable ! (null use-same-frame-for-AB)) ! (progn ; buf B on its own ! ;; buffer buf-B is seen in live wind-B (select-window wind-B) (delete-other-windows) (setq wind-B (selected-window)) (setq done-B t))) ;; buf-C on its own ! (if (and (window-live-p wind-C) ! (ediff-window-ok-for-display wind-C) ! (null use-same-frame)) ; buf C on its own (progn + ;; buffer buf-C is seen in live wind-C (select-window wind-C) (delete-other-windows) (setq wind-C (selected-window)) (setq done-C t))) ! (if (and use-same-frame-for-AB ; implies wind A and B are suitable ! (window-live-p wind-A)) (progn ! ;; wind-A must already be displaying buf-A ! (select-window wind-A) (delete-other-windows) (setq wind-A (selected-window)) *************** into icons, regardless of the window man *** 485,503 **** (if use-same-frame ! (let ((curr-frame (selected-frame)) ! (window-min-height 1)) ;; avoid dedicated and non-splittable windows (ediff-skip-unsuitable-frames) - (or (eq curr-frame (selected-frame)) - (setq wind-A nil - wind-B nil - wind-C nil - orig-wind (selected-window))) - - ;; set the right frame - (cond (wind-A (select-window wind-A)) - (wind-B (select-window wind-B)) - (wind-C (select-window wind-C)) - (t (select-window orig-wind))) (delete-other-windows) (setq merge-window-lines --- 512,518 ---- (if use-same-frame ! (let ((window-min-height 1)) ;; avoid dedicated and non-splittable windows (ediff-skip-unsuitable-frames) (delete-other-windows) (setq merge-window-lines *************** into icons, regardless of the window man *** 506,513 **** (setq wind-A (selected-window)) - ;; XEmacs used to have a lot of trouble with display - ;; It did't set things right unless we told it to catch breath - ;;(if ediff-xemacs-p (sit-for 0)) - (split-window-vertically (max 2 (- (window-height) merge-window-lines))) --- 521,524 ---- *************** into icons, regardless of the window man *** 530,535 **** )) ! (or done-A ; Buf A to be set in its own frame ! (progn ; It was not set up yet as it wasn't visible (select-window orig-wind) (delete-other-windows) --- 541,549 ---- )) ! (or done-A ; Buf A to be set in its own frame, ! ;;; or it was set before because use-same-frame = 1 ! (progn ! ;; Buf-A was not set up yet as it wasn't visible, ! ;; and use-same-frame = nil, use-same-frame-for-AB = nil (select-window orig-wind) (delete-other-windows) *************** into icons, regardless of the window man *** 537,542 **** (setq wind-A (selected-window)) )) ! (or done-B ; Buf B to be set in its own frame ! (progn ; It was not set up yet as it wasn't visible (select-window orig-wind) (delete-other-windows) --- 551,559 ---- (setq wind-A (selected-window)) )) ! (or done-B ; Buf B to be set in its own frame, ! ;;; or it was set before because use-same-frame = 1 ! (progn ! ;; Buf-B was not set up yet as it wasn't visible ! ;; and use-same-frame = nil, use-same-frame-for-AB = nil (select-window orig-wind) (delete-other-windows) *************** into icons, regardless of the window man *** 545,550 **** )) ! (or done-C ; Buf C to be set in its own frame. ! (progn ; It was not set up yet as it wasn't visible (select-window orig-wind) (delete-other-windows) --- 562,570 ---- )) ! (or done-C ; Buf C to be set in its own frame, ! ;;; or it was set before because use-same-frame = 1 ! (progn ! ;; Buf-C was not set up yet as it wasn't visible ! ;; and use-same-frame = nil (select-window orig-wind) (delete-other-windows) *************** into icons, regardless of the window man *** 603,609 **** --- 623,632 ---- (use-same-frame (or force-one-frame (eq frame-A frame-B) + (not (ediff-window-ok-for-display wind-A)) + (not (ediff-window-ok-for-display wind-B)) (if three-way-comparison (or (eq frame-A frame-C) (eq frame-B frame-C) + (not (ediff-window-ok-for-display wind-C)) (not (frame-live-p frame-A)) (not (frame-live-p frame-B)) *************** into icons, regardless of the window man *** 629,635 **** (if (and (window-live-p wind-A) (null use-same-frame)) ; buf-A on its own (progn ! (select-window wind-A) (delete-other-windows) - (switch-to-buffer buf-A) (setq wind-A (selected-window)) (setq done-A t))) --- 652,658 ---- (if (and (window-live-p wind-A) (null use-same-frame)) ; buf-A on its own (progn ! ;; buffer buf-A is seen in live wind-A ! (select-window wind-A) ; must be displaying buf-A (delete-other-windows) (setq wind-A (selected-window)) (setq done-A t))) *************** into icons, regardless of the window man *** 637,643 **** (if (and (window-live-p wind-B) (null use-same-frame)) ; buf B on its own (progn ! (select-window wind-B) (delete-other-windows) - (switch-to-buffer buf-B) (setq wind-B (selected-window)) (setq done-B t))) --- 660,666 ---- (if (and (window-live-p wind-B) (null use-same-frame)) ; buf B on its own (progn ! ;; buffer buf-B is seen in live wind-B ! (select-window wind-B) ; must be displaying buf-B (delete-other-windows) (setq wind-B (selected-window)) (setq done-B t))) *************** into icons, regardless of the window man *** 645,679 **** (if (and (window-live-p wind-C) (null use-same-frame)) ; buf C on its own (progn ! (select-window wind-C) (delete-other-windows) - (switch-to-buffer buf-C) (setq wind-C (selected-window)) (setq done-C t))) (if use-same-frame ! (let ((curr-frame (selected-frame)) ! ;; this affects 3way setups only ! wind-width-or-height) ;; avoid dedicated and non-splittable windows (ediff-skip-unsuitable-frames) - (or (eq curr-frame (selected-frame)) - (setq wind-A nil - wind-B nil - wind-C nil - orig-wind (selected-window))) - - ;; set the right frame - (cond (wind-A (select-window wind-A)) - (wind-B (select-window wind-B)) - (wind-C (select-window wind-C)) - (t (select-window orig-wind))) (delete-other-windows) (switch-to-buffer buf-A) (setq wind-A (selected-window)) - ;; XEmacs used to have a lot of trouble with display - ;; It didn't set things right unless we told it to catch breath - ;;(if ediff-xemacs-p (sit-for 0)) - (if three-way-comparison (setq wind-width-or-height --- 668,685 ---- (if (and (window-live-p wind-C) (null use-same-frame)) ; buf C on its own (progn ! ;; buffer buf-C is seen in live wind-C ! (select-window wind-C) ; must be displaying buf-C (delete-other-windows) (setq wind-C (selected-window)) (setq done-C t))) (if use-same-frame ! (let (wind-width-or-height) ; this affects 3way setups only ;; avoid dedicated and non-splittable windows (ediff-skip-unsuitable-frames) (delete-other-windows) (switch-to-buffer buf-A) (setq wind-A (selected-window)) (if three-way-comparison (setq wind-width-or-height *************** into icons, regardless of the window man *** 703,707 **** (or done-A ; Buf A to be set in its own frame ! (progn ; It was not set up yet as it wasn't visible (select-window orig-wind) (delete-other-windows) --- 709,716 ---- (or done-A ; Buf A to be set in its own frame ! ;;; or it was set before because use-same-frame = 1 ! (progn ! ;; Buf-A was not set up yet as it wasn't visible, ! ;; and use-same-frame = nil (select-window orig-wind) (delete-other-windows) *************** into icons, regardless of the window man *** 710,714 **** )) (or done-B ; Buf B to be set in its own frame ! (progn ; It was not set up yet as it wasn't visible (select-window orig-wind) (delete-other-windows) --- 719,726 ---- )) (or done-B ; Buf B to be set in its own frame ! ;;; or it was set before because use-same-frame = 1 ! (progn ! ;; Buf-B was not set up yet as it wasn't visible, ! ;; and use-same-frame = nil (select-window orig-wind) (delete-other-windows) *************** into icons, regardless of the window man *** 719,723 **** (if three-way-comparison (or done-C ; Buf C to be set in its own frame ! (progn ; It was not set up yet as it wasn't visible (select-window orig-wind) (delete-other-windows) --- 731,738 ---- (if three-way-comparison (or done-C ; Buf C to be set in its own frame ! ;;; or it was set before because use-same-frame = 1 ! (progn ! ;; Buf-C was not set up yet as it wasn't visible, ! ;; and use-same-frame = nil (select-window orig-wind) (delete-other-windows) *************** into icons, regardless of the window man *** 735,740 **** (window-frame (minibuffer-window frame-A)))) ! ;; It is unlikely that we'll implement ediff-windows that would compare ! ;; 3 windows at once. So, we don't use buffer C here. (if ediff-windows-job (progn --- 750,755 ---- (window-frame (minibuffer-window frame-A)))) ! ;; It is unlikely that we'll implement a version of ediff-windows that ! ;; would compare 3 windows at once. So, we don't use buffer C here. (if ediff-windows-job (progn *************** into icons, regardless of the window man *** 745,749 **** )) ! ;; skip unsplittable and dedicated windows ;; create a new splittable frame if none is found (defun ediff-skip-unsuitable-frames (&optional ok-unsplittable) --- 760,764 ---- )) ! ;; skip unsplittable frames and frames that have dedicated windows. ;; create a new splittable frame if none is found (defun ediff-skip-unsuitable-frames (&optional ok-unsplittable) *************** into icons, regardless of the window man *** 752,756 **** (while (and (not (eq (selected-window) last-window)) (or ! (window-dedicated-p (selected-window)) (ediff-frame-iconified-p (selected-frame)) (< (frame-height (selected-frame)) --- 767,771 ---- (while (and (not (eq (selected-window) last-window)) (or ! (ediff-frame-has-dedicated-windows (selected-frame)) (ediff-frame-iconified-p (selected-frame)) (< (frame-height (selected-frame)) *************** into icons, regardless of the window man *** 766,777 **** ;; fed up, no appropriate frame (progn - ;;(redraw-display) (select-frame (make-frame '((unsplittable))))))))) ;; Prepare or refresh control frame (defun ediff-setup-control-frame (ctl-buffer designated-minibuffer-frame) (let ((window-min-height 1) ctl-frame-iconified-p dont-iconify-ctl-frame deiconify-ctl-frame ! ctl-frame old-ctl-frame lines user-grabbed-mouse fheight fwidth adjusted-parameters) --- 781,819 ---- ;; fed up, no appropriate frame (progn (select-frame (make-frame '((unsplittable))))))))) + (defun ediff-frame-has-dedicated-windows (frame) + (let ((cur-fr (selected-frame)) + ans) + (select-frame frame) + (walk-windows + (function (lambda (wind) + (if (window-dedicated-p wind) + (setq ans t)))) + 'ignore-minibuffer + frame) + (select-frame cur-fr) + ans)) + + ;; window is ok, if it is only one window on the frame, not counting the + ;; minibuffer, or none of the frame's windows is dedicated. + ;; The idea is that it is bad to destroy dedicated windows while creating an + ;; ediff window setup + (defun ediff-window-ok-for-display (wind) + (and + (window-live-p wind) + (or + ;; only one window + (eq wind (next-window wind 'ignore-minibuffer (window-frame wind))) + ;; none is dedicated + (not (ediff-frame-has-dedicated-windows (window-frame wind))) + ))) + ;; Prepare or refresh control frame (defun ediff-setup-control-frame (ctl-buffer designated-minibuffer-frame) (let ((window-min-height 1) ctl-frame-iconified-p dont-iconify-ctl-frame deiconify-ctl-frame ! ctl-frame old-ctl-frame lines ! ;; user-grabbed-mouse fheight fwidth adjusted-parameters) *************** into icons, regardless of the window man *** 814,818 **** fwidth (+ (ediff-help-message-line-length) 2) adjusted-parameters (append (list - '(visibility . t) ;; possibly change surrogate minibuffer (cons 'minibuffer --- 856,859 ---- *************** into icons, regardless of the window man *** 852,855 **** --- 893,897 ---- (modify-frame-parameters ctl-frame adjusted-parameters) + (make-frame-visible ctl-frame) ;; This works around a bug in 19.25 and earlier. There, if frame gets *************** into icons, regardless of the window man *** 866,874 **** (raise-frame ctl-frame))) ! (if ediff-xemacs-p ! (set-window-buffer-dedicated (selected-window) ctl-buffer) ! (set-window-dedicated-p (selected-window) t)) ! ;; resynch so the cursor will move to control frame ;; per RMS suggestion (if (ediff-window-display-p) --- 908,914 ---- (raise-frame ctl-frame))) ! (set-window-dedicated-p (selected-window) t) ! ;; synchronize so the cursor will move to control frame ;; per RMS suggestion (if (ediff-window-display-p) *************** into icons, regardless of the window man *** 887,892 **** (if ediff-xemacs-p (ediff-eval-in-buffer ctl-buffer ! (make-local-variable 'select-frame-hook) ! (add-hook 'select-frame-hook 'ediff-xemacs-select-frame-hook) )) --- 927,932 ---- (if ediff-xemacs-p (ediff-eval-in-buffer ctl-buffer ! (make-local-hook 'select-frame-hook) ! (add-hook 'select-frame-hook 'ediff-xemacs-select-frame-hook nil t) )) *************** It assumes that it is called from within *** 1022,1026 **** (list (if (ediff-narrow-control-frame-p) " " "-- ") mode-line-buffer-identification ! " Howdy!")) ;; control buffer id (setq mode-line-buffer-identification --- 1062,1066 ---- (list (if (ediff-narrow-control-frame-p) " " "-- ") mode-line-buffer-identification ! " Quick Help")) ;; control buffer id (setq mode-line-buffer-identification *************** It assumes that it is called from within *** 1073,1085 **** (defun ediff-refresh-control-frame () - (setq frame-title-format (ediff-make-narrow-control-buffer-id) - frame-icon-title-format (ediff-make-narrow-control-buffer-id) ; XEmacs - icon-title-format (ediff-make-narrow-control-buffer-id)) ; Emacs - ;; the emacs part will be modified once the 'name and 'title - ;; frame parameters are separated (if ediff-emacs-p (modify-frame-parameters ediff-control-frame ! (list (cons 'name (ediff-make-narrow-control-buffer-id)))) ;; force an update of the frame title (modify-frame-parameters ediff-control-frame '(())))) --- 1113,1126 ---- (defun ediff-refresh-control-frame () (if ediff-emacs-p + ;; set frame/icon titles for Emacs (modify-frame-parameters ediff-control-frame ! (list (cons 'title (ediff-make-base-title)) ! (cons 'icon-name (ediff-make-narrow-control-buffer-id)) ! )) ! ;; set frame/icon titles for XEmacs ! (setq frame-title-format (ediff-make-base-title) ! frame-icon-title-format (ediff-make-narrow-control-buffer-id)) ;; force an update of the frame title (modify-frame-parameters ediff-control-frame '(())))) *************** It assumes that it is called from within *** 1090,1096 **** (if skip-name " " ! (concat ! (cdr (assoc 'name ediff-control-frame-parameters)) ! ediff-control-buffer-suffix)) (cond ((< ediff-current-difference 0) (format " _/%d" ediff-number-of-differences)) --- 1131,1135 ---- (if skip-name " " ! (ediff-make-base-title)) (cond ((< ediff-current-difference 0) (format " _/%d" ediff-number-of-differences)) *************** It assumes that it is called from within *** 1101,1104 **** --- 1140,1148 ---- (1+ ediff-current-difference) ediff-number-of-differences))))) + + (defun ediff-make-base-title () + (concat + (cdr (assoc 'name ediff-control-frame-parameters)) + ediff-control-buffer-suffix)) (defun ediff-make-wide-control-buffer-id () *************** It assumes that it is called from within *** 1123,1128 **** (get-buffer-window buff 'visible)))) - ;;; Functions to decide when to redraw windows (defun ediff-keep-window-config (control-buf) --- 1167,1172 ---- (get-buffer-window buff 'visible)))) + ;;; Functions to decide when to redraw windows (defun ediff-keep-window-config (control-buf) *************** It assumes that it is called from within *** 1152,1155 **** --- 1196,1204 ---- ediff-wide-display-p))))))) + + ;;; Local Variables: + ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun) + ;;; eval: (put 'ediff-eval-in-buffer 'lisp-indent-hook 1) + ;;; End: (provide 'ediff-wind) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ediff.el emacs-19.32/lisp/ediff.el *** emacs-19.31/lisp/ediff.el Fri Feb 16 01:29:00 1996 --- emacs-19.32/lisp/ediff.el Fri Jun 21 21:50:34 1996 *************** *** 1,5 **** ;;; ediff.el --- a comprehensive visual interface to diff & patch ! ;; Copyright (C) 1994, 1995 Free Software Foundation, Inc. ;; Author: Michael Kifer --- 1,5 ---- ;;; ediff.el --- a comprehensive visual interface to diff & patch ! ;; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. ;; Author: Michael Kifer *************** *** 7,12 **** ;; Keywords: comparing, merging, patching, version control. ! (defconst ediff-version "2.54" "The current version of Ediff") ! (defconst ediff-date "February 14, 1996" "Date of last update") ;; This file is part of GNU Emacs. --- 7,13 ---- ;; Keywords: comparing, merging, patching, version control. ! (defconst ediff-version "2.61" "The current version of Ediff") ! (defconst ediff-date "June 10, 1996" "Date of last update") ! ;; This file is part of GNU Emacs. *************** *** 30,34 **** ;; Never read that diff output again! ! ;; Apply patch selectively, like a pro! ;; Merge with ease! --- 31,35 ---- ;; Never read that diff output again! ! ;; Apply patch interactively! ;; Merge with ease! *************** *** 59,63 **** ;; compressed files. Details are given below. ! ;; Finally, Ediff supports directory-level comparison and merging operations. ;; See the on-line manual for details. --- 60,64 ---- ;; compressed files. Details are given below. ! ;; Finally, Ediff supports directory-level comparison, merging and patching. ;; See the on-line manual for details. *************** *** 107,112 **** --- 108,120 ---- (require 'ediff-init) + ;; ediff-mult is always required, because of the registry stuff (require 'ediff-mult) + (eval-when-compile + (load "dired") + (load-file "./ediff-ptch.el") + (load-file "./ediff-vers.el") + (load "pcl-cvs" 'noerror)) + (defvar ediff-use-last-dir nil "*If t, Ediff uses previous directory as default when reading file name.") *************** *** 120,265 **** (defvar ediff-last-dir-ancestor nil "Last directory used by an Ediff command for the ancestor file.") - (defvar ediff-last-dir-patch nil - "Last directory used by an Ediff command for file to patch.") ! ;;; Patching - (defvar ediff-backup-extension - (if (memq system-type '(vax-vms axp-vms emx ms-dos windows-nt windows-95)) - "_orig" ".orig") - "Default backup extension for the patch program.") - ;;;###autoload - (defun ediff-patch-file (source-filename &optional startup-hooks job-name) - "Run Ediff by patching SOURCE-FILENAME." - ;; This now returns the control buffer - (interactive - (list (ediff-read-file-name - "File to patch" - (if ediff-use-last-dir - ediff-last-dir-patch - default-directory) - (ediff-get-default-file-name)))) - - (setq source-filename (expand-file-name source-filename)) - (ediff-get-patch-buffer - (if (eq job-name 'ediff-patch-buffer) - (ediff-eval-in-buffer (get-file-buffer source-filename) - default-directory) - (file-name-directory source-filename))) - - (let* ((backup-extension - ;; if the user specified a -b option, extract the backup - ;; extension from there; else use ediff-backup-extension - (substring ediff-patch-options - (if (string-match "-b[ \t]+" ediff-patch-options) - (match-end 0) 0) - (if (string-match "-b[ \t]+[^ \t]+" ediff-patch-options) - (match-end 0) 0))) - (shell-file-name ediff-shell) - ;; ediff-find-file may use a temp file to do the patch - ;; so, we save source-filename and true-source-filename as a var - ;; that initially is source-filename but may be changed to a temp - ;; file for the purpose of patching. - (true-source-filename source-filename) - (target-filename source-filename) - target-buf buf-to-patch file-name-magic-p ctl-buf backup-style) - - ;; if the user didn't specify a backup extension, use - ;; ediff-backup-extension - (if (string= backup-extension "") - (setq backup-extension ediff-backup-extension)) - (if (string-match "-V" ediff-patch-options) - (error - "Ediff doesn't take the -V option in `ediff-patch-options'--sorry")) - - ;; Make a temp file, if source-filename has a magic file handler (or if - ;; it is handled via auto-mode-alist and similar magic). - ;; Check if there is a buffer visiting source-filename and if they are in - ;; sync; arrange for the deletion of temp file. - (ediff-find-file 'true-source-filename 'buf-to-patch - 'ediff-last-dir-patch 'startup-hooks) - - ;; Check if source file name has triggered black magic, such as file name - ;; handlers or auto mode alist, and make a note of it. - ;; true-source-filename should be either the original name or a - ;; temporary file where we put the after-product of the file handler. - (setq file-name-magic-p (not (equal (file-truename true-source-filename) - (file-truename source-filename)))) - - ;; Checkout orig file, if necessary, so that the patched file could be - ;; checked back in. - (if (ediff-file-checked-in-p (buffer-file-name buf-to-patch)) - (ediff-toggle-read-only buf-to-patch)) - - (ediff-eval-in-buffer ediff-patch-diagnostics - (message "Applying patch ... ") - ;; fix environment for gnu patch, so it won't make numbered extensions - (setq backup-style (getenv "VERSION_CONTROL")) - (setenv "VERSION_CONTROL" nil) - ;; always pass patch the -f option, so it won't ask any questions - (shell-command-on-region - (point-min) (point-max) - (format "%s -f %s -b %s %s" - ediff-patch-program ediff-patch-options - backup-extension - (expand-file-name true-source-filename)) - t) - ;; restore environment for gnu patch - (setenv "VERSION_CONTROL" backup-style)) - ;;(message "Applying patch ... done")(sit-for 0) - (switch-to-buffer ediff-patch-diagnostics) - (sit-for 0) ; synchronize - let the user see diagnostics - - (or (file-exists-p (concat true-source-filename backup-extension)) - (error "Patch failed or didn't modify the original file")) - - ;; If black magic is involved, apply patch to a temp copy of the - ;; file. Otherwise, apply patch to the orig copy. If patch is applied - ;; to temp copy, we name the result old-name_patched for local files - ;; and temp-copy_patched for remote files. The orig file name isn't - ;; changed, and the temp copy of the original is later deleted. - ;; Without magic, the original file is renamed (usually into - ;; old-name_orig) and the result of patching will have the same name as - ;; the original. - (if (not file-name-magic-p) - (ediff-eval-in-buffer buf-to-patch - (set-visited-file-name (concat source-filename backup-extension)) - (set-buffer-modified-p nil)) - - ;; Black magic in effect. - ;; If orig file was remote, put the patched file in the temp directory. - ;; If orig file is local, put the patched file in the directory of - ;; the orig file. - (setq target-filename - (concat - (if (ediff-file-remote-p (file-truename source-filename)) - true-source-filename - source-filename) - "_patched")) - - (rename-file true-source-filename target-filename t) - - ;; arrange that the temp copy of orig will be deleted - (rename-file (concat true-source-filename backup-extension) - true-source-filename t)) - - ;; make orig buffer read-only - (setq startup-hooks - (cons 'ediff-set-read-only-in-buf-A startup-hooks)) - - ;; set up a buf for the patched file - (setq target-buf (find-file-noselect target-filename)) - - (setq ctl-buf - (ediff-buffers-internal - buf-to-patch target-buf nil - startup-hooks (or job-name 'ediff-patch-file))) - - (bury-buffer ediff-patch-diagnostics) - (message "Patch diagnostics are available in buffer %s" - (buffer-name ediff-patch-diagnostics)) - ctl-buf)) - ;; Used as a startup hook to set `_orig' patch file read-only. (defun ediff-set-read-only-in-buf-A () --- 128,139 ---- (defvar ediff-last-dir-ancestor nil "Last directory used by an Ediff command for the ancestor file.") ! ;; Some defvars to reduce the number of compiler warnings ! (defvar cvs-cookie-handle) ! (defvar ediff-last-dir-patch) ! (defvar ediff-patch-default-directory) ! ;; end of compiler pacifier ;; Used as a startup hook to set `_orig' patch file read-only. (defun ediff-set-read-only-in-buf-A () *************** *** 279,287 **** )) - ;;;###autoload - (defalias 'epatch 'ediff-patch-file) - ;;;###autoload - (defalias 'epatch-buffer 'ediff-patch-buffer) - ;;; Compare files/buffers --- 153,156 ---- *************** *** 466,472 **** (ediff-other-buffer bf)) t)))) - (or job-name (setq job-name 'ediff-buffers)) (ediff-buffers-internal buffer-A buffer-B nil startup-hooks job-name)) ;;;###autoload --- 335,344 ---- (ediff-other-buffer bf)) t)))) (or job-name (setq job-name 'ediff-buffers)) (ediff-buffers-internal buffer-A buffer-B nil startup-hooks job-name)) + + ;;;###autoload + (defalias 'ebuffers 'ediff-buffers) + ;;;###autoload *************** *** 493,499 **** t) ))) - (or job-name (setq job-name 'ediff-buffers3)) (ediff-buffers-internal buffer-A buffer-B buffer-C startup-hooks job-name)) --- 365,373 ---- t) ))) (or job-name (setq job-name 'ediff-buffers3)) (ediff-buffers-internal buffer-A buffer-B buffer-C startup-hooks job-name)) + + ;;;###autoload + (defalias 'ebuffers3 'ediff-buffers3) *************** *** 560,569 **** "Run Ediff on a pair of directories, DIR1 and DIR2, comparing files that have the same name in both. The third argument, REGEXP, is a regular expression that ! further filters the file names." (interactive (let ((dir-A (ediff-get-default-directory-name)) f) ! (list (setq f (ediff-read-file-name "Directory A to compare" dir-A nil)) ! (ediff-read-file-name "Directory B to compare" (if ediff-use-last-dir ediff-last-dir-B --- 434,443 ---- "Run Ediff on a pair of directories, DIR1 and DIR2, comparing files that have the same name in both. The third argument, REGEXP, is a regular expression that ! can be used to filter out certain file names." (interactive (let ((dir-A (ediff-get-default-directory-name)) f) ! (list (setq f (ediff-read-file-name "Directory A to compare:" dir-A nil)) ! (ediff-read-file-name "Directory B to compare:" (if ediff-use-last-dir ediff-last-dir-B *************** further filters the file names." *** 571,575 **** nil) (read-string "Filter through regular expression: " ! nil ediff-filtering-regexp-history) ))) (ediff-directories-internal --- 445,449 ---- nil) (read-string "Filter through regular expression: " ! nil 'ediff-filtering-regexp-history) ))) (ediff-directories-internal *************** names. Only the files that are under rev *** 589,595 **** (let ((dir-A (ediff-get-default-directory-name))) (list (ediff-read-file-name ! "Directory to compare with revision" dir-A nil) (read-string "Filter through regular expression: " ! nil ediff-filtering-regexp-history) ))) (ediff-directory-revisions-internal --- 463,469 ---- (let ((dir-A (ediff-get-default-directory-name))) (list (ediff-read-file-name ! "Directory to compare with revision:" dir-A nil) (read-string "Filter through regular expression: " ! nil 'ediff-filtering-regexp-history) ))) (ediff-directory-revisions-internal *************** names. Only the files that are under rev *** 605,619 **** "Run Ediff on three directories, DIR1, DIR2, and DIR3, comparing files that have the same name in all three. The last argument, REGEXP, is a regular ! expression that further filters the file names." (interactive (let ((dir-A (ediff-get-default-directory-name)) f) ! (list (setq f (ediff-read-file-name "Directory A to compare" dir-A nil)) ! (setq f (ediff-read-file-name "Directory B to compare" (if ediff-use-last-dir ediff-last-dir-B (ediff-strip-last-dir f)) nil)) ! (ediff-read-file-name "Directory C to compare" (if ediff-use-last-dir ediff-last-dir-C --- 479,493 ---- "Run Ediff on three directories, DIR1, DIR2, and DIR3, comparing files that have the same name in all three. The last argument, REGEXP, is a regular ! expression that can be used to filter out certain file names." (interactive (let ((dir-A (ediff-get-default-directory-name)) f) ! (list (setq f (ediff-read-file-name "Directory A to compare:" dir-A nil)) ! (setq f (ediff-read-file-name "Directory B to compare:" (if ediff-use-last-dir ediff-last-dir-B (ediff-strip-last-dir f)) nil)) ! (ediff-read-file-name "Directory C to compare:" (if ediff-use-last-dir ediff-last-dir-C *************** expression that further filters the file *** 621,625 **** nil) (read-string "Filter through regular expression: " ! nil ediff-filtering-regexp-history) ))) (ediff-directories-internal --- 495,499 ---- nil) (read-string "Filter through regular expression: " ! nil 'ediff-filtering-regexp-history) ))) (ediff-directories-internal *************** expression that further filters the file *** 634,643 **** "Run Ediff on a pair of directories, DIR1 and DIR2, merging files that have the same name in both. The third argument, REGEXP, is a regular expression that ! further filters the file names." (interactive (let ((dir-A (ediff-get-default-directory-name)) f) ! (list (setq f (ediff-read-file-name "Directory A to merge" dir-A nil)) ! (ediff-read-file-name "Directory B to merge" (if ediff-use-last-dir ediff-last-dir-B --- 508,517 ---- "Run Ediff on a pair of directories, DIR1 and DIR2, merging files that have the same name in both. The third argument, REGEXP, is a regular expression that ! can be used to filter out certain file names." (interactive (let ((dir-A (ediff-get-default-directory-name)) f) ! (list (setq f (ediff-read-file-name "Directory A to merge:" dir-A nil)) ! (ediff-read-file-name "Directory B to merge:" (if ediff-use-last-dir ediff-last-dir-B *************** further filters the file names." *** 645,649 **** nil) (read-string "Filter through regular expression: " ! nil ediff-filtering-regexp-history) ))) (ediff-directories-internal --- 519,523 ---- nil) (read-string "Filter through regular expression: " ! nil 'ediff-filtering-regexp-history) ))) (ediff-directories-internal *************** further filters the file names." *** 655,672 **** ;;;###autoload ! (defun ediff-merge-directories-with-ancestor (dir1 dir2 dir3 regexp) ! "Run Ediff on a pair of directories, DIR1 and DIR2, merging files that have ! the same name in both. The third argument, REGEXP, is a regular expression that ! further filters the file names." (interactive (let ((dir-A (ediff-get-default-directory-name)) f) ! (list (setq f (ediff-read-file-name "Directory A to merge" dir-A nil)) ! (setq f (ediff-read-file-name "Directory B to merge" (if ediff-use-last-dir ediff-last-dir-B (ediff-strip-last-dir f)) nil)) ! (ediff-read-file-name "Ancestor directory: " (if ediff-use-last-dir ediff-last-dir-C --- 529,548 ---- ;;;###autoload ! (defun ediff-merge-directories-with-ancestor (dir1 dir2 ancestor-dir regexp) ! "Merge files in directories DIR1 and DIR2 using files in ANCESTOR-DIR as ancestors. ! Ediff merges files that have identical names in DIR1, DIR2. If a pair of files ! in DIR1 and DIR2 doesn't have an ancestor in ANCESTOR-DIR, Ediff will merge ! without ancestor. The fourth argument, REGEXP, is a regular expression that ! can be used to filter out certain file names." (interactive (let ((dir-A (ediff-get-default-directory-name)) f) ! (list (setq f (ediff-read-file-name "Directory A to merge:" dir-A nil)) ! (setq f (ediff-read-file-name "Directory B to merge:" (if ediff-use-last-dir ediff-last-dir-B (ediff-strip-last-dir f)) nil)) ! (ediff-read-file-name "Ancestor directory:" (if ediff-use-last-dir ediff-last-dir-C *************** further filters the file names." *** 674,681 **** nil) (read-string "Filter through regular expression: " ! nil ediff-filtering-regexp-history) ))) (ediff-directories-internal ! dir1 dir2 dir3 regexp 'ediff-merge-files-with-ancestor 'ediff-merge-directories-with-ancestor )) --- 550,557 ---- nil) (read-string "Filter through regular expression: " ! nil 'ediff-filtering-regexp-history) ))) (ediff-directories-internal ! dir1 dir2 ancestor-dir regexp 'ediff-merge-files-with-ancestor 'ediff-merge-directories-with-ancestor )) *************** names. Only the files that are under rev *** 689,695 **** (let ((dir-A (ediff-get-default-directory-name))) (list (ediff-read-file-name ! "Directory to merge with revisions" dir-A nil) (read-string "Filter through regular expression: " ! nil ediff-filtering-regexp-history) ))) (ediff-directory-revisions-internal --- 565,571 ---- (let ((dir-A (ediff-get-default-directory-name))) (list (ediff-read-file-name ! "Directory to merge with revisions:" dir-A nil) (read-string "Filter through regular expression: " ! nil 'ediff-filtering-regexp-history) ))) (ediff-directory-revisions-internal *************** names. Only the files that are under rev *** 708,714 **** (let ((dir-A (ediff-get-default-directory-name))) (list (ediff-read-file-name ! "Directory to merge with revisions and ancestors" dir-A nil) (read-string "Filter through regular expression: " ! nil ediff-filtering-regexp-history) ))) (ediff-directory-revisions-internal --- 584,590 ---- (let ((dir-A (ediff-get-default-directory-name))) (list (ediff-read-file-name ! "Directory to merge with revisions and ancestors:" dir-A nil) (read-string "Filter through regular expression: " ! nil 'ediff-filtering-regexp-history) ))) (ediff-directory-revisions-internal *************** names. Only the files that are under rev *** 727,732 **** ;; Run ediff-action (ediff-files, ediff-merge, ediff-merge-with-ancestors) ;; on a pair of directories (three directories, in case of ancestor). ! ;; The third argument, REGEXP, is a regular expression that further filters the ! ;; file names. ;; JOBNAME is the symbol indicating the meta-job to be performed. (defun ediff-directories-internal (dir1 dir2 dir3 regexp --- 603,608 ---- ;; Run ediff-action (ediff-files, ediff-merge, ediff-merge-with-ancestors) ;; on a pair of directories (three directories, in case of ancestor). ! ;; The third argument, REGEXP, is a regular expression that can be used to ! ;; filter out certain file names. ;; JOBNAME is the symbol indicating the meta-job to be performed. (defun ediff-directories-internal (dir1 dir2 dir3 regexp *************** names. Only the files that are under rev *** 764,768 **** startup-hooks)) (setq meta-buf (ediff-prepare-meta-buffer ! 'ediff-dir-action file-list "*Ediff Session Group Panel" --- 640,644 ---- startup-hooks)) (setq meta-buf (ediff-prepare-meta-buffer ! 'ediff-filegroup-action file-list "*Ediff Session Group Panel" *************** names. Only the files that are under rev *** 788,792 **** startup-hooks)) (setq meta-buf (ediff-prepare-meta-buffer ! 'ediff-dir-action file-list "*Ediff Session Group Panel" --- 664,668 ---- startup-hooks)) (setq meta-buf (ediff-prepare-meta-buffer ! 'ediff-filegroup-action file-list "*Ediff Session Group Panel" *************** file and then run `run-ediff-from-cvs-bu *** 1226,1291 **** ;;; Apply patch - - ;;;###autoload - (defun ediff-patch-buffer (buffer-name &optional startup-hooks) - "Run Ediff by patching BUFFER-NAME." - (interactive "bBuffer to patch: ") - - (let* ((buf-to-patch (get-buffer buffer-name)) - (file-name-ok (if buf-to-patch (buffer-file-name buf-to-patch))) - (buf-mod-status (buffer-modified-p buf-to-patch)) - default-dir file-name ctl-buf) - (if file-name-ok - (setq file-name file-name-ok) - (ediff-eval-in-buffer buffer-name - (setq default-dir default-directory) - (setq file-name (ediff-make-temp-file buffer-name)) - (set-visited-file-name file-name) - (setq buffer-auto-save-file-name nil) ; don't create auto-save file - (rename-buffer buffer-name) ; don't confuse the user with new buf name - (set-buffer-modified-p nil) - (set-visited-file-modtime) ; sync buffer and temp file - (setq default-directory default-dir) - )) - - (setq ctl-buf - (ediff-patch-file file-name startup-hooks 'ediff-patch-buffer)) - - (if file-name-ok - () - (ediff-eval-in-buffer ctl-buf - (delete-file (buffer-file-name ediff-buffer-A)) - (delete-file (buffer-file-name ediff-buffer-B)) - (ediff-eval-in-buffer ediff-buffer-A - (if default-dir (setq default-directory default-dir)) - (set-visited-file-name nil) - (rename-buffer buffer-name) - (set-buffer-modified-p buf-mod-status)) - (ediff-eval-in-buffer ediff-buffer-B - (setq buffer-auto-save-file-name nil) ; don't create auto-save file - (if default-dir (setq default-directory default-dir)) - (set-visited-file-name nil) - (rename-buffer (ediff-unique-buffer-name - (concat buffer-name "_patched") "")) - (set-buffer-modified-p t)))) - )) ! (defun ediff-get-patch-buffer (dir) ! "Obtain patch buffer. If patch is already in a buffer---use it. ! Else, read patch file into a new buffer." ! (if (y-or-n-p "Is the patch file already in a buffer? ") ! (setq ediff-patch-buf ! (get-buffer (read-buffer "Patch buffer name: " nil t))) ;must match ! (setq ediff-patch-buf ! (find-file-noselect (read-file-name "Patch file name: " dir)))) ! (setq ediff-patch-diagnostics ! (get-buffer-create "*ediff patch diagnostics*")) ! (ediff-eval-in-buffer ediff-patch-diagnostics ! (insert-buffer ediff-patch-buf))) - --- 1102,1147 ---- ;;; Apply patch + ;;;###autoload + (defun ediff-patch-file () + "Run Ediff by patching SOURCE-FILENAME." + ;; This now returns the control buffer + (interactive) + (let (source-dir source-file patch-buf) + (require 'ediff-ptch) + (setq patch-buf (ediff-get-patch-buffer)) + (setq source-dir (cond (ediff-use-last-dir ediff-last-dir-patch) + ((and (not ediff-patch-default-directory) + (buffer-file-name patch-buf)) + (file-name-directory + (expand-file-name + (buffer-file-name patch-buf)))) + (t default-directory))) + (setq source-file + ;; the default is the directory, not the visited file name + (ediff-read-file-name "Which file to patch? " source-dir source-dir)) + (ediff-dispatch-file-patching-job patch-buf source-file))) ! ;;;###autoload ! (defun ediff-patch-buffer () ! "Run Ediff by patching BUFFER-NAME." ! (interactive) ! (let (patch-buf) ! (require 'ediff-ptch) ! (setq patch-buf (ediff-get-patch-buffer)) ! (ediff-patch-buffer-internal ! patch-buf ! (read-buffer "Which buffer to patch? " ! (cond ((eq patch-buf (current-buffer)) ! (window-buffer (other-window 1))) ! (t (current-buffer))) ! 'must-match)))) ! ;;;###autoload ! (defalias 'epatch 'ediff-patch-file) ! ;;;###autoload ! (defalias 'epatch-buffer 'ediff-patch-buffer) *************** When called interactively, displays the *** 1344,1348 **** ;;;###autoload (defun ediff-documentation () ! "Jump to Ediff's Info file." (interactive) (let ((ctl-window ediff-control-window) --- 1200,1204 ---- ;;;###autoload (defun ediff-documentation () ! "Display Ediff's manual." (interactive) (let ((ctl-window ediff-control-window) *************** When called interactively, displays the *** 1356,1360 **** (message "Type `i' to search for a specific topic")) (error (beep 1) ! (with-output-to-temp-buffer " *ediff-info*" (princ (format " The Info file for Ediff does not seem to be installed. --- 1212,1216 ---- (message "Type `i' to search for a specific topic")) (error (beep 1) ! (with-output-to-temp-buffer ediff-msg-buffer (princ (format " The Info file for Ediff does not seem to be installed. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/ehelp.el emacs-19.32/lisp/ehelp.el *** emacs-19.31/lisp/ehelp.el Fri Apr 5 11:04:11 1996 --- emacs-19.32/lisp/ehelp.el Fri May 31 11:32:33 1996 *************** will select it.)" *** 261,266 **** ;;;###autoload ! (defun electric-helpify (fun) ! (let ((name "*Help*")) (if (save-window-excursion ;; kludge-o-rama --- 261,266 ---- ;;;###autoload ! (defun electric-helpify (fun &optional name) ! (let ((name (or name "*Help*"))) (if (save-window-excursion ;; kludge-o-rama *************** will select it.)" *** 364,368 **** (defun electric-command-apropos () (interactive) ! (electric-helpify 'command-apropos)) ;(define-key help-map "a" 'electric-command-apropos) --- 364,368 ---- (defun electric-command-apropos () (interactive) ! (electric-helpify 'command-apropos "*Apropos*")) ;(define-key help-map "a" 'electric-command-apropos) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/emerge.el emacs-19.32/lisp/emerge.el *** emacs-19.31/lisp/emerge.el Sun Feb 25 17:46:32 1996 --- emacs-19.32/lisp/emerge.el Tue Jul 30 16:02:12 1996 *************** This is *not* a user option, since Emerg *** 859,868 **** (emerge-read-file-name "Output file" emerge-last-dir-output f f nil))))) (emerge-files-internal file-A file-B startup-hooks ! (if file-out ! (cons (` (lambda () (emerge-files-exit (, file-out)))) ! quit-hooks) ! quit-hooks) file-out)) --- 859,867 ---- (emerge-read-file-name "Output file" emerge-last-dir-output f f nil))))) + (if file-out + (add-hook 'quit-hooks (` (lambda () (emerge-files-exit (, file-out)))))) (emerge-files-internal file-A file-B startup-hooks ! quit-hooks file-out)) *************** This is *not* a user option, since Emerg *** 882,891 **** (emerge-read-file-name "Output file" emerge-last-dir-output f f nil))))) (emerge-files-with-ancestor-internal file-A file-B file-ancestor startup-hooks ! (if file-out ! (cons (` (lambda () (emerge-files-exit (, file-out)))) ! quit-hooks) ! quit-hooks) file-out)) --- 881,889 ---- (emerge-read-file-name "Output file" emerge-last-dir-output f f nil))))) + (if file-out + (add-hook 'quit-hooks (` (lambda () (emerge-files-exit (, file-out)))))) (emerge-files-with-ancestor-internal file-A file-B file-ancestor startup-hooks ! quit-hooks file-out)) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/etags.el emacs-19.32/lisp/etags.el *** emacs-19.31/lisp/etags.el Mon May 6 20:04:25 1996 --- emacs-19.32/lisp/etags.el Tue Jul 23 18:32:48 1996 *************** Pop back to the last location with \\[ne *** 101,108 **** ;; These variables are local in tags table buffers. - (defvar tag-lines-already-matched nil - "List of positions of beginnings of lines within the tags table - that are already matched.") - (defvar tags-table-files nil "List of file names covered by current tags table. --- 101,104 ---- *************** One argument, the tag info returned by ` *** 165,169 **** ;; made buffer-local and initialized to nil. (defun initialize-new-tags-table () - (set (make-local-variable 'tag-lines-already-matched) nil) (set (make-local-variable 'tags-table-files) nil) (set (make-local-variable 'tags-completion-table) nil) --- 161,164 ---- *************** See documentation of variable `tags-file *** 877,880 **** --- 872,877 ---- ;; avoid repetition. State is saved so that the loop can be continued. + (defvar tag-lines-already-matched nil) ;matches remembered here between calls + (defun find-tag-in-order (pattern search-forward-func *************** See documentation of variable `tags-file *** 887,895 **** (first-table t) (tag-order order) goto-func ) (save-excursion ! (or first-search ;find-tag-noselect has already done it. ! (visit-tags-table-buffer 'same)) ;; Get a qualified match. --- 884,904 ---- (first-table t) (tag-order order) + (match-marker (make-marker)) goto-func ) (save-excursion ! ! (if first-search ! ;; This is the start of a search for a fresh tag. ! ;; Clear the list of tags matched by the previous search. ! ;; find-tag-noselect has already put us in the first tags table ! ;; buffer before we got called. ! (setq tag-lines-already-matched nil) ! ;; Continuing to search for the tag specified last time. ! ;; tag-lines-already-matched lists locations matched in previous ! ;; calls so we don't visit the same tag twice if it matches twice ! ;; during two passes with different qualification predicates. ! ;; Switch to the current tags table buffer. ! (visit-tags-table-buffer 'same)) ;; Get a qualified match. *************** See documentation of variable `tags-file *** 900,906 **** (visit-tags-table-buffer t)) - (if first-search - (setq tag-lines-already-matched nil)) - (and first-search first-table ;; Start at beginning of tags file. --- 909,912 ---- *************** See documentation of variable `tags-file *** 915,921 **** (and (funcall (car order) pattern) ;; Make sure it is not a previous qualified match. ! ;; Use of `memq' depends on numbers being eq. ! (not (memq (save-excursion (beginning-of-line) (point)) ! tag-lines-already-matched)) (throw 'qualified-match-found nil)) (if next-line-after-failure-p --- 921,928 ---- (and (funcall (car order) pattern) ;; Make sure it is not a previous qualified match. ! (not (member (set-marker match-marker (save-excursion ! (beginning-of-line) ! (point))) ! tag-lines-already-matched)) (throw 'qualified-match-found nil)) (if next-line-after-failure-p *************** See documentation of variable `tags-file *** 926,929 **** --- 933,942 ---- (setq order tag-order)) ;; We throw out on match, so only get here if there were no matches. + ;; Clear out the markers we use to avoid duplicate matches so they + ;; don't slow down editting and are immediately available for GC. + (while tag-lines-already-matched + (set-marker (car tag-lines-already-matched) nil nil) + (setq tag-lines-already-matched (cdr tag-lines-already-matched))) + (set-marker match-marker nil nil) (error "No %stags %s %s" (if first-search "" "more ") matching pattern)) *************** See documentation of variable `tags-file *** 931,935 **** ;; Found a tag; extract location info. (beginning-of-line) ! (setq tag-lines-already-matched (cons (point) tag-lines-already-matched)) ;; Expand the filename, using the tags table buffer's default-directory. --- 944,948 ---- ;; Found a tag; extract location info. (beginning-of-line) ! (setq tag-lines-already-matched (cons match-marker tag-lines-already-matched)) ;; Expand the filename, using the tags table buffer's default-directory. *************** See documentation of variable `tags-file *** 1063,1071 **** (defun etags-goto-tag-location (tag-info) (let ((startpos (cdr (cdr tag-info))) offset found pat) (if (eq (car tag-info) t) ;; Direct file tag. (cond (line (goto-line line)) ! (position (goto-char position)) (t (error "etags.el BUG: bogus direct file tag"))) ;; This constant is 1/2 the initial search window. --- 1076,1085 ---- (defun etags-goto-tag-location (tag-info) (let ((startpos (cdr (cdr tag-info))) + (line (car (cdr tag-info))) offset found pat) (if (eq (car tag-info) t) ;; Direct file tag. (cond (line (goto-line line)) ! (startpos (goto-char startpos)) (t (error "etags.el BUG: bogus direct file tag"))) ;; This constant is 1/2 the initial search window. *************** See documentation of variable `tags-file *** 1083,1088 **** ;; If no char pos was given, try the given line number. (or startpos ! (if (car (cdr tag-info)) ! (setq startpos (progn (goto-line (car (cdr tag-info))) (point))))) (or startpos --- 1097,1102 ---- ;; If no char pos was given, try the given line number. (or startpos ! (if line ! (setq startpos (progn (goto-line line) (point))))) (or startpos *************** See documentation of variable `tags-file *** 1120,1124 **** (princ (if (looking-at "[^\n]+\001") ;; There is an explicit tag name; use that. ! (buffer-substring (point) (progn (skip-chars-forward "^\001") (point))) --- 1134,1138 ---- (princ (if (looking-at "[^\n]+\001") ;; There is an explicit tag name; use that. ! (buffer-substring (1+ (point)) ;skip \177 (progn (skip-chars-forward "^\001") (point))) *************** See documentation of variable `tags-file *** 1222,1231 **** (defun tag-word-match-p (tag) (and (looking-at "\\b.*\177") ! (save-excursion (backward-char (1+ (length tag))) (looking-at "\\b")))) (defun tag-exact-file-name-match-p (tag) (and (looking-at ",") ! (save-excursion (backward-char (1+ (length tag))) (looking-at "\f\n")))) --- 1236,1245 ---- (defun tag-word-match-p (tag) (and (looking-at "\\b.*\177") ! (save-excursion (backward-char (length tag)) (looking-at "\\b")))) (defun tag-exact-file-name-match-p (tag) (and (looking-at ",") ! (save-excursion (backward-char (length tag)) (looking-at "\f\n")))) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/executable.el emacs-19.32/lisp/executable.el *** emacs-19.31/lisp/executable.el Fri Mar 1 00:26:23 1996 --- emacs-19.32/lisp/executable.el Sun Jul 21 15:48:54 1996 *************** See `compilation-error-regexp-alist'.") *** 120,125 **** ;; The C function openp slightly modified would do the trick fine (defun executable-find (command) ! "Search for COMMAND in $PATH and return the absolute file name. ! Return nil if COMMAND is not found anywhere in $PATH." (let ((list exec-path) file) --- 120,125 ---- ;; The C function openp slightly modified would do the trick fine (defun executable-find (command) ! "Search for COMMAND in exec-path and return the absolute file name. ! Return nil if COMMAND is not found anywhere in `exec-path'." (let ((list exec-path) file) *************** executable." *** 198,219 **** (if (looking-at "#![ \t]*\\(.*\\)$") (and (goto-char (match-beginning 1)) (not (string= argument (buffer-substring (point) (match-end 1)))) ! (or (not executable-query) no-query-flag ! (save-window-excursion ! ;; Make buffer visible before question. ! (switch-to-buffer (current-buffer)) ! (y-or-n-p (concat "Replace magic number by `" ! executable-prefix argument "'? ")))) ! (progn ! (replace-match argument t t nil 1) ! (message "Magic number changed to `%s'" ! (concat executable-prefix argument)))) (insert executable-prefix argument ?\n) (message "Magic number changed to `%s'" (concat executable-prefix argument))) ! (or insert-flag ! (eq executable-insert t) ! (set-buffer-modified-p buffer-modified-p))))) interpreter) --- 198,223 ---- (if (looking-at "#![ \t]*\\(.*\\)$") (and (goto-char (match-beginning 1)) + ;; If the line ends in a space, + ;; don't offer to change it. + (not (= (char-after (1- (match-end 1))) ?\ )) (not (string= argument (buffer-substring (point) (match-end 1)))) ! (if (or (not executable-query) no-query-flag ! (save-window-excursion ! ;; Make buffer visible before question. ! (switch-to-buffer (current-buffer)) ! (y-or-n-p (concat "Replace magic number by `" ! executable-prefix argument "'? ")))) ! (progn ! (replace-match argument t t nil 1) ! (message "Magic number changed to `%s'" ! (concat executable-prefix argument))))) (insert executable-prefix argument ?\n) (message "Magic number changed to `%s'" (concat executable-prefix argument))) ! ;;; (or insert-flag ! ;;; (eq executable-insert t) ! ;;; (set-buffer-modified-p buffer-modified-p)) ! ))) interpreter) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/facemenu.el emacs-19.32/lisp/facemenu.el *** emacs-19.31/lisp/facemenu.el Wed Mar 27 23:39:44 1996 --- emacs-19.32/lisp/facemenu.el Fri Jun 7 20:55:31 1996 *************** Automatically called when a new face is *** 633,637 **** (defun facemenu-complete-face-list (&optional oldlist) ! "Return list of all faces that are look different. Starts with given ALIST of faces, and adds elements only if they display differently from any face already on the list. --- 633,637 ---- (defun facemenu-complete-face-list (&optional oldlist) ! "Return list of all faces that look different. Starts with given ALIST of faces, and adds elements only if they display differently from any face already on the list. diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/faces.el emacs-19.32/lisp/faces.el *** emacs-19.31/lisp/faces.el Mon Mar 25 10:09:30 1996 --- emacs-19.32/lisp/faces.el Sat Jun 22 12:50:08 1996 *************** selected frame." *** 1102,1106 **** (cdr (assq 'background-color params)) frame)) ! (/ (apply '+ (x-color-values "white" frame)) 3)) 'dark) (t 'light))) --- 1102,1109 ---- (cdr (assq 'background-color params)) frame)) ! ;; Just looking at the screen, ! ;; colors whose values add up to .6 of the white total ! ;; still look dark to me. ! (* (apply '+ (x-color-values "white" frame)) .6)) 'dark) (t 'light))) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/fast-lock.el emacs-19.32/lisp/fast-lock.el *** emacs-19.31/lisp/fast-lock.el Fri Jan 26 03:26:26 1996 --- emacs-19.32/lisp/fast-lock.el Mon Jun 24 03:44:07 1996 *************** *** 5,9 **** ;; Author: Simon Marshall ;; Keywords: faces files ! ;; Version: 3.09 ;;; This file is part of GNU Emacs. --- 5,9 ---- ;; Author: Simon Marshall ;; Keywords: faces files ! ;; Version: 3.10 ;;; This file is part of GNU Emacs. *************** *** 38,42 **** ;; Put in your ~/.emacs: ;; ! ;; (add-hook 'font-lock-mode-hook 'turn-on-fast-lock) ;; ;; Start up a new Emacs and use font-lock as usual (except that you can use the --- 38,42 ---- ;; Put in your ~/.emacs: ;; ! ;; (setq font-lock-support-mode 'fast-lock-mode) ;; ;; Start up a new Emacs and use font-lock as usual (except that you can use the *************** *** 153,165 **** ;; - Made `fast-lock-read-cache' set `fast-lock-cache-filename' ;; 3.08--3.09: ! ;; - Made `fast-lock-save-cache' cope if `fast-lock-minimum-size' is a list ;; - Made `fast-lock-mode' respect the value of `font-lock-inhibit-thing-lock' ;; - Added `fast-lock-after-unfontify-buffer' (require 'font-lock) (eval-when-compile ! ;; Shut Emacs' byte-compiler up (cf. stop me getting mail from users). ! (setq byte-compile-warnings '(free-vars callargs redefine))) (defun fast-lock-submit-bug-report () --- 153,194 ---- ;; - Made `fast-lock-read-cache' set `fast-lock-cache-filename' ;; 3.08--3.09: ! ;; - Made `fast-lock-save-cache' cope if `fast-lock-minimum-size' is an a list ;; - Made `fast-lock-mode' respect the value of `font-lock-inhibit-thing-lock' ;; - Added `fast-lock-after-unfontify-buffer' + ;; 3.09--3.10: + ;; - Rewrite for Common Lisp macros + ;; - Made fast-lock.el barf on a crap 8+3 pseudo-OS (Eli Zaretskii help) + ;; - XEmacs: Made `add-minor-mode' succeed `autoload' cookie + ;; - XEmacs: Made `fast-lock-save-faces' default to `font-lock-face-list' + ;; - Made `fast-lock-save-cache' use `font-lock-value-in-major-mode' + ;; - Wrap with `save-buffer-state' (Ray Van Tassle report) + ;; - Made `fast-lock-mode' wrap `font-lock-support-mode' (require 'font-lock) + ;; Make sure fast-lock.el is supported. + (if (and (eq system-type 'ms-dos) (not (msdos-long-file-names))) + (error "`fast-lock' was written for long file name systems")) + (eval-when-compile ! ;; ! ;; We don't do this at the top-level as we only use non-autoloaded macros. ! (require 'cl) ! ;; ! ;; I prefer lazy code---and lazy mode. ! (setq byte-compile-dynamic t byte-compile-dynamic-docstrings t) ! ;; ! ;; We use this to preserve or protect things when modifying text properties. ! (defmacro save-buffer-state (varlist &rest body) ! "Bind variables according to VARLIST and eval BODY restoring buffer state." ! (` (let* ((,@ (append varlist ! '((modified (buffer-modified-p)) ! (inhibit-read-only t) (buffer-undo-list t) ! before-change-functions after-change-functions ! deactivate-mark buffer-file-name buffer-file-truename)))) ! (,@ body) ! (when (and (not modified) (buffer-modified-p)) ! (set-buffer-modified-p nil))))) ! (put 'save-buffer-state 'lisp-indent-function 1)) (defun fast-lock-submit-bug-report () *************** *** 167,171 **** (interactive) (let ((reporter-prompt-for-summary-p t)) ! (reporter-submit-bug-report "simon@gnu.ai.mit.edu" "fast-lock 3.09" '(fast-lock-cache-directories fast-lock-minimum-size fast-lock-save-others fast-lock-save-events fast-lock-save-faces) --- 196,200 ---- (interactive) (let ((reporter-prompt-for-summary-p t)) ! (reporter-submit-bug-report "simon@gnu.ai.mit.edu" "fast-lock 3.10" '(fast-lock-cache-directories fast-lock-minimum-size fast-lock-save-others fast-lock-save-events fast-lock-save-faces) *************** Start a fresh Emacs via `" invocation-na *** 179,184 **** In the `*scratch*' buffer, evaluate:")))) ! ;;;###autoload ! (defvar fast-lock-mode nil) ; for modeline (defvar fast-lock-cache-timestamp nil) ; for saving/reading (defvar fast-lock-cache-filename nil) ; for deleting --- 208,212 ---- In the `*scratch*' buffer, evaluate:")))) ! (defvar fast-lock-mode nil) (defvar fast-lock-cache-timestamp nil) ; for saving/reading (defvar fast-lock-cache-filename nil) ; for deleting *************** In the `*scratch*' buffer, evaluate:"))) *** 189,193 **** ; - `internal', keep each file's Font Lock cache file in the same file. ; - `external', keep each file's Font Lock cache file in the same directory. ! "Directories in which Font Lock cache files are saved and read. Each item should be either DIR or a cons pair of the form (REGEXP . DIR) where DIR is a directory name (relative or absolute) and REGEXP is a regexp. --- 217,221 ---- ; - `internal', keep each file's Font Lock cache file in the same file. ; - `external', keep each file's Font Lock cache file in the same directory. ! "*Directories in which Font Lock cache files are saved and read. Each item should be either DIR or a cons pair of the form (REGEXP . DIR) where DIR is a directory name (relative or absolute) and REGEXP is a regexp. *************** home directory hierarchy, or otherwise t *** 207,221 **** (defvar fast-lock-minimum-size (* 25 1024) ! "If non-nil, the minimum size for buffers. Only buffers more than this can have associated Font Lock cache files saved. If nil, means cache files are never created. If a list, each element should be a cons pair of the form (MAJOR-MODE . SIZE), where MAJOR-MODE is a symbol or t (meaning the default). For example: ! ((c++-mode . 25600) (c-mode . 25600) (rmail-mode . 1048576)) ! means that the minimum size is 25K for buffers in `c++-mode' or `c-mode', one ! megabyte for buffers in `rmail-mode', and size is irrelevant otherwise.") (defvar fast-lock-save-events '(kill-buffer kill-emacs) ! "A list of events under which caches will be saved. Valid events are `save-buffer', `kill-buffer' and `kill-emacs'. If concurrent editing sessions use the same associated cache file for a file's --- 235,249 ---- (defvar fast-lock-minimum-size (* 25 1024) ! "*Minimum size of a buffer for cached fontification. Only buffers more than this can have associated Font Lock cache files saved. If nil, means cache files are never created. If a list, each element should be a cons pair of the form (MAJOR-MODE . SIZE), where MAJOR-MODE is a symbol or t (meaning the default). For example: ! ((c-mode . 25600) (c++-mode . 25600) (rmail-mode . 1048576)) ! means that the minimum size is 25K for buffers in C or C++ modes, one megabyte ! for buffers in Rmail mode, and size is irrelevant otherwise.") (defvar fast-lock-save-events '(kill-buffer kill-emacs) ! "*Events under which caches will be saved. Valid events are `save-buffer', `kill-buffer' and `kill-emacs'. If concurrent editing sessions use the same associated cache file for a file's *************** buffer, then you should add `save-buffer *** 223,241 **** (defvar fast-lock-save-others t ! "If non-nil, save Font Lock cache files irrespective of file owner. If nil, means only buffer files known to be owned by you can have associated Font Lock cache files saved. Ownership may be unknown for networked files.") (defvar fast-lock-save-faces ! ;; Since XEmacs uses extents for everything, we have to pick the right ones. ! ;; In XEmacs 19.13 we can't identify which text properties are Font Lock's. ! (if (save-match-data (string-match "XEmacs" (emacs-version))) ! '(font-lock-string-face font-lock-doc-string-face font-lock-type-face ! font-lock-function-name-face font-lock-comment-face ! font-lock-keyword-face font-lock-reference-face ! font-lock-preprocessor-face) ! ;; For Emacs 19.30 I don't think this is generally necessary. ! nil) ! "A list of faces that will be saved in a Font Lock cache file. If nil, means information for all faces will be saved.") --- 251,263 ---- (defvar fast-lock-save-others t ! "*If non-nil, save Font Lock cache files irrespective of file owner. If nil, means only buffer files known to be owned by you can have associated Font Lock cache files saved. Ownership may be unknown for networked files.") (defvar fast-lock-save-faces ! (when (save-match-data (string-match "XEmacs" (emacs-version))) ! ;; XEmacs uses extents for everything, so we have to pick the right ones. ! font-lock-face-list) ! "Faces that will be saved in a Font Lock cache file. If nil, means information for all faces will be saved.") *************** With arg, turn Fast Lock mode on if and *** 248,252 **** is associated with a file. Enable it automatically in your `~/.emacs' by: ! (add-hook 'font-lock-mode-hook 'turn-on-fast-lock) If Fast Lock mode is enabled, and the current buffer does not contain any text --- 270,274 ---- is associated with a file. Enable it automatically in your `~/.emacs' by: ! (setq font-lock-support-mode 'fast-lock-mode) If Fast Lock mode is enabled, and the current buffer does not contain any text *************** Use \\[fast-lock-submit-bug-report] to s *** 277,289 **** (if arg (> (prefix-numeric-value arg) 0) (not fast-lock-mode)))) (if (and fast-lock-mode (not font-lock-mode)) ! ;; Turned on `fast-lock-mode' rather than using `font-lock-mode-hook'. ! (progn ! (add-hook 'font-lock-mode-hook 'turn-on-fast-lock) (font-lock-mode t)) ;; Let's get down to business. (set (make-local-variable 'fast-lock-cache-timestamp) nil) (set (make-local-variable 'fast-lock-cache-filename) nil) ! (if (and fast-lock-mode (not font-lock-fontified)) ! (fast-lock-read-cache)))) (defun fast-lock-read-cache () --- 299,310 ---- (if arg (> (prefix-numeric-value arg) 0) (not fast-lock-mode)))) (if (and fast-lock-mode (not font-lock-mode)) ! ;; Turned on `fast-lock-mode' rather than `font-lock-mode'. ! (let ((font-lock-support-mode 'fast-lock-mode)) (font-lock-mode t)) ;; Let's get down to business. (set (make-local-variable 'fast-lock-cache-timestamp) nil) (set (make-local-variable 'fast-lock-cache-filename) nil) ! (when (and fast-lock-mode (not font-lock-fontified)) ! (fast-lock-read-cache)))) (defun fast-lock-read-cache () *************** See `fast-lock-mode'." *** 306,316 **** (while (and directories (not font-lock-fontified)) (let ((directory (fast-lock-cache-directory (car directories) nil))) ! (if (not directory) ! nil ! (setq fast-lock-cache-filename (fast-lock-cache-name directory)) ! (condition-case nil ! (if (file-readable-p fast-lock-cache-filename) ! (load fast-lock-cache-filename t t t)) ! (error nil) (quit nil))) (setq directories (cdr directories)))) ;; Unset `fast-lock-cache-filename', and restore `font-lock-fontified', if --- 327,336 ---- (while (and directories (not font-lock-fontified)) (let ((directory (fast-lock-cache-directory (car directories) nil))) ! (condition-case nil ! (when directory ! (setq fast-lock-cache-filename (fast-lock-cache-name directory)) ! (when (file-readable-p fast-lock-cache-filename) ! (load fast-lock-cache-filename t t t))) ! (error nil) (quit nil)) (setq directories (cdr directories)))) ;; Unset `fast-lock-cache-filename', and restore `font-lock-fontified', if *************** See `fast-lock-mode'." *** 318,323 **** ;; of `fast-lock-cache-timestamp'.) (set-buffer-modified-p modified) ! (if (not font-lock-fontified) ! (setq fast-lock-cache-filename nil font-lock-fontified fontified)))) (defun fast-lock-save-cache (&optional buffer) --- 338,343 ---- ;; of `fast-lock-cache-timestamp'.) (set-buffer-modified-p modified) ! (unless font-lock-fontified ! (setq fast-lock-cache-filename nil font-lock-fontified fontified)))) (defun fast-lock-save-cache (&optional buffer) *************** See `fast-lock-mode'." *** 338,377 **** (interactive) (save-excursion ! (and buffer (set-buffer buffer)) ! (let ((min-size (if (not (consp fast-lock-minimum-size)) ! fast-lock-minimum-size ! (cdr (or (assq major-mode fast-lock-minimum-size) ! (assq t fast-lock-minimum-size))))) (file-timestamp (visited-file-modtime)) (saved nil)) ! (if (and fast-lock-mode ! ;; ! ;; "Only save if the buffer matches the file, the file has ! ;; changed, and it was changed by the current emacs session." ! ;; ! ;; Only save if the buffer is not modified, ! ;; (i.e., so we don't save for something not on disk) ! (not (buffer-modified-p)) ! ;; and the file's timestamp is the same as the buffer's, ! ;; (i.e., someone else hasn't written the file in the meantime) ! (verify-visited-file-modtime (current-buffer)) ! ;; and the file's timestamp is different from the cache's. ! ;; (i.e., a save has occurred since the cache was read) ! (not (equal fast-lock-cache-timestamp file-timestamp)) ! ;; ! ;; Only save if user's restrictions are satisfied. ! (and min-size (>= (buffer-size) min-size)) ! (or fast-lock-save-others ! (eq (user-uid) (nth 2 (file-attributes buffer-file-name)))) ! ;; ! ;; Only save if there are `face' properties to save. ! (text-property-not-all (point-min) (point-max) 'face nil)) ! ;; Try each directory until we manage to save or the user quits. ! (let ((directories fast-lock-cache-directories)) ! (while (and directories (memq saved '(nil error))) ! (let* ((dir (fast-lock-cache-directory (car directories) t)) ! (file (and dir (fast-lock-cache-name dir)))) ! (if (and file (file-writable-p file)) ! (setq saved (fast-lock-save-cache-1 file file-timestamp))) ! (setq directories (cdr directories))))))))) ;;;###autoload --- 358,396 ---- (interactive) (save-excursion ! (when buffer ! (set-buffer buffer)) ! (let ((min-size (font-lock-value-in-major-mode fast-lock-minimum-size)) (file-timestamp (visited-file-modtime)) (saved nil)) ! (when (and fast-lock-mode ! ;; ! ;; "Only save if the buffer matches the file, the file has ! ;; changed, and it was changed by the current emacs session." ! ;; ! ;; Only save if the buffer is not modified, ! ;; (i.e., so we don't save for something not on disk) ! (not (buffer-modified-p)) ! ;; and the file's timestamp is the same as the buffer's, ! ;; (i.e., someone else hasn't written the file in the meantime) ! (verify-visited-file-modtime (current-buffer)) ! ;; and the file's timestamp is different from the cache's. ! ;; (i.e., a save has occurred since the cache was read) ! (not (equal fast-lock-cache-timestamp file-timestamp)) ! ;; ! ;; Only save if user's restrictions are satisfied. ! (and min-size (>= (buffer-size) min-size)) ! (or fast-lock-save-others ! (eq (user-uid) (nth 2 (file-attributes buffer-file-name)))) ! ;; ! ;; Only save if there are `face' properties to save. ! (text-property-not-all (point-min) (point-max) 'face nil)) ! ;; ! ;; Try each directory until we manage to save or the user quits. ! (let ((directories fast-lock-cache-directories)) ! (while (and directories (memq saved '(nil error))) ! (let* ((dir (fast-lock-cache-directory (car directories) t)) ! (file (and dir (fast-lock-cache-name dir)))) ! (when (and file (file-writable-p file)) ! (setq saved (fast-lock-save-cache-1 file file-timestamp))) ! (setq directories (cdr directories))))))))) ;;;###autoload *************** See `fast-lock-mode'." *** 384,391 **** (defun fast-lock-after-fontify-buffer () ;; Delete the Font Lock cache file used to restore fontification, if any. ! (if fast-lock-cache-filename ! (if (file-writable-p fast-lock-cache-filename) ! (delete-file fast-lock-cache-filename) ! (message "File %s font lock cache cannot be deleted" (buffer-name)))) ;; Flag so that a cache will be saved later even if the file is never saved. (setq fast-lock-cache-timestamp nil)) --- 403,410 ---- (defun fast-lock-after-fontify-buffer () ;; Delete the Font Lock cache file used to restore fontification, if any. ! (when fast-lock-cache-filename ! (if (file-writable-p fast-lock-cache-filename) ! (delete-file fast-lock-cache-filename) ! (message "File %s font lock cache cannot be deleted" (buffer-name)))) ;; Flag so that a cache will be saved later even if the file is never saved. (setq fast-lock-cache-timestamp nil)) *************** See `fast-lock-mode'." *** 396,413 **** ;; Miscellaneous Functions: ! (defun fast-lock-after-save-hook () ;; Do `fast-lock-save-cache' if `save-buffer' is on `fast-lock-save-events'. ! (if (memq 'save-buffer fast-lock-save-events) ! (fast-lock-save-cache))) ! (defun fast-lock-kill-buffer-hook () ;; Do `fast-lock-save-cache' if `kill-buffer' is on `fast-lock-save-events'. ! (if (memq 'kill-buffer fast-lock-save-events) ! (fast-lock-save-cache))) ! (defun fast-lock-kill-emacs-hook () ;; Do `fast-lock-save-cache's if `kill-emacs' is on `fast-lock-save-events'. ! (if (memq 'kill-emacs fast-lock-save-events) ! (mapcar 'fast-lock-save-cache (buffer-list)))) (defun fast-lock-cache-directory (directory create) --- 415,432 ---- ;; Miscellaneous Functions: ! (defun fast-lock-save-cache-after-save-file () ;; Do `fast-lock-save-cache' if `save-buffer' is on `fast-lock-save-events'. ! (when (memq 'save-buffer fast-lock-save-events) ! (fast-lock-save-cache))) ! (defun fast-lock-save-cache-before-kill-buffer () ;; Do `fast-lock-save-cache' if `kill-buffer' is on `fast-lock-save-events'. ! (when (memq 'kill-buffer fast-lock-save-events) ! (fast-lock-save-cache))) ! (defun fast-lock-save-caches-before-kill-emacs () ;; Do `fast-lock-save-cache's if `kill-emacs' is on `fast-lock-save-events'. ! (when (memq 'kill-emacs fast-lock-save-events) ! (mapcar 'fast-lock-save-cache (buffer-list)))) (defun fast-lock-cache-directory (directory create) *************** See `fast-lock-cache-directories'." *** 427,432 **** (let ((bufile (expand-file-name buffer-file-truename)) (case-fold-search nil)) ! (if (save-match-data (string-match (car directory) bufile)) ! (cdr directory))))))) (cond ((not dir) nil) --- 446,451 ---- (let ((bufile (expand-file-name buffer-file-truename)) (case-fold-search nil)) ! (when (save-match-data (string-match (car directory) bufile)) ! (cdr directory))))))) (cond ((not dir) nil) *************** See `fast-lock-cache-directory'." *** 495,499 **** (error (setq saved 'error)) (quit (setq saved 'quit))) (kill-buffer tpbuf) ! (message "Saving %s font lock cache... %s." buname (cond ((eq saved 'error) "failed") ((eq saved 'quit) "aborted") --- 514,518 ---- (error (setq saved 'error)) (quit (setq saved 'quit))) (kill-buffer tpbuf) ! (message "Saving %s font lock cache...%s" buname (cond ((eq saved 'error) "failed") ((eq saved 'quit) "aborted") *************** See `fast-lock-cache-directory'." *** 505,509 **** &rest ignored) ;; Change from (HIGH LOW) for back compatibility. Remove for version 3! ! (if (consp (cdr-safe timestamp)) (setcdr timestamp (nth 1 timestamp))) ;; Compile KEYWORDS and `font-lock-keywords' in case one is and one isn't. (let ((current font-lock-keywords)) --- 524,529 ---- &rest ignored) ;; Change from (HIGH LOW) for back compatibility. Remove for version 3! ! (when (consp (cdr-safe timestamp)) ! (setcdr timestamp (nth 1 timestamp))) ;; Compile KEYWORDS and `font-lock-keywords' in case one is and one isn't. (let ((current font-lock-keywords)) *************** See `fast-lock-cache-directory'." *** 524,528 **** (fast-lock-set-face-properties properties) (error (setq loaded 'error)) (quit (setq loaded 'quit))) ! (message "Loading %s font lock cache... %s." buname (cond ((eq loaded 'error) "failed") ((eq loaded 'quit) "aborted") --- 544,548 ---- (fast-lock-set-face-properties properties) (error (setq loaded 'error)) (quit (setq loaded 'quit))) ! (message "Loading %s font lock cache...%s" buname (cond ((eq loaded 'error) "failed") ((eq loaded 'quit) "aborted") *************** Only those `face' VALUEs in `fast-lock-s *** 569,664 **** regions (cons start (cons end regions)))) ;; Add `face' face's regions, if any, to properties. ! (if regions (setq properties (cons (cons face regions) properties)))) properties))) (defun fast-lock-set-face-properties (properties) "Set all `face' text properties to PROPERTIES in the current buffer. ! Any existing `face' text properties are removed first. Leaves buffer modified. See `fast-lock-get-face-properties' for the format of PROPERTIES." ! (save-restriction ! (widen) ! (font-lock-unfontify-region (point-min) (point-max)) ! (while properties ! (let ((plist (list 'face (car (car properties)))) ! (regions (cdr (car properties)))) ;; Set the `face' property for each start/end region. (while regions (set-text-properties (nth 0 regions) (nth 1 regions) plist) ! (setq regions (nthcdr 2 regions))) ! (setq properties (cdr properties)))))) ;; Functions for XEmacs: ! (if (save-match-data (string-match "XEmacs" (emacs-version))) ! ;; It would be better to use XEmacs 19.12's `map-extents' over extents with ! ;; `font-lock' property, but `face' properties are on different extents. ! (defun fast-lock-get-face-properties () ! "Return a list of all `face' text properties in the current buffer. Each element of the list is of the form (VALUE START1 END1 START2 END2 ...) where VALUE is a `face' property value and STARTx and ENDx are positions. Only those `face' VALUEs in `fast-lock-save-faces' are returned." ! (save-restriction ! (widen) ! (let ((properties ()) cell) ! (map-extents ! (function ! (lambda (extent ignore) ! (let ((value (extent-face extent))) ! ;; We're only interested if it's one of `fast-lock-save-faces'. ! (if (and value (or (null fast-lock-save-faces) (memq value fast-lock-save-faces))) ! (let ((start (extent-start-position extent)) ! (end (extent-end-position extent))) ! ;; Make or add to existing list of regions with the same ! ;; `face' property value. ! (if (setq cell (assq value properties)) ! (setcdr cell (cons start (cons end (cdr cell)))) ! (setq properties (cons (list value start end) ! properties))))) ! ;; Return nil to keep `map-extents' going. ! nil)))) ! properties)))) ! ! (if (save-match-data (string-match "XEmacs" (emacs-version))) ! ;; Make extents just like XEmacs's font-lock.el does. ! (defun fast-lock-set-face-properties (properties) ! "Set all `face' text properties to PROPERTIES in the current buffer. Any existing `face' text properties are removed first. See `fast-lock-get-face-properties' for the format of PROPERTIES." ! (save-restriction ! (widen) ! (font-lock-unfontify-region (point-min) (point-max)) ! (while properties ! (let ((face (car (car properties))) ! (regions (cdr (car properties)))) ! ;; Set the `face' property, etc., for each start/end region. ! (while regions ! (font-lock-set-face (nth 0 regions) (nth 1 regions) face) ! (setq regions (nthcdr 2 regions))) ! (setq properties (cdr properties))))))) ! ! (if (save-match-data (string-match "XEmacs" (emacs-version))) ! ;; XEmacs 19.12 font-lock.el's `font-lock-fontify-buffer' runs a hook. ! (add-hook 'font-lock-after-fontify-buffer-hook ! 'fast-lock-after-fontify-buffer)) ! ! (or (boundp 'font-lock-inhibit-thing-lock) ! (defvar font-lock-inhibit-thing-lock nil ! "List of Font Lock mode related modes that should not be turned on.")) ! (or (fboundp 'font-lock-compile-keywords) ! (defalias 'font-lock-compile-keywords 'identity)) ;; Install ourselves: ! ;; We don't install ourselves on `font-lock-mode-hook' as packages with similar ! ;; functionality exist, and fast-lock.el should be dumpable without forcing ! ;; people to use caches or making it difficult for people to use alternatives. ! (add-hook 'after-save-hook 'fast-lock-after-save-hook) ! (add-hook 'kill-buffer-hook 'fast-lock-kill-buffer-hook) ! (add-hook 'kill-emacs-hook 'fast-lock-kill-emacs-hook) ! (or (assq 'fast-lock-mode minor-mode-alist) ! (setq minor-mode-alist (append minor-mode-alist '((fast-lock-mode nil))))) ;; Provide ourselves: --- 589,683 ---- regions (cons start (cons end regions)))) ;; Add `face' face's regions, if any, to properties. ! (when regions ! (push (cons face regions) properties))) properties))) (defun fast-lock-set-face-properties (properties) "Set all `face' text properties to PROPERTIES in the current buffer. ! Any existing `face' text properties are removed first. See `fast-lock-get-face-properties' for the format of PROPERTIES." ! (save-buffer-state (plist regions) ! (save-restriction ! (widen) ! (font-lock-unfontify-region (point-min) (point-max)) ! (while properties ! (setq plist (list 'face (car (car properties))) ! regions (cdr (car properties)) ! properties (cdr properties)) ;; Set the `face' property for each start/end region. (while regions (set-text-properties (nth 0 regions) (nth 1 regions) plist) ! (setq regions (nthcdr 2 regions))))))) ;; Functions for XEmacs: ! (when (save-match-data (string-match "XEmacs" (emacs-version))) ! ;; ! ;; It would be better to use XEmacs' `map-extents' over extents with a ! ;; `font-lock' property, but `face' properties are on different extents. ! (defun fast-lock-get-face-properties () ! "Return a list of all `face' text properties in the current buffer. Each element of the list is of the form (VALUE START1 END1 START2 END2 ...) where VALUE is a `face' property value and STARTx and ENDx are positions. Only those `face' VALUEs in `fast-lock-save-faces' are returned." ! (save-restriction ! (widen) ! (let ((properties ()) cell) ! (map-extents ! (function (lambda (extent ignore) ! (let ((value (extent-face extent))) ! ;; We're only interested if it's one of `fast-lock-save-faces'. ! (when (and value (or (null fast-lock-save-faces) (memq value fast-lock-save-faces))) ! (let ((start (extent-start-position extent)) ! (end (extent-end-position extent))) ! ;; Make or add to existing list of regions with the same ! ;; `face' property value. ! (if (setq cell (assq value properties)) ! (setcdr cell (cons start (cons end (cdr cell)))) ! (push (list value start end) properties)))) ! ;; Return nil to keep `map-extents' going. ! nil)))) ! properties))) ! ;; ! ;; Make extents just like XEmacs' font-lock.el does. ! (defun fast-lock-set-face-properties (properties) ! "Set all `face' text properties to PROPERTIES in the current buffer. Any existing `face' text properties are removed first. See `fast-lock-get-face-properties' for the format of PROPERTIES." ! (save-restriction ! (widen) ! (font-lock-unfontify-region (point-min) (point-max)) ! (while properties ! (let ((face (car (car properties))) ! (regions (cdr (car properties)))) ! ;; Set the `face' property, etc., for each start/end region. ! (while regions ! (font-lock-set-face (nth 0 regions) (nth 1 regions) face) ! (setq regions (nthcdr 2 regions))) ! (setq properties (cdr properties)))))) ! ;; ! ;; XEmacs 19.12 font-lock.el's `font-lock-fontify-buffer' runs a hook. ! (add-hook 'font-lock-after-fontify-buffer-hook ! 'fast-lock-after-fontify-buffer)) ! ! (unless (boundp 'font-lock-inhibit-thing-lock) ! (defvar font-lock-inhibit-thing-lock nil ! "List of Font Lock mode related modes that should not be turned on.")) ! (unless (fboundp 'font-lock-compile-keywords) ! (defalias 'font-lock-compile-keywords 'identity)) ;; Install ourselves: ! (add-hook 'after-save-hook 'fast-lock-save-cache-after-save-file) ! (add-hook 'kill-buffer-hook 'fast-lock-save-cache-before-kill-buffer) ! (add-hook 'kill-emacs-hook 'fast-lock-save-caches-before-kill-emacs) ! ;;;###autoload ! (if (fboundp 'add-minor-mode) (add-minor-mode 'fast-lock-mode nil)) ! ;;;###dont-autoload ! (unless (assq 'fast-lock-mode minor-mode-alist) ! (setq minor-mode-alist (append minor-mode-alist '((fast-lock-mode nil))))) ;; Provide ourselves: diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/files.el emacs-19.32/lisp/files.el *** emacs-19.31/lisp/files.el Tue May 21 13:18:29 1996 --- emacs-19.32/lisp/files.el Sun Jul 28 02:50:58 1996 *************** If the buffer is visiting a new file, th *** 124,127 **** --- 124,130 ---- (put 'buffer-file-number 'permanent-local t) + (defvar buffer-file-numbers-unique (not (memq system-type '(windows-nt))) + "Non-nil means that buffer-file-number uniquely identifies files.") + (defconst file-precious-flag nil "*Non-nil means protect against I/O errors while saving files. *************** If the current buffer now contains an em *** 584,593 **** (kill-buffer " **lose**")) (rename-buffer " **lose**") - (setq buffer-file-name nil) - (setq buffer-file-number nil) - (setq buffer-file-truename nil) (unwind-protect (progn (unlock-buffer) (find-file filename)) (cond ((eq obuf (current-buffer)) --- 587,596 ---- (kill-buffer " **lose**")) (rename-buffer " **lose**") (unwind-protect (progn (unlock-buffer) + (setq buffer-file-name nil) + (setq buffer-file-number nil) + (setq buffer-file-truename nil) (find-file filename)) (cond ((eq obuf (current-buffer)) *************** This also substitutes \"~\" for the user *** 625,629 **** Type \\[describe-variable] directory-abbrev-alist RET for more information." ;; Get rid of the prefixes added by the automounter. ! (if (and (string-match automount-dir-prefix filename) (file-exists-p (file-name-directory (substring filename (1- (match-end 0)))))) --- 628,633 ---- Type \\[describe-variable] directory-abbrev-alist RET for more information." ;; Get rid of the prefixes added by the automounter. ! (if (and automount-dir-prefix ! (string-match automount-dir-prefix filename) (file-exists-p (file-name-directory (substring filename (1- (match-end 0)))))) *************** If there is no such live buffer, return *** 692,696 **** (let ((number (nthcdr 10 (file-attributes truename))) (list (buffer-list)) found) ! (and number (while (and (not found) list) (save-excursion --- 696,701 ---- (let ((number (nthcdr 10 (file-attributes truename))) (list (buffer-list)) found) ! (and buffer-file-numbers-unique ! number (while (and (not found) list) (save-excursion *************** run `normal-mode' explicitly." *** 936,939 **** --- 941,945 ---- ("\\.icn\\'" . icon-mode) ("\\.pl\\'" . perl-mode) + ("\\.pm\\'" . perl-mode) ("\\.cc\\'" . c++-mode) ("\\.hh\\'" . c++-mode) *************** run `normal-mode' explicitly." *** 986,989 **** --- 992,996 ---- ("\\.tar\\'" . tar-mode) ("\\.\\(arc\\|zip\\|lzh\\|zoo\\)\\'" . archive-mode) + ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\)\\'" . archive-mode) ;; Mailer puts message to be edited in ;; /tmp/Re.... or Message *************** If `enable-local-variables' is nil, this *** 1145,1149 **** ;; outside the save-excursion. (if modes ! (progn (mapcar 'funcall modes) (setq done t))) ;; If we didn't find a mode from a -*- line, try using the file name. --- 1152,1156 ---- ;; outside the save-excursion. (if modes ! (progn (mapcar 'funcall (nreverse modes)) (setq done t))) ;; If we didn't find a mode from a -*- line, try using the file name. *************** If `enable-local-variables' is nil, this *** 1247,1253 **** (y-or-n-p (format "Set local variables as specified in -*- line of %s? " (file-name-nondirectory buffer-file-name))))))) ! (while result ! (hack-one-local-variable (car (car result)) (cdr (car result))) ! (setq result (cdr result))))))) (defvar hack-local-variables-hook nil --- 1254,1261 ---- (y-or-n-p (format "Set local variables as specified in -*- line of %s? " (file-name-nondirectory buffer-file-name))))))) ! (let ((enable-local-eval enable-local-eval)) ! (while result ! (hack-one-local-variable (car (car result)) (cdr (car result))) ! (setq result (cdr result)))))))) (defvar hack-local-variables-hook nil *************** in order to initialize other data struct *** 1348,1351 **** --- 1356,1361 ---- (put 'exec-directory 'risky-local-variable t) (put 'process-environment 'risky-local-variable t) + (put 'dabbrev-case-fold-search 'risky-local-variable t) + (put 'dabbrev-case-replace 'risky-local-variable t) ;; Don't wait for outline.el to be loaded, for the sake of outline-minor-mode. (put 'outline-level 'risky-local-variable t) *************** in order to initialize other data struct *** 1408,1417 **** ! (defun set-visited-file-name (filename) "Change name of file visited in current buffer to FILENAME. The next time the buffer is saved it will go in the newly specified file. nil or empty string as argument means make buffer not be visiting any file. Remember to delete the initial contents of the minibuffer ! if you wish to pass an empty string as the argument." (interactive "FSet visited file name: ") (if (buffer-base-buffer) --- 1418,1430 ---- ! (defun set-visited-file-name (filename &optional no-query) "Change name of file visited in current buffer to FILENAME. The next time the buffer is saved it will go in the newly specified file. nil or empty string as argument means make buffer not be visiting any file. Remember to delete the initial contents of the minibuffer ! if you wish to pass an empty string as the argument. ! ! The optional second argument NO-QUERY, if non-nil, inhibits asking for ! confirmation in the case where the file FILENAME already exists." (interactive "FSet visited file name: ") (if (buffer-base-buffer) *************** if you wish to pass an empty string as t *** 1430,1433 **** --- 1443,1447 ---- (let ((buffer (and filename (find-buffer-visiting filename)))) (and buffer (not (eq buffer (current-buffer))) + (not no-query) (not (y-or-n-p (message "A buffer is visiting %s; proceed? " filename))) *************** If WILDCARD, it also runs the shell spec *** 2650,2654 **** list) switches (substring switches (match-end 0)))) ! (setq list (cons switches list))))) (append list (list --- 2664,2668 ---- list) switches (substring switches (match-end 0)))) ! (setq list (nreverse (cons switches list)))))) (append list (list diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/fill.el emacs-19.32/lisp/fill.el *** emacs-19.31/lisp/fill.el Tue Mar 19 15:03:48 1996 --- emacs-19.32/lisp/fill.el Fri May 31 00:15:51 1996 *************** MAIL-FLAG for a mail message, i. e. don' *** 829,833 **** fill-prefix-regexp (regexp-quote fill-prefix))) (forward-line 1) ! (move-to-left-margin) ;; Now stop the loop if end of paragraph. (and (not (eobp)) --- 829,836 ---- fill-prefix-regexp (regexp-quote fill-prefix))) (forward-line 1) ! (if (bolp) ! ;; If forward-line went past a newline, ! ;; move further to the left margin. ! (move-to-left-margin)) ;; Now stop the loop if end of paragraph. (and (not (eobp)) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/finder-inf.el emacs-19.32/lisp/finder-inf.el *** emacs-19.31/lisp/finder-inf.el Sat May 25 20:04:17 1996 --- emacs-19.32/lisp/finder-inf.el Thu Aug 1 21:59:09 1996 *************** *** 304,307 **** --- 304,310 ---- "support for multi-file/multi-buffer processing in Ediff" nil) + ("ediff-ptch.el" + "Ediff's patch support" + nil) ("ediff-util.el" "the core commands and utilities of ediff" *************** *** 448,451 **** --- 451,457 ---- "User friendly customization of Gnus" (help news)) + ("gnus-demon.el" + "daemonic Gnus behaviour" + (news)) ("gnus-edit.el" "Gnus SCORE file editing" *************** *** 454,457 **** --- 460,466 ---- "functions for making Gnus work under different Emacsen" (news)) + ("gnus-gl.el" + "an interface to GroupLens for Gnus" + (news score)) ("gnus-kill.el" "kill commands for Gnus" *************** *** 463,469 **** --- 472,496 ---- "mail and post interface for Gnus" (news)) + ("gnus-nocem.el" + "NoCeM pseudo-cancellation treatment" + (news)) + ("gnus-salt.el" + "alternate summary mode interfaces for Gnus" + nil) ("gnus-score.el" "scoring code for Gnus" (news)) + ("gnus-setup.el" + "Initialization & Setup for Gnus 5" + (news)) + ("gnus-soup.el" + "SOUP packet writing support for Gnus" + (news mail)) + ("gnus-srvr.el" + "virtual server support for Gnus" + (news)) + ("gnus-topic.el" + "a folding minor mode for Gnus group buffers" + (news)) ("gnus-uu.el" "extract (uu)encoded files in Gnus" *************** *** 583,586 **** --- 610,616 ---- "additions to shell mode for use with kermit, etc." (comm)) + ("lazy-lock.el" + "Lazy demand-driven fontification for fast Font Lock mode." + (faces files)) ("ledit.el" "Emacs side of ledit interface" *************** *** 646,649 **** --- 676,682 ---- "expand and complete mailing address aliases" (mail)) + ("mailheader.el" + "Mail header parsing, merging, formatting" + (tools mail news)) ("mailpost.el" "RMAIL coupler to /usr/uci/post mailer" *************** *** 670,673 **** --- 703,709 ---- "define a default menu bar." (internal)) + ("message.el" + "composing mail and news messages" + (mail news)) ("metamail.el" "Metamail interface for GNU Emacs" *************** *** 727,730 **** --- 763,769 ---- "rmail mbox access for Gnus" (news mail)) + ("nndb.el" + "nndb access for Gnus" + (news)) ("nndir.el" "single directory newsgroup access for Gnus" *************** *** 738,742 **** ("nnfolder.el" "mail folder access for Gnus" ! (news mail)) ("nnheader.el" "header access macros for Gnus and its backends" --- 777,781 ---- ("nnfolder.el" "mail folder access for Gnus" ! (mail)) ("nnheader.el" "header access macros for Gnus and its backends" *************** *** 757,760 **** --- 796,805 ---- "mail spool access for Gnus" (news mail)) + ("nnoo.el" + "OO Gnus Backends" + (news)) + ("nnsoup.el" + "SOUP access for Gnus" + (news mail)) ("nnspool.el" "spool access for GNU Emacs" *************** *** 849,853 **** ("reporter.el" "customizable bug reporting of lisp programs" ! (bug reports lisp)) ("reposition.el" "center a Lisp function or comment on the screen" --- 894,898 ---- ("reporter.el" "customizable bug reporting of lisp programs" ! (maint mail tools)) ("reposition.el" "center a Lisp function or comment on the screen" *************** *** 910,913 **** --- 955,961 ---- "Scheme mode, and its idiosyncratic commands." (languages lisp)) + ("score-mode.el" + "mode for editing Gnus score files" + (news mail)) ("scribe.el" "scribe mode, and its idiosyncratic commands." *************** *** 958,961 **** --- 1006,1012 ---- "Lisp language extension for writing statement skeletons" (extensions abbrev languages tools)) + ("smtpmail.el" + nil + (mail)) ("solar.el" "calendar functions for solar events." diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/font-lock.el emacs-19.32/lisp/font-lock.el *** emacs-19.31/lisp/font-lock.el Thu Mar 7 08:37:25 1996 --- emacs-19.32/lisp/font-lock.el Mon Jul 29 19:18:35 1996 *************** *** 48,53 **** ;; of decoration. The higher the level, the more decoration, but the more time ;; it takes to fontify. See the variable `font-lock-maximum-decoration', and ! ;; also the variable `font-lock-maximum-size'. ;; If you add patterns for a new mode, say foo.el's `foo-mode', say in which ;; you don't want syntactic fontification to occur, you can make Font Lock mode --- 48,103 ---- ;; of decoration. The higher the level, the more decoration, but the more time ;; it takes to fontify. See the variable `font-lock-maximum-decoration', and ! ;; also the variable `font-lock-maximum-size'. Support modes for Font Lock ! ;; mode can be used to speed up Font Lock mode. See `font-lock-support-mode'. ! ! ;; Constructing patterns: ! ;; ! ;; See the documentation for the variable `font-lock-keywords'. ! ;; ! ;; Nasty regexps of the form "bar\\(\\|lo\\)\\|f\\(oo\\|u\\(\\|bar\\)\\)\\|lo" ! ;; are made thusly: (make-regexp '("foo" "fu" "fubar" "bar" "barlo" "lo")) for ! ;; efficiency. See /pub/gnu/emacs/elisp-archive/functions/make-regexp.el.Z on ! ;; archive.cis.ohio-state.edu for this and other functions. + ;; Adding patterns for modes that already support Font Lock: + ;; + ;; Font Lock mode uses the buffer local variable `font-lock-keywords' for the + ;; highlighting patterns. This variable is set by Font Lock mode from (a) the + ;; buffer local variable `font-lock-defaults', if non-nil, or (b) the global + ;; variable `font-lock-defaults-alist', if the major mode has an entry. + ;; Font Lock mode is set up via (a) where a mode's patterns are distributed + ;; with the mode's package library, (b) where a mode's patterns are distributed + ;; with font-lock.el itself. An example of (a) is Pascal mode, an example of + ;; (b) is C/C++ modes. (Normally, the mechanism is (a); (b) is used where it + ;; is not clear which package library should contain the pattern definitions.) + ;; + ;; If, for a particular mode, mechanism (a) is used, you need to add your + ;; patterns after that package library has loaded, e.g.: + ;; + ;; (eval-after-load "pascal" '(add-to-list 'pascal-font-lock-keywords ...)) + ;; + ;; (Note that only one pattern can be added with `add-to-list'. For multiple + ;; patterns, use one `eval-after-load' form with one `setq' and `append' form, + ;; or multiple `eval-after-load' forms each with one `add-to-list' form.) + ;; If mechanism (b) is used, you need to add your patterns after font-lock.el + ;; itself has loaded, e.g.: + ;; + ;; (eval-after-load "font-lock" '(add-to-list 'c-font-lock-keywords ...)) + ;; + ;; Which variable you should add to depends on what level of fontification you + ;; choose and what level is supported. If you choose the maximum level, by + ;; setting the variable `font-lock-maximum-decoration', you change a different + ;; variable. Maximum level patterns for C are `c-font-lock-keywords-3', so: + ;; + ;; (setq font-lock-maximum-decoration t) + ;; (eval-after-load "font-lock" + ;; '(add-to-list 'c-font-lock-keywords-3 + ;; '("\\" . font-lock-type-face))) + ;; + ;; To see which variable to set, see the buffer's value of `font-lock-defaults' + ;; or the mode's entry in the global value of `font-lock-defaults-alist'. + + ;; Adding patterns for modes that do not support Font Lock: + ;; ;; If you add patterns for a new mode, say foo.el's `foo-mode', say in which ;; you don't want syntactic fontification to occur, you can make Font Lock mode *************** *** 57,66 **** ;; '(lambda () (make-local-variable 'font-lock-defaults) ;; (setq font-lock-defaults '(foo-font-lock-keywords t)))) ! ;; ! ;; Nasty regexps of the form "bar\\(\\|lo\\)\\|f\\(oo\\|u\\(\\|bar\\)\\)\\|lo" ! ;; are made thusly: (make-regexp '("foo" "fu" "fubar" "bar" "barlo" "lo")) for ! ;; efficiency. See /pub/gnu/emacs/elisp-archive/functions/make-regexp.el.Z on ! ;; archive.cis.ohio-state.edu for this and other functions. ! ;; What is fontification for? You might say, "It's to make my code look nice." ;; I think it should be for adding information in the form of cues. These cues --- 107,111 ---- ;; '(lambda () (make-local-variable 'font-lock-defaults) ;; (setq font-lock-defaults '(foo-font-lock-keywords t)))) ! ;; What is fontification for? You might say, "It's to make my code look nice." ;; I think it should be for adding information in the form of cues. These cues *************** *** 93,98 **** ;; User variables. ! (defvar font-lock-verbose t ! "*If non-nil, means show status messages when fontifying.") ;;;###autoload --- 138,144 ---- ;; User variables. ! (defvar font-lock-verbose (* 0 1024) ! "*If non-nil, means show status messages for buffer fontification. ! If a number, only buffers greater than this size have fontification messages.") ;;;###autoload *************** If a number, use that level of decoratio *** 104,110 **** If a list, each element should be a cons pair of the form (MAJOR-MODE . LEVEL), where MAJOR-MODE is a symbol or t (meaning the default). For example: ! ((c++-mode . 2) (c-mode . t) (t . 1)) ! means use level 2 decoration for buffers in `c++-mode', the maximum decoration ! available for buffers in `c-mode', and level 1 decoration otherwise.") ;;;###autoload --- 150,156 ---- If a list, each element should be a cons pair of the form (MAJOR-MODE . LEVEL), where MAJOR-MODE is a symbol or t (meaning the default). For example: ! ((c-mode . t) (c++-mode . 2) (t . 1)) ! means use the maximum decoration available for buffers in C mode, level 2 ! decoration for buffers in C++ mode, and level 1 decoration otherwise.") ;;;###autoload *************** If nil, means size is irrelevant. *** 115,121 **** If a list, each element should be a cons pair of the form (MAJOR-MODE . SIZE), where MAJOR-MODE is a symbol or t (meaning the default). For example: ! ((c++-mode . 256000) (c-mode . 256000) (rmail-mode . 1048576)) ! means that the maximum size is 250K for buffers in `c++-mode' or `c-mode', one ! megabyte for buffers in `rmail-mode', and size is irrelevant otherwise.") ;; Fontification variables: --- 161,167 ---- If a list, each element should be a cons pair of the form (MAJOR-MODE . SIZE), where MAJOR-MODE is a symbol or t (meaning the default). For example: ! ((c-mode . 256000) (c++-mode . 256000) (rmail-mode . 1048576)) ! means that the maximum size is 250K for buffers in C or C++ modes, one megabyte ! for buffers in Rmail mode, and size is irrelevant otherwise.") ;; Fontification variables: *************** The value should be like the `cdr' of an *** 237,240 **** --- 283,287 ---- c-font-lock-keywords-2 c-font-lock-keywords-3) nil nil ((?_ . "w")) beginning-of-defun + (font-lock-comment-start-regexp . "/[*/]") (font-lock-mark-block-function . mark-defun))) (c++-mode-defaults *************** The value should be like the `cdr' of an *** 242,260 **** c++-font-lock-keywords-2 c++-font-lock-keywords-3) nil nil ((?_ . "w") (?~ . "w")) beginning-of-defun (font-lock-mark-block-function . mark-defun))) (lisp-mode-defaults '((lisp-font-lock-keywords lisp-font-lock-keywords-1 lisp-font-lock-keywords-2) ! nil nil ! ((?: . "w") (?- . "w") (?* . "w") (?+ . "w") (?. . "w") (?< . "w") ! (?> . "w") (?= . "w") (?! . "w") (?? . "w") (?$ . "w") (?% . "w") ! (?_ . "w") (?& . "w") (?~ . "w") (?^ . "w") (?/ . "w")) ! beginning-of-defun (font-lock-mark-block-function . mark-defun))) (scheme-mode-defaults ! '(scheme-font-lock-keywords nil t ! ((?: . "w") (?- . "w") (?* . "w") (?+ . "w") (?. . "w") (?< . "w") ! (?> . "w") (?= . "w") (?! . "w") (?? . "w") (?$ . "w") (?% . "w") ! (?_ . "w") (?& . "w") (?~ . "w") (?^ . "w") (?/ . "w")) ! beginning-of-defun (font-lock-mark-block-function . mark-defun))) ;; For TeX modes we could use `backward-paragraph' for the same reason. ;; But we don't, because paragraph breaks are arguably likely enough to --- 289,305 ---- c++-font-lock-keywords-2 c++-font-lock-keywords-3) nil nil ((?_ . "w") (?~ . "w")) beginning-of-defun + (font-lock-comment-start-regexp . "/[*/]") (font-lock-mark-block-function . mark-defun))) (lisp-mode-defaults '((lisp-font-lock-keywords lisp-font-lock-keywords-1 lisp-font-lock-keywords-2) ! nil nil (("+-*/.<>=!?$%_&~^:" . "w")) beginning-of-defun ! (font-lock-comment-start-regexp . ";") ! (font-lock-mark-block-function . mark-defun))) (scheme-mode-defaults ! '(scheme-font-lock-keywords ! nil t (("+-*/.<>=!?$%_&~^:" . "w")) beginning-of-defun ! (font-lock-comment-start-regexp . ";") ! (font-lock-mark-block-function . mark-defun))) ;; For TeX modes we could use `backward-paragraph' for the same reason. ;; But we don't, because paragraph breaks are arguably likely enough to *************** The value should be like the `cdr' of an *** 262,270 **** ;; However, we do specify a MARK-BLOCK function as that cannot result ;; in a mis-fontification even if it might not fontify enough. --sm. ! (tex-mode-defaults '(tex-font-lock-keywords nil nil ((?$ . "\"")) nil ! (font-lock-mark-block-function . mark-paragraph))) ) (list - (cons 'bibtex-mode tex-mode-defaults) (cons 'c++-c-mode c-mode-defaults) (cons 'c++-mode c++-mode-defaults) --- 307,316 ---- ;; However, we do specify a MARK-BLOCK function as that cannot result ;; in a mis-fontification even if it might not fontify enough. --sm. ! (tex-mode-defaults ! '(tex-font-lock-keywords nil nil ((?$ . "\"")) nil ! (font-lock-comment-start-regexp . "%") ! (font-lock-mark-block-function . mark-paragraph))) ) (list (cons 'c++-c-mode c-mode-defaults) (cons 'c++-mode c++-mode-defaults) *************** If KEYWORDS-ONLY is non-nil, syntactic f *** 292,297 **** not performed. If CASE-FOLD is non-nil, the case of the keywords is ignored when fontifying. If SYNTAX-ALIST is non-nil, it should be a list of cons pairs ! of the form (CHAR . STRING) used to set the local Font Lock syntax table, for ! keyword and syntactic fontification (see `modify-syntax-entry'). If SYNTAX-BEGIN is non-nil, it should be a function with no args used to move --- 338,343 ---- not performed. If CASE-FOLD is non-nil, the case of the keywords is ignored when fontifying. If SYNTAX-ALIST is non-nil, it should be a list of cons pairs ! of the form (CHAR-OR-STRING . STRING) used to set the local Font Lock syntax ! table, for keyword and syntactic fontification (see `modify-syntax-entry'). If SYNTAX-BEGIN is non-nil, it should be a function with no args used to move *************** around a text block relevant to that mod *** 320,325 **** Other variables include those for buffer-specialised fontification functions, `font-lock-fontify-buffer-function', `font-lock-unfontify-buffer-function', ! `font-lock-fontify-region-function', `font-lock-unfontify-region-function' and ! `font-lock-inhibit-thing-lock'.") (defvar font-lock-keywords-only nil --- 366,372 ---- Other variables include those for buffer-specialised fontification functions, `font-lock-fontify-buffer-function', `font-lock-unfontify-buffer-function', ! `font-lock-fontify-region-function', `font-lock-unfontify-region-function', ! `font-lock-comment-start-regexp', `font-lock-inhibit-thing-lock' and ! `font-lock-maximum-size'.") (defvar font-lock-keywords-only nil *************** enclosing textual block and mark at the *** 351,354 **** --- 398,408 ---- This is normally set via `font-lock-defaults'.") + (defvar font-lock-comment-start-regexp nil + "*Regexp to match the start of a comment. + This need not discriminate between genuine comments and quoted comment + characters or comment characters within strings. + If nil, `comment-start-skip' is used instead; see that variable for more info. + This is normally set via `font-lock-defaults'.") + (defvar font-lock-fontify-buffer-function 'font-lock-default-fontify-buffer "Function to use for fontifying the buffer. *************** This is normally set via `font-lock-defa *** 378,382 **** (defvar font-lock-mode nil) ; For the modeline. (defvar font-lock-fontified nil) ; Whether we have fontified the buffer. - (put 'font-lock-fontified 'permanent-local t) ;;;###autoload --- 432,435 ---- *************** This is normally set via `font-lock-defa *** 384,388 **** "Function or functions to run on entry to Font Lock mode.") ! ;; User commands. ;;;###autoload --- 437,445 ---- "Function or functions to run on entry to Font Lock mode.") ! ;; Font Lock mode. ! ! (eval-when-compile ! ;; We don't do this at the top-level as we only use non-autoloaded macros. ! (require 'cl)) ;;;###autoload *************** the major mode's hook. For example, put *** 404,423 **** Alternatively, you can use Global Font Lock mode to automagically turn on Font ! Lock mode in buffers whose major mode supports it, or in buffers whose major ! mode is one of `font-lock-global-modes'. For example, put in your ~/.emacs: (global-font-lock-mode t) ! The default Font Lock mode faces and their attributes are defined in the ! variable `font-lock-face-attributes', and Font Lock mode default settings in ! the variable `font-lock-defaults-alist'. You can set your own default settings ! for some mode, by setting a buffer local value for `font-lock-defaults', via ! its mode hook. ! ! Where modes support different levels of fontification, you can use the variable `font-lock-maximum-decoration' to specify which level you generally prefer. When you turn Font Lock mode on/off the buffer is fontified/defontified, though fontification occurs only if the buffer is less than `font-lock-maximum-size'. To fontify a buffer, without turning on Font Lock mode and regardless of buffer size, you can use \\[font-lock-fontify-buffer]. --- 461,482 ---- Alternatively, you can use Global Font Lock mode to automagically turn on Font ! Lock mode in buffers whose major mode supports it and whose major mode is one ! of `font-lock-global-modes'. For example, put in your ~/.emacs: (global-font-lock-mode t) ! There are a number of support modes that may be used to speed up Font Lock mode ! in various ways, specified via the variable `font-lock-support-mode'. Where ! major modes support different levels of fontification, you can use the variable `font-lock-maximum-decoration' to specify which level you generally prefer. When you turn Font Lock mode on/off the buffer is fontified/defontified, though fontification occurs only if the buffer is less than `font-lock-maximum-size'. + For example, to specify that Font Lock mode use use Lazy Lock mode as a support + mode and use maximum levels of fontification, put in your ~/.emacs: + + (setq font-lock-support-mode 'lazy-lock-mode) + (setq font-lock-maximum-decoration t) + To fontify a buffer, without turning on Font Lock mode and regardless of buffer size, you can use \\[font-lock-fontify-buffer]. *************** size, you can use \\[font-lock-fontify-b *** 425,473 **** To fontify a block (the function or paragraph containing point, or a number of lines around point), perhaps because modification on the current line caused ! syntactic change on other lines, you can use \\[font-lock-fontify-block]." (interactive "P") ;; Don't turn on Font Lock mode if we don't have a display (we're running a ;; batch job) or if the buffer is invisible (the name starts with a space). ! (let ((maximum-size (font-lock-value-in-major-mode font-lock-maximum-size)) ! (on-p (and (not noninteractive) (not (eq (aref (buffer-name) 0) ?\ )) (if arg (> (prefix-numeric-value arg) 0) (not font-lock-mode))))) - (if (not on-p) - (remove-hook 'after-change-functions 'font-lock-after-change-function - t) - (make-local-hook 'after-change-functions) - (add-hook 'after-change-functions 'font-lock-after-change-function - nil t)) (set (make-local-variable 'font-lock-mode) on-p) ! (cond (on-p ! (font-lock-set-defaults) ! ;; If buffer is reverted, must clean up the state. ! (make-local-hook 'before-revert-hook) ! (make-local-hook 'after-revert-hook) ! (add-hook 'before-revert-hook 'font-lock-revert-setup nil t) ! (add-hook 'after-revert-hook 'font-lock-revert-cleanup nil t) ! (run-hooks 'font-lock-mode-hook) ! (cond (font-lock-fontified ! nil) ! ((or (null maximum-size) (<= (buffer-size) maximum-size) ! (not (eq font-lock-fontify-buffer-function ! (default-value ! 'font-lock-fontify-buffer-function)))) ! (font-lock-fontify-buffer)) ! (font-lock-verbose ! (message "Fontifying %s... buffer too big." (buffer-name))))) ! (font-lock-fontified ! (font-lock-unfontify-buffer) ! (remove-hook 'before-revert-hook 'font-lock-revert-setup t) ! (remove-hook 'after-revert-hook 'font-lock-revert-cleanup t) ! (font-lock-thing-lock-cleanup) ! (font-lock-unset-defaults)) ! (t ! (remove-hook 'before-revert-hook 'font-lock-revert-setup t) ! (remove-hook 'after-revert-hook 'font-lock-revert-cleanup t) ! (font-lock-thing-lock-cleanup) ! (font-lock-unset-defaults))) (force-mode-line-update))) --- 484,525 ---- To fontify a block (the function or paragraph containing point, or a number of lines around point), perhaps because modification on the current line caused ! syntactic change on other lines, you can use \\[font-lock-fontify-block]. ! ! The default Font Lock mode faces and their attributes are defined in the ! variable `font-lock-face-attributes', and Font Lock mode default settings in ! the variable `font-lock-defaults-alist'. You can set your own default settings ! for some mode, by setting a buffer local value for `font-lock-defaults', via ! its mode hook." (interactive "P") ;; Don't turn on Font Lock mode if we don't have a display (we're running a ;; batch job) or if the buffer is invisible (the name starts with a space). ! (let ((on-p (and (not noninteractive) (not (eq (aref (buffer-name) 0) ?\ )) (if arg (> (prefix-numeric-value arg) 0) (not font-lock-mode))))) (set (make-local-variable 'font-lock-mode) on-p) ! ;; Turn on Font Lock mode. ! (when on-p ! (font-lock-set-defaults) ! (unless (eq font-lock-fontify-region-function 'ignore) ! (make-local-hook 'after-change-functions) ! (add-hook 'after-change-functions 'font-lock-after-change-function nil t)) ! (font-lock-turn-on-thing-lock) ! (run-hooks 'font-lock-mode-hook) ! ;; Fontify the buffer if we have to. ! (let ((max-size (font-lock-value-in-major-mode font-lock-maximum-size))) ! (cond (font-lock-fontified ! nil) ! ((or (null max-size) (> max-size (buffer-size))) ! (font-lock-fontify-buffer)) ! (font-lock-verbose ! (message "Fontifying %s...buffer too big" (buffer-name)))))) ! ;; Turn off Font Lock mode. ! (when (not on-p) ! (remove-hook 'after-change-functions 'font-lock-after-change-function t) ! (font-lock-unfontify-buffer) ! (font-lock-turn-off-thing-lock) ! (font-lock-unset-defaults)) (force-mode-line-update))) *************** syntactic change on other lines, you can *** 475,488 **** (defun turn-on-font-lock () "Turn on Font Lock mode conditionally. ! Turn on only if the buffer mode supports it and the terminal can display it." ! (if (and window-system ! (not font-lock-mode) ! (or font-lock-defaults (assq major-mode font-lock-defaults-alist))) ! (font-lock-mode t))) ! ;; Code for Global Font Lock mode. ! ;; A few people have hassled in the past for a way to make it easier to turn on ! ;; Font Lock mode, perhaps the same way hilit19.el/hl319.el does. I've always ;; balked at that way, as I see it as just re-moulding the same problem in ;; another form. That is; some person would still have to keep track of which --- 527,539 ---- (defun turn-on-font-lock () "Turn on Font Lock mode conditionally. ! Turn on only if the terminal can display it." ! (when window-system ! (font-lock-mode t))) ! ;; Global Font Lock mode. ! ;; ;; A few people have hassled in the past for a way to make it easier to turn on ! ;; Font Lock mode, without the user needing to know for which modes s/he has to ! ;; turn it on, perhaps the same way hilit19.el/hl319.el does. I've always ;; balked at that way, as I see it as just re-moulding the same problem in ;; another form. That is; some person would still have to keep track of which *************** Turn on only if the buffer mode supports *** 490,496 **** ;; The list would always be out of date. And that person might have to be me. ! ;; In the latest of these discussions the following hack came to mind. It is a ! ;; gross hack, but it generally works. We use the convention that major modes ! ;; start by calling the function `kill-all-local-variables', which in turn runs ;; functions on the hook variable `change-major-mode-hook'. We attach our ;; function `font-lock-change-major-mode' to that hook. Of course, when this --- 541,549 ---- ;; The list would always be out of date. And that person might have to be me. ! ;; Implementation. ! ;; ! ;; In a previous discussion the following hack came to mind. It is a gross ! ;; hack, but it generally works. We use the convention that major modes start ! ;; by calling the function `kill-all-local-variables', which in turn runs ;; functions on the hook variable `change-major-mode-hook'. We attach our ;; function `font-lock-change-major-mode' to that hook. Of course, when this *************** Turn on only if the buffer mode supports *** 498,532 **** ;; know what the final major mode will be. So, `font-lock-change-major-mode' ;; only (a) notes the name of the current buffer, and (b) adds our function ! ;; `turn-on-font-lock-if-enabled' to the hook variable `post-command-hook'. ! ;; By the time the functions on `post-command-hook' are run, the new major mode ! ;; is assumed to be in place. ! ;; Naturally this requires that (a) major modes run `kill-all-local-variables', ;; as they are supposed to do, and (b) the major mode is in place after the ! ;; command that ran `kill-all-local-variables' has finished. Arguably, any ! ;; major mode that does not follow the convension (a) is broken, and I can't ! ;; think of any reason why (b) would not be met. I don't know of any major ! ;; modes that do not follow the convension (a), but I'm sure there are some ! ;; obscure ones out there somewhere. Even if it works, it is still not clean. ! ;; Probably the cleanest solution is to have each major mode function run some ;; hook, e.g., `major-mode-hook', but maybe implementing that change is ! ;; impractical. I am personally against making `setq' a macro or be advised ! ;; (space'n'speed), or have a special function such as `set-major-mode' (a ! ;; `major-mode-hook' is simpler), but maybe someone can come up with another ! ;; solution? --sm. (defvar font-lock-buffers nil) ; For remembering buffers. ! (defvar change-major-mode-hook nil) ; Make sure it's not void. ;;;###autoload (defvar font-lock-global-modes t ! "*Modes for which Font Lock mode is automatically turned on. Global Font Lock mode is controlled by the `global-font-lock-mode' command. If nil, means no modes have Font Lock mode automatically turned on. If t, all modes that support Font Lock mode have it automatically turned on. ! If a list, each element should be a major mode symbol name such as `c-mode'. ! Font Lock is automatically turned on if the buffer major mode supports it and ! is in this list. The sense of the list is negated if it begins with `not'.") ;;;###autoload --- 551,602 ---- ;; know what the final major mode will be. So, `font-lock-change-major-mode' ;; only (a) notes the name of the current buffer, and (b) adds our function ! ;; `turn-on-font-lock-if-enabled' to the hook variables `find-file-hooks' and ! ;; `post-command-hook' (for buffers that are not visiting files). By the time ! ;; the functions on the first of these hooks to be run are run, the new major ! ;; mode is assumed to be in place. This way we get a Font Lock function run ! ;; when a major mode is turned on, without knowing major modes or their hooks. ! ;; ;; Naturally this requires that (a) major modes run `kill-all-local-variables', ;; as they are supposed to do, and (b) the major mode is in place after the ! ;; file is visited or the command that ran `kill-all-local-variables' has ! ;; finished, whichever the sooner. Arguably, any major mode that does not ! ;; follow the convension (a) is broken, and I can't think of any reason why (b) ! ;; would not be met (except `gnudoit' on non-files). However, it is not clean. ! ;; ;; Probably the cleanest solution is to have each major mode function run some ;; hook, e.g., `major-mode-hook', but maybe implementing that change is ! ;; impractical. I am personally against making `setq' a macro or be advised, ! ;; or have a special function such as `set-major-mode', but maybe someone can ! ;; come up with another solution? ! ! ;; User interface. ! ;; ! ;; Although Global Font Lock mode is a pseudo-mode, I think that the user ! ;; interface should conform to the usual Emacs convention for modes, i.e., a ! ;; command to toggle the feature (`global-font-lock-mode') with a variable for ! ;; finer control of the mode's behaviour (`font-lock-global-modes'). ! ;; ! ;; I don't think it is better that the feature be enabled via a variable, since ! ;; it does not conform to the usual convention. I don't think the feature ! ;; should be enabled by loading font-lock.el, since other mechanisms such as ! ;; M-x font-lock-mode RET or (add-hook 'c-mode-hook 'turn-on-font-lock) would ! ;; cause Font Lock mode to be turned on everywhere, and it is not intuitive or ! ;; informative because loading a file tells you nothing about the feature or ! ;; how to control it. It would be contrary to the Principle of Least Surprise. (defvar font-lock-buffers nil) ; For remembering buffers. ! (defvar global-font-lock-mode nil) ;;;###autoload (defvar font-lock-global-modes t ! "*Modes for which Font Lock mode is automagically turned on. Global Font Lock mode is controlled by the `global-font-lock-mode' command. If nil, means no modes have Font Lock mode automatically turned on. If t, all modes that support Font Lock mode have it automatically turned on. ! If a list, it should be a list of `major-mode' symbol names for which Font Lock ! mode should be automatically turned on. The sense of the list is negated if it ! begins with `not'. For example: ! (c-mode c++-mode) ! means that Font Lock mode is turned on for buffers in C and C++ modes only.") ;;;###autoload *************** turned on in a buffer if its major mode *** 542,566 **** (let ((off-p (if arg (<= (prefix-numeric-value arg) 0) ! (memq 'font-lock-change-major-mode change-major-mode-hook)))) (if off-p ! (remove-hook 'change-major-mode-hook 'font-lock-change-major-mode) ! (add-hook 'change-major-mode-hook 'font-lock-change-major-mode) (add-hook 'post-command-hook 'turn-on-font-lock-if-enabled) (setq font-lock-buffers (buffer-list))) ! (if message ! (message "Global Font Lock mode is now %s." (if off-p "OFF" "ON"))) ! (not off-p))) (defun font-lock-change-major-mode () ;; Gross hack warning: Delicate readers should avert eyes now. ;; Something is running `kill-all-local-variables', which generally means the ;; major mode is being changed. Run `turn-on-font-lock-if-enabled' after the ! ;; current command has finished. ! (add-hook 'post-command-hook 'turn-on-font-lock-if-enabled) ! (add-to-list 'font-lock-buffers (current-buffer))) (defun turn-on-font-lock-if-enabled () ;; Gross hack warning: Delicate readers should avert eyes now. ! ;; Turn on Font Lock mode if it's one of `font-lock-global-modes'. (remove-hook 'post-command-hook 'turn-on-font-lock-if-enabled) (while font-lock-buffers --- 612,641 ---- (let ((off-p (if arg (<= (prefix-numeric-value arg) 0) ! global-font-lock-mode))) (if off-p ! (remove-hook 'find-file-hooks 'turn-on-font-lock-if-enabled) ! (add-hook 'find-file-hooks 'turn-on-font-lock-if-enabled) (add-hook 'post-command-hook 'turn-on-font-lock-if-enabled) (setq font-lock-buffers (buffer-list))) ! (when message ! (message "Global Font Lock mode is now %s." (if off-p "OFF" "ON"))) ! (setq global-font-lock-mode (not off-p)))) (defun font-lock-change-major-mode () + ;; Turn off Font Lock mode if it's on. + (when font-lock-mode + (font-lock-mode nil)) ;; Gross hack warning: Delicate readers should avert eyes now. ;; Something is running `kill-all-local-variables', which generally means the ;; major mode is being changed. Run `turn-on-font-lock-if-enabled' after the ! ;; file is visited or the current command has finished. ! (when global-font-lock-mode ! (add-hook 'post-command-hook 'turn-on-font-lock-if-enabled) ! (add-to-list 'font-lock-buffers (current-buffer)))) (defun turn-on-font-lock-if-enabled () ;; Gross hack warning: Delicate readers should avert eyes now. ! ;; Turn on Font Lock mode if it's supported by the major mode and enabled by ! ;; the user. (remove-hook 'post-command-hook 'turn-on-font-lock-if-enabled) (while font-lock-buffers *************** turned on in a buffer if its major mode *** 568,581 **** (save-excursion (set-buffer (car font-lock-buffers)) ! (if (or (eq font-lock-global-modes t) ! (if (eq (car-safe font-lock-global-modes) 'not) ! (not (memq major-mode (cdr font-lock-global-modes))) ! (memq major-mode font-lock-global-modes))) (let (inhibit-quit) (turn-on-font-lock))))) (setq font-lock-buffers (cdr font-lock-buffers)))) ;; End of Global Font Lock mode. ;; Fontification functions. --- 643,714 ---- (save-excursion (set-buffer (car font-lock-buffers)) ! (if (and (or font-lock-defaults ! (assq major-mode font-lock-defaults-alist)) ! (or (eq font-lock-global-modes t) ! (if (eq (car-safe font-lock-global-modes) 'not) ! (not (memq major-mode (cdr font-lock-global-modes))) ! (memq major-mode font-lock-global-modes)))) (let (inhibit-quit) (turn-on-font-lock))))) (setq font-lock-buffers (cdr font-lock-buffers)))) + (add-hook 'change-major-mode-hook 'font-lock-change-major-mode) + ;; End of Global Font Lock mode. + ;; Font Lock Support mode. + ;; + ;; This is the code used to interface font-lock.el with any of its add-on + ;; packages, and provide the user interface. Packages that have their own + ;; local buffer fontification functions (see below) may have to call + ;; `font-lock-after-fontify-buffer' and/or `font-lock-after-unfontify-buffer' + ;; themselves. + + ;;;###autoload + (defvar font-lock-support-mode nil + "*Support mode for Font Lock mode. + Support modes speed up Font Lock mode by being choosy about when fontification + occurs. Known support modes are Fast Lock mode (symbol `fast-lock-mode') and + Lazy Lock mode (symbol `lazy-lock-mode'). See those modes for more info. + If nil, means support for Font Lock mode is never performed. + If a symbol, use that support mode. + If a list, each element should be of the form (MAJOR-MODE . SUPPORT-MODE), + where MAJOR-MODE is a symbol or t (meaning the default). For example: + ((c-mode . fast-lock-mode) (c++-mode . fast-lock-mode) (t . lazy-lock-mode)) + means that Fast Lock mode is used to support Font Lock mode for buffers in C or + C++ modes, and Lazy Lock mode is used to support Font Lock mode otherwise. + + The value of this variable is used when Font Lock mode is turned on.") + + (defun font-lock-turn-on-thing-lock () + (let ((thing-mode (font-lock-value-in-major-mode font-lock-support-mode))) + (cond ((eq thing-mode 'fast-lock-mode) + (fast-lock-mode t)) + ((eq thing-mode 'lazy-lock-mode) + (lazy-lock-mode t))))) + + (defvar fast-lock-mode nil) + (defvar lazy-lock-mode nil) + + (defun font-lock-turn-off-thing-lock () + (cond (fast-lock-mode + (fast-lock-mode nil)) + (lazy-lock-mode + (lazy-lock-mode nil)))) + + (defun font-lock-after-fontify-buffer () + (cond (fast-lock-mode + (fast-lock-after-fontify-buffer)) + (lazy-lock-mode + (lazy-lock-after-fontify-buffer)))) + + (defun font-lock-after-unfontify-buffer () + (cond (fast-lock-mode + (fast-lock-after-unfontify-buffer)) + (lazy-lock-mode + (lazy-lock-after-unfontify-buffer)))) + + ;; End of Font Lock Support mode. + ;; Fontification functions. *************** turned on in a buffer if its major mode *** 597,601 **** (defun font-lock-default-fontify-buffer () ! (let ((verbose (and font-lock-verbose (> (buffer-size) 0)))) (if verbose (message "Fontifying %s..." (buffer-name))) ;; Make sure we have the right `font-lock-keywords' etc. --- 730,736 ---- (defun font-lock-default-fontify-buffer () ! (let ((verbose (if (numberp font-lock-verbose) ! (> (buffer-size) font-lock-verbose) ! font-lock-verbose))) (if verbose (message "Fontifying %s..." (buffer-name))) ;; Make sure we have the right `font-lock-keywords' etc. *************** turned on in a buffer if its major mode *** 612,616 **** ;; We don't restore the old fontification, so it's best to unfontify. (quit (font-lock-unfontify-buffer)))) ! (if verbose (message "Fontifying %s... %s." (buffer-name) (if font-lock-fontified "done" "aborted"))))) --- 747,751 ---- ;; We don't restore the old fontification, so it's best to unfontify. (quit (font-lock-unfontify-buffer)))) ! (if verbose (message "Fontifying %s...%s" (buffer-name) (if font-lock-fontified "done" "aborted"))))) *************** delimit the region to fontify." *** 691,695 **** (funcall font-lock-mark-block-function) (font-lock-fontify-region (point) (mark))) ! ((error quit) (message "Fontifying block... %s" error-data))))))) (define-key facemenu-keymap "\M-g" 'font-lock-fontify-block) --- 826,830 ---- (funcall font-lock-mark-block-function) (font-lock-fontify-region (point) (mark))) ! ((error quit) (message "Fontifying block...%s" error-data))))))) (define-key facemenu-keymap "\M-g" 'font-lock-fontify-block) *************** delimit the region to fontify." *** 707,716 **** "Put proper face on each string and comment between START and END. START should be at the beginning of a line." ! (let ((synstart (if comment-start-skip ! (concat "\\s\"\\|" comment-start-skip) ! "\\s\"")) ! (comstart (if comment-start-skip ! (concat "\\s<\\|" comment-start-skip) ! "\\s<")) state prev prevstate) (if loudly (message "Fontifying %s... (syntactically...)" (buffer-name))) --- 842,857 ---- "Put proper face on each string and comment between START and END. START should be at the beginning of a line." ! (let ((synstart (cond (font-lock-comment-start-regexp ! (concat "\\s\"\\|" font-lock-comment-start-regexp)) ! (comment-start-skip ! (concat "\\s\"\\|" comment-start-skip)) ! (t ! "\\s\""))) ! (comstart (cond (font-lock-comment-start-regexp ! font-lock-comment-start-regexp) ! (comment-start-skip ! (concat "\\s<\\|" comment-start-skip)) ! (t ! "\\s<"))) state prev prevstate) (if loudly (message "Fontifying %s... (syntactically...)" (buffer-name))) *************** START should be at the beginning of a li *** 776,780 **** ;; ;; We found a real comment start. ! (let ((beg (match-beginning 0))) (goto-char beg) (save-restriction --- 917,921 ---- ;; ;; We found a real comment start. ! (let ((beg (or (match-end 1) (match-beginning 0)))) (goto-char beg) (save-restriction *************** START should be at the beginning of a li *** 792,796 **** ;; ;; We found a real string start. ! (let ((beg (match-beginning 0))) (while (and (re-search-forward "\\s\"" end 'move) (nth 3 (parse-partial-sexp here (point) --- 933,937 ---- ;; ;; We found a real string start. ! (let ((beg (or (match-end 1) (match-beginning 0)))) (while (and (re-search-forward "\\s\"" end 'move) (nth 3 (parse-partial-sexp here (point) *************** START should be at the beginning of a li *** 969,1005 **** ;; Various functions. - ;; Turn off other related packages if they're on. I prefer a hook. --sm. - ;; These explicit calls are easier to understand - ;; because people know what they will do. - ;; A hook is a mystery because it might do anything whatever. --rms. - (defun font-lock-thing-lock-cleanup () - (cond ((and (boundp 'fast-lock-mode) fast-lock-mode) - (fast-lock-mode -1)) - ((and (boundp 'lazy-lock-mode) lazy-lock-mode) - (lazy-lock-mode -1)))) - - ;; Do something special for these packages after fontifying; I prefer a hook. - (defun font-lock-after-fontify-buffer () - (cond ((and (boundp 'fast-lock-mode) fast-lock-mode) - (fast-lock-after-fontify-buffer)) - ((and (boundp 'lazy-lock-mode) lazy-lock-mode) - (lazy-lock-after-fontify-buffer)))) - - ;; Do something special for these packages after unfontifying; I prefer a hook. - (defun font-lock-after-unfontify-buffer () - (cond ((and (boundp 'fast-lock-mode) fast-lock-mode) - (fast-lock-after-unfontify-buffer)) - ((and (boundp 'lazy-lock-mode) lazy-lock-mode) - (lazy-lock-after-unfontify-buffer)))) - - ;; If the buffer is about to be reverted, it won't be fontified afterward. - (defun font-lock-revert-setup () - (setq font-lock-fontified nil)) - - ;; If the buffer has just been reverted, normally that turns off - ;; Font Lock mode. So turn the mode back on if necessary. - (defalias 'font-lock-revert-cleanup - 'turn-on-font-lock) - (defun font-lock-compile-keywords (&optional keywords) ;; Compile `font-lock-keywords' into the form (t KEYWORD ...) where KEYWORD --- 1110,1113 ---- *************** Sets various variables using `font-lock- *** 1074,1080 **** (copy-syntax-table (syntax-table))) (while slist ! (modify-syntax-entry (car (car slist)) (cdr (car slist)) ! font-lock-syntax-table) ! (setq slist (cdr slist))))) ;; Syntax function for syntactic fontification? (if (nth 4 defaults) --- 1182,1195 ---- (copy-syntax-table (syntax-table))) (while slist ! ;; The character to modify may be a single CHAR or a STRING. ! (let ((chars (if (numberp (car (car slist))) ! (list (car (car slist))) ! (mapcar 'identity (car (car slist))))) ! (syntax (cdr (car slist)))) ! (while chars ! (modify-syntax-entry (car chars) syntax ! font-lock-syntax-table) ! (setq chars (cdr chars))) ! (setq slist (cdr slist)))))) ;; Syntax function for syntactic fontification? (if (nth 4 defaults) *************** See `font-lock-make-face' and `list-face *** 1179,1183 **** ((< (apply '+ (x-color-values (cdr (assq 'background-color params)))) ! (/ (apply '+ (x-color-values "white")) 3)) 'dark) (t 'light))))) --- 1294,1298 ---- ((< (apply '+ (x-color-values (cdr (assq 'background-color params)))) ! (* (apply '+ (x-color-values "white")) .6)) 'dark) (t 'light))))) *************** the face is also set; its value is the f *** 1438,1442 **** ;; with optional whitespace and a "(". Everything following the item (but ;; belonging to it) is expected to by skip-able by `forward-sexp', and items ! ;; are expected to be separated with a "," or ";". (if (looking-at "[ \t*&]*\\(\\sw+\\)\\(::\\(\\sw+\\)\\)?[ \t]*\\((\\)?") (save-match-data --- 1553,1565 ---- ;; with optional whitespace and a "(". Everything following the item (but ;; belonging to it) is expected to by skip-able by `forward-sexp', and items ! ;; are expected to be separated with a ",". ! ;; ! ;; The regexp matches: word::word ( ! ;; ^^^^ ^^^^ ^ ! ;; Match subexps are: 1 3 4 ! ;; ! ;; So, the item is delimited by (match-beginning 1) and (match-end 1). ! ;; If (match-beginning 3) is non-nil, that part of the item follows a ":". ! ;; If (match-beginning 4) is non-nil, the item is followed by a "(". (if (looking-at "[ \t*&]*\\(\\sw+\\)\\(::\\(\\sw+\\)\\)?[ \t]*\\((\\)?") (save-match-data *************** the face is also set; its value is the f *** 1447,1453 **** (goto-char (match-end 1)) ;; Move over any item value, etc., to the next item. ! (while (not (looking-at "[ \t]*\\([,;]\\|$\\)")) (goto-char (or (scan-sexps (point) 1) (point-max)))) ! (goto-char (match-end 0))) (error t))))) --- 1570,1576 ---- (goto-char (match-end 1)) ;; Move over any item value, etc., to the next item. ! (while (not (looking-at "[ \t]*\\(\\(,\\)\\|;\\|$\\)")) (goto-char (or (scan-sexps (point) 1) (point-max)))) ! (goto-char (match-end 2))) (error t))))) *************** the face is also set; its value is the f *** 1497,1502 **** '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face) ;; ! ;; Fontify symbol names in #if ... defined preprocessor directives. ! '("^#[ \t]*if\\>" ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil (1 font-lock-reference-face) (2 font-lock-variable-name-face nil t))) --- 1620,1625 ---- '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face) ;; ! ;; Fontify symbol names in #elif or #if ... defined preprocessor directives. ! '("^#[ \t]*\\(elif\\|if\\)\\>" ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil (1 font-lock-reference-face) (2 font-lock-variable-name-face nil t))) *************** the face is also set; its value is the f *** 1576,1580 **** font-lock-type-face font-lock-function-name-face)) ! (3 (if (match-beginning 2) font-lock-function-name-face) nil t)) ))) --- 1699,1703 ---- font-lock-type-face font-lock-function-name-face)) ! (3 font-lock-function-name-face nil t)) ))) *************** the face is also set; its value is the f *** 1587,1591 **** ;; ;; Fontify operator function name overloading. ! '("\\<\\(operator\\)\\>[ \t]*\\([][)(>[ \t]*\\([[(><=+-]?\\)?" (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t)) ;; *************** the face is also set; its value is the f *** 1684,1689 **** ;; Install ourselves: ! (or (assq 'font-lock-mode minor-mode-alist) ! (setq minor-mode-alist (cons '(font-lock-mode " Font") minor-mode-alist))) ;; Provide ourselves: --- 1807,1812 ---- ;; Install ourselves: ! (unless (assq 'font-lock-mode minor-mode-alist) ! (setq minor-mode-alist (cons '(font-lock-mode " Font") minor-mode-alist))) ;; Provide ourselves: diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/frame.el emacs-19.32/lisp/frame.el *** emacs-19.31/lisp/frame.el Tue Feb 27 19:08:44 1996 --- emacs-19.32/lisp/frame.el Mon Jun 10 17:17:58 1996 *************** These supersede the values given in `def *** 153,157 **** ;; Are we actually running under a window system at all? ! (if (and window-system (not noninteractive)) (progn ;; Turn on special-display processing only if there's a window system. --- 153,157 ---- ;; Are we actually running under a window system at all? ! (if (and window-system (not noninteractive) (not (eq window-system 'pc))) (progn ;; Turn on special-display processing only if there's a window system. *************** These supersede the values given in `def *** 192,202 **** ;; No, we're not running a window system. Use make-terminal-frame if ;; we support that feature, otherwise arrange to cause errors. ! (setq frame-creation-function ! (if (fboundp 'make-terminal-frame) ! 'make-terminal-frame ! (function ! (lambda (parameters) ! (error ! "Can't create multiple frames without a window system"))))))) ;;; startup.el calls this function after loading the user's init --- 192,203 ---- ;; No, we're not running a window system. Use make-terminal-frame if ;; we support that feature, otherwise arrange to cause errors. ! (or (eq window-system 'pc) ! (setq frame-creation-function ! (if (fboundp 'make-terminal-frame) ! 'make-terminal-frame ! (function ! (lambda (parameters) ! (error ! "Can't create multiple frames without a window system")))))))) ;;; startup.el calls this function after loading the user's init *************** The optional second argument PARAMETERS *** 418,421 **** --- 419,429 ---- (make-frame (cons (cons 'display display) parameters))) + (defun make-frame-command () + "Make a new frame, and select it if the terminal displays only one frame." + (interactive) + (if (and window-system (not (eq window-system 'pc))) + (make-frame) + (select-frame (make-frame)))) + ;; Alias, kept temporarily. (defalias 'new-frame 'make-frame) *************** should use `set-frame-width' instead." *** 706,710 **** (define-key ctl-x-map "5" 'ctl-x-5-prefix) ! (define-key ctl-x-5-map "2" 'make-frame) (define-key ctl-x-5-map "0" 'delete-frame) (define-key ctl-x-5-map "o" 'other-frame) --- 714,718 ---- (define-key ctl-x-map "5" 'ctl-x-5-prefix) ! (define-key ctl-x-5-map "2" 'make-frame-command) (define-key ctl-x-5-map "0" 'delete-frame) (define-key ctl-x-5-map "o" 'other-frame) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/gnus-cache.el emacs-19.32/lisp/gnus-cache.el *** emacs-19.31/lisp/gnus-cache.el Sun Jan 14 02:34:30 1996 --- emacs-19.32/lisp/gnus-cache.el Sun Jul 14 11:14:50 1996 *************** *** 1,5 **** ;;; gnus-cache.el --- cache interface for Gnus ! ! ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen --- 1,4 ---- ;;; gnus-cache.el --- cache interface for Gnus ! ;; Copyright (C) 1995,96 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen *************** *** 28,35 **** (require 'gnus) ! (defvar gnus-cache-directory (concat gnus-article-save-directory "cache/") "*The directory where cached articles will be stored.") (defvar gnus-cache-enter-articles '(ticked dormant) "*Classes of articles to enter into the cache.") --- 27,40 ---- (require 'gnus) + (eval-when-compile (require 'cl)) ! (defvar gnus-cache-directory ! (nnheader-concat gnus-directory "cache/") "*The directory where cached articles will be stored.") + (defvar gnus-cache-active-file + (concat (file-name-as-directory gnus-cache-directory) "active") + "*The cache active file.") + (defvar gnus-cache-enter-articles '(ticked dormant) "*Classes of articles to enter into the cache.") *************** *** 38,70 **** "*Classes of articles to remove from the cache.") (defvar gnus-cache-buffer nil) ! (defun gnus-cache-change-buffer (group) ! (and gnus-cache-buffer ! ;; see if the current group's overview cache has been loaded ! (or (string= group (car gnus-cache-buffer)) ! ;; another overview cache is current, save it ! (gnus-cache-save-buffers))) ! ;; if gnus-cache buffer is nil, create it ! (or gnus-cache-buffer ! ;; create cache buffer ! (save-excursion ! (setq gnus-cache-buffer ! (cons group ! (set-buffer (get-buffer-create " *gnus-cache-overview*")))) ! (buffer-disable-undo (current-buffer)) ! ;; insert the contents of this groups cache overview ! (erase-buffer) ! (let ((file (gnus-cache-file-name group ".overview"))) ! (and (file-exists-p file) ! (insert-file-contents file))) ! ;; we have a fresh (empty/just loaded) buffer, ! ;; mark it as unmodified to save a redundant write later. ! (set-buffer-modified-p nil)))) (defun gnus-cache-save-buffers () --- 43,85 ---- "*Classes of articles to remove from the cache.") + (defvar gnus-uncacheable-groups nil + "*Groups that match this regexp will not be cached. + + If you want to avoid caching your nnml groups, you could set this + variable to \"^nnml\".") + + ;;; Internal variables. + (defvar gnus-cache-buffer nil) + (defvar gnus-cache-active-hashtb nil) + (defvar gnus-cache-active-altered nil) + + (eval-and-compile + (autoload 'nnml-generate-nov-databases-1 "nnml") + (autoload 'nnvirtual-find-group-art "nnvirtual")) ! ;;; Functions called from Gnus. + (defun gnus-cache-open () + "Initialize the cache." + (when (or (file-exists-p gnus-cache-directory) + (and gnus-use-cache + (not (eq gnus-use-cache 'passive)))) + (gnus-cache-read-active))) + + (condition-case () + (gnus-add-shutdown 'gnus-cache-close 'gnus) + ;; Complexities of byte-compiling makes this kludge necessary. Eeek. + (error nil)) + + (defun gnus-cache-close () + "Shut down the cache." + (gnus-cache-write-active) + (gnus-cache-save-buffers) + (setq gnus-cache-active-hashtb nil)) (defun gnus-cache-save-buffers () *************** *** 100,103 **** --- 115,365 ---- (setq gnus-cache-buffer nil)))) + (defun gnus-cache-possibly-enter-article + (group article headers ticked dormant unread &optional force) + (when (and (or force (not (eq gnus-use-cache 'passive))) + (numberp article) + (> article 0) + (vectorp headers)) ; This might be a dummy article. + ;; If this is a virtual group, we find the real group. + (when (gnus-virtual-group-p group) + (let ((result (nnvirtual-find-group-art + (gnus-group-real-name group) article))) + (setq group (car result) + headers (copy-sequence headers)) + (mail-header-set-number headers (cdr result)))) + (let ((number (mail-header-number headers)) + file dir) + (when (and (> number 0) ; Reffed article. + (or (not gnus-uncacheable-groups) + (not (string-match gnus-uncacheable-groups group))) + (or force + (gnus-cache-member-of-class + gnus-cache-enter-articles ticked dormant unread)) + (not (file-exists-p (setq file (gnus-cache-file-name + group number))))) + ;; Possibly create the cache directory. + (or (file-exists-p (setq dir (file-name-directory file))) + (gnus-make-directory dir)) + ;; Save the article in the cache. + (if (file-exists-p file) + t ; The article already is saved. + (save-excursion + (set-buffer nntp-server-buffer) + (let ((gnus-use-cache nil)) + (gnus-request-article-this-buffer number group)) + (when (> (buffer-size) 0) + (write-region (point-min) (point-max) file nil 'quiet) + (gnus-cache-change-buffer group) + (set-buffer (cdr gnus-cache-buffer)) + (goto-char (point-max)) + (forward-line -1) + (while (condition-case () + (and (not (bobp)) + (> (read (current-buffer)) number)) + (error + ;; The line was malformed, so we just remove it!! + (gnus-delete-line) + t)) + (forward-line -1)) + (if (bobp) + (if (not (eobp)) + (progn + (beginning-of-line) + (if (< (read (current-buffer)) number) + (forward-line 1))) + (beginning-of-line)) + (forward-line 1)) + (beginning-of-line) + ;; [number subject from date id references chars lines xref] + (insert (format "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n" + (mail-header-number headers) + (mail-header-subject headers) + (mail-header-from headers) + (mail-header-date headers) + (mail-header-id headers) + (or (mail-header-references headers) "") + (or (mail-header-chars headers) "") + (or (mail-header-lines headers) "") + (or (mail-header-xref headers) ""))) + ;; Update the active info. + (set-buffer gnus-summary-buffer) + (gnus-cache-update-active group number) + (push article gnus-newsgroup-cached) + (gnus-summary-update-secondary-mark article)) + t)))))) + + (defun gnus-cache-enter-remove-article (article) + "Mark ARTICLE for later possible removal." + (when article + (push article gnus-cache-removable-articles))) + + (defun gnus-cache-possibly-remove-articles () + "Possibly remove some of the removable articles." + (if (not (gnus-virtual-group-p gnus-newsgroup-name)) + (gnus-cache-possibly-remove-articles-1) + (let ((arts gnus-cache-removable-articles) + ga) + (while arts + (when (setq ga (nnvirtual-find-group-art + (gnus-group-real-name gnus-newsgroup-name) (pop arts))) + (let ((gnus-cache-removable-articles (list (cdr ga))) + (gnus-newsgroup-name (car ga))) + (gnus-cache-possibly-remove-articles-1))))) + (setq gnus-cache-removable-articles nil))) + + (defun gnus-cache-possibly-remove-articles-1 () + "Possibly remove some of the removable articles." + (unless (eq gnus-use-cache 'passive) + (let ((articles gnus-cache-removable-articles) + (cache-articles gnus-newsgroup-cached) + article) + (gnus-cache-change-buffer gnus-newsgroup-name) + (while articles + (if (memq (setq article (pop articles)) cache-articles) + ;; The article was in the cache, so we see whether we are + ;; supposed to remove it from the cache. + (gnus-cache-possibly-remove-article + article (memq article gnus-newsgroup-marked) + (memq article gnus-newsgroup-dormant) + (or (memq article gnus-newsgroup-unreads) + (memq article gnus-newsgroup-unselected)))))) + ;; The overview file might have been modified, save it + ;; safe because we're only called at group exit anyway. + (gnus-cache-save-buffers))) + + (defun gnus-cache-request-article (article group) + "Retrieve ARTICLE in GROUP from the cache." + (let ((file (gnus-cache-file-name group article)) + (buffer-read-only nil)) + (when (file-exists-p file) + (erase-buffer) + (gnus-kill-all-overlays) + (insert-file-contents file) + t))) + + (defun gnus-cache-possibly-alter-active (group active) + "Alter the ACTIVE info for GROUP to reflect the articles in the cache." + (when gnus-cache-active-hashtb + (let ((cache-active (gnus-gethash group gnus-cache-active-hashtb))) + (and cache-active + (< (car cache-active) (car active)) + (setcar active (car cache-active))) + (and cache-active + (> (cdr cache-active) (cdr active)) + (setcdr active (cdr cache-active)))))) + + (defun gnus-cache-retrieve-headers (articles group &optional fetch-old) + "Retrieve the headers for ARTICLES in GROUP." + (let ((cached + (setq gnus-newsgroup-cached (gnus-cache-articles-in-group group)))) + (if (not cached) + ;; No cached articles here, so we just retrieve them + ;; the normal way. + (let ((gnus-use-cache nil)) + (gnus-retrieve-headers articles group fetch-old)) + (let ((uncached-articles (gnus-sorted-intersection + (gnus-sorted-complement articles cached) + articles)) + (cache-file (gnus-cache-file-name group ".overview")) + type) + ;; We first retrieve all the headers that we don't have in + ;; the cache. + (let ((gnus-use-cache nil)) + (when uncached-articles + (setq type (and articles + (gnus-retrieve-headers + uncached-articles group fetch-old))))) + (gnus-cache-save-buffers) + ;; Then we insert the cached headers. + (save-excursion + (cond + ((not (file-exists-p cache-file)) + ;; There are no cached headers. + type) + ((null type) + ;; There were no uncached headers (or retrieval was + ;; unsuccessful), so we use the cached headers exclusively. + (set-buffer nntp-server-buffer) + (erase-buffer) + (insert-file-contents cache-file) + 'nov) + ((eq type 'nov) + ;; We have both cached and uncached NOV headers, so we + ;; braid them. + (gnus-cache-braid-nov group cached) + type) + (t + ;; We braid HEADs. + (gnus-cache-braid-heads group (gnus-sorted-intersection + cached articles)) + type))))))) + + (defun gnus-cache-enter-article (&optional n) + "Enter the next N articles into the cache. + If not given a prefix, use the process marked articles instead. + Returns the list of articles entered." + (interactive "P") + (gnus-set-global-variables) + (let ((articles (gnus-summary-work-articles n)) + article out) + (while articles + (setq article (pop articles)) + (when (gnus-cache-possibly-enter-article + gnus-newsgroup-name article (gnus-summary-article-header article) + nil nil nil t) + (push article out)) + (gnus-summary-remove-process-mark article) + (gnus-summary-update-secondary-mark article)) + (gnus-summary-next-subject 1) + (gnus-summary-position-point) + (nreverse out))) + + (defun gnus-cache-remove-article (n) + "Remove the next N articles from the cache. + If not given a prefix, use the process marked articles instead. + Returns the list of articles removed." + (interactive "P") + (gnus-set-global-variables) + (gnus-cache-change-buffer gnus-newsgroup-name) + (let ((articles (gnus-summary-work-articles n)) + article out) + (while articles + (setq article (pop articles)) + (when (gnus-cache-possibly-remove-article article nil nil nil t) + (push article out)) + (gnus-summary-remove-process-mark article) + (gnus-summary-update-secondary-mark article)) + (gnus-summary-next-subject 1) + (gnus-summary-position-point) + (nreverse out))) + + (defun gnus-cached-article-p (article) + "Say whether ARTICLE is cached in the current group." + (memq article gnus-newsgroup-cached)) + + ;;; Internal functions. + + (defun gnus-cache-change-buffer (group) + (and gnus-cache-buffer + ;; See if the current group's overview cache has been loaded. + (or (string= group (car gnus-cache-buffer)) + ;; Another overview cache is current, save it. + (gnus-cache-save-buffers))) + ;; if gnus-cache buffer is nil, create it + (or gnus-cache-buffer + ;; Create cache buffer + (save-excursion + (setq gnus-cache-buffer + (cons group + (set-buffer (get-buffer-create " *gnus-cache-overview*")))) + (buffer-disable-undo (current-buffer)) + ;; Insert the contents of this group's cache overview. + (erase-buffer) + (let ((file (gnus-cache-file-name group ".overview"))) + (and (file-exists-p file) + (insert-file-contents file))) + ;; We have a fresh (empty/just loaded) buffer, + ;; mark it as unmodified to save a redundant write later. + (set-buffer-modified-p nil)))) ;; Return whether an article is a member of a class. *************** *** 106,282 **** (and dormant (memq 'dormant class)) (and unread (memq 'unread class)) ! (and (not unread) (memq 'read class)))) (defun gnus-cache-file-name (group article) (concat (file-name-as-directory gnus-cache-directory) ! (if (gnus-use-long-file-name 'not-cache) ! group ! (let ((group (concat group ""))) ! (if (string-match ":" group) ! (aset group (match-beginning 0) ?/)) ! (gnus-replace-chars-in-string group ?. ?/))) ! "/" (if (stringp article) article (int-to-string article)))) ! ! (defun gnus-cache-possibly-enter-article ! (group article headers ticked dormant unread) ! (let ((number (mail-header-number headers)) ! file dir) ! (if (or (not (vectorp headers)) ; This might be a dummy article. ! (< number 0) ; Reffed article from other group. ! (not (gnus-cache-member-of-class ! gnus-cache-enter-articles ticked dormant unread)) ! (file-exists-p (setq file (gnus-cache-file-name group article)))) ! () ; Do nothing. ! ;; Possibly create the cache directory. ! (or (file-exists-p (setq dir (file-name-directory file))) ! (gnus-make-directory dir)) ! ;; Save the article in the cache. ! (if (file-exists-p file) ! t ; The article already is saved, so we end here. ! (let ((gnus-use-cache nil)) ! (gnus-summary-select-article)) ! (save-excursion ! (set-buffer gnus-article-buffer) ! (save-restriction ! (widen) ! (write-region (point-min) (point-max) file nil 'quiet)) ! (gnus-cache-change-buffer group) ! (set-buffer (cdr gnus-cache-buffer)) ! (goto-char (point-max)) ! (forward-line -1) ! (while (condition-case () ! (and (not (bobp)) ! (> (read (current-buffer)) number)) ! (error ! ;; The line was malformed, so we just remove it!! ! (gnus-delete-line) ! t)) ! (forward-line -1)) ! (if (bobp) ! (if (not (eobp)) ! (progn ! (beginning-of-line) ! (if (< (read (current-buffer)) number) ! (forward-line 1))) ! (beginning-of-line)) ! (forward-line 1)) ! (beginning-of-line) ! ;; [number subject from date id references chars lines xref] ! (insert (format "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n" ! (mail-header-number headers) ! (mail-header-subject headers) ! (mail-header-from headers) ! (mail-header-date headers) ! (mail-header-id headers) ! (or (mail-header-references headers) "") ! (or (mail-header-chars headers) "") ! (or (mail-header-lines headers) "") ! (or (mail-header-xref headers) "")))) ! t)))) ! ! (defun gnus-cache-enter-remove-article (article) ! (setq gnus-cache-removable-articles ! (cons article gnus-cache-removable-articles))) ! ! (defsubst gnus-cache-possibly-remove-article ! (article ticked dormant unread) ! (let ((file (gnus-cache-file-name gnus-newsgroup-name article))) ! (if (or (not (file-exists-p file)) ! (not (gnus-cache-member-of-class ! gnus-cache-remove-articles ticked dormant unread))) ! nil (save-excursion (delete-file file) (set-buffer (cdr gnus-cache-buffer)) (goto-char (point-min)) ! (if (or (looking-at (concat (int-to-string article) "\t")) ! (search-forward (concat "\n" (int-to-string article) "\t") (point-max) t)) (delete-region (progn (beginning-of-line) (point)) ! (progn (forward-line 1) (point)))))))) ! ! (defun gnus-cache-possibly-remove-articles () ! (let ((articles gnus-cache-removable-articles) ! (cache-articles (gnus-cache-articles-in-group gnus-newsgroup-name)) ! article) ! (gnus-cache-change-buffer gnus-newsgroup-name) ! (while articles ! (setq article (car articles) ! articles (cdr articles)) ! (if (memq article cache-articles) ! ;; The article was in the cache, so we see whether we are ! ;; supposed to remove it from the cache. ! (gnus-cache-possibly-remove-article ! article (memq article gnus-newsgroup-marked) ! (memq article gnus-newsgroup-dormant) ! (or (memq article gnus-newsgroup-unreads) ! (memq article gnus-newsgroup-unselected)))))) ! ;; the overview file might have been modified, save it ! ;; safe because we're only called at group exit anyway ! (gnus-cache-save-buffers)) ! ! ! (defun gnus-cache-request-article (article group) ! (let ((file (gnus-cache-file-name group article))) ! (if (not (file-exists-p file)) ! () ! (erase-buffer) ! ;; There may be some overlays that we have to kill... ! (insert "i") ! (let ((overlays (overlays-at (point-min)))) ! (while overlays ! (delete-overlay (car overlays)) ! (setq overlays (cdr overlays)))) ! (erase-buffer) ! (insert-file-contents file) t))) (defun gnus-cache-articles-in-group (group) (let ((dir (file-name-directory (gnus-cache-file-name group 1))) articles) ! (if (not (file-exists-p dir)) ! nil ! (setq articles (directory-files dir nil "^[0-9]+$" t)) ! (if (not articles) ! nil ! (sort (mapcar (function (lambda (name) ! (string-to-int name))) ! articles) ! '<))))) ! ! (defun gnus-cache-active-articles (group) ! (let ((articles (gnus-cache-articles-in-group group))) ! (and articles ! (cons (car articles) (gnus-last-element articles))))) ! ! (defun gnus-cache-possibly-alter-active (group active) ! (let ((cache-active (gnus-cache-active-articles group))) ! (and cache-active (< (car cache-active) (car active)) ! (setcar active (car cache-active))) ! (and cache-active (> (cdr cache-active) (cdr active)) ! (setcdr active (cdr cache-active))))) ! ! (defun gnus-cache-retrieve-headers (articles group) ! (let* ((cached (gnus-cache-articles-in-group group)) ! (articles (gnus-sorted-complement articles cached)) ! (cache-file (gnus-cache-file-name group ".overview")) ! type) ! (let ((gnus-use-cache nil)) ! (setq type (and articles (gnus-retrieve-headers articles group)))) ! (gnus-cache-save-buffers) ! (save-excursion ! (cond ((not (file-exists-p cache-file)) ! type) ! ((null type) ! (set-buffer nntp-server-buffer) ! (erase-buffer) ! (insert-file-contents cache-file) ! 'nov) ! ((eq type 'nov) ! (gnus-cache-braid-nov group cached) ! type) ! (t ! (gnus-cache-braid-heads group cached) ! type))))) (defun gnus-cache-braid-nov (group cached) --- 368,431 ---- (and dormant (memq 'dormant class)) (and unread (memq 'unread class)) ! (and (not unread) (not ticked) (not dormant) (memq 'read class)))) (defun gnus-cache-file-name (group article) (concat (file-name-as-directory gnus-cache-directory) ! (file-name-as-directory ! (if (gnus-use-long-file-name 'not-cache) ! group ! (let ((group (concat group ""))) ! (if (string-match ":" group) ! (aset group (match-beginning 0) ?/)) ! (nnheader-replace-chars-in-string group ?. ?/)))) ! (if (stringp article) article (int-to-string article)))) ! ! (defun gnus-cache-update-article (group article) ! "If ARTICLE is in the cache, remove it and re-enter it." ! (when (gnus-cache-possibly-remove-article article nil nil nil t) ! (let ((gnus-use-cache nil)) ! (gnus-cache-possibly-enter-article ! gnus-newsgroup-name article (gnus-summary-article-header article) ! nil nil nil t)))) ! ! (defun gnus-cache-possibly-remove-article (article ticked dormant unread ! &optional force) ! "Possibly remove ARTICLE from the cache." ! (let ((group gnus-newsgroup-name) ! (number article) ! file) ! ;; If this is a virtual group, we find the real group. ! (when (gnus-virtual-group-p group) ! (let ((result (nnvirtual-find-group-art ! (gnus-group-real-name group) article))) ! (setq group (car result) ! number (cdr result)))) ! (setq file (gnus-cache-file-name group number)) ! (when (and (file-exists-p file) ! (or force ! (gnus-cache-member-of-class ! gnus-cache-remove-articles ticked dormant unread))) (save-excursion (delete-file file) (set-buffer (cdr gnus-cache-buffer)) (goto-char (point-min)) ! (if (or (looking-at (concat (int-to-string number) "\t")) ! (search-forward (concat "\n" (int-to-string number) "\t") (point-max) t)) (delete-region (progn (beginning-of-line) (point)) ! (progn (forward-line 1) (point))))) ! (setq gnus-newsgroup-cached ! (delq article gnus-newsgroup-cached)) ! (gnus-summary-update-secondary-mark article) t))) (defun gnus-cache-articles-in-group (group) + "Return a sorted list of cached articles in GROUP." (let ((dir (file-name-directory (gnus-cache-file-name group 1))) articles) ! (when (file-exists-p dir) ! (sort (mapcar (lambda (name) (string-to-int name)) ! (directory-files dir nil "^[0-9]+$" t)) ! '<)))) (defun gnus-cache-braid-nov (group cached) *************** *** 332,336 **** (insert-file-contents (gnus-cache-file-name group (car cached))) (goto-char (point-min)) ! (insert "220 " (int-to-string (car cached)) " Article retrieved.\n") (search-forward "\n\n" nil 'move) (delete-region (point) (point-max)) --- 481,487 ---- (insert-file-contents (gnus-cache-file-name group (car cached))) (goto-char (point-min)) ! (insert "220 ") ! (princ (car cached) (current-buffer)) ! (insert " Article retrieved.\n") (search-forward "\n\n" nil 'move) (delete-region (point) (point-max)) *************** *** 341,361 **** (kill-buffer cache-buf))) (defun gnus-jog-cache () "Go through all groups and put the articles into the cache." (interactive) ! (let ((newsrc (cdr gnus-newsrc-alist)) ! (gnus-cache-enter-articles '(unread)) ! (gnus-mark-article-hook nil) (gnus-expert-user t) (gnus-large-newsgroup nil)) ! (while newsrc ! (gnus-summary-read-group (car (car newsrc))) ! (if (not (eq major-mode 'gnus-summary-mode)) ! () ! (while gnus-newsgroup-unreads ! (gnus-summary-select-article t t nil (car gnus-newsgroup-unreads)) ! (setq gnus-newsgroup-unreads (cdr gnus-newsgroup-unreads))) ! (kill-buffer (current-buffer))) ! (setq newsrc (cdr newsrc))))) (provide 'gnus-cache) --- 492,621 ---- (kill-buffer cache-buf))) + ;;;###autoload (defun gnus-jog-cache () "Go through all groups and put the articles into the cache." (interactive) ! (let ((gnus-mark-article-hook nil) (gnus-expert-user t) + (nnmail-spool-file nil) + (gnus-use-dribble-file nil) + (gnus-novice-user nil) (gnus-large-newsgroup nil)) ! ;; Start Gnus. ! (gnus) ! ;; Go through all groups... ! (gnus-group-mark-buffer) ! (gnus-group-universal-argument ! nil nil ! (lambda () ! (gnus-summary-read-group nil nil t) ! ;; ... and enter the articles into the cache. ! (when (eq major-mode 'gnus-summary-mode) ! (gnus-uu-mark-buffer) ! (gnus-cache-enter-article) ! (kill-buffer (current-buffer))))))) ! ! (defun gnus-cache-read-active (&optional force) ! "Read the cache active file." ! (unless (file-exists-p gnus-cache-directory) ! (make-directory gnus-cache-directory t)) ! (if (not (and (file-exists-p gnus-cache-active-file) ! (or force (not gnus-cache-active-hashtb)))) ! ;; There is no active file, so we generate one. ! (gnus-cache-generate-active) ! ;; We simply read the active file. ! (save-excursion ! (gnus-set-work-buffer) ! (insert-file-contents gnus-cache-active-file) ! (gnus-active-to-gnus-format ! nil (setq gnus-cache-active-hashtb ! (gnus-make-hashtable ! (count-lines (point-min) (point-max))))) ! (setq gnus-cache-active-altered nil)))) ! ! (defun gnus-cache-write-active (&optional force) ! "Write the active hashtb to the active file." ! (when (or force ! (and gnus-cache-active-hashtb ! gnus-cache-active-altered)) ! (save-excursion ! (gnus-set-work-buffer) ! (mapatoms ! (lambda (sym) ! (when (and sym (boundp sym)) ! (insert (format "%s %d %d y\n" ! (symbol-name sym) (cdr (symbol-value sym)) ! (car (symbol-value sym)))))) ! gnus-cache-active-hashtb) ! (gnus-make-directory (file-name-directory gnus-cache-active-file)) ! (write-region ! (point-min) (point-max) gnus-cache-active-file nil 'silent)) ! ;; Mark the active hashtb as unaltered. ! (setq gnus-cache-active-altered nil))) ! ! (defun gnus-cache-update-active (group number &optional low) ! "Update the upper bound of the active info of GROUP to NUMBER. ! If LOW, update the lower bound instead." ! (let ((active (gnus-gethash group gnus-cache-active-hashtb))) ! (if (null active) ! ;; We just create a new active entry for this group. ! (gnus-sethash group (cons number number) gnus-cache-active-hashtb) ! ;; Update the lower or upper bound. ! (if low ! (setcar active number) ! (setcdr active number)) ! ;; Mark the active hashtb as altered. ! (setq gnus-cache-active-altered t)))) ! ! ;;;###autoload ! (defun gnus-cache-generate-active (&optional directory) ! "Generate the cache active file." ! (interactive) ! (let* ((top (null directory)) ! (directory (expand-file-name (or directory gnus-cache-directory))) ! (files (directory-files directory 'full)) ! (group ! (if top ! "" ! (string-match ! (concat "^" (file-name-as-directory ! (expand-file-name gnus-cache-directory))) ! (directory-file-name directory)) ! (nnheader-replace-chars-in-string ! (substring (directory-file-name directory) (match-end 0)) ! ?/ ?.))) ! nums alphs) ! (when top ! (gnus-message 5 "Generating the cache active file...") ! (setq gnus-cache-active-hashtb (gnus-make-hashtable 123))) ! ;; Separate articles from all other files and directories. ! (while files ! (if (string-match "^[0-9]+$" (file-name-nondirectory (car files))) ! (push (string-to-int (file-name-nondirectory (pop files))) nums) ! (push (pop files) alphs))) ! ;; If we have nums, then this is probably a valid group. ! (when (setq nums (sort nums '<)) ! (gnus-sethash group (cons (car nums) (gnus-last-element nums)) ! gnus-cache-active-hashtb)) ! ;; Go through all the other files. ! (while alphs ! (when (and (file-directory-p (car alphs)) ! (not (string-match "^\\.\\.?$" ! (file-name-nondirectory (car alphs))))) ! ;; We descend directories. ! (gnus-cache-generate-active (car alphs))) ! (setq alphs (cdr alphs))) ! ;; Write the new active file. ! (when top ! (gnus-cache-write-active t) ! (gnus-message 5 "Generating the cache active file...done")))) ! ! ;;;###autoload ! (defun gnus-cache-generate-nov-databases (dir) ! "Generate NOV files recursively starting in DIR." ! (interactive (list gnus-cache-directory)) ! (gnus-cache-close) ! (let ((nnml-generate-active-function 'identity)) ! (nnml-generate-nov-databases-1 dir))) (provide 'gnus-cache) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/gnus-cite.el emacs-19.32/lisp/gnus-cite.el *** emacs-19.31/lisp/gnus-cite.el Sun Jan 14 02:34:30 1996 --- emacs-19.32/lisp/gnus-cite.el Tue Jun 25 17:58:34 1996 *************** *** 1,5 **** ;;; gnus-cite.el --- parse citations in articles for Gnus ! ! ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Per Abrahamsen --- 1,4 ---- ;;; gnus-cite.el --- parse citations in articles for Gnus ! ;; Copyright (C) 1995,96 Free Software Foundation, Inc. ;; Author: Per Abrahamsen *************** *** 30,40 **** (require 'gnus-msg) (require 'gnus-ems) (eval-and-compile ! (autoload 'gnus-article-add-button "gnus-vis") ! ) ;;; Customization: (defvar gnus-cite-parse-max-size 25000 "Maximum article size (in bytes) where parsing citations is allowed. --- 29,45 ---- (require 'gnus-msg) (require 'gnus-ems) + (eval-when-compile (require 'cl)) (eval-and-compile ! (autoload 'gnus-article-add-button "gnus-vis")) ;;; Customization: + (defvar gnus-cited-text-button-line-format "%(%{[...]%}%)\n" + "Format of cited text buttons.") + + (defvar gnus-cited-lines-visible nil + "The number of lines of hidden cited text to remain visible.") + (defvar gnus-cite-parse-max-size 25000 "Maximum article size (in bytes) where parsing citations is allowed. *************** Set it to nil to parse all articles.") *** 46,63 **** (defvar gnus-cite-max-prefix 20 ! "Maximal possible length for a citation prefix.") (defvar gnus-supercite-regexp (concat "^\\(" gnus-cite-prefix-regexp "\\)? *" ">>>>> +\"\\([^\"\n]+\\)\" +==") ! "Regexp matching normal SuperCite attribution lines. ! The first regexp group should match a prefix added by another package.") (defvar gnus-supercite-secondary-regexp "^.*\"\\([^\"\n]+\\)\" +==" ! "Regexp matching mangled SuperCite attribution lines. ! The first regexp group should match the SuperCite attribution.") (defvar gnus-cite-minimum-match-count 2 ! "Minimal number of identical prefix'es before we believe it is a citation.") ;see gnus-cus.el --- 51,68 ---- (defvar gnus-cite-max-prefix 20 ! "Maximum possible length for a citation prefix.") (defvar gnus-supercite-regexp (concat "^\\(" gnus-cite-prefix-regexp "\\)? *" ">>>>> +\"\\([^\"\n]+\\)\" +==") ! "Regexp matching normal Supercite attribution lines. ! The first grouping must match prefixes added by other packages.") (defvar gnus-supercite-secondary-regexp "^.*\"\\([^\"\n]+\\)\" +==" ! "Regexp matching mangled Supercite attribution lines. ! The first regexp group should match the Supercite attribution.") (defvar gnus-cite-minimum-match-count 2 ! "Minimum number of identical prefixes before we believe it's a citation.") ;see gnus-cus.el *************** The first regexp group should match the *** 79,83 **** "Regexp matching the beginning of an attribution line.") ! (defvar gnus-cite-attribution-postfix "\\(wrote\\|writes\\|said\\|says\\):[ \t]*$" "Regexp matching the end of an attribution line. --- 84,88 ---- "Regexp matching the beginning of an attribution line.") ! (defvar gnus-cite-attribution-suffix "\\(wrote\\|writes\\|said\\|says\\):[ \t]*$" "Regexp matching the end of an attribution line. *************** The text matching the first grouping wil *** 113,119 **** ;;; Internal Variables: ! (defvar gnus-article-length nil) ! ;; Length of article last time we parsed it. ! ;; BUG! KLUDGE! UGLY! FIX ME! (defvar gnus-cite-prefix-alist nil) --- 118,122 ---- ;;; Internal Variables: ! (defvar gnus-cite-article nil) (defvar gnus-cite-prefix-alist nil) *************** The text matching the first grouping wil *** 136,140 **** ;; IN: is the line number of the previous line if part of the same attribution, ;; PREFIX: Is the citation prefix of the attribution line(s), and ! ;; TAG: Is a SuperCite tag, if any. ;;; Commands: --- 139,149 ---- ;; IN: is the line number of the previous line if part of the same attribution, ;; PREFIX: Is the citation prefix of the attribution line(s), and ! ;; TAG: Is a Supercite tag, if any. ! ! (defvar gnus-cited-text-button-line-format-alist ! `((?b beg ?d) ! (?e end ?d) ! (?l (- end beg) ?d))) ! (defvar gnus-cited-text-button-line-format-spec nil) ;;; Commands: *************** Text is considered cited if at least `gn *** 150,154 **** lines matches `gnus-cite-prefix-regexp' with the same prefix. ! Lines matching `gnus-cite-attribution-postfix' and perhaps `gnus-cite-attribution-prefix' are considered attribution lines." (interactive (list 'force)) --- 159,163 ---- lines matches `gnus-cite-prefix-regexp' with the same prefix. ! Lines matching `gnus-cite-attribution-suffix' and perhaps `gnus-cite-attribution-prefix' are considered attribution lines." (interactive (list 'force)) *************** Lines matching `gnus-cite-attribution-po *** 194,198 **** ;; Add attribution button. (goto-line number) ! (if (re-search-forward gnus-cite-attribution-postfix (save-excursion (end-of-line 1) (point)) t) --- 203,207 ---- ;; Add attribution button. (goto-line number) ! (if (re-search-forward gnus-cite-attribution-suffix (save-excursion (end-of-line 1) (point)) t) *************** Lines matching `gnus-cite-attribution-po *** 211,238 **** (gnus-cite-add-face number skip gnus-cite-attribution-face))))) ! (defun gnus-article-hide-citation (&optional force) ! "Hide all cited text except attribution lines. ! See the documentation for `gnus-article-highlight-citation'." ! (interactive (list 'force)) (save-excursion (set-buffer gnus-article-buffer) ! (gnus-cite-parse-maybe force) ! (let ((buffer-read-only nil) ! (alist gnus-cite-prefix-alist) ! (inhibit-point-motion-hooks t) ! numbers number) (while alist ! (setq numbers (cdr (car alist)) ! alist (cdr alist)) (while numbers ! (setq number (car numbers) ! numbers (cdr numbers)) ! (goto-line number) ! (or (assq number gnus-cite-attribution-alist) ! (add-text-properties (point) (progn (forward-line 1) (point)) ! gnus-hidden-properties))))))) ! ! (defun gnus-article-hide-citation-maybe (&optional force) ! "Hide cited text that has an attribution line. This will do nothing unless at least `gnus-cite-hide-percentage' percent and at least `gnus-cite-hide-absolute' lines of the body is --- 220,361 ---- (gnus-cite-add-face number skip gnus-cite-attribution-face))))) ! (defun gnus-dissect-cited-text () ! "Dissect the article buffer looking for cited text." (save-excursion (set-buffer gnus-article-buffer) ! (gnus-cite-parse-maybe) ! (let ((alist gnus-cite-prefix-alist) ! prefix numbers number marks m) ! ;; Loop through citation prefixes. (while alist ! (setq numbers (pop alist) ! prefix (pop numbers)) (while numbers ! (setq number (pop numbers)) ! (goto-char (point-min)) ! (forward-line number) ! (push (cons (point-marker) "") marks) ! (while (and numbers ! (= (1- number) (car numbers))) ! (setq number (pop numbers))) ! (goto-char (point-min)) ! (forward-line (1- number)) ! (push (cons (point-marker) prefix) marks))) ! (goto-char (point-min)) ! (search-forward "\n\n" nil t) ! (push (cons (point-marker) "") marks) ! (goto-char (point-max)) ! (re-search-backward gnus-signature-separator nil t) ! (push (cons (point-marker) "") marks) ! (setq marks (sort marks (lambda (m1 m2) (< (car m1) (car m2))))) ! (let* ((omarks marks)) ! (setq marks nil) ! (while (cdr omarks) ! (if (= (caar omarks) (caadr omarks)) ! (progn ! (unless (equal (cdar omarks) "") ! (push (car omarks) marks)) ! (unless (equal (cdadr omarks) "") ! (push (cadr omarks) marks)) ! (setq omarks (cdr omarks))) ! (push (car omarks) marks)) ! (setq omarks (cdr omarks))) ! (when (car omarks) ! (push (car omarks) marks)) ! (setq marks (setq m (nreverse marks))) ! (while (cddr m) ! (if (and (equal (cdadr m) "") ! (equal (cdar m) (cdaddr m)) ! (goto-char (caadr m)) ! (forward-line 1) ! (= (point) (caaddr m))) ! (setcdr m (cdddr m)) ! (setq m (cdr m)))) ! marks)))) ! ! ! (defun gnus-article-fill-cited-article (&optional force) ! "Do word wrapping in the current article." ! (interactive (list t)) ! (save-excursion ! (set-buffer gnus-article-buffer) ! (let ((buffer-read-only nil) ! (inhibit-point-motion-hooks t) ! (marks (gnus-dissect-cited-text)) ! (adaptive-fill-mode nil)) ! (save-restriction ! (while (cdr marks) ! (widen) ! (narrow-to-region (caar marks) (caadr marks)) ! (let ((adaptive-fill-regexp ! (concat "^" (regexp-quote (cdar marks)) " *")) ! (fill-prefix (cdar marks))) ! (fill-region (point-min) (point-max))) ! (set-marker (caar marks) nil) ! (setq marks (cdr marks))) ! (when marks ! (set-marker (caar marks) nil)))))) ! ! (defun gnus-article-hide-citation (&optional arg force) ! "Toggle hiding of all cited text except attribution lines. ! See the documentation for `gnus-article-highlight-citation'. ! If given a negative prefix, always show; if given a positive prefix, ! always hide." ! (interactive (append (gnus-hidden-arg) (list 'force))) ! (setq gnus-cited-text-button-line-format-spec ! (gnus-parse-format gnus-cited-text-button-line-format ! gnus-cited-text-button-line-format-alist t)) ! (unless (gnus-article-check-hidden-text 'cite arg) ! (save-excursion ! (set-buffer gnus-article-buffer) ! (let ((buffer-read-only nil) ! (marks (gnus-dissect-cited-text)) ! (inhibit-point-motion-hooks t) ! (props (nconc (list 'gnus-type 'cite) ! gnus-hidden-properties)) ! beg end) ! (while marks ! (setq beg nil ! end nil) ! (while (and marks (string= (cdar marks) "")) ! (setq marks (cdr marks))) ! (when marks ! (setq beg (caar marks))) ! (while (and marks (not (string= (cdar marks) ""))) ! (setq marks (cdr marks))) ! (when marks ! (setq end (caar marks))) ! ;; Skip past lines we want to leave visible. ! (when (and beg end gnus-cited-lines-visible) ! (goto-char beg) ! (forward-line gnus-cited-lines-visible) ! (if (>= (point) end) ! (setq beg nil) ! (setq beg (point-marker)))) ! (when (and beg end) ! (gnus-add-text-properties beg end props) ! (goto-char beg) ! (unless (save-excursion (search-backward "\n\n" nil t)) ! (insert "\n")) ! (gnus-article-add-button ! (point) ! (progn (eval gnus-cited-text-button-line-format-spec) (point)) ! `gnus-article-toggle-cited-text (cons beg end)) ! (set-marker beg (point)))))))) ! ! (defun gnus-article-toggle-cited-text (region) ! "Toggle hiding the text in REGION." ! (let (buffer-read-only) ! (funcall ! (if (text-property-any ! (car region) (1- (cdr region)) ! (car gnus-hidden-properties) (cadr gnus-hidden-properties)) ! 'remove-text-properties 'gnus-add-text-properties) ! (car region) (cdr region) gnus-hidden-properties))) ! ! (defun gnus-article-hide-citation-maybe (&optional arg force) ! "Toggle hiding of cited text that has an attribution line. ! If given a negative prefix, always show; if given a positive prefix, ! always hide. This will do nothing unless at least `gnus-cite-hide-percentage' percent and at least `gnus-cite-hide-absolute' lines of the body is *************** cited text with attributions. When call *** 240,278 **** variables are ignored. See also the documentation for `gnus-article-highlight-citation'." ! (interactive (list 'force)) (save-excursion (set-buffer gnus-article-buffer) ! (gnus-cite-parse-maybe force) ! (goto-char (point-min)) ! (search-forward "\n\n" nil t) ! (let ((start (point)) ! (atts gnus-cite-attribution-alist) ! (buffer-read-only nil) ! (inhibit-point-motion-hooks t) ! (hiden 0) ! total) ! (goto-char (point-max)) ! (re-search-backward gnus-signature-separator nil t) ! (setq total (count-lines start (point))) ! (while atts ! (setq hiden (+ hiden (length (cdr (assoc (cdr (car atts)) ! gnus-cite-prefix-alist)))) ! atts (cdr atts))) ! (if (or force ! (and (> (* 100 hiden) (* gnus-cite-hide-percentage total)) ! (> hiden gnus-cite-hide-absolute))) ! (progn ! (setq atts gnus-cite-attribution-alist) ! (while atts ! (setq total (cdr (assoc (cdr (car atts)) gnus-cite-prefix-alist)) ! atts (cdr atts)) ! (while total ! (setq hiden (car total) ! total (cdr total)) ! (goto-line hiden) ! (or (assq hiden gnus-cite-attribution-alist) ! (add-text-properties (point) ! (progn (forward-line 1) (point)) ! gnus-hidden-properties))))))))) ;;; Internal functions: --- 363,414 ---- variables are ignored. See also the documentation for `gnus-article-highlight-citation'." ! (interactive (append (gnus-hidden-arg) (list 'force))) ! (unless (gnus-article-check-hidden-text 'cite arg) ! (save-excursion ! (set-buffer gnus-article-buffer) ! (gnus-cite-parse-maybe force) ! (goto-char (point-min)) ! (search-forward "\n\n" nil t) ! (let ((start (point)) ! (atts gnus-cite-attribution-alist) ! (buffer-read-only nil) ! (inhibit-point-motion-hooks t) ! (hiden 0) ! total) ! (goto-char (point-max)) ! (re-search-backward gnus-signature-separator nil t) ! (setq total (count-lines start (point))) ! (while atts ! (setq hiden (+ hiden (length (cdr (assoc (cdar atts) ! gnus-cite-prefix-alist)))) ! atts (cdr atts))) ! (if (or force ! (and (> (* 100 hiden) (* gnus-cite-hide-percentage total)) ! (> hiden gnus-cite-hide-absolute))) ! (progn ! (setq atts gnus-cite-attribution-alist) ! (while atts ! (setq total (cdr (assoc (cdar atts) gnus-cite-prefix-alist)) ! atts (cdr atts)) ! (while total ! (setq hiden (car total) ! total (cdr total)) ! (goto-line hiden) ! (or (assq hiden gnus-cite-attribution-alist) ! (gnus-add-text-properties ! (point) (progn (forward-line 1) (point)) ! (nconc (list 'gnus-type 'cite) ! gnus-hidden-properties))))))))))) ! ! (defun gnus-article-hide-citation-in-followups () ! "Hide cited text in non-root articles." ! (interactive) (save-excursion (set-buffer gnus-article-buffer) ! (let ((article (cdr gnus-article-current))) ! (unless (save-excursion ! (set-buffer gnus-summary-buffer) ! (gnus-article-displayed-root-p article)) ! (gnus-article-hide-citation))))) ;;; Internal functions: *************** See also the documentation for `gnus-art *** 280,284 **** (defun gnus-cite-parse-maybe (&optional force) ;; Parse if the buffer has changes since last time. ! (if (eq gnus-article-length (- (point-max) (point-min))) () ;;Reset parser information. --- 416,420 ---- (defun gnus-cite-parse-maybe (&optional force) ;; Parse if the buffer has changes since last time. ! (if (equal gnus-cite-article gnus-article-current) () ;;Reset parser information. *************** See also the documentation for `gnus-art *** 292,296 **** (> (buffer-size) gnus-cite-parse-max-size)) () ! (setq gnus-article-length (- (point-max) (point-min))) (gnus-cite-parse)))) --- 428,433 ---- (> (buffer-size) gnus-cite-parse-max-size)) () ! (setq gnus-cite-article (cons (car gnus-article-current) ! (cdr gnus-article-current))) (gnus-cite-parse)))) *************** See also the documentation for `gnus-art *** 316,320 **** start end) (goto-char begin) ! ;; Ignore standard SuperCite attribution prefix. (if (looking-at gnus-supercite-regexp) (if (match-end 1) --- 453,457 ---- start end) (goto-char begin) ! ;; Ignore standard Supercite attribution prefix. (if (looking-at gnus-supercite-regexp) (if (match-end 1) *************** See also the documentation for `gnus-art *** 328,332 **** (setq end (match-end 0) prefix (buffer-substring begin end)) ! (set-text-properties 0 (length prefix) nil prefix) (setq entry (assoc prefix alist)) (if entry --- 465,469 ---- (setq end (match-end 0) prefix (buffer-substring begin end)) ! (gnus-set-text-properties 0 (length prefix) nil prefix) (setq entry (assoc prefix alist)) (if entry *************** See also the documentation for `gnus-art *** 375,379 **** (goto-char (point-min)) (search-forward "\n\n" nil t) ! (while (re-search-forward gnus-cite-attribution-postfix (point-max) t) (let* ((start (match-beginning 0)) (end (match-end 0)) --- 512,516 ---- (goto-char (point-min)) (search-forward "\n\n" nil t) ! (while (re-search-forward gnus-cite-attribution-suffix (point-max) t) (let* ((start (match-beginning 0)) (end (match-end 0)) *************** See also the documentation for `gnus-art *** 393,397 **** (point)) t) ! (not (re-search-forward gnus-cite-attribution-postfix start t)) (count-lines (point-min) (1+ (point))))))) --- 530,534 ---- (point)) t) ! (not (re-search-forward gnus-cite-attribution-suffix start t)) (count-lines (point-min) (1+ (point))))))) *************** See also the documentation for `gnus-art *** 464,468 **** ;; WROTE is the attribution line number. ;; PREFIX is the attribution line prefix. ! ;; TAG is the SuperCite tag on the attribution line. (let ((atts gnus-cite-loose-attribution-alist) (case-fold-search t) --- 601,605 ---- ;; WROTE is the attribution line number. ;; PREFIX is the attribution line prefix. ! ;; TAG is the Supercite tag on the attribution line. (let ((atts gnus-cite-loose-attribution-alist) (case-fold-search t) *************** See also the documentation for `gnus-art *** 537,544 **** (defun gnus-cite-add-face (number prefix face) ;; At line NUMBER, ignore PREFIX and add FACE to the rest of the line. ! (if face ! (let ((inhibit-point-motion-hooks t) ! from to) ! (goto-line number) (forward-char (length prefix)) (skip-chars-forward " \t") --- 674,682 ---- (defun gnus-cite-add-face (number prefix face) ;; At line NUMBER, ignore PREFIX and add FACE to the rest of the line. ! (when face ! (let ((inhibit-point-motion-hooks t) ! from to) ! (goto-line number) ! (unless (eobp) ;; Sometimes things become confused. (forward-char (length prefix)) (skip-chars-forward " \t") *************** See also the documentation for `gnus-art *** 547,552 **** (skip-chars-backward " \t") (setq to (point)) ! (if (< from to) ! (gnus-overlay-put (gnus-make-overlay from to) 'face face))))) (defun gnus-cite-toggle (prefix) --- 685,690 ---- (skip-chars-backward " \t") (setq to (point)) ! (when (< from to) ! (gnus-overlay-put (gnus-make-overlay from to) 'face face)))))) (defun gnus-cite-toggle (prefix) *************** See also the documentation for `gnus-art *** 566,571 **** ((assq number gnus-cite-attribution-alist)) (t ! (add-text-properties (point) (progn (forward-line 1) (point)) ! gnus-hidden-properties))))))) (defun gnus-cite-find-prefix (line) --- 704,711 ---- ((assq number gnus-cite-attribution-alist)) (t ! (gnus-add-text-properties ! (point) (progn (forward-line 1) (point)) ! (nconc (list 'gnus-type 'cite) ! gnus-hidden-properties)))))))) (defun gnus-cite-find-prefix (line) *************** See also the documentation for `gnus-art *** 580,583 **** --- 720,728 ---- (setq prefix (car entry)))) prefix)) + + (gnus-add-shutdown 'gnus-cache-close 'gnus) + + (defun gnus-cache-close () + (setq gnus-cite-prefix-alist nil)) (gnus-ems-redefine) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/gnus-cus.el emacs-19.32/lisp/gnus-cus.el *** emacs-19.31/lisp/gnus-cus.el Tue Mar 26 19:14:06 1996 --- emacs-19.32/lisp/gnus-cus.el Sat Jul 20 02:07:24 1996 *************** *** 1,6 **** ;;; gnus-cus.el --- User friendly customization of Gnus ! ! ;; Copyright (C) 1995 Free Software Foundation, Inc. ! ;; Author: Per Abrahamsen ;; Keywords: help, news --- 1,5 ---- ;;; gnus-cus.el --- User friendly customization of Gnus ! ;; Copyright (C) 1995,96 Free Software Foundation, Inc. ! ;; ;; Author: Per Abrahamsen ;; Keywords: help, news *************** *** 30,39 **** (require 'custom) (require 'gnus-ems) ! ;; The following is just helper functions and data, not ment to be set ;; by the user. (defun gnus-make-face (color) ;; Create entry for face with COLOR. ! (custom-face-lookup color nil nil 'custom:asis 'custom:asis 'custom:asis)) (defvar gnus-face-light-name-list --- 29,40 ---- (require 'custom) (require 'gnus-ems) + (require 'browse-url) + (eval-when-compile (require 'cl)) ! ;; The following is just helper functions and data, not meant to be set ;; by the user. (defun gnus-make-face (color) ;; Create entry for face with COLOR. ! (custom-face-lookup color nil nil nil nil nil)) (defvar gnus-face-light-name-list *************** *** 43,124 **** (defvar gnus-face-dark-name-list ! '("RoyalBlue" "firebrick" ! "dark green" "OrangeRed" "dark khaki" "dark violet" ! "SteelBlue4")) ; CornflowerBlue SeaGreen OrangeRed SteelBlue4 DeepPink3 ; DarkOlviveGreen4 (custom-declare '() ! '((tag . "GNUS") (doc . "\ The coffee-brewing, all singing, all dancing, kitchen sink newsreader.") (type . group) ! (data ((tag . "Visual") ! (doc . "\ ! GNUS can be made colorful and fun or grey and dull as you wish.") ! (type . group) ! (data ((tag . "Visual") ! (doc . "Enable visual features. If `visual' is disabled, there will be no menus and few faces. Most of ! the visual customization options below will be ignored. GNUS will use less space and be faster as a result.") ! (default . t) ! (name . gnus-visual) ! (type . toggle)) ! ((tag . "WWW Browser") ! (doc . "\ WWW Browser to call when clicking on an URL button in the article buffer. You can choose between one of the predefined browsers, or `Other'.") ! (name . gnus-button-url) ! (calculate . (cond ((boundp 'browse-url-browser-function) ! browse-url-browser-function) ! ((fboundp 'w3-fetch) ! 'w3-fetch) ! ((eq window-system 'x) ! 'gnus-netscape-open-url))) ! (type . choice) ! (data ((tag . "W3") ! (type . const) ! (default . w3-fetch)) ! ((tag . "Netscape") ! (type . const) ! (default . gnus-netscape-open-url)) ! ((prompt . "Other") ! (doc . "\ You must specify the name of a Lisp function here. The lisp function should open a WWW browser when called with an URL (a string). ") ! (default . __uninitialized__) ! (type . symbol)))) ! ((tag . "Mouse Face") ! (doc . "\ Face used for group or summary buffer mouse highlighting. The line beneath the mouse pointer will be highlighted with this face.") ! (name . gnus-mouse-face) ! (calculate . (if (boundp 'gnus-mouse-face) ! gnus-mouse-face ! 'highlight)) ! (type . face)) ! ((tag . "Article Display") ! (doc . "Controls how the article buffer will look. ! ! The list below contains various filters you can use to change the look ! of the article. If you leave the list empty, the article will appear ! exactly as it is stored on the disk. The list entries will hide or ! highlight various parts of the article, making it easier to find the ! information you want.") ! (name . gnus-article-display-hook) ! (type . list) ! (default . (gnus-article-hide-headers-if-wanted ! gnus-article-treat-overstrike ! gnus-article-maybe-highlight)) ! (data ((type . repeat) ! (header . nil) ! (data (tag . "Filter") ! (type . choice) ! (data ((tag . "Treat Overstrike") ! (doc . "\ Convert use of overstrike into bold and underline. --- 44,155 ---- (defvar gnus-face-dark-name-list ! (list ! ;; Not all servers have dark blue in rgb.txt. ! (if (and (eq window-system 'x) (x-color-defined-p "dark blue")) ! "dark blue" ! "royal blue") ! "firebrick" "dark green" "OrangeRed" ! "dark khaki" "dark violet" "SteelBlue4")) ; CornflowerBlue SeaGreen OrangeRed SteelBlue4 DeepPink3 ; DarkOlviveGreen4 (custom-declare '() ! '((tag . "Gnus") (doc . "\ The coffee-brewing, all singing, all dancing, kitchen sink newsreader.") (type . group) ! (data ! ((tag . "Visual") ! (doc . "\ ! Gnus can be made colorful and fun or grey and dull as you wish.") ! (type . group) ! (data ! ((tag . "Visual") ! (doc . "Enable visual features. If `visual' is disabled, there will be no menus and few faces. Most of ! the visual customization options below will be ignored. Gnus will use less space and be faster as a result.") ! (default . ! (summary-highlight group-highlight ! article-highlight ! mouse-face ! summary-menu group-menu article-menu ! tree-highlight menu highlight ! browse-menu server-menu ! page-marker tree-menu binary-menu pick-menu ! grouplens-menu)) ! (name . gnus-visual) ! (type . sexp)) ! ((tag . "WWW Browser") ! (doc . "\ WWW Browser to call when clicking on an URL button in the article buffer. You can choose between one of the predefined browsers, or `Other'.") ! (name . browse-url-browser-function) ! (calculate . (cond ((boundp 'browse-url-browser-function) ! browse-url-browser-function) ! ((fboundp 'w3-fetch) ! 'w3-fetch) ! ((eq window-system 'x) ! 'gnus-netscape-open-url))) ! (type . choice) ! (data ! ((tag . "W3") ! (type . const) ! (default . w3-fetch)) ! ((tag . "Netscape") ! (type . const) ! (default . browse-url-netscape)) ! ((prompt . "Other") ! (doc . "\ You must specify the name of a Lisp function here. The lisp function should open a WWW browser when called with an URL (a string). ") ! (default . __uninitialized__) ! (type . symbol)))) ! ((tag . "Mouse Face") ! (doc . "\ Face used for group or summary buffer mouse highlighting. The line beneath the mouse pointer will be highlighted with this face.") ! (name . gnus-mouse-face) ! (calculate . (condition-case () ! (if (gnus-visual-p 'mouse-face 'highlight) ! (if (boundp 'gnus-mouse-face) ! gnus-mouse-face ! 'highlight) ! 'default) ! (error 'default))) ! (type . face)) ! ((tag . "Article Display") ! (doc . "Controls how the article buffer will look. ! ! If you leave the list empty, the article will appear exactly as it is ! stored on the disk. The list entries will hide or highlight various ! parts of the article, making it easier to find the information you ! want.") ! (name . gnus-article-display-hook) ! (type . list) ! (calculate ! . (if (and (string-match "xemacs" emacs-version) ! (featurep 'xface)) ! '(gnus-article-hide-headers-if-wanted ! gnus-article-hide-boring-headers ! gnus-article-treat-overstrike ! gnus-article-maybe-highlight ! gnus-article-display-x-face) ! '(gnus-article-hide-headers-if-wanted ! gnus-article-hide-boring-headers ! gnus-article-treat-overstrike ! gnus-article-maybe-highlight))) ! (data ! ((type . repeat) ! (header . nil) ! (data ! (tag . "Filter") ! (type . choice) ! (data ! ((tag . "Treat Overstrike") ! (doc . "\ Convert use of overstrike into bold and underline. *************** still in use on some newsgroups, in part *** 130,150 **** hierarchy. ") ! (type . const) ! (default . ! gnus-article-treat-overstrike)) ! ((tag . "Word Wrap") ! (doc . "\ Format too long lines. ") ! (type . const) ! (default . gnus-article-word-wrap)) ! ((tag . "Remove CR") ! (doc . "\ Remove carriage returns from an article. ") ! (type . const) ! (default . gnus-article-remove-cr)) ! ((tag . "Display X-Face") ! (doc . "\ Look for an X-Face header and display it if present. --- 161,181 ---- hierarchy. ") ! (type . const) ! (default . ! gnus-article-treat-overstrike)) ! ((tag . "Word Wrap") ! (doc . "\ Format too long lines. ") ! (type . const) ! (default . gnus-article-word-wrap)) ! ((tag . "Remove CR") ! (doc . "\ Remove carriage returns from an article. ") ! (type . const) ! (default . gnus-article-remove-cr)) ! ((tag . "Display X-Face") ! (doc . "\ Look for an X-Face header and display it if present. *************** See also `X Face Command' for a definiti *** 152,159 **** used for decoding and displaying the face. ") ! (type . const) ! (default . gnus-article-display-x-face)) ! ((tag . "Unquote Printable") ! (doc . "\ Transform MIME quoted printable into 8-bit characters. --- 183,190 ---- used for decoding and displaying the face. ") ! (type . const) ! (default . gnus-article-display-x-face)) ! ((tag . "Unquote Printable") ! (doc . "\ Transform MIME quoted printable into 8-bit characters. *************** Quoted printable is often seen by string *** 161,305 **** expect a non-English letter. ") ! (type . const) ! (default . ! gnus-article-de-quoted-unreadable)) ! ((tag . "Universal Time") ! (doc . "\ Convert date header to universal time. ") ! (type . const) ! (default . gnus-article-date-ut)) ! ((tag . "Local Time") ! (doc . "\ Convert date header to local timezone. ") ! (type . const) ! (default . gnus-article-date-local)) ! ((tag . "Lapsed Time") ! (doc . "\ Replace date header with a header showing the articles age. ") ! (type . const) ! (default . gnus-article-date-lapsed)) ! ((tag . "Highlight") ! (doc . "\ Highlight headers, citations, signature, and buttons. ") ! (type . const) ! (default . gnus-article-highlight)) ! ((tag . "Maybe Highlight") ! (doc . "\ Highlight headers, signature, and buttons if `Visual' is turned on. ") ! (type . const) ! (default . ! gnus-article-maybe-highlight)) ! ((tag . "Highlight Some") ! (doc . "\ Highlight headers, signature, and buttons. ") ! (type . const) ! (default . gnus-article-highlight-some)) ! ((tag . "Highlight Headers") ! (doc . "\ Highlight headers as specified by `Article Header Highlighting'. ") ! (type . const) ! (default . ! gnus-article-highlight-headers)) ! ((tag . "Highlight Signature") ! (doc . "\ Highlight the signature as specified by `Article Signature Face'. ") ! (type . const) ! (default . ! gnus-article-highlight-signature)) ! ((tag . "Citation") ! (doc . "\ Highlight the citations as specified by `Citation Faces'. ") ! (type . const) ! (default . ! gnus-article-highlight-citation)) ! ((tag . "Hide") ! (doc . "\ Hide unwanted headers, excess citation, and the signature. ") ! (type . const) ! (default . gnus-article-hide)) ! ((tag . "Hide Headers If Wanted") ! (doc . "\ Hide headers, but allow user to display them with `t' or `v'. ") ! (type . const) ! (default . ! gnus-article-hide-headers-if-wanted)) ! ((tag . "Hide Headers") ! (doc . "\ Hide unwanted headers and possibly sort them as well. Most likely you want to use `Hide Headers If Wanted' instead. ") ! (type . const) ! (default . gnus-article-hide-headers)) ! ((tag . "Hide Signature") ! (doc . "\ Hide the signature. ") ! (type . const) ! (default . gnus-article-hide-signature)) ! ((tag . "Hide Excess Citations") ! (doc . "\ Hide excess citation. Excess is defined by `Citation Hide Percentage' and `Citation Hide Absolute'. ") ! (type . const) ! (default . ! gnus-article-hide-citation-maybe)) ! ((tag . "Hide Citations") ! (doc . "\ Hide all cited text. ") ! (type . const) ! (default . gnus-article-hide-citation)) ! ((tag . "Add Buttons") ! (doc . "\ Make URL's into clickable buttons. ") ! (type . const) ! (default . gnus-article-add-buttons)) ! ((prompt . "Other") ! (doc . "\ Name of Lisp function to call. Push the `Filter' button to select one of the predefined filters. ") ! (type . symbol))))))) ! ((tag . "Article Button Face") ! (doc . "\ Face used for highlighting buttons in the article buffer. An article button is a piece of text that you can activate by pressing `RET' or `mouse-2' above it.") ! (name . gnus-article-button-face) ! (default . bold) ! (type . face)) ! ((tag . "Article Mouse Face") ! (doc . "\ Face used for mouse highlighting in the article buffer. Article buttons will be displayed in this face when the cursor is above them.") ! (name . gnus-article-mouse-face) ! (default . highlight) ! (type . face)) ! ((tag . "Article Signature Face") ! (doc . "\ Face used for highlighting a signature in the article buffer.") ! (name . gnus-signature-face) ! (default . italic) ! (type . face)) ! ((tag . "Article Header Highlighting") ! (doc . "\ Controls highlighting of article header. --- 192,336 ---- expect a non-English letter. ") ! (type . const) ! (default . ! gnus-article-de-quoted-unreadable)) ! ((tag . "Universal Time") ! (doc . "\ Convert date header to universal time. ") ! (type . const) ! (default . gnus-article-date-ut)) ! ((tag . "Local Time") ! (doc . "\ Convert date header to local timezone. ") ! (type . const) ! (default . gnus-article-date-local)) ! ((tag . "Lapsed Time") ! (doc . "\ Replace date header with a header showing the articles age. ") ! (type . const) ! (default . gnus-article-date-lapsed)) ! ((tag . "Highlight") ! (doc . "\ Highlight headers, citations, signature, and buttons. ") ! (type . const) ! (default . gnus-article-highlight)) ! ((tag . "Maybe Highlight") ! (doc . "\ Highlight headers, signature, and buttons if `Visual' is turned on. ") ! (type . const) ! (default . ! gnus-article-maybe-highlight)) ! ((tag . "Highlight Some") ! (doc . "\ Highlight headers, signature, and buttons. ") ! (type . const) ! (default . gnus-article-highlight-some)) ! ((tag . "Highlight Headers") ! (doc . "\ Highlight headers as specified by `Article Header Highlighting'. ") ! (type . const) ! (default . ! gnus-article-highlight-headers)) ! ((tag . "Highlight Signature") ! (doc . "\ Highlight the signature as specified by `Article Signature Face'. ") ! (type . const) ! (default . ! gnus-article-highlight-signature)) ! ((tag . "Citation") ! (doc . "\ Highlight the citations as specified by `Citation Faces'. ") ! (type . const) ! (default . ! gnus-article-highlight-citation)) ! ((tag . "Hide") ! (doc . "\ Hide unwanted headers, excess citation, and the signature. ") ! (type . const) ! (default . gnus-article-hide)) ! ((tag . "Hide Headers If Wanted") ! (doc . "\ Hide headers, but allow user to display them with `t' or `v'. ") ! (type . const) ! (default . ! gnus-article-hide-headers-if-wanted)) ! ((tag . "Hide Headers") ! (doc . "\ Hide unwanted headers and possibly sort them as well. Most likely you want to use `Hide Headers If Wanted' instead. ") ! (type . const) ! (default . gnus-article-hide-headers)) ! ((tag . "Hide Signature") ! (doc . "\ Hide the signature. ") ! (type . const) ! (default . gnus-article-hide-signature)) ! ((tag . "Hide Excess Citations") ! (doc . "\ Hide excess citation. Excess is defined by `Citation Hide Percentage' and `Citation Hide Absolute'. ") ! (type . const) ! (default . ! gnus-article-hide-citation-maybe)) ! ((tag . "Hide Citations") ! (doc . "\ Hide all cited text. ") ! (type . const) ! (default . gnus-article-hide-citation)) ! ((tag . "Add Buttons") ! (doc . "\ Make URL's into clickable buttons. ") ! (type . const) ! (default . gnus-article-add-buttons)) ! ((prompt . "Other") ! (doc . "\ Name of Lisp function to call. Push the `Filter' button to select one of the predefined filters. ") ! (type . symbol))))))) ! ((tag . "Article Button Face") ! (doc . "\ Face used for highlighting buttons in the article buffer. An article button is a piece of text that you can activate by pressing `RET' or `mouse-2' above it.") ! (name . gnus-article-button-face) ! (default . bold) ! (type . face)) ! ((tag . "Article Mouse Face") ! (doc . "\ Face used for mouse highlighting in the article buffer. Article buttons will be displayed in this face when the cursor is above them.") ! (name . gnus-article-mouse-face) ! (default . highlight) ! (type . face)) ! ((tag . "Article Signature Face") ! (doc . "\ Face used for highlighting a signature in the article buffer.") ! (name . gnus-signature-face) ! (default . italic) ! (type . face)) ! ((tag . "Article Header Highlighting") ! (doc . "\ Controls highlighting of article header. *************** header, specify `None' in the `Content' *** 323,390 **** `None' in the `Name' field if you only want to leave the name part alone.") ! (name . gnus-header-face-alist) ! (type . list) ! (calculate . (cond ((not (eq gnus-display-type 'color)) ! '(("" bold italic))) ! ((eq gnus-background-mode 'dark) ! (list (list "From" nil ! (custom-face-lookup ! "dark blue" nil nil t t ! 'custom:asis)) ! (list "Subject" nil ! (custom-face-lookup ! "pink" nil nil t t 'custom:asis)) ! (list "Newsgroups:.*," nil ! (custom-face-lookup ! "yellow" nil nil t t 'custom:asis)) ! (list "" ! (custom-face-lookup ! "cyan" nil nil t 'custom:asis 'custom:asis) ! (custom-face-lookup ! "forestgreen" ! nil nil 'custom:asis t 'custom:asis)))) ! (t ! (list (list "From" nil ! (custom-face-lookup ! "RoyalBlue" ! nil nil t t 'custom:asis)) ! (list "Subject" nil ! (custom-face-lookup ! "firebrick" ! nil nil t t 'custom:asis)) ! (list "Newsgroups:.*," nil ! (custom-face-lookup ! "indianred" nil nil t t 'custom:asis)) ! (list "" ! (custom-face-lookup ! "DarkGreen" ! nil nil t 'custom:asis 'custom:asis) ! (custom-face-lookup ! "DarkGreen" ! nil nil nil t 'custom:asis)))))) ! (data ((type . repeat) ! (header . nil) ! (data (type . list) ! (compact . t) ! (data ((type . string) ! (prompt . "Header") ! (tag . "Header ")) ! "\n " ! ((type . face) ! (prompt . "Name") ! (tag . "Name ")) ! "\n " ! ((type . face) ! (tag . "Content")) ! "\n"))))) ! ((tag . "Attribution Face") ! (doc . "\ Face used for attribution lines. It is merged with the face for the cited text belonging to the attribution.") ! (name . gnus-cite-attribution-face) ! (default . underline) ! (type . face)) ! ((tag . "Citation Faces") ! (doc . "\ List of faces used for highlighting citations. --- 354,416 ---- `None' in the `Name' field if you only want to leave the name part alone.") ! (name . gnus-header-face-alist) ! (type . list) ! (calculate ! . (cond ! ((not (eq gnus-display-type 'color)) ! '(("" bold italic))) ! ((eq gnus-background-mode 'dark) ! (list ! (list "From" nil ! (custom-face-lookup "light blue" nil nil t t nil)) ! (list "Subject" nil ! (custom-face-lookup "pink" nil nil t t nil)) ! (list "Newsgroups:.*," nil ! (custom-face-lookup "yellow" nil nil t t nil)) ! (list ! "" ! (custom-face-lookup "cyan" nil nil t nil nil) ! (custom-face-lookup "forestgreen" nil nil nil t ! nil)))) ! (t ! (list ! (list "From" nil ! (custom-face-lookup "MidnightBlue" nil nil t t nil)) ! (list "Subject" nil ! (custom-face-lookup "firebrick" nil nil t t nil)) ! (list "Newsgroups:.*," nil ! (custom-face-lookup "indianred" nil nil t t nil)) ! (list "" ! (custom-face-lookup ! "DarkGreen" nil nil t nil nil) ! (custom-face-lookup "DarkGreen" nil nil ! nil t nil)))))) ! (data ! ((type . repeat) ! (header . nil) ! (data ! (type . list) ! (compact . t) ! (data ! ((type . string) ! (prompt . "Header") ! (tag . "Header ")) ! "\n " ! ((type . face) ! (prompt . "Name") ! (tag . "Name ")) ! "\n " ! ((type . face) ! (tag . "Content")) ! "\n"))))) ! ((tag . "Attribution Face") ! (doc . "\ Face used for attribution lines. It is merged with the face for the cited text belonging to the attribution.") ! (name . gnus-cite-attribution-face) ! (default . underline) ! (type . face)) ! ((tag . "Citation Faces") ! (doc . "\ List of faces used for highlighting citations. *************** When there are citations from multiple a *** 392,430 **** Gnus will try to give each citation from each article its own face. This should make it easier to see who wrote what.") ! (name . gnus-cite-face-list) ! (import . gnus-custom-import-cite-face-list) ! (type . list) ! (calculate . (cond ((not (eq gnus-display-type 'color)) ! '(italic)) ! ((eq gnus-background-mode 'dark) ! (mapcar 'gnus-make-face ! gnus-face-light-name-list)) ! (t ! (mapcar 'gnus-make-face ! gnus-face-dark-name-list)))) ! (data ((type . repeat) ! (header . nil) ! (data (type . face) ! (tag . "Face"))))) ! ((tag . "Citation Hide Percentage") ! (doc . "\ Only hide excess citation if above this percentage of the body.") ! (name . gnus-cite-hide-percentage) ! (default . 50) ! (type . integer)) ! ((tag . "Citation Hide Absolute") ! (doc . "\ Only hide excess citation if above this number of lines in the body.") ! (name . gnus-cite-hide-absolute) ! (default . 10) ! (type . integer)) ! ((tag . "Summary Selected Face") ! (doc . "\ Face used for highlighting the current article in the summary buffer.") ! (name . gnus-summary-selected-face) ! (default . underline) ! (type . face)) ! ((tag . "Summary Line Highlighting") ! (doc . "\ Controls the highlighting of summary buffer lines. --- 418,457 ---- Gnus will try to give each citation from each article its own face. This should make it easier to see who wrote what.") ! (name . gnus-cite-face-list) ! (import . gnus-custom-import-cite-face-list) ! (type . list) ! (calculate . (cond ((not (eq gnus-display-type 'color)) ! '(italic)) ! ((eq gnus-background-mode 'dark) ! (mapcar 'gnus-make-face ! gnus-face-light-name-list)) ! (t ! (mapcar 'gnus-make-face ! gnus-face-dark-name-list)))) ! (data ! ((type . repeat) ! (header . nil) ! (data (type . face) ! (tag . "Face"))))) ! ((tag . "Citation Hide Percentage") ! (doc . "\ Only hide excess citation if above this percentage of the body.") ! (name . gnus-cite-hide-percentage) ! (default . 50) ! (type . integer)) ! ((tag . "Citation Hide Absolute") ! (doc . "\ Only hide excess citation if above this number of lines in the body.") ! (name . gnus-cite-hide-absolute) ! (default . 10) ! (type . integer)) ! ((tag . "Summary Selected Face") ! (doc . "\ Face used for highlighting the current article in the summary buffer.") ! (name . gnus-summary-selected-face) ! (default . underline) ! (type . face)) ! ((tag . "Summary Line Highlighting") ! (doc . "\ Controls the highlighting of summary buffer lines. *************** default: The default article score. *** 444,528 **** below: The score below which articles are automatically marked as read. mark: The article's mark.") ! (name . gnus-summary-highlight) ! (type . list) ! (calculate . (cond ((not (eq gnus-display-type 'color)) ! '(((> score default) . bold) ! ((< score default) . italic))) ! ((eq gnus-background-mode 'dark) ! (list (cons '(= mark gnus-canceled-mark) ! (custom-face-lookup "yellow" "black" nil 'custom:asis 'custom:asis 'custom:asis)) ! (cons '(and (> score default) ! (or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark))) ! (custom-face-lookup "pink" nil nil t 'custom:asis 'custom:asis)) ! (cons '(and (< score default) ! (or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark))) ! (custom-face-lookup "pink" nil nil 'custom:asis t 'custom:asis)) ! (cons '(or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark)) ! (custom-face-lookup "pink" nil nil 'custom:asis 'custom:asis 'custom:asis)) ! ! (cons '(and (> score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "dark blue" nil nil t 'custom:asis 'custom:asis)) ! (cons '(and (< score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "SkyBlue" nil nil 'custom:asis t 'custom:asis)) ! (cons '(= mark gnus-ancient-mark) ! (custom-face-lookup "SkyBlue" nil nil 'custom:asis 'custom:asis 'custom:asis)) ! ! (cons '(and (> score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "white" nil nil t 'custom:asis 'custom:asis)) ! (cons '(and (< score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "white" nil nil 'custom:asis t 'custom:asis)) ! (cons '(= mark gnus-unread-mark) ! (custom-face-lookup "white" nil nil 'custom:asis 'custom:asis 'custom:asis)) ! ! (cons '(> score default) 'bold) ! (cons '(< score default) 'italic))) ! (t ! (list (cons '(= mark gnus-canceled-mark) ! (custom-face-lookup "yellow" "black" nil 'custom:asis 'custom:asis 'custom:asis)) ! (cons '(and (> score default) ! (or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark))) ! (custom-face-lookup "firebrick" nil nil t 'custom:asis 'custom:asis)) ! (cons '(and (< score default) ! (or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark))) ! (custom-face-lookup "firebrick" nil nil 'custom:asis t 'custom:asis)) ! (cons '(or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark)) ! (custom-face-lookup "firebrick" nil nil 'custom:asis 'custom:asis 'custom:asis)) ! ! (cons '(and (> score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "RoyalBlue" nil nil t 'custom:asis 'custom:asis)) ! (cons '(and (< score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "RoyalBlue" nil nil 'custom:asis t 'custom:asis)) ! (cons '(= mark gnus-ancient-mark) ! (custom-face-lookup "RoyalBlue" nil nil 'custom:asis 'custom:asis 'custom:asis)) ! ! (cons '(and (> score default) (/= mark gnus-unread-mark)) ! (custom-face-lookup "DarkGreen" nil nil t 'custom:asis 'custom:asis)) ! (cons '(and (< score default) (/= mark gnus-unread-mark)) ! (custom-face-lookup "DarkGreen" nil nil 'custom:asis t 'custom:asis)) ! (cons '(/= mark gnus-unread-mark) ! (custom-face-lookup "DarkGreen" nil nil 'custom:asis 'custom:asis 'custom:asis)) ! (cons '(> score default) 'bold) ! (cons '(< score default) 'italic))))) ! (data ((type . repeat) ! (header . nil) ! (data (type . pair) ! (compact . t) ! (data ((type . sexp) ! (width . 60) ! (tag . "Form")) ! "\n " ! ((type . face) ! (tag . "Face")) ! "\n"))))) ! ;; Do not define `gnus-button-alist' before we have ! ;; some `complexity' attribute so we can hide it from ! ;; beginners. ! ))))) (defun gnus-custom-import-cite-face-list (custom alist) --- 471,673 ---- below: The score below which articles are automatically marked as read. mark: The article's mark.") ! (name . gnus-summary-highlight) ! (type . list) ! (calculate ! . (cond ! ((not (eq gnus-display-type 'color)) ! '(((> score default) . bold) ! ((< score default) . italic))) ! ((eq gnus-background-mode 'dark) ! (list ! (cons ! '(= mark gnus-canceled-mark) ! (custom-face-lookup "yellow" "black" nil ! nil nil nil)) ! (cons '(and (> score default) ! (or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark))) ! (custom-face-lookup ! "pink" nil nil t nil nil)) ! (cons '(and (< score default) ! (or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark))) ! (custom-face-lookup "pink" nil nil ! nil t nil)) ! (cons '(or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark)) ! (custom-face-lookup ! "pink" nil nil nil nil nil)) ! ! (cons ! '(and (> score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "medium blue" nil nil t ! nil nil)) ! (cons ! '(and (< score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "SkyBlue" nil nil ! nil t nil)) ! (cons ! '(= mark gnus-ancient-mark) ! (custom-face-lookup "SkyBlue" nil nil ! nil nil nil)) ! (cons '(and (> score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "white" nil nil t ! nil nil)) ! (cons '(and (< score default) (= mark gnus-unread-mark)) ! (custom-face-lookup "white" nil nil ! nil t nil)) ! (cons '(= mark gnus-unread-mark) ! (custom-face-lookup ! "white" nil nil nil nil nil)) ! ! (cons '(> score default) 'bold) ! (cons '(< score default) 'italic))) ! (t ! (list ! (cons ! '(= mark gnus-canceled-mark) ! (custom-face-lookup ! "yellow" "black" nil nil nil nil)) ! (cons '(and (> score default) ! (or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark))) ! (custom-face-lookup "firebrick" nil nil ! t nil nil)) ! (cons '(and (< score default) ! (or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark))) ! (custom-face-lookup "firebrick" nil nil ! nil t nil)) ! (cons ! '(or (= mark gnus-dormant-mark) ! (= mark gnus-ticked-mark)) ! (custom-face-lookup ! "firebrick" nil nil nil nil nil)) ! ! (cons '(and (> score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "RoyalBlue" nil nil ! t nil nil)) ! (cons '(and (< score default) (= mark gnus-ancient-mark)) ! (custom-face-lookup "RoyalBlue" nil nil ! nil t nil)) ! (cons ! '(= mark gnus-ancient-mark) ! (custom-face-lookup ! "RoyalBlue" nil nil nil nil nil)) ! ! (cons '(and (> score default) (/= mark gnus-unread-mark)) ! (custom-face-lookup "DarkGreen" nil nil ! t nil nil)) ! (cons '(and (< score default) (/= mark gnus-unread-mark)) ! (custom-face-lookup "DarkGreen" nil nil ! nil t nil)) ! (cons ! '(/= mark gnus-unread-mark) ! (custom-face-lookup "DarkGreen" nil nil ! nil nil nil)) ! ! (cons '(> score default) 'bold) ! (cons '(< score default) 'italic))))) ! (data ! ((type . repeat) ! (header . nil) ! (data (type . pair) ! (compact . t) ! (data ((type . sexp) ! (width . 60) ! (tag . "Form")) ! "\n " ! ((type . face) ! (tag . "Face")) ! "\n"))))) ! ! ((tag . "Group Line Highlighting") ! (doc . "\ ! Controls the highlighting of group buffer lines. ! ! Below is a list of `Form'/`Face' pairs. When deciding how a a ! particular group line should be displayed, each form is ! evaluated. The content of the face field after the first true form is ! used. You can change how those group lines are displayed by ! editing the face field. ! ! It is also possible to change and add form fields, but currently that ! requires an understanding of Lisp expressions. Hopefully this will ! change in a future release. For now, you can use the following ! variables in the Lisp expression: ! ! group: The name of the group. ! unread: The number of unread articles in the group. ! method: The select method used. ! mailp: Whether it's a mail group or not. ! level: The level of the group. ! score: The score of the group. ! ticked: The number of ticked articles.") ! (name . gnus-group-highlight) ! (type . list) ! (calculate ! . (cond ! ((not (eq gnus-display-type 'color)) ! '((mailp . bold) ! ((= unread 0) . italic))) ! ((eq gnus-background-mode 'dark) ! `(((and (not mailp) (eq level 1)) . ! ,(custom-face-lookup "PaleTurquoise" nil nil t)) ! ((and (not mailp) (eq level 2)) . ! ,(custom-face-lookup "turquoise" nil nil t)) ! ((and (not mailp) (eq level 3)) . ! ,(custom-face-lookup "MediumTurquoise" nil nil t)) ! ((and (not mailp) (>= level 4)) . ! ,(custom-face-lookup "DarkTurquoise" nil nil t)) ! ((and mailp (eq level 1)) . ! ,(custom-face-lookup "aquamarine1" nil nil t)) ! ((and mailp (eq level 2)) . ! ,(custom-face-lookup "aquamarine2" nil nil t)) ! ((and mailp (eq level 3)) . ! ,(custom-face-lookup "aquamarine3" nil nil t)) ! ((and mailp (>= level 4)) . ! ,(custom-face-lookup "aquamarine4" nil nil t)) ! )) ! (t ! `(((and (not mailp) (<= level 3)) . ! ,(custom-face-lookup "ForestGreen" nil nil t)) ! ((and (not mailp) (eq level 4)) . ! ,(custom-face-lookup "DarkGreen" nil nil t)) ! ((and (not mailp) (eq level 5)) . ! ,(custom-face-lookup "CadetBlue4" nil nil t)) ! ((and mailp (eq level 1)) . ! ,(custom-face-lookup "DeepPink3" nil nil t)) ! ((and mailp (eq level 2)) . ! ,(custom-face-lookup "HotPink3" nil nil t)) ! ((and mailp (eq level 3)) . ! ,(custom-face-lookup ! ;; Not all servers have dark magenta in rgb.txt. ! (if (and (eq window-system 'x) ! (x-color-defined-p "dark magenta")) ! "dark magenta" ! "maroon") ! nil nil t)) ! ((and mailp (eq level 4)) . ! ,(custom-face-lookup "DeepPink4" nil nil t)) ! ((and mailp (> level 4)) . ! ,(custom-face-lookup "DarkOrchid4" nil nil t)) ! )))) ! (data ! ((type . repeat) ! (header . nil) ! (data (type . pair) ! (compact . t) ! (data ((type . sexp) ! (width . 60) ! (tag . "Form")) ! "\n " ! ((type . face) ! (tag . "Face")) ! "\n"))))) ! ! ;; Do not define `gnus-button-alist' before we have ! ;; some `complexity' attribute so we can hide it from ! ;; beginners. ! ))))) (defun gnus-custom-import-cite-face-list (custom alist) *************** mark: The article's mark.") *** 533,546 **** (setq alist (mapcar 'gnus-make-face gnus-face-dark-name-list)))) (funcall (custom-super custom 'import) custom alist)) - - ;(defun gnus-custom-import-swap-alist (custom alist) - ; ;; Swap key and value in CUSTOM ALIST. - ; (let ((swap (mapcar (lambda (e) (cons (cdr e) (car e))) alist))) - ; (funcall (custom-super custom 'import) custom swap))) - - ;(defun gnus-custom-export-swap-alist (custom alist) - ; ;; Swap key and value in CUSTOM ALIST. - ; (let ((swap (mapcar (lambda (e) (cons (cdr e) (car e))) alist))) - ; (funcall (custom-super custom 'export) custom swap))) (provide 'gnus-cus) --- 678,681 ---- diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/gnus-demon.el emacs-19.32/lisp/gnus-demon.el *** emacs-19.31/lisp/gnus-demon.el Wed Dec 31 19:00:00 1969 --- emacs-19.32/lisp/gnus-demon.el Tue Jun 25 18:29:48 1996 *************** *** 0 **** --- 1,222 ---- + ;;; gnus-demon.el --- daemonic Gnus behaviour + ;; Copyright (C) 1995,96 Free Software Foundation, Inc. + + ;; Author: Lars Magne Ingebrigtsen + ;; Keywords: news + + ;; 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, Inc., 59 Temple Place - Suite 330, + ;; Boston, MA 02111-1307, USA. + + ;;; Commentary: + + ;;; Code: + + (require 'gnus) + + (eval-when-compile (require 'cl)) + + (defvar gnus-demon-handlers nil + "Alist of daemonic handlers to be run at intervals. + Each handler is a list on the form + + \(FUNCTION TIME IDLE) + + FUNCTION is the function to be called. + TIME is the number of `gnus-demon-timestep's between each call. + If nil, never call. If t, call each `gnus-demon-timestep'. + If IDLE is t, only call if Emacs has been idle for a while. If IDLE + is a number, only call when Emacs has been idle more than this number + of `gnus-demon-timestep's. If IDLE is nil, don't care about + idleness. If IDLE is a number and TIME is nil, then call once each + time Emacs has been idle for IDLE `gnus-demon-timestep's.") + + (defvar gnus-demon-timestep 60 + "*Number of seconds in each demon timestep.") + + ;;; Internal variables. + + (defvar gnus-demon-timer nil) + (defvar gnus-demon-idle-has-been-called nil) + (defvar gnus-demon-idle-time 0) + (defvar gnus-demon-handler-state nil) + (defvar gnus-demon-is-idle nil) + (defvar gnus-demon-last-keys nil) + + (eval-and-compile + (autoload 'timezone-parse-date "timezone") + (autoload 'timezone-make-arpa-date "timezone")) + + ;;; Functions. + + (defun gnus-demon-add-handler (function time idle) + "Add the handler FUNCTION to be run at TIME and IDLE." + ;; First remove any old handlers that use this function. + (gnus-demon-remove-handler function) + ;; Then add the new one. + (push (list function time idle) gnus-demon-handlers) + (gnus-demon-init)) + + (defun gnus-demon-remove-handler (function &optional no-init) + "Remove the handler FUNCTION from the list of handlers." + (setq gnus-demon-handlers + (delq (assq function gnus-demon-handlers) + gnus-demon-handlers)) + (or no-init (gnus-demon-init))) + + (defun gnus-demon-init () + "Initialize the Gnus daemon." + (interactive) + (gnus-demon-cancel) + (if (null gnus-demon-handlers) + () ; Nothing to do. + ;; Set up timer. + (setq gnus-demon-timer + (nnheader-run-at-time + gnus-demon-timestep gnus-demon-timestep 'gnus-demon)) + ;; Reset control variables. + (setq gnus-demon-handler-state + (mapcar + (lambda (handler) + (list (car handler) (gnus-demon-time-to-step (nth 1 handler)) + (nth 2 handler))) + gnus-demon-handlers)) + (setq gnus-demon-idle-time 0) + (setq gnus-demon-idle-has-been-called nil) + (setq gnus-use-demon t))) + + (gnus-add-shutdown 'gnus-demon-cancel 'gnus) + + (defun gnus-demon-cancel () + "Cancel any Gnus daemons." + (interactive) + (and gnus-demon-timer + (nnheader-cancel-timer gnus-demon-timer)) + (setq gnus-demon-timer nil + gnus-use-demon nil)) + + (defun gnus-demon-is-idle-p () + "Whether Emacs is idle or not." + ;; We do this simply by comparing the 100 most recent keystrokes + ;; with the ones we had last time. If they are the same, one might + ;; guess that Emacs is indeed idle. This only makes sense if one + ;; calls this function seldom -- like once a minute, which is what + ;; we do here. + (let ((keys (recent-keys))) + (or (equal keys gnus-demon-last-keys) + (progn + (setq gnus-demon-last-keys keys) + nil)))) + + (defun gnus-demon-time-to-step (time) + "Find out how many seconds to TIME, which is on the form \"17:43\"." + (if (not (stringp time)) + time + (let* ((date (current-time-string)) + (dv (timezone-parse-date date)) + (tdate (timezone-make-arpa-date + (string-to-number (aref dv 0)) + (string-to-number (aref dv 1)) + (string-to-number (aref dv 2)) time + (or (aref dv 4) "UT"))) + (nseconds (gnus-time-minus + (gnus-encode-date tdate) (gnus-encode-date date)))) + (round + (/ (if (< nseconds 0) + (+ nseconds (* 60 60 24)) + nseconds) gnus-demon-timestep))))) + + (defun gnus-demon () + "The Gnus daemon that takes care of running all Gnus handlers." + ;; Increase or reset the time Emacs has been idle. + (if (gnus-demon-is-idle-p) + (incf gnus-demon-idle-time) + (setq gnus-demon-idle-time 0) + (setq gnus-demon-idle-has-been-called nil)) + ;; Then we go through all the handler and call those that are + ;; sufficiently ripe. + (let ((handlers gnus-demon-handler-state) + handler time idle) + (while handlers + (setq handler (pop handlers)) + (cond + ((numberp (setq time (nth 1 handler))) + ;; These handlers use a regular timeout mechanism. We decrease + ;; the timer if it hasn't reached zero yet. + (or (zerop time) + (setcar (nthcdr 1 handler) (decf time))) + (and (zerop time) ; If the timer now is zero... + (or (not (setq idle (nth 2 handler))) ; Don't care about idle. + (and (numberp idle) ; Numerical idle... + (< idle gnus-demon-idle-time)) ; Idle timed out. + gnus-demon-is-idle) ; Or just need to be idle. + ;; So we call the handler. + (progn + (funcall (car handler)) + ;; And reset the timer. + (setcar (nthcdr 1 handler) + (gnus-demon-time-to-step + (nth 1 (assq (car handler) gnus-demon-handlers))))))) + ;; These are only supposed to be called when Emacs is idle. + ((null (setq idle (nth 2 handler))) + ;; We do nothing. + ) + ((not (numberp idle)) + ;; We want to call this handler each and every time that + ;; Emacs is idle. + (funcall (car handler))) + (t + ;; We want to call this handler only if Emacs has been idle + ;; for a specified number of timesteps. + (and (not (memq (car handler) gnus-demon-idle-has-been-called)) + (< idle gnus-demon-idle-time) + (progn + (funcall (car handler)) + ;; Make sure the handler won't be called once more in + ;; this idle-cycle. + (push (car handler) gnus-demon-idle-has-been-called)))))))) + + (defun gnus-demon-add-nocem () + "Add daemonic NoCeM handling to Gnus." + (gnus-demon-add-handler 'gnus-demon-scan-nocem 60 t)) + + (defun gnus-demon-scan-nocem () + "Scan NoCeM groups for NoCeM messages." + (gnus-nocem-scan-groups)) + + (defun gnus-demon-add-disconnection () + "Add daemonic server disconnection to Gnus." + (gnus-demon-add-handler 'gnus-demon-close-connections nil 30)) + + (defun gnus-demon-close-connections () + (gnus-close-backends)) + + (defun gnus-demon-add-scanmail () + "Add daemonic scanning of mail from the mail backends." + (gnus-demon-add-handler 'gnus-demon-scan-mail 120 60)) + + (defun gnus-demon-scan-mail () + (let ((servers gnus-opened-servers) + server) + (while (setq server (car (pop servers))) + (and (gnus-check-backend-function 'request-scan (car server)) + (or (gnus-server-opened server) + (gnus-open-server server)) + (gnus-request-scan nil server))))) + + (provide 'gnus-demon) + + ;;; gnus-demon.el ends here diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/gnus-edit.el emacs-19.32/lisp/gnus-edit.el *** emacs-19.31/lisp/gnus-edit.el Sun Jan 14 02:34:30 1996 --- emacs-19.32/lisp/gnus-edit.el Tue Jun 25 18:00:29 1996 *************** *** 1,29 **** ;;; gnus-edit.el --- Gnus SCORE file editing ! ! ;; Copyright (C) 1995 Free Software Foundation, Inc. ! ;; Author: Per Abrahamsen ;; Keywords: news, help ;; Version: 0.2 - ;; 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, Inc., 59 Temple Place - Suite 330, - ;; Boston, MA 02111-1307, USA. - ;;; Commentary: ! ;; Type `M-x gnus-score-customize RET' to invoke. --- 1,11 ---- ;;; gnus-edit.el --- Gnus SCORE file editing ! ;; Copyright (C) 1995,96 Free Software Foundation, Inc. ! ;; ;; Author: Per Abrahamsen ;; Keywords: news, help ;; Version: 0.2 ;;; Commentary: ! ;; ;; Type `M-x gnus-score-customize RET' to invoke. *************** *** 32,35 **** --- 14,18 ---- (require 'custom) (require 'gnus-score) + (eval-when-compile (require 'cl)) (defconst gnus-score-custom-data *************** the score file and the value of the glob *** 65,69 **** ((name . file) (tag . "File") ! (directory . "~/News/") (default-file . "SCORE") (type . file)))) --- 48,52 ---- ((name . file) (tag . "File") ! (directory . gnus-kill-files-directory) (default-file . "SCORE") (type . file)))) *************** delete a score file from the list.") *** 80,84 **** (header . nil) (data (type . file) ! (directory . "~/News/"))))) ((name . exclude-files) (tag . "Exclude Files") --- 63,67 ---- (header . nil) (data (type . file) ! (directory . gnus-kill-files-directory))))) ((name . exclude-files) (tag . "Exclude Files") *************** delete a score file from the list.") *** 95,99 **** (header . nil) (data (type . file) ! (directory . "~/News/"))))) ((name . mark) (tag . "Mark") --- 78,82 ---- (header . nil) (data (type . file) ! (directory . gnus-kill-files-directory))))) ((name . mark) (tag . "Mark") *************** groups matched by the current score file *** 555,559 **** 'gnus-score-custom-save)) (make-local-variable 'gnus-score-custom-file) ! (setq gnus-score-custom-file (expand-file-name "SCORE" "~/News")) (make-local-variable 'gnus-score-alist) (setq gnus-score-alist nil) --- 538,543 ---- 'gnus-score-custom-save)) (make-local-variable 'gnus-score-custom-file) ! (setq gnus-score-custom-file ! (expand-file-name "SCORE" gnus-kill-files-directory)) (make-local-variable 'gnus-score-alist) (setq gnus-score-alist nil) *************** groups matched by the current score file *** 567,573 **** (mapcar 'gnus-score-custom-sanify (cdr entry)) (setq entry (assoc name gnus-score-alist)) ! (if (or (memq name '(files exclude-files local)) ! (and (eq name 'adapt) ! (not (symbolp (car (cdr entry)))))) (cdr entry) (car (cdr entry))))))) --- 551,557 ---- (mapcar 'gnus-score-custom-sanify (cdr entry)) (setq entry (assoc name gnus-score-alist)) ! (if (or (memq name '(files exclude-files local)) ! (and (eq name 'adapt) ! (not (symbolp (car (cdr entry)))))) (cdr entry) (car (cdr entry))))))) *************** groups matched by the current score file *** 619,627 **** (if (eq file custom-nil) (error "You must specify a file name")) ! (setq file (expand-file-name file "~/News")) (gnus-score-load file) (setq gnus-score-custom-file file) (custom-reset-all) ! (message "Loaded"))) (defun gnus-score-custom-save () --- 603,611 ---- (if (eq file custom-nil) (error "You must specify a file name")) ! (setq file (expand-file-name file gnus-kill-files-directory)) (gnus-score-load file) (setq gnus-score-custom-file file) (custom-reset-all) ! (gnus-message 4 "Loaded"))) (defun gnus-score-custom-save () *************** groups matched by the current score file *** 640,644 **** (write-region (point-min) (point-max) file nil 'silent) (kill-buffer (current-buffer)))) ! (message "Saved")) (provide 'gnus-edit) --- 624,628 ---- (write-region (point-min) (point-max) file nil 'silent) (kill-buffer (current-buffer)))) ! (gnus-message 4 "Saved")) (provide 'gnus-edit) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/gnus-ems.el emacs-19.32/lisp/gnus-ems.el *** emacs-19.31/lisp/gnus-ems.el Sun Apr 21 11:23:13 1996 --- emacs-19.32/lisp/gnus-ems.el Tue Jun 25 18:01:47 1996 *************** *** 1,5 **** ;;; gnus-ems.el --- functions for making Gnus work under different Emacsen ! ! ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen --- 1,4 ---- ;;; gnus-ems.el --- functions for making Gnus work under different Emacsen ! ;; Copyright (C) 1995,96 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen *************** *** 25,175 **** ;;; Commentary: - ;;; This file has been censored by the Communications Decency Act. - ;;; That law was passed under the guise of a ban on pornography, but - ;;; it bans far more than that. This file did not contain pornography, - ;;; but it was censored nonetheless. - - ;;; For information on US government censorship of the Internet, and - ;;; what you can do to bring back freedom of the press, see the web - ;;; site http://www.vtw.org/ - ;;; Code: (defvar gnus-mouse-2 [mouse-2]) - (defvar gnus-group-mode-hook ()) - (defvar gnus-summary-mode-hook ()) - (defvar gnus-article-mode-hook ()) (defalias 'gnus-make-overlay 'make-overlay) (defalias 'gnus-overlay-put 'overlay-put) (defalias 'gnus-move-overlay 'move-overlay) (or (fboundp 'mail-file-babyl-p) (fset 'mail-file-babyl-p 'rmail-file-p)) ! ;; Don't warn about these undefined variables. ! ;defined in gnus.el ! (defvar gnus-active-hashtb) ! (defvar gnus-article-buffer) ! (defvar gnus-auto-center-summary) ! (defvar gnus-buffer-list) ! (defvar gnus-current-headers) ! (defvar gnus-level-killed) ! (defvar gnus-level-zombie) ! (defvar gnus-newsgroup-bookmarks) ! (defvar gnus-newsgroup-dependencies) ! (defvar gnus-newsgroup-headers-hashtb-by-number) ! (defvar gnus-newsgroup-selected-overlay) ! (defvar gnus-newsrc-hashtb) ! (defvar gnus-read-mark) ! (defvar gnus-refer-article-method) ! (defvar gnus-reffed-article-number) ! (defvar gnus-unread-mark) ! (defvar gnus-version) ! (defvar gnus-view-pseudos) ! (defvar gnus-view-pseudos-separately) ! (defvar gnus-visual) ! (defvar gnus-zombie-list) ! ;defined in gnus-msg.el ! (defvar gnus-article-copy) ! (defvar gnus-check-before-posting) ! ;defined in gnus-vis.el ! (defvar gnus-article-button-face) ! (defvar gnus-article-mouse-face) ! (defvar gnus-summary-selected-face) ! ! ! ;; We do not byte-compile this file, because error messages are such a ! ;; bore. ! ! (defun gnus-set-text-properties-xemacs (start end props &optional buffer) ! "You should NEVER use this function. It is ideologically blasphemous. ! It is provided only to ease porting of broken FSF Emacs programs." ! (if (and (stringp buffer) (not (setq buffer (get-buffer buffer)))) ! nil ! (map-extents (lambda (extent ignored) ! (remove-text-properties ! start end ! (list (extent-property extent 'text-prop) nil) ! buffer)) ! buffer start end nil nil 'text-prop) ! (add-text-properties start end props buffer))) ! ! (eval ! '(progn ! (if (string-match "XEmacs\\|Lucid" emacs-version) ! () ! ;; Added by Per Abrahamsen . ! (defvar gnus-display-type ! (condition-case nil ! (let ((display-resource (x-get-resource ".displayType" "DisplayType"))) ! (cond (display-resource (intern (downcase display-resource))) ! ((x-display-color-p) 'color) ! ((x-display-grayscale-p) 'grayscale) ! (t 'mono))) ! (error 'mono)) ! "A symbol indicating the display Emacs is running under. ! The symbol should be one of `color', `grayscale' or `mono'. If Emacs ! guesses this display attribute wrongly, either set this variable in ! your `~/.emacs' or set the resource `Emacs.displayType' in your ! `~/.Xdefaults'. See also `gnus-background-mode'. ! This is a meta-variable that will affect what default values other ! variables get. You would normally not change this variable, but ! pounce directly on the real variables themselves.") ! (defvar gnus-background-mode ! (condition-case nil ! (let ((bg-resource (x-get-resource ".backgroundMode" ! "BackgroundMode")) ! (params (frame-parameters))) ! (cond (bg-resource (intern (downcase bg-resource))) ! ((and (cdr (assq 'background-color params)) ! (< (apply '+ (x-color-values ! (cdr (assq 'background-color params)))) ! (/ (apply '+ (x-color-values "white")) 3))) ! 'dark) ! (t 'light))) ! (error 'light)) ! "A symbol indicating the Emacs background brightness. ! The symbol should be one of `light' or `dark'. ! If Emacs guesses this frame attribute wrongly, either set this variable in ! your `~/.emacs' or set the resource `Emacs.backgroundMode' in your ! `~/.Xdefaults'. ! See also `gnus-display-type'. ! This is a meta-variable that will affect what default values other ! variables get. You would normally not change this variable, but ! pounce directly on the real variables themselves.")) ! (cond ! ((string-match "XEmacs\\|Lucid" emacs-version) ! ;; XEmacs definitions. ! ! (setq gnus-mouse-2 [button2]) ! ! (or (memq 'underline (list-faces)) ! (and (fboundp 'make-face) ! (funcall (intern "make-face") 'underline))) ! ;; Must avoid calling set-face-underline-p directly, because it ! ;; is a defsubst in emacs19, and will make the .elc files non ! ;; portable! ! (or (face-differs-from-default-p 'underline) ! (funcall 'set-face-underline-p 'underline t)) ! ! (defalias 'gnus-make-overlay 'make-extent) ! (defalias 'gnus-overlay-put 'set-extent-property) ! (defun gnus-move-overlay (extent start end &optional buffer) ! (set-extent-endpoints extent start end)) ! ! (require 'text-props) ! (fset 'set-text-properties 'gnus-set-text-properties-xemacs) ! ! (or (boundp 'standard-display-table) (setq standard-display-table nil)) ! (or (boundp 'read-event) (fset 'read-event 'next-command-event)) ! ! ;; Fix by "jeff (j.d.) sparkes" . ! (defvar gnus-display-type (device-class) ! "A symbol indicating the display Emacs is running under. The symbol should be one of `color', `grayscale' or `mono'. If Emacs guesses this display attribute wrongly, either set this variable in --- 24,110 ---- ;;; Commentary: ;;; Code: + (eval-when-compile (require 'cl)) + (defvar gnus-mouse-2 [mouse-2]) (defalias 'gnus-make-overlay 'make-overlay) (defalias 'gnus-overlay-put 'overlay-put) (defalias 'gnus-move-overlay 'move-overlay) + (defalias 'gnus-overlay-end 'overlay-end) + (defalias 'gnus-extent-detached-p 'ignore) + (defalias 'gnus-extent-start-open 'ignore) + (defalias 'gnus-set-text-properties 'set-text-properties) + (defalias 'gnus-group-remove-excess-properties 'ignore) + (defalias 'gnus-topic-remove-excess-properties 'ignore) + (defalias 'gnus-appt-select-lowest-window 'appt-select-lowest-window) + (defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names) + (defalias 'gnus-make-local-hook 'make-local-hook) + (defalias 'gnus-add-hook 'add-hook) + (defalias 'gnus-character-to-event 'identity) + (defalias 'gnus-add-text-properties 'add-text-properties) + (defalias 'gnus-put-text-property 'put-text-property) + (defalias 'gnus-mode-line-buffer-identification 'identity) + + + (eval-and-compile + (autoload 'gnus-xmas-define "gnus-xmas") + (autoload 'gnus-xmas-redefine "gnus-xmas") + (autoload 'appt-select-lowest-window "appt.el")) (or (fboundp 'mail-file-babyl-p) (fset 'mail-file-babyl-p 'rmail-file-p)) ! ;;; Mule functions. ! (defun gnus-mule-cite-add-face (number prefix face) ! ;; At line NUMBER, ignore PREFIX and add FACE to the rest of the line. ! (if face ! (let ((inhibit-point-motion-hooks t) ! from to) ! (goto-line number) ! (if (boundp 'MULE) ! (forward-char (chars-in-string prefix)) ! (forward-char (length prefix))) ! (skip-chars-forward " \t") ! (setq from (point)) ! (end-of-line 1) ! (skip-chars-backward " \t") ! (setq to (point)) ! (if (< from to) ! (gnus-overlay-put (gnus-make-overlay from to) 'face face))))) ! ! (defun gnus-mule-max-width-function (el max-width) ! (` (let* ((val (eval (, el))) ! (valstr (if (numberp val) ! (int-to-string val) val))) ! (if (> (length valstr) (, max-width)) ! (truncate-string valstr (, max-width)) ! valstr)))) ! (eval-and-compile ! (if (string-match "XEmacs\\|Lucid" emacs-version) ! () ! (defvar gnus-mouse-face-prop 'mouse-face ! "Property used for highlighting mouse regions.") ! (defvar gnus-article-x-face-command ! "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | xv -quit -" ! "String or function to be executed to display an X-Face header. ! If it is a string, the command will be executed in a sub-shell ! asynchronously. The compressed face will be piped to this command.") ! ! ;; Added by Per Abrahamsen . ! (defvar gnus-display-type ! (condition-case nil ! (let ((display-resource (x-get-resource ".displayType" "DisplayType"))) ! (cond (display-resource (intern (downcase display-resource))) ! ((x-display-color-p) 'color) ! ((x-display-grayscale-p) 'grayscale) ! (t 'mono))) ! (error 'mono)) ! "A symbol indicating the display Emacs is running under. The symbol should be one of `color', `grayscale' or `mono'. If Emacs guesses this display attribute wrongly, either set this variable in *************** variables get. You would normally not c *** 181,205 **** pounce directly on the real variables themselves.") ! ! (or (fboundp 'x-color-values) ! (fset 'x-color-values ! (lambda (color) ! (color-instance-rgb-components ! (make-color-instance color))))) ! ! (defvar gnus-background-mode ! (let ((bg-resource ! (condition-case () ! (x-get-resource ".backgroundMode" "BackgroundMode" 'string) ! (error nil))) ! (params (frame-parameters))) ! (cond (bg-resource (intern (downcase bg-resource))) ! ((and (assq 'background-color params) ! (< (apply '+ (x-color-values ! (cdr (assq 'background-color params)))) ! (/ (apply '+ (x-color-values "white")) 3))) ! 'dark) ! (t 'light))) ! "A symbol indicating the Emacs background brightness. The symbol should be one of `light' or `dark'. If Emacs guesses this frame attribute wrongly, either set this variable in --- 116,133 ---- pounce directly on the real variables themselves.") ! (defvar gnus-background-mode ! (condition-case nil ! (let ((bg-resource (x-get-resource ".backgroundMode" ! "BackgroundMode")) ! (params (frame-parameters))) ! (cond (bg-resource (intern (downcase bg-resource))) ! ((and (cdr (assq 'background-color params)) ! (< (apply '+ (x-color-values ! (cdr (assq 'background-color params)))) ! (* (apply '+ (x-color-values "white")) .6))) ! 'dark) ! (t 'light))) ! (error 'light)) ! "A symbol indicating the Emacs background brightness. The symbol should be one of `light' or `dark'. If Emacs guesses this frame attribute wrongly, either set this variable in *************** See also `gnus-display-type'. *** 210,235 **** This is a meta-variable that will affect what default values other variables get. You would normally not change this variable, but ! pounce directly on the real variables themselves.") ! (defun gnus-install-mouse-tracker () ! (require 'mode-motion) ! (setq mode-motion-hook 'mode-motion-highlight-line))) ! ! ((< emacs-minor-version 30) ! ;; Remove the `intangible' prop. ! (let ((props (and (boundp 'gnus-hidden-properties) ! gnus-hidden-properties))) ! (while (and props (not (eq (car (cdr props)) 'intangible))) ! (setq props (cdr props))) ! (and props (setcdr props (cdr (cdr (cdr props)))))) ! (or (fboundp 'buffer-substring-no-properties) ! (defun buffer-substring-no-properties (beg end) ! (format "%s" (buffer-substring beg end))))) ! ((boundp 'MULE) ! (provide 'gnusutil)) ! ! ))) (eval-and-compile --- 138,161 ---- This is a meta-variable that will affect what default values other variables get. You would normally not change this variable, but ! pounce directly on the real variables themselves.")) + (cond + ((string-match "XEmacs\\|Lucid" emacs-version) + (gnus-xmas-define)) ! ((or (not (boundp 'emacs-minor-version)) ! (< emacs-minor-version 30)) ! ;; Remove the `intangible' prop. ! (let ((props (and (boundp 'gnus-hidden-properties) ! gnus-hidden-properties))) ! (while (and props (not (eq (car (cdr props)) 'intangible))) ! (setq props (cdr props))) ! (and props (setcdr props (cdr (cdr (cdr props)))))) ! (or (fboundp 'buffer-substring-no-properties) ! (defun buffer-substring-no-properties (beg end) ! (format "%s" (buffer-substring beg end))))) ! ((boundp 'MULE) ! (provide 'gnusutil)))) (eval-and-compile *************** pounce directly on the real variables th *** 249,697 **** (file-exists-p file)))) (or (fboundp 'face-list) ! (defun face-list (&rest args))) ! ) ! (defun gnus-highlight-selected-summary-xemacs () ! ;; Highlight selected article in summary buffer ! (if gnus-summary-selected-face ! (progn ! (if gnus-newsgroup-selected-overlay ! (delete-extent gnus-newsgroup-selected-overlay)) ! (setq gnus-newsgroup-selected-overlay ! (make-extent (gnus-point-at-bol) (gnus-point-at-eol))) ! (set-extent-face gnus-newsgroup-selected-overlay ! gnus-summary-selected-face)))) ! ! (defun gnus-summary-recenter-xemacs () ! (let* ((top (cond ((< (window-height) 4) 0) ! ((< (window-height) 7) 1) ! (t 2))) ! (height (- (window-height) 2)) ! (bottom (save-excursion (goto-char (point-max)) ! (forward-line (- height)) ! (point))) ! (window (get-buffer-window (current-buffer)))) ! (and ! ;; The user has to want it, ! gnus-auto-center-summary ! ;; the article buffer must be displayed, ! (get-buffer-window gnus-article-buffer) ! ;; Set the window start to either `bottom', which is the biggest ! ;; possible valid number, or the second line from the top, ! ;; whichever is the least. ! (set-window-start ! window (min bottom (save-excursion (forward-line (- top)) ! (point))))))) ! ! (defun gnus-group-insert-group-line-info-xemacs (group) ! (let ((entry (gnus-gethash group gnus-newsrc-hashtb)) ! (beg (point)) ! active info) ! (if entry ! (progn ! (setq info (nth 2 entry)) ! (gnus-group-insert-group-line ! nil group (nth 1 info) (nth 3 info) (car entry) (nth 4 info))) ! (setq active (gnus-gethash group gnus-active-hashtb)) ! ! (gnus-group-insert-group-line ! nil group (if (member group gnus-zombie-list) gnus-level-zombie ! gnus-level-killed) ! nil (if active (- (1+ (cdr active)) (car active)) 0) nil)) ! (save-excursion ! (goto-char beg) ! (remove-text-properties ! (1+ (gnus-point-at-bol)) (1+ (gnus-point-at-eol)) ! '(gnus-group nil))))) ! ! (defun gnus-summary-refer-article-xemacs (message-id) ! "Refer article specified by MESSAGE-ID. ! NOTE: This command only works with newsgroups that use real or simulated NNTP." ! (interactive "sMessage-ID: ") ! (if (or (not (stringp message-id)) ! (zerop (length message-id))) ! () ! ;; Construct the correct Message-ID if necessary. ! ;; Suggested by tale@pawl.rpi.edu. ! (or (string-match "^<" message-id) ! (setq message-id (concat "<" message-id))) ! (or (string-match ">$" message-id) ! (setq message-id (concat message-id ">"))) ! (let ((header (car (gnus-gethash (downcase message-id) ! gnus-newsgroup-dependencies)))) ! (if header ! (or (gnus-summary-goto-article (mail-header-number header)) ! ;; The header has been read, but the article had been ! ;; expunged, so we insert it again. ! (let ((beg (point))) ! (gnus-summary-insert-line ! nil header 0 nil gnus-read-mark nil nil ! (mail-header-subject header)) ! (save-excursion ! (goto-char beg) ! (remove-text-properties ! (1+ (gnus-point-at-bol)) (1+ (gnus-point-at-eol)) ! '(gnus-number nil gnus-mark nil gnus-level nil))) ! (forward-line -1) ! (mail-header-number header))) ! (let ((gnus-override-method gnus-refer-article-method) ! (gnus-ancient-mark gnus-read-mark) ! (tmp-point (window-start ! (get-buffer-window gnus-article-buffer))) ! number tmp-buf) ! (and gnus-refer-article-method ! (gnus-check-server gnus-refer-article-method)) ! ;; Save the old article buffer. ! (save-excursion ! (set-buffer gnus-article-buffer) ! (gnus-kill-buffer " *temp Article*") ! (setq tmp-buf (rename-buffer " *temp Article*"))) ! (prog1 ! (if (gnus-article-prepare ! message-id nil (gnus-read-header message-id)) ! (progn ! (setq number (mail-header-number gnus-current-headers)) ! (gnus-rebuild-thread message-id) ! (gnus-summary-goto-subject number) ! (gnus-summary-recenter) ! (gnus-article-set-window-start ! (cdr (assq number gnus-newsgroup-bookmarks))) ! message-id) ! ;; We restore the old article buffer. ! (save-excursion ! (kill-buffer gnus-article-buffer) ! (set-buffer tmp-buf) ! (rename-buffer gnus-article-buffer) ! (let ((buffer-read-only nil)) ! (and tmp-point ! (set-window-start (get-buffer-window (current-buffer)) ! tmp-point))))))))))) ! ! (defun gnus-summary-insert-pseudos-xemacs (pslist &optional not-view) ! (let ((buffer-read-only nil) ! (article (gnus-summary-article-number)) ! b) ! (or (gnus-summary-goto-subject article) ! (error "No such article: %d" article)) ! (or gnus-newsgroup-headers-hashtb-by-number ! (gnus-make-headers-hashtable-by-number)) ! (gnus-summary-position-cursor) ! ;; If all commands are to be bunched up on one line, we collect ! ;; them here. ! (if gnus-view-pseudos-separately ! () ! (let ((ps (setq pslist (sort pslist 'gnus-pseudos<))) ! files action) ! (while ps ! (setq action (cdr (assq 'action (car ps)))) ! (setq files (list (cdr (assq 'name (car ps))))) ! (while (and ps (cdr ps) ! (string= (or action "1") ! (or (cdr (assq 'action (car (cdr ps)))) "2"))) ! (setq files (cons (cdr (assq 'name (car (cdr ps)))) files)) ! (setcdr ps (cdr (cdr ps)))) ! (if (not files) ! () ! (if (not (string-match "%s" action)) ! (setq files (cons " " files))) ! (setq files (cons " " files)) ! (and (assq 'execute (car ps)) ! (setcdr (assq 'execute (car ps)) ! (funcall (if (string-match "%s" action) ! 'format 'concat) ! action ! (mapconcat (lambda (f) f) files " "))))) ! (setq ps (cdr ps))))) ! (if (and gnus-view-pseudos (not not-view)) ! (while pslist ! (and (assq 'execute (car pslist)) ! (gnus-execute-command (cdr (assq 'execute (car pslist))) ! (eq gnus-view-pseudos 'not-confirm))) ! (setq pslist (cdr pslist))) ! (save-excursion ! (while pslist ! (gnus-summary-goto-subject (or (cdr (assq 'article (car pslist))) ! (gnus-summary-article-number))) ! (forward-line 1) ! (setq b (point)) ! (insert " " ! (file-name-nondirectory (cdr (assq 'name (car pslist)))) ! ": " (or (cdr (assq 'execute (car pslist))) "") "\n") ! (add-text-properties ! b (1+ b) (list 'gnus-number gnus-reffed-article-number ! 'gnus-mark gnus-unread-mark ! 'gnus-level 0 ! 'gnus-pseudo (car pslist))) ! ;; Fire-trucking XEmacs redisplay bug with truncated lines. ! (goto-char b) ! (sit-for 0) ! ;; Grumble.. fire-trucking XEmacs stickiness of text properties. ! (remove-text-properties ! (1+ b) (1+ (gnus-point-at-eol)) ! '(gnus-number nil gnus-mark nil gnus-level nil)) ! (forward-line -1) ! (gnus-sethash (int-to-string gnus-reffed-article-number) ! (car pslist) gnus-newsgroup-headers-hashtb-by-number) ! (setq gnus-reffed-article-number (1- gnus-reffed-article-number)) ! (setq pslist (cdr pslist))))))) ! ! ! (defun gnus-copy-article-buffer-xemacs (&optional article-buffer) ! (setq gnus-article-copy (get-buffer-create " *gnus article copy*")) ! (buffer-disable-undo gnus-article-copy) ! (or (memq gnus-article-copy gnus-buffer-list) ! (setq gnus-buffer-list (cons gnus-article-copy gnus-buffer-list))) ! (let ((article-buffer (or article-buffer gnus-article-buffer)) ! buf) ! (if (and (get-buffer article-buffer) ! (buffer-name (get-buffer article-buffer))) ! (save-excursion ! (set-buffer article-buffer) ! (widen) ! (setq buf (buffer-substring (point-min) (point-max))) ! (set-buffer gnus-article-copy) ! (erase-buffer) ! (insert (format "%s" buf)))))) ! ! (defun gnus-article-push-button-xemacs (event) ! "Check text under the mouse pointer for a callback function. ! If the text under the mouse pointer has a `gnus-callback' property, ! call it with the value of the `gnus-data' text property." ! (interactive "e") ! (set-buffer (window-buffer (event-window event))) ! (let* ((pos (event-closest-point event)) ! (data (get-text-property pos 'gnus-data)) ! (fun (get-text-property pos 'gnus-callback))) ! (if fun (funcall fun data)))) ! ! ;; Re-build the thread containing ID. ! (defun gnus-rebuild-thread-xemacs (id) ! (let ((dep gnus-newsgroup-dependencies) ! (buffer-read-only nil) ! parent headers refs thread art) ! (while (and id (setq headers ! (car (setq art (gnus-gethash (downcase id) ! dep))))) ! (setq parent art) ! (setq id (and (setq refs (mail-header-references headers)) ! (string-match "\\(<[^>]+>\\) *$" refs) ! (substring refs (match-beginning 1) (match-end 1))))) ! (setq thread (gnus-make-sub-thread (car parent))) ! (gnus-rebuild-remove-articles thread) ! (let ((beg (point))) ! (gnus-summary-prepare-threads (list thread) 0) ! (save-excursion ! (while (and (>= (point) beg) ! (not (bobp))) ! (or (eobp) ! (remove-text-properties ! (1+ (gnus-point-at-bol)) (1+ (gnus-point-at-eol)) ! '(gnus-number nil gnus-mark nil gnus-level nil))) ! (forward-line -1))) ! (gnus-summary-update-lines beg (point))))) ! ! ! ;; Fixed by Christopher Davis . ! (defun gnus-article-add-button-xemacs (from to fun &optional data) ! "Create a button between FROM and TO with callback FUN and data DATA." ! (and gnus-article-button-face ! (gnus-overlay-put (gnus-make-overlay from to) 'face gnus-article-button-face)) ! (add-text-properties from to ! (append ! (and gnus-article-mouse-face ! (list 'mouse-face gnus-article-mouse-face)) ! (list 'gnus-callback fun) ! (and data (list 'gnus-data data)) ! (list 'highlight t)))) ! ! (defun gnus-window-top-edge-xemacs (&optional window) ! (nth 1 (window-pixel-edges window))) ! ! ;; Select the lowest window on the frame. ! (defun gnus-appt-select-lowest-window-xemacs () ! (let* ((lowest-window (selected-window)) ! (bottom-edge (car (cdr (cdr (cdr (window-pixel-edges)))))) ! (last-window (previous-window)) ! (window-search t)) ! (while window-search ! (let* ((this-window (next-window)) ! (next-bottom-edge (car (cdr (cdr (cdr ! (window-pixel-edges ! this-window))))))) ! (if (< bottom-edge next-bottom-edge) ! (progn ! (setq bottom-edge next-bottom-edge) ! (setq lowest-window this-window))) ! ! (select-window this-window) ! (if (eq last-window this-window) ! (progn ! (select-window lowest-window) ! (setq window-search nil))))))) (defun gnus-ems-redefine () (cond ((string-match "XEmacs\\|Lucid" emacs-version) ! ;; XEmacs definitions. ! (fset 'gnus-mouse-face-function 'identity) ! (fset 'gnus-summary-make-display-table (lambda () nil)) ! (fset 'gnus-visual-turn-off-edit-menu 'identity) ! (fset 'gnus-highlight-selected-summary ! 'gnus-highlight-selected-summary-xemacs) ! (fset 'gnus-summary-recenter 'gnus-summary-recenter-xemacs) ! (fset 'gnus-group-insert-group-line-info ! 'gnus-group-insert-group-line-info-xemacs) ! (fset 'gnus-copy-article-buffer 'gnus-copy-article-buffer-xemacs) ! (fset 'gnus-summary-refer-article 'gnus-summary-refer-article-xemacs) ! (fset 'gnus-summary-insert-pseudos 'gnus-summary-insert-pseudos-xemacs) ! (fset 'gnus-article-push-button 'gnus-article-push-button-xemacs) ! (fset 'gnus-rebuild-thread 'gnus-rebuild-thread-xemacs) ! (fset 'gnus-article-add-button 'gnus-article-add-button-xemacs) ! (fset 'gnus-window-top-edge 'gnus-window-top-edge-xemacs) ! (fset 'set-text-properties 'gnus-set-text-properties-xemacs) ! ! (or (fboundp 'appt-select-lowest-window) ! (fset 'appt-select-lowest-window ! 'gnus-appt-select-lowest-window-xemacs)) ! ! (if (not gnus-visual) ! () ! (setq gnus-group-mode-hook ! (cons ! '(lambda () ! (easy-menu-add gnus-group-reading-menu) ! (easy-menu-add gnus-group-group-menu) ! (easy-menu-add gnus-group-misc-menu) ! (gnus-install-mouse-tracker)) ! gnus-group-mode-hook)) ! (setq gnus-summary-mode-hook ! (cons ! '(lambda () ! (easy-menu-add gnus-summary-article-menu) ! (easy-menu-add gnus-summary-thread-menu) ! (easy-menu-add gnus-summary-misc-menu) ! (easy-menu-add gnus-summary-post-menu) ! (easy-menu-add gnus-summary-kill-menu) ! (gnus-install-mouse-tracker)) ! gnus-summary-mode-hook)) ! (setq gnus-article-mode-hook ! (cons ! '(lambda () ! (easy-menu-add gnus-article-article-menu) ! (easy-menu-add gnus-article-treatment-menu)) ! gnus-article-mode-hook))) ! ! (defvar gnus-logo (make-glyph (make-specifier 'image))) ! ! (defun gnus-group-startup-xmessage (&optional x y) ! "Insert startup message in current buffer." ! ;; Insert the message. ! (erase-buffer) ! (if (featurep 'xpm) ! (progn ! (set-glyph-property gnus-logo 'image "~/tmp/gnus.xpm") ! (set-glyph-image gnus-logo "~/tmp/gnus.xpm" 'global 'x) ! ! (insert " ") ! (set-extent-begin-glyph (make-extent (point) (point)) gnus-logo) ! (insert " ! Gnus * A newsreader for Emacsen ! A Praxis Release * larsi@ifi.uio.no") ! (goto-char (point-min)) ! (while (not (eobp)) ! (insert (make-string (/ (max (- (window-width) (or x 35)) 0) 2) ! ? )) ! (forward-line 1)) ! (goto-char (point-min)) ! ;; +4 is fuzzy factor. ! (insert-char ?\n (/ (max (- (window-height) (or y 24)) 0) 2))) ! ! (insert ! (format " ! %s ! A newsreader ! for GNU Emacs ! ! Based on GNUS ! written by ! Masanobu UMEDA ! ! A Praxis Release ! larsi@ifi.uio.no ! " ! gnus-version)) ! ;; And then hack it. ! ;; 18 is the longest line. ! (indent-rigidly (point-min) (point-max) ! (/ (max (- (window-width) (or x 28)) 0) 2)) ! (goto-char (point-min)) ! ;; +4 is fuzzy factor. ! (insert-char ?\n (/ (max (- (window-height) (or y 12)) 0) 2))) ! ! ;; Fontify some. ! (goto-char (point-min)) ! (search-forward "Praxis") ! (put-text-property (match-beginning 0) (match-end 0) 'face 'bold) ! (goto-char (point-min))) ! ! ! ! ) ((boundp 'MULE) ;; Mule definitions - (if (not (fboundp 'truncate-string)) - (defun truncate-string (str width) - (let ((w (string-width str)) - (col 0) (idx 0) (p-idx 0) chr) - (if (<= w width) - str - (while (< col width) - (setq chr (aref str idx) - col (+ col (char-width chr)) - p-idx idx - idx (+ idx (char-bytes chr)) - )) - (substring str 0 (if (= col width) - idx - p-idx)) - ))) - ) (defalias 'gnus-truncate-string 'truncate-string) - (defun gnus-cite-add-face (number prefix face) - ;; At line NUMBER, ignore PREFIX and add FACE to the rest of the line. - (if face - (let ((inhibit-point-motion-hooks t) - from to) - (goto-line number) - (if (boundp 'MULE) - (forward-char (chars-in-string prefix)) - (forward-char (length prefix))) - (skip-chars-forward " \t") - (setq from (point)) - (end-of-line 1) - (skip-chars-backward " \t") - (setq to (point)) - (if (< from to) - (gnus-overlay-put (gnus-make-overlay from to) 'face face))))) - - (defun gnus-max-width-function (el max-width) - (` (let* ((val (eval (, el))) - (valstr (if (numberp val) - (int-to-string val) val))) - (if (> (length valstr) (, max-width)) - (truncate-string valstr (, max-width)) - valstr)))) - (fset 'gnus-summary-make-display-table (lambda () nil)) (if (boundp 'gnus-check-before-posting) (setq gnus-check-before-posting (delq 'long-lines ! (delq 'control-chars gnus-check-before-posting))) ! ) ! ) ! )) (provide 'gnus-ems) --- 175,236 ---- (file-exists-p file)))) (or (fboundp 'face-list) ! (defun face-list (&rest args)))) ! (eval-and-compile ! (let ((case-fold-search t)) ! (cond ! ((string-match "windows-nt\\|os/2\\|emx" (format "%s" system-type)) ! (setq nnheader-file-name-translation-alist ! (append nnheader-file-name-translation-alist ! '((?: . ?_) ! (?+ . ?-)))))))) ! ! (defvar gnus-tmp-unread) ! (defvar gnus-tmp-replied) ! (defvar gnus-tmp-score-char) ! (defvar gnus-tmp-indentation) ! (defvar gnus-tmp-opening-bracket) ! (defvar gnus-tmp-lines) ! (defvar gnus-tmp-name) ! (defvar gnus-tmp-closing-bracket) ! (defvar gnus-tmp-subject-or-nil) (defun gnus-ems-redefine () (cond ((string-match "XEmacs\\|Lucid" emacs-version) ! (gnus-xmas-redefine)) ((boundp 'MULE) ;; Mule definitions (defalias 'gnus-truncate-string 'truncate-string) (fset 'gnus-summary-make-display-table (lambda () nil)) + (fset 'gnus-cite-add-face 'gnus-mule-cite-add-face) + (fset 'gnus-max-width-function 'gnus-mule-max-width-function) (if (boundp 'gnus-check-before-posting) (setq gnus-check-before-posting (delq 'long-lines ! (delq 'control-chars gnus-check-before-posting)))) ! ! (defun gnus-summary-line-format-spec () ! (insert gnus-tmp-unread gnus-tmp-replied ! gnus-tmp-score-char gnus-tmp-indentation) ! (put-text-property ! (point) ! (progn ! (insert ! gnus-tmp-opening-bracket ! (format "%4d: %-20s" ! gnus-tmp-lines ! (if (> (length gnus-tmp-name) 20) ! (truncate-string gnus-tmp-name 20) ! gnus-tmp-name)) ! gnus-tmp-closing-bracket) ! (point)) ! gnus-mouse-face-prop gnus-mouse-face) ! (insert " " gnus-tmp-subject-or-nil "\n")) ! ))) ! (provide 'gnus-ems) diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/gnus-gl.el emacs-19.32/lisp/gnus-gl.el *** emacs-19.31/lisp/gnus-gl.el Wed Dec 31 19:00:00 1969 --- emacs-19.32/lisp/gnus-gl.el Tue Jun 25 18:29:58 1996 *************** *** 0 **** --- 1,872 ---- + ;;; gnus-gl.el --- an interface to GroupLens for Gnus + ;; Copyright (C) 1995,96 Free Software Foundation, Inc. + + ;; Author: Brad Miller + ;; Keywords: news, score + + ;; 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, Inc., 59 Temple Place - Suite 330, + ;; Boston, MA 02111-1307, USA. + + ;;; Commentary: + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; GroupLens software and documentation is copyright (c) 1995 by Paul + ;; Resnick (Massachusetts Institute of Technology); Brad Miller, John + ;; Riedl, Jon Herlocker, and Joseph Konstan (University of Minnesota), + ;; and David Maltz (Carnegie-Mellon University). + ;; + ;; Permission to use, copy, modify, and distribute this documentation + ;; for non-commercial and commercial purposes without fee is hereby + ;; granted provided that this copyright notice and permission notice + ;; appears in all copies and that the names of the individuals and + ;; institutions holding this copyright are not used in advertising or + ;; publicity pertaining to this software without specific, written + ;; prior permission. The copyright holders make no representations + ;; about the suitability of this software and documentation for any + ;; purpose. It is provided ``as is'' without express or implied + ;; warranty. + ;; + ;; The copyright holders request that they be notified of + ;; modifications of this code. Please send electronic mail to + ;; grouplens@cs.umn.edu for more information or to announce derived + ;; works. + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Author: Brad Miller + ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; + ;; User Documentation: + ;; To use GroupLens you must load this file. + ;; You must also register a pseudonym with the Better Bit Bureau. + ;; http://www.cs.umn.edu/Research/GroupLens + ;; + ;; ---------------- For your .emacs or .gnus file ---------------- + ;; + ;; As of version 2.5, grouplens now works as a minor mode of + ;; gnus-summary-mode. To get make that work you just need a couple of + ;; hooks. + ;; (setq gnus-use-grouplens t) + ;; (setq grouplens-pseudonym "") + ;; (setq grouplens-bbb-host "grouplens.cs.umn.edu") + ;; + ;; (setq gnus-summary-default-score 0) + ;; + ;; USING GROUPLENS + ;; How do I Rate an article?? + ;; Before you type n to go to the next article, hit a number from 1-5 + ;; Type r in the summary buffer and you will be prompted. + ;; Note that when you're in grouplens-minor-mode 'r' maskes the + ;; usual reply binding for 'r' + ;; + ;; What if, Gasp, I find a bug??? + ;; Please type M-x gnus-gl-submit-bug-report. This will set up a + ;; mail buffer with the state of variables and buffers that will help + ;; me debug the problem. A short description up front would help too! + ;; + ;; How do I display the prediction for an aritcle: + ;; If you set the gnus-summary-line-format as shown above, the score + ;; (prediction) will be shown automatically. + ;; + ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Programmer Notes + ;; 10/9/95 + ;; gnus-scores-articles contains the articles + ;; When scoring is done, the call tree looks something like: + ;; gnus-possibly-score-headers + ;; ==> gnus-score-headers + ;; ==> gnus-score-load-file + ;; ==> get-all-mids (from the eval form) + ;; + ;; it would be nice to have one that gets called after all the other + ;; headers have been scored. + ;; we may want a variable gnus-grouplens-scale-factor + ;; and gnus-grouplens-offset this would probably be either -3 or 0 + ;; to make the scores centered around zero or not. + ;; Notes 10/12/95 + ;; According to Lars, Norse god of gnus, the simple way to insert a + ;; call to an external function is to have a function added to the + ;; variable gnus-score-find-files-function This new function + ;; gnus-grouplens-score-alist will return a core alist that + ;; has (("message-id" ("" score) ("" score)) + ;; This seems like it would be pretty inefficient, though workable. + ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; TODO + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; + ;; 3. Add some more ways to rate messages + ;; 4. Better error handling for token timeouts. + ;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; bugs + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; + + ;;; Code: + + (require 'gnus-score) + (require 'cl) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;; User variables + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + (defvar gnus-summary-grouplens-line-format + "%U%R%z%l%I%(%[%4L: %-20,20n%]%) %s\n" + "*The line format spec in summary GroupLens mode buffers.") + + (defvar grouplens-pseudonym "" + "User's pseudonym. This pseudonym is obtained during the registration process") + + (defvar grouplens-bbb-host "grouplens.cs.umn.edu" + "Host where the bbbd is running" ) + + (defvar grouplens-bbb-port 9000 + "Port where the bbbd is listening" ) + + (defvar grouplens-newsgroups + '("comp.lang.c++" "rec.humor" "rec.food.recipes" "comp.groupware" + "mn.general" "rec.arts.movies" "rec.arts.movies.current-films" + "comp.lang.java" "comp.os.linux.announce" "comp.os.linux.misc" + "comp.os.linux.development.apps" "comp.os.linux.development.system") + "*Groups that are part of the GroupLens experiment.") + + (defvar grouplens-prediction-display 'prediction-spot + "valid values are: + prediction-spot -- an * corresponding to the prediction between 1 and 5, + confidence-interval -- a numeric confidence interval + prediction-bar -- |##### | the longer the bar, the better the article, + confidence-bar -- | ----- } the prediction is in the middle of the bar, + confidence-spot -- ) * | the spot gets bigger with more confidence, + prediction-num -- plain-old numeric value, + confidence-plus-minus -- prediction +/i confidence") + + (defvar grouplens-score-offset 0 + "Offset the prediction by this value. + Setting this variable to -2 would have the following effect on + GroupLens scores: + + 1 --> -2 + 2 --> -1 + 3 --> 0 + 4 --> 1 + 5 --> 2 + + The reason is that a user might want to do this is to combine + GroupLens predictions with scores calculated by other score methods.") + + (defvar grouplens-score-scale-factor 1 + "This variable allows the user to magnify the effect of GroupLens scores. + The scale factor is applied after the offset.") + + (defvar gnus-grouplens-override-scoring 'override + "Tell Grouplens to override the normal Gnus scoring mechanism. + GroupLens scores can be combined with gnus scores in one of three ways. + 'override -- just use grouplens predictions for grouplens groups + 'combine -- combine grouplens scores with gnus scores + 'separate -- treat grouplens scores completely separate from gnus") + + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;; Program global variables + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (defvar grouplens-bbb-token "0" + "Current session token number") + + (defvar grouplens-bbb-process nil + "Process Id of current bbbd network stream process") + + (defvar grouplens-bbb-buffer nil + "Buffer associated with the BBBD process") + + (defvar grouplens-rating-alist nil + "Current set of message-id rating pairs") + + (defvar grouplens-current-hashtable (make-hash-table :test 'equal :size 100)) + ;; this seems like a pretty ugly way to get around the problem, but If + ;; I don't do this, then the compiler complains when I call gethash + ;; + (eval-when-compile (setq grouplens-current-hashtable + (make-hash-table :test 'equal :size 100))) + + (defvar grouplens-current-group nil) + + (defvar bbb-mid-list nil) + + (defvar bbb-alist nil) + + (defvar bbb-timeout-secs 10 + "Number of seconds to wait for some response from the BBB. + If this times out we give up and assume that something has died..." ) + + (defvar grouplens-previous-article nil + "Message-ID of the last article read.") + + (defvar bbb-read-point) + (defvar bbb-response-point) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;; Utility Functions + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (defun bbb-connect-to-bbbd (host port) + (unless grouplens-bbb-buffer + (setq grouplens-bbb-buffer + (get-buffer-create (format " *BBBD trace: %s*" host))) + (save-excursion + (set-buffer grouplens-bbb-buffer) + (make-local-variable 'bbb-read-point) + (setq bbb-read-point (point-min)))) + ;; clear the trace buffer of old output + (save-excursion + (set-buffer grouplens-bbb-buffer) + (erase-buffer)) + ;; open the connection to the server + (setq grouplens-bbb-process nil) + (catch 'done + (condition-case error + (setq grouplens-bbb-process + (open-network-stream "BBBD" grouplens-bbb-buffer host port)) + (error (gnus-message 3 "Error: Failed to connect to BBB") + nil)) + (and (null grouplens-bbb-process) + (throw 'done nil)) + ;; (set-process-filter grouplens-bbb-process 'bbb-process-filter) + (save-excursion + (set-buffer grouplens-bbb-buffer) + (setq bbb-read-point (point-min)) + (or (bbb-read-response grouplens-bbb-process) + (throw 'done nil)))) + grouplens-bbb-process) + + ;; (defun bbb-process-filter (process output) + ;; (save-excursion + ;; (set-buffer (bbb-process-buffer process)) + ;; (goto-char (point-max)) + ;; (insert output))) + + (defun bbb-send-command (process command) + (goto-char (point-max)) + (insert command) + (insert "\r\n") + (setq bbb-read-point (point)) + (setq bbb-response-point (point)) + (set-marker (process-mark process) (point)) ; process output also comes here + (process-send-string process command) + (process-send-string process "\r\n")) + + (defun bbb-read-response (process) ; &optional return-response-string) + "This function eats the initial response of OK or ERROR from the BBB." + (let ((case-fold-search nil) + match-end) + (goto-char bbb-read-point) + (while (and (not (search-forward "\r\n" nil t)) + (accept-process-output process bbb-timeout-secs)) + (goto-char bbb-read-point)) + (setq match-end (point)) + (goto-char bbb-read-point) + (setq bbb-read-point match-end) + (looking-at "OK"))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;; Login Functions + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (defun bbb-login () + "return the token number if login is successful, otherwise return nil" + (interactive) + (setq grouplens-bbb-token nil) + (if (not (equal grouplens-pseudonym "")) + (let ((bbb-process + (bbb-connect-to-bbbd grouplens-bbb-host grouplens-bbb-port))) + (if bbb-process + (save-excursion + (set-buffer (process-buffer bbb-process)) + (bbb-send-command bbb-process + (concat "login " grouplens-pseudonym)) + (if (bbb-read-response bbb-process) + (setq grouplens-bbb-token (bbb-extract-token-number)) + (gnus-message 3 "Error: Grouplens login failed"))))) + (gnus-message 3 "Error: you must set a pseudonym")) + grouplens-bbb-token) + + (defun bbb-extract-token-number () + (let ((token-pos (search-forward "token=" nil t) )) + (if (looking-at "[0-9]+") + (buffer-substring token-pos (match-end 0))))) + + (gnus-add-shutdown 'bbb-logout 'gnus) + + (defun bbb-logout () + "logout of bbb session" + (let ((bbb-process + (bbb-connect-to-bbbd grouplens-bbb-host grouplens-bbb-port))) + (if bbb-process + (save-excursion + (set-buffer (process-buffer bbb-process)) + (bbb-send-command bbb-process (concat "logout " grouplens-bbb-token)) + (bbb-read-response bbb-process)) + nil))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;; Get Predictions + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + (defun bbb-build-mid-scores-alist (groupname) + "this function can be called as part of the function to return the + list of score files to use. See the gnus variable + gnus-score-find-score-files-function. + + *Note:* If you want to use grouplens scores along with calculated scores, + you should see the offset and scale variables. At this point, I don't + recommend using both scores and grouplens predictions together." + (setq grouplens-current-group groupname) + (if (member groupname grouplens-newsgroups) + (let* ((mid-list (bbb-get-all-mids)) + (predict-list (bbb-get-predictions mid-list groupname))) + (setq grouplens-previous-article nil) + ;; scores-alist should be a list of lists: + ;; ((("message-id" ("" score1 nil s) (" score2 nil s)))) + ;;`((("message-id" . ,predict-list))) ; Yes, this is the return value + (list (list (list (append (list "message-id") predict-list))))) + nil)) + + (defun bbb-get-predictions (midlist groupname) + "Ask the bbb for predictions, and build up the score alist." + (if (or (null grouplens-bbb-token) + (equal grouplens-bbb-token "0")) + (progn + (gnus-message 3 "Error: You are not logged in to a BBB") + nil) + (gnus-message 5 "Fetching Predictions...") + (let (predict-list + (predict-command (bbb-build-predict-command midlist groupname + grouplens-bbb-token)) + (bbb-process (bbb-connect-to-bbbd grouplens-bbb-host + grouplens-bbb-port))) + (if bbb-process + (save-excursion + (set-buffer (process-buffer bbb-process)) + (bbb-send-command bbb-process predict-command) + (if (bbb-read-response bbb-process) + (setq predict-list (bbb-get-prediction-response bbb-process)) + (gnus-message 1 "Invalid Token, login and try again") + (ding)))) + (setq bbb-alist predict-list)))) + + (defun bbb-get-all-mids () + (let ((index (nth 1 (assoc "message-id" gnus-header-index))) + (articles gnus-newsgroup-headers) + art this) + (setq bbb-mid-list nil) + (while articles + (progn (setq art (car articles) + this (aref art index) + articles (cdr articles)) + (setq bbb-mid-list (cons this bbb-mid-list)))) + bbb-mid-list)) + + (defun bbb-build-predict-command (mlist grpname token) + (let ((cmd (concat "getpredictions " token " " grpname "\r\n")) + art) + (while mlist + (setq art (car mlist) + cmd (concat cmd art "\r\n") + mlist (cdr mlist))) + (setq cmd (concat cmd ".\r\n")) + cmd)) + + (defun bbb-get-prediction-response (process) + (let ((case-fold-search nil) + match-end) + (goto-char bbb-read-point) + (while (and (not (search-forward ".\r\n" nil t)) + (accept-process-output process bbb-timeout-secs)) + (goto-char bbb-read-point)) + (setq match-end (point)) + (goto-char (+ bbb-response-point 4)) ;; we ought to be right before OK + (bbb-build-response-alist))) + + ;; build-response-alist assumes that the cursor has been positioned at + ;; the first line of the list of mid/rating pairs. For now we will + ;; use a prediction of 99 to signify no prediction. Ultimately, we + ;; should just ignore messages with no predictions. + (defun bbb-build-response-alist () + (let ((resp nil) + (match-end (point))) + (setq grouplens-current-hashtable (make-hash-table :test 'equal :size 100)) + (while + (cond ((looking-at "\\(<.*>\\) :nopred=") + (push `(,(bbb-get-mid) ,gnus-summary-default-score nil s) resp) + (forward-line 1) + t) + ((looking-at "\\(<.*>\\) :pred=\\([0-9]\.[0-9][0-9]\\) :conflow=\\([0-9]\.[0-9][0-9]\\) :confhigh=\\([0-9]\.[0-9][0-9]\\)") + (push `(,(bbb-get-mid) ,(bbb-get-pred) nil s) resp) + (cl-puthash (bbb-get-mid) + (list (bbb-get-pred) (bbb-get-confl) (bbb-get-confh)) + grouplens-current-hashtable) + (forward-line 1) + t) + ((looking-at "\\(<.*>\\) :pred=\\([0-9]\.[0-9][0-9]\\)") + (push `(,(bbb-get-mid) ,(bbb-get-pred) nil s) resp) + (cl-puthash (bbb-get-mid) + (list (bbb-get-pred) 0 0) + grouplens-current-hashtable) + (forward-line 1) + t) + (t nil))) + resp)) + + ;; these two functions assume that there is an active match lying + ;; around. Where the first parenthesized expression is the + ;; message-id, and the second is the prediction. Since gnus assumes + ;; that scores are integer values?? we round the prediction. + (defun bbb-get-mid () + (buffer-substring (match-beginning 1) (match-end 1))) + + (defun bbb-get-pred () + (let ((tpred (string-to-number (buffer-substring + (match-beginning 2) + (match-end 2))))) + (if (> tpred 0) + (round (* grouplens-score-scale-factor (+ grouplens-score-offset tpred))) + 1))) + + (defun bbb-get-confl () + (string-to-number (buffer-substring (match-beginning 3) (match-end 3)))) + + (defun bbb-get-confh () + (string-to-number (buffer-substring (match-beginning 4) (match-end 4)))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;; Prediction Display + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (defconst grplens-rating-range 4.0) + (defconst grplens-maxrating 5) + (defconst grplens-minrating 1) + (defconst grplens-predstringsize 12) + + (defvar gnus-tmp-score) + (defun bbb-grouplens-score (header) + (if (eq gnus-grouplens-override-scoring 'separate) + (bbb-grouplens-other-score header) + (let* ((rate-string (make-string 12 ? )) + (mid (aref header (nth 1 (assoc "message-id" gnus-header-index)))) + (hashent (gethash mid grouplens-current-hashtable)) + (iscore gnus-tmp-score) + (low (car (cdr hashent))) + (high (car (cdr (cdr hashent))))) + (aset rate-string 0 ?|) + (aset rate-string 11 ?|) + (unless (member grouplens-current-group grouplens-newsgroups) + (unless (equal grouplens-prediction-display 'prediction-num) + (cond ((< iscore 0) + (setq iscore 1)) + ((> iscore 5) + (setq iscore 5)))) + (setq low 0) + (setq high 0)) + (if (and (bbb-valid-score iscore) + (not (null mid))) + (cond + ;; prediction-spot + ((equal grouplens-prediction-display 'prediction-spot) + (setq rate-string (bbb-fmt-prediction-spot rate-string iscore))) + ;; confidence-interval + ((equal grouplens-prediction-display 'confidence-interval) + (setq rate-string (bbb-fmt-confidence-interval iscore low high))) + ;; prediction-bar + ((equal grouplens-prediction-display 'prediction-bar) + (setq rate-string (bbb-fmt-prediction-bar rate-string iscore))) + ;; confidence-bar + ((equal grouplens-prediction-display 'confidence-bar) + (setq rate-string (format "| %4.2f |" iscore))) + ;; confidence-spot + ((equal grouplens-prediction-display 'confidence-spot) + (setq rate-string (format "| %4.2f |" iscore))) + ;; prediction-num + ((equal grouplens-prediction-display 'prediction-num) + (setq rate-string (bbb-fmt-prediction-num iscore))) + ;; confidence-plus-minus + ((equal grouplens-prediction-display 'confidence-plus-minus) + (setq rate-string (bbb-fmt-confidence-plus-minus iscore low high)) + ) + (t (gnus-message 3 "Invalid prediction display type"))) + (aset rate-string 5 ?N) (aset rate-string 6 ?A)) + rate-string))) + + ;; + ;; Gnus user format function that doesn't depend on + ;; bbb-build-mid-scores-alist being used as the score function, but is + ;; instead called from gnus-select-group-hook. -- LAB + (defun bbb-grouplens-other-score (header) + (if (not (member grouplens-current-group grouplens-newsgroups)) + ;; Return an empty string + "" + (let* ((rate-string (make-string 12 ? )) + (mid (aref header (nth 1 (assoc "message-id" gnus-header-index)))) + (hashent (gethash mid grouplens-current-hashtable)) + (pred (or (nth 0 hashent) 0)) + (low (nth 1 hashent)) + (high (nth 2 hashent))) + ;; Init rate-string + (aset rate-string 0 ?|) + (aset rate-string 11 ?|) + (unless (equal grouplens-prediction-display 'prediction-num) + (cond ((< pred 0) + (setq pred 1)) + ((> pred 5) + (setq pred 5)))) + ;; If no entry in BBB hash mark rate string as NA and return + (cond + ((null hashent) + (aset rate-string 5 ?N) + (aset rate-string 6 ?A) + rate-string) + + ((equal grouplens-prediction-display 'prediction-spot) + (bbb-fmt-prediction-spot rate-string pred)) + + ((equal grouplens-prediction-display 'confidence-interval) + (bbb-fmt-confidence-interval pred low high)) + + ((equal grouplens-prediction-display 'prediction-bar) + (bbb-fmt-prediction-bar rate-string pred)) + + ((equal grouplens-prediction-display 'confidence-bar) + (format "| %4.2f |" pred)) + + ((equal grouplens-prediction-display 'confidence-spot) + (format "| %4.2f |" pred)) + + ((equal grouplens-prediction-display 'prediction-num) + (bbb-fmt-prediction-num pred)) + + ((equal grouplens-prediction-display 'confidence-plus-minus) + (bbb-fmt-confidence-plus-minus pred low high)) + + (t + (gnus-message 3 "Invalid prediction display type") + (aset rate-string 0 ?|) + (aset rate-string 11 ?|) + rate-string))))) + + (defun bbb-valid-score (score) + (or (equal grouplens-prediction-display 'prediction-num) + (and (>= score grplens-minrating) + (<= score grplens-maxrating)))) + + (defun bbb-requires-confidence (format-type) + (or (equal format-type 'confidence-plus-minus) + (equal format-type 'confidence-spot) + (equal format-type 'confidence-interval))) + + (defun bbb-have-confidence (clow chigh) + (not (or (null clow) + (null chigh)))) + + (defun bbb-fmt-prediction-spot (rate-string score) + (aset rate-string + (round (* (/ (- score grplens-minrating) grplens-rating-range) + (+ (- grplens-predstringsize 4) 1.49))) + ?*) + rate-string) + + (defun bbb-fmt-confidence-interval (score low high) + (if (bbb-have-confidence low high) + (format "|%4.2f-%4.2f |" low high) + (bbb-fmt-prediction-num score))) + + (defun bbb-fmt-confidence-plus-minus (score low high) + (if (bbb-have-confidence low high) + (format "|%3.1f+/-%4.2f|" score (/ (- high low) 2.0)) + (bbb-fmt-prediction-num score))) + + (defun bbb-fmt-prediction-bar (rate-string score) + (let* ((i 1) + (step (/ grplens-rating-range (- grplens-predstringsize 4))) + (half-step (/ step 2)) + (loc (- grplens-minrating half-step))) + (while (< i (- grplens-predstringsize 2)) + (if (> score loc) + (aset rate-string i ?#) + (aset rate-string i ? )) + (setq i (+ i 1)) + (setq loc (+ loc step))) + ) + rate-string) + + (defun bbb-fmt-prediction-num (score) + (format "| %4.2f |" score)) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;; Put Ratings + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ;; The message-id for the current article can be found in + ;; (aref gnus-current-headers (nth 1 (assoc "message-id" gnus-header-index))) + + (defun bbb-put-ratings () + (if (and grouplens-rating-alist + (member gnus-newsgroup-name grouplens-newsgroups)) + (let ((bbb-process (bbb-connect-to-bbbd grouplens-bbb-host + grouplens-bbb-port)) + (rate-command (bbb-build-rate-command grouplens-rating-alist))) + (if bbb-process + (save-excursion + (set-buffer (process-buffer bbb-process)) + (gnus-message 5 "Sending Ratings...") + (bbb-send-command bbb-process rate-command) + (if (bbb-read-response bbb-process) + (setq grouplens-rating-alist nil) + (gnus-message 1 + "Token timed out: call bbb-login and quit again") + (ding)) + (gnus-message 5 "Sending Ratings...Done")) + (gnus-message 3 "No BBB connection"))) + (setq grouplens-rating-alist nil))) + + (defun bbb-build-rate-command (rate-alist) + (let (this + (cmd (concat "putratings " grouplens-bbb-token + " " grouplens-current-group " \r\n"))) + (while rate-alist + (setq this (car rate-alist) + cmd (concat cmd (car this) " :rating=" (cadr this) ".00" + " :time=" (cddr this) "\r\n") + rate-alist (cdr rate-alist))) + (concat cmd ".\r\n"))) + + ;; Interactive rating functions. + (defun bbb-summary-rate-article (rating &optional midin) + (interactive "nRating: ") + (when (member gnus-newsgroup-name grouplens-newsgroups) + (let ((mid (or midin (bbb-get-current-id)))) + (if (and rating + (>= rating grplens-minrating) + (<= rating grplens-maxrating) + mid) + (let ((oldrating (assoc mid grouplens-rating-alist))) + (if oldrating + (setcdr oldrating (cons rating 0)) + (push `(,mid . (,rating . 0)) grouplens-rating-alist)) + (gnus-summary-mark-article nil (int-to-string rating))) + (gnus-message 3 "Invalid rating"))))) + + (defun grouplens-next-unread-article (rating) + "Select unread article after current one." + (interactive "P") + (if rating (bbb-summary-rate-article rating)) + (gnus-summary-next-unread-article)) + + (defun grouplens-best-unread-article (rating) + "Select unread article after current one." + (interactive "P") + (if rating (bbb-summary-rate-article rating)) + (gnus-summary-best-unread-article)) + + (defun grouplens-summary-catchup-and-exit (rating) + "Mark all articles not marked as unread in this newsgroup as read, + then exit. If prefix argument ALL is non-nil, all articles are + marked as read." + (interactive "P") + (if rating + (bbb-summary-rate-article rating)) + (if (numberp rating) + (gnus-summary-catchup-and-exit) + (gnus-summary-catchup-and-exit rating))) + + (defun grouplens-score-thread (score) + "Raise the score of the articles in the current thread with SCORE." + (interactive "nRating: ") + (let (e) + (save-excursion + (let ((articles (gnus-summary-articles-in-thread))) + (while articles + (gnus-summary-goto-subject (car articles)) + (gnus-set-global-variables) + (bbb-summary-rate-article score + (mail-header-id + (gnus-summary-article-header + (car articles)))) + (setq articles (cdr articles)))) + (setq e (point))) + (let ((gnus-summary-check-current t)) + (or (zerop (gnus-summary-next-subject 1 t)) + (goto-char e)))) + (gnus-summary-recenter) + (gnus-summary-position-point) + (gnus-set-mode-line 'summary)) + + + (defun bbb-get-current-id () + (if gnus-current-headers + (aref gnus-current-headers + (nth 1 (assoc "message-id" gnus-header-index))) + (gnus-message 3 "You must select an article before you rate it"))) + + (defun bbb-grouplens-group-p (group) + "Say whether GROUP is a GroupLens group." + (if (member group grouplens-newsgroups) " (GroupLens Enhanced)" "")) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; TIME SPENT READING + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (defvar grouplens-current-starting-time nil) + + (defun grouplens-start-timer () + (setq grouplens-current-starting-time (current-time))) + + (defun grouplens-elapsed-time () + (let ((et (bbb-time-float (current-time)))) + (- et (bbb-time-float grouplens-current-starting-time)))) + + (defun bbb-time-float (timeval) + (+ (* (car timeval) 65536) + (cadr timeval))) + + (defun grouplens-do-time () + (when (member gnus-newsgroup-name grouplens-newsgroups) + (when grouplens-previous-article + (let ((elapsed-time (grouplens-elapsed-time)) + (oldrating (assoc grouplens-previous-article + grouplens-rating-alist))) + (if (not oldrating) + (push `(,grouplens-previous-article . (0 . ,elapsed-time)) + grouplens-rating-alist) + (setcdr oldrating (cons (cadr oldrating) elapsed-time))))) + (grouplens-start-timer) + (setq grouplens-previous-article (bbb-get-current-id)))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; BUG REPORTING + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + (defconst gnus-gl-version "gnus-gl.el 2.12") + (defconst gnus-gl-maintainer-address "grouplens-bug@cs.umn.edu") + (defun gnus-gl-submit-bug-report () + "Submit via mail a bug report on gnus-gl" + (interactive) + (require 'reporter) + (reporter-submit-bug-report gnus-gl-maintainer-address + (concat "gnus-gl.el " gnus-gl-version) + (list 'grouplens-pseudonym + 'grouplens-bbb-host + 'grouplens-bbb-port + 'grouplens-newsgroups + 'grouplens-bbb-token + 'grouplens-bbb-process + 'grouplens-current-group + 'grouplens-previous-article + 'grouplens-mid-list + 'bbb-alist) + nil + 'gnus-gl-get-trace)) + + (defun gnus-gl-get-trace () + "Insert the contents of the BBBD trace buffer" + (if grouplens-bbb-buffer (insert-buffer grouplens-bbb-buffer))) + + ;;; + ;;; Additions to make gnus-grouplens-mode Warning Warning!! + ;;; This version of the gnus-grouplens-mode does + ;;; not work with gnus-5.x. The "old" way of + ;;; setting up GroupLens still works however. + ;;; + (defvar gnus-grouplens-mode nil + "Minor mode for providing a GroupLens interface in Gnus summary buffers.") + + (defvar gnus-grouplens-mode-map nil) + + (unless gnus-grouplens-mode-map + (setq gnus-grouplens-mode-map (make-keymap)) + (gnus-define-keys + gnus-grouplens-mode-map + "n" grouplens-next-unread-article + "r" bbb-summary-rate-article + "k" grouplens-score-thread + "c" grouplens-summary-catchup-and-exit + "," grouplens-best-unread-article)) + + (defun gnus-grouplens-make-menu-bar () + (unless (boundp 'gnus-grouplens-menu) + (easy-menu-define + gnus-grouplens-menu gnus-grouplens-mode-map "" + '("GroupLens" + ["Login" bbb-login t] + ["Rate" bbb-summary-rate-article t] + ["Next article" grouplens-next-unread-article t] + ["Best article" grouplens-best-unread-article t] + ["Raise thread" grouplens-score-thread t] + ["Report bugs" gnus-gl-submit-bug-report t])))) + + (defun gnus-grouplens-mode (&optional arg) + "Minor mode for providing a GroupLens interface in Gnus summary buffers." + (interactive "P") + (when (and (eq major-mode 'gnus-summary-mode) + (member gnus-newsgroup-name grouplens-newsgroups)) + (make-local-variable 'gnus-grouplens-mode) + (setq gnus-grouplens-mode + (if (null arg) (not gnus-grouplens-mode) + (> (prefix-numeric-value arg) 0))) + (when gnus-grouplens-mode + (if (not (fboundp 'make-local-hook)) + (add-hook 'gnus-select-article-hook 'grouplens-do-time) + (make-local-hook 'gnus-select-article-hook) + (add-hook 'gnus-select-article-hook 'grouplens-do-time nil 'local)) + (if (not (fboundp 'make-local-hook)) + (add-hook 'gnus-exit-group-hook 'bbb-put-ratings) + (make-local-hook 'gnus-exit-group-hook) + (add-hook 'gnus-exit-group-hook 'bbb-put-ratings nil 'local)) + (make-local-variable 'gnus-score-find-score-files-function) + (cond ((eq gnus-grouplens-override-scoring 'combine) + ;; either add bbb-buld-mid-scores-alist to a list + ;; or make a list + (if (listp gnus-score-find-score-files-function) + (setq gnus-score-find-score-files-function + (append 'bbb-build-mid-scores-alist + gnus-score-find-score-files-function )) + (setq gnus-score-find-score-files-function + (list gnus-score-find-score-files-function + 'bbb-build-mid-scores-alist)))) + ;; leave the gnus-score-find-score-files variable alone + ((eq gnus-grouplens-override-scoring 'separate) + (add-hook 'gnus-select-group-hook + '(lambda() + (bbb-build-mid-scores-alist gnus-newsgroup-name)))) + ;; default is to override + (t (setq gnus-score-find-score-files-function + 'bbb-build-mid-scores-alist))) + (make-local-variable 'gnus-summary-line-format) + (setq gnus-summary-line-format + gnus-summary-grouplens-line-format) + (make-local-variable 'gnus-summary-line-format-spec) + (setq gnus-summary-line-format-spec nil) + + ;; Set up the menu. + (when (and menu-bar-mode + (gnus-visual-p 'grouplens-menu 'menu)) + (gnus-grouplens-make-menu-bar)) + (unless (assq 'gnus-grouplens-mode minor-mode-alist) + (push '(gnus-grouplens-mode " GroupLens") minor-mode-alist)) + (unless (assq 'gnus-grouplens-mode minor-mode-map-alist) + (push (cons 'gnus-grouplens-mode gnus-grouplens-mode-map) + minor-mode-map-alist)) + (run-hooks 'gnus-grouplens-mode-hook)))) + + (provide 'gnus-gl) + + ;;; gnus-gl.el ends here diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/gnus-kill.el emacs-19.32/lisp/gnus-kill.el *** emacs-19.31/lisp/gnus-kill.el Thu Feb 15 10:54:19 1996 --- emacs-19.32/lisp/gnus-kill.el Tue Jun 25 18:02:30 1996 *************** *** 1,5 **** ;;; gnus-kill.el --- kill commands for Gnus ! ! ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA --- 1,4 ---- ;;; gnus-kill.el --- kill commands for Gnus ! ;; Copyright (C) 1995,96 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA *************** *** 29,32 **** --- 28,32 ---- (require 'gnus) + (eval-when-compile (require 'cl)) (defvar gnus-kill-file-mode-hook nil *************** *** 44,53 **** (defmacro gnus-raise (field expression level) ! (` (gnus-kill (, field) (, expression) ! (function (gnus-summary-raise-score (, level))) t))) (defmacro gnus-lower (field expression level) ! (` (gnus-kill (, field) (, expression) ! (function (gnus-summary-raise-score (- (, level)))) t))) ;;; --- 44,53 ---- (defmacro gnus-raise (field expression level) ! `(gnus-kill ,field ,expression ! (function (gnus-summary-raise-score ,level)) t)) (defmacro gnus-lower (field expression level) ! `(gnus-kill ,field ,expression ! (function (gnus-summary-raise-score (- ,level))) t)) ;;; *************** *** 57,77 **** (defvar gnus-kill-file-mode-map nil) ! (if gnus-kill-file-mode-map ! nil ! (setq gnus-kill-file-mode-map (copy-keymap emacs-lisp-mode-map)) ! (define-key gnus-kill-file-mode-map ! "\C-c\C-k\C-s" 'gnus-kill-file-kill-by-subject) ! (define-key gnus-kill-file-mode-map ! "\C-c\C-k\C-a" 'gnus-kill-file-kill-by-author) ! (define-key gnus-kill-file-mode-map ! "\C-c\C-k\C-t" 'gnus-kill-file-kill-by-thread) ! (define-key gnus-kill-file-mode-map ! "\C-c\C-k\C-x" 'gnus-kill-file-kill-by-xref) ! (define-key gnus-kill-file-mode-map ! "\C-c\C-a" 'gnus-kill-file-apply-buffer) ! (define-key gnus-kill-file-mode-map ! "\C-c\C-e" 'gnus-kill-file-apply-last-sexp) ! (define-key gnus-kill-file-mode-map ! "\C-c\C-c" 'gnus-kill-file-exit)) (defun gnus-kill-file-mode () --- 57,70 ---- (defvar gnus-kill-file-mode-map nil) ! (unless gnus-kill-file-mode-map ! (gnus-define-keymap ! (setq gnus-kill-file-mode-map (copy-keymap emacs-lisp-mode-map)) ! "\C-c\C-k\C-s" gnus-kill-file-kill-by-subject ! "\C-c\C-k\C-a" gnus-kill-file-kill-by-author ! "\C-c\C-k\C-t" gnus-kill-file-kill-by-thread ! "\C-c\C-k\C-x" gnus-kill-file-kill-by-xref ! "\C-c\C-a" gnus-kill-file-apply-buffer ! "\C-c\C-e" gnus-kill-file-apply-last-sexp ! "\C-c\C-c" gnus-kill-file-exit)) (defun gnus-kill-file-mode () *************** If NEWSGROUP is nil, the global kill fil *** 182,186 **** (bury-buffer buffer))) ! (defun gnus-kill-file-enter-kill (field regexp) ;; Enter kill file entry. ;; FIELD: String containing the name of the header field to kill. --- 175,179 ---- (bury-buffer buffer))) ! (defun gnus-kill-file-enter-kill (field regexp &optional dont-move) ;; Enter kill file entry. ;; FIELD: String containing the name of the header field to kill. *************** If NEWSGROUP is nil, the global kill fil *** 190,195 **** (or (eq major-mode 'gnus-kill-file-mode) (gnus-kill-set-kill-buffer)) ! (current-buffer) ! (goto-char (point-max)) (insert (setq string (format "(gnus-kill %S %S)\n" field regexp))) (gnus-kill-file-apply-string string)))) --- 183,188 ---- (or (eq major-mode 'gnus-kill-file-mode) (gnus-kill-set-kill-buffer)) ! (unless dont-move ! (goto-char (point-max))) (insert (setq string (format "(gnus-kill %S %S)\n" field regexp))) (gnus-kill-file-apply-string string)))) *************** If NEWSGROUP is nil, the global kill fil *** 203,207 **** (regexp-quote (gnus-simplify-subject (mail-header-subject gnus-current-headers))) ! ""))) (defun gnus-kill-file-kill-by-author () --- 196,200 ---- (regexp-quote (gnus-simplify-subject (mail-header-subject gnus-current-headers))) ! "") t)) (defun gnus-kill-file-kill-by-author () *************** If NEWSGROUP is nil, the global kill fil *** 212,216 **** (if (vectorp gnus-current-headers) (regexp-quote (mail-header-from gnus-current-headers)) ! ""))) (defun gnus-kill-file-kill-by-thread () --- 205,209 ---- (if (vectorp gnus-current-headers) (regexp-quote (mail-header-from gnus-current-headers)) ! "") t)) (defun gnus-kill-file-kill-by-thread () *************** If NEWSGROUP is nil, the global kill fil *** 238,243 **** gnus-newsgroup-name)) (gnus-kill-file-enter-kill ! "Xref" (concat " " (regexp-quote group) ":")))) ! (gnus-kill-file-enter-kill "Xref" "")))) (defun gnus-kill-file-raise-followups-to-author (level) --- 231,236 ---- gnus-newsgroup-name)) (gnus-kill-file-enter-kill ! "Xref" (concat " " (regexp-quote group) ":") t))) ! (gnus-kill-file-enter-kill "Xref" "" t)))) (defun gnus-kill-file-raise-followups-to-author (level) *************** If NEWSGROUP is nil, the global kill fil *** 259,263 **** (insert string) (gnus-kill-file-apply-string string)) ! (message "Added temporary score file entry for followups to %s." name))) (defun gnus-kill-file-apply-buffer () --- 252,257 ---- (insert string) (gnus-kill-file-apply-string string)) ! (gnus-message ! 6 "Added temporary score file entry for followups to %s." name))) (defun gnus-kill-file-apply-buffer () *************** If NEWSGROUP is nil, the global kill fil *** 268,272 **** ;; Assume newsgroup is selected. (gnus-kill-file-apply-string (buffer-string)) ! (ding) (message "No newsgroup is selected."))) (defun gnus-kill-file-apply-string (string) --- 262,266 ---- ;; Assume newsgroup is selected. (gnus-kill-file-apply-string (buffer-string)) ! (ding) (gnus-message 2 "No newsgroup is selected."))) (defun gnus-kill-file-apply-string (string) *************** If NEWSGROUP is nil, the global kill fil *** 292,296 **** (pop-to-buffer gnus-summary-buffer) (eval (car (read-from-string string)))))) ! (ding) (message "No newsgroup is selected."))) (defun gnus-kill-file-exit () --- 286,290 ---- (pop-to-buffer gnus-summary-buffer) (eval (car (read-from-string string)))))) ! (ding) (gnus-message 2 "No newsgroup is selected."))) (defun gnus-kill-file-exit () *************** If NEWSGROUP is nil, return the global k *** 319,334 **** (string-equal newsgroup "")) ;; The global kill file is placed at top of the directory. ! (expand-file-name gnus-kill-file-name ! (or gnus-kill-files-directory "~/News"))) (gnus-use-long-file-name ;; Append ".KILL" to capitalized newsgroup name. (expand-file-name (concat (gnus-capitalize-newsgroup newsgroup) "." gnus-kill-file-name) ! (or gnus-kill-files-directory "~/News"))) (t ;; Place "KILL" under the hierarchical directory. (expand-file-name (concat (gnus-newsgroup-directory-form newsgroup) "/" gnus-kill-file-name) ! (or gnus-kill-files-directory "~/News"))))) (defun gnus-expunge (marks) --- 313,327 ---- (string-equal newsgroup "")) ;; The global kill file is placed at top of the directory. ! (expand-file-name gnus-kill-file-name gnus-kill-files-directory)) (gnus-use-long-file-name ;; Append ".KILL" to capitalized newsgroup name. (expand-file-name (concat (gnus-capitalize-newsgroup newsgroup) "." gnus-kill-file-name) ! gnus-kill-files-directory)) (t ;; Place "KILL" under the hierarchical directory. (expand-file-name (concat (gnus-newsgroup-directory-form newsgroup) "/" gnus-kill-file-name) ! gnus-kill-files-directory)))) (defun gnus-expunge (marks) *************** If NEWSGROUP is nil, return the global k *** 336,340 **** (save-excursion (set-buffer gnus-summary-buffer) ! (gnus-summary-remove-lines-marked-with marks))) (defun gnus-apply-kill-file-internal () --- 329,347 ---- (save-excursion (set-buffer gnus-summary-buffer) ! (gnus-summary-limit-to-marks marks 'reverse))) ! ! (defun gnus-apply-kill-file-unless-scored () ! "Apply .KILL file, unless a .SCORE file for the same newsgroup exists." ! (cond ((file-exists-p (gnus-score-file-name gnus-newsgroup-name)) ! ;; Ignores global KILL. ! (if (file-exists-p (gnus-newsgroup-kill-file gnus-newsgroup-name)) ! (gnus-message 3 "Note: Ignoring %s.KILL; preferring .SCORE" ! gnus-newsgroup-name)) ! 0) ! ((or (file-exists-p (gnus-newsgroup-kill-file nil)) ! (file-exists-p (gnus-newsgroup-kill-file gnus-newsgroup-name))) ! (gnus-apply-kill-file-internal)) ! (t ! 0))) (defun gnus-apply-kill-file-internal () *************** Returns the number of articles marked as *** 347,352 **** beg) (setq gnus-newsgroup-kill-headers nil) - (or gnus-newsgroup-headers-hashtb-by-number - (gnus-make-headers-hashtable-by-number)) ;; If there are any previously scored articles, we remove these ;; from the `gnus-newsgroup-headers' list that the score functions --- 354,357 ---- *************** Returns the number of articles marked as *** 379,383 **** (if (not (file-exists-p (car kill-files))) () ! (message "Processing kill file %s..." (car kill-files)) (find-file (car kill-files)) (gnus-add-current-to-buffer-list) --- 384,388 ---- (if (not (file-exists-p (car kill-files))) () ! (gnus-message 6 "Processing kill file %s..." (car kill-files)) (find-file (car kill-files)) (gnus-add-current-to-buffer-list) *************** Returns the number of articles marked as *** 389,393 **** (gnus-kill-parse-rn-kill-file)) ! (message "Processing kill file %s...done" (car kill-files))) (setq kill-files (cdr kill-files))))) --- 394,399 ---- (gnus-kill-parse-rn-kill-file)) ! (gnus-message ! 6 "Processing kill file %s...done" (car kill-files))) (setq kill-files (cdr kill-files))))) *************** Returns the number of articles marked as *** 397,401 **** (let ((nunreads (- unreads (length gnus-newsgroup-unreads)))) (or (eq nunreads 0) ! (message "Marked %d articles as read" nunreads)) nunreads) 0)))) --- 403,407 ---- (let ((nunreads (- unreads (length gnus-newsgroup-unreads)))) (or (eq nunreads 0) ! (gnus-message 6 "Marked %d articles as read" nunreads)) nunreads) 0)))) *************** Returns the number of articles marked as *** 409,413 **** (insert string ":\n\n") (while alist ! (insert (format " %c: %s\n" (car (car alist)) (nth idx (car alist)))) (setq alist (cdr alist))))) --- 415,419 ---- (insert string ":\n\n") (while alist ! (insert (format " %c: %s\n" (caar alist) (nth idx (car alist)))) (setq alist (cdr alist))))) *************** COMMAND must be a lisp expression or a s *** 539,543 **** (not (consp (cdr (nth 2 object)))) (and (eq 'quote (car (nth 2 object))) ! (not (consp (cdr (car (cdr (nth 2 object)))))))) (concat "\n" (prin1-to-string object)) (save-excursion --- 545,549 ---- (not (consp (cdr (nth 2 object)))) (and (eq 'quote (car (nth 2 object))) ! (not (consp (cdadr (nth 2 object)))))) (concat "\n" (prin1-to-string object)) (save-excursion *************** COMMAND must be a lisp expression or a s *** 546,550 **** (erase-buffer) (insert (format "\n(%S %S\n '(" (nth 0 object) (nth 1 object))) ! (let ((klist (car (cdr (nth 2 object)))) (first t)) (while klist --- 552,556 ---- (erase-buffer) (insert (format "\n(%S %S\n '(" (nth 0 object) (nth 1 object))) ! (let ((klist (cadr (nth 2 object))) (first t)) (while klist *************** COMMAND must be a lisp expression or a s *** 581,587 **** (setq value (prin1-to-string value))) (setq did-kill (string-match regexp value))) ! (if (stringp form) ;Keyboard macro. ! (execute-kbd-macro form) ! (funcall form)))) ;; Search article body. (let ((gnus-current-article nil) ;Save article pointer. --- 587,596 ---- (setq value (prin1-to-string value))) (setq did-kill (string-match regexp value))) ! (cond ((stringp form) ;Keyboard macro. ! (execute-kbd-macro form)) ! ((gnus-functionp form) ! (funcall form)) ! (t ! (eval form))))) ;; Search article body. (let ((gnus-current-article nil) ;Save article pointer. *************** COMMAND must be a lisp expression or a s *** 589,593 **** (gnus-break-pages nil) ;No need to break pages. (gnus-mark-article-hook nil)) ;Inhibit marking as read. ! (message "Searching for article: %d..." (mail-header-number header)) (gnus-article-setup-buffer) (gnus-article-prepare (mail-header-number header) t) --- 598,603 ---- (gnus-break-pages nil) ;No need to break pages. (gnus-mark-article-hook nil)) ;Inhibit marking as read. ! (gnus-message ! 6 "Searching for article: %d..." (mail-header-number header)) (gnus-article-setup-buffer) (gnus-article-prepare (mail-header-number header) t) *************** marked as read or ticked are ignored." *** 610,635 **** (let ((killed-no 0) function article header) ! (if (or (null field) (string-equal field "")) ! (setq function nil) ! ;; Get access function of header filed. ! (setq function (intern-soft (concat "gnus-header-" (downcase field)))) ! (if (and function (fboundp function)) ! (setq function (symbol-function function)) ! (error "Unknown header field: \"%s\"" field)) ! ;; Make FORM funcallable. ! (if (and (listp form) (not (eq (car form) 'lambda))) ! (setq form (list 'lambda nil form)))) ;; Starting from the current article. ! (while (or (and (not article) ! (setq article (gnus-summary-article-number)) ! t) ! (setq article ! (gnus-summary-search-subject ! backward (not ignore-marked)))) (and (or (null gnus-newsgroup-kill-headers) (memq article gnus-newsgroup-kill-headers)) ! (vectorp (setq header (gnus-get-header-by-number article))) (gnus-execute-1 function regexp form header) (setq killed-no (1+ killed-no)))) killed-no))) --- 620,655 ---- (let ((killed-no 0) function article header) ! (cond ! ;; Search body. ! ((or (null field) ! (string-equal field "")) ! (setq function nil)) ! ;; Get access function of header field. ! ((fboundp ! (setq function ! (intern-soft ! (concat "mail-header-" (downcase field))))) ! (setq function `(lambda (h) (,function h)))) ! ;; Signal error. ! (t ! (error "Unknown header field: \"%s\"" field))) ;; Starting from the current article. ! (while (or ! ;; First article. ! (and (not article) ! (setq article (gnus-summary-article-number))) ! ;; Find later articles. ! (setq article ! (gnus-summary-search-forward ! (not ignore-marked) nil backward))) (and (or (null gnus-newsgroup-kill-headers) (memq article gnus-newsgroup-kill-headers)) ! (vectorp (setq header (gnus-summary-article-header article))) (gnus-execute-1 function regexp form header) (setq killed-no (1+ killed-no)))) + ;; Return the number of killed articles. killed-no))) + (provide 'gnus-kill) + + ;;; gnus-kill.el ends here diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/gnus-mh.el emacs-19.32/lisp/gnus-mh.el *** emacs-19.31/lisp/gnus-mh.el Sun Jan 14 02:34:30 1996 --- emacs-19.32/lisp/gnus-mh.el Tue Jun 25 18:03:18 1996 *************** *** 1,5 **** ;;; gnus-mh.el --- mh-e interface for Gnus ! ! ;; Copyright (C) 1994,95 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA --- 1,4 ---- ;;; gnus-mh.el --- mh-e interface for Gnus ! ;; Copyright (C) 1994,95,96 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA *************** *** 39,42 **** --- 38,42 ---- (require 'gnus) (require 'gnus-msg) + (eval-when-compile (require 'cl)) (defun gnus-summary-save-article-folder (&optional arg) *************** Optional argument FOLDER specifies folde *** 56,208 **** (mh-find-path) (let ((folder ! (or folder ! (mh-prompt-for-folder ! "Save article in" ! (funcall gnus-folder-save-name gnus-newsgroup-name ! gnus-current-headers gnus-newsgroup-last-folder) ! t))) ! (errbuf (get-buffer-create " *Gnus rcvstore*"))) ! (gnus-eval-in-buffer-window ! gnus-article-buffer ! (save-restriction ! (widen) ! (unwind-protect ! (call-process-region (point-min) (point-max) ! (expand-file-name "rcvstore" mh-lib) ! nil errbuf nil folder) ! (set-buffer errbuf) ! (if (zerop (buffer-size)) ! (message "Article saved in folder: %s" folder) ! (message "%s" (buffer-string))) ! (kill-buffer errbuf)))) ! (setq gnus-newsgroup-last-folder folder))) ! ! (defun gnus-mail-reply-using-mhe (&optional yank) ! "Compose reply mail using mh-e. ! Optional argument YANK means yank original article. ! The command \\[mh-yank-cur-msg] yank the original message into current buffer." ! (let (from cc subject date to reply-to to-userid orig-to ! references message-id ! (config (current-window-configuration)) ! buffer) ! (pop-to-buffer gnus-article-buffer) ! (setq buffer (current-buffer)) ! (save-excursion (save-restriction ! (or gnus-user-login-name ; we need this ! (setq gnus-user-login-name (or (getenv "USER") ! (getenv "LOGNAME")))) ! ! (gnus-article-show-all-headers);; so colors are happy ! ;; lots of junk to avoid mh-send deleting other windows ! (setq from (or (gnus-fetch-field "from") "") ! subject (let ((subject (or (gnus-fetch-field "subject") ! "(None)"))) ! (if (and subject ! (not (string-match "^[Rr][Ee]:.+$" subject))) ! (concat "Re: " subject) subject)) ! reply-to (gnus-fetch-field "reply-to") ! cc (gnus-fetch-field "cc") ! orig-to (or (gnus-fetch-field "to") "") ! date (gnus-fetch-field "date") ! references (gnus-fetch-field "references") ! message-id (gnus-fetch-field "message-id")) ! (setq to (or reply-to from)) ! (setq to-userid (mail-strip-quoted-names orig-to)) ! (if (or (string-match "," orig-to) ! (not (string-match (substring to-userid 0 ! (string-match "@" to-userid)) ! gnus-user-login-name))) ! (setq cc (concat (if cc (concat cc ", ") "") orig-to))) ! ;; mh-yank-cur-msg needs to have mh-show-buffer set in the ! ;; *Article* buffer ! (setq mh-show-buffer buffer))) ! ! (mh-find-path) ! (mh-send-sub (or to "") (or cc "") ! (or subject "(None)") config);; Erik Selberg 1/23/94 ! ! (let ((draft (current-buffer)) ! (gnus-mail-buffer (current-buffer)) ! mail-buf) ! (if (not yank) ! (gnus-configure-windows 'reply 'force) ! (gnus-configure-windows 'reply-yank 'force)) ! (setq mail-buf gnus-mail-buffer) ! (pop-to-buffer mail-buf);; always in the display, so won't have window probs ! (switch-to-buffer draft)) ! ! ;; (mh-send to (or cc "") subject);; shouldn't use according to mhe ! ! ;; note - current buffer is now draft! ! (save-excursion ! (mh-insert-fields ! "In-reply-to:" ! (concat ! (substring from 0 (string-match " *at \\| *@ \\| *(\\| *<" from)) ! "'s message of " date)) ! (nnheader-insert-references references message-id)) ! ! ;; need this for mh-yank-cur-msg ! (setq mh-sent-from-folder buffer) ! (setq mh-sent-from-msg 1) ! (setq mh-show-buffer buffer) ! (setq mh-previous-window-config config)) ! ! ;; Then, yank original article if requested. ! (if yank ! (let ((last (point))) ! (mh-yank-cur-msg) ! (goto-char last))) ! ! (run-hooks 'gnus-mail-hook)) ! ! ! ;; gnus-mail-forward-using-mhe is contributed by Jun-ichiro Itoh ! ;; ! ! (defun gnus-mail-forward-using-mhe (&optional buffer) ! "Forward the current message to another user using mh-e." ! ;; First of all, prepare mhe mail buffer. ! (let* ((to (read-string "To: ")) ! (cc (read-string "Cc: ")) ! (buffer (or buffer gnus-article-buffer)) ! (config (current-window-configuration));; need to add this - erik ! (subject (gnus-forward-make-subject buffer))) ! (setq mh-show-buffer buffer) ! (mh-find-path) ! (mh-send-sub to (or cc "") (or subject "(None)") config);; Erik Selberg 1/23/94 ! (let ((draft (current-buffer)) ! (gnus-mail-buffer (current-buffer)) ! mail-buf) ! (gnus-configure-windows 'reply-yank 'force) ! (setq mail-buf (eval (cdr (assq 'mail gnus-window-to-buffer)))) ! (pop-to-buffer mail-buf);; always in the display, so won't have window probs ! (switch-to-buffer draft) ! ) ! (save-excursion ! (goto-char (point-max)) ! (insert "\n------- Forwarded Message\n\n") ! (insert-buffer buffer) ! (goto-char (point-max)) ! (insert "\n------- End of Forwarded Message\n") ! (setq mh-sent-from-folder buffer) ! (setq mh-sent-from-msg 1) ! (setq mh-previous-window-config config) ! (run-hooks 'gnus-mail-hook) ! ))) ! ! (defun gnus-mail-other-window-using-mhe () ! "Compose mail other window using mh-e." ! (let ((to (read-string "To: ")) ! (cc (read-string "Cc: ")) ! (subject (read-string "Subject: "))) ! (gnus-article-show-all-headers) ;I don't think this is really needed. ! (setq mh-show-buffer (current-buffer)) ! (mh-find-path) ! (mh-send-other-window to cc subject) ! (setq mh-sent-from-folder (current-buffer)) ! (setq mh-sent-from-msg 1) ! (run-hooks 'gnus-mail-hook))) (defun gnus-Folder-save-name (newsgroup headers &optional last-folder) --- 56,83 ---- (mh-find-path) (let ((folder ! (cond ((and (eq folder 'default) ! gnus-newsgroup-last-folder) ! gnus-newsgroup-last-folder) ! (folder folder) ! (t (mh-prompt-for-folder ! "Save article in" ! (funcall gnus-folder-save-name gnus-newsgroup-name ! gnus-current-headers gnus-newsgroup-last-folder) ! t)))) ! (errbuf (get-buffer-create " *Gnus rcvstore*")) ! ;; Find the rcvstore program. ! (exec-path (if mh-lib (cons mh-lib exec-path) exec-path))) ! (gnus-eval-in-buffer-window gnus-original-article-buffer (save-restriction ! (widen) ! (unwind-protect ! (call-process-region ! (point-min) (point-max) "rcvstore" nil errbuf nil folder) ! (set-buffer errbuf) ! (if (zerop (buffer-size)) ! (message "Article saved in folder: %s" folder) ! (message "%s" (buffer-string))) ! (kill-buffer errbuf)))) ! (setq gnus-newsgroup-last-folder folder))) (defun gnus-Folder-save-name (newsgroup headers &optional last-folder) *************** Otherwise, it is like +news/group." *** 225,228 **** --- 100,105 ---- newsgroup (gnus-newsgroup-directory-form newsgroup))))) + + (provide 'gnus-mh) ;;; gnus-mh.el ends here diff -2rcpP --exclude=*.elc --exclude=*.aux --exclude=*.cps --exclude=*.fns --exclude=*.kys --exclude=*.vrs emacs-19.31/lisp/gnus-msg.el emacs-19.32/lisp/gnus-msg.el *** emacs-19.31/lisp/gnus-msg.el Tue Feb 20 14:21:02 1996 --- emacs-19.32/lisp/gnus-msg.el Fri Jun 28 20:17:58 1996 *************** *** 1,5 **** ;;; gnus-msg.el --- mail and post interface for Gnus ! ! ;; Copyright (C) 1995 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA --- 1,4 ---- ;;; gnus-msg.el --- mail and post interface for Gnus ! ;; Copyright (C) 1995,96 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA *************** *** 29,242 **** (require 'gnus) - (require 'sendmail) (require 'gnus-ems) ! (defvar gnus-organization-file "/usr/lib/news/organization" ! "*Local news organization file.") ! ! (defvar gnus-prepare-article-hook (list 'gnus-inews-insert-signature) ! "*A hook called after preparing body, but before preparing header headers. ! The default hook (`gnus-inews-insert-signature') inserts a signature ! file specified by the variable `gnus-signature-file'.") ! ! (defvar gnus-post-prepare-function nil ! "*Function that is run after a post buffer has been prepared. ! It is called with the name of the newsgroup that is posted to. It ! might be used, for instance, for inserting signatures based on the ! newsgroup name. (In that case, `gnus-signature-file' and ! `mail-signature' should both be set to nil).") ! ! (defvar gnus-post-prepare-hook nil ! "*Hook that is run after a post buffer has been prepared. ! If you want to insert the signature, you might put ! `gnus-inews-insert-signature' in this hook.") ! ! (defvar gnus-use-followup-to t ! "*Specifies what to do with Followup-To header. ! If nil, ignore the header. If it is t, use its value, but ignore ! `poster'. If it is the symbol `ask', query the user before posting. ! If it is the symbol `use', always use the value.") ! ! (defvar gnus-followup-to-function nil ! "*A variable that contains a function that returns a followup address. ! The function will be called in the buffer of the article that is being ! followed up. The buffer will be narrowed to the headers of the ! article. To pick header headers, one might use `mail-fetch-field'. The ! function will be called with the name of the current newsgroup as the ! argument. ! ! Here's an example `gnus-followup-to-function': ! ! (setq gnus-followup-to-function ! (lambda (group) ! (cond ((string= group \"mail.list\") ! (or (mail-fetch-field \"sender\") ! (mail-fetch-field \"from\"))) ! (t ! (or (mail-fetch-field \"reply-to\") ! (mail-fetch-field \"from\"))))))") ! ! (defvar gnus-reply-to-function nil ! "*A variable that contains a function that returns a reply address. ! See the `gnus-followup-to-function' variable for an explanation of how ! this variable is used. ! ! This function should return a string that will be used to fill in the ! header. This function may also return a list. In that case, every ! list element should be a cons where the first car should be a string ! with the header name, and the cdr should be a string with the header ! value.") ! ! (defvar gnus-author-copy (getenv "AUTHORCOPY") ! "*Save outgoing articles in this file. ! Initialized from the AUTHORCOPY environment variable. ! ! If this variable begins with the character \"|\", outgoing articles ! will be piped to the named program. It is possible to save an article ! in an MH folder as follows: ! ! \(setq gnus-author-copy \"|/usr/local/lib/mh/rcvstore +Article\") ! ! If the first character is not a pipe, articles are saved using the ! function specified by the `gnus-author-copy-saver' variable.") ! ! (defvar gnus-mail-self-blind nil ! "*Non-nil means insert a BCC header in all outgoing articles. ! This will result in having a copy of the article mailed to yourself. ! The BCC header is inserted when the post buffer is initialized, so you ! can remove or alter the BCC header to override the default.") ! ! (defvar gnus-author-copy-saver (function rmail-output) ! "*A function called to save outgoing articles. ! This function will be called with the same of the file to store the ! article in. The default function is `rmail-output' which saves in Unix ! mailbox format.") ! ! (defvar gnus-user-login-name nil ! "*The login name of the user. ! Got from the function `user-login-name' if undefined.") ! ! (defvar gnus-user-full-name nil ! "*The full name of the user. ! Got from the NAME environment variable if undefined.") ! ! (defvar gnus-user-from-line nil ! "*Your full, complete e-mail address. ! Overrides the other Gnus variables if it is non-nil. ! ! Here are two example values of this variable: ! ! \"Lars Magne Ingebrigtsen \" ! ! and ! ! \"larsi@ifi.uio.no (Lars Magne Ingebrigtsen)\" ! ! The first version is recommended, but the name has to be quoted if it ! contains non-alphanumerical characters.") ! ! (defvar gnus-signature-file "~/.signature" ! "*Your signature file. ! If the variable is a string that doesn't correspond to a file, the ! string itself is inserted.") ! ! (defvar gnus-signature-function nil ! "*A function that should return a signature file name. ! The function will be called with the name of the newsgroup being ! posted to. ! If the function returns a string that doesn't correspond to a file, the ! string itself is inserted. ! If the function returns nil, the `gnus-signature-file' variable will ! be used instead.") ! ! (defvar gnus-required-headers ! '(From Date Newsgroups Subject Message-ID Organization Lines X-Newsreader) ! "*Headers to be generated or prompted for when posting an article. ! RFC977 and RFC1036 require From, Date, Newsgroups, Subject, ! Message-ID. Organization, Lines and X-Newsreader are optional. If ! you want Gnus not to insert some header, remove it from this list.") ! ! (defvar gnus-deletable-headers '(Message-ID Date) ! "*Headers to be deleted if they already exists and were generated by Gnus previously.") ! ! (defvar gnus-removable-headers '(NNTP-Posting-Host Bcc Xref) ! "*Headers to be removed unconditionally before posting.") ! ! (defvar gnus-check-before-posting ! '(subject-cmsg multiple-headers sendsys message-id from ! long-lines control-chars size new-text ! signature) ! "In non-nil, Gnus will attempt to run some checks on outgoing posts. ! If this variable is t, Gnus will check everything it can. If it is a ! list, then those elements in that list will be checked.") ! ! (defvar gnus-delete-supersedes-headers ! "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Supersedes:" ! "*Header lines matching this regexp will be deleted before posting. ! It's best to delete old Path and Date headers before posting to avoid ! any confusion.") ! ! (defvar gnus-auto-mail-to-author nil ! "*If non-nil, mail the authors of articles a copy of your follow-ups. ! If this variable is `ask', the user will be prompted for whether to ! mail a copy. The string given by `gnus-mail-courtesy-message' will be ! inserted at the beginning of the mail copy. ! ! Mail is sent using the function specified by the ! `gnus-mail-send-method' variable.") ! ! ;; Added by Ethan Bradford . ! (defvar gnus-mail-courtesy-message ! "The following message is a courtesy copy of an article\nthat has been posted as well.\n\n" ! "*This is inserted at the start of a mailed copy of a posted message. ! If this variable is nil, no such courtesy message will be added.") ! ! (defvar gnus-mail-reply-method (function gnus-mail-reply-using-mail) ! "*Function to compose a reply. ! Three pre-made functions are `gnus-mail-reply-using-mail' (sendmail); ! `gnus-mail-reply-using-mhe' (MH-E); and `gnus-mail-reply-using-vm'.") ! ! (defvar gnus-mail-forward-method (function gnus-mail-forward-using-mail) ! "*Function to forward the current message to another user. ! Three pre-made functions are `gnus-mail-forward-using-mail' (sendmail); ! `gnus-mail-forward-using-mhe' (MH-E); and `gnus-mail-forward-using-vm'.") ! ! (defvar gnus-mail-other-window-method 'gnus-mail-other-window-using-mail ! "*Function to compose mail in the other window. ! Three pre-made functions are `gnus-mail-other-window-using-mail' ! (sendmail); `gnus-mail-other-window-using-mhe' (MH-E); and ! `gnus-mail-other-window-using-vm'.") ! ! (defvar gnus-mail-send-method send-mail-function ! "*Function to mail a message which is also being posted as an article. ! The message must have To or Cc header. The default is copied from ! the variable `send-mail-function'.") ! ! (defvar gnus-inews-article-function 'gnus-inews-article ! "*Function to post an article.") ! ! (defvar gnus-inews-article-hook (list 'gnus-inews-do-fcc) ! "*A hook called before finally posting an article. ! The default hook (`gnus-inews-do-fcc') does FCC processing (ie. saves ! the article to a file).") ! ! (defvar gnus-inews-article-header-hook nil ! "*A hook called after inserting the headers in an article to be posted. ! The hook is called from the *post-news* buffer, narrowed to the ! headers.") ! (defvar gnus-mail-hook nil ! "*A hook called as the last thing after setting up a mail buffer.") ;;; Internal variables. ! (defvar gnus-post-news-buffer "*post-news*") ! (defvar gnus-mail-buffer "*mail*") ! (defvar gnus-summary-send-map nil) (defvar gnus-article-copy nil) ! (defvar gnus-reply-subject nil) (eval-and-compile (autoload 'gnus-uu-post-news "gnus-uu" nil t) (autoload 'rmail-output "rmailout")) --- 28,83 ---- (require 'gnus) (require 'gnus-ems) + (require 'message) + (eval-when-compile (require 'cl)) ! ;; Added by Sudish Joseph . ! (defvar gnus-post-method nil ! "*Preferred method for posting USENET news. ! If this variable is nil, Gnus will use the current method to decide ! which method to use when posting. If it is non-nil, it will override ! the current method. This method will not be used in mail groups and ! the like, only in \"real\" newsgroups. ! ! The value must be a valid method as discussed in the documentation of ! `gnus-select-method'. It can also be a list of methods. If that is ! the case, the user will be queried for what select method to use when ! posting.") ! ! (defvar gnus-outgoing-message-group nil ! "*All outgoing messages will be put in this group. ! If you want to store all your outgoing mail and articles in the group ! \"nnml:archive\", you set this variable to that value. This variable ! can also be a list of group names. ! ! If you want to have greater control over what group to put each ! message in, you can set this variable to a function that checks the ! current newsgroup name and then returns a suitable group name (or list ! of names).") ! ! (defvar gnus-mailing-list-groups nil ! "*Regexp matching groups that are really mailing lists. ! This is useful when you're reading a mailing list that has been ! gatewayed to a newsgroup, and you want to followup to an article in ! the group.") ! ! (defvar gnus-sent-message-ids-file ! (nnheader-concat gnus-directory "Sent-Message-IDs") ! "File where Gnus saves a cache of sent message ids.") ! (defvar gnus-sent-message-ids-length 1000 ! "The number of sent Message-IDs to save.") ;;; Internal variables. ! (defvar gnus-message-buffer "*Mail Gnus*") (defvar gnus-article-copy nil) ! (defvar gnus-last-posting-server nil) (eval-and-compile (autoload 'gnus-uu-post-news "gnus-uu" nil t) + (autoload 'news-setup "rnewspost") + (autoload 'news-reply-mode "rnewspost") + (autoload 'rmail-dont-reply-to "mail-utils") (autoload 'rmail-output "rmailout")) *************** headers.") *** 246,275 **** ;;; ! (define-prefix-command 'gnus-summary-send-map) ! (define-key gnus-summary-mode-map "S" 'gnus-summary-send-map) ! (define-key gnus-summary-send-map "p" 'gnus-summary-post-news) ! (define-key gnus-summary-send-map "f" 'gnus-summary-followup) ! (define-key gnus-summary-send-map "F" 'gnus-summary-followup-with-original) ! (define-key gnus-summary-send-map "b" 'gnus-summary-followup-and-reply) ! (define-key gnus-summary-send-map "B" 'gnus-summary-followup-and-reply-with-original) ! (define-key gnus-summary-send-map "c" 'gnus-summary-cancel-article) ! (define-key gnus-summary-send-map "s" 'gnus-summary-supersede-article) ! (define-key gnus-summary-send-map "r" 'gnus-summary-reply) ! (define-key gnus-summary-send-map "R" 'gnus-summary-reply-with-original) ! (define-key gnus-summary-send-map "m" 'gnus-summary-mail-other-window) ! (define-key gnus-summary-send-map "u" 'gnus-uu-post-news) ! (define-key gnus-summary-send-map "om" 'gnus-summary-mail-forward) ! (define-key gnus-summary-send-map "op" 'gnus-summary-post-forward) ! (define-key gnus-summary-send-map "Om" 'gnus-uu-digest-mail-forward) ! (define-key gnus-summary-send-map "Op" 'gnus-uu-digest-post-forward) ;;; Internal functions. ! (defun gnus-number-base36 (num len) ! (if (if (< len 0) (<= num 0) (= len 0)) ! "" ! (concat (gnus-number-base36 (/ num 36) (1- len)) ! (char-to-string (aref "zyxwvutsrqponmlkjihgfedcba9876543210" ! (% num 36)))))) ;;; Post news commands of Gnus group mode and summary mode --- 87,151 ---- ;;; ! (gnus-define-keys ! (gnus-summary-send-map "S" gnus-summary-mode-map) ! "p" gnus-summary-post-news ! "f" gnus-summary-followup ! "F" gnus-summary-followup-with-original ! "c" gnus-summary-cancel-article ! "s" gnus-summary-supersede-article ! "r" gnus-summary-reply ! "R" gnus-summary-reply-with-original ! "m" gnus-summary-mail-other-window ! "u" gnus-uu-post-news ! "om" gnus-summary-mail-forward ! "op" gnus-summary-post-forward ! "Om" gnus-uu-digest-mail-forward ! "Op" gnus-uu-digest-post-forward) ! ! (gnus-define-keys ! (gnus-send-bounce-map "D" gnus-summary-send-map) ! "b" gnus-summary-resend-bounced-mail ! ; "c" gnus-summary-send-draft ! "r" gnus-summary-resend-message) ;;; Internal functions. ! (defvar gnus-article-reply nil) ! (defmacro gnus-setup-message (config &rest forms) ! (let ((winconf (make-symbol "winconf")) ! (buffer (make-symbol "buffer")) ! (article (make-symbol "article"))) ! `(let ((,winconf (current-window-configuration)) ! (,buffer (current-buffer)) ! (,article (and gnus-article-reply (gnus-summary-article-number))) ! (message-header-setup-hook ! (copy-sequence message-header-setup-hook))) ! (add-hook 'message-header-setup-hook 'gnus-inews-insert-gcc) ! (add-hook 'message-header-setup-hook 'gnus-inews-insert-archive-gcc) ! ,@forms ! (gnus-inews-add-send-actions ,winconf ,buffer ,article) ! (setq gnus-message-buffer (current-buffer)) ! (gnus-configure-windows ,config t)))) ! ! (defun gnus-inews-add-send-actions (winconf buffer article) ! (gnus-make-local-hook 'message-sent-hook) ! (gnus-add-hook 'message-sent-hook 'gnus-inews-do-gcc nil t) ! (setq message-post-method ! `(lambda (arg) ! (gnus-post-method arg ,gnus-newsgroup-name))) ! (setq message-newsreader (setq message-mailer (gnus-extended-version))) ! (message-add-action ! `(set-window-configuration ,winconf) 'exit 'postpone 'kill) ! (message-add-action ! `(when (buffer-name ,buffer) ! (save-excursion ! (set-buffer ,buffer) ! ,(when article ! `(gnus-summary-mark-article-as-replied ,article)))) ! 'send)) ! ! (put 'gnus-setup-message 'lisp-indent-function 1) ! (put 'gnus-setup-message 'lisp-indent-hook 1) ! (put 'gnus-setup-message 'edebug-form-spec '(form body)) ;;; Post news commands of Gnus group mode and summary mode *************** headers.") *** 278,335 **** "Start composing a mail." (interactive) ! (funcall gnus-mail-other-window-method)) ! (defun gnus-group-post-news () ! "Post an article." ! (interactive) ! (let ((gnus-newsgroup-name nil)) ! (gnus-post-news 'post nil nil gnus-article-buffer))) (defun gnus-summary-post-news () ! "Post an article." (interactive) (gnus-set-global-variables) (gnus-post-news 'post gnus-newsgroup-name)) ! (defun gnus-summary-followup (yank &optional yank-articles) "Compose a followup to an article. If prefix argument YANK is non-nil, original article is yanked automatically." ! (interactive "P") (gnus-set-global-variables) ! (if yank-articles (gnus-summary-goto-subject (car yank-articles))) (save-window-excursion (gnus-summary-select-article)) ! (let ((headers (gnus-get-header-by-number (gnus-summary-article-number))) (gnus-newsgroup-name gnus-newsgroup-name)) ! ;; Check Followup-To: poster. ! (set-buffer gnus-article-buffer) ! (if (and gnus-use-followup-to ! (string-equal "poster" (gnus-fetch-field "followup-to")) ! (or (not (memq gnus-use-followup-to '(t ask))) ! (not (gnus-y-or-n-p ! "Do you want to ignore `Followup-To: poster'? ")))) ! ;; Mail to the poster. ! (gnus-summary-reply yank) ! (gnus-post-news nil gnus-newsgroup-name ! headers gnus-article-buffer ! (or yank-articles (not (not yank))))))) ! (defun gnus-summary-followup-with-original (n) "Compose a followup to an article and include the original article." (interactive "P") ! (gnus-summary-followup t (gnus-summary-work-articles n))) ! ! ;; Suggested by Daniel Quinlan . ! (defun gnus-summary-followup-and-reply (yank &optional yank-articles) ! "Compose a followup and do an auto mail to author." ! (interactive "P") ! (gnus-set-global-variables) ! (let ((gnus-auto-mail-to-author t)) ! (gnus-summary-followup yank yank-articles))) ! (defun gnus-summary-followup-and-reply-with-original (n) ! "Compose a followup, include the original, and do an auto mail to author." ! (interactive "P") ! (gnus-summary-followup-and-reply t (gnus-summary-work-articles n))) (defun gnus-summary-cancel-article (n) --- 154,221 ---- "Start composing a mail." (interactive) ! (gnus-setup-message 'message ! (message-mail))) ! (defun gnus-group-post-news (&optional arg) ! "Start composing a news message. ! If ARG, post to the group under point. ! If ARG is 1, prompt for a group name." ! (interactive "P") ! ;; Bind this variable here to make message mode hooks ! ;; work ok. ! (let ((gnus-newsgroup-name ! (if arg ! (if (= 1 (prefix-numeric-value arg)) ! (completing-read "Newsgroup: " gnus-active-hashtb nil ! (gnus-read-active-file-p)) ! (gnus-group-group-name)) ! ""))) ! (gnus-post-news 'post gnus-newsgroup-name))) (defun gnus-summary-post-news () ! "Start composing a news message." (interactive) (gnus-set-global-variables) (gnus-post-news 'post gnus-newsgroup-name)) ! (defun gnus-summary-followup (yank &optional force-news) "Compose a followup to an article. If prefix argument YANK is non-nil, original article is yanked automatically." ! (interactive ! (list (and current-prefix-arg ! (gnus-summary-work-articles 1)))) (gnus-set-global-variables) ! (when yank ! (gnus-summary-goto-subject (car yank))) (save-window-excursion (gnus-summary-select-article)) ! (let ((headers (gnus-summary-article-header (gnus-summary-article-number))) (gnus-newsgroup-name gnus-newsgroup-name)) ! ;; Send a followup. ! (gnus-post-news nil gnus-newsgroup-name ! headers gnus-article-buffer ! yank nil force-news))) ! (defun gnus-summary-followup-with-original (n &optional force-news) "Compose a followup to an article and include the original article." (interactive "P") ! (gnus-summary-followup (gnus-summary-work-articles n) force-news)) ! (defun gnus-inews-yank-articles (articles) ! (let (beg article) ! (while (setq article (pop articles)) ! (save-window-excursion ! (set-buffer gnus-summary-buffer) ! (gnus-summary-select-article nil nil nil article) ! (gnus-summary-remove-process-mark article)) ! (gnus-copy-article-buffer) ! (let ((message-reply-buffer gnus-article-copy) ! (message-reply-headers gnus-current-headers)) ! (message-yank-original) ! (setq beg (or beg (mark t)))) ! (when articles (insert "\n"))) ! ! (push-mark) ! (goto-char beg))) (defun gnus-summary-cancel-article (n) *************** If prefix argument YANK is non-nil, orig *** 337,348 **** (interactive "P") (gnus-set-global-variables) ! (let ((articles (gnus-summary-work-articles n))) ! (while articles ! (gnus-summary-select-article t nil nil (car articles)) ! (and (gnus-eval-in-buffer-window gnus-article-buffer (gnus-cancel-news)) ! (gnus-summary-mark-as-read (car articles) gnus-canceled-mark)) ! (gnus-summary-remove-process-mark (car articles)) ! (gnus-article-hide-headers-if-wanted) ! (setq articles (cdr articles))))) (defun gnus-summary-supersede-article () --- 223,239 ---- (interactive "P") (gnus-set-global-variables) ! (let ((articles (gnus-summary-work-articles n)) ! (message-post-method ! `(lambda (arg) ! (gnus-post-method nil ,gnus-newsgroup-name))) ! article) ! (while (setq a