#!/bin/sh #### Patch script - GNU Emacs - version 19.25 to 19.26 #### This file contains patches to turn version 19.25 of GNU Emacs into #### 19.26. To apply them, cd to the top of the Emacs source tree, and #### then type 'sh '. #### After you apply the patches, you should run Emacs (an earlier 19 will do) #### and type M-x byte-recompile-directory RET lisp RET #### to recompile the changed Emacs Lisp files. #### Then you can build the new Emacs version. #### Then use the new Emacs versionto recompile hilit19.el and advice.el. #### Type M-x byte-compile-file RET lisp/hilit19.el RET #### M-x byte-compile-file RET lisp/advice.el RET #### 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; makeinfo emacs.texi; makeinfo dired-x.texi; makeinfo gnus.texi) ### Patchmaker's checklist: ### - update version numbers in comments and version.el tweak ### - diff -u ls -R listings, and decide on rm's and mv's. ### - apply rm's and mv's, and then do a diff -cprP --exclude=\*.elc ### to generate the body. ### - insert the body just before the line saying `end-of-emacs-patch-kit'. if [ -d lisp ] ; then true else if [ -d emacs-19.25/lisp ] ; then cd emacs-19.25 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 fi ### Put moves and renames here. (cd lisp; mv diary.el diary-lib.el; rm gosmacs.el) (cd man; rm undo.texi) (cd src/m; rm dos386.h) (cd src/s; rm convexos.h) (cd lisp sed -e 's/(if (null ispell-menu-map) (let ((dicts (reverse (cons (cons "default" nil) ispell-dictionary-alist))) name) (setq ispell-menu-map (make-sparse-keymap "Spell")) (while dicts (setq name (car (car dicts)) dicts (cdr dicts)) (if (stringp name) (define-key ispell-menu-map (vector (intern name)) (cons (concat "Select " (capitalize name)) (list (quote lambda) nil (quote (interactive)) (list (quote ispell-change-dictionary) name)))))) (defalias (quote ispell-menu-map) ispell-menu-map) (define-key ispell-menu-map \[ispell-change-dictionary] (quote ("Change Dictionary" \. ispell-change-dictionary))) (define-key ispell-menu-map \[ispell-kill-ispell] (quote ("Kill Process" \. ispell-kill-ispell))) (define-key ispell-menu-map \[ispell-pdict-save] (quote ("Save Dictionary" lambda nil (interactive) (ispell-pdict-save t)))) (define-key ispell-menu-map \[ispell-complete-word] (quote ("Complete Word" \. ispell-complete-word))) (define-key ispell-menu-map \[ispell-complete-word-interior-frag] (quote ("Complete Word Frag" \. ispell-complete-word-interior-frag))) (define-key ispell-menu-map \[ispell-continue] (quote ("Continue Check" \. ispell-continue))) (define-key ispell-menu-map \[ispell-region] (quote ("Check Region" \. ispell-region))) (define-key ispell-menu-map \[ispell-word] (quote ("Check Word" \. ispell-word))) (define-key ispell-menu-map \[ispell-buffer] (quote ("Check Buffer" \. ispell-buffer))) (define-key ispell-menu-map \[ispell-message] (quote ("Check Message" \. ispell-message))) (define-key ispell-menu-map \[ispell-help] (quote ("Help" lambda nil (interactive) (describe-function (quote ispell-help)))))))/losing-line/' < loaddefs.el > foo mv foo loaddefs.el) rm configure patch -p1 << \end-of-emacs-patch-kit diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/BUGS emacs-19.26/BUGS *** emacs-19.25/BUGS --- emacs-19.26/BUGS Fri Jun 17 11:53:08 1994 *************** *** 0 **** --- 1,24 ---- + If you think you may have found a bug in GNU Emacs, please + read the Bugs section of the Emacs manual for advice on + (1) how to tell when to report a bug, and + (2) how to write a useful bug report and what information + it needs to have. + + There are three ways to read the Bugs section. + + (1) In a printed copy of the Emacs manual. + You can order one from the Free Software Foundation; + see the file etc/ORDERS. But if you don't have a copy on + hand and you think you have found a bug, you shouldn't wait + to get a printed manual; you should read the section right away + as described below. + + (2) With Info. Start Emacs, do C-h i to enter Info, + then m Emacs RET to get to the Emacs manual, then m Bugs RET + to get to the section on bugs. Or use standalone Info in + a like manner. (Standalone Info is part of the Texinfo distribution, + not part of the Emacs distribution.) + + (3) By hand. Do + cat info/emacs* | more "+/^File: emacs, Node: Bugs," + diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/ChangeLog emacs-19.26/ChangeLog *** emacs-19.25/ChangeLog Mon May 30 07:55:20 1994 --- emacs-19.26/ChangeLog Wed Sep 7 03:57:13 1994 *************** *** 1,2 **** --- 1,122 ---- + Wed Sep 7 03:53:50 1994 Richard Stallman + + * Version 19.26 released. + + Sun Sep 4 03:02:15 1994 Richard Stallman + + * configure.in: Check for lrand48, not rand48. + + Sat Sep 3 18:44:55 1994 Richard Stallman + + * configure.in (powerpc-ibm-aix3.1*, powerpc-ibm-aix3.2.5) + (powerpc-ibm-aix*): New aliases. + + Sun Aug 21 14:02:00 1994 Richard Stallman + + * make-dist (src/m, src/s): Put *.inp in distribution. + + Fri Aug 19 20:01:09 1994 Richard Stallman + + * configure.in: Accept i586 and i486 along with i386. + + Mon Aug 15 05:18:12 1994 Richard Stallman + + * configure.in: Do compute unexec, LIBX, system_malloc, etc + even if CPP env var was set by the user. + + * configure.in (i[34]86-*-*): For SCO 3.2v4, fix NON_GNU_CPP value. + + Sun Aug 14 00:10:08 1994 Jonathan I. Kamens (jik@gza-client1.aktis.com) + + * Makefile.in: Uninstall "$(EMACS)", not "emacs". + + Sat Aug 13 16:34:59 1994 Richard Stallman + + * configure.in (i[34]86-*-*): For SCO 3.2v4, set NON_GNU_CPP. + + Tue Aug 9 23:20:18 1994 Richard Stallman + + * configure.in: Check more specifically for i*86-sun-sunos. + + Wed Aug 3 21:53:58 PDT 1994 Caveh Jalali (caveh@eng.sun.com) + + * configure.in: Handle solaris 2.4. + + Wed Jul 27 13:34:18 1994 Richard Stallman + + * configure.in (rand48): Check for it. + + Tue Jul 26 15:52:58 1994 Richard Stallman + + * make-dist: Update the info files. + + Mon Jul 25 16:35:16 1994 Richard Stallman + + * configure.in: Make "checking..." messages' style consistent. + (HAVE_H_ERRNO): New test. + + Sun Jul 24 16:18:09 1994 Richard Stallman + + * configure.in (i860-*-sysv4*): Set NON_GNU_CC and NON_GNU_CPP. + + Tue Jul 12 00:03:39 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in (CFLAGS): If the envvar was specified, use that. + And set REAL_CFLAGS from it too. + + Mon Jul 11 16:28:51 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * make-dist: Update finder-inf.el. + + Thu Jul 7 12:57:42 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * make-dist (msdos): Include sed4.inp in dist. + + * Makefile.in (libsrc_libs): Var deleted. + + Wed Jul 6 22:39:26 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile.in (mkdir, removenullpaths): Put g in sed replace commands. + + Sun Jun 26 12:26:40 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in (mips-sony-newsos4*): New alias. + + Thu Jun 23 15:21:14 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in (*-convex-bsd*): Set NON_GNU_CPP. + (*-convex-convexos*): Accept this as alias. + + Sun Jun 19 11:40:01 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in: Get CFLAGS both with and without THIS_IS_CONFIGURE, + for two different uses. + + Wed Jun 15 22:30:18 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in: Define THIS_IS_CONFIGURE when extracting CFLAGS etc. + + Tue Jun 14 10:51:06 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * make-dist: Put ./BUGS into the distrib. + + Mon Jun 13 17:12:32 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in: Handle 386 running Solaris 2. + + Mon Jun 6 04:46:27 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in (mips-siemens-sysv*): Use cpp, not cc -E. + + Sun Jun 5 06:44:16 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * configure.in (mips-sony-newsos*): Use news-risc.h. + + * configure.in: Accept bsdi as opsys, like bsd386. + + Wed Jun 1 20:03:31 1994 Morten Welinder (terra@diku.dk) + + * config.bat (src/paths.h): Use sed script msdos/sed4.inp. + Mon May 30 04:33:36 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/INSTALL emacs-19.26/INSTALL *** emacs-19.25/INSTALL Sun May 22 15:56:27 1994 --- emacs-19.26/INSTALL Mon Jun 13 11:30:51 1994 *************** *** 71,78 **** variables in `./Makefile' so that Emacs will expect to find its data files (lisp libraries, runnable programs, and the like) in the same ! locations they occupy while Emacs builds. This means that you don't ! have to install Emacs in order to run it; it uses its data files as ! they were unpacked. The `--with-gcc' option specifies that the build process should compile Emacs using GCC. If you don't want to use GCC, specify --- 71,83 ---- variables in `./Makefile' so that Emacs will expect to find its data files (lisp libraries, runnable programs, and the like) in the same ! locations they occupy while Emacs builds. If you use `--run-in-place' ! then you don't need to do `make install'. + `--run-in-place' is pretty much obsolete now. If you put the Emacs + executable in a subdirectory named src, which has siblings named lisp, + lib-src, etc, info and so on, Emacs automatically uses those sibling + directories if the standard installation directory names don't contain + what Emacs needs. + The `--with-gcc' option specifies that the build process should compile Emacs using GCC. If you don't want to use GCC, specify *************** *** 179,183 **** `/usr/local/bin' holds the executable programs users normally run - ! `emacs', `etags', `ctags', `b2m', and `emacsclient'. `/usr/local/lib/emacs/VERSION/lisp' holds the Emacs Lisp library; --- 184,189 ---- `/usr/local/bin' holds the executable programs users normally run - ! `emacs', `etags', `ctags', `b2m', `emacsclient', ! and `rcs-checkin'. `/usr/local/lib/emacs/VERSION/lisp' holds the Emacs Lisp library; *************** *** 384,388 **** CONFIGURATION BY HAND ! Running the `configure' program performs the following steps. 1) Copy `./src/config.h.in' to `./src/config.h'. --- 390,395 ---- CONFIGURATION BY HAND ! Instead of running the `configure' program, you have to perform the ! following steps. 1) Copy `./src/config.h.in' to `./src/config.h'. *************** *** 401,416 **** redefine parameters used in `./lib-src/movemail.c'. ! 3) If you're going to use the make utility to build Emacs, you will ! still need to run `configure' first, giving theappropriate values for ! the variables in the sections entitled "Things `configure' Might Edit" ! and "Where To Install Things." Note that you may only need to change ! the variables `prefix' and `exec_prefix', since the rest of the ! variables have reasonable defaults based on them. For each Makefile ! variable of this type, there is a corresponding configure option; for ! example, to change the location of the lock directory, you might use ! ! ./configure --lockdir=/nfs/emacslock ! 4) If you're going to use the build-install script to build Emacs, copy `./build-ins.in' to `./build-install', and edit the definitions found at the top of the script. --- 408,422 ---- redefine parameters used in `./lib-src/movemail.c'. ! 3) Create src/Makefile and lib-src/Makefile from the corresponding ! `Makefile.in.in' files. First copy `Makefile.in.in' to `Makefile.in', ! then edit in appropriate substituions for the @...@ constructs, ! and then copy the shell commands near the end of `configure' ! that run cpp to construct `Makefile'. ! ! 4) Create `Makefile' files in various other directories ! from the corresponding `Makefile.in' files. This isn't so hard, ! just a matter of substitution. ! 5) If you're going to use the build-install script to build Emacs, copy `./build-ins.in' to `./build-install', and edit the definitions found at the top of the script. *************** *** 433,447 **** the paths to the values specified in `./Makefile'. ! 2) Cd to `./lib-src' and run `make'. This creates executables named ! `ctags' and `etags' and `wakeup' and `make-docfile' and `digest-doc' ! and `test-distrib'. And others. ! 3) Cd to `./src' and Run `make'. This refers to files in the `./lisp' ! and `./lib-src' subdirectories using names `../lisp' and `../lib-src'. This creates a file `./src/emacs' which is the runnable Emacs, ! assigning it a new build version number by incrementing the build ! version stored in `./lisp/version.el'. It also creates a file in `./etc' whose name is `DOC' followed by the --- 439,453 ---- the paths to the values specified in `./Makefile'. ! 2) Go to directory `./lib-src' and run `make'. This creates ! executables named `ctags' and `etags' and `wakeup' and `make-docfile' ! and `digest-doc' and `test-distrib'. And others. ! 3) Go to directory `./src' and Run `make'. This refers to files in ! the `./lisp' and `./lib-src' subdirectories using names `../lisp' and `../lib-src'. This creates a file `./src/emacs' which is the runnable Emacs, ! which has another name that contains a version number. ! Each time you do this, that version number increments in the last place. It also creates a file in `./etc' whose name is `DOC' followed by the *************** *** 464,470 **** Strictly speaking, not all of the executables in `./lib-src' need be copied. - The programs `cvtmail', `emacsserver', `fakemail', `hexl', ! `movemail', `timer', `vcdiff', `wakeup', and `yow' are used by ! Emacs; they do need to be copied. ! - The programs `etags', `ctags', `emacsclient', `b2m', and `rcs2log' are intended to be run by users; they are handled below. - The programs `make-docfile', `make-path', and `test-distrib' were --- 470,476 ---- Strictly speaking, not all of the executables in `./lib-src' need be copied. - The programs `cvtmail', `emacsserver', `fakemail', `hexl', ! `movemail', `profile', `rcs2log', `timer', `vcdiff', `wakeup', ! and `yow' are used by Emacs; they do need to be copied. ! - The programs `etags', `ctags', `emacsclient', `b2m', and `rcs-checkin' are intended to be run by users; they are handled below. - The programs `make-docfile', `make-path', and `test-distrib' were *************** *** 492,496 **** 5) Copy the programs `b2m', `emacsclient', `ctags', `etags', and ! `rcs2log' from `./lib-src' to `/usr/local/bin'. These programs are intended for users to run. --- 498,502 ---- 5) Copy the programs `b2m', `emacsclient', `ctags', `etags', and ! `rcs-checkin' from `./lib-src' to `/usr/local/bin'. These programs are intended for users to run. *************** *** 499,504 **** 7) The files in the `./src' subdirectory, except for `emacs', are not ! used by Emacs once it is built. The source would be handy for ! debugging. --- 505,510 ---- 7) The files in the `./src' subdirectory, except for `emacs', are not ! used by Emacs once it is built. However, it is very desirable to keep ! the source on line for debugging. diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/Makefile.in emacs-19.26/Makefile.in *** emacs-19.25/Makefile.in Fri May 27 03:46:44 1994 --- emacs-19.26/Makefile.in Sun Aug 14 02:58:01 1994 *************** *** 60,66 **** configuration=@configuration@ - ### Libraries which should be edited into lib-src/Makefile. - libsrc_libs=@libsrc_libs@ - # ==================== Where To Install Things ==================== --- 60,63 ---- *************** *** 139,143 **** # compiling Emacs, to help Emacs find its lisp files # before they've been installed in their final location. ! # It's usually identical to lisppath, except that the # entry for the directory containing the installed lisp # files has been replaced with ../lisp. This should be a --- 136,141 ---- # compiling Emacs, to help Emacs find its lisp files # before they've been installed in their final location. ! # It's usually identical to lisppath, except that ! # it does not include locallisppath, and the # entry for the directory containing the installed lisp # files has been replaced with ../lisp. This should be a *************** *** 198,202 **** all: paths-force ${SUBDIR} ! removenullpaths=sed -e 's/^://' -e 's/:$$//' -e 's/::/:/' # Note that sed is not in /bin on 386bsd. --- 196,200 ---- all: paths-force ${SUBDIR} ! removenullpaths=sed -e 's/^://g' -e 's/:$$//g' -e 's/::/:/g' # Note that sed is not in /bin on 386bsd. *************** *** 353,357 **** ./lib-src/make-path ${COPYDESTS} ${lockdir} ${infodir} ${mandir} \ ${bindir} ${datadir} ${docdir} ${libdir} \ ! `echo ${locallisppath} | sed 's/:/ /'` -chmod 777 ${lockdir} --- 351,355 ---- ./lib-src/make-path ${COPYDESTS} ${lockdir} ${infodir} ${mandir} \ ${bindir} ${datadir} ${docdir} ${libdir} \ ! `echo ${locallisppath} | sed 's/:/ /g'` -chmod 777 ${lockdir} *************** *** 381,385 **** (cd ${infodir}; rm -f cl* emacs* forms* info* vip*) (cd ${mandir}; rm -f emacs.1 etags.1 ctags.1) ! (cd ${bindir}; rm -f emacs-${version} emacs) --- 379,383 ---- (cd ${infodir}; rm -f cl* emacs* forms* info* vip*) (cd ${mandir}; rm -f emacs.1 etags.1 ctags.1) ! (cd ${bindir}; rm -f emacs-${version} $(EMACS)) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/PROBLEMS emacs-19.26/PROBLEMS *** emacs-19.25/PROBLEMS Sat May 28 14:28:04 1994 --- emacs-19.26/PROBLEMS Mon Aug 29 23:48:41 1994 *************** *** 2,5 **** --- 2,113 ---- in compiling, installing and running GNU Emacs. + * On HPUX 9.05 and 9.06, C-c and C-z are not turned off in the terminal driver. + + This seems to be due to a bug in HPUX. A workaround is to start Emacs + after first setting the "susp" (suspend job) and "dsusp" (delayed + suspend job) control characters temporarily to a character that you + are not likely to type (such as C-_), and set them back after Emacs + exits. The following script should do it: + + #!/bin/sh + stty susp '^_' dsusp '^_' + emacs ${1+"$@"} + stty susp '^Z' dsusp '^Z' + + * Unusable default font on SCO 3.2v4. + + The Open Desktop environment comes with default X resource settings + that tell Emacs to use a variable-width font. Emacs cannot use such + fonts, so it does not work. + + This is caused by the file /usr/lib/X11/app-defaults/ScoTerm, which is + the application-specific resource file for the `scoterm' terminal + emulator program. It contains several extremely general X resources + that affect other programs besides `scoterm'. In particular, these + resources affect Emacs also: + + *Font: -*-helvetica-medium-r-*--12-*-p-* + *Background: scoBackground + *Foreground: scoForeground + + The best solution is to create an application-specific resource file for + Emacs, /usr/lib/X11/app-defaults/Emacs, with the following contents: + + Emacs*Font: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1 + Emacs*Background: white + Emacs*Foreground: black + + (or whatever other defaults you prefer). + + These resource files are not normally shared across a network of SCO + machines; you must create the file on each machine individually. + + * rcs2log gives you the awk error message "too many fields". + + This is due to an arbitrary limit in certain versions of awk. + The solution is to use gawk (GNU awk). + + * Emacs is slow using X11R5 on HP/UX. + + This happens if you use the MIT versions of the X libraries--it + doesn't run as fast as HP's version. People sometimes use the version + because they see the HP version doesn't have the libraries libXaw.a, + libXmu.a, libXext.a and others. HP/UX normally doesn't come with + those libraries installed. To get good performance, you need to + install them and rebuild Emacs. + + * Loading fonts is very slow. + + You might be getting scalable fonts instead of precomputed bitmaps. + Known scalable font directories are "Type1" and "Speedo". A font + directory contains scalable fonts if it contains the file + "fonts.scale". + + If this is so, re-order your X windows font path to put the scalable + font directories last. See the documentatoin of `xset' for details. + + With some X servers, it may be necessary to take the scalable font + directories out of your path entirely, at least for Emacs 19.26. + Changes in the future may make this unnecessary. + + * On AIX 3.2.4, releasing Ctrl/Act key has no effect, if Shift is down. + + Due to a feature of AIX, pressing or releasing the Ctrl/Act key is + ignored when the Shift, Alt or AltGr keys are held down. This can + lead to the keyboard being "control-locked"--ordinary letters are + treated as control characters. + + You can get out of this "control-locked" state by pressing and + releasing Ctrl/Act while not pressing or holding any other keys. + + * display-time causes kernel problems on ISC systems. + + Under Interactive Unix versions 3.0.1 and 4.0 (and probably other + versions), display-time causes the loss of large numbers of STREVENT + cells. Eventually the kernel's supply of these cells is exhausted. + This makes emacs and the whole system run slow, and can make other + processes die, in particular pcnfsd. + + Other emacs functions that communicate with remote processes may have + the same problem. Display-time seems to be far the worst. + + The only known fix: Don't run display-time. + + * On Solaris, C-x doesn't get through to Emacs when you use the console. + + This is a Solaris feature (at least on Intel x86 cpus). Type C-r + C-r C-t, to toggle whether C-x gets through to Emacs. + + * Error message `Symbol's value as variable is void: x', followed by + segmentation fault and core dump. + + This has been tracked to a bug in tar! People report that tar erroneously + added a line like this at the beginning of files of Lisp code: + + x FILENAME, N bytes, B tape blocks + + If your tar has this problem, install GNU tar--if you can manage to + untar it :-). + * Link failure when using acc on a Sun. *************** *** 31,34 **** --- 139,146 ---- toolkit.) + If you get the additional error that the linker could not find + lib_version.o, try extracting it fromcontained in + X11/usr/lib/X11/libvim.a in X11R4, then use it in the link. + * Error messages `Wrong number of arguments: #, 5' *************** *** 79,82 **** --- 191,199 ---- Newer Linux versions don't have this problem. + * On AIX, the Ctrl/Act key interacts strangely with Shift. + + This is an AIX feature: Ctrl/Act with Shift is used for switching + virtual terminals. + * src/Makefile and lib-src/Makefile are truncated--most of the file missing. *************** *** 105,108 **** --- 222,229 ---- individually as well as to Emacs frames. If that is not what you want, rewrite the resource. + + To check thoroughly for such resource specifications, use `xrdb + -query' to see what resources the X server records, and also look at + the user's ~/.Xdefaults and ~/.Xdefaults-* files. * --with-x-toolkit version crashes when used with shared libraries. diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/README emacs-19.26/README *** emacs-19.25/README Mon May 30 07:55:56 1994 --- emacs-19.26/README Wed Sep 7 06:33:04 1994 *************** *** 1,3 **** ! This directory tree holds version 19.25 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. --- 1,3 ---- ! This directory tree holds version 19.26 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor. *************** *** 27,32 **** Reports of bugs in Emacs should be sent to the mailing list ! bug-gnu-emacs@prep.ai.mit.edu. See the "Bugs" node of the info tree ! for more information on how to report bugs. See `etc/MAILINGLISTS' for more information on mailing lists relating to GNU products. --- 27,34 ---- Reports of bugs in Emacs should be sent to the mailing list ! bug-gnu-emacs@prep.ai.mit.edu. See the "Bugs" section of the Emacs ! manual for more information on how to report bugs. (The file `BUGS' ! in this directory explains how you can find and read that section ! using the Info files that come with Emacs.) See `etc/MAILINGLISTS' for more information on mailing lists relating to GNU products. diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/config.bat emacs-19.26/config.bat *** emacs-19.25/config.bat Sun May 22 15:04:41 1994 --- emacs-19.26/config.bat Tue Jun 7 11:16:18 1994 *************** *** 83,87 **** rem Create "paths.h" rm -f paths.h ! sed -e "s!/lib/emacs!!" -e "s!/usr/local!c:/emacs!" -e "s!/data!/etc!" <%PATHSH% >paths.h rem Create "config.h" --- 83,87 ---- rem Create "paths.h" rm -f paths.h ! sed -f ../msdos/sed4.inp <%PATHSH% >paths.h rem Create "config.h" diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/config.guess emacs-19.26/config.guess *** emacs-19.25/config.guess Mon May 30 07:55:55 1994 --- emacs-19.26/config.guess Wed Sep 7 06:33:03 1994 *************** *** 17,20 **** --- 17,22 ---- # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + # Written by Per Bothner . + # The master version of this file is at the FSF in /home/gd/gnu/lib. # # This script attempts to guess a canonical system name similar to *************** *** 29,32 **** --- 31,40 ---- # + # This is needed to find uname on a Pyramid OSx when run in the BSD universe. + # (ghazi@noc.rutgers.edu 8/24/94.) + if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH + fi + UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown *************** *** 39,53 **** case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ! alpha:OSF1:1.*:*) # 1.2 uses "1.2" for uname -r. echo alpha-dec-osf${UNAME_RELEASE} exit 0 ;; - alpha:OSF1:V1.*:*) - # 1.3 uses "V1.3" for uname -r. - echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'` - exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; sun4*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` --- 47,68 ---- case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ! alpha:OSF1:V*:*) ! # After 1.2, OSF1 uses "V1.3" for uname -r. ! echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'` ! exit 0 ;; ! alpha:OSF1:*:*) # 1.2 uses "1.2" for uname -r. echo alpha-dec-osf${UNAME_RELEASE} exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; + Pyramid*:OSx*:*:*) + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; sun4*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` *************** *** 74,77 **** --- 89,95 ---- echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 *************** *** 81,86 **** exit 0 ;; AViiON:dgux:*:*) ! echo m88k-dg-dgux${UNAME_RELEASE} exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 --- 99,112 ---- exit 0 ;; AViiON:dgux:*:*) ! if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ ! -o ${TARGET_BINARY_INTERFACE}x = x ] ; then ! echo m88k-dg-dgux${UNAME_RELEASE} ! else ! echo m88k-dg-dguxbcs${UNAME_RELEASE} ! fi exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 *************** *** 101,104 **** --- 127,143 ---- *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + sed 's/^ //' << EOF >dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } + EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then *************** *** 123,127 **** echo m68k-hp-bsd4.4 exit 0 ;; ! 9000/[3478]??:HP-UX:*:* | 9000/8?7:HP-UX:*:* ) case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; --- 162,166 ---- echo m68k-hp-bsd4.4 exit 0 ;; ! 9000/[3478]??:HP-UX:*:*) case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; *************** *** 132,136 **** case ${UNAME_RELEASE} in *.B7.* ) HPUX_REV=7 ;; ! *.B8.* | *.08.* ) HPUX_REV=8 ;; *.09.* ) HPUX_REV=9 ;; esac --- 171,175 ---- case ${UNAME_RELEASE} in *.B7.* ) HPUX_REV=7 ;; ! *.[B0]8.* ) HPUX_REV=8 ;; *.09.* ) HPUX_REV=9 ;; esac *************** *** 144,150 **** { long cpu = sysconf (_SC_CPU_VERSION); ! if (CPU_IS_HP_MC68K (cpu)) ! puts ("m68k-hitachi-hiuxwe2"); ! else if (CPU_IS_PA_RISC (cpu)) { switch (cpu) --- 183,190 ---- { long cpu = sysconf (_SC_CPU_VERSION); ! /* The order matters, because CPU_IS_HP_MC68K erroneously returns ! true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct ! results, however. */ ! if (CPU_IS_PA_RISC (cpu)) { switch (cpu) *************** *** 156,159 **** --- 196,201 ---- } } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); *************** *** 170,173 **** --- 212,221 ---- echo hppa1.0-hp-bsd exit 0 ;; + hp7??:OSF1:*:* | hp8?7:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1:*) echo c1-convex-bsd *************** *** 188,198 **** echo m68k-hp-netbsd${UNAME_RELEASE} exit 0 ;; ! i[34]86:FreeBSD:*:*) ! echo ${UNAME_MACHINE}-unknown-freebsd exit 0 ;; ! i[34]86:NetBSD:*:*) ! echo ${UNAME_MACHINE}-unknown-netbsd${UNAME_RELEASE} exit 0 ;; ! i[34]86:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux exit 0 ;; --- 236,249 ---- echo m68k-hp-netbsd${UNAME_RELEASE} exit 0 ;; ! i[34]86:BSD/386:*:*) ! echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} ! exit 0 ;; ! *:FreeBSD:*:*) ! echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/(.*//'` exit 0 ;; ! *:NetBSD:*:*) ! echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; ! *:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux exit 0 ;; *************** *** 209,212 **** --- 260,266 ---- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL + elif test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" *************** *** 219,228 **** M680[234]0:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; ! 3[34]??:*:4.0:* | 3[34]??,3[34]??:*:4.0:*) uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m680[234]0:LynxOS:2.2*:*) echo m68k-lynx-lynxos${UNAME_RELEASE} exit 0 ;; i[34]86:LynxOS:2.2*:*) echo i386-lynx-lynxos${UNAME_RELEASE} --- 288,303 ---- M680[234]0:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; ! 3[34]??:*:4.0:*) uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; + 33[56]0,3???:*:4.0:*) + uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3 && exit 0 ;; m680[234]0:LynxOS:2.2*:*) echo m68k-lynx-lynxos${UNAME_RELEASE} exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; i[34]86:LynxOS:2.2*:*) echo i386-lynx-lynxos${UNAME_RELEASE} *************** *** 231,234 **** --- 306,323 ---- echo sparc-lynx-lynxos${UNAME_RELEASE} exit 0 ;; + rs6000:LynxOS:2.2*:*) + echo rs6000-lynx-lynxos${UNAME_RELEASE} + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; esac *************** *** 237,241 **** cat >dummy.c <dummy.c </dev/null`; ! if (version==2) ! { ! printf("%s-next-ns2\n", __ARCHITECTURE__); ! exit(0); ! } ! else ! { ! printf("%s-next-ns3\n", __ARCHITECTURE__); ! exit(0); ! } #endif --- 352,357 ---- int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; ! printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3"); ! exit (0); #endif *************** *** 277,286 **** #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) ! printf("ns32k-encore-sysv\n"); exit(0); #else #if defined (CMU) ! printf("ns32k-encore-mach\n"); exit(0); #else ! printf("ns32k-encore-bsd\n"); exit(0); #endif #endif --- 358,367 ---- #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) ! printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) ! printf ("ns32k-encore-mach\n"); exit (0); #else ! printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif *************** *** 287,313 **** #endif ! #if defined(__386BSD__) || (defined(__bsdi__) && defined(__i386__)) ! printf("i386-unknown-bsd\n"); exit(0); #endif ! #if defined(sequent) ! #if defined(i386) ! printf("i386-sequent-dynix\n"); exit(0); #endif #if defined (ns32000) ! printf("ns32k-sequent-dynix\n"); exit(0); #endif #endif ! #if defined(_SEQUENT_) ! printf("i386-sequent-ptx\n"); exit(0); #endif ! #if defined(vax) ! #if !defined(ultrix) ! printf("vax-dec-bsd\n"); exit(0); #else ! printf("vax-dec-ultrix\n"); exit(0); #endif #endif --- 368,398 ---- #endif ! #if defined (__386BSD__) ! printf ("i386-unknown-bsd\n"); exit (0); #endif ! #if defined (sequent) ! #if defined (i386) ! printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) ! printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif ! #if defined (_SEQUENT_) ! printf ("i386-sequent-ptx\n"); exit (0); #endif ! #if defined (vax) ! #if !defined (ultrix) ! printf ("vax-dec-bsd\n"); exit (0); #else ! printf ("vax-dec-ultrix\n"); exit (0); ! #endif #endif + + #if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); #endif diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/config.sub emacs-19.26/config.sub *** emacs-19.25/config.sub Mon May 30 07:55:54 1994 --- emacs-19.26/config.sub Wed Sep 7 06:33:02 1994 *************** *** 65,69 **** -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ ! -unicom* | -ibm* | -next* | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ --- 65,69 ---- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ ! -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ *************** *** 113,117 **** | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \ | alpha | we32k | ns16k | clipper | sparclite | i370 | sh \ ! | powerpc) basic_machine=$basic_machine-unknown ;; --- 113,117 ---- | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \ | alpha | we32k | ns16k | clipper | sparclite | i370 | sh \ ! | powerpc | sparc64 | 1750a) basic_machine=$basic_machine-unknown ;; *************** *** 128,132 **** | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \ | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \ ! | sh-* | powerpc-*) ;; # Recognize the various machine names and aliases which stand --- 128,132 ---- | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \ | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \ ! | sh-* | powerpc-* | sparc64-*) ;; # Recognize the various machine names and aliases which stand *************** *** 152,156 **** os=-sysv ;; ! amiga) basic_machine=m68k-cbm ;; --- 152,156 ---- os=-sysv ;; ! amiga | amiga-*) basic_machine=m68k-cbm ;; *************** *** 202,206 **** basic_machine=m68k-crds ;; ! decstation | decstation-3100 | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; --- 202,209 ---- basic_machine=m68k-crds ;; ! da30 | da30-*) ! basic_machine=m68k-da30 ! ;; ! decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; *************** *** 254,257 **** --- 257,263 ---- os=-sysv3 ;; + hp300-*) + basic_machine=m68k-hp + ;; hp300bsd) basic_machine=m68k-hp *************** *** 339,349 **** os=-newsos ;; ! next) basic_machine=m68k-next case $os in -ns2*) ;; *) ! os=-ns3 ;; esac --- 345,358 ---- os=-newsos ;; ! next | m*-next ) basic_machine=m68k-next case $os in + -nextstep* ) + ;; -ns2*) + os=-nextstep2 ;; *) ! os=-nextstep3 ;; esac *************** *** 378,384 **** basic_machine=m68k-tti ;; ! pc532) basic_machine=ns32k-pc532 ;; pn) basic_machine=pn-gould --- 387,398 ---- basic_machine=m68k-tti ;; ! pc532 | pc532-*) basic_machine=ns32k-pc532 ;; + pentium-*) + # We will change tis to say i586 once there has been + # time for various packages to start to recognize that. + basic_machine=i486-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; pn) basic_machine=pn-gould *************** *** 428,432 **** os=-sunos4 ;; ! sun3) basic_machine=m68k-sun ;; --- 442,446 ---- os=-sunos4 ;; ! sun3 | sun3-*) basic_machine=m68k-sun ;; *************** *** 546,550 **** | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \ ! | -lynxos* | -bosx* | -ns* | -cxux*) ;; -sunos5*) --- 560,564 ---- | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \ ! | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf*) ;; -sunos5*) *************** *** 657,660 **** --- 671,677 ---- os=-sysv3 ;; + m68k-ccur) + os=-rtu + ;; m88k-omron*) os=-luna *************** *** 673,677 **** ;; *-next) ! os=-bsd ;; i[34]86-*) --- 690,694 ---- ;; *-next) ! os=-nextstep3 ;; i[34]86-*) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/configure emacs-19.26/configure *** emacs-19.25/configure --- emacs-19.26/configure Sun Sep 4 23:17:30 1994 *************** *** 0 **** --- 1,3527 ---- + #!/bin/sh + #### Configuration script for GNU Emacs + #### Copyright (C) 1992, 1994 Free Software Foundation, Inc. + #### This script requires autoconf version 1.9 or later. + + ### Don't edit this script! + ### This script was automatically generated by the `autoconf' program + ### from the file `./configure.in'. + ### To rebuild it, execute the command + ### autoconf + ### in the this directory. + + ### This file is part of GNU Emacs. + + ### GNU Emacs is free software; you can redistribute it and/or modify + ### it under the terms of the GNU General Public License as published by + ### the Free Software Foundation; either version 2, or (at your option) + ### any later version. + + ### GNU Emacs is distributed in the hope that it will be useful, + ### but WITHOUT ANY WARRANTY; without even the implied warranty of + ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ### GNU General Public License for more details. + + ### You should have received a copy of the GNU General Public License + ### along with GNU Emacs; see the file COPYING. If not, write to + ### the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + + ### Since Emacs has configuration requirements that autoconf can't + ### meet, this file is an unholy marriage of custom-baked + ### configuration code and autoconf macros. + ### + ### We use the m4 quoting characters [ ] (as established by the + ### autoconf system) to include large sections of raw sewage - Oops, I + ### mean, shell code - in the final configuration script. + ### + ### Usage: configure config_name + ### + ### If configure succeeds, it leaves its status in config.status. + ### If configure fails after disturbing the status quo, + ### config.status is removed. + + ### Remove any more than one leading "." element from the path name. + ### If we don't remove them, then another "./" will be prepended to + ### the file name each time we use config.status, and the program name + ### will get larger and larger. This wouldn't be a problem, except + ### that since progname gets recorded in all the Makefiles this script + ### produces, move-if-change thinks they're different when they're + ### not. + ### + ### It would be nice if we could put the ./ in a \( \) group and then + ### apply the * operator to that, so we remove as many leading ./././'s + ### as are present, but some seds (like Ultrix's sed) don't allow you to + ### apply * to a \( \) group. Bleah. + progname="`echo $0 | sed 's:^\./\./:\./:'`" + + + ### Establish some default values. + run_in_place= + single_tree= + prefix='/usr/local' + exec_prefix='${prefix}' + bindir='${exec_prefix}/bin' + datadir='${prefix}/lib' + statedir='${prefix}/lib' + libdir='${exec_prefix}/lib' + mandir='${prefix}/man/man1' + infodir='${prefix}/info' + lispdir='${datadir}/emacs/${version}/lisp' + locallisppath='${datadir}/emacs/site-lisp' + lisppath='${locallisppath}:${lispdir}' + etcdir='${datadir}/emacs/${version}/etc' + lockdir='${statedir}/emacs/lock' + archlibdir='${libdir}/emacs/${version}/${configuration}' + docdir='${datadir}/emacs/${version}/etc' + + # On Sun systems, people sometimes set up the variable CPP + # with a value that is a directory, not an executable at all. + # Detect that case, and ignore that value. + if [ "x$CPP" != x ] && [ -d "$CPP" ]; + then + CPP= + fi + + # We cannot use this variable in the case statement below, because many + # /bin/sh's have broken semantics for "case". Unfortunately, you must + # actually edit the clause itself. + # path_options="prefix | exec_prefix | bindir | libdir | etcdir | datadir" + # path_options="$path_options | archlibdir | statedir | mandir | infodir" + # path_options="$path_options | lispdir | lockdir | lisppath | locallisppath" + + #### Usage messages. + + short_usage="Usage: ${progname} CONFIGURATION [-OPTION[=VALUE] ...] + + Set compilation and installation parameters for GNU Emacs, and report. + CONFIGURATION specifies the machine and operating system to build for. + --with-x Support the X Window System. + --with-x=no Don't support X. + --with-x-toolkit Use an X toolkit. + --with-x-toolkit=no Don't use an X toolkit. + --with-gcc Use GCC to compile Emacs. + --with-gcc=no Don't use GCC to compile Emacs. + --x-includes=DIR Search for X header files in DIR. + --x-libraries=DIR Search for X libraries in DIR. + --run-in-place Use libraries and data files directly out of the + source tree. + --single-tree=DIR Has the effect of creating a directory tree at DIR + which looks like: + .../DIR/bin/CONFIGNAME (emacs, etags, etc.) + .../DIR/bin/CONFIGNAME/etc (movemail, etc.) + .../DIR/common/lisp (emacs' lisp files) + .../DIR/common/site-lisp (local lisp files) + .../DIR/common/lib (DOC, TUTORIAL, etc.) + .../DIR/common/lock (lockfiles) + --srcdir=DIR Look for the Emacs source files in DIR. + --prefix=DIR Install files below DIR. Defaults to \`${prefix}'. + + You may also specify any of the \`path' variables found in Makefile.in, + including --bindir, --libdir, --etcdir, --infodir, and so on. This allows + you to override a single default location when configuring. + + If successful, ${progname} leaves its status in config.status. If + unsuccessful after disturbing the status quo, it removes config.status." + + + #### Option processing. + + ### Record all the arguments, so we can save them in config.status. + arguments="$@" + + ### Shell Magic: Quote the quoted arguments in ARGUMENTS. At a later date, + ### in order to get the arguments back in $@, we have to do an + ### `eval set x "$quoted_arguments"; shift'. + quoted_arguments= + for i in "$@"; do + quoted_arguments="$quoted_arguments '$i'" + done + + ### Don't use shift -- that destroys the argument list, which autoconf needs + ### to produce config.status. It turns out that "set - ${arguments}" doesn't + ### work portably. + ### However, it also turns out that many shells cannot expand ${10} at all. + ### So using an index variable doesn't work either. It is possible to use + ### some shell magic to make 'set x "$arguments"; shift' work portably. + while [ $# != 0 ]; do + arg="$1"; shift + case "${arg}" in + + ## Anything starting with a hyphen we assume is an option. + -* ) + ## Separate the switch name from the value it's being given. + case "${arg}" in + -*=*) + opt=`echo ${arg} | sed 's:^-*\([^=]*\)=.*$:\1:'` + val=`echo ${arg} | sed 's:^-*[^=]*=\(.*\)$:\1:'` + valomitted=no + ;; + -*) + ## If FOO is a boolean argument, --FOO is equivalent to + ## --FOO=yes. Otherwise, the value comes from the next + ## argument - see below. + opt=`echo ${arg} | sed 's:^-*\(.*\)$:\1:'` + val="yes" + valomitted=yes + ;; + esac + + ## Change `-' in the option name to `_'. + optname="${opt}" + opt="`echo ${opt} | tr - _`" + + ## Process the option. + case "${opt}" in + + ## Has the user specified which window systems they want to support? + "with_x" | "with_x11" | "with_x10" ) + ## Make sure the value given was either "yes" or "no". + case "${val}" in + y | ye | yes ) val=yes ;; + n | no ) val=no ;; + * ) + (echo "${progname}: the \`--${optname}' option is supposed to have a boolean value. + Set it to either \`yes' or \`no'." + echo "${short_usage}") >&2 + exit 1 + ;; + esac + eval "${opt}=\"${val}\"" + ;; + + ## Has the user specified which toolkit they want to support? + "with_x_toolkit" ) + case "${val}" in + y | ye | yes ) val=athena ;; + n | no ) val=no ;; + l | lu | luc | luci | lucid ) val=lucid ;; + a | at | ath | athe | athena ) val=athena ;; + # These don't currently work. + # m | mo | mot | moti | motif ) val=motif ;; + # o | op | ope | open | open- | open-l | open-lo \ + # | open-loo | open-look ) val=open-look ;; + * ) + ( + #echo "${progname}: the \`--${optname}' option is supposed to have a value + #which is \`yes', \`no', \`lucid', \`athena', \`motif' or \`open-look'." + echo "${progname}: the \`--${optname}' option is supposed to have a value + which is \`yes', \`no', \`lucid', or \`athena'. + Currently, \`yes', \`athena' and \`lucid' are synonyms." + echo "${short_usage}") >&2 + exit 1 + ;; + esac + eval "${opt}=\"${val}\"" + ;; + + ## Has the user specified whether or not they want GCC? + "with_gcc" | "with_gnu_cc" ) + ## Make sure the value given was either "yes" or "no". + case "${val}" in + y | ye | yes ) val=yes ;; + n | no ) val=no ;; + * ) + (echo "${progname}: the \`--${optname}' option is supposed to have a boolean value. + Set it to either \`yes' or \`no'." + echo "${short_usage}") >&2 + exit 1 + ;; + esac + eval "${opt}=\"${val}\"" + ;; + + ## Has the user specified a source directory? + "srcdir" ) + ## If the value was omitted, get it from the next argument. + if [ "${valomitted}" = "yes" ]; then + ## Get the next argument from the argument list, if there is one. + if [ $# = 0 ]; then + (echo "${progname}: You must give a value for the \`--${optname}' option, as in + \`--${optname}=FOO'." + echo "${short_usage}") >&2 + exit 1 + fi + val="$1"; shift + fi + srcdir="${val}" + ;; + + ## Has the user tried to tell us where the X files are? + ## I think these are dopey, but no less than three alpha + ## testers, at large sites, have said they have their X files + ## installed in odd places. + "x_includes" ) + ## If the value was omitted, get it from the next argument. + if [ "${valomitted}" = "yes" ]; then + ## Get the next argument from the argument list, if there is one. + if [ $# = 0 ]; then + (echo "${progname}: You must give a value for the \`--${optname}' option, as in + \`--${optname}=/usr/local/X11/include'." + echo "${short_usage}") >&2 + exit 1 + fi + val="$1"; shift + fi + x_includes="${val}" + ;; + "x_libraries" ) + ## If the value was omitted, get it from the next argument. + if [ "${valomitted}" = "yes" ]; then + ## Get the next argument from the argument list, if there is one. + if [ $# = 0 ]; then + (echo "${progname}: You must give a value for the \`--${optname}' option, as in + \`--${optname}=/usr/local/X11/lib'." + echo "${short_usage}") >&2 + exit 1 + fi + val="$1"; shift + fi + x_libraries="${val}" + ;; + + ## Should this use the "development" file organization? + "run_in_place" ) + single_tree= + run_in_place=1 + ;; + + ## Should this use the "single tree" file organization? + "single_tree" ) + run_in_place= + single_tree=1 + ;; + + ## Has the user specified one of the path options? + prefix | exec_prefix | bindir | libdir | etcdir | datadir | \ + archlibdir | statedir | mandir | infodir | lispdir | lockdir | \ + lisppath | locallisppath | docdir ) + ## If the value was omitted, get it from the next argument. + if [ "${valomitted}" = "yes" ]; then + if [ $# = 0 ]; then + (echo \ + "$progname: You must give a value for the \`--${optname}' option,"; + echo \ + "as in \`--${optname}=`eval echo '$'$optname`.'" + echo "$short_usage") >&2 + exit 1 + fi + val="$1"; shift + fi + eval "${opt}=\"${val}\"" + eval "${opt}_specified=1" + ;; + + ## Verbose flag, tested by autoconf macros. + "verbose" ) + verbose=yes + ;; + + ## Has the user asked for some help? + "usage" | "help" ) + if [ "x$PAGER" = x ] + then + echo "${short_usage}" | more + else + echo "${short_usage}" | $PAGER + fi + exit + ;; + + ## We ignore all other options silently. + esac + ;; + + ## Anything not starting with a hyphen we assume is a + ## configuration name. + *) + configuration=${arg} + ;; + + esac + done + + ### Get the arguments back. See the diatribe on Shell Magic above. + eval set x "$quoted_arguments"; shift + + if [ "${configuration}" = "" ]; then + echo '- You did not tell me what kind of host system you want to configure. + - I will attempt to guess the kind of system this is.' 1>&2 + guesssys=`echo ${progname} | sed 's/configure$/config.guess/'` + if configuration=`${guesssys}` ; then + echo "- Looks like this is a ${configuration}" 1>&2 + else + echo '- Failed to guess the system type. You need to tell me.' 1>&2 + echo "${short_usage}" >&2 + exit 1 + fi + fi + + #### Decide where the source is. + case "${srcdir}" in + + ## If it's not specified, see if `.' or `..' might work. + "" ) + confdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'` + if [ -f $confdir/src/lisp.h -a -f $confdir/lisp/version.el ]; then + srcdir="${confdir}" + else + if [ -f "./src/lisp.h" -a -f "./lisp/version.el" ]; then + srcdir='.' + else + if [ -f "../src/lisp.h" -a -f "../lisp/version.el" ]; then + srcdir='..' + else + (echo "\ + ${progname}: Neither the current directory nor its parent seem to + contain the Emacs sources. If you do not want to build Emacs in its + source tree, you should run \`${progname}' in the directory in which + you wish to build Emacs, using its \`--srcdir' option to say where the + sources may be found." + echo "${short_usage}") >&2 + exit 1 + fi + fi + fi + ;; + + ## Otherwise, check if the directory they specified is okay. + * ) + if [ ! -d "${srcdir}" -o ! -f "${srcdir}/src/lisp.h" -o ! -f "${srcdir}/lisp/version.el" ]; then + (echo "\ + ${progname}: The directory specified with the \`--srcdir' option, + \`${srcdir}', doesn't seem to contain the Emacs sources. You should + either run the \`${progname}' script at the top of the Emacs source + tree, or use the \`--srcdir' option to specify where the Emacs sources + are." + echo "${short_usage}") >&2 + exit 1 + fi + ;; + esac + + #### Make srcdir absolute, if it isn't already. It's important to + #### avoid running the path through pwd unnecessary, since pwd can + #### give you automounter prefixes, which can go away. + case "${srcdir}" in + /* ) ;; + . ) + ## We may be able to use the $PWD environment variable to make this + ## absolute. But sometimes PWD is inaccurate. + if [ "${PWD}" != "" ] && [ "`(cd ${PWD} ; sh -c pwd)`" = "`pwd`" ] ; then + srcdir="$PWD" + else + srcdir="`(cd ${srcdir}; pwd)`" + fi + ;; + * ) srcdir="`(cd ${srcdir}; pwd)`" ;; + esac + + #### Check if the source directory already has a configured system in it. + if [ `pwd` != `(cd ${srcdir} && pwd)` ] \ + && [ -f "${srcdir}/src/config.h" ] ; then + (echo "${progname}: WARNING: The directory tree \`${srcdir}' is being used" + echo " as a build directory right now; it has been configured in its own" + echo " right. To configure in another directory as well, you MUST" + echo " use GNU make. If you do not have GNU make, then you must" + echo " now do \`make distclean' in ${srcdir}," + echo " and then run ${progname} again.") >&2 + extrasub='/^VPATH[ ]*=/c\ + vpath %.c $(srcdir)\ + vpath %.h $(srcdir)\ + vpath %.y $(srcdir)\ + vpath %.l $(srcdir)\ + vpath %.s $(srcdir)\ + vpath %.in $(srcdir)' + fi + + ### Make the necessary directories, if they don't exist. + for dir in ./src ./lib-src ./cpp ./oldXMenu ./lwlib ./etc ; do + if [ ! -d ${dir} ]; then + mkdir ${dir} + fi + done + + #### Given the configuration name, set machfile and opsysfile to the + #### names of the m/*.h and s/*.h files we should use. + + ### Canonicalize the configuration name. + echo "Checking the configuration name" + if canonical=`${srcdir}/config.sub "${configuration}"` ; then : ; else + exit $? + fi + + ### If you add support for a new configuration, add code to this + ### switch statement to recognize your configuration name and select + ### the appropriate operating system and machine description files. + + ### You would hope that you could choose an m/*.h file pretty much + ### based on the machine portion of the configuration name, and an s- + ### file based on the operating system portion. However, it turns out + ### that each m/*.h file is pretty manufacturer-specific - for + ### example, apollo.h, hp9000s300.h, mega68k, news.h, and tad68k are + ### all 68000 machines; mips.h, pmax.h, and news-risc are all MIPS + ### machines. So we basically have to have a special case for each + ### configuration name. + ### + ### As far as handling version numbers on operating systems is + ### concerned, make sure things will fail in a fixable way. If + ### /etc/MACHINES doesn't say anything about version numbers, be + ### prepared to handle anything reasonably. If version numbers + ### matter, be sure /etc/MACHINES says something about it. + ### + ### Eric Raymond says we should accept strings like "sysvr4" to mean + ### "System V Release 4"; he writes, "The old convention encouraged + ### confusion between `system' and `release' levels'." + + machine='' opsys='' unported='false' + case "${canonical}" in + + ## NetBSD ports + *-*-netbsd* ) + opsys=netbsd + case "${canonical}" in + i[345]86-*-netbsd*) machine=intel386 ;; + m68k-*-netbsd*) + # This is somewhat bogus. + machine=hp9000s300 ;; + mips-*-netbsd*) machine=pmax ;; + ns32k-*-netbsd*) machine=ns32000 ;; + sparc-*-netbsd*) machine=sparc ;; + esac + ;; + + ## Alliant machines + ## Strictly speaking, we need the version of the alliant operating + ## system to choose the right machine file, but currently the + ## configuration name doesn't tell us enough to choose the right + ## one; we need to give alliants their own operating system name to + ## do this right. When someone cares, they can help us. + fx80-alliant-* ) + machine=alliant4 opsys=bsd4-2 + ;; + i860-alliant-* ) + machine=alliant-2800 opsys=bsd4-3 + ;; + + ## Altos 3068 + m68*-altos-sysv* ) + machine=altos opsys=usg5-2 + ;; + + ## Amdahl UTS + 580-amdahl-sysv* ) + machine=amdahl opsys=usg5-2-2 + ;; + + ## Appallings - I mean, Apollos - running Domain + m68*-apollo* ) + machine=apollo opsys=bsd4-2 + ;; + + ## AT&T 3b2, 3b5, 3b15, 3b20 + we32k-att-sysv* ) + machine=att3b opsys=usg5-2-2 + ;; + + ## AT&T 3b1 - The Mighty Unix PC! + m68*-att-sysv* ) + machine=7300 opsys=usg5-2-2 + ;; + + ## Bull dpx20 + rs6000-bull-bosx* ) + machine=ibmrs6000 opsys=aix3-2 + ;; + + ## Bull dpx2 + m68*-bull-sysv3* ) + machine=dpx2 opsys=usg5-3 + ;; + + ## Bull sps7 + m68*-bull-sysv2* ) + machine=sps7 opsys=usg5-2 + ;; + + ## CCI 5/32, 6/32 -- see "Tahoe". + + ## Celerity + ## I don't know what configuration name to use for this; config.sub + ## doesn't seem to know anything about it. Hey, Celerity users, get + ## in touch with us! + celerity-celerity-bsd* ) + machine=celerity opsys=bsd4-2 + ;; + + ## Clipper + ## What operating systems does this chip run that Emacs has been + ## tested on? + clipper-* ) + machine=clipper + ## We'll use the catch-all code at the bottom to guess the + ## operating system. + ;; + + ## Convex + *-convex-bsd* | *-convex-convexos* ) + machine=convex opsys=bsd4-3 + ## Prevents suprious white space in makefiles - d.m.cooke@larc.nasa.gov + NON_GNU_CPP="cc -E -P" + ;; + + ## Cubix QBx/386 + i[345]86-cubix-sysv* ) + machine=intel386 opsys=usg5-3 + ;; + + ## Cydra 5 + cydra*-cydrome-sysv* ) + machine=cydra5 opsys=usg5-3 + ;; + + ## Data General AViiON Machines + m88k-dg-dgux5.4R3* | m88k-dg-dgux5.4.3* ) + machine=aviion opsys=dgux5-4r3 + ;; + m88k-dg-dgux5.4R2* | m88k-dg-dgux5.4.2* ) + machine=aviion opsys=dgux5-4r2 + ;; + m88k-dg-dgux* ) + machine=aviion opsys=dgux + ;; + + ## DECstations + mips-dec-ultrix[0-3].* | mips-dec-ultrix4.0* | mips-dec-bsd4.2* ) + machine=pmax opsys=bsd4-2 + ;; + mips-dec-ultrix* | mips-dec-bsd* ) + machine=pmax opsys=bsd4-3 + ;; + mips-dec-osf* ) + machine=pmax opsys=osf1 + ;; + + ## Motorola Delta machines + m68k-motorola-sysv* | m68000-motorola-sysv* ) + machine=delta opsys=usg5-3 + if [ -z "`type gnucc | grep 'not found'`" ] + then CC=gnucc + else + if [ -z "`type gcc | grep 'not found'`" ] + then CC=gcc + else CC=cc + fi + fi + ;; + m88k-motorola-sysv4* ) + machine=delta88k opsys=usg5-4 + ;; + m88k-motorola-sysv* | m88k-motorola-m88kbcs* ) + machine=delta88k opsys=usg5-3 + ;; + + ## Dual machines + m68*-dual-sysv* ) + machine=dual opsys=usg5-2 + ;; + m68*-dual-uniplus* ) + machine=dual opsys=unipl5-2 + ;; + + ## Elxsi 6400 + elxsi-elxsi-sysv* ) + machine=elxsi opsys=usg5-2 + ;; + + ## Encore machines + ns16k-encore-bsd* ) + machine=ns16000 opsys=umax + ;; + + ## The GEC 93 - apparently, this port isn't really finished yet. + + ## Gould Power Node and NP1 + pn-gould-bsd4.2* ) + machine=gould opsys=bsd4-2 + ;; + pn-gould-bsd4.3* ) + machine=gould opsys=bsd4-3 + ;; + np1-gould-bsd* ) + machine=gould-np1 opsys=bsd4-3 + ;; + + ## Harris Night Hawk machines running CX/UX (a 5000 looks just like a 4000 + ## as far as Emacs is concerned). + m88k-harris-cxux* ) + # Build needs to be different on 7.0 and later releases + case "`uname -r`" in + [56].[0-9] ) machine=nh4000 opsys=cxux ;; + [7].[0-9] ) machine=nh4000 opsys=cxux7 ;; + esac + ;; + ## Harris ecx or gcx running CX/UX (Series 1200, Series 3000) + m68k-harris-cxux* ) + machine=nh3000 opsys=cxux + ;; + + ## Honeywell XPS100 + xps*-honeywell-sysv* ) + machine=xps100 opsys=usg5-2 + ;; + + ## HP 9000 series 200 or 300 + m68*-hp-bsd* ) + machine=hp9000s300 opsys=bsd4-3 + ;; + ## HP/UX 7, 8 and 9 are supported on these machines. + m68*-hp-hpux* ) + case "`uname -r`" in + ## Someone's system reports A.B8.05 for this. + ## I wonder what other possibilities there are. + *.B8.* ) machine=hp9000s300 opsys=hpux8 ;; + *.08.* ) machine=hp9000s300 opsys=hpux8 ;; + *.09.* ) machine=hp9000s300 opsys=hpux9 ;; + *) machine=hp9000s300 opsys=hpux ;; + esac + ;; + + ## HP 9000 series 700 and 800, running HP/UX + hppa*-hp-hpux7* ) + machine=hp800 opsys=hpux + ;; + hppa*-hp-hpux8* ) + machine=hp800 opsys=hpux8 + ;; + hppa*-hp-hpux9shr* ) + machine=hp800 opsys=hpux9shr + ;; + hppa*-hp-hpux9* ) + machine=hp800 opsys=hpux9 + ;; + + ## HP 9000 series 700 and 800, running HP/UX + hppa*-hp-hpux* ) + ## Cross-compilation? Nah! + case "`uname -r`" in + ## Someone's system reports A.B8.05 for this. + ## I wonder what other possibilities there are. + *.B8.* ) machine=hp800 opsys=hpux8 ;; + *.08.* ) machine=hp800 opsys=hpux8 ;; + *.09.* ) machine=hp800 opsys=hpux9 ;; + *) machine=hp800 opsys=hpux ;; + esac + ;; + + ## Orion machines + orion-orion-bsd* ) + machine=orion opsys=bsd4-2 + ;; + clipper-orion-bsd* ) + machine=orion105 opsys=bsd4-2 + ;; + + ## 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 + ;; + i370-ibm-aix*) + machine=ibm370aix opsys=usg5-3 + ;; + rs6000-ibm-aix3.1* | powerpc-ibm-aix3.1* ) + machine=ibmrs6000 opsys=aix3-1 + ;; + rs6000-ibm-aix3.2.5 | powerpc-ibm-aix3.2.5 ) + machine=ibmrs6000 opsys=aix3-2-5 + ;; + rs6000-ibm-aix* | powerpc-ibm-aix* ) + machine=ibmrs6000 opsys=aix3-2 + ;; + romp-ibm-bsd4.3* ) + machine=ibmrt opsys=bsd4-3 + ;; + romp-ibm-bsd4.2* ) + machine=ibmrt opsys=bsd4-2 + ;; + romp-ibm-aos4.3* ) + machine=ibmrt opsys=bsd4-3 + ;; + romp-ibm-aos4.2* ) + machine=ibmrt opsys=bsd4-2 + ;; + romp-ibm-aos* ) + machine=ibmrt opsys=bsd4-3 + ;; + romp-ibm-bsd* ) + machine=ibmrt opsys=bsd4-3 + ;; + romp-ibm-aix* ) + machine=ibmrt-aix opsys=usg5-2-2 + ;; + + ## Integrated Solutions `Optimum V' + m68*-isi-bsd4.2* ) + machine=isi-ov opsys=bsd4-2 + ;; + m68*-isi-bsd4.3* ) + machine=isi-ov opsys=bsd4-3 + ;; + + ## 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 + i[345]86-sequent-bsd* ) + machine=symmetry opsys=bsd4-3 + ;; + + ## 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=intel386 opsys=usg5-4-2 + ;; + + ## Intel 860 + i860-*-sysv4* ) + machine=i860 opsys=usg5-4 + NON_GNU_CC="/bin/cc" # Ie, not the one in /usr/ucb/cc. + NON_GNU_CPP="/usr/ccs/lib/cpp" # cc -E tokenizes macro expansion. + ;; + + ## Masscomp machines + m68*-masscomp-rtu* ) + machine=masscomp opsys=rtu + ;; + + ## Megatest machines + m68*-megatest-bsd* ) + machine=mega68 opsys=bsd4-2 + ;; + + ## Workstations sold by MIPS + ## This is not necessarily all workstations using the MIPS processor - + ## Irises are produced by SGI, and DECstations by DEC. + + ## etc/MACHINES lists mips.h and mips4.h as possible machine files, + ## and usg5-2-2 and bsd4-3 as possible OS files. The only guidance + ## it gives for choosing between the alternatives seems to be "Use + ## -machine=mips4 for RISCOS version 4; use -opsystem=bsd4-3 with + ## the BSD world." I'll assume that these are instructions for + ## handling two odd situations, and that every other situation + ## should use mips.h and usg5-2-2, they being listed first. + mips-mips-usg* ) + machine=mips4 + ## Fall through to the general code at the bottom to decide on the OS. + ;; + mips-mips-riscos4* ) + machine=mips4 opsys=bsd4-3 + NON_GNU_CC="cc -systype bsd43" + NON_GNU_CPP="cc -systype bsd43 -E" + ;; + mips-mips-bsd* ) + machine=mips opsys=bsd4-3 + ;; + mips-mips-* ) + machine=mips opsys=usg5-2-2 + ;; + + ## NeXT + m68*-next-* | i[345]86-next-* ) + machine=next opsys=mach2 + ;; + + ## The complete machine from National Semiconductor + ns32k-ns-genix* ) + machine=ns32000 opsys=usg5-2 + ;; + + ## NCR machines + m68*-ncr-sysv2* | m68*-ncr-sysvr2* ) + machine=tower32 opsys=usg5-2-2 + ;; + m68*-ncr-sysv3* | m68*-ncr-sysvr3* ) + machine=tower32v3 opsys=usg5-3 + ;; + + ## Nixdorf Targon 31 + m68*-nixdorf-sysv* ) + machine=targon31 opsys=usg5-2-2 + ;; + + ## Nu (TI or LMI) + m68*-nu-sysv* ) + machine=nu opsys=usg5-2 + ;; + + ## Plexus + m68*-plexus-sysv* ) + machine=plexus opsys=usg5-2 + ;; + + ## Pyramid machines + ## I don't really have any idea what sort of processor the Pyramid has, + ## so I'm assuming it is its own architecture. + pyramid-pyramid-bsd* ) + machine=pyramid opsys=bsd4-2 + ;; + + ## Sequent Balance + ns32k-sequent-bsd4.2* ) + machine=sequent opsys=bsd4-2 + ;; + ns32k-sequent-bsd4.3* ) + machine=sequent opsys=bsd4-3 + ;; + + ## Siemens Nixdorf + mips-siemens-sysv* ) + machine=mips-siemens opsys=usg5-4 + NON_GNU_CC=/usr/ccs/bin/cc + NON_GNU_CPP=/usr/ccs/lib/cpp + ;; + + ## Silicon Graphics machines + ## Iris 2500 and Iris 2500 Turbo (aka the Iris 3030) + m68*-sgi-iris3.5* ) + machine=irist opsys=iris3-5 + ;; + m68*-sgi-iris3.6* | m68*-sgi-iris*) + machine=irist opsys=iris3-6 + ;; + ## Iris 4D + mips-sgi-irix3* ) + machine=iris4d opsys=irix3-3 + ;; + mips-sgi-irix5* ) + machine=iris4d opsys=irix5-0 + ;; + mips-sgi-irix4* | mips-sgi-irix* ) + machine=iris4d opsys=irix4-0 + ;; + + ## SONY machines + m68*-sony-bsd4.2* ) + machine=news opsys=bsd4-2 + ;; + m68*-sony-bsd4.3* ) + machine=news opsys=bsd4-3 + ;; + m68*-sony-newsos3*) + machine=news opsys=bsd4-3 + ;; + mips-sony-bsd* | mips-sony-newsos4* ) + machine=news-risc opsys=bsd4-3 + ;; + mips-sony-newsos* ) + machine=news-risc opsys=newsos5 + ;; + + ## Stride + m68*-stride-sysv* ) + machine=stride opsys=usg5-2 + ;; + + ## Suns + *-sun-sunos* | *-sun-bsd* | *-sun-solaris* | i[345]86-*-solaris2* | i[345]86-*-sunos5* ) + case "${canonical}" in + m68*-sunos1* ) machine=sun1 ;; + m68*-sunos2* ) machine=sun2 ;; + m68* ) machine=sun3 ;; + i[345]86-sun-sunos[34]* ) machine=sun386 ;; + i[345]86-*-* ) machine=intel386 ;; + sparc* ) machine=sparc ;; + * ) unported=true ;; + esac + 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* ) opsys=sunos4-1-3 + NON_GCC_TEST_OPTIONS=-Bstatic + GCC_TEST_OPTIONS=-static + ;; + *-sunos4shr* ) opsys=sunos4shr ;; + *-sunos4* | *-sunos ) opsys=sunos4-1 + NON_GCC_TEST_OPTIONS=-Bstatic + GCC_TEST_OPTIONS=-static + ;; + *-sunos5.3* | *-solaris2.3* ) + opsys=sol2-3 + NON_GNU_CPP=/usr/ccs/lib/cpp + ;; + *-sunos5.4* | *-solaris2.4* ) + opsys=sol2-4 + NON_GNU_CPP=/usr/ccs/lib/cpp + ;; + *-sunos5* | *-solaris* ) + opsys=sol2 + NON_GNU_CPP=/usr/ccs/lib/cpp + ;; + * ) opsys=bsd4-2 ;; + esac + ;; + + ## Tadpole 68k + m68*-tadpole-sysv* ) + machine=tad68k opsys=usg5-3 + ;; + + ## Tahoe machines + tahoe-tahoe-bsd4.2* ) + machine=tahoe opsys=bsd4-2 + ;; + tahoe-tahoe-bsd4.3* ) + machine=tahoe opsys=bsd4-3 + ;; + + ## Tandem Integrity S2 + mips-tandem-sysv* ) + machine=tandem-s2 opsys=usg5-3 + ;; + + ## Tektronix XD88 + m88k-tektronix-sysv3* ) + machine=tekxd88 opsys=usg5-3 + ;; + + ## Tektronix 16000 box (6130?) + ns16k-tektronix-bsd* ) + machine=ns16000 opsys=bsd4-2 + ;; + ## Tektronix 4300 + ## src/m/tek4300.h hints that this is a m68k machine. + m68*-tektronix-bsd* ) + machine=tek4300 opsys=bsd4-3 + ;; + + ## Titan P2 or P3 + ## We seem to have lost the machine-description file titan.h! + titan-titan-sysv* ) + machine=titan opsys=usg5-3 + ;; + + ## Ustation E30 (SS5E) + m68*-unisys-uniplus* ) + machine=ustation opsystem=unipl5-2 + ;; + + ## Vaxen. + vax-dec-* ) + machine=vax + case "${canonical}" in + *-bsd4.1* ) opsys=bsd4-1 ;; + *-bsd4.2* | *-ultrix[0-3].* | *-ultrix4.0* ) opsys=bsd4-2 ;; + *-bsd4.3* | *-ultrix* ) opsys=bsd4-3 ;; + *-bsd386* | *-bsdi* ) opsys=bsd386 ;; + *-sysv[01]* | *-sysvr[01]* ) opsys=usg5-0 ;; + *-sysv2* | *-sysvr2* ) opsys=usg5-2 ;; + *-vms* ) opsys=vms ;; + * ) unported=true + esac + ;; + + ## Whitechapel MG1 + ns16k-whitechapel-* ) + machine=mg1 + ## We don't know what sort of OS runs on these; we'll let the + ## operating system guessing code below try. + ;; + + ## Wicat + m68*-wicat-sysv* ) + machine=wicat opsys=usg5-2 + ;; + + ## Intel 386 machines where we don't care about the manufacturer + i[345]86-*-* ) + machine=intel386 + case "${canonical}" in + *-isc1.* | *-isc2.[01]* ) opsys=386-ix ;; + *-isc2.2* ) opsys=isc2-2 ;; + *-isc4.0* ) opsys=isc4-0 ;; + *-isc* ) opsys=isc3-0 ;; + *-esix5* ) opsys=esix5r4; NON_GNU_CPP=/usr/lib/cpp ;; + *-esix* ) opsys=esix ;; + *-xenix* ) opsys=xenix ;; + *-linux* ) opsys=linux ;; + *-sco3.2v4* ) opsys=sco4 ; NON_GNU_CPP=/lib/cpp ;; + *-bsd386* | *-bsdi* ) opsys=bsd386 ;; + *-386bsd* ) opsys=386bsd ;; + *-freebsd* ) opsys=freebsd ;; + *-nextstep* ) opsys=mach2 ;; + ## Otherwise, we'll fall through to the generic opsys code at the bottom. + esac + ;; + + * ) + unported=true + ;; + esac + + ### If the code above didn't choose an operating system, just choose + ### an operating system based on the configuration name. You really + ### only want to use this when you have no idea what the right + ### operating system is; if you know what operating systems a machine + ### runs, it's cleaner to make it explicit in the case statement + ### above. + if [ x"${opsys}" = x ]; then + case "${canonical}" in + *-gnu* ) opsys=gnu ;; + *-bsd4.[01] ) opsys=bsd4-1 ;; + *-bsd4.2 ) opsys=bsd4-2 ;; + *-bsd4.3 ) opsys=bsd4-3 ;; + *-sysv0 | *-sysvr0 ) opsys=usg5-0 ;; + *-sysv2 | *-sysvr2 ) opsys=usg5-2 ;; + *-sysv2.2 | *-sysvr2.2 ) opsys=usg5-2-2 ;; + *-sysv3 | *-sysvr3 ) opsys=usg5-3 ;; + *-sysv4 | *-sysvr4 ) opsys=usg5-4 ;; + *-sysv4.1 | *-sysvr4.1 ) + NON_GNU_CPP=/usr/lib/cpp + opsys=usg5-4 ;; + *-sysv4.2 | *-sysvr4.2 ) opsys=usg5-4-2 ;; + * ) + unported=true + ;; + esac + fi + + if $unported ; then + (echo "${progname}: Emacs hasn't been ported to \`${canonical}' systems." + echo "${progname}: Check \`etc/MACHINES' for recognized configuration names." + ) >&2 + exit 1 + fi + + machfile="m/${machine}.h" + opsysfile="s/${opsys}.h" + + + trap 'rm -fr conftest* confdefs* core $ac_clean_files; exit 1' 1 2 15 + trap 'rm -fr confdefs* $ac_clean_files' 0 + + # Save the original args if we used an alternate arg parser. + ac_configure_temp="${configure_args-$*}" + # Strip out --no-create and --norecursion so they don't pile up. + configure_args= + for ac_arg in $ac_configure_temp; do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -norecursion | --norecursion | --norecursio | --norecursi \ + | --norecurs | --norecur | --norecu | --norec | --nore | --nor) ;; + *) configure_args="$configure_args $ac_arg" ;; + esac + done + + # NLS nuisances. + # These must not be set unconditionally because not all systems understand + # e.g. LANG=C (notably SCO). + if test "${LC_ALL+set}" = 'set'; then LC_ALL=C; export LC_ALL; fi + if test "${LANG+set}" = 'set'; then LANG=C; export LANG; fi + + # confdefs.h avoids OS command line length limits that DEFS can exceed. + rm -rf conftest* confdefs.h + # AIX cpp loses on an empty file, so make sure it contains at least a newline. + echo > confdefs.h + + # A filename unique to this package, relative to the directory that + # configure is in, which we can look for to find out if srcdir is correct. + ac_unique_file=lisp + + # Find the source files, if location was not specified. + if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then `..'. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi + fi + if test ! -r $srcdir/$ac_unique_file; then + if test x$ac_srcdir_defaulted = xyes; then + echo "configure: can not find sources in ${ac_confdir} or .." >&2; exit 1 + else + echo "configure: can not find sources in ${srcdir}" >&2; exit 1 + fi + fi + ac_ext=c + # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. + ac_cpp='${CPP}' + ac_compile='${CC-cc} $CFLAGS $LDFLAGS conftest.${ac_ext} -o conftest $LIBS >/dev/null 2>&1' + + + + + + #### Choose a compiler. + if [ "x$CC" = x ] + then true + else cc_specified=1 + fi + + case ${with_gcc} in + "yes" ) CC="gcc" GCC=1 ;; + "no" ) + if [ "x$CC" = x ] + then CC=cc; + else true; + fi + ;; + * ) + if test -z "$CC"; then + # Extract the first word of `gcc', so it can be a program name with args. + set ac_dummy gcc; ac_word=$2 + test -n "$silent" || echo "checking for $ac_word" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + CC="gcc" + break + fi + done + IFS="$ac_save_ifs" + fi + test -z "$CC" && CC="cc" + test -n "$CC" && test -n "$verbose" && echo " setting CC to $CC" + + # Find out if we are using GNU C, under whatever name. + cat > conftest.c < conftest.out 2>&1 + if egrep yes conftest.out >/dev/null 2>&1; then + GCC=1 # For later tests. + fi + rm -f conftest* + + esac + + #### Some systems specify a CPP to use unless we are using GCC. + #### Now that we know whether we are using GCC, we can decide whether + #### to use that one. + if [ "x$NON_GNU_CPP" = x ] || [ x$GCC = x1 ] || [ "x$CPP" != x ] + then true + else + CPP="$NON_GNU_CPP" + fi + + #### Some systems specify a CC to use unless we are using GCC. + #### Now that we know whether we are using GCC, we can decide whether + #### to use that one. + if [ "x$NON_GNU_CC" = x ] || [ x$GCC = x1 ] || [ x$cc_specified = x1 ] + then true + else + CC="$NON_GNU_CC" + fi + + if [ x$GCC = x1 ] && [ "x$GCC_TEST_OPTIONS" != x ] + then + CC="$CC $GCC_TEST_OPTIONS" + fi + + if [ x$GCC = x ] && [ "x$NON_GCC_TEST_OPTIONS" != x ] + then + CC="$CC $NON_GCC_TEST_OPTIONS" + fi + + #### Some other nice autoconf tests. If you add a test here which + #### should make an entry in src/config.h, don't forget to add an + #### #undef clause to src/config.h.in for autoconf to modify. + + test -n "$silent" || echo "checking for ln -s" + rm -f conftestdata + if ln -s X conftestdata 2>/dev/null + then + rm -f conftestdata + LN_S="ln -s" + else + LN_S=ln + fi + + + test -n "$silent" || echo "checking how to run the C preprocessor" + if test -z "$CPP"; then + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and ``${CC-cc}'' will simply confuse + # make. It must be expanded now. + CPP="${CC-cc} -E" + cat > conftest.${ac_ext} < + Syntax Error + EOF + # Some shells (Coherent) do redirections in the wrong order, so need + # the parens. + ac_err=`eval "($ac_cpp conftest.${ac_ext} >/dev/null) 2>&1"` + if test -z "$ac_err"; then + : + else + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.${ac_ext} < + Syntax Error + EOF + # Some shells (Coherent) do redirections in the wrong order, so need + # the parens. + ac_err=`eval "($ac_cpp conftest.${ac_ext} >/dev/null) 2>&1"` + if test -z "$ac_err"; then + : + else + rm -rf conftest* + CPP=/lib/cpp + fi + rm -f conftest* + fi + rm -f conftest* + fi + test -n "$verbose" && echo " setting CPP to $CPP" + + # Make sure to not get the incompatible SysV /etc/install and + # /usr/sbin/install, which might be in PATH before a BSD-like install, + # or the SunOS /usr/etc/install directory, or the AIX /bin/install, + # or the AFS install, which mishandles nonexistent args, or + # /usr/ucb/install on SVR4, which tries to use the nonexistent group + # `staff', or /sbin/install on IRIX which has incompatible command-line + # syntax. Sigh. + # + # On most BSDish systems install is in /usr/bin, not /usr/ucb + # anyway. + # This turns out not to be true, so the mere pathname isn't an indication + # of whether the program works. What we really need is a set of tests for + # the install program to see if it actually works in all the required ways. + # + # Avoid using ./install, which might have been erroneously created + # by make from ./install.sh. + if test -z "${INSTALL}"; then + test -n "$silent" || echo "checking for a BSD compatible install" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + case "$ac_dir" in + ''|.|/etc|/sbin|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + for ac_prog in installbsd scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + # OSF/1 installbsd also uses dspmsg, but is usable. + : + else + INSTALL="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_ifs" + fi + + if test -z "$INSTALL"; then + # As a last resort, use the slow shell script. + for ac_dir in ${srcdir} ${srcdir}/.. ${srcdir}/../..; do + if test -f $ac_dir/install.sh; then + INSTALL="$ac_dir/install.sh -c"; break + fi + done + fi + if test -z "$INSTALL"; then + echo "configure: can not find install.sh in ${srcdir} or ${srcdir}/.. or ${srcdir}/../.." >&2; exit 1 + fi + test -n "$verbose" && echo " setting INSTALL to $INSTALL" + + # Use test -z because SunOS4 sh mishandles ${INSTALL_PROGRAM-'${INSTALL}'}. + # It thinks the first close brace ends the variable substitution. + test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + test -n "$verbose" && echo " setting INSTALL_PROGRAM to $INSTALL_PROGRAM" + + test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + test -n "$verbose" && echo " setting INSTALL_DATA to $INSTALL_DATA" + + for ac_prog in 'bison -y' byacc + do + if test -z "$YACC"; then + # Extract the first word of `$ac_prog', so it can be a program name with args. + set ac_dummy $ac_prog; ac_word=$2 + test -n "$silent" || echo "checking for $ac_word" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + YACC="$ac_prog" + break + fi + done + IFS="$ac_save_ifs" + fi + + test -n "$YACC" && test -n "$verbose" && echo " setting YACC to $YACC" + + test -n "$YACC" && break + done + test -n "$YACC" || YACC="yacc" + + + + for ac_hdr in sys/timeb.h sys/time.h unistd.h + do + ac_tr_hdr=HAVE_`echo $ac_hdr | tr '[a-z]./' '[A-Z]__'` + test -n "$silent" || echo "checking for ${ac_hdr}" + cat > conftest.${ac_ext} < + EOF + # Some shells (Coherent) do redirections in the wrong order, so need + # the parens. + ac_err=`eval "($ac_cpp conftest.${ac_ext} >/dev/null) 2>&1"` + if test -z "$ac_err"; then + rm -rf conftest* + + { + test -n "$verbose" && \ + echo " defining ${ac_tr_hdr}" + echo "#define" ${ac_tr_hdr} "1" >> confdefs.h + DEFS="$DEFS -D${ac_tr_hdr}=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}${ac_tr_hdr}\${ac_dB}${ac_tr_hdr}\${ac_dC}1\${ac_dD} + \${ac_uA}${ac_tr_hdr}\${ac_uB}${ac_tr_hdr}\${ac_uC}1\${ac_uD} + \${ac_eA}${ac_tr_hdr}\${ac_eB}${ac_tr_hdr}\${ac_eC}1\${ac_eD} + " + } + + + fi + rm -f conftest* + done + + test -n "$silent" || echo "checking for ANSI C header files" + cat > conftest.${ac_ext} < + #include + #include + #include + EOF + # Some shells (Coherent) do redirections in the wrong order, so need + # the parens. + ac_err=`eval "($ac_cpp conftest.${ac_ext} >/dev/null) 2>&1"` + if test -z "$ac_err"; then + rm -rf conftest* + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + echo '#include "confdefs.h" + #include ' > conftest.${ac_ext} + eval "$ac_cpp conftest.${ac_ext} > conftest.out 2>&1" + if egrep "memchr" conftest.out >/dev/null 2>&1; then + rm -rf conftest* + # SGI's /bin/cc from Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + cat > conftest.${ac_ext} < + #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') + #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) + #define XOR(e,f) (((e) && !(f)) || (!(e) && (f))) + int main () { int i; for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); + exit (0); } + + EOF + eval $ac_compile + if test -s conftest && (./conftest; exit) 2>/dev/null; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + echo '#include "confdefs.h" + #include ' > conftest.${ac_ext} + eval "$ac_cpp conftest.${ac_ext} > conftest.out 2>&1" + if egrep "free" conftest.out >/dev/null 2>&1; then + rm -rf conftest* + + { + test -n "$verbose" && \ + echo " defining STDC_HEADERS" + echo "#define" STDC_HEADERS "1" >> confdefs.h + DEFS="$DEFS -DSTDC_HEADERS=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}STDC_HEADERS\${ac_dB}STDC_HEADERS\${ac_dC}1\${ac_dD} + \${ac_uA}STDC_HEADERS\${ac_uB}STDC_HEADERS\${ac_uC}1\${ac_uD} + \${ac_eA}STDC_HEADERS\${ac_eB}STDC_HEADERS\${ac_eC}1\${ac_eD} + " + } + + + fi + rm -f conftest* + + + fi + rm -fr conftest* + + fi + rm -f conftest* + + + fi + rm -f conftest* + + test -n "$silent" || echo "checking for whether time.h and sys/time.h may both be included" + cat > conftest.${ac_ext} < + #include + #include + int main() { return 0; } + int t() { struct tm *tp;; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + + { + test -n "$verbose" && \ + echo " defining TIME_WITH_SYS_TIME" + echo "#define" TIME_WITH_SYS_TIME "1" >> confdefs.h + DEFS="$DEFS -DTIME_WITH_SYS_TIME=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}TIME_WITH_SYS_TIME\${ac_dB}TIME_WITH_SYS_TIME\${ac_dC}1\${ac_dD} + \${ac_uA}TIME_WITH_SYS_TIME\${ac_uB}TIME_WITH_SYS_TIME\${ac_uC}1\${ac_uD} + \${ac_eA}TIME_WITH_SYS_TIME\${ac_eB}TIME_WITH_SYS_TIME\${ac_eC}1\${ac_eD} + " + } + + + fi + rm -f conftest* + + test -n "$silent" || echo "checking for sys_siglist declaration in signal.h or unistd.h" + cat > conftest.${ac_ext} < + /* NetBSD declares sys_siglist in . */ + #ifdef HAVE_UNISTD_H + #include + #endif + int main() { return 0; } + int t() { char *msg = *(sys_siglist + 1);; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + + { + test -n "$verbose" && \ + echo " defining SYS_SIGLIST_DECLARED" + echo "#define" SYS_SIGLIST_DECLARED "1" >> confdefs.h + DEFS="$DEFS -DSYS_SIGLIST_DECLARED=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}SYS_SIGLIST_DECLARED\${ac_dB}SYS_SIGLIST_DECLARED\${ac_dC}1\${ac_dD} + \${ac_uA}SYS_SIGLIST_DECLARED\${ac_uB}SYS_SIGLIST_DECLARED\${ac_uC}1\${ac_uD} + \${ac_eA}SYS_SIGLIST_DECLARED\${ac_eB}SYS_SIGLIST_DECLARED\${ac_eC}1\${ac_eD} + " + } + + + fi + rm -f conftest* + + + test -n "$silent" || echo "checking for return type of signal handlers" + cat > conftest.${ac_ext} < + #include + #ifdef signal + #undef signal + #endif + extern void (*signal ()) (); + int main() { return 0; } + int t() { int i;; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + + { + test -n "$verbose" && \ + echo " defining" RETSIGTYPE to be "void" + echo "#define" RETSIGTYPE "void" >> confdefs.h + DEFS="$DEFS -DRETSIGTYPE=void" + ac_sed_defs="${ac_sed_defs}\${ac_dA}RETSIGTYPE\${ac_dB}RETSIGTYPE\${ac_dC}void\${ac_dD} + \${ac_uA}RETSIGTYPE\${ac_uB}RETSIGTYPE\${ac_uC}void\${ac_uD} + \${ac_eA}RETSIGTYPE\${ac_eB}RETSIGTYPE\${ac_eC}void\${ac_eD} + " + } + + + else + rm -rf conftest* + + { + test -n "$verbose" && \ + echo " defining" RETSIGTYPE to be "int" + echo "#define" RETSIGTYPE "int" >> confdefs.h + DEFS="$DEFS -DRETSIGTYPE=int" + ac_sed_defs="${ac_sed_defs}\${ac_dA}RETSIGTYPE\${ac_dB}RETSIGTYPE\${ac_dC}int\${ac_dD} + \${ac_uA}RETSIGTYPE\${ac_uB}RETSIGTYPE\${ac_uC}int\${ac_uD} + \${ac_eA}RETSIGTYPE\${ac_eB}RETSIGTYPE\${ac_eC}int\${ac_eD} + " + } + + fi + rm -f conftest* + + + + test -n "$silent" || echo "checking for struct tm in time.h" + cat > conftest.${ac_ext} < + #include + int main() { return 0; } + int t() { struct tm *tp; tp->tm_sec;; return 0; } + EOF + if eval $ac_compile; then + : + else + rm -rf conftest* + + { + test -n "$verbose" && \ + echo " defining TM_IN_SYS_TIME" + echo "#define" TM_IN_SYS_TIME "1" >> confdefs.h + DEFS="$DEFS -DTM_IN_SYS_TIME=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}TM_IN_SYS_TIME\${ac_dB}TM_IN_SYS_TIME\${ac_dC}1\${ac_dD} + \${ac_uA}TM_IN_SYS_TIME\${ac_uB}TM_IN_SYS_TIME\${ac_uC}1\${ac_uD} + \${ac_eA}TM_IN_SYS_TIME\${ac_eB}TM_IN_SYS_TIME\${ac_eC}1\${ac_eD} + " + } + + fi + rm -f conftest* + + ac_decl='#include + ' + case "$DEFS" in + *TM_IN_SYS_TIME*) ac_decl="$ac_decl + #include + " ;; + *) ac_decl="$ac_decl + #include + " ;; + esac + test -n "$silent" || echo "checking for tm_zone in struct tm" + cat > conftest.${ac_ext} <> confdefs.h + DEFS="$DEFS -DHAVE_TM_ZONE=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_TM_ZONE\${ac_dB}HAVE_TM_ZONE\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_TM_ZONE\${ac_uB}HAVE_TM_ZONE\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_TM_ZONE\${ac_eB}HAVE_TM_ZONE\${ac_eC}1\${ac_eD} + " + } + + + else + rm -rf conftest* + ac_no_tm_zone=1 + fi + rm -f conftest* + + if test -n "$ac_no_tm_zone"; then + test -n "$silent" || echo "checking for tzname" + cat > conftest.${ac_ext} < + #ifndef tzname /* For SGI. */ + extern char *tzname[]; /* RS6000 and others want it this way. */ + #endif + int main() { return 0; } + int t() { atoi(*tzname);; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + + { + test -n "$verbose" && \ + echo " defining HAVE_TZNAME" + echo "#define" HAVE_TZNAME "1" >> confdefs.h + DEFS="$DEFS -DHAVE_TZNAME=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_TZNAME\${ac_dB}HAVE_TZNAME\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_TZNAME\${ac_uB}HAVE_TZNAME\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_TZNAME\${ac_eB}HAVE_TZNAME\${ac_eC}1\${ac_eD} + " + } + + + fi + rm -f conftest* + + fi + + + ac_prog='/* Ultrix mips cc rejects this. */ + typedef int charset[2]; const charset x; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *ccp; + char **p; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in an arm + of an if-expression whose if-part is not a constant expression */ + const char *g = "string"; + ccp = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++ccp; + p = (char**) ccp; + ccp = (char const *const *) p; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25,17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + }' + test -n "$silent" || echo "checking for lack of working const" + cat > conftest.${ac_ext} <> confdefs.h + DEFS="$DEFS -Dconst=" + ac_sed_defs="${ac_sed_defs}\${ac_dA}const\${ac_dB}const\${ac_dC}\${ac_dD} + \${ac_uA}const\${ac_uB}const\${ac_uC}\${ac_uD} + \${ac_eA}const\${ac_eB}const\${ac_eC}\${ac_eD} + " + } + + fi + rm -f conftest* + + + cat > conftestmake <<'EOF' + all: + @echo 'ac_maketemp="${MAKE}"' + EOF + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` + if test -n "$ac_maketemp"; then SET_MAKE= + else SET_MAKE="MAKE=${MAKE-make}"; fi + rm -f conftestmake + + + test -n "$silent" || echo "checking for long file names" + ac_some_dir_failed=false + # Test for long file names in all the places we know might matter: + # . the current directory, where building will happen + # /tmp where it might want to write temporary files + # /var/tmp likewise + # /usr/tmp likewise + # $prefix/lib where we will be installing things + # $exec_prefix/lib likewise + # eval it to expand exec_prefix. + for ac_dir in `eval echo . /tmp /var/tmp /usr/tmp $prefix/lib $exec_prefix/lib` ; do + test -d $ac_dir || continue + test -w $ac_dir || continue # It's less confusing to not echo anything here. + (echo 1 > $ac_dir/conftest9012345) 2>/dev/null + (echo 2 > $ac_dir/conftest9012346) 2>/dev/null + val=`cat $ac_dir/conftest9012345 2>/dev/null` + test -f $ac_dir/conftest9012345 && test "$val" = 1 || ac_some_dir_failed=true + rm -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2> /dev/null + done + $ac_some_dir_failed || + { + test -n "$verbose" && \ + echo " defining HAVE_LONG_FILE_NAMES" + echo "#define" HAVE_LONG_FILE_NAMES "1" >> confdefs.h + DEFS="$DEFS -DHAVE_LONG_FILE_NAMES=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_LONG_FILE_NAMES\${ac_dB}HAVE_LONG_FILE_NAMES\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_LONG_FILE_NAMES\${ac_uB}HAVE_LONG_FILE_NAMES\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_LONG_FILE_NAMES\${ac_eB}HAVE_LONG_FILE_NAMES\${ac_eC}1\${ac_eD} + " + } + + + + + + #### Choose a window system. + echo "checking for specified window system" + + window_system='' + case "${with_x}" in + yes ) + window_system=${window_system}x11 + ;; + no ) + window_system=${window_system}none + ;; + esac + case "${window_system}" in + .* ) + ;; + * ) + case "${with_x11}" in + yes ) + window_system=x11 + ;; + no ) + window_system=none + ;; + esac + case "${with_x10}" in + yes ) + window_system=x10 + ;; + no ) + window_system=none + ;; + esac + ;; + esac + + case "${window_system}" in + "none" | "x11" | "x10" ) ;; + "" ) + # --x-includes or --x-libraries implies --with-x11. + if [ -n "${x_includes}" ] || [ -n "${x_libraries}" ]; then + window_system=x11 + else + echo " No window system specified. Looking for X11." + # If the user didn't specify a window system and we found X11, use it. + if [ -r /usr/lib/libX11.a \ + -o -d /usr/include/X11 \ + -o -d /usr/X386/include \ + -o -d ${x_includes}/X11 ]; then + window_system=x11 + fi + fi + ;; + * ) + echo "Don't specify a window system more than once." >&2 + exit 1 + ;; + esac + + case "${window_system}" in + "" | "x11" ) + ### If the user hasn't specified where we should find X, try + ### letting autoconf figure that out. + if [ -z "${x_includes}" ] && [ -z "${x_libraries}" ]; then + + # If we find X, set shell vars x_includes and x_libraries to the paths. + no_x=true + if test "x$with_x" != xno; then + test -n "$silent" || echo "checking for X include and library files with xmkmf" + rm -fr conftestdir + if mkdir conftestdir; then + cd conftestdir + # Make sure to not put "make" in the Imakefile rules, since we grep it out. + cat > Imakefile <<'EOF' + acfindx: + @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' + EOF + if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then + no_x= + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + eval `make acfindx 2>/dev/null | grep -v make` + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + if test ! -f $ac_im_usrlibdir/libX11.a && test -f $ac_im_libdir/libX11.a + then + ac_im_usrlibdir=$ac_im_libdir + fi + case "$ac_im_incroot" in + /usr/include) ;; + *) test -z "$x_includes" && x_includes="$ac_im_incroot" ;; + esac + case "$ac_im_usrlibdir" in + /usr/lib | /lib) ;; + *) test -z "$x_libraries" && x_libraries="$ac_im_usrlibdir" ;; + esac + fi + cd .. + rm -fr conftestdir + fi + + if test -z "$ac_im_usrlibdir"; then + test -n "$silent" || echo "checking for X include and library files directly" + if test ".$x_direct_test_library" = . ; then + x_direct_test_library='Xt' + fi + if test ".$x_direct_test_include" = . ; then + x_direct_test_include='X11/Intrinsic.h' + fi + cat > conftest.${ac_ext} < + EOF + # Some shells (Coherent) do redirections in the wrong order, so need + # the parens. + ac_err=`eval "($ac_cpp conftest.${ac_ext} >/dev/null) 2>&1"` + if test -z "$ac_err"; then + rm -rf conftest* + no_x= + + else + rm -rf conftest* + for ac_dir in \ + /usr/X11R6/include \ + /usr/X11R5/include \ + /usr/X11R4/include \ + \ + /usr/include/X11R6 \ + /usr/include/X11R5 \ + /usr/include/X11R4 \ + \ + /usr/local/X11R6/include \ + /usr/local/X11R5/include \ + /usr/local/X11R4/include \ + \ + /usr/local/include/X11R6 \ + /usr/local/include/X11R5 \ + /usr/local/include/X11R4 \ + \ + /usr/X11/include \ + /usr/include/X11 \ + /usr/local/X11/include \ + /usr/local/include/X11 \ + \ + /usr/X386/include \ + /usr/x386/include \ + /usr/XFree86/include/X11 \ + \ + /usr/include \ + /usr/local/include \ + /usr/unsupported/include \ + /usr/athena/include \ + /usr/local/x11r5/include \ + /usr/lpp/Xamples/include \ + \ + /usr/openwin/include \ + /usr/openwin/share/include \ + ; \ + do + if test -r "$ac_dir/$x_direct_test_include"; then + test -z "$x_includes" && x_includes=$ac_dir + no_x= + break + fi + done + fi + rm -f conftest* + + # Check for the libraries. First see if replacing the `include' by + # `lib' works. + ac_save_LIBS="${LIBS}" + LIBS="${LIBS} -l"$x_direct_test_library"" + ac_have_lib="" + test -n "$silent" || echo "checking for -l"$x_direct_test_library"" + cat > conftest.${ac_ext} < ${tempcname} + # The value of CPP is a quoted variable reference, so we need to do this + # to get its actual value... + CPP=`eval "echo $CPP"` + eval `${CPP} -Isrc ${tempcname} \ + | grep 'configure___' \ + | sed -e 's/^configure___ \([^=]*=\)\(.*\)$/\1"\2"/'` + if [ "x$CFLAGS" = x ]; then + eval `${CPP} -Isrc -DTHIS_IS_CONFIGURE ${tempcname} \ + | grep 'configure___' \ + | sed -e 's/^configure___ \([^=]*=\)\(.*\)$/\1"\2"/'` + else + REAL_CFLAGS="$CFLAGS" + fi + rm ${tempcname} + + ### Compute the unexec source name from the object name. + UNEXEC_SRC="`echo ${unexec} | sed 's/\.o/.c/'`" + + # Do the opsystem or machine files prohibit the use of the GNU malloc? + # Assume not, until told otherwise. + GNU_MALLOC=yes + if [ "${system_malloc}" = "yes" ]; then + GNU_MALLOC=no + GNU_MALLOC_reason=" + (The GNU allocators don't work with this system configuration.)" + fi + + if [ x"${REL_ALLOC}" = x ]; then + REL_ALLOC=${GNU_MALLOC} + fi + + LISP_FLOAT_TYPE=yes + + + #### Add the libraries to LIBS and check for some functions. + + + DEFS="$c_switch_system $c_switch_machine $DEFS" + LIBS="$libsrc_libs" + + ac_save_LIBS="${LIBS}" + LIBS="${LIBS} -ldnet" + ac_have_lib="" + test -n "$silent" || echo "checking for -ldnet" + cat > conftest.${ac_ext} <> confdefs.h + DEFS="$DEFS -DHAVE_LIBDNET=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_LIBDNET\${ac_dB}HAVE_LIBDNET\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_LIBDNET\${ac_uB}HAVE_LIBDNET\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_LIBDNET\${ac_eB}HAVE_LIBDNET\${ac_eC}1\${ac_eD} + " + } + + LIBS="${LIBS} -ldnet" + fi + + + ac_save_LIBS="${LIBS}" + LIBS="${LIBS} -lXbsd" + ac_have_lib="" + test -n "$silent" || echo "checking for -lXbsd" + cat > conftest.${ac_ext} < conftest.${ac_ext} < + int main() { return 0; } + int t() { + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ + #if defined (__stub_${ac_func}) || defined (__stub___${ac_func}) + choke me + #else + /* Override any gcc2 internal prototype to avoid an error. */ + extern char ${ac_func}(); ${ac_func}(); + #endif + ; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + { + test -n "$verbose" && \ + echo " defining ${ac_tr_func}" + echo "#define" ${ac_tr_func} "1" >> confdefs.h + DEFS="$DEFS -D${ac_tr_func}=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}${ac_tr_func}\${ac_dB}${ac_tr_func}\${ac_dC}1\${ac_dD} + \${ac_uA}${ac_tr_func}\${ac_uB}${ac_tr_func}\${ac_uC}1\${ac_uD} + \${ac_eA}${ac_tr_func}\${ac_eB}${ac_tr_func}\${ac_eC}1\${ac_eD} + " + } + + + fi + rm -f conftest* + done + + fi + + if test "${USE_X_TOOLKIT}" != "none"; then + test -n "$silent" || echo "checking for X11 toolkit version" + cat > conftest.${ac_ext} < + int main() { return 0; } + int t() { + #if XtSpecificationRelease < 6 + fail; + #endif + ; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + + { + test -n "$verbose" && \ + echo " defining HAVE_X11XTR6" + echo "#define" HAVE_X11XTR6 "1" >> confdefs.h + DEFS="$DEFS -DHAVE_X11XTR6=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_X11XTR6\${ac_dB}HAVE_X11XTR6\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_X11XTR6\${ac_uB}HAVE_X11XTR6\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_X11XTR6\${ac_eB}HAVE_X11XTR6\${ac_eC}1\${ac_eD} + " + } + + + fi + rm -f conftest* + + fi + + # If netdb.h doesn't declare h_errno, we must declare it by hand. + test -n "$silent" || echo "checking for declaration of h_errno in netdb.h" + cat > conftest.${ac_ext} < + int main() { return 0; } + int t() { + int + foo () + { + return h_errno; + } + ; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + + { + test -n "$verbose" && \ + echo " defining HAVE_H_ERRNO" + echo "#define" HAVE_H_ERRNO "1" >> confdefs.h + DEFS="$DEFS -DHAVE_H_ERRNO=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_H_ERRNO\${ac_dB}HAVE_H_ERRNO\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_H_ERRNO\${ac_uB}HAVE_H_ERRNO\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_H_ERRNO\${ac_eB}HAVE_H_ERRNO\${ac_eC}1\${ac_eD} + " + } + + + fi + rm -f conftest* + + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works + # for constant arguments. Useless! + test -n "$silent" || echo "checking for working alloca.h" + cat > conftest.${ac_ext} < + int main() { return 0; } + int t() { char *p = alloca(2 * sizeof(int));; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + + { + test -n "$verbose" && \ + echo " defining HAVE_ALLOCA_H" + echo "#define" HAVE_ALLOCA_H "1" >> confdefs.h + DEFS="$DEFS -DHAVE_ALLOCA_H=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_ALLOCA_H\${ac_dB}HAVE_ALLOCA_H\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_ALLOCA_H\${ac_uB}HAVE_ALLOCA_H\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_ALLOCA_H\${ac_eB}HAVE_ALLOCA_H\${ac_eC}1\${ac_eD} + " + } + + + fi + rm -f conftest* + + ac_decl="#ifdef __GNUC__ + #define alloca __builtin_alloca + #else + #if HAVE_ALLOCA_H + #include + #else + #ifdef _AIX + #pragma alloca + #else + char *alloca (); + #endif + #endif + #endif + " + test -n "$silent" || echo "checking for alloca" + cat > conftest.${ac_ext} <> confdefs.h + DEFS="$DEFS -DHAVE_ALLOCA=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_ALLOCA\${ac_dB}HAVE_ALLOCA\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_ALLOCA\${ac_uB}HAVE_ALLOCA\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_ALLOCA\${ac_eB}HAVE_ALLOCA\${ac_eC}1\${ac_eD} + " + } + + + else + rm -rf conftest* + ac_alloca_missing=1 + cat > conftest.${ac_ext} < conftest.out 2>&1" + if egrep "winnitude" conftest.out >/dev/null 2>&1; then + rm -rf conftest* + test -n "$silent" || echo "checking for _getb67" + cat > conftest.${ac_ext} < + int main() { return 0; } + int t() { + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ + #if defined (__stub__getb67) || defined (__stub____getb67) + choke me + #else + /* Override any gcc2 internal prototype to avoid an error. */ + extern char _getb67(); _getb67(); + #endif + ; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + { + test -n "$verbose" && \ + echo " defining" CRAY_STACKSEG_END to be "_getb67" + echo "#define" CRAY_STACKSEG_END "_getb67" >> confdefs.h + DEFS="$DEFS -DCRAY_STACKSEG_END=_getb67" + ac_sed_defs="${ac_sed_defs}\${ac_dA}CRAY_STACKSEG_END\${ac_dB}CRAY_STACKSEG_END\${ac_dC}_getb67\${ac_dD} + \${ac_uA}CRAY_STACKSEG_END\${ac_uB}CRAY_STACKSEG_END\${ac_uC}_getb67\${ac_uD} + \${ac_eA}CRAY_STACKSEG_END\${ac_eB}CRAY_STACKSEG_END\${ac_eC}_getb67\${ac_eD} + " + } + + + else + rm -rf conftest* + test -n "$silent" || echo "checking for GETB67" + cat > conftest.${ac_ext} < + int main() { return 0; } + int t() { + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ + #if defined (__stub_GETB67) || defined (__stub___GETB67) + choke me + #else + /* Override any gcc2 internal prototype to avoid an error. */ + extern char GETB67(); GETB67(); + #endif + ; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + { + test -n "$verbose" && \ + echo " defining" CRAY_STACKSEG_END to be "GETB67" + echo "#define" CRAY_STACKSEG_END "GETB67" >> confdefs.h + DEFS="$DEFS -DCRAY_STACKSEG_END=GETB67" + ac_sed_defs="${ac_sed_defs}\${ac_dA}CRAY_STACKSEG_END\${ac_dB}CRAY_STACKSEG_END\${ac_dC}GETB67\${ac_dD} + \${ac_uA}CRAY_STACKSEG_END\${ac_uB}CRAY_STACKSEG_END\${ac_uC}GETB67\${ac_uD} + \${ac_eA}CRAY_STACKSEG_END\${ac_eB}CRAY_STACKSEG_END\${ac_eC}GETB67\${ac_eD} + " + } + + + else + rm -rf conftest* + test -n "$silent" || echo "checking for getb67" + cat > conftest.${ac_ext} < + int main() { return 0; } + int t() { + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ + #if defined (__stub_getb67) || defined (__stub___getb67) + choke me + #else + /* Override any gcc2 internal prototype to avoid an error. */ + extern char getb67(); getb67(); + #endif + ; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + { + test -n "$verbose" && \ + echo " defining" CRAY_STACKSEG_END to be "getb67" + echo "#define" CRAY_STACKSEG_END "getb67" >> confdefs.h + DEFS="$DEFS -DCRAY_STACKSEG_END=getb67" + ac_sed_defs="${ac_sed_defs}\${ac_dA}CRAY_STACKSEG_END\${ac_dB}CRAY_STACKSEG_END\${ac_dC}getb67\${ac_dD} + \${ac_uA}CRAY_STACKSEG_END\${ac_uB}CRAY_STACKSEG_END\${ac_uC}getb67\${ac_uD} + \${ac_eA}CRAY_STACKSEG_END\${ac_eB}CRAY_STACKSEG_END\${ac_eC}getb67\${ac_eD} + " + } + + + fi + rm -f conftest* + + fi + rm -f conftest* + + fi + rm -f conftest* + + + fi + rm -f conftest* + + + fi + rm -f conftest* + + if test -n "$ac_alloca_missing"; then + # The SVR3 libPW and SVR4 libucb both contain incompatible functions + # that cause trouble. Some versions do not even contain alloca or + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + ALLOCA=alloca.o + + { + test -n "$verbose" && \ + echo " defining C_ALLOCA" + echo "#define" C_ALLOCA "1" >> confdefs.h + DEFS="$DEFS -DC_ALLOCA=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}C_ALLOCA\${ac_dB}C_ALLOCA\${ac_dC}1\${ac_dD} + \${ac_uA}C_ALLOCA\${ac_uB}C_ALLOCA\${ac_uC}1\${ac_uD} + \${ac_eA}C_ALLOCA\${ac_eB}C_ALLOCA\${ac_eC}1\${ac_eD} + " + } + + + test -n "$silent" || echo "checking stack direction for C alloca" + test -n "$silent" || echo "checking whether cross-compiling" + # If we cannot run a trivial program, we must be cross compiling. + cat > conftest.${ac_ext} </dev/null; then + : + else + cross_compiling=1 + fi + rm -fr conftest* + + if test -n "$cross_compiling" + then + + { + test -n "$verbose" && \ + echo " defining" STACK_DIRECTION to be "0" + echo "#define" STACK_DIRECTION "0" >> confdefs.h + DEFS="$DEFS -DSTACK_DIRECTION=0" + ac_sed_defs="${ac_sed_defs}\${ac_dA}STACK_DIRECTION\${ac_dB}STACK_DIRECTION\${ac_dC}0\${ac_dD} + \${ac_uA}STACK_DIRECTION\${ac_uB}STACK_DIRECTION\${ac_uC}0\${ac_uD} + \${ac_eA}STACK_DIRECTION\${ac_eB}STACK_DIRECTION\${ac_eC}0\${ac_eD} + " + } + + else + cat > conftest.${ac_ext} < addr) ? 1 : -1; + } + main () + { + exit (find_stack_direction() < 0); + } + EOF + eval $ac_compile + if test -s conftest && (./conftest; exit) 2>/dev/null; then + + { + test -n "$verbose" && \ + echo " defining" STACK_DIRECTION to be "1" + echo "#define" STACK_DIRECTION "1" >> confdefs.h + DEFS="$DEFS -DSTACK_DIRECTION=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}STACK_DIRECTION\${ac_dB}STACK_DIRECTION\${ac_dC}1\${ac_dD} + \${ac_uA}STACK_DIRECTION\${ac_uB}STACK_DIRECTION\${ac_uC}1\${ac_uD} + \${ac_eA}STACK_DIRECTION\${ac_eB}STACK_DIRECTION\${ac_eC}1\${ac_eD} + " + } + + + else + + { + test -n "$verbose" && \ + echo " defining" STACK_DIRECTION to be "-1" + echo "#define" STACK_DIRECTION "-1" >> confdefs.h + DEFS="$DEFS -DSTACK_DIRECTION=-1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}STACK_DIRECTION\${ac_dB}STACK_DIRECTION\${ac_dC}-1\${ac_dD} + \${ac_uA}STACK_DIRECTION\${ac_uB}STACK_DIRECTION\${ac_uC}-1\${ac_uD} + \${ac_eA}STACK_DIRECTION\${ac_eB}STACK_DIRECTION\${ac_eC}-1\${ac_eD} + " + } + + fi + fi + rm -fr conftest* + fi + + + # logb and frexp are found in -lm on most systems. + ac_save_LIBS="${LIBS}" + LIBS="${LIBS} -lm" + ac_have_lib="" + test -n "$silent" || echo "checking for -lm" + cat > conftest.${ac_ext} <> confdefs.h + DEFS="$DEFS -DHAVE_LIBM=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_LIBM\${ac_dB}HAVE_LIBM\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_LIBM\${ac_uB}HAVE_LIBM\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_LIBM\${ac_eB}HAVE_LIBM\${ac_eC}1\${ac_eD} + " + } + + LIBS="${LIBS} -lm" + fi + + for ac_func in gettimeofday gethostname dup2 rename closedir mkdir rmdir \ + random lrand48 bcopy bcmp logb frexp fmod drem ftime res_init setsid \ + strerror fpathconf + do + ac_tr_func=HAVE_`echo $ac_func | tr '[a-z]' '[A-Z]'` + test -n "$silent" || echo "checking for ${ac_func}" + cat > conftest.${ac_ext} < + int main() { return 0; } + int t() { + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ + #if defined (__stub_${ac_func}) || defined (__stub___${ac_func}) + choke me + #else + /* Override any gcc2 internal prototype to avoid an error. */ + extern char ${ac_func}(); ${ac_func}(); + #endif + ; return 0; } + EOF + if eval $ac_compile; then + rm -rf conftest* + { + test -n "$verbose" && \ + echo " defining ${ac_tr_func}" + echo "#define" ${ac_tr_func} "1" >> confdefs.h + DEFS="$DEFS -D${ac_tr_func}=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}${ac_tr_func}\${ac_dB}${ac_tr_func}\${ac_dC}1\${ac_dD} + \${ac_uA}${ac_tr_func}\${ac_uB}${ac_tr_func}\${ac_uC}1\${ac_uD} + \${ac_eA}${ac_tr_func}\${ac_eB}${ac_tr_func}\${ac_eC}1\${ac_eD} + " + } + + + fi + rm -f conftest* + done + + + ok_so_far=true + test -n "$silent" || echo "checking for socket" + cat > conftest.${ac_ext} < + int main() { return 0; } + int t() { + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ + #if defined (__stub_socket) || defined (__stub___socket) + choke me + #else + /* Override any gcc2 internal prototype to avoid an error. */ + extern char socket(); socket(); + #endif + ; return 0; } + EOF + if eval $ac_compile; then + : + else + rm -rf conftest* + ok_so_far= + fi + rm -f conftest* + + if test -n "$ok_so_far"; then + test -n "$silent" || echo "checking for netinet/in.h" + cat > conftest.${ac_ext} < + EOF + # Some shells (Coherent) do redirections in the wrong order, so need + # the parens. + ac_err=`eval "($ac_cpp conftest.${ac_ext} >/dev/null) 2>&1"` + if test -z "$ac_err"; then + : + else + rm -rf conftest* + ok_so_far= + fi + rm -f conftest* + + fi + if test -n "$ok_so_far"; then + test -n "$silent" || echo "checking for arpa/inet.h" + cat > conftest.${ac_ext} < + EOF + # Some shells (Coherent) do redirections in the wrong order, so need + # the parens. + ac_err=`eval "($ac_cpp conftest.${ac_ext} >/dev/null) 2>&1"` + if test -z "$ac_err"; then + : + else + rm -rf conftest* + ok_so_far= + fi + rm -f conftest* + + fi + if test -n "$ok_so_far"; then + + { + test -n "$verbose" && \ + echo " defining HAVE_INET_SOCKETS" + echo "#define" HAVE_INET_SOCKETS "1" >> confdefs.h + DEFS="$DEFS -DHAVE_INET_SOCKETS=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_INET_SOCKETS\${ac_dB}HAVE_INET_SOCKETS\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_INET_SOCKETS\${ac_uB}HAVE_INET_SOCKETS\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_INET_SOCKETS\${ac_eB}HAVE_INET_SOCKETS\${ac_eC}1\${ac_eD} + " + } + + fi + + # Set up the CFLAGS for real compilation, so we can substitute it. + CFLAGS="$REAL_CFLAGS" + + + #### Find out which version of Emacs this is. + version=`grep 'defconst[ ]*emacs-version' ${srcdir}/lisp/version.el \ + | sed -e 's/^[^"]*"\([^"]*\)".*$/\1/'` + if [ x"${version}" = x ]; then + echo "${progname}: can't find current emacs version in + \`${srcdir}/lisp/version.el'." >&2 + exit 1 + fi + + if [ -f /usr/lpp/X11/bin/smt.exp ]; then + + + { + test -n "$verbose" && \ + echo " defining HAVE_AIX_SMT_EXP" + echo "#define" HAVE_AIX_SMT_EXP "1" >> confdefs.h + DEFS="$DEFS -DHAVE_AIX_SMT_EXP=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_AIX_SMT_EXP\${ac_dB}HAVE_AIX_SMT_EXP\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_AIX_SMT_EXP\${ac_uB}HAVE_AIX_SMT_EXP\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_AIX_SMT_EXP\${ac_eB}HAVE_AIX_SMT_EXP\${ac_eC}1\${ac_eD} + " + } + + + fi + + #### Specify what sort of things we'll be editing into Makefile and config.h. + ### Use configuration here uncanonicalized to avoid exceeding size limits. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + test -n "$verbose" && \ + echo " defining" EMACS_CONFIGURATION to be ""\"${configuration}\""" + echo "#define" EMACS_CONFIGURATION ""\"${configuration}\""" >> confdefs.h + DEFS="$DEFS -DEMACS_CONFIGURATION="\"${configuration}\""" + ac_sed_defs="${ac_sed_defs}\${ac_dA}EMACS_CONFIGURATION\${ac_dB}EMACS_CONFIGURATION\${ac_dC}"\"${configuration}\""\${ac_dD} + \${ac_uA}EMACS_CONFIGURATION\${ac_uB}EMACS_CONFIGURATION\${ac_uC}"\"${configuration}\""\${ac_uD} + \${ac_eA}EMACS_CONFIGURATION\${ac_eB}EMACS_CONFIGURATION\${ac_eC}"\"${configuration}\""\${ac_eD} + " + } + + + { + test -n "$verbose" && \ + echo " defining" config_machfile to be ""\"${machfile}\""" + echo "#define" config_machfile ""\"${machfile}\""" >> confdefs.h + DEFS="$DEFS -Dconfig_machfile="\"${machfile}\""" + ac_sed_defs="${ac_sed_defs}\${ac_dA}config_machfile\${ac_dB}config_machfile\${ac_dC}"\"${machfile}\""\${ac_dD} + \${ac_uA}config_machfile\${ac_uB}config_machfile\${ac_uC}"\"${machfile}\""\${ac_uD} + \${ac_eA}config_machfile\${ac_eB}config_machfile\${ac_eC}"\"${machfile}\""\${ac_eD} + " + } + + + { + test -n "$verbose" && \ + echo " defining" config_opsysfile to be ""\"${opsysfile}\""" + echo "#define" config_opsysfile ""\"${opsysfile}\""" >> confdefs.h + DEFS="$DEFS -Dconfig_opsysfile="\"${opsysfile}\""" + ac_sed_defs="${ac_sed_defs}\${ac_dA}config_opsysfile\${ac_dB}config_opsysfile\${ac_dC}"\"${opsysfile}\""\${ac_dD} + \${ac_uA}config_opsysfile\${ac_uB}config_opsysfile\${ac_uC}"\"${opsysfile}\""\${ac_uD} + \${ac_eA}config_opsysfile\${ac_eB}config_opsysfile\${ac_eC}"\"${opsysfile}\""\${ac_eD} + " + } + + + { + test -n "$verbose" && \ + echo " defining" LD_SWITCH_X_SITE to be "${LD_SWITCH_X_SITE}" + echo "#define" LD_SWITCH_X_SITE "${LD_SWITCH_X_SITE}" >> confdefs.h + DEFS="$DEFS -DLD_SWITCH_X_SITE=${LD_SWITCH_X_SITE}" + ac_sed_defs="${ac_sed_defs}\${ac_dA}LD_SWITCH_X_SITE\${ac_dB}LD_SWITCH_X_SITE\${ac_dC}${LD_SWITCH_X_SITE}\${ac_dD} + \${ac_uA}LD_SWITCH_X_SITE\${ac_uB}LD_SWITCH_X_SITE\${ac_uC}${LD_SWITCH_X_SITE}\${ac_uD} + \${ac_eA}LD_SWITCH_X_SITE\${ac_eB}LD_SWITCH_X_SITE\${ac_eC}${LD_SWITCH_X_SITE}\${ac_eD} + " + } + + + { + test -n "$verbose" && \ + echo " defining" LD_SWITCH_X_SITE_AUX to be "${LD_SWITCH_X_SITE_AUX}" + echo "#define" LD_SWITCH_X_SITE_AUX "${LD_SWITCH_X_SITE_AUX}" >> confdefs.h + DEFS="$DEFS -DLD_SWITCH_X_SITE_AUX=${LD_SWITCH_X_SITE_AUX}" + ac_sed_defs="${ac_sed_defs}\${ac_dA}LD_SWITCH_X_SITE_AUX\${ac_dB}LD_SWITCH_X_SITE_AUX\${ac_dC}${LD_SWITCH_X_SITE_AUX}\${ac_dD} + \${ac_uA}LD_SWITCH_X_SITE_AUX\${ac_uB}LD_SWITCH_X_SITE_AUX\${ac_uC}${LD_SWITCH_X_SITE_AUX}\${ac_uD} + \${ac_eA}LD_SWITCH_X_SITE_AUX\${ac_eB}LD_SWITCH_X_SITE_AUX\${ac_eC}${LD_SWITCH_X_SITE_AUX}\${ac_eD} + " + } + + + { + test -n "$verbose" && \ + echo " defining" C_SWITCH_X_SITE to be "${C_SWITCH_X_SITE}" + echo "#define" C_SWITCH_X_SITE "${C_SWITCH_X_SITE}" >> confdefs.h + DEFS="$DEFS -DC_SWITCH_X_SITE=${C_SWITCH_X_SITE}" + ac_sed_defs="${ac_sed_defs}\${ac_dA}C_SWITCH_X_SITE\${ac_dB}C_SWITCH_X_SITE\${ac_dC}${C_SWITCH_X_SITE}\${ac_dD} + \${ac_uA}C_SWITCH_X_SITE\${ac_uB}C_SWITCH_X_SITE\${ac_uC}${C_SWITCH_X_SITE}\${ac_uD} + \${ac_eA}C_SWITCH_X_SITE\${ac_eB}C_SWITCH_X_SITE\${ac_eC}${C_SWITCH_X_SITE}\${ac_eD} + " + } + + + { + test -n "$verbose" && \ + echo " defining" UNEXEC_SRC to be "${UNEXEC_SRC}" + echo "#define" UNEXEC_SRC "${UNEXEC_SRC}" >> confdefs.h + DEFS="$DEFS -DUNEXEC_SRC=${UNEXEC_SRC}" + ac_sed_defs="${ac_sed_defs}\${ac_dA}UNEXEC_SRC\${ac_dB}UNEXEC_SRC\${ac_dC}${UNEXEC_SRC}\${ac_dD} + \${ac_uA}UNEXEC_SRC\${ac_uB}UNEXEC_SRC\${ac_uC}${UNEXEC_SRC}\${ac_uD} + \${ac_eA}UNEXEC_SRC\${ac_eB}UNEXEC_SRC\${ac_eC}${UNEXEC_SRC}\${ac_eD} + " + } + + + + if [ "${HAVE_X_WINDOWS}" = "yes" ] ; then + + { + test -n "$verbose" && \ + echo " defining HAVE_X_WINDOWS" + echo "#define" HAVE_X_WINDOWS "1" >> confdefs.h + DEFS="$DEFS -DHAVE_X_WINDOWS=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_X_WINDOWS\${ac_dB}HAVE_X_WINDOWS\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_X_WINDOWS\${ac_uB}HAVE_X_WINDOWS\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_X_WINDOWS\${ac_eB}HAVE_X_WINDOWS\${ac_eC}1\${ac_eD} + " + } + + fi + if [ "${USE_X_TOOLKIT}" != "none" ] ; then + + { + test -n "$verbose" && \ + echo " defining USE_X_TOOLKIT" + echo "#define" USE_X_TOOLKIT "1" >> confdefs.h + DEFS="$DEFS -DUSE_X_TOOLKIT=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}USE_X_TOOLKIT\${ac_dB}USE_X_TOOLKIT\${ac_dC}1\${ac_dD} + \${ac_uA}USE_X_TOOLKIT\${ac_uB}USE_X_TOOLKIT\${ac_uC}1\${ac_uD} + \${ac_eA}USE_X_TOOLKIT\${ac_eB}USE_X_TOOLKIT\${ac_eC}1\${ac_eD} + " + } + + fi + if [ "${HAVE_X11}" = "yes" ] ; then + + { + test -n "$verbose" && \ + echo " defining HAVE_X11" + echo "#define" HAVE_X11 "1" >> confdefs.h + DEFS="$DEFS -DHAVE_X11=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_X11\${ac_dB}HAVE_X11\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_X11\${ac_uB}HAVE_X11\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_X11\${ac_eB}HAVE_X11\${ac_eC}1\${ac_eD} + " + } + + fi + if [ "${HAVE_XFREE386}" = "yes" ] ; then + + { + test -n "$verbose" && \ + echo " defining HAVE_XFREE386" + echo "#define" HAVE_XFREE386 "1" >> confdefs.h + DEFS="$DEFS -DHAVE_XFREE386=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_XFREE386\${ac_dB}HAVE_XFREE386\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_XFREE386\${ac_uB}HAVE_XFREE386\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_XFREE386\${ac_eB}HAVE_XFREE386\${ac_eC}1\${ac_eD} + " + } + + fi + if [ "${HAVE_X_MENU}" = "yes" ] ; then + + { + test -n "$verbose" && \ + echo " defining HAVE_X_MENU" + echo "#define" HAVE_X_MENU "1" >> confdefs.h + DEFS="$DEFS -DHAVE_X_MENU=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}HAVE_X_MENU\${ac_dB}HAVE_X_MENU\${ac_dC}1\${ac_dD} + \${ac_uA}HAVE_X_MENU\${ac_uB}HAVE_X_MENU\${ac_uC}1\${ac_uD} + \${ac_eA}HAVE_X_MENU\${ac_eB}HAVE_X_MENU\${ac_eC}1\${ac_eD} + " + } + + fi + if [ "${GNU_MALLOC}" = "yes" ] ; then + + { + test -n "$verbose" && \ + echo " defining GNU_MALLOC" + echo "#define" GNU_MALLOC "1" >> confdefs.h + DEFS="$DEFS -DGNU_MALLOC=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}GNU_MALLOC\${ac_dB}GNU_MALLOC\${ac_dC}1\${ac_dD} + \${ac_uA}GNU_MALLOC\${ac_uB}GNU_MALLOC\${ac_uC}1\${ac_uD} + \${ac_eA}GNU_MALLOC\${ac_eB}GNU_MALLOC\${ac_eC}1\${ac_eD} + " + } + + fi + if [ "${REL_ALLOC}" = "yes" ] ; then + + { + test -n "$verbose" && \ + echo " defining REL_ALLOC" + echo "#define" REL_ALLOC "1" >> confdefs.h + DEFS="$DEFS -DREL_ALLOC=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}REL_ALLOC\${ac_dB}REL_ALLOC\${ac_dC}1\${ac_dD} + \${ac_uA}REL_ALLOC\${ac_uB}REL_ALLOC\${ac_uC}1\${ac_uD} + \${ac_eA}REL_ALLOC\${ac_eB}REL_ALLOC\${ac_eC}1\${ac_eD} + " + } + + fi + if [ "${LISP_FLOAT_TYPE}" = "yes" ] ; then + + { + test -n "$verbose" && \ + echo " defining LISP_FLOAT_TYPE" + echo "#define" LISP_FLOAT_TYPE "1" >> confdefs.h + DEFS="$DEFS -DLISP_FLOAT_TYPE=1" + ac_sed_defs="${ac_sed_defs}\${ac_dA}LISP_FLOAT_TYPE\${ac_dB}LISP_FLOAT_TYPE\${ac_dC}1\${ac_dD} + \${ac_uA}LISP_FLOAT_TYPE\${ac_uB}LISP_FLOAT_TYPE\${ac_uC}1\${ac_uD} + \${ac_eA}LISP_FLOAT_TYPE\${ac_eB}LISP_FLOAT_TYPE\${ac_eC}1\${ac_eD} + " + } + + fi + + # ====================== Developer's configuration ======================= + + # The following assignments make sense if you're running Emacs on a single + # machine, one version at a time, and you want changes to the lisp and etc + # directories in the source tree to show up immediately in your working + # environment. It saves a great deal of disk space by not duplicating the + # lisp and etc directories. + + if [ "$run_in_place" = "1" ]; then + lispdir='${srcdir}/lisp' + locallisppath='${srcdir}/site-lisp' + etcdir='${srcdir}/etc' + lockdir='${srcdir}/lock' + # We used to make archlibdir and docdir absolute, + # but that caused trouble with automounters. + archlibdir='${srcdir}/lib-src' + docdir='${srcdir}/etc' + infodir='${srcdir}/info' + elif [ "$single_tree" = "1" ]; then + if [ "$exec_prefix_specified" = "" ]; then + exec_prefix='${prefix}' + fi + if [ "$bindir_specified" = "" ]; then + bindir='${exec_prefix}/bin/${configuration}' + fi + if [ "$datadir_specified" = "" ]; then + datadir='${prefix}/common' + fi + if [ "$statedir_specified" = "" ]; then + statedir='${prefix}/common' + fi + if [ "$libdir_specified" = "" ]; then + libdir='${bindir}' + fi + if [ "$lispdir_specified" = "" ]; then + lispdir='${prefix}/common/lisp' + fi + if [ "$locallisppath_specified" = "" ]; then + locallisppath='${prefix}/common/site-lisp' + fi + if [ "$lockdir_specified" = "" ]; then + lockdir='${prefix}/common/lock' + fi + if [ "$archlibdir_specified" = "" ]; then + archlibdir='${libdir}/etc' + fi + if [ "$etcdir_specified" = "" ]; then + etcdir='${prefix}/common/data' + fi + if [ "$docdir_specified" = "" ]; then + docdir='${prefix}/common/data' + fi + fi + + #### Report on what we decided to do. + echo " + + Configured for \`${canonical}'. + + Where should the build process find the source code? ${srcdir} + What operating system and machine description files should Emacs use? + \`${opsysfile}' and \`${machfile}' + What compiler should emacs be built with? ${CC} ${CFLAGS} + Should Emacs use the GNU version of malloc? ${GNU_MALLOC}${GNU_MALLOC_reason} + Should Emacs use the relocating allocator for buffers? ${REL_ALLOC} + What window system should Emacs use? ${window_system} + What toolkit should Emacs use? ${USE_X_TOOLKIT}${x_includes+ + Where do we find X Windows header files? }${x_includes}${x_libraries+ + Where do we find X Windows libraries? }${x_libraries} + + " + + # Remove any trailing slashes in these variables. + test -n "${prefix}" && + prefix=`echo "${prefix}" | sed 's,\([^/]\)/*$,\1,'` + test -n "${exec_prefix}" && + exec_prefix=`echo "${exec_prefix}" | sed 's,\([^/]\)/*$,\1,'` + + + # The preferred way to propogate these variables is regular @ substitutions. + if test -n "$prefix"; then + ac_prsub="s%^prefix\\([ ]*\\)=\\([ ]*\\).*$%prefix\\1=\\2$prefix%" + else + prefix=/usr/local + fi + if test -n "$exec_prefix"; then + ac_prsub="$ac_prsub + s%^exec_prefix\\([ ]*\\)=\\([ ]*\\).*$%exec_prefix\\1=\\2$exec_prefix%" + else + exec_prefix='${prefix}' # Let make expand it. + fi + + # Any assignment to VPATH causes Sun make to only execute + # the first set of double-colon rules, so remove it if not needed. + # If there is a colon in the path, we need to keep it. + if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' + fi + + # Quote sed substitution magic chars in DEFS. + cat >conftest.def < config.status </dev/null | sed 1q`: + # + # $0 $configure_args + + ac_cs_usage="Usage: config.status [--recheck] [--version] [--help]" + for ac_option + do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo running \${CONFIG_SHELL-/bin/sh} $0 $configure_args --no-create + exec \${CONFIG_SHELL-/bin/sh} $0 $configure_args --no-create ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "config.status generated by autoconf version 1.11" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac + done + + trap 'rm -fr Makefile lib-src/Makefile.in oldXMenu/Makefile lwlib/Makefile src/Makefile.in src/config.h conftest*; exit 1' 1 2 15 + CC='$CC' + LN_S='$LN_S' + CPP='$CPP' + INSTALL='$INSTALL' + INSTALL_PROGRAM='$INSTALL_PROGRAM' + INSTALL_DATA='$INSTALL_DATA' + YACC='$YACC' + SET_MAKE='$SET_MAKE' + ALLOCA='$ALLOCA' + version='$version' + configuration='$configuration' + srcdir='$srcdir' + prefix='$prefix' + exec_prefix='$exec_prefix' + bindir='$bindir' + datadir='$datadir' + statedir='$statedir' + libdir='$libdir' + mandir='$mandir' + infodir='$infodir' + lispdir='$lispdir' + locallisppath='$locallisppath' + lisppath='$lisppath' + etcdir='$etcdir' + lockdir='$lockdir' + archlibdir='$archlibdir' + docdir='$docdir' + c_switch_system='$c_switch_system' + c_switch_machine='$c_switch_machine' + LD_SWITCH_X_SITE='$LD_SWITCH_X_SITE' + LD_SWITCH_X_SITE_AUX='$LD_SWITCH_X_SITE_AUX' + C_SWITCH_X_SITE='$C_SWITCH_X_SITE' + CFLAGS='$CFLAGS' + X_TOOLKIT_TYPE='$X_TOOLKIT_TYPE' + machfile='$machfile' + opsysfile='$opsysfile' + LIBS='$LIBS' + top_srcdir='$top_srcdir' + ac_prsub='$ac_prsub' + ac_vpsub='$ac_vpsub' + extrasub='$extrasub' + EOF + cat >> config.status <<\EOF + + ac_given_srcdir=$srcdir + + CONFIG_FILES=${CONFIG_FILES-"Makefile lib-src/Makefile.in oldXMenu/Makefile lwlib/Makefile src/Makefile.in"} + for ac_file in .. ${CONFIG_FILES}; do if test "x$ac_file" != x..; then + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/$ac_dir" + else + ac_dir_suffix= + fi + + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dir_suffix"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + comment_str="Generated automatically from `echo $ac_file|sed 's|.*/||'`.in by configure." + case "$ac_file" in + *.c | *.h | *.C | *.cc | *.m ) echo "/* $comment_str */" > "$ac_file" ;; + * ) echo "# $comment_str" > "$ac_file" ;; + esac + sed -e " + $ac_prsub + $ac_vpsub + $extrasub + s%@CC@%$CC%g + s%@LN_S@%$LN_S%g + s%@CPP@%$CPP%g + s%@INSTALL@%$INSTALL%g + s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g + s%@INSTALL_DATA@%$INSTALL_DATA%g + s%@YACC@%$YACC%g + s%@SET_MAKE@%$SET_MAKE%g + s%@ALLOCA@%$ALLOCA%g + s%@version@%$version%g + s%@configuration@%$configuration%g + s%@srcdir@%$srcdir%g + s%@prefix@%$prefix%g + s%@exec_prefix@%$exec_prefix%g + s%@bindir@%$bindir%g + s%@datadir@%$datadir%g + s%@statedir@%$statedir%g + s%@libdir@%$libdir%g + s%@mandir@%$mandir%g + s%@infodir@%$infodir%g + s%@lispdir@%$lispdir%g + s%@locallisppath@%$locallisppath%g + s%@lisppath@%$lisppath%g + s%@etcdir@%$etcdir%g + s%@lockdir@%$lockdir%g + s%@archlibdir@%$archlibdir%g + s%@docdir@%$docdir%g + s%@c_switch_system@%$c_switch_system%g + s%@c_switch_machine@%$c_switch_machine%g + s%@LD_SWITCH_X_SITE@%$LD_SWITCH_X_SITE%g + s%@LD_SWITCH_X_SITE_AUX@%$LD_SWITCH_X_SITE_AUX%g + s%@C_SWITCH_X_SITE@%$C_SWITCH_X_SITE%g + s%@CFLAGS@%$CFLAGS%g + s%@X_TOOLKIT_TYPE@%$X_TOOLKIT_TYPE%g + s%@machfile@%$machfile%g + s%@opsysfile@%$opsysfile%g + s%@LIBS@%$LIBS%g + s%@top_srcdir@%$top_srcdir%g + s%@DEFS@%-DHAVE_CONFIG_H%" $ac_given_srcdir/${ac_file}.in >> $ac_file + fi; done + + # These sed commands are put into ac_sed_defs when defining a macro. + # They are broken into pieces to make the sed script easier to manage. + # They are passed to sed as "A NAME B NAME C VALUE D", where NAME + # is the cpp macro being defined and VALUE is the value it is being given. + # Each defining turns into a single global substitution command. + # Hopefully no one uses "!" as a variable value. + # Other candidates for the sed separators, like , and @, do get used. + # + # ac_d sets the value in "#define NAME VALUE" lines. + ac_dA='s!^\([ ]*\)#\([ ]*define[ ][ ]*\)' + ac_dB='\([ ][ ]*\)[^ ]*!\1#\2' + ac_dC='\3' + ac_dD='!g' + # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". + ac_uA='s!^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' + ac_uB='\([ ]\)!\1#\2define\3' + ac_uC=' ' + ac_uD='\4!g' + # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". + ac_eA='s!^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' + ac_eB='$!\1#\2define\3' + ac_eC=' ' + ac_eD='!g' + rm -f conftest.sed + EOF + # Turn off quoting long enough to insert the sed commands. + rm -f conftest.sh + cat > conftest.sh < conftest.s1 # Like head -9. + sed 1,${ac_max_sh_lines}d conftest.sh > conftest.s2 # Like tail +10. + # Write a limited-size here document to append to conftest.sed. + echo 'cat >> conftest.sed <> config.status + cat conftest.s1 >> config.status + echo 'CONFEOF' >> config.status + rm -f conftest.s1 conftest.sh + mv conftest.s2 conftest.sh + done + rm -f conftest.sh + + # Now back to your regularly scheduled config.status. + cat >> config.status <<\EOF + # This sed command replaces #undef's with comments. This is necessary, for + # example, in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it in + # src/config.h. + cat >> conftest.sed <<\CONFEOF + s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, + CONFEOF + rm -f conftest.h + # Break up the sed commands because old seds have small limits. + ac_max_sed_lines=20 + + CONFIG_HEADERS=${CONFIG_HEADERS-"src/config.h"} + for ac_file in .. ${CONFIG_HEADERS}; do if test "x$ac_file" != x..; then + echo creating $ac_file + + cp $ac_given_srcdir/$ac_file.in conftest.h1 + cp conftest.sed conftest.stm + while : + do + ac_lines=`grep -c . conftest.stm` + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + rm -f conftest.s1 conftest.s2 conftest.h2 + sed ${ac_max_sed_lines}q conftest.stm > conftest.s1 # Like head -20. + sed 1,${ac_max_sed_lines}d conftest.stm > conftest.s2 # Like tail +21. + sed -f conftest.s1 < conftest.h1 > conftest.h2 + rm -f conftest.s1 conftest.h1 conftest.stm + mv conftest.h2 conftest.h1 + mv conftest.s2 conftest.stm + done + rm -f conftest.stm conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.h1 >> conftest.h + rm -f conftest.h1 + if cmp -s $ac_file conftest.h 2>/dev/null; then + # The file exists and we would not be changing it. + echo "$ac_file is unchanged" + rm -f conftest.h + else + rm -f $ac_file + mv conftest.h $ac_file + fi + fi; done + rm -f conftest.sed + + + + + # Build src/Makefile from ${srcdir}/src/Makefile.in. This must be done + # after src/config.h is built, since we rely on that file. + + # Now get this: Some word that is part of the ${srcdir} directory name + # or the ${configuration} value might, just might, happen to be an + # identifier like `sun4' or `i386' or something, and be predefined by + # the C preprocessor to some helpful value like 1, or maybe the empty + # string. Needless to say consequent macro substitutions are less + # than conducive to the makefile finding the correct directory. + undefs="`echo $top_srcdir $configuration $canonical | + sed -e 's/[^a-zA-Z0-9_]/ /g' -e 's/^/ /' -e 's/ *$//' \ + -e 's/ */ -U/g' -e 's/-U[0-9][^ ]*//g' \ + `" + + echo creating lib-src/Makefile + ( cd lib-src + rm -f junk.c junk1.c junk2.c + sed -e '/start of cpp stuff/q' \ + < Makefile.in > junk1.c + sed -e '1,/start of cpp stuff/d'\ + -e 's@/\*\*/#\(.*\)$@/* \1 */@' \ + < Makefile.in > junk.c + $CPP $undefs -I. -I$top_srcdir/src $CPPFLAGS junk.c | \ + sed -e 's/^ / /' -e '/^#/d' -e '/^[ ]*$/d' > junk2.c + cat junk1.c junk2.c > Makefile.new + rm -f junk.c junk1.c junk2.c + chmod 444 Makefile.new + mv -f Makefile.new Makefile + ) + + echo creating src/Makefile + ( cd src + rm -f junk.c junk1.c junk2.c + sed -e '/start of cpp stuff/q' \ + < Makefile.in > junk1.c + sed -e '1,/start of cpp stuff/d'\ + -e 's@/\*\*/#\(.*\)$@/* \1 */@' \ + < Makefile.in > junk.c + $CPP $undefs -I. -I$top_srcdir/src $CPPFLAGS junk.c | \ + sed -e 's/^ / /' -e '/^#/d' -e '/^[ ]*$/d' > junk2.c + cat junk1.c junk2.c > Makefile.new + rm -f junk.c junk1.c junk2.c + chmod 444 Makefile.new + mv -f Makefile.new Makefile + ) + exit 0 + EOF + chmod +x config.status + # Some shells look in PATH for config.status without the "./". + test -n "$no_create" || ${CONFIG_SHELL-/bin/sh} ./config.status + diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/configure.in emacs-19.26/configure.in *** emacs-19.25/configure.in Fri May 27 02:57:54 1994 --- emacs-19.26/configure.in Sun Sep 4 03:02:03 1994 *************** *** 450,454 **** ### Canonicalize the configuration name. ! echo "Checking the configuration name." if canonical=`${srcdir}/config.sub "${configuration}"` ; then : ; else exit $? --- 450,454 ---- ### Canonicalize the configuration name. ! echo "Checking the configuration name" if canonical=`${srcdir}/config.sub "${configuration}"` ; then : ; else exit $? *************** *** 481,484 **** --- 481,498 ---- case "${canonical}" in + ## NetBSD ports + *-*-netbsd* ) + opsys=netbsd + case "${canonical}" in + i[345]86-*-netbsd*) machine=intel386 ;; + m68k-*-netbsd*) + # This is somewhat bogus. + machine=hp9000s300 ;; + mips-*-netbsd*) machine=pmax ;; + ns32k-*-netbsd*) machine=ns32000 ;; + sparc-*-netbsd*) machine=sparc ;; + esac + ;; + ## Alliant machines ## Strictly speaking, we need the version of the alliant operating *************** *** 554,563 **** ## Convex ! *-convex-bsd* ) machine=convex opsys=bsd4-3 ;; ## Cubix QBx/386 ! i386-cubix-sysv* ) machine=intel386 opsys=usg5-3 ;; --- 568,579 ---- ## Convex ! *-convex-bsd* | *-convex-convexos* ) machine=convex opsys=bsd4-3 + ## Prevents suprious white space in makefiles - d.m.cooke@larc.nasa.gov + NON_GNU_CPP="cc -E -P" ;; ## Cubix QBx/386 ! i[345]86-cubix-sysv* ) machine=intel386 opsys=usg5-3 ;; *************** *** 663,669 **** machine=hp9000s300 opsys=bsd4-3 ;; - m68*-hp-netbsd* ) - machine=hp9000s300 opsys=netbsd - ;; ## HP/UX 7, 8 and 9 are supported on these machines. m68*-hp-hpux* ) --- 679,682 ---- *************** *** 714,721 **** ## IBM machines ! i386-ibm-aix1.1* ) machine=ibmps2-aix opsys=usg5-2-2 ;; ! i386-ibm-aix1.[23]* | i386-ibm-aix* ) machine=ibmps2-aix opsys=usg5-3 ;; --- 727,734 ---- ## 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 ;; *************** *** 723,733 **** machine=ibm370aix opsys=usg5-3 ;; ! rs6000-ibm-aix3.1* ) machine=ibmrs6000 opsys=aix3-1 ;; ! rs6000-ibm-aix3.2.5) machine=ibmrs6000 opsys=aix3-2-5 ;; ! rs6000-ibm-aix3.2* | rs6000-ibm-aix* ) machine=ibmrs6000 opsys=aix3-2 ;; --- 736,746 ---- machine=ibm370aix opsys=usg5-3 ;; ! rs6000-ibm-aix3.1* | powerpc-ibm-aix3.1* ) machine=ibmrs6000 opsys=aix3-1 ;; ! rs6000-ibm-aix3.2.5 | powerpc-ibm-aix3.2.5 ) machine=ibmrs6000 opsys=aix3-2-5 ;; ! rs6000-ibm-aix* | powerpc-ibm-aix* ) machine=ibmrs6000 opsys=aix3-2 ;; *************** *** 763,767 **** ## Intel 386 machines where we do care about the manufacturer ! i[34]86-intsys-sysv* ) machine=is386 opsys=usg5-2-2 ;; --- 776,780 ---- ## Intel 386 machines where we do care about the manufacturer ! i[345]86-intsys-sysv* ) machine=is386 opsys=usg5-2-2 ;; *************** *** 768,772 **** ## Prime EXL ! i386-prime-sysv* ) machine=i386 opsys=usg5-3 ;; --- 781,785 ---- ## Prime EXL ! i[345]86-prime-sysv* ) machine=i386 opsys=usg5-3 ;; *************** *** 773,777 **** ## Sequent Symmetry ! i386-sequent-bsd* ) machine=symmetry opsys=bsd4-3 ;; --- 786,790 ---- ## Sequent Symmetry ! i[345]86-sequent-bsd* ) machine=symmetry opsys=bsd4-3 ;; *************** *** 779,783 **** ## Unspecified sysv on an ncr machine defaults to svr4.2. ## (Plain usg5-4 doesn't turn on POSIX signals, which we need.) ! i[34]86-ncr-sysv* ) machine=intel386 opsys=usg5-4-2 ;; --- 792,796 ---- ## 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=intel386 opsys=usg5-4-2 ;; *************** *** 786,789 **** --- 799,804 ---- i860-*-sysv4* ) machine=i860 opsys=usg5-4 + NON_GNU_CC="/bin/cc" # Ie, not the one in /usr/ucb/cc. + NON_GNU_CPP="/usr/ccs/lib/cpp" # cc -E tokenizes macro expansion. ;; *************** *** 826,830 **** ## NeXT ! m68*-next-* | i[34]86-next-* ) machine=next opsys=mach2 ;; --- 841,845 ---- ## NeXT ! m68*-next-* | i[345]86-next-* ) machine=next opsys=mach2 ;; *************** *** 877,881 **** machine=mips-siemens opsys=usg5-4 NON_GNU_CC=/usr/ccs/bin/cc ! NON_GNU_CPP="/usr/ccs/bin/cc -E" ;; --- 892,896 ---- machine=mips-siemens opsys=usg5-4 NON_GNU_CC=/usr/ccs/bin/cc ! NON_GNU_CPP=/usr/ccs/lib/cpp ;; *************** *** 909,917 **** machine=news opsys=bsd4-3 ;; ! mips-sony-bsd* ) machine=news-risc opsys=bsd4-3 ;; mips-sony-newsos* ) ! machine=mips opsys=newsos5 ;; --- 924,932 ---- machine=news opsys=bsd4-3 ;; ! mips-sony-bsd* | mips-sony-newsos4* ) machine=news-risc opsys=bsd4-3 ;; mips-sony-newsos* ) ! machine=news-risc opsys=newsos5 ;; *************** *** 922,926 **** ## Suns ! *-sun-sunos* | *-sun-bsd* | *-sun-solaris* ) case "${canonical}" in m68*-sunos1* ) machine=sun1 ;; --- 937,941 ---- ## Suns ! *-sun-sunos* | *-sun-bsd* | *-sun-solaris* | i[345]86-*-solaris2* | i[345]86-*-sunos5* ) case "${canonical}" in m68*-sunos1* ) machine=sun1 ;; *************** *** 927,931 **** m68*-sunos2* ) machine=sun2 ;; m68* ) machine=sun3 ;; ! i[34]86* ) machine=sun386 ;; sparc* ) machine=sparc ;; * ) unported=true ;; --- 942,947 ---- m68*-sunos2* ) machine=sun2 ;; m68* ) machine=sun3 ;; ! i[345]86-sun-sunos[34]* ) machine=sun386 ;; ! i[345]86-*-* ) machine=intel386 ;; sparc* ) machine=sparc ;; * ) unported=true ;; *************** *** 933,937 **** case "${canonical}" in ## The Sun386 didn't get past 4.0. ! i386-*-sunos4 ) opsys=sunos4-0 ;; *-sunos4.0* ) opsys=sunos4-0 ;; *-sunos4.1.3* ) opsys=sunos4-1-3 --- 949,953 ---- 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* ) opsys=sunos4-1-3 *************** *** 948,951 **** --- 964,971 ---- NON_GNU_CPP=/usr/ccs/lib/cpp ;; + *-sunos5.4* | *-solaris2.4* ) + opsys=sol2-4 + NON_GNU_CPP=/usr/ccs/lib/cpp + ;; *-sunos5* | *-solaris* ) opsys=sol2 *************** *** 1007,1011 **** *-bsd4.2* | *-ultrix[0-3].* | *-ultrix4.0* ) opsys=bsd4-2 ;; *-bsd4.3* | *-ultrix* ) opsys=bsd4-3 ;; ! *-bsd386* ) opsys=bsd386 ;; *-sysv[01]* | *-sysvr[01]* ) opsys=usg5-0 ;; *-sysv2* | *-sysvr2* ) opsys=usg5-2 ;; --- 1027,1031 ---- *-bsd4.2* | *-ultrix[0-3].* | *-ultrix4.0* ) opsys=bsd4-2 ;; *-bsd4.3* | *-ultrix* ) opsys=bsd4-3 ;; ! *-bsd386* | *-bsdi* ) opsys=bsd386 ;; *-sysv[01]* | *-sysvr[01]* ) opsys=usg5-0 ;; *-sysv2* | *-sysvr2* ) opsys=usg5-2 ;; *************** *** 1028,1032 **** ## Intel 386 machines where we don't care about the manufacturer ! i[34]86-*-* ) machine=intel386 case "${canonical}" in --- 1048,1052 ---- ## Intel 386 machines where we don't care about the manufacturer ! i[345]86-*-* ) machine=intel386 case "${canonical}" in *************** *** 1039,1047 **** *-xenix* ) opsys=xenix ;; *-linux* ) opsys=linux ;; ! *-sco3.2v4* ) opsys=sco4 ;; ! *-bsd386* ) opsys=bsd386 ;; *-386bsd* ) opsys=386bsd ;; *-freebsd* ) opsys=freebsd ;; - *-netbsd* ) opsys=netbsd ;; *-nextstep* ) opsys=mach2 ;; ## Otherwise, we'll fall through to the generic opsys code at the bottom. --- 1059,1066 ---- *-xenix* ) opsys=xenix ;; *-linux* ) opsys=linux ;; ! *-sco3.2v4* ) opsys=sco4 ; NON_GNU_CPP=/lib/cpp ;; ! *-bsd386* | *-bsdi* ) opsys=bsd386 ;; *-386bsd* ) opsys=386bsd ;; *-freebsd* ) opsys=freebsd ;; *-nextstep* ) opsys=mach2 ;; ## Otherwise, we'll fall through to the generic opsys code at the bottom. *************** *** 1187,1191 **** #### Choose a window system. ! echo "Checking window system." window_system='' --- 1206,1210 ---- #### Choose a window system. ! echo "checking for specified window system" window_system='' *************** *** 1319,1326 **** #### Extract some information from the operating system and machine files. ! echo "Examining the machine- and system-dependent files to find out" echo " - which libraries the lib-src programs will want, and" ! echo " - whether the GNU malloc routines are usable." ### It's not important that this name contain the PID; you can't run ### two configures in the same directory and have anything work --- 1338,1355 ---- #### Extract some information from the operating system and machine files. ! echo "examining the machine- and system-dependent files to find out" echo " - which libraries the lib-src programs will want, and" ! echo " - whether the GNU malloc routines are usable" ! ! ### First figure out CFLAGS (which we use for running the compiler here) ! ### and REAL_CFLAGS (which we use for real compilation). ! ### 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 Linux needs them to be different because it treats -g ! ### as implying static linking. + ### If the CFLAGS env var is specified, we use that value + ### instead of the default. + ### It's not important that this name contain the PID; you can't run ### two configures in the same directory and have anything work *************** *** 1380,1383 **** --- 1409,1415 ---- #endif + #ifdef THIS_IS_CONFIGURE + + /* Get the CFLAGS for tests in configure. */ #ifdef __GNUC__ configure___ CFLAGS=C_DEBUG_SWITCH C_OPTIMIZE_SWITCH '${CFLAGS}' *************** *** 1385,1388 **** --- 1417,1431 ---- configure___ CFLAGS=C_DEBUG_SWITCH '${CFLAGS}' #endif + + #else /* not THIS_IS_CONFIGURE */ + + /* Get the CFLAGS for real compilation. */ + #ifdef __GNUC__ + configure___ REAL_CFLAGS=C_DEBUG_SWITCH C_OPTIMIZE_SWITCH '${CFLAGS}' + #else + configure___ REAL_CFLAGS=C_DEBUG_SWITCH '${CFLAGS}' + #endif + + #endif /* not THIS_IS_CONFIGURE */ ' > ${tempcname} # The value of CPP is a quoted variable reference, so we need to do this *************** *** 1392,1395 **** --- 1435,1445 ---- | grep 'configure___' \ | sed -e 's/^configure___ \([^=]*=\)\(.*\)$/\1"\2"/'` + if [ "x$CFLAGS" = x ]; then + eval `${CPP} -Isrc -DTHIS_IS_CONFIGURE ${tempcname} \ + | grep 'configure___' \ + | sed -e 's/^configure___ \([^=]*=\)\(.*\)$/\1"\2"/'` + else + REAL_CFLAGS="$CFLAGS" + fi rm ${tempcname} *************** *** 1436,1440 **** # We change CFLAGS temporarily so that C_SWITCH_X_SITE gets used # for the tests that follow. - orig_cflags="$CFLAGS" if test "${HAVE_X11}" = "yes"; then --- 1486,1489 ---- *************** *** 1457,1460 **** --- 1506,1521 ---- fi + # If netdb.h doesn't declare h_errno, we must declare it by hand. + AC_COMPILE_CHECK(declaration of h_errno in netdb.h, + [#include ], + [ + int + foo () + { + return h_errno; + } + ], + AC_DEFINE(HAVE_H_ERRNO)) + AC_ALLOCA *************** *** 1462,1467 **** AC_HAVE_LIBRARY(-lm) AC_HAVE_FUNCS(gettimeofday gethostname dup2 rename closedir mkdir rmdir \ ! random bcopy bcmp logb frexp fmod drem ftime res_init setsid strerror \ ! fpathconf) ok_so_far=true --- 1523,1528 ---- AC_HAVE_LIBRARY(-lm) AC_HAVE_FUNCS(gettimeofday gethostname dup2 rename closedir mkdir rmdir \ ! random lrand48 bcopy bcmp logb frexp fmod drem ftime res_init setsid \ ! strerror fpathconf) ok_so_far=true *************** *** 1477,1482 **** fi ! # Restore the original CFLAGS value. ! CFLAGS="$orig_cflags" [ --- 1538,1543 ---- fi ! # Set up the CFLAGS for real compilation, so we can substitute it. ! CFLAGS="$REAL_CFLAGS" [ diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/etc/ChangeLog emacs-19.26/etc/ChangeLog *** emacs-19.25/etc/ChangeLog Mon May 30 07:30:52 1994 --- emacs-19.26/etc/ChangeLog Wed Sep 7 03:57:00 1994 *************** *** 1,2 **** --- 1,10 ---- + Wed Sep 7 03:53:50 1994 Richard Stallman + + * Version 19.26 released. + + Sun Jul 3 15:30:51 1994 Richard Stallman (rms@gnu.ai.mit.edu) + + * TUTORIAL: Talk about flow control along with C-x C-s and C-s. + Mon May 30 04:33:36 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/etc/FTP emacs-19.26/etc/FTP *** emacs-19.25/etc/FTP Sun May 29 15:19:01 1994 --- emacs-19.26/etc/FTP Mon Aug 15 19:02:05 1994 *************** *** 138,143 **** vixen.cso.uiuc.edu:/gnu, mrcnext.cso.uiuc.edu:/pub/gnu, jaguar.utah.edu:/gnustuff, gatekeeper.dec.com:/pub/GNU, ! labrea.stanford.edu, ftp.cs.widener.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.unicamp.br:/pub/gnu (Brazil manual mirror, --- 138,143 ---- vixen.cso.uiuc.edu:/gnu, mrcnext.cso.uiuc.edu:/pub/gnu, 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.unicamp.br:/pub/gnu (Brazil manual mirror, *************** *** 147,151 **** (South Africa), 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, 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 --- 147,151 ---- (South Africa), 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 *************** *** 157,164 **** 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), archive.eu.net (Europe ! 192.16.202.1), cair.kaist.ac.kr:/pub/gnu (Korea 143.248.11.170), ! 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). Please --- 157,165 ---- 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.kaist.ac.kr:/pub/gnu (Korea ! 143.248.11.170), 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). Please diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/etc/MACHINES emacs-19.26/etc/MACHINES *** emacs-19.25/etc/MACHINES Sat May 28 14:28:23 1994 --- emacs-19.26/etc/MACHINES Mon Sep 5 21:16:13 1994 *************** *** 37,41 **** Alliant FX/2800 (i860-alliant-bsd) ! Known to work with 18.58 and OS version 2.2, compiler version 1.3. Altos 3068 (m68k-altos-sysv) --- 37,41 ---- Alliant FX/2800 (i860-alliant-bsd) ! Known to work with 19.26 and OS version 2.2, compiler version 1.3. Altos 3068 (m68k-altos-sysv) *************** *** 184,188 **** c38-convex-bsd) ! 18.53 supposedly to work. Cubix QBx/386 (i386-cubix-sysv) --- 184,188 ---- c38-convex-bsd) ! Support updated and residual bugs fixed in 19.26. Cubix QBx/386 (i386-cubix-sysv) *************** *** 200,203 **** --- 200,204 ---- 19.23 works; however, the GCC provided with DGUX 5.4R3.00 fails to compile src/emacs.c. GCC 2.5.8 does work. + The 19.26 pretest was reported to work; no word on which compiler. System versions other than DGUX 5.4R3.00 have not been tested. *************** *** 205,210 **** DECstation (mips-dec-ultrix or mips-dec-osf) ! 19.22 is believed to work on Ultrix 4.2. See under Ultrix for problems using X windows on Ultrix. Note that this is a MIPS machine. --- 206,218 ---- DECstation (mips-dec-ultrix or mips-dec-osf) ! This machine is the older Mips-based DECstation. ! Emacs does not support the Alpha CPU. We hope to support that in 19.27. + 19.25 works on Ultrix 4.2. The 19.26 pretest was reported to work + on Ultrix 4.2a and on 4.4. + + One user reported 19.25 did not work at all with --with-x-toolkit + using X11R5 patch level 10, but worked ok with X11R5 pl26. + See under Ultrix for problems using X windows on Ultrix. Note that this is a MIPS machine. *************** *** 219,223 **** Motorola Delta 147 (m68k-motorola-sysv) ! Emacs runs as of version 19.23. Motorola Delta boxes running System V/68 release 3. --- 227,231 ---- Motorola Delta 147 (m68k-motorola-sysv) ! The EMacs 19.26 pretest was reported to work. Motorola Delta boxes running System V/68 release 3. *************** *** 224,227 **** --- 232,236 ---- Tested on 147 board with SVR3V7, no X and gcc. Tested on 167 board with SVR3V7, no X, cc, gnucc and gcc. + Reports say it works with X too. The installation script chooses the compiler itself. gnucc is *************** *** 228,237 **** preferred. - There is still a bug, probably a memory allocation error of some - kind. Emacs 19.23 bombs reproducibly when byte-compiling large - elisp files. If compiled with SYSTEM_MALLOC, it manages to - byte-compile, but bombs more often on common tasks, usually those - implying an enlargement of a buffer. - Motorola Delta 187 (m88k-motorola-sysv, m88k-motorola-sysvr4, or --- 237,240 ---- *************** *** 238,244 **** m88k-motorola-m88kbcs) ! As of version 19.13, Emacs is reported to run under SYSVr3 and SYSVr4. ! Machine support added in version 19. ! HAVE_X_MENU does not work due to lack of insque. Dual running System V (m68k-dual-sysv) --- 241,250 ---- m88k-motorola-m88kbcs) ! The 19.26 pretest was reported to run on SVR3. However, if you ! use --with-x-toolkit on svr3, you will have problems compiling some ! files because time.h and sys/time.h get included twice. ! One fix is to edit those files to protect against multiple inclusion. ! ! As of version 19.13, Emacs was reported to run under SYSVr3 and SYSVr4. Dual running System V (m68k-dual-sysv) *************** *** 314,318 **** Hewlett-Packard 9000 series 200 or 300 (m68k-hp-bsd or m68k-hp-hpux7.) ! Version 19 works under BSD. These machines are 68000-series CPUs running HP/UX --- 320,325 ---- Hewlett-Packard 9000 series 200 or 300 (m68k-hp-bsd or m68k-hp-hpux7.) ! 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 *************** *** 357,363 **** or ...hpux9shr) ! These files support HP's Precision Architecture machines ! running HP/UX. It has been moderately tested on the Series ! 840. Use hppa1.1 for the 700 series and hppa1.0 for the 800 series machines. (Emacs may not actually care which one you use.) --- 364,372 ---- or ...hpux9shr) ! 19.26 is believed to work on HPUX 9 provided you compile with GCC. ! As of version 19.16, Emacs was reported to build (using GCC) and run ! on HP 9000/700 series machines running HP/UX versions 8.07 and 9.01. ! ! Use hppa1.1 for the 700 series and hppa1.0 for the 800 series machines. (Emacs may not actually care which one you use.) *************** *** 369,375 **** LIBXT= $(LIBW) -lXmu -lXt $(LIBXTR6) -lXext - As of version 19.16, Emacs is reported to build (using GCC) and run - on HP 9000/700 series machines running HP/UX versions 8.07 and 9.01. - Some people report trouble using the GNU memory allocator under HP/UX version 9. We are told that these problems go away if you --- 378,381 ---- *************** *** 392,395 **** --- 398,410 ---- Software Support. + If your buffer fills up with nulls (^@) at some point, it could well + be that problem. That problem does not happen when people use GCC + to compile Emacs. On the other hand, the HP compiler version 9.34 + was reported to work for the 19.26 pretest. 9.65 was also reported to work. + + If you turn on the DSUSP character (delayed suspend), + Emacs 19.26 does not know how to turn it off on HPUX. + You need to turn it off manually. + If you are running HP/UX release 8.0 or later, you need the optional "C/ANSI C" software in order to build Emacs (older releases of HP/UX *************** *** 420,424 **** IBM RS/6000 (rs6000-ibm-aix) ! Emacs 19.7 runs. At last report, Emacs didn't run well on terminals. Informed --- 435,439 ---- IBM RS/6000 (rs6000-ibm-aix) ! Emacs 19.26 is believed to work; its pretest was tested. At last report, Emacs didn't run well on terminals. Informed *************** *** 433,436 **** --- 448,454 ---- the 1.03.00.14 level to allow optimized compiles. + 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. *************** *** 472,481 **** Intel 386 (i386-*-isc, i386-*-esix, ! i386-*-xenix, i386-*-linux, i386-intsys-sysv, i386-*-sysv3, i386-*-sysv4, i386-*-sysv4.2, i386-*-sysv5.3, i386-*-bsd4.2, ! i386-*-sco3.2v4, i386-*-bsd386, ! i386-*-386bsd) In the above configurations, * means that the manufacturer's name --- 490,499 ---- Intel 386 (i386-*-isc, i386-*-esix, ! i386-*-xenix, i386-*-linux, i386-*-freebsd, i386-intsys-sysv, i386-*-sysv3, i386-*-sysv4, i386-*-sysv4.2, i386-*-sysv5.3, i386-*-bsd4.2, ! i386-*-sco3.2v4, i386-*-bsd386, i386-*-386bsd ! or i486... or i586...) In the above configurations, * means that the manufacturer's name *************** *** 487,499 **** i386-unknown-isc3.0 as your configuration name. Use i386-*-esix for Esix; Emacs runs as of version 19.6. ! Use i386-*-linux for Linux; Emacs runs as of version 19.7. Use i386-intsys-sysv for Integrated Solutions 386 machines. It may also be correct for Microport systems. ! Use i386-*-sco3.2v4 for SCO 3.2v4; Emacs runs as of version 19.6. ! On Linux, Emacs 19.23 is said to work properly with libc version 4.5.21, ! but not with 4.5.19. ! On Linux, configure may fail to put these definitions in config.h: #define HAVE_GETTIMEOFDAY --- 505,517 ---- i386-unknown-isc3.0 as your configuration name. Use i386-*-esix for Esix; Emacs runs as of version 19.6. ! Use i386-*-linux for GNU/Linux systems; Emacs runs as of version 19.26. Use i386-intsys-sysv for Integrated Solutions 386 machines. It may also be correct for Microport systems. ! Use i386-*-sco3.2v4 for SCO 3.2v4; Emacs runs as of version 19.26. ! On GNU/Linux systems, Emacs 19.23 was said to work properly with libc ! version 4.5.21, but not with 4.5.19. ! On GNU/Linux, configure may fail to put these definitions in config.h: #define HAVE_GETTIMEOFDAY *************** *** 505,508 **** --- 523,528 ---- It is possible that this problem happens only with X11R6. + The 19.26 pretest was reported to work on SVR4.3 and on Freebsd. + Use i386-*-bsd386 for BSDI BSD/386; Emacs runs as of version 19.23. Make on that system is broken; use GNU make instead. *************** *** 573,578 **** Iris 4D (mips-sgi-irix[45].*) ! 19.22 is known to work on all Silicon Graphics machines running ! IRIX 4.0.5 or IRIX 5.1. Emacs 18.58 works with IRIX 3.3. Compiling with GCC on IRIX 5 is said to fail, perhaps because GCC --- 593,601 ---- Iris 4D (mips-sgi-irix[45].*) ! The 19.26 pretest was reported to work on IRIX 4.0.5 and 5.2. ! 19.23 was reported to work on IRIX 5.2, but you may need to install ! the "compiler_dev.hdr.internal" subsystem in order to compile Emacs. ! 19.22 was known to work on all Silicon Graphics machines running ! IRIX 4.0.5 or IRIX 5.1. Compiling with GCC on IRIX 5 is said to fail, perhaps because GCC *************** *** 628,632 **** The C compiler on Riscos 4.51 dumps core trying to optimize parts of Emacs. Try without optimization or try GCC. ! Meanwhile, the linker on that system returns success even if there are undefined symbols; as a result, configure gets the --- 651,655 ---- The C compiler on Riscos 4.51 dumps core trying to optimize parts of Emacs. Try without optimization or try GCC. ! Meanwhile, the linker on that system returns success even if there are undefined symbols; as a result, configure gets the *************** *** 681,685 **** under System V release 2. ! NeXT (m68k-next-bsd, m68k-next-mach2) Emacs 19 has not been tested extensively yet, but it seems to work --- 704,708 ---- under System V release 2. ! NeXT (m68k-next-nextstep) Emacs 19 has not been tested extensively yet, but it seems to work *************** *** 719,722 **** --- 742,749 ---- Pyramid (pyramid-pyramid-bsd) + The 19.26 pretest was observed to work on OSx 5.0, but it is necessary + to edit gmalloc.c. You must add #include at the top, + and delete the #define for size_t. + You need to build Emacs in the Berkeley universe with the `ucb' command, as in `ucb make' or `ucb build-install'. *************** *** 758,762 **** SONY News 3000 series (RISC NEWS) (mips-sony-bsd) ! Worked, as of 18.56. Note that this is a MIPS architecture machine. Some versions of the operating system give SIGTRAP for division by zero --- 785,789 ---- SONY News 3000 series (RISC NEWS) (mips-sony-bsd) ! The 19.26 pretest is reported to work. Some versions of the operating system give SIGTRAP for division by zero *************** *** 767,770 **** --- 794,801 ---- in data.c if you wish. + Stardent i860 (i860-stardent-sysv4.0) + + 19.26 pretest reported to work. + Stardent 1500 or 3000 *************** *** 779,785 **** Sun 3, Sun 4 (sparc), Sun 386 (m68k-sun-sunos, sparc-sun-sunos, i386-sun-sunos, ! sparc-sun-solaris2.*) ! 19.22 is believed to work on Sparcs and Sun 3's. Some people report that Emacs crashes immediately on startup when used with a non-X terminal, but we think this is due to compiling with GCC and failing --- 810,816 ---- Sun 3, Sun 4 (sparc), Sun 386 (m68k-sun-sunos, sparc-sun-sunos, i386-sun-sunos, ! sparc-sun-sunos4shr, sparc-sun-solaris2.*) ! 19.26 is believed to work on Sparcs and Sun 3's. Some people report that Emacs crashes immediately on startup when used with a non-X terminal, but we think this is due to compiling with GCC and failing *************** *** 786,789 **** --- 817,824 ---- to use GCC's "fixed" system header files. + Some Sun versions of X windows use the clipboard, not the selections, + for transferring text between clients. The Cut, Paste and Copy items + in the menu bar Edit menu work with the clipboard. + It's important to include the SunOS version number in the configuration name. For example, for SunOS release 4.0 on a Sun 3, *************** *** 790,794 **** use `m68k-sun-sunos4.0'; for SunOS release 4.1 on a Sparc, use `sparc-sun-sunos4.1'. For SunOS release 4.1.3 on a Sparc, use ! `sparc-sun-sunos4.1.3'. Use `m68k' for the 68000-based Sun boxes, `sparc' for Sparcstations, --- 825,841 ---- use `m68k-sun-sunos4.0'; for SunOS release 4.1 on a Sparc, use `sparc-sun-sunos4.1'. For SunOS release 4.1.3 on a Sparc, use ! `sparc-sun-sunos4.1.3'. Use sunos4shr to link with shared libraries ! on Sunos 4.1. ! ! Use of shared libraries does not work with X11R5 or X11R6 on Sunos 4 ! as of 19.26. unexsunos4.c needs to be changed. Can someone ! please write the necessary changes? ! ! X11R6 is set up to make shared libraries only, on Sunos 4. ! Therefore, in order to link Emacs, you need to create static X libraries. ! To do this, rebuild X11 after setting ! #define ForceNormalLib YES ! #define SeparateSharedCompile YES ! in site.def (after #ifdef AfterVendorCF). Use `m68k' for the 68000-based Sun boxes, `sparc' for Sparcstations, *************** *** 893,897 **** Tektronix XD88 (m88k-tektronix-sysv3*) ! Minor changes merged in 19.19, which should work. Tektronix 16000 box (6130?) (ns16k-tektronix-bsd) --- 940,945 ---- Tektronix XD88 (m88k-tektronix-sysv3*) ! The 19.26 pretest was reported to work. ! Minor changes merged in 19.19. Tektronix 16000 box (6130?) (ns16k-tektronix-bsd) *************** *** 901,906 **** Tektronix 4300 (m68k-tektronix-bsd) ! Emacs 19.23 works. However, for the toolkit version, you need to ! fix sys/time.h so that it won't cause errors if included twice. Titan P2 or P3 (titan-titan-sysv) --- 949,953 ---- Tektronix 4300 (m68k-tektronix-bsd) ! Emacs 19.26 pretest reported to work. Titan P2 or P3 (titan-titan-sysv) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/etc/NEWS emacs-19.26/etc/NEWS *** emacs-19.25/etc/NEWS Wed May 25 17:38:29 1994 --- emacs-19.26/etc/NEWS Wed Sep 7 03:59:02 1994 *************** *** 1,3 **** ! GNU Emacs NEWS -- history of user-visible changes. 15 May 1994 Copyright (C) 1993, 1994 Free Software Foundation, Inc. See the end for copying conditions. --- 1,3 ---- ! GNU Emacs NEWS -- history of user-visible changes. 7 Sep 1994 Copyright (C) 1993, 1994 Free Software Foundation, Inc. See the end for copying conditions. *************** *** 6,15 **** For older news, see the file ONEWS. ! Changes in Emacs 19.25 The variable x-cross-pointer-shape (which didn't really exist) has been renamed to x-sensitive-text-pointer-shape, and now does exist. ! Changes in Emacs 19.24 Here is a list of new Lisp packages introduced since 19.22. --- 6,172 ---- For older news, see the file ONEWS. ! * User Editing Changes in Emacs 19.26 + ** In the X toolkit version, if you click on a menu bar item and + release the button quickly outside the menu, the menu remains visible + until you click or type something else. If you click on the menu, you + select from the menu. Any other mouse click makes the menu disappear. + Keyboard input gets rid of the menu and then is processed normally. + + "Quickly" means within double-click-time milliseconds. + + ** The C-x 5 commands to select a buffer in "another frame" now use an + existing iconified frame, if any, deiconifying it. They also raise + the frame. + + ** Region highlighting on a black-and-white-only display now uses + underlining. Inverse-video had the problem that you couldn't see + the cursor. + + ** You can now change the height of a window by pressing mouse-1 on + the mode line and dragging it up and down. + + ** If you set the environment variable LC_CTYPE to iso_8859_1 or + iso-8859-1, Emacs automatically sets up for display and syntactic + handling of the ISO Latin-1 character set. + + This does not automatically load any of the packages for input of + these characters, because it's not yet clear what is right to do. + You must still explicitly load either iso-transl or iso-acc. + + ** For a read-only buffer that is also modified, the mode line now displays + %* instead of %%. + + ** M-prior (scroll-other-window-down) is a new command that works like + M-next (and C-M-v) but scrolls in the opposite direction. + + M-home moves to the beginning of the buffer, in the other window. + M-end moves to the end of the buffer, in the other window. These two + commands, along with M-next and M-prior, form a series of commands for + moving around in the other window. + + ** In change logs, the mail address is now delimited with <...> instead + of (...). + + This makes it a little more convenient to extract the mail address for + use in mailing a message. + + ** In Shell mode and other comint modes, C-a has now returned to + its ordinary meaning: move to the beginning of the line. + Use C-c C-a to move to the end of the prompt. + + ** If you set mail-signature to t to cause automatic insertion of + your .signature file, you now get a -- before the signature. + + ** Setting rmail-highlighted-headers to nil entirely turns off + highlighting in Rmail. However, if your motivation for doing this is + that the highlighted text doesn't look good on your display, it might + be better to change the appearance of the `highlight' face. Once + you've done that, you may find Rmail highlighting is useful. + + ** In the calendar, mouse-2 is now used only for commands that apply to a date. + If you click it when not on a date, it gives an immediate error. + + Mouse-3 in the calendar now gives a menu of commands that do not apply + to a particular date. + + ** In the gnus-uu package, the binding for gnus-uu-threaded-decode-and-view + is now C-c C-v C-d, not C-c C-v C-h. Thus, C-c C-v C-h is now available + for asking for a list of the subcommands of C-c C-v. + + ** You can now specify "who you are" for various Emacs packages by + setting just one variable, user-mail-address. This currently applies + to posting news with GNUS and to making change log entries. It may + apply to additional Emacs features in the future. + + * Lisp-Level Changes in Emacs 19.26: + + ** The function insert-char now takes an optional third argument + which, if non-nil, says the inserted characters should inherit sticky + text properties from the surrounding text. + + ** The `diary' library has been renamed to `diary-lib'. If you refer + to this library in your Lisp code, you must update the references. + + ** Sending text to a subprocess can read input from subprocesses if it + has to wait because the destination subprocess's terminal input buffer + is full. + + It was already possible in unusual occasions for this operation to + read subprocess input, but it did not happen very often. It is now + more likely to happen. + + ** last-nonmenu-event is now bound to t around filter functions and sentinels. + This is to ensure that y-or-n-p and yes-or-no-p use the keyboard by default. + + ** In mode lines, %+ now displays as % for unmodified read-only + buffers. It is now the same as %* except in the case of a modified + read-only buffer; in that case, %+ displays as *. + + The old meaning of %+ is now available on %&. + It displays * for a modified buffer and - for an unmodified buffer, + regardless of read-only status. + + ** You can now use `underline' in the color list of a face. + It serves as a last resort, and says to underline the face + (if previous color list elements can't be used). + + ** The new function x-color-values returns the list of color values + for a given color name (a string). The list contains three integers + which give the amounts of red, green and blue in the color: (R G B). + + ** In run-at-time, 0 as the repeat interval means "don't repeat". + + ** The variable trim-versions-without-asking has been renamed to + delete-old-versions. + + ** The new function other-window-for-scrolling returns the choice of + other window for C-M-v to scroll. + + ** Note that the function fceiling was mistakenly documented as fceil before. + + * Changes in cc-mode.el in Emacs 19.26: + + ** A new syntactic symbol has been added: substatement-open. It + defines the open brace of a substatement block. These used to get: + ((block-open ...) (substatement . ...)). + + Non-block substatement lines still get just ((substatement . ...)) + + Note that the custom indent function c-adaptive-block-open has been + removed as obsolete. + + ** You can now specify the `hanginess' of closing braces. See + c-hanging-braces-alist. + + ** Recognizes try and catch blocks in C++. They are given the + substatement syntactic symbol. + + ** should be generally more forgiving about non-GNU standard top-level + construct definition styles (i.e. where the function/class/struct + opening brace does not start in column zero). + + If you hang the braces that open a top-level construct on the right + edge, and you find you still need to define defun-open-prompt (Emacs + 19) please let me know. Note that there may still be performance + issues related to non-column zero opening braces. + + ** c-macro-expand is put on C-c C-e + + ** New style: "Default". Resets indentation to those shipped with + cc-mode.el. + + ** internal defun c-indent-via-language-element has been renamed + c-indent-line for compatibility with c-mode.el and awk-mode. + + ** new buffer-local variable c-comment-start-regexp for (potential) + flexibility in adding new modes based on cc-mode.el + + * Changes in Emacs 19.25 + The variable x-cross-pointer-shape (which didn't really exist) has been renamed to x-sensitive-text-pointer-shape, and now does exist. ! * Changes in Emacs 19.24 Here is a list of new Lisp packages introduced since 19.22. *************** *** 35,41 **** tempo.el Template insertion with hotspots. ! User Editing Changes in 19.23. ! * Emacs 19.23 uses Ispell version 3. Previous Emacs 19 versions used Ispell version 4. That version had --- 192,198 ---- tempo.el Template insertion with hotspots. ! * User Editing Changes in 19.23. ! ** Emacs 19.23 uses Ispell version 3. Previous Emacs 19 versions used Ispell version 4. That version had *************** *** 46,53 **** been changed, so now we are using it. We are dropping Ispell 4. ! * Emacs 19.23 can run on MS-DOG. See the file MSDOS in the same directory as this file. ! * Emacs 19.23 can work with an X toolkit. You must specify toolkit operation when you configure Emacs: use the option --with-x-toolkit=yes. (This option uses code developed by Lucid; --- 203,210 ---- been changed, so now we are using it. We are dropping Ispell 4. ! ** Emacs 19.23 can run on MS-DOG. See the file MSDOS in the same directory as this file. ! ** Emacs 19.23 can work with an X toolkit. You must specify toolkit operation when you configure Emacs: use the option --with-x-toolkit=yes. (This option uses code developed by Lucid; *************** *** 54,69 **** thanks to Frederic Pierresteguy for helping to adapt it.) ! * Emacs now has dialog boxes; yes/no and y/n questions automatically use them in commands invoked with the mouse. For more information, see below under "Lisp programming changes". ! * Menus now display the keyboard equivalents (if any) of the menu commands in parentheses after the menu item. ! * Kill commands, used in a read-only buffer, now move point across the text they would otherwise have killed. This way, you can use repeated kill commands to transfer text into the kill ring. ! * There is now a global mark ring in addition to the mark ring that is local to each buffer. The global mark ring stores positions in any buffer. Any time the mark is set and the current buffer is different from the last time --- 211,226 ---- thanks to Frederic Pierresteguy for helping to adapt it.) ! ** Emacs now has dialog boxes; yes/no and y/n questions automatically use them in commands invoked with the mouse. For more information, see below under "Lisp programming changes". ! ** Menus now display the keyboard equivalents (if any) of the menu commands in parentheses after the menu item. ! ** Kill commands, used in a read-only buffer, now move point across the text they would otherwise have killed. This way, you can use repeated kill commands to transfer text into the kill ring. ! ** There is now a global mark ring in addition to the mark ring that is local to each buffer. The global mark ring stores positions in any buffer. Any time the mark is set and the current buffer is different from the last time *************** *** 72,78 **** jumps to the last mark pushed, first switching to that buffer. ! * Query Replace is now available in the Edit menu. ! * ESC no longer simply exits a Query Replace. It now exits the Query Replace and remains pending. Thus, ESC A and M-A are now equivalent in Query Replace. --- 229,235 ---- jumps to the last mark pushed, first switching to that buffer. ! ** Query Replace is now available in the Edit menu. ! ** ESC no longer simply exits a Query Replace. It now exits the Query Replace and remains pending. Thus, ESC A and M-A are now equivalent in Query Replace. *************** *** 80,90 **** To simply exit a Query Replace, type RET or Period. ! * M-mouse-2 now puts point at the end of the yanked secondary selection. ! * Mouse-1 in the mode line now simply selects the window above that mode line. Mouse-2 in the mode line selects that window and expands it to fill the frame it is in. ! * You can now use mouse-2 in a Dired buffer or Tar mode buffer to find a file you click on, in a compilation buffer to go to a particular error message, and in a *Occur* buffer to go to a particular --- 237,247 ---- To simply exit a Query Replace, type RET or Period. ! ** M-mouse-2 now puts point at the end of the yanked secondary selection. ! ** Mouse-1 in the mode line now simply selects the window above that mode line. Mouse-2 in the mode line selects that window and expands it to fill the frame it is in. ! ** You can now use mouse-2 in a Dired buffer or Tar mode buffer to find a file you click on, in a compilation buffer to go to a particular error message, and in a *Occur* buffer to go to a particular *************** *** 97,111 **** move the mouse over them. ! * In a completion list buffer, the command RET now chooses the completion that is around or next to point. ! * If you specify the foreground color for the `mode-line' face, and mode-line-inverse-video is non-nil, then the default background color is the usual foreground color. ! * revert-buffer now preserves markers pointing within the unchanged text (if any) at the beginning and end of the file. ! * Version control checkin and checkout preserve all markers if the file does not contain any of the magic version header sequences that are updated automatically by RCS and SCCS. If such version headers --- 254,268 ---- move the mouse over them. ! ** In a completion list buffer, the command RET now chooses the completion that is around or next to point. ! ** If you specify the foreground color for the `mode-line' face, and mode-line-inverse-video is non-nil, then the default background color is the usual foreground color. ! ** revert-buffer now preserves markers pointing within the unchanged text (if any) at the beginning and end of the file. ! ** Version control checkin and checkout preserve all markers if the file does not contain any of the magic version header sequences that are updated automatically by RCS and SCCS. If such version headers *************** *** 114,118 **** header sequences close together.) ! * When a large deletion shuts off auto save temporarily in a buffer, you can now turn it on again by saving the buffer with C-x C-s (as was possible in Emacs 18). You can also turn it on again with M-1 M-x --- 271,275 ---- header sequences close together.) ! ** When a large deletion shuts off auto save temporarily in a buffer, you can now turn it on again by saving the buffer with C-x C-s (as was possible in Emacs 18). You can also turn it on again with M-1 M-x *************** *** 119,125 **** auto-save (as has been possible in Emacs 19). ! * C-x r d now runs the command delete-rectangle. ! * The new command imenu shows you a menu of interesting places in the current buffer and lets you select one; then it moves point there. The definition of interesting places depends on the major mode, but --- 276,282 ---- auto-save (as has been possible in Emacs 19). ! ** C-x r d now runs the command delete-rectangle. ! ** The new command imenu shows you a menu of interesting places in the current buffer and lets you select one; then it moves point there. The definition of interesting places depends on the major mode, but *************** *** 128,132 **** event, it shows a mouse popup menu. ! * You can make certain chosen buffers, that normally appear in a separate window, appear in special frames of their own. To do this, set special-display-buffer-names to a list of buffer names; any buffer --- 285,289 ---- event, it shows a mouse popup menu. ! ** You can make certain chosen buffers, that normally appear in a separate window, appear in special frames of their own. To do this, set special-display-buffer-names to a list of buffer names; any buffer *************** *** 144,148 **** need to set it. ! * If you set sentence-end-double-space to nil, the fill commands expect just one space at the end of a sentence. (If you want the sentence commands to accept single spaces, you must modify the regexp --- 301,305 ---- need to set it. ! ** If you set sentence-end-double-space to nil, the fill commands expect just one space at the end of a sentence. (If you want the sentence commands to accept single spaces, you must modify the regexp *************** *** 149,153 **** sentence-end also.) ! * You can suppress the startup echo area message by adding text like this to your .emacs file: --- 306,310 ---- sentence-end also.) ! ** You can suppress the startup echo area message by adding text like this to your .emacs file: *************** *** 163,172 **** message for someone else. ! * Outline minor mode now uses C-c C-o as a prefix instead of just C-c. ! * In Outline mode, hide-subtree is now C-c C-d. (It was C-c C-h; but that is now a conventional way to ask for help about C-c commands.) ! * There are two additional commands in Outline mode. M-x hide-sublevels hides all headers except the topmost N levels. --- 320,329 ---- message for someone else. ! ** Outline minor mode now uses C-c C-o as a prefix instead of just C-c. ! ** In Outline mode, hide-subtree is now C-c C-d. (It was C-c C-h; but that is now a conventional way to ask for help about C-c commands.) ! ** There are two additional commands in Outline mode. M-x hide-sublevels hides all headers except the topmost N levels. *************** *** 175,179 **** plus the headers leading up from there to the top of the tree. ! * In iso-transl and iso-insert, the sequences for entering A-ring and the AE ligature are now just A and E (plus the initial C-x 8 or Alt). You used to have to enter AA or AE, after the C-x 8 prefix of course. --- 332,336 ---- plus the headers leading up from there to the top of the tree. ! ** In iso-transl and iso-insert, the sequences for entering A-ring and the AE ligature are now just A and E (plus the initial C-x 8 or Alt). You used to have to enter AA or AE, after the C-x 8 prefix of course. *************** *** 180,184 **** Likewise for lower case a-ring and ae. ! * iso-transl now defines convenient Alt keys as well as the C-x 8 prefix. Instead of prefixing a sequence with C-x 8, you can add Alt to the first character of the sequence. For example, Alt-" a is now a way --- 337,341 ---- Likewise for lower case a-ring and ae. ! ** iso-transl now defines convenient Alt keys as well as the C-x 8 prefix. Instead of prefixing a sequence with C-x 8, you can add Alt to the first character of the sequence. For example, Alt-" a is now a way *************** *** 185,195 **** to enter an a-umlaut. ! * CC mode is a greatly improved mode for C and C++. See the following page. ! * tcl mode is a new major mode. It provides features for editing, indenting and running tcl programs. ! * Compilation minor mode lets you parse error messages in any buffer, not just a normal compilation output buffer. Type M-x compilation-minor-mode to enable the minor mode; then C-c C-c jumps to --- 342,352 ---- to enter an a-umlaut. ! ** CC mode is a greatly improved mode for C and C++. See the following page. ! ** tcl mode is a new major mode. It provides features for editing, indenting and running tcl programs. ! ** Compilation minor mode lets you parse error messages in any buffer, not just a normal compilation output buffer. Type M-x compilation-minor-mode to enable the minor mode; then C-c C-c jumps to *************** *** 198,232 **** automatically accesses remote source files by ftp. ! * Comint and shell mode changes: ! ** Comint modes (including Shell mode, GUD modes, etc.) now bind C-M-l to the command comint-show-output. This command scrolls the buffer to show the last batch of output from the subprogram. ! ** Completion in Comint modes now truly operates on the string before point, rather than the word that point is within. ! ** Comint mode file name completion ignores those files that end with a string in the new variable comint-completion-fignore. This variable's default value is nil. ! ** Shell mode uses the variable shell-completion-fignore to set comint-completion-fignore. The default value is nil, but some people prefer ("~" "#" "%"). ! ** The function `comint-watch-for-password-prompt' can be used to suppress echoing when a subprocess asks for a password. To use it, do this: ! (add-hook `comint-output-filter-functions ! `comint-watch-for-password-prompt) ! ** You can use M-x shell-strip-ctrl-m to strip ^M characters from process output. ! ** In Shell mode, TAB now completes environment variables, if possible, and expands directory references. ! ** You can use M-x comint-run to execute any program of your choice in a comint mode. Some programs such as shells, rlogin, and debuggers have their own specialized modes; this command is one way to use --- 355,389 ---- automatically accesses remote source files by ftp. ! ** Comint and shell mode changes: ! *** Comint modes (including Shell mode, GUD modes, etc.) now bind C-M-l to the command comint-show-output. This command scrolls the buffer to show the last batch of output from the subprogram. ! *** Completion in Comint modes now truly operates on the string before point, rather than the word that point is within. ! *** Comint mode file name completion ignores those files that end with a string in the new variable comint-completion-fignore. This variable's default value is nil. ! *** Shell mode uses the variable shell-completion-fignore to set comint-completion-fignore. The default value is nil, but some people prefer ("~" "#" "%"). ! *** The function `comint-watch-for-password-prompt' can be used to suppress echoing when a subprocess asks for a password. To use it, do this: ! (add-hook 'comint-output-filter-functions ! 'comint-watch-for-password-prompt) ! *** You can use M-x shell-strip-ctrl-m to strip ^M characters from process output. ! *** In Shell mode, TAB now completes environment variables, if possible, and expands directory references. ! *** You can use M-x comint-run to execute any program of your choice in a comint mode. Some programs such as shells, rlogin, and debuggers have their own specialized modes; this command is one way to use *************** *** 236,240 **** mode.) ! * When you run GUD (M-x gdb, M-x dbx, and so on), you can use TAB to do file name completion in the minibuffer. --- 393,397 ---- mode.) ! ** When you run GUD (M-x gdb, M-x dbx, and so on), you can use TAB to do file name completion in the minibuffer. *************** *** 241,248 **** The "Complete" menu includes an item for directory expansion. ! * GUD working with future versions of GDB will permit TAB for GDB-style symbol completion. This will work with GDB 4.13. ! * Rmail no longer gets new mail automatically when you visit an Rmail file specified by name--not even if it is your primary Rmail file. To get new mail, type `g'. This feature is an advantage because you now --- 398,405 ---- The "Complete" menu includes an item for directory expansion. ! ** GUD working with future versions of GDB will permit TAB for GDB-style symbol completion. This will work with GDB 4.13. ! ** Rmail no longer gets new mail automatically when you visit an Rmail file specified by name--not even if it is your primary Rmail file. To get new mail, type `g'. This feature is an advantage because you now *************** *** 251,262 **** made the code do what the documentation already said.) ! * Rmail now highlights certain fields automatically, when you use X windows. The variable rmail-highlighted-headers controls which fields. ! * If you set rmail-summary-window-size to an integer, Rmail uses a window that many lines high for the summary buffer. ! * rmail-input-menu is a new command that visits an Rmail file letting you choose which file with a mouse menu. rmail-output-menu is similar; it outputs the current message, using a mouse menu to choose --- 408,419 ---- made the code do what the documentation already said.) ! ** Rmail now highlights certain fields automatically, when you use X windows. The variable rmail-highlighted-headers controls which fields. ! ** If you set rmail-summary-window-size to an integer, Rmail uses a window that many lines high for the summary buffer. ! ** rmail-input-menu is a new command that visits an Rmail file letting you choose which file with a mouse menu. rmail-output-menu is similar; it outputs the current message, using a mouse menu to choose *************** *** 264,271 **** rmail-secondary-file-directory and rmail-secondary-file-regexp. ! * The mh-e package has been changed substantially. See the file ./MH-E-NEWS for details. ! * The calendar and diary have new features. The menu bar for the calendar contains most of the calendar commands, --- 421,428 ---- rmail-secondary-file-directory and rmail-secondary-file-regexp. ! ** The mh-e package has been changed substantially. See the file ./MH-E-NEWS for details. ! ** The calendar and diary have new features. The menu bar for the calendar contains most of the calendar commands, *************** *** 282,293 **** window system. ! * The appt package for displaying appointment reminders has new features. ! ** The appt alarm window stays for the full duration of appt-display-duration. It no longer disappears when you start typing text. ! ** You can change the way the appointment window is created/deleted by setting the variables appt-disp-window-function and appt-delete-window-function. --- 439,450 ---- window system. ! ** The appt package for displaying appointment reminders has new features. ! *** The appt alarm window stays for the full duration of appt-display-duration. It no longer disappears when you start typing text. ! *** You can change the way the appointment window is created/deleted by setting the variables appt-disp-window-function and appt-delete-window-function. *************** *** 297,304 **** appt-display-duration seconds. ! * desktop.el can now save a list of buffer-local variables, and saves more global ones. ! * Pascal mode has been completely rewritten. It now features completing of function names, variables and type definitions around current point (like M-TAB does with lisp-symbols). There's also an --- 454,461 ---- appt-display-duration seconds. ! ** desktop.el can now save a list of buffer-local variables, and saves more global ones. ! ** Pascal mode has been completely rewritten. It now features completing of function names, variables and type definitions around current point (like M-TAB does with lisp-symbols). There's also an *************** *** 306,336 **** functions you're not working with. ! * Edebug has a number of changes: ! ** Edebug syntax error reporting is improved. ! ** Top-level forms and defining forms other than defun and defmacro may now be debugged with Edebug. ! ** Edebug specifications may now contain body, &define, name, arg or arglist, def-body, and def-form, to support definitions. ! ** edebug-all-defuns is renamed to edebug-all-defs. def-edebug-form-spec is replaced by def-edebug-form whose arguments are unevaluated. The old names are still available for now. ! ** Frequency counts and coverage data may be displayed for functions being debugged. ! ** A global break condition is now checked at every stop point. ! ** The previous condition at a breakpoint may now be edited. ! ** A new "next" mode stops only after expression evaluation. ! ** A new command, top-level-nonstop, does not even stop for unwind-protect, as top-level would. ! Changes in CC mode in Emacs 19.23. `cc-mode' provides ANSI C, K&R C, and ARM C++ language editing. It --- 463,493 ---- functions you're not working with. ! ** Edebug has a number of changes: ! *** Edebug syntax error reporting is improved. ! *** Top-level forms and defining forms other than defun and defmacro may now be debugged with Edebug. ! *** Edebug specifications may now contain body, &define, name, arg or arglist, def-body, and def-form, to support definitions. ! *** edebug-all-defuns is renamed to edebug-all-defs. def-edebug-form-spec is replaced by def-edebug-form whose arguments are unevaluated. The old names are still available for now. ! *** Frequency counts and coverage data may be displayed for functions being debugged. ! *** A global break condition is now checked at every stop point. ! *** The previous condition at a breakpoint may now be edited. ! *** A new "next" mode stops only after expression evaluation. ! *** A new command, top-level-nonstop, does not even stop for unwind-protect, as top-level would. ! * Changes in CC mode in Emacs 19.23. `cc-mode' provides ANSI C, K&R C, and ARM C++ language editing. It *************** *** 386,390 **** (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) ! * New variables: c-offsets-alist contains an association list of syntactic symbols and --- 543,547 ---- (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) ! ** New variables: c-offsets-alist contains an association list of syntactic symbols and *************** *** 453,457 **** with cc-mode. ! * There are two new minor-mode features in CC mode: auto-newline and hungry-delete. Auto-newline inserts newlines automatically as you type certain constructs. Hungry-delete consumes all preceding --- 610,614 ---- with cc-mode. ! ** There are two new minor-mode features in CC mode: auto-newline and hungry-delete. Auto-newline inserts newlines automatically as you type certain constructs. Hungry-delete consumes all preceding *************** *** 461,467 **** C-c C-d. You can toggle them both on and off together with C-c C-t. ! * Slash (`/') and star (`*') are now both electric characters. ! * New commands: The new C-c C-o (c-set-offset) command can be used to interactively change --- 618,624 ---- C-c C-d. You can toggle them both on and off together with C-c C-t. ! ** Slash (`/') and star (`*') are now both electric characters. ! ** New commands: The new C-c C-o (c-set-offset) command can be used to interactively change *************** *** 482,486 **** convention of VariableNamesWithoutUnderscoresButEachWordCapitalized. ! * Command from c-mode.el that have been renamed in cc-mode.el: electric-c-brace => c-electric-brace --- 639,643 ---- convention of VariableNamesWithoutUnderscoresButEachWordCapitalized. ! ** Command from c-mode.el that have been renamed in cc-mode.el: electric-c-brace => c-electric-brace *************** *** 492,496 **** set-c-style => c-set-style ! * Variables from c-mode.el that are obsolete with cc-mode.el: c-indent-level --- 649,653 ---- set-c-style => c-set-style ! ** Variables from c-mode.el that are obsolete with cc-mode.el: c-indent-level *************** *** 502,508 **** c-continued-brace-offset ! Lisp programming changes in Emacs 19.23. ! * To pop up a dialog box, call x-popup-dialog. It takes two arguments, POSITION and CONTENTS. --- 659,665 ---- c-continued-brace-offset ! * Lisp programming changes in Emacs 19.23. ! ** To pop up a dialog box, call x-popup-dialog. It takes two arguments, POSITION and CONTENTS. *************** *** 526,530 **** of the frame. ! * y-or-n-p, yes-or-no-p and map-y-or-n-p now use menus or dialog boxes to ask their question(s) if the command that is running was reached by a mouse event. --- 683,687 ---- of the frame. ! ** y-or-n-p, yes-or-no-p and map-y-or-n-p now use menus or dialog boxes to ask their question(s) if the command that is running was reached by a mouse event. *************** *** 536,544 **** (actually, any list). ! * The mouse-face property is now implemented, both in overlays and as a text property. It specifies a face to use when the mouse is in the range of text for which the property is specified. ! * When text has a non-nil `intangible' property, you cannot move point within it or right before it. If you try, point actually moves to the end of the intangible text. Note that this means that backward-char --- 693,701 ---- (actually, any list). ! ** The mouse-face property is now implemented, both in overlays and as a text property. It specifies a face to use when the mouse is in the range of text for which the property is specified. ! ** When text has a non-nil `intangible' property, you cannot move point within it or right before it. If you try, point actually moves to the end of the intangible text. Note that this means that backward-char *************** *** 545,555 **** is a no-op when there is an intangible character to the left of point. ! * minibuffer-exit-hook is a new normal hook that is run when you exit the minibuffer. ! * The variable x-cross-pointer-shape specifies the cursor shape to use when the mouse is over text that has a mouse-face property. ! * The new variable interpreter-mode-alist specifes major modes to use for shell scripts that specify a command interpreter. Its elements look like (INTERPRETER . MODE); for example, ("perl" . perl-mode) is --- 702,712 ---- is a no-op when there is an intangible character to the left of point. ! ** minibuffer-exit-hook is a new normal hook that is run when you exit the minibuffer. ! ** The variable x-cross-pointer-shape specifies the cursor shape to use when the mouse is over text that has a mouse-face property. ! ** The new variable interpreter-mode-alist specifes major modes to use for shell scripts that specify a command interpreter. Its elements look like (INTERPRETER . MODE); for example, ("perl" . perl-mode) is *************** *** 557,569 **** file name doesn't indicate which mode to use. ! * If you use a minibuffer-only frame, set the variable minibuffer-auto-raise to t, and entering the minibuffer will then raise the minibuffer frame. ! * If pop-up-frames is t, display-buffer now looks for an existing window in any visible frame, showing the specified buffer, and uses such a window in preference to making a new frame. ! * In the functions next-window, previous-window, next-frame, previous-frame, get-buffer-window, get-lru-window, get-largest-window and delete-windows-on, if you specify `visible' for the last argument, --- 714,726 ---- file name doesn't indicate which mode to use. ! ** If you use a minibuffer-only frame, set the variable minibuffer-auto-raise to t, and entering the minibuffer will then raise the minibuffer frame. ! ** If pop-up-frames is t, display-buffer now looks for an existing window in any visible frame, showing the specified buffer, and uses such a window in preference to making a new frame. ! ** In the functions next-window, previous-window, next-frame, previous-frame, get-buffer-window, get-lru-window, get-largest-window and delete-windows-on, if you specify `visible' for the last argument, *************** *** 570,578 **** it means to consider all visible frames. ! * Mouse events now give the X and Y coordinates in pixels, rather than in characters. You can convert these values to characters by dividing by the values of (frame-char-width) and (frame-char-height). ! * The new functions mouse-pixel-position and set-mouse-pixel-position read and set the mouse position in units of pixels. The existing functions mouse-position and set-mouse-position continue to work with --- 727,735 ---- it means to consider all visible frames. ! ** Mouse events now give the X and Y coordinates in pixels, rather than in characters. You can convert these values to characters by dividing by the values of (frame-char-width) and (frame-char-height). ! ** The new functions mouse-pixel-position and set-mouse-pixel-position read and set the mouse position in units of pixels. The existing functions mouse-position and set-mouse-position continue to work with *************** *** 579,586 **** units of characters. ! * The new function compute-motion is useful for computing the width of certain text when it is displayed. ! * The function vertical-motion now takes an option second argument WINDOW which says which window to use for the display calculations. --- 736,743 ---- units of characters. ! ** The new function compute-motion is useful for computing the width of certain text when it is displayed. ! ** The function vertical-motion now takes an option second argument WINDOW which says which window to use for the display calculations. *************** *** 590,594 **** the specified window, but still scans the current buffer. ! * An error no longer sets last-command to t; the value of last-command does reflect the previous command (the one that got an error). --- 747,751 ---- the specified window, but still scans the current buffer. ! ** An error no longer sets last-command to t; the value of last-command does reflect the previous command (the one that got an error). *************** *** 616,620 **** The undo and yank commands do this. ! * If you specify an explicit title for a new frame when you create it, the title is used as the resource name when looking up X resources to control the shape of that frame. If you don't specify the frame title, --- 773,777 ---- The undo and yank commands do this. ! ** If you specify an explicit title for a new frame when you create it, the title is used as the resource name when looking up X resources to control the shape of that frame. If you don't specify the frame title, *************** *** 621,625 **** the value of x-resource-name is used, as before. ! * The frame parameter user-position, if non-nil, says that the user has specified the frame position. Emacs reports this to the window manager, to tell it not to override the position that the user --- 778,782 ---- the value of x-resource-name is used, as before. ! ** The frame parameter user-position, if non-nil, says that the user has specified the frame position. Emacs reports this to the window manager, to tell it not to override the position that the user *************** *** 626,630 **** specified. ! * Major modes can now set change-major-mode-hook to arrange for state to be cleaned up when the user switches to a new major mode. The function kill-all-local-variables runs this hook. For best results, make the hook a --- 783,787 ---- specified. ! ** Major modes can now set change-major-mode-hook to arrange for state to be cleaned up when the user switches to a new major mode. The function kill-all-local-variables runs this hook. For best results, make the hook a *************** *** 632,636 **** not interfere with the subsequent major mode. ! * The new variable overriding-local-map, if non-nil, specifies a keymap that overrides the current local map, all minor mode keymaps, and all text property keymaps. Incremental search uses this feature to override --- 789,793 ---- not interfere with the subsequent major mode. ! ** The new variable overriding-local-map, if non-nil, specifies a keymap that overrides the current local map, all minor mode keymaps, and all text property keymaps. Incremental search uses this feature to override *************** *** 637,641 **** all other keymaps temporarily. ! * A key definition in a menu keymap can now have additional structure: in addition to (ITEMNAME [HELPSTRING] . COMMAND) which was allowed before, the form (ITEMNAME [HELPSTRING] (...) . COMMAND) is --- 794,798 ---- all other keymaps temporarily. ! ** A key definition in a menu keymap can now have additional structure: in addition to (ITEMNAME [HELPSTRING] . COMMAND) which was allowed before, the form (ITEMNAME [HELPSTRING] (...) . COMMAND) is *************** *** 653,660 **** (x-popup-menu nil KEYMAP). ! * When you specify coordinates for x-popup-menu as a list ((XOFFSET YOFFSET) WINDOW), the coordinates are now measured in pixels. ! * where-is-internal now takes just four arguments: DEFINITION KEYMAP FIRSTONLY NOINDIRECT. The single argument KEYMAP replaces two arguments KEYMAP and KEYMAP1. --- 810,817 ---- (x-popup-menu nil KEYMAP). ! ** When you specify coordinates for x-popup-menu as a list ((XOFFSET YOFFSET) WINDOW), the coordinates are now measured in pixels. ! ** where-is-internal now takes just four arguments: DEFINITION KEYMAP FIRSTONLY NOINDIRECT. The single argument KEYMAP replaces two arguments KEYMAP and KEYMAP1. *************** *** 674,678 **** searches in exactly the same was as command execution does. ! * Use the macro define-derived-mode to define a new major mode that inherits the definition of another major mode. Here's how to define a command named hypertext-mode that inherits from the command text-mode: --- 831,835 ---- searches in exactly the same was as command execution does. ! ** Use the macro define-derived-mode to define a new major mode that inherits the definition of another major mode. Here's how to define a command named hypertext-mode that inherits from the command text-mode: *************** *** 690,694 **** to the name of the new mode. ! * A syntax table can now inherit the data for some characters from standard-syntax-table, while specifying other characters itself. Syntax code 13 means "inherit this character from the standard syntax --- 847,851 ---- to the name of the new mode. ! ** A syntax table can now inherit the data for some characters from standard-syntax-table, while specifying other characters itself. Syntax code 13 means "inherit this character from the standard syntax *************** *** 706,718 **** major modes. ! * The new function transpose-regions swaps two regions of the buffer. It preserves the markers in those two regions, so that they stay with the surrounding text as it is swapped. ! * revert-buffer now runs before-revert-hook at the beginning and after-revert-hook at the end. These can be used by minor modes that need to clean up state variables. ! * The new function get-char-property is like get-text-property, but checks for overlays with properties as well as for text properties. It checks for overlays first, in order of descending priority, and --- 863,875 ---- major modes. ! ** The new function transpose-regions swaps two regions of the buffer. It preserves the markers in those two regions, so that they stay with the surrounding text as it is swapped. ! ** revert-buffer now runs before-revert-hook at the beginning and after-revert-hook at the end. These can be used by minor modes that need to clean up state variables. ! ** The new function get-char-property is like get-text-property, but checks for overlays with properties as well as for text properties. It checks for overlays first, in order of descending priority, and *************** *** 723,729 **** active on that window are considered. ! * Overlays can have the `invisible' property. ! * The function insert-file-contents now takes an optional fifth argument called REPLACE. If this is t, it means to replace the contents of the buffer (actually, just the accessible portion) --- 880,886 ---- active on that window are considered. ! ** Overlays can have the `invisible' property. ! ** The function insert-file-contents now takes an optional fifth argument called REPLACE. If this is t, it means to replace the contents of the buffer (actually, just the accessible portion) *************** *** 734,745 **** data in the undo list. ! * If you set auto-save-list-file-name to a non-nil value, it specifies a file; then auto-saving writes a list of all auto save file names of all Emacs buffers into that file. ! * The variable inhibit-first-line-modes-regexps specifies classes of file names for which -*- on the first line should not be looked for. ! * The variables before-change-functions and after-change-functions hold lists of functions to call before and after a change in the buffer's text. They work much like before-change-function and --- 891,902 ---- data in the undo list. ! ** If you set auto-save-list-file-name to a non-nil value, it specifies a file; then auto-saving writes a list of all auto save file names of all Emacs buffers into that file. ! ** The variable inhibit-first-line-modes-regexps specifies classes of file names for which -*- on the first line should not be looked for. ! ** The variables before-change-functions and after-change-functions hold lists of functions to call before and after a change in the buffer's text. They work much like before-change-function and *************** *** 750,754 **** after-change-function obsolete. ! * The variable kill-buffer-query-functions holds a list of functions to be called with no arguments when a buffer is about to be killed. (That buffer is the current buffer when the function is called.) --- 907,911 ---- after-change-function obsolete. ! ** The variable kill-buffer-query-functions holds a list of functions to be called with no arguments when a buffer is about to be killed. (That buffer is the current buffer when the function is called.) *************** *** 756,760 **** (and the remaining functions in the list are not called). ! * The variable kill-emacs-query-functions holds a list of functions to be called with no arguments when you ask to exit Emacs. If any of the functions returns nil, the exit is canceled --- 913,917 ---- (and the remaining functions in the list are not called). ! ** The variable kill-emacs-query-functions holds a list of functions to be called with no arguments when you ask to exit Emacs. If any of the functions returns nil, the exit is canceled *************** *** 761,788 **** (and the remaining functions in the list are not called). ! * The argument for buffer-disable-undo is now optional, like the argument for buffer-enable-undo. ! * The new variable system-configuration holds the canonical three-part GNU configuration name for which Emacs was built. ! * The function system-name now tries harder to return a fully qualified domain name. ! * The variable emacs-major-version holds the major version number of Emacs. (Currently 19.) ! * The variable emacs-minor-version holds the minor version number of Emacs. (Currently 23.) ! * The default value of comint-input-autoexpand is now nil. However, Shell mode sets it from the value of shell-input-autoexpand, whose default value is `history'. ! * The new function set-process-window-size specifies the terminal window size for a subprocess. On some systems it sends the subprocess a signal to let it know that the size has changed. ! * %P is a new way to display a percentage in the mode line. It displays the percentage of the buffer text that is above the *bottom* of the window (which includes the text visible, in the window as well --- 918,945 ---- (and the remaining functions in the list are not called). ! ** The argument for buffer-disable-undo is now optional, like the argument for buffer-enable-undo. ! ** The new variable system-configuration holds the canonical three-part GNU configuration name for which Emacs was built. ! ** The function system-name now tries harder to return a fully qualified domain name. ! ** The variable emacs-major-version holds the major version number of Emacs. (Currently 19.) ! ** The variable emacs-minor-version holds the minor version number of Emacs. (Currently 23.) ! ** The default value of comint-input-autoexpand is now nil. However, Shell mode sets it from the value of shell-input-autoexpand, whose default value is `history'. ! ** The new function set-process-window-size specifies the terminal window size for a subprocess. On some systems it sends the subprocess a signal to let it know that the size has changed. ! ** %P is a new way to display a percentage in the mode line. It displays the percentage of the buffer text that is above the *bottom* of the window (which includes the text visible, in the window as well *************** *** 790,798 **** percentage if the top of the buffer is visible on screen. ! * %+ in the mode line specs displays `*' if the buffer is modified, and otherwise `-'. It never displays `%', as `%*' would do; whether the buffer is read-only has no effect on %+. ! * The new functions ffloor, fceil, fround and ftruncate take a floating point argument and return a floating point result whose value is a nearby integer. ffloor returns the nearest integer below; fceil, --- 947,955 ---- percentage if the top of the buffer is visible on screen. ! ** %+ in the mode line specs displays `*' if the buffer is modified, and otherwise `-'. It never displays `%', as `%*' would do; whether the buffer is read-only has no effect on %+. ! ** The new functions ffloor, fceiling, fround and ftruncate take a floating point argument and return a floating point result whose value is a nearby integer. ffloor returns the nearest integer below; fceil, *************** *** 800,807 **** direction towards zero; fround, the nearest integer. ! * Setting `print-escape-newlines' to a non-nil value now also makes formfeeds print as ``\f''. ! * auto-mode-alist now has a new feature. If an element has the form (REGEXP FUNCTION t), and REGEXP matches the file name, then after calling FUNCTION, Emacs deletes the part of the file name that matched REGEXP --- 957,964 ---- direction towards zero; fround, the nearest integer. ! ** Setting `print-escape-newlines' to a non-nil value now also makes formfeeds print as ``\f''. ! ** auto-mode-alist now has a new feature. If an element has the form (REGEXP FUNCTION t), and REGEXP matches the file name, then after calling FUNCTION, Emacs deletes the part of the file name that matched REGEXP *************** *** 812,818 **** proper mode according to the name sans .gz. ! * The new function emacs-pid returns the process ID number of Emacs. ! * user-login-name now consistently checks the LOGNAME environment variable before USER. user-original-login-name is obsolete, since it provides the same functionality. To ignore the environment variables, --- 969,975 ---- proper mode according to the name sans .gz. ! ** The new function emacs-pid returns the process ID number of Emacs. ! ** user-login-name now consistently checks the LOGNAME environment variable before USER. user-original-login-name is obsolete, since it provides the same functionality. To ignore the environment variables, *************** *** 819,823 **** use user-real-login-name. ! * There is a more general way of handling the system-specific X keysyms. Set the variable system-key-alist to an alist containing elements of the form (CODE . SYMBOL), where CODE is the numeric keysym --- 976,980 ---- use user-real-login-name. ! ** There is a more general way of handling the system-specific X keysyms. Set the variable system-key-alist to an alist containing elements of the form (CODE . SYMBOL), where CODE is the numeric keysym *************** *** 825,829 **** function key. ! * You can use the variable command-line-functions to set up functions to process unrecognized command line arguments. The variable's value should be a list of functions of no arguments. The functions are --- 982,986 ---- function key. ! ** You can use the variable command-line-functions to set up functions to process unrecognized command line arguments. The variable's value should be a list of functions of no arguments. The functions are *************** *** 836,840 **** as well by removing them from command-line-args-left. ! * There's a new way for a magic file name handler to run a primitive and inhibit handling of the file name. Here is how to do it: --- 993,997 ---- as well by removing them from command-line-args-left. ! ** There's a new way for a magic file name handler to run a primitive and inhibit handling of the file name. Here is how to do it: *************** *** 856,864 **** argument. ! * The variable completion-regexp-list affects the completion primitives try-completion and all-completions. They consider only the possible completions that match each regexp in the list. ! * Case conversion in the function replace-match has been changed. The old behavior was this: if any word in the old text was --- 1013,1021 ---- argument. ! ** The variable completion-regexp-list affects the completion primitives try-completion and all-completions. They consider only the possible completions that match each regexp in the list. ! ** Case conversion in the function replace-match has been changed. The old behavior was this: if any word in the old text was *************** *** 869,876 **** replace-match capitalizes the first word of the replacement text. ! * You can now specify a case table with CANON non-nil and EQV nil. Then the EQV part of the case table is deduced from CANON. ! * The new function minibuffer-prompt takes no arguments and returns the current minibuffer prompt string. --- 1026,1033 ---- replace-match capitalizes the first word of the replacement text. ! ** You can now specify a case table with CANON non-nil and EQV nil. Then the EQV part of the case table is deduced from CANON. ! ** The new function minibuffer-prompt takes no arguments and returns the current minibuffer prompt string. *************** *** 878,887 **** returns the display width of the minibuffer prompt string. ! * The new function frame-first-window returns the window at the upper left corner of a given frame. ! * wholenump is a new alias for natnump. ! * The variable installation-directory, if non-@code{nil}, names a directory within which to look for the `lib-src' and `etc' subdirectories. This is non-nil when Emacs can't find those --- 1035,1044 ---- returns the display width of the minibuffer prompt string. ! ** The new function frame-first-window returns the window at the upper left corner of a given frame. ! ** wholenump is a new alias for natnump. ! ** The variable installation-directory, if non-@code{nil}, names a directory within which to look for the `lib-src' and `etc' subdirectories. This is non-nil when Emacs can't find those *************** *** 889,893 **** near where the Emacs executable was found. ! * invocation-name and invocation-directory are now variables as well as functions. The variable values are the same values that the functions return: the Emacs program name sans directories, and the --- 1046,1050 ---- near where the Emacs executable was found. ! ** invocation-name and invocation-directory are now variables as well as functions. The variable values are the same values that the functions return: the Emacs program name sans directories, and the *************** *** 895,899 **** can't determine which directory it should be.) ! * Installation change regarding version number counting. The version number of an Emacs executable contains three numbers. --- 1052,1056 ---- can't determine which directory it should be.) ! ** Installation change regarding version number counting. The version number of an Emacs executable contains three numbers. *************** *** 906,912 **** by building Emacs. ! Changes in 19.22. ! * The mouse click M-mouse-2 now inserts the current secondary selection (from Emacs or any other X client) where you click. It does not move point. --- 1063,1069 ---- by building Emacs. ! * Changes in 19.22. ! ** The mouse click M-mouse-2 now inserts the current secondary selection (from Emacs or any other X client) where you click. It does not move point. *************** *** 919,954 **** secondary selection. Any suggestions? ! * New packages: ! ** `icomplete' provides character-by-character information about what you could complete if you type TAB. ! ** `avoid' moves the mouse away from point so that it doesn't hide your typing. ! ** `shadowfile' helps you update files that are supposed to be stored identically in different places (perhaps on different machines). ! * C-h p now knows about four additional keywords: data, faces, mouse, and matching. ! * The key for starting an inferior Lisp process, in Lisp mode, is now C-c C-z instead of C-c C-l. ! * When the VC commands ask whether to save the buffer, if you say no, they signal an error. This is so that you won't operate on the wrong data. ! * ISO Accents mode now supports `"s' as a way of typing German sharp s. ! * By default, comint buffers (including Shell mode and debuggers) no longer try to scroll to keep the cursor on the bottom line. This feature was added in 19.21 but did not work smoothly enough. ! * Emacs now handles the window manager "delete window" operation. ! * Display of buffers with text properties is much faster now. ! * The feature previously announced whereby `insert' does not inherit text properties from surrounding text was not fully implemented before; but now it is. use `insert-and-inherit' if you wish to --- 1076,1111 ---- secondary selection. Any suggestions? ! ** New packages: ! *** `icomplete' provides character-by-character information about what you could complete if you type TAB. ! *** `avoid' moves the mouse away from point so that it doesn't hide your typing. ! *** `shadowfile' helps you update files that are supposed to be stored identically in different places (perhaps on different machines). ! ** C-h p now knows about four additional keywords: data, faces, mouse, and matching. ! ** The key for starting an inferior Lisp process, in Lisp mode, is now C-c C-z instead of C-c C-l. ! ** When the VC commands ask whether to save the buffer, if you say no, they signal an error. This is so that you won't operate on the wrong data. ! ** ISO Accents mode now supports `"s' as a way of typing German sharp s. ! ** By default, comint buffers (including Shell mode and debuggers) no longer try to scroll to keep the cursor on the bottom line. This feature was added in 19.21 but did not work smoothly enough. ! ** Emacs now handles the window manager "delete window" operation. ! ** Display of buffers with text properties is much faster now. ! ** The feature previously announced whereby `insert' does not inherit text properties from surrounding text was not fully implemented before; but now it is. use `insert-and-inherit' if you wish to *************** *** 955,959 **** inherit sticky properties from the surrounding text. ! * The functions next-property-change, previous-property-change, next-single-property-change, and previous-single-property-change now take one additional optional argument LIMIT that is a position at --- 1112,1116 ---- inherit sticky properties from the surrounding text. ! ** The functions next-property-change, previous-property-change, next-single-property-change, and previous-single-property-change now take one additional optional argument LIMIT that is a position at *************** *** 968,978 **** different properties. ! User editing changes in version 19.21. ! * ISO Accents mode supports four additional characters: A-with-ring (entered as /A), AE ligature (entered as /E), and their lower-case equivalents. ! User editing changes in version 19.20. (See following page for Lisp programming changes.) --- 1125,1135 ---- different properties. ! * User editing changes in version 19.21. ! ** ISO Accents mode supports four additional characters: A-with-ring (entered as /A), AE ligature (entered as /E), and their lower-case equivalents. ! * User editing changes in version 19.20. (See following page for Lisp programming changes.) *************** *** 981,992 **** have those editions, do read this page. ! * Dragging with mouse button 1 now puts the selected region in the kill ring so you can paste it into other X applications. ! * Double and triple clicks with button 1 now behave as in xterm, selecting the word or line surrounding where you click. If you drag after the last click, you can select a range of words or lines. ! * You can use button 3 to extend a mouse-selected region, as in xterm. This works for regions selected either by dragging Mouse-1 or by multiple-clicking Mouse-1. Clicking Mouse-3 moves the end of the --- 1138,1149 ---- have those editions, do read this page. ! ** Dragging with mouse button 1 now puts the selected region in the kill ring so you can paste it into other X applications. ! ** Double and triple clicks with button 1 now behave as in xterm, selecting the word or line surrounding where you click. If you drag after the last click, you can select a range of words or lines. ! ** You can use button 3 to extend a mouse-selected region, as in xterm. This works for regions selected either by dragging Mouse-1 or by multiple-clicking Mouse-1. Clicking Mouse-3 moves the end of the *************** *** 999,1011 **** thus selected. ! * The secondary selection commands, M-Mouse-1 and M-Mouse-3, have been likewise modified. ! * You can now search for strings and regexps using the Edit menu bar menu. ! * You can now access bookmarks using the Bookmark submenu in the File menu in the menu bar. ! * ISO Accents mode, a buffer-local minor mode, provides a convenient way to type certain non-ASCII characters. It makes the characters `, ', ", ^, ~ and / serve as modifiers for the following letter. ` and ' --- 1156,1168 ---- thus selected. ! ** The secondary selection commands, M-Mouse-1 and M-Mouse-3, have been likewise modified. ! ** You can now search for strings and regexps using the Edit menu bar menu. ! ** You can now access bookmarks using the Bookmark submenu in the File menu in the menu bar. ! ** ISO Accents mode, a buffer-local minor mode, provides a convenient way to type certain non-ASCII characters. It makes the characters `, ', ", ^, ~ and / serve as modifiers for the following letter. ` and ' *************** *** 1030,1034 **** ~> => right guillemet ! * iso-transl.el is a new library that replaces iso-insert.el. It defines C-x 8 as an insertion prefix for the ISO characters between 128 and 255, much like iso-insert, except that iso-transl --- 1187,1191 ---- ~> => right guillemet ! ** iso-transl.el is a new library that replaces iso-insert.el. It defines C-x 8 as an insertion prefix for the ISO characters between 128 and 255, much like iso-insert, except that iso-transl *************** *** 1039,1043 **** load the library iso-syntax. (This is not new.) ! * M-TAB in Text mode now runs the command ispell-complete-word which performs completion using the spelling dictionary. --- 1196,1200 ---- load the library iso-syntax. (This is not new.) ! ** M-TAB in Text mode now runs the command ispell-complete-word which performs completion using the spelling dictionary. *************** *** 1047,1054 **** beginning of a word. ! * In incremental search, you can use M-y to yank the most recent kill into the search string. ! * The new function ispell-message checks the spelling of a message you are about to send or post. It ignores text cited from other messages. --- 1204,1211 ---- beginning of a word. ! ** In incremental search, you can use M-y to yank the most recent kill into the search string. ! ** The new function ispell-message checks the spelling of a message you are about to send or post. It ignores text cited from other messages. *************** *** 1058,1062 **** (setq news-inews-hook (setq mail-send-hook 'ispell-message)) ! * There is now a separate minibuffer history list for the names of extended commands. This history list is used by M-x when reading the command name. The motivation for this is to prevent command --- 1215,1219 ---- (setq news-inews-hook (setq mail-send-hook 'ispell-message)) ! ** There is now a separate minibuffer history list for the names of extended commands. This history list is used by M-x when reading the command name. The motivation for this is to prevent command *************** *** 1068,1083 **** its arguments, and you must use C-x ESC ESC to access it. ! * You can use the new command C-x v ~ VERSION RET to examine a specified version of a file that is maintained with version control. ! * In Indented Text mode, only blank lines now separate paragraphs. Indented lines continue the paragraph that is in progress. This makes the user option variable adaptive-fill-mode have its intended effect. ! * Local variable specifications in files for variables whose names end in `-hook' and `-function' are now controlled by the variable `enable-local-eval', just like the `eval' variable. ! * C-x r j (jump-to-register) when restoring a frame configuration now makes all unwanted frames (existing frames not mentioned in the configuration) invisible. --- 1225,1240 ---- its arguments, and you must use C-x ESC ESC to access it. ! ** You can use the new command C-x v ~ VERSION RET to examine a specified version of a file that is maintained with version control. ! ** In Indented Text mode, only blank lines now separate paragraphs. Indented lines continue the paragraph that is in progress. This makes the user option variable adaptive-fill-mode have its intended effect. ! ** Local variable specifications in files for variables whose names end in `-hook' and `-function' are now controlled by the variable `enable-local-eval', just like the `eval' variable. ! ** C-x r j (jump-to-register) when restoring a frame configuration now makes all unwanted frames (existing frames not mentioned in the configuration) invisible. *************** *** 1086,1093 **** C-x r j. ! * You can customize the calendar to display weeks beginning on Monday: set the variable `calendar-week-start-day' to 1. ! * Rmail changes. If you save messages to a file in Unix format while viewing a message --- 1243,1250 ---- C-x r j. ! ** You can customize the calendar to display weeks beginning on Monday: set the variable `calendar-week-start-day' to 1. ! ** Rmail changes. If you save messages to a file in Unix format while viewing a message *************** *** 1095,1099 **** of each message copied. ! * Comint mode changes. C-c C-e shows as much output as possible in the window. --- 1252,1256 ---- of each message copied. ! ** Comint mode changes. C-c C-e shows as much output as possible in the window. *************** *** 1163,1167 **** bar. ! * Shell mode Paragraph motion and marking commands (default bindings M-{, M-}, M-h) operate --- 1320,1324 ---- bar. ! ** Shell mode Paragraph motion and marking commands (default bindings M-{, M-}, M-h) operate *************** *** 1194,1207 **** configuration you choose should match the underlying shell, of course. ! Emacs Lisp programming changes in Emacs 19.20. ! * A new function `remove-hook' is now used to remove a hook that you might have added with `add-hook'. ! * There is now a Lisp pretty-printer in the library `pp'. ! * The partial Common Lisp support has been entirely reimplemented. ! * When you insert text using `insert', `insert-before-markers' or `insert-buffer-substring', text properties are no longer inherited from the surrounding text. --- 1351,1364 ---- configuration you choose should match the underlying shell, of course. ! * Emacs Lisp programming changes in Emacs 19.20. ! ** A new function `remove-hook' is now used to remove a hook that you might have added with `add-hook'. ! ** There is now a Lisp pretty-printer in the library `pp'. ! ** The partial Common Lisp support has been entirely reimplemented. ! ** When you insert text using `insert', `insert-before-markers' or `insert-buffer-substring', text properties are no longer inherited from the surrounding text. *************** *** 1212,1216 **** The self-inserting character command does do inheritance. ! * Frame creation hooks. The function make-frame now runs the normal hooks --- 1369,1373 ---- The self-inserting character command does do inheritance. ! ** Frame creation hooks. The function make-frame now runs the normal hooks *************** *** 1217,1221 **** before-make-frame-hook and after-make-frame-hook. ! * You can now use function-key-map to make a key an alias for other key sequences that can vary depending on circumstances. To do this, give the key a definition in function-key-map which is a function --- 1374,1378 ---- before-make-frame-hook and after-make-frame-hook. ! ** You can now use function-key-map to make a key an alias for other key sequences that can vary depending on circumstances. To do this, give the key a definition in function-key-map which is a function *************** *** 1248,1252 **** you can just ignore the prompt value. ! * Changes for reading and writing text properties. New low-level Lisp features make it possible to write Lisp programs to --- 1405,1409 ---- you can just ignore the prompt value. ! ** Changes for reading and writing text properties. New low-level Lisp features make it possible to write Lisp programs to *************** *** 1300,1304 **** types that are reasonably flexible, and not too hard to encode. ! * Comint completion. Currently comint-dynamic-complete-command (and associated variable --- 1457,1461 ---- types that are reasonably flexible, and not too hard to encode. ! ** Comint completion. Currently comint-dynamic-complete-command (and associated variable *************** *** 1311,1315 **** already). ! * Comint history reference expansion Currently comint-input-autoexpand is 'history, which means only expand --- 1468,1472 ---- already). ! ** Comint history reference expansion Currently comint-input-autoexpand is 'history, which means only expand *************** *** 1330,1334 **** by having their input change in front of their eyes. ! * Argument delimiters and Comint mode. Currently comint-delimiter-argument-list is '(), which means no strings are --- 1487,1491 ---- by having their input change in front of their eyes. ! ** Argument delimiters and Comint mode. Currently comint-delimiter-argument-list is '(), which means no strings are *************** *** 1338,1342 **** mode might want to set this to '("." "(" ")") or some such. ! * Comint output hook. There is now a hook, comint-output-filter-hook, that is run-hooks'ed by the --- 1495,1499 ---- mode might want to set this to '("." "(" ")") or some such. ! ** Comint output hook. There is now a hook, comint-output-filter-hook, that is run-hooks'ed by the *************** *** 1352,1356 **** the position lies on) and process-mark. ! * Comint scrolling. There is now automatic scrolling of process windows. --- 1509,1513 ---- the position lies on) and process-mark. ! ** Comint scrolling. There is now automatic scrolling of process windows. *************** *** 1361,1365 **** possible. But, then again, there is a comint-show-maximum-output command. ! * Comint history retrieval. The input following point is not deleted when moving around the input history --- 1518,1522 ---- possible. But, then again, there is a comint-show-maximum-output command. ! ** Comint history retrieval. The input following point is not deleted when moving around the input history *************** *** 1371,1381 **** Emacs command history. ! Changes in version 19.19. ! * The new package bookmark.el records named bookmarks: positions that you can jump to. Bookmarks are saved automatically between Emacs sessions. ! * Another simpler package saveplace.el records your position in each file when you kill its buffer (or kill Emacs), and jumps to the same position when you visit the file again (even in another Emacs --- 1528,1538 ---- Emacs command history. ! * Changes in version 19.19. ! ** The new package bookmark.el records named bookmarks: positions that you can jump to. Bookmarks are saved automatically between Emacs sessions. ! ** Another simpler package saveplace.el records your position in each file when you kill its buffer (or kill Emacs), and jumps to the same position when you visit the file again (even in another Emacs *************** *** 1383,1387 **** use (setq-default save-place t) to turn it on for all files. ! * In Outline mode, you can now customize how to compute the level of a heading line. Set `outline-level' to a function of no arguments which returns the level, assuming point is at the beginning of a heading --- 1540,1544 ---- use (setq-default save-place t) to turn it on for all files. ! ** In Outline mode, you can now customize how to compute the level of a heading line. Set `outline-level' to a function of no arguments which returns the level, assuming point is at the beginning of a heading *************** *** 1388,1399 **** line. ! * You can now specify the prefix key to use for Outline minor mode. (The default is C-c.) Set the variable outline-minor-mode-prefix to the key sequence you want to use (as a string or vector). ! * In Bibtex mode, C-c e has been changed to C-c C-b. This is because C-c followed by a letter is reserved for users. ! * The `mod' function is no longer an alias for `%', but is a separate function that yields a result with the same sign as the divisor. `floor' now takes an optional second argument, which divides the first argument before the floor is --- 1545,1556 ---- line. ! ** You can now specify the prefix key to use for Outline minor mode. (The default is C-c.) Set the variable outline-minor-mode-prefix to the key sequence you want to use (as a string or vector). ! ** In Bibtex mode, C-c e has been changed to C-c C-b. This is because C-c followed by a letter is reserved for users. ! ** The `mod' function is no longer an alias for `%', but is a separate function that yields a result with the same sign as the divisor. `floor' now takes an optional second argument, which divides the first argument before the floor is *************** *** 1400,1414 **** taken. ! * `%' no longer allows floating point arguments, since the results were often inconsistent with integer `%'. ! Changes in version 19.18. ! * Typing C-z in an iconified Emacs frame now deiconifies it. ! * hilit19 is a new library for automatic highlighting of parts of the text in the buffer, based on its meaning and context. ! * Killing no longer sends the killed text to the X clipboard. And large strings are not put in the cut buffer either. The variable x-cut-buffer-max specifies the maximum number of characters --- 1557,1571 ---- taken. ! ** `%' no longer allows floating point arguments, since the results were often inconsistent with integer `%'. ! * Changes in version 19.18. ! ** Typing C-z in an iconified Emacs frame now deiconifies it. ! ** hilit19 is a new library for automatic highlighting of parts of the text in the buffer, based on its meaning and context. ! ** Killing no longer sends the killed text to the X clipboard. And large strings are not put in the cut buffer either. The variable x-cut-buffer-max specifies the maximum number of characters *************** *** 1415,1428 **** to put in the cut buffer. ! * The new command C-x 5 o (other-frame) selects different frames, successively, in cyclic order. It does for frames what C-x o does for windows. ! * The command M-ESC (eval-expression) has its own command history. ! * The commands M-! and M-| for running shell commands have their own command history. ! * If the directory containing the Emacs executable has a sibling named `lisp', that `lisp' directory is added to the end of `load-path' (provided you don't override the normal value with the EMACSLOADPATH --- 1572,1585 ---- to put in the cut buffer. ! ** The new command C-x 5 o (other-frame) selects different frames, successively, in cyclic order. It does for frames what C-x o does for windows. ! ** The command M-ESC (eval-expression) has its own command history. ! ** The commands M-! and M-| for running shell commands have their own command history. ! ** If the directory containing the Emacs executable has a sibling named `lisp', that `lisp' directory is added to the end of `load-path' (provided you don't override the normal value with the EMACSLOADPATH *************** *** 1430,1438 **** an installed Emacs from place to place. ! * M-x validate-tex-buffer now records the locations of mismatches found in the `*Occur*' buffer. You can go to that buffer and type C-c C-c to visit a particular mismatch. ! * There are new commands in Shell mode. C-c C-n and C-c C-p move point to the next or previous shell input line. --- 1587,1595 ---- an installed Emacs from place to place. ! ** M-x validate-tex-buffer now records the locations of mismatches found in the `*Occur*' buffer. You can go to that buffer and type C-c C-c to visit a particular mismatch. ! ** There are new commands in Shell mode. C-c C-n and C-c C-p move point to the next or previous shell input line. *************** *** 1440,1444 **** C-c C-d is now another way to send an end-of-file to the subshell. ! * Changes to calendar/diary. Time zone data is now determined automatically, including the --- 1597,1601 ---- C-c C-d is now another way to send an end-of-file to the subshell. ! ** Changes to calendar/diary. Time zone data is now determined automatically, including the *************** *** 1461,1469 **** correctly based on values you assign to various variables. ! * The functions x-rebind-key and x-rebind-keys have been deleted, because you can accomplish the same job by binding keys to keyboard macros. ! * Emacs now distinguishes double and triple drag events and double and triple button-down events. These work analogously to double and triple click events. --- 1618,1626 ---- correctly based on values you assign to various variables. ! ** The functions x-rebind-key and x-rebind-keys have been deleted, because you can accomplish the same job by binding keys to keyboard macros. ! ** Emacs now distinguishes double and triple drag events and double and triple button-down events. These work analogously to double and triple click events. *************** *** 1475,1479 **** also not defined, it may convert further. ! * The new function event-click-count returns the number of clicks, from an event which is a list. It is 1 for an ordinary click, drag, or button-down event, 2 for a double event, and 3 or more for a triple --- 1632,1636 ---- also not defined, it may convert further. ! ** The new function event-click-count returns the number of clicks, from an event which is a list. It is 1 for an ordinary click, drag, or button-down event, 2 for a double event, and 3 or more for a triple *************** *** 1480,1487 **** event. ! * The new function previous-frame is like next-frame, but moves around through the set of existing frames in the opposite order. ! * The post-command-hook now runs even after commands that get an error and return to top level. As a consequence of the same change, this hook also runs before Emacs reads the first command. That might sound --- 1637,1644 ---- event. ! ** The new function previous-frame is like next-frame, but moves around through the set of existing frames in the opposite order. ! ** The post-command-hook now runs even after commands that get an error and return to top level. As a consequence of the same change, this hook also runs before Emacs reads the first command. That might sound *************** *** 1490,1498 **** a command, but after it has been read. ! * You can turn off the text property hooks that run when point moves to certain places in the buffer, by binding inhibit-point-motion-hooks to a non-nil value. ! * Inserting a string with no text properties into the buffer normally inherits the properties of the preceding character. You can now control this inheritence by setting the front-sticky and --- 1647,1655 ---- a command, but after it has been read. ! ** You can turn off the text property hooks that run when point moves to certain places in the buffer, by binding inhibit-point-motion-hooks to a non-nil value. ! ** Inserting a string with no text properties into the buffer normally inherits the properties of the preceding character. You can now control this inheritence by setting the front-sticky and *************** *** 1525,1529 **** used if it is front-sticky for that property. ! * If you give a character a non-nil `invisible' text property, the character does not appear on the screen. This works much like selective display. --- 1682,1686 ---- used if it is front-sticky for that property. ! ** If you give a character a non-nil `invisible' text property, the character does not appear on the screen. This works much like selective display. *************** *** 1532,1560 **** versions. ! * In Info, when you go to a node, it runs the normal hook Info-selection-hook. ! * You can use the new function `invocation-directory' to get the name of the directory containing the Emacs executable that was run. ! * Entry to the minibuffer runs the normal hook minibuffer-setup-hook. ! * The new function minibuffer-window-active-p takes one argument, a minibuffer window, and returns t if the window is currently active. ! Changes in version 19.17. ! * When Emacs displays a list of completions in a buffer, you can select a completion by clicking mouse button 2 on that completion. ! * Use the command `list-faces-display' to display a list of all the currently defined faces, showing what they look like. ! * Menu bar items from local maps now come after the usual items. ! * The Help menu bar item always comes last in the menu bar. ! * If you enable Font-Lock mode on a buffer containing a program (certain languages such as C and Lisp are supported), everything you type is automatically given a face property appropriate to its --- 1689,1717 ---- versions. ! ** In Info, when you go to a node, it runs the normal hook Info-selection-hook. ! ** You can use the new function `invocation-directory' to get the name of the directory containing the Emacs executable that was run. ! ** Entry to the minibuffer runs the normal hook minibuffer-setup-hook. ! ** The new function minibuffer-window-active-p takes one argument, a minibuffer window, and returns t if the window is currently active. ! * Changes in version 19.17. ! ** When Emacs displays a list of completions in a buffer, you can select a completion by clicking mouse button 2 on that completion. ! ** Use the command `list-faces-display' to display a list of all the currently defined faces, showing what they look like. ! ** Menu bar items from local maps now come after the usual items. ! ** The Help menu bar item always comes last in the menu bar. ! ** If you enable Font-Lock mode on a buffer containing a program (certain languages such as C and Lisp are supported), everything you type is automatically given a face property appropriate to its *************** *** 1562,1572 **** constants, names of functions being defined, and so on. ! * Dunnet, an adventure game, is now available. ! * Several major modes now have their own menu bar items, including Dired, Rmail, and Sendmail. We would like to add suitable menu bar items to other major modes. ! * The key binding C-x a C-h has been eliminated. This is because it got in the way of the general feature of typing C-h after a prefix character. If you want to run --- 1719,1729 ---- constants, names of functions being defined, and so on. ! ** Dunnet, an adventure game, is now available. ! ** Several major modes now have their own menu bar items, including Dired, Rmail, and Sendmail. We would like to add suitable menu bar items to other major modes. ! ** The key binding C-x a C-h has been eliminated. This is because it got in the way of the general feature of typing C-h after a prefix character. If you want to run *************** *** 1573,1577 **** inverse-add-global-abbrev, you can use C-x a - or C-x a i g instead. ! * If you set the variable `rmail-mail-new-frame' to a non-nil value, all the Rmail commands to send mail make a new frame to do it in. When you send the message, or use the menu bar command not to send it, --- 1730,1734 ---- inverse-add-global-abbrev, you can use C-x a - or C-x a i g instead. ! ** If you set the variable `rmail-mail-new-frame' to a non-nil value, all the Rmail commands to send mail make a new frame to do it in. When you send the message, or use the menu bar command not to send it, *************** *** 1578,1582 **** that frame is deleted. ! * In Rmail, the o and C-o commands are now almost interchangeable. Both commands check the format of the file you specify, and append the message to it in Rmail format if it is an Rmail file, and in --- 1735,1739 ---- that frame is deleted. ! ** In Rmail, the o and C-o commands are now almost interchangeable. Both commands check the format of the file you specify, and append the message to it in Rmail format if it is an Rmail file, and in *************** *** 1584,1592 **** specify a new file. ! * The function `copy-face' now takes an optional fourth argument NEW-FRAME. If you specify this, it copies the definition of face OLD-FACE on frame FRAME to face NEW-NAME on frame NEW-FRAME. ! * A local map can now cancel out one of the global map's menu items. Just define that subcommand of the menu item with `undefined' as the definition. For example, this cancels out the `Buffers' item --- 1741,1749 ---- specify a new file. ! ** The function `copy-face' now takes an optional fourth argument NEW-FRAME. If you specify this, it copies the definition of face OLD-FACE on frame FRAME to face NEW-NAME on frame NEW-FRAME. ! ** A local map can now cancel out one of the global map's menu items. Just define that subcommand of the menu item with `undefined' as the definition. For example, this cancels out the `Buffers' item *************** *** 1595,1599 **** (local-set-key [menu-bar buffer] 'undefined) ! * To put global items at the end of the menu bar, use the new variable `menu-bar-final-items'. It should be a list of symbols--event types bound in the menu bar. The menu bar items for these symbols are --- 1752,1756 ---- (local-set-key [menu-bar buffer] 'undefined) ! ** To put global items at the end of the menu bar, use the new variable `menu-bar-final-items'. It should be a list of symbols--event types bound in the menu bar. The menu bar items for these symbols are *************** *** 1600,1604 **** moved to the end. ! * The list returned by `buffer-local-variables' now contains cons-cell elements of the form (SYMBOL . VALUE) only for buffer-local variables that have values. For unbound buffer-local variables, the variable --- 1757,1761 ---- moved to the end. ! ** The list returned by `buffer-local-variables' now contains cons-cell elements of the form (SYMBOL . VALUE) only for buffer-local variables that have values. For unbound buffer-local variables, the variable *************** *** 1605,1609 **** name (symbol) appears directly as an element of the list. ! * The `modification-hooks' property of a character no longer affects insertion; it runs only for deletion and modification of the character. --- 1762,1766 ---- name (symbol) appears directly as an element of the list. ! ** The `modification-hooks' property of a character no longer affects insertion; it runs only for deletion and modification of the character. *************** *** 1614,1618 **** character. ! * Buffer modification now runs hooks belonging to overlays as well as hooks belonging to characters. If an overlay has a `modification-hooks' property, it applies to any change to text in the --- 1771,1775 ---- character. ! ** Buffer modification now runs hooks belonging to overlays as well as hooks belonging to characters. If an overlay has a `modification-hooks' property, it applies to any change to text in the *************** *** 1627,1635 **** followed by the bounds of the range being modified. ! * The new `-name NAME' option directs Emacs to search for its X resources using the name `NAME', and sets the title of the initial frame. This argument was added for consistency with other X clients. ! * The new `-xrm DATABASE' option tells Emacs to treat the string DATABASE as the text of an X resource database. Emacs searches DATABASE for resource values, in addition to the usual places. This --- 1784,1792 ---- followed by the bounds of the range being modified. ! ** The new `-name NAME' option directs Emacs to search for its X resources using the name `NAME', and sets the title of the initial frame. This argument was added for consistency with other X clients. ! ** The new `-xrm DATABASE' option tells Emacs to treat the string DATABASE as the text of an X resource database. Emacs searches DATABASE for resource values, in addition to the usual places. This *************** *** 1636,1640 **** argument was added for consistency with other X clients. ! * Emacs now searches for X resources in the files specified by the XFILESEARCHPATH, XUSERFILESEARCHPATH, and XAPPLRESDIR environment variables, emulating the functionality provided by programs written --- 1793,1797 ---- argument was added for consistency with other X clients. ! ** Emacs now searches for X resources in the files specified by the XFILESEARCHPATH, XUSERFILESEARCHPATH, and XAPPLRESDIR environment variables, emulating the functionality provided by programs written *************** *** 1705,1709 **** This feature was added for consistency with other X applications. ! * The new function `text-property-any' scans the region of text from START to END to see if any character's property PROP is `eq' to VALUE. If so, it returns the position of the first such character. --- 1862,1866 ---- This feature was added for consistency with other X applications. ! ** The new function `text-property-any' scans the region of text from START to END to see if any character's property PROP is `eq' to VALUE. If so, it returns the position of the first such character. *************** *** 1713,1717 **** be examined. ! * The new function `text-property-not-all' scans the region of text from START to END to see if any character's property PROP is not `eq' to VALUE. If so, it returns the position of the first such character. --- 1870,1874 ---- be examined. ! ** The new function `text-property-not-all' scans the region of text from START to END to see if any character's property PROP is not `eq' to VALUE. If so, it returns the position of the first such character. *************** *** 1721,1725 **** be examined. ! * The function `delete-windows-on' now takes an optional second argument FRAME, which specifies which frames it should affect. + If FRAME is nil or omitted, then `delete-windows-on' deletes windows --- 1878,1882 ---- be examined. ! ** The function `delete-windows-on' now takes an optional second argument FRAME, which specifies which frames it should affect. + If FRAME is nil or omitted, then `delete-windows-on' deletes windows *************** *** 1731,1737 **** ! Changes in version 19.16. ! * When dragging the mouse to select a region, Emacs now highlights the region as you drag (if Transient Mark mode is enabled). If you continue the drag beyond the boundaries of the window, Emacs scrolls --- 1888,1894 ---- ! * Changes in version 19.16. ! ** When dragging the mouse to select a region, Emacs now highlights the region as you drag (if Transient Mark mode is enabled). If you continue the drag beyond the boundaries of the window, Emacs scrolls *************** *** 1739,1747 **** the window or release the button. ! * RET now exits `query-replace' and `query-replace-regexp'; this makes it more consistent with the incremental search facility, which uses RET to end the search. ! * In C mode, C-c C-u now runs c-up-conditional. C-c C-n and C-c C-p now run new commands that move forward and back over balanced sets of C conditionals (c-forward-conditional --- 1896,1904 ---- the window or release the button. ! ** RET now exits `query-replace' and `query-replace-regexp'; this makes it more consistent with the incremental search facility, which uses RET to end the search. ! ** In C mode, C-c C-u now runs c-up-conditional. C-c C-n and C-c C-p now run new commands that move forward and back over balanced sets of C conditionals (c-forward-conditional *************** *** 1748,1752 **** and c-backward-conditional). ! * The Edit entry in the menu bar has a new alternative: "Choose Next Paste". It gives you a menu showing the various strings in the kill ring; click on one to select it as the text --- 1905,1909 ---- and c-backward-conditional). ! ** The Edit entry in the menu bar has a new alternative: "Choose Next Paste". It gives you a menu showing the various strings in the kill ring; click on one to select it as the text *************** *** 1753,1757 **** to be yanked ("pasted") the next time you yank. ! * If you enable Transient Mark mode and set `mark-even-if-inactive' to non-nil, then the region is highlighted in a transient fashion just as normally in Transient Mark mode, but the mark really remains active --- 1910,1914 ---- to be yanked ("pasted") the next time you yank. ! ** If you enable Transient Mark mode and set `mark-even-if-inactive' to non-nil, then the region is highlighted in a transient fashion just as normally in Transient Mark mode, but the mark really remains active *************** *** 1759,1770 **** region highlighting turns off. ! * If you type C-h after a prefix key, it displays the bindings that start with that prefix. ! * The VC package now searches for version control commands in the directories named by the variable `vc-path'; its value should be a list of strings. ! * If you are visiting a file that has locks registered under RCS, VC now displays each lock's owner and version number in the mode line after the string `RCS'. If there are no locks, VC displays the head --- 1916,1927 ---- region highlighting turns off. ! ** If you type C-h after a prefix key, it displays the bindings that start with that prefix. ! ** The VC package now searches for version control commands in the directories named by the variable `vc-path'; its value should be a list of strings. ! ** If you are visiting a file that has locks registered under RCS, VC now displays each lock's owner and version number in the mode line after the string `RCS'. If there are no locks, VC displays the head *************** *** 1771,1775 **** version number. ! * When using X, if you load the `paren' library, Emacs automatically underlines or highlights the matching paren whenever point is next to the outside of a paren. When point is before an open-paren, --- 1928,1932 ---- version number. ! ** When using X, if you load the `paren' library, Emacs automatically underlines or highlights the matching paren whenever point is next to the outside of a paren. When point is before an open-paren, *************** *** 1777,1785 **** this shows the matching open. ! * The new function `define-key-after' is like `define-key', but takes an extra argument AFTER. It places the newly defined binding after the binding for the event AFTER. ! * `accessible-keymaps' now takes an optional second argument, PREFIX. If PREFIX is non-nil, it means the value should include only maps for keys that start with PREFIX. --- 1934,1942 ---- this shows the matching open. ! ** The new function `define-key-after' is like `define-key', but takes an extra argument AFTER. It places the newly defined binding after the binding for the event AFTER. ! ** `accessible-keymaps' now takes an optional second argument, PREFIX. If PREFIX is non-nil, it means the value should include only maps for keys that start with PREFIX. *************** *** 1788,1796 **** means to describe only the keys that start with PREFIX. ! * The variable `prefix-help-command' hold a command to run to display help whenever the character `help-char' follows a prefix key and does not have a key binding in that context. ! * Emacs now detects double- and triple-mouse clicks. A single mouse click produces a pair events of the form: (down-mouse-N POSITION) --- 1945,1953 ---- means to describe only the keys that start with PREFIX. ! ** The variable `prefix-help-command' hold a command to run to display help whenever the character `help-char' follows a prefix key and does not have a key binding in that context. ! ** Emacs now detects double- and triple-mouse clicks. A single mouse click produces a pair events of the form: (down-mouse-N POSITION) *************** *** 1827,1831 **** (triple-mouse-N POSITION 4) ! * The way Emacs reports positions of mouse events has changed slightly. If a mouse event includes a position list of the form: (WINDOW (PLACE-SYMBOL) (COLUMN . ROW) TIMESTAMP) --- 1984,1988 ---- (triple-mouse-N POSITION 4) ! ** The way Emacs reports positions of mouse events has changed slightly. If a mouse event includes a position list of the form: (WINDOW (PLACE-SYMBOL) (COLUMN . ROW) TIMESTAMP) *************** *** 1857,1867 **** ! Changes in version 19.15. ! * `make-frame-visible', which uniconified frames, is now a command, and thus may be bound to a key. This makes sense because frames respond to user input while iconified. ! * You can now use Meta mouse clicks to set and use the "secondary selection". You can drag M-Mouse-1 across the region you want to select. Or you can press M-Mouse-1 at one end and M-Mouse-3 at the --- 2014,2024 ---- ! * Changes in version 19.15. ! ** `make-frame-visible', which uniconified frames, is now a command, and thus may be bound to a key. This makes sense because frames respond to user input while iconified. ! ** You can now use Meta mouse clicks to set and use the "secondary selection". You can drag M-Mouse-1 across the region you want to select. Or you can press M-Mouse-1 at one end and M-Mouse-3 at the *************** *** 1880,1884 **** using a face named `secondary-selection'. ! * There's a new way to request use of Supercite (sc.el). Do this: (add-hook 'mail-citation-hook 'sc-cite-original) --- 2037,2041 ---- using a face named `secondary-selection'. ! ** There's a new way to request use of Supercite (sc.el). Do this: (add-hook 'mail-citation-hook 'sc-cite-original) *************** *** 1889,1893 **** for those other mail readers. ! * When a regular expression contains `\(...\)' inside a repetition operator such as `*' or `+', and you ask about the range that was matched using `match-beginning' and `match-end', the range you get corresponds --- 2046,2050 ---- for those other mail readers. ! ** When a regular expression contains `\(...\)' inside a repetition operator such as `*' or `+', and you ask about the range that was matched using `match-beginning' and `match-end', the range you get corresponds *************** *** 1903,1909 **** and thus didn't document it.) ! Changes in version 19.14. ! * To modify read-only text, bind the variable `inhibit-read-only' to a non-nil value. If the value is t, then all reasons that might make text read-only are inhibited (including `read-only' text properties). --- 2060,2066 ---- and thus didn't document it.) ! * Changes in version 19.14. ! ** To modify read-only text, bind the variable `inhibit-read-only' to a non-nil value. If the value is t, then all reasons that might make text read-only are inhibited (including `read-only' text properties). *************** *** 1911,1915 **** if it is `memq' in the list. ! * If you call `get-buffer-window' passing t as its second argument, it will only search for windows on visible frames. Previously, passing t as the secord argument caused `get-buffer-window' to search all --- 2068,2072 ---- if it is `memq' in the list. ! ** If you call `get-buffer-window' passing t as its second argument, it will only search for windows on visible frames. Previously, passing t as the secord argument caused `get-buffer-window' to search all *************** *** 1916,1928 **** frames, visible or not. ! * If you call `other-buffer' with a nil or omitted second argument, it will ignore buffers displayed windows on any visible frame, not just the selected frame. ! * You can specify a window or a frame for C-x # to use when selects a server buffer. Set the variable server-window to the window or frame that you want. ! * The command M-( now inserts spaces outside the open-parentheses in some cases--depending on the syntax classes of the surrounding characters. If the variable `parens-dont-require-spaces' is non-nil, --- 2073,2085 ---- frames, visible or not. ! ** If you call `other-buffer' with a nil or omitted second argument, it will ignore buffers displayed windows on any visible frame, not just the selected frame. ! ** You can specify a window or a frame for C-x # to use when selects a server buffer. Set the variable server-window to the window or frame that you want. ! ** The command M-( now inserts spaces outside the open-parentheses in some cases--depending on the syntax classes of the surrounding characters. If the variable `parens-dont-require-spaces' is non-nil, *************** *** 1929,1937 **** it inhibits insertion of these spaces. ! * The GUD package now supports the debugger known as xdb on HP/UX systems. Use M-x xdb. The variable `gud-xdb-directories' lets you specify a list of directories to search for source code. ! * If you are using the mailabbrev package, you should note that its function for defining an alias is now called `define-mail-abbrev'. This package no longer contains a definition for `define-mail-alias'; --- 2086,2094 ---- it inhibits insertion of these spaces. ! ** The GUD package now supports the debugger known as xdb on HP/UX systems. Use M-x xdb. The variable `gud-xdb-directories' lets you specify a list of directories to search for source code. ! ** If you are using the mailabbrev package, you should note that its function for defining an alias is now called `define-mail-abbrev'. This package no longer contains a definition for `define-mail-alias'; *************** *** 1938,1945 **** that name is used only in mailaliases. ! * Inserted characters now inherit the properties of the text before them, by default, rather than those of the following text. ! * The function `insert-file-contents' now takes optional arguments BEG and END that specify which part of the file to insert. BEG defaults to 0 (the beginning of the file), and END defaults to the end of the file. --- 2095,2102 ---- that name is used only in mailaliases. ! ** Inserted characters now inherit the properties of the text before them, by default, rather than those of the following text. ! ** The function `insert-file-contents' now takes optional arguments BEG and END that specify which part of the file to insert. BEG defaults to 0 (the beginning of the file), and END defaults to the end of the file. *************** *** 1947,1957 **** If you specify BEG or END, then the argument VISIT must be nil. ! Changes in version 19.13. ! * Magic file names can now handle the `load' operation. ! * Bibtex mode now sets up special entries in the menu bar. ! * The incremental search commands C-w and C-y, which copy text from the buffer into the search string, now convert it to lower case if you are in a case-insensitive search. This is to avoid making --- 2104,2114 ---- If you specify BEG or END, then the argument VISIT must be nil. ! * Changes in version 19.13. ! ** Magic file names can now handle the `load' operation. ! ** Bibtex mode now sets up special entries in the menu bar. ! ** The incremental search commands C-w and C-y, which copy text from the buffer into the search string, now convert it to lower case if you are in a case-insensitive search. This is to avoid making *************** *** 1958,1964 **** the search a case-sensitive one. ! * GNUS now knows your time zone automatically if Emacs does. ! * Hide-ifdef mode no longer defines keys of the form C-c LETTER, since those keys are reserved for users. Those commands have been moved to C-c M-LETTER. --- 2115,2121 ---- the search a case-sensitive one. ! ** GNUS now knows your time zone automatically if Emacs does. ! ** Hide-ifdef mode no longer defines keys of the form C-c LETTER, since those keys are reserved for users. Those commands have been moved to C-c M-LETTER. *************** *** 1965,1978 **** We may move them again for greater consistency with other modes. ! Changes in version 19.12. ! * You can now make many of the sort commands ignore case by setting `sort-fold-case' to a non-nil value. ! Changes in version 19.11. ! * Supercite is installed. ! * `write-file-hooks' functions that return non-nil are responsible for making a backup file if you want that to be done. To do so, execute the following code: --- 2122,2135 ---- We may move them again for greater consistency with other modes. ! * Changes in version 19.12. ! ** You can now make many of the sort commands ignore case by setting `sort-fold-case' to a non-nil value. ! * Changes in version 19.11. ! ** Supercite is installed. ! ** `write-file-hooks' functions that return non-nil are responsible for making a backup file if you want that to be done. To do so, execute the following code: *************** *** 1987,1993 **** (This is not actually new, but wasn't documented before.) ! Changes in version 19.10. ! * The command `repeat-complex-command' is now on C-x ESC ESC. It used to be bound to C-x ESC. --- 2144,2150 ---- (This is not actually new, but wasn't documented before.) ! * Changes in version 19.10. ! ** The command `repeat-complex-command' is now on C-x ESC ESC. It used to be bound to C-x ESC. *************** *** 1994,1998 **** The reason for this change is to make function keys work after C-x. ! * The variable `highlight-nonselected-windows' now controls whether the region is highlighted in windows other than the selected window (in Transient Mark mode only, of course, and currently only when --- 2151,2155 ---- The reason for this change is to make function keys work after C-x. ! ** The variable `highlight-nonselected-windows' now controls whether the region is highlighted in windows other than the selected window (in Transient Mark mode only, of course, and currently only when *************** *** 1999,2005 **** using X). ! Changes in version 19.8. ! * It is now simpler to tell Emacs to display accented characters under X windows. M-x standard-display-european toggles the display of buffer text according to the ISO Latin-1 standard. With a prefix --- 2156,2162 ---- using X). ! * Changes in version 19.8. ! ** It is now simpler to tell Emacs to display accented characters under X windows. M-x standard-display-european toggles the display of buffer text according to the ISO Latin-1 standard. With a prefix *************** *** 2007,2011 **** argument is positive. ! * The `-i' command-line argument tells Emacs to use a picture of the GNU gnu as its icon, instead of letting the window manager choose an icon for it. This option used to insert a file into the current --- 2164,2168 ---- argument is positive. ! ** The `-i' command-line argument tells Emacs to use a picture of the GNU gnu as its icon, instead of letting the window manager choose an icon for it. This option used to insert a file into the current *************** *** 2012,2016 **** buffer; use `-insert' to do that now. ! * The `configure' script now supports `--prefix' and `--exec-prefix' options. --- 2169,2173 ---- buffer; use `-insert' to do that now. ! ** The `configure' script now supports `--prefix' and `--exec-prefix' options. *************** *** 2034,2038 **** EXECDIR/bin should be a directory that is normally in users' PATHs. ! * When running under X Windows, the new lisp function `x-list-fonts' allows code to find out which fonts are available from the X server. The first argument PATTERN is a string, perhaps with wildcard characters; --- 2191,2195 ---- EXECDIR/bin should be a directory that is normally in users' PATHs. ! ** When running under X Windows, the new lisp function `x-list-fonts' allows code to find out which fonts are available from the X server. The first argument PATTERN is a string, perhaps with wildcard characters; *************** *** 2045,2051 **** ! Changes in version 19. ! * When you kill buffers, Emacs now returns memory to the operating system, thus reducing the size of the Emacs process. All the space that you free up by killing buffers can now be reused for other buffers no matter what --- 2202,2208 ---- ! * Changes in version 19. ! ** When you kill buffers, Emacs now returns memory to the operating system, thus reducing the size of the Emacs process. All the space that you free up by killing buffers can now be reused for other buffers no matter what *************** *** 2052,2056 **** their sizes, or reused by other processes if Emacs doesn't need it. ! * Emacs now does garbage collection and auto saving while it is waiting for input, which often avoids the need to do these things while you are typing. --- 2209,2213 ---- their sizes, or reused by other processes if Emacs doesn't need it. ! ** Emacs now does garbage collection and auto saving while it is waiting for input, which often avoids the need to do these things while you are typing. *************** *** 2060,2064 **** collection. ! * If auto saving detects that a buffer has shrunk greatly, it refrains from auto saving that buffer and displays a warning. Now it also turns off Auto Save mode in that buffer, so that you won't get the same --- 2217,2221 ---- collection. ! ** If auto saving detects that a buffer has shrunk greatly, it refrains from auto saving that buffer and displays a warning. Now it also turns off Auto Save mode in that buffer, so that you won't get the same *************** *** 2068,2072 **** it again with no further warnings. ! * A new minor mode called Line Number mode displays the current line number in the mode line, updating it as necessary when you move point. --- 2225,2229 ---- it again with no further warnings. ! ** A new minor mode called Line Number mode displays the current line number in the mode line, updating it as necessary when you move point. *************** *** 2077,2090 **** buffer is very large. ! * You can quit while Emacs is waiting to read or write files. ! * The arrow keys now have default bindings to move in the appropriate directions. ! * You can suppress next-line's habit of inserting a newline when called at the end of a buffer by setting next-line-add-newlines to nil (it defaults to t). ! * You can now get back recent minibuffer inputs conveniently. While in the minibuffer, type M-p to fetch the next earlier minibuffer input, and use M-n to fetch the next later input. --- 2234,2247 ---- buffer is very large. ! ** You can quit while Emacs is waiting to read or write files. ! ** The arrow keys now have default bindings to move in the appropriate directions. ! ** You can suppress next-line's habit of inserting a newline when called at the end of a buffer by setting next-line-add-newlines to nil (it defaults to t). ! ** You can now get back recent minibuffer inputs conveniently. While in the minibuffer, type M-p to fetch the next earlier minibuffer input, and use M-n to fetch the next later input. *************** *** 2104,2108 **** as the one that `compile' uses for compilation commands. ! * You can now display text in a mixture of fonts and colors, using the "face" feature, together with the overlay and text property features. See the Emacs Lisp manual for details. The Emacs Users Manual describes --- 2261,2265 ---- as the one that `compile' uses for compilation commands. ! ** You can now display text in a mixture of fonts and colors, using the "face" feature, together with the overlay and text property features. See the Emacs Lisp manual for details. The Emacs Users Manual describes *************** *** 2109,2113 **** how to change the colors and font of standard predefined faces. ! * You can refer to files on other machines using special file name syntax: /HOST:FILENAME --- 2266,2270 ---- how to change the colors and font of standard predefined faces. ! ** You can refer to files on other machines using special file name syntax: /HOST:FILENAME *************** *** 2119,2123 **** is used for logging in on HOST. ! * Some C-x key bindings have been moved onto new prefix keys. C-x r is a prefix for registers and rectangles. --- 2276,2280 ---- is used for logging in on HOST. ! ** Some C-x key bindings have been moved onto new prefix keys. C-x r is a prefix for registers and rectangles. *************** *** 2154,2158 **** have not yet been removed.) ! * You can put a file name in a register to be able to visit the file quickly. Do this: --- 2311,2315 ---- have not yet been removed.) ! ** You can put a file name in a register to be able to visit the file quickly. Do this: *************** *** 2165,2180 **** but that you don't want to keep in buffers all the time. ! * The keys M-g (fill-region) and C-x a (append-to-buffer) have been eliminated. ! * The new command `string-rectangle' inserts a specified string on each line of the region-rectangle. ! * C-x 4 r is now `find-file-read-only-other-window'. ! * C-x 4 C-o is now `display-buffer', which displays a specified buffer in another window without selecting it. ! * Picture mode has been substantially improved. The picture editing commands now arrange for automatic horizontal scrolling to keep point visible when editing a wide buffer with truncate-lines on. Picture-mode --- 2322,2337 ---- but that you don't want to keep in buffers all the time. ! ** The keys M-g (fill-region) and C-x a (append-to-buffer) have been eliminated. ! ** The new command `string-rectangle' inserts a specified string on each line of the region-rectangle. ! ** C-x 4 r is now `find-file-read-only-other-window'. ! ** C-x 4 C-o is now `display-buffer', which displays a specified buffer in another window without selecting it. ! ** Picture mode has been substantially improved. The picture editing commands now arrange for automatic horizontal scrolling to keep point visible when editing a wide buffer with truncate-lines on. Picture-mode *************** *** 2183,2187 **** attached to them. ! * If you enable Transient Mark mode, then the mark becomes "inactive" after every command that modifies the buffer. While the mark is active, the region is highlighted (under X, at least). Most commands --- 2340,2344 ---- attached to them. ! ** If you enable Transient Mark mode, then the mark becomes "inactive" after every command that modifies the buffer. While the mark is active, the region is highlighted (under X, at least). Most commands *************** *** 2190,2194 **** known as "Zmacs mode". ! * Outline mode is now available as a minor mode. This minor mode can combine with any major mode; it substitutes the C-c commands of Outline mode for those of the major mode. Use M-x outline-minor-mode --- 2347,2351 ---- known as "Zmacs mode". ! ** Outline mode is now available as a minor mode. This minor mode can combine with any major mode; it substitutes the C-c commands of Outline mode for those of the major mode. Use M-x outline-minor-mode *************** *** 2198,2205 **** major mode. ! * The default setting of `version-control' comes from the environment variable VERSION_CONTROL. ! * The user option for controlling whether files can set local variables is now called `enable-local-variables'. A value of t means local-variables lists are obeyed; nil means they are ignored; anything --- 2355,2362 ---- major mode. ! ** The default setting of `version-control' comes from the environment variable VERSION_CONTROL. ! ** The user option for controlling whether files can set local variables is now called `enable-local-variables'. A value of t means local-variables lists are obeyed; nil means they are ignored; anything *************** *** 2210,2214 **** those of `enable-local-variables'. ! * X Window System changes: C-x 5 C-f and C-x 5 b switch to a specified file or buffer in a new --- 2367,2371 ---- those of `enable-local-variables'. ! ** X Window System changes: C-x 5 C-f and C-x 5 b switch to a specified file or buffer in a new *************** *** 2230,2241 **** one in the future. ! * Undoing a deletion now puts point back where it was before the deletion. ! * The variables that control how much undo information to save have been renamed to `undo-limit' and `undo-strong-limit'. They used to be called `undo-threshold' and `undo-high-threshold'. ! * You can now use kill commands in read-only buffers. They don't actually change the buffer, and Emacs will beep and warn you that the buffer is read-only, but they do copy the text you tried to kill into --- 2387,2398 ---- one in the future. ! ** Undoing a deletion now puts point back where it was before the deletion. ! ** The variables that control how much undo information to save have been renamed to `undo-limit' and `undo-strong-limit'. They used to be called `undo-threshold' and `undo-high-threshold'. ! ** You can now use kill commands in read-only buffers. They don't actually change the buffer, and Emacs will beep and warn you that the buffer is read-only, but they do copy the text you tried to kill into *************** *** 2242,2265 **** the kill ring, so you can yank it into other buffers. ! * C-o inserts the fill-prefix on the newly created line. The command M-^ deletes the prefix (if it occurs) after the newline that it deletes. ! * C-M-l now runs the command `reposition-window'. It scrolls the window heuristically in a way designed to get useful information onto the screen. ! * C-M-r is now reverse incremental regexp search. ! * M-z now kills through the target character. In version 18, it killed up to but not including the target character. ! * M-! now runs the specified shell command asynchronously if it ends in `&' (just as the shell does). ! * C-h C-f and C-h C-k are new help commands that display the Info node for a given Emacs function name or key sequence, respectively. ! * The C-h p command system lets you find Emacs Lisp packages by topic keywords. Here is a partial list of package categories: --- 2399,2422 ---- the kill ring, so you can yank it into other buffers. ! ** C-o inserts the fill-prefix on the newly created line. The command M-^ deletes the prefix (if it occurs) after the newline that it deletes. ! ** C-M-l now runs the command `reposition-window'. It scrolls the window heuristically in a way designed to get useful information onto the screen. ! ** C-M-r is now reverse incremental regexp search. ! ** M-z now kills through the target character. In version 18, it killed up to but not including the target character. ! ** M-! now runs the specified shell command asynchronously if it ends in `&' (just as the shell does). ! ** C-h C-f and C-h C-k are new help commands that display the Info node for a given Emacs function name or key sequence, respectively. ! ** The C-h p command system lets you find Emacs Lisp packages by topic keywords. Here is a partial list of package categories: *************** *** 2293,2300 **** More will be added soon. ! * The command to split a window into two side-by-side windows is now C-x 3. It was C-x 5. ! * M-. (find-tag) no longer has any effect on what M-, will do subsequently. You can no longer use M-, to find the next similar tag; you must use M-. with a prefix argument, instead. --- 2450,2457 ---- More will be added soon. ! ** The command to split a window into two side-by-side windows is now C-x 3. It was C-x 5. ! ** M-. (find-tag) no longer has any effect on what M-, will do subsequently. You can no longer use M-, to find the next similar tag; you must use M-. with a prefix argument, instead. *************** *** 2303,2307 **** M-, to resume a suspended `tags-search' or `tags-query-replace'. ! * C-x s (`save-some-buffers') now gives you more options when it asks whether to save a particular buffer. In addition to `y' or `n', you can answer `!' to save all the remaining buffers, `.' to save this --- 2460,2464 ---- M-, to resume a suspended `tags-search' or `tags-query-replace'. ! ** C-x s (`save-some-buffers') now gives you more options when it asks whether to save a particular buffer. In addition to `y' or `n', you can answer `!' to save all the remaining buffers, `.' to save this *************** *** 2310,2317 **** of `query-replace'. ! * M-x make-symbolic-link does not expand its first argument. This lets you make a link with a target that is a relative file name. ! * M-x add-change-log-entry and C-x 4 a now automatically insert the name of the file and often the name of the function that you changed. They also handle grouping of entries. --- 2467,2474 ---- of `query-replace'. ! ** M-x make-symbolic-link does not expand its first argument. This lets you make a link with a target that is a relative file name. ! ** M-x add-change-log-entry and C-x 4 a now automatically insert the name of the file and often the name of the function that you changed. They also handle grouping of entries. *************** *** 2322,2326 **** is considered a page. ! * The `comment-region' command adds comment delimiters to the lines that start in the region, thus commenting them out. With a negative argument, it deletes comment delimiters from the lines in the region--this cancels --- 2479,2483 ---- is considered a page. ! ** The `comment-region' command adds comment delimiters to the lines that start in the region, thus commenting them out. With a negative argument, it deletes comment delimiters from the lines in the region--this cancels *************** *** 2334,2338 **** them at the beginning of a line. ! * If `split-window-keep-point' is non-nil, C-x 2 tries to avoid shifting any text on the screen by putting point in whichever window happens to contain the screen line the cursor is already on. --- 2491,2495 ---- them at the beginning of a line. ! ** If `split-window-keep-point' is non-nil, C-x 2 tries to avoid shifting any text on the screen by putting point in whichever window happens to contain the screen line the cursor is already on. *************** *** 2340,2344 **** terminals. ! * M-x super-apropos is like M-x apropos except that it searches both Lisp symbol names and documentation strings for matches. It describes every symbol that has a match in either the symbol's name or its --- 2497,2501 ---- terminals. ! ** M-x super-apropos is like M-x apropos except that it searches both Lisp symbol names and documentation strings for matches. It describes every symbol that has a match in either the symbol's name or its *************** *** 2352,2356 **** non-nil. ! * M-x revert-buffer no longer offers to revert from a recent auto-save file unless you give it a prefix argument. Otherwise it always reverts from the real file regardless of whether there has been an --- 2509,2513 ---- non-nil. ! ** M-x revert-buffer no longer offers to revert from a recent auto-save file unless you give it a prefix argument. Otherwise it always reverts from the real file regardless of whether there has been an *************** *** 2358,2368 **** very useful now that the undo capacity is larger.) ! * M-x recover-file no longer turns off Auto Save mode when it reads the last Auto Save file. ! * M-x rename-buffer, if you give it a prefix argument, avoids errors by modifying the new name to make it unique. ! * M-x rename-uniquely renames the current buffer to a similar name with a numeric suffix added to make it both different and unique. --- 2515,2525 ---- very useful now that the undo capacity is larger.) ! ** M-x recover-file no longer turns off Auto Save mode when it reads the last Auto Save file. ! ** M-x rename-buffer, if you give it a prefix argument, avoids errors by modifying the new name to make it unique. ! ** M-x rename-uniquely renames the current buffer to a similar name with a numeric suffix added to make it both different and unique. *************** *** 2373,2381 **** buffer with a particular name. ! * M-x compare-windows with a prefix argument ignores changes in whitespace. If `compare-ignore-case' is non-nil, then differences in case are also ignored. ! * `backward-paragraph' is now bound to M-{ by default, and `forward-paragraph' to M-}. Originally, these commands were bound to M-[ and M-], but they were running into conflicts with the use of function keys. On many terminals, --- 2530,2538 ---- buffer with a particular name. ! ** M-x compare-windows with a prefix argument ignores changes in whitespace. If `compare-ignore-case' is non-nil, then differences in case are also ignored. ! ** `backward-paragraph' is now bound to M-{ by default, and `forward-paragraph' to M-}. Originally, these commands were bound to M-[ and M-], but they were running into conflicts with the use of function keys. On many terminals, *************** *** 2383,2400 **** as a prefix key. ! * C-x C-u (upcase-region) and C-x C-l (downcase-region) are now disabled by default; these commands seem to be often hit by accident, and can be quite destructive if their effects are not noticed immediately. ! * The function `erase-buffer' is now interactive, but disabled by default. ! * When visiting a new file, Emacs attempts to abbreviate the file's path using the symlinks listed in `directory-abbrev-alist'. ! * When you visit the same file in under two names that translate into the same name once symbolic links are handled, Emacs warns you that you have two buffers for the same file. ! * If you wish to avoid visiting the same file in two buffers under different names, set the variable `find-file-existing-other-name' non-nil. Then `find-file' uses the existing buffer visiting the file, --- 2540,2557 ---- as a prefix key. ! ** C-x C-u (upcase-region) and C-x C-l (downcase-region) are now disabled by default; these commands seem to be often hit by accident, and can be quite destructive if their effects are not noticed immediately. ! ** The function `erase-buffer' is now interactive, but disabled by default. ! ** When visiting a new file, Emacs attempts to abbreviate the file's path using the symlinks listed in `directory-abbrev-alist'. ! ** When you visit the same file in under two names that translate into the same name once symbolic links are handled, Emacs warns you that you have two buffers for the same file. ! ** If you wish to avoid visiting the same file in two buffers under different names, set the variable `find-file-existing-other-name' non-nil. Then `find-file' uses the existing buffer visiting the file, *************** *** 2401,2405 **** no matter which of the file's names you specify. ! * If you set `find-file-visit-truename' non-nil, then the file name recorded for a buffer is the file's truename (in which all symbolic links have been removed), rather than the name you specify. Setting --- 2558,2562 ---- no matter which of the file's names you specify. ! ** If you set `find-file-visit-truename' non-nil, then the file name recorded for a buffer is the file's truename (in which all symbolic links have been removed), rather than the name you specify. Setting *************** *** 2407,2411 **** `find-file-existing-other-name'. ! * C-x C-v now inserts the entire current file name in the minibuffer. This is convenient if you made a small mistake in typing it. Point goes after the last slash, before the last file name component, so if --- 2564,2568 ---- `find-file-existing-other-name'. ! ** C-x C-v now inserts the entire current file name in the minibuffer. This is convenient if you made a small mistake in typing it. Point goes after the last slash, before the last file name component, so if *************** *** 2413,2422 **** it. ! * Commands such as C-M-f in Lisp mode now ignore parentheses within comments. ! * C-x q now uses ESC to terminate all iterations of the keyboard macro, rather than C-d as before. ! * Use the command `setenv' to set an individual environment variable for Emacs subprocesses. Specify a variable name and a value, both as strings. This command applies only to subprocesses yet to be --- 2570,2579 ---- it. ! ** Commands such as C-M-f in Lisp mode now ignore parentheses within comments. ! ** C-x q now uses ESC to terminate all iterations of the keyboard macro, rather than C-d as before. ! ** Use the command `setenv' to set an individual environment variable for Emacs subprocesses. Specify a variable name and a value, both as strings. This command applies only to subprocesses yet to be *************** *** 2423,2427 **** started. ! * Use `rot13-other-window' to examine a buffer with rot13. This command does not change the text in the buffer. Instead, it --- 2580,2584 ---- started. ! ** Use `rot13-other-window' to examine a buffer with rot13. This command does not change the text in the buffer. Instead, it *************** *** 2429,2438 **** displaying the text. ! * The command `M-x version' now prints the current Emacs version; The `version' command is an alias for the `emacs-version' command. ! * More complex changes in existing packages. ! ** `fill-nonuniform-paragraphs' is a new command, much like `fill-individual-paragraphs' except that only separator lines separate paragraphs. Since this means that the lines of one paragraph may have --- 2586,2595 ---- displaying the text. ! ** The command `M-x version' now prints the current Emacs version; The `version' command is an alias for the `emacs-version' command. ! ** More complex changes in existing packages. ! *** `fill-nonuniform-paragraphs' is a new command, much like `fill-individual-paragraphs' except that only separator lines separate paragraphs. Since this means that the lines of one paragraph may have *************** *** 2440,2444 **** amount of indentation of any of the lines of the paragraph. ! ** Filling is now partially controlled by a new minor mode, Adaptive Fill mode. When this mode is enabled (and it is enabled by default), if you use M-x fill-region-as-paragraph on an indented paragraph and --- 2597,2601 ---- amount of indentation of any of the lines of the paragraph. ! *** Filling is now partially controlled by a new minor mode, Adaptive Fill mode. When this mode is enabled (and it is enabled by default), if you use M-x fill-region-as-paragraph on an indented paragraph and *************** *** 2451,2459 **** a paragraph of its own. ! ** M-q in C mode now runs `c-fill-paragraph', which is designed for filling C comments. (We assume you don't want to fill the code in a C program.) ! ** M-$ now runs the Ispell program instead of the Unix spell program. M-$ starts an Ispell process the first time you use it. But the process --- 2608,2616 ---- a paragraph of its own. ! *** M-q in C mode now runs `c-fill-paragraph', which is designed for filling C comments. (We assume you don't want to fill the code in a C program.) ! *** M-$ now runs the Ispell program instead of the Unix spell program. M-$ starts an Ispell process the first time you use it. But the process *************** *** 2485,2491 **** `~/ispell.words' if you edit it outside of Ispell. ! * Changes in existing modes. ! ** gdb-mode has been replaced by gud-mode. The package gud.el (Grand Unified Debugger) replaces gdb.el in Emacs --- 2642,2648 ---- `~/ispell.words' if you edit it outside of Ispell. ! ** Changes in existing modes. ! *** gdb-mode has been replaced by gud-mode. The package gud.el (Grand Unified Debugger) replaces gdb.el in Emacs *************** *** 2521,2525 **** The C-x C-a bindings are also active in source files. ! ** The old TeX mode bindings of M-{ and M-} have been moved to C-c { and C-c }. (These commands are `up-list' and `tex-insert-braces'; they are the TeX equivalents of M-( and M-).) This is because M-{ --- 2678,2682 ---- The C-x C-a bindings are also active in source files. ! *** The old TeX mode bindings of M-{ and M-} have been moved to C-c { and C-c }. (These commands are `up-list' and `tex-insert-braces'; they are the TeX equivalents of M-( and M-).) This is because M-{ *************** *** 2526,2530 **** and M-} are now globally defined commands. ! ** Changes in Mail mode. `%' is now a word-separator character in Mail mode. --- 2683,2687 ---- and M-} are now globally defined commands. ! *** Changes in Mail mode. `%' is now a word-separator character in Mail mode. *************** *** 2553,2557 **** are expanded subsequently when you send the message. ! ** Changes in Rmail. Rmail by default gets new mail only from the system inbox file, --- 2710,2714 ---- are expanded subsequently when you send the message. ! *** Changes in Rmail. Rmail by default gets new mail only from the system inbox file, *************** *** 2606,2610 **** Rmail now handles Content Length fields in messages. ! ** `mail-extract-address-components' unpacks mail addresses. It takes an address as a string (the contents of the From field, for example) and returns a list of the form (FULL-NAME --- 2763,2767 ---- Rmail now handles Content Length fields in messages. ! *** `mail-extract-address-components' unpacks mail addresses. It takes an address as a string (the contents of the From field, for example) and returns a list of the form (FULL-NAME *************** *** 2611,2617 **** CANONICAL-ADDRESS). ! ** Changes in C mode and C-related commands. ! *** M-x c-up-conditional In C mode, `c-up-conditional' moves back to the containing --- 2768,2774 ---- CANONICAL-ADDRESS). ! *** Changes in C mode and C-related commands. ! **** M-x c-up-conditional In C mode, `c-up-conditional' moves back to the containing *************** *** 2624,2631 **** by `#if'. When going forwards, `#elif' is ignored. ! *** In C mode, M-a and M-e are now defined as `c-beginning-of-statement' and `c-end-of-statement'. ! *** In C mode, M-x c-backslash-region is a new command to insert or align `\' characters at the ends of the lines of the region, except for the last such line. This is useful after writing or editing a C --- 2781,2788 ---- by `#if'. When going forwards, `#elif' is ignored. ! **** In C mode, M-a and M-e are now defined as `c-beginning-of-statement' and `c-end-of-statement'. ! **** In C mode, M-x c-backslash-region is a new command to insert or align `\' characters at the ends of the lines of the region, except for the last such line. This is useful after writing or editing a C *************** *** 2635,2639 **** whitespace before it. Otherwise, it inserts a new `\'. ! ** New features in info. When Info looks for an Info file, it searches the directories --- 2792,2796 ---- whitespace before it. Otherwise, it inserts a new `\'. ! *** New features in info. When Info looks for an Info file, it searches the directories *************** *** 2672,2676 **** which is referenced. ! ** Changes in M-x compile. You can repeat any previous compilation command conveniently using the --- 2829,2833 ---- which is referenced. ! *** Changes in M-x compile. You can repeat any previous compilation command conveniently using the *************** *** 2693,2697 **** error, no matter how big the buffer is. ! ** M-x diff and M-x diff-backup. This new command compares two files, displaying the differences in an --- 2850,2854 ---- error, no matter how big the buffer is. ! *** M-x diff and M-x diff-backup. This new command compares two files, displaying the differences in an *************** *** 2710,2714 **** with the source file that it is a backup of. ! ** The View commands (such as M-x view-buffer and M-x view-file) no longer use recursive edits; instead, they switch temporarily to a different major mode (View mode) specifically designed for moving --- 2867,2871 ---- with the source file that it is a backup of. ! *** The View commands (such as M-x view-buffer and M-x view-file) no longer use recursive edits; instead, they switch temporarily to a different major mode (View mode) specifically designed for moving *************** *** 2715,2721 **** around through a buffer without editing it. ! ** Changes in incremental search. ! *** The character to terminate an incremental search is now RET. This is for compatibility with the way most other arguments are read. --- 2872,2878 ---- around through a buffer without editing it. ! *** Changes in incremental search. ! **** The character to terminate an incremental search is now RET. This is for compatibility with the way most other arguments are read. *************** *** 2723,2727 **** as C-j). ! *** Incremental search now maintains a ring of previous search strings. Use M-p and M-n to move through the ring to pick a search string to reuse. These commands leave the selected search ring --- 2880,2884 ---- as C-j). ! **** Incremental search now maintains a ring of previous search strings. Use M-p and M-n to move through the ring to pick a search string to reuse. These commands leave the selected search ring *************** *** 2729,2740 **** finish editing and search for the chosen string. ! *** If you type an upper case letter in incremental search, that turns off case-folding, so that you get a case-sensitive search. ! *** If you type a space during regexp incremental search, it matches any sequence of whitespace characters. If you want to match just a space, type C-q SPC. ! *** Incremental search is now implemented as a major mode. When you type C-s, it switches temporarily to a different keymap which defines each key to do what it ought to do for incremental search. This has --- 2886,2897 ---- finish editing and search for the chosen string. ! **** If you type an upper case letter in incremental search, that turns off case-folding, so that you get a case-sensitive search. ! **** If you type a space during regexp incremental search, it matches any sequence of whitespace characters. If you want to match just a space, type C-q SPC. ! **** Incremental search is now implemented as a major mode. When you type C-s, it switches temporarily to a different keymap which defines each key to do what it ought to do for incremental search. This has *************** *** 2747,2751 **** of a character in incremental search by modifying `isearch-mode-map'. ! ** New commands in Buffer Menu mode. The command C-o now displays the current line's buffer in another --- 2904,2908 ---- of a character in incremental search by modifying `isearch-mode-map'. ! *** New commands in Buffer Menu mode. The command C-o now displays the current line's buffer in another *************** *** 2759,2767 **** menu buffer with the buffer that was displayed previously. ! * New major modes and packages. ! ** The news reader GNUS is now installed. ! ** There is a new interface for version control systems, called VC. It works with both RCS and SCCS; in fact, you don't really have to know which one of them is being used, because it automatically deals --- 2916,2924 ---- menu buffer with the buffer that was displayed previously. ! ** New major modes and packages. ! *** The news reader GNUS is now installed. ! *** There is a new interface for version control systems, called VC. It works with both RCS and SCCS; in fact, you don't really have to know which one of them is being used, because it automatically deals *************** *** 2793,2797 **** because either `RCS' or `SCCS' appears in the mode line. ! ** A new Calendar mode has been added, the work of Edward M. Reingold. The mode can display the Gregorian calendar and a variety of other calendars at any date, and interacts with a diary facility similar to --- 2950,2954 ---- because either `RCS' or `SCCS' appears in the mode line. ! *** A new Calendar mode has been added, the work of Edward M. Reingold. The mode can display the Gregorian calendar and a variety of other calendars at any date, and interacts with a diary facility similar to *************** *** 2798,2802 **** the UNIX `calendar' utility. ! ** There is a new major mode for editing binary files: Hexl mode. To use it, use M-x hexl-find-file instead of C-x C-f to visit the file. This command converts the file's contents to hexadecimal and lets you --- 2955,2959 ---- the UNIX `calendar' utility. ! *** There is a new major mode for editing binary files: Hexl mode. To use it, use M-x hexl-find-file instead of C-x C-f to visit the file. This command converts the file's contents to hexadecimal and lets you *************** *** 2821,2828 **** C-c C-c leave hexl mode and go back to the previous major mode. ! ** Miscellaneous new major modes include Awk mode, Icon mode, Makefile mode, Perl mode and SGML mode. ! ** Edebug, a new source-level debugger for Emacs Lisp functions. To use Edebug, use the command M-x edebug-defun to "evaluate" a --- 2978,2985 ---- C-c C-c leave hexl mode and go back to the previous major mode. ! *** Miscellaneous new major modes include Awk mode, Icon mode, Makefile mode, Perl mode and SGML mode. ! *** Edebug, a new source-level debugger for Emacs Lisp functions. To use Edebug, use the command M-x edebug-defun to "evaluate" a *************** *** 2841,2845 **** in the Emacs distribution. ! ** C++ mode is like C mode, except that it understands C++ comment syntax and certain other differences between C and C++. It also has a command `fill-c++-comment' which fills a paragraph made of comment lines. --- 2998,3002 ---- in the Emacs distribution. ! *** C++ mode is like C mode, except that it understands C++ comment syntax and certain other differences between C and C++. It also has a command `fill-c++-comment' which fills a paragraph made of comment lines. *************** *** 2848,2852 **** several consecutive lines, or removing the commenting out of such lines. ! ** A new package for merging two variants of the same text. It's not unusual for programmers to get their signals crossed and --- 3005,3009 ---- several consecutive lines, or removing the commenting out of such lines. ! *** A new package for merging two variants of the same text. It's not unusual for programmers to get their signals crossed and *************** *** 2937,2941 **** in `emerge-startup-hooks'. ! ** Asm mode is a new major mode for editing files of assembler code. It defines these commands: --- 3094,3098 ---- in `emerge-startup-hooks'. ! *** Asm mode is a new major mode for editing files of assembler code. It defines these commands: *************** *** 2946,2950 **** ; Insert or align a comment. ! ** Two-column mode lets you conveniently edit two side-by-side columns of text. It works using two side-by-side windows, each showing its own buffer. --- 3103,3107 ---- ; Insert or align a comment. ! *** Two-column mode lets you conveniently edit two side-by-side columns of text. It works using two side-by-side windows, each showing its own buffer. *************** *** 2989,2993 **** type C-x 6 d, is empty, C-x 6 d kills it.) ! ** You can supply command arguments such as files to visit to an Emacs that is already running. To do this, you must do this in your .emacs file: --- 3146,3150 ---- type C-x 6 d, is empty, C-x 6 d kills it.) ! *** You can supply command arguments such as files to visit to an Emacs that is already running. To do this, you must do this in your .emacs file: *************** *** 2996,3000 **** etc subdirectory. ! ** Shell mode has been completely replaced. The basic idea is the same, but there are new commands available in this mode. --- 3153,3157 ---- etc subdirectory. ! *** Shell mode has been completely replaced. The basic idea is the same, but there are new commands available in this mode. *************** *** 3042,3046 **** to continue it. ! ** There is now a convenient way to enable flow control on terminals where you can't win without it. Suppose you want to do this on VT-100 and H19 terminals; put the following in your `.emacs' file: --- 3199,3203 ---- to continue it. ! *** There is now a convenient way to enable flow control on terminals where you can't win without it. Suppose you want to do this on VT-100 and H19 terminals; put the following in your `.emacs' file: *************** *** 3053,3057 **** The function `enable-flow-control' enables flow control unconditionally. ! * Changes in Dired Dired has many new features which allow you to do these things: --- 3210,3214 ---- The function `enable-flow-control' enables flow control unconditionally. ! ** Changes in Dired Dired has many new features which allow you to do these things: *************** *** 3064,3068 **** parent directory. ! ** Setting and Clearing Marks There are now two kinds of marker that you can put on a file in Dired: --- 3221,3225 ---- parent directory. ! *** Setting and Clearing Marks There are now two kinds of marker that you can put on a file in Dired: *************** *** 3075,3095 **** `*' (and also for unmarking): ! *** `m' marks the current file with `*', for an operation other than deletion. ! *** `*' marks all executable files. With a prefix argument, it unmarks all those files. ! *** `@' marks all symbolic links. With a prefix argument, it unmarks all those files. ! *** `/' marks all directory files except `.' and `..'. With a prefix argument, it unmarks all those files. ! *** M-DEL removes a specific or all marks from every file. With an argument, queries for each marked file. Type your help character, usually C-h, at that time for help. ! *** `c' replaces all marks that use the character OLD with marks that use the character NEW. You can use almost any character as a mark character by means of this command, to distinguish various classes of --- 3232,3252 ---- `*' (and also for unmarking): ! **** `m' marks the current file with `*', for an operation other than deletion. ! **** `*' marks all executable files. With a prefix argument, it unmarks all those files. ! **** `@' marks all symbolic links. With a prefix argument, it unmarks all those files. ! **** `/' marks all directory files except `.' and `..'. With a prefix argument, it unmarks all those files. ! **** M-DEL removes a specific or all marks from every file. With an argument, queries for each marked file. Type your help character, usually C-h, at that time for help. ! **** `c' replaces all marks that use the character OLD with marks that use the character NEW. You can use almost any character as a mark character by means of this command, to distinguish various classes of *************** *** 3097,3101 **** files; if NEW is ` ', then the command unmarks the files it acts on. ! ** Operating on Multiple Files The Dired commands to operate directly on files (rename them, copy --- 3254,3258 ---- files; if NEW is ` ', then the command unmarks the files it acts on. ! *** Operating on Multiple Files The Dired commands to operate directly on files (rename them, copy *************** *** 3116,3120 **** These are the commands: ! *** `C' copies the specified files. You must specify a directory to copy into, or (if copying a single file) a new name. --- 3273,3277 ---- These are the commands: ! **** `C' copies the specified files. You must specify a directory to copy into, or (if copying a single file) a new name. *************** *** 3123,3127 **** file. ! *** `R' renames the specified files. You must specify a directory to rename into, or (if renaming a single file) a new name. --- 3280,3284 ---- file. ! **** `R' renames the specified files. You must specify a directory to rename into, or (if renaming a single file) a new name. *************** *** 3129,3147 **** with renamed files so that they refer to the new names. ! *** `H' makes hard links to the specified files. You must specify a directory to make the links in, or (if making just one link) the name to give the link. ! *** `S' makes symbolic links to the specified files. You must specify a directory to make the links in, or (if making just one link) the name to give the link. ! *** `M' changes the mode of the specified files. This calls the `chmod' program, so you can describe the desired mode change with any argument that `chmod' would handle. ! *** `G' changes the group of the specified files. ! *** `O' changes the owner of the specified files. (On normal systems, only the superuser can do this.) --- 3286,3304 ---- with renamed files so that they refer to the new names. ! **** `H' makes hard links to the specified files. You must specify a directory to make the links in, or (if making just one link) the name to give the link. ! **** `S' makes symbolic links to the specified files. You must specify a directory to make the links in, or (if making just one link) the name to give the link. ! **** `M' changes the mode of the specified files. This calls the `chmod' program, so you can describe the desired mode change with any argument that `chmod' would handle. ! **** `G' changes the group of the specified files. ! **** `O' changes the owner of the specified files. (On normal systems, only the superuser can do this.) *************** *** 3150,3163 **** different places. ! *** `Z' compresses or uncompresses the specified files. ! *** `L' loads the specified Emacs Lisp files. ! *** `B' byte compiles the specified Emacs Lisp files. ! *** `P' prints the specified files. It uses the variables `lpr-command' and `lpr-switches' just as `lpr-file' does. ! ** Shell Commands in Dired `!' reads a shell command string in the minibuffer and runs the shell --- 3307,3320 ---- different places. ! **** `Z' compresses or uncompresses the specified files. ! **** `L' loads the specified Emacs Lisp files. ! **** `B' byte compiles the specified Emacs Lisp files. ! **** `P' prints the specified files. It uses the variables `lpr-command' and `lpr-switches' just as `lpr-file' does. ! *** Shell Commands in Dired `!' reads a shell command string in the minibuffer and runs the shell *************** *** 3186,3192 **** of the Dired buffer. ! ** Regular Expression File Name Substitution ! *** `% m REGEXP RET' marks all files whose names match the regular expression REGEXP. --- 3343,3349 ---- of the Dired buffer. ! *** Regular Expression File Name Substitution ! **** `% m REGEXP RET' marks all files whose names match the regular expression REGEXP. *************** *** 3194,3201 **** `^' and `$' to anchor matches. Exclude subdirs by hiding them. ! *** `% d REGEXP RET' flags for deletion all files whose names match the regular expression REGEXP. ! *** `% R', `% C', `% H', `% S' These four commands rename, copy, make hard links and make soft links, --- 3351,3358 ---- `^' and `$' to anchor matches. Exclude subdirs by hiding them. ! **** `% d REGEXP RET' flags for deletion all files whose names match the regular expression REGEXP. ! **** `% R', `% C', `% H', `% S' These four commands rename, copy, make hard links and make soft links, *************** *** 3222,3238 **** as a default the last regular expression specified in a `%' command. ! ** Dired Case Conversion ! *** `% u' renames each of the selected files to an upper case name. ! *** `% l' renames each of the selected files to a lower case name. ! ** File Comparison with Dired ! *** `=' compares the current file with another file (the file at the mark), by running the `diff' program. The file at the mark is given to `diff' first. ! *** `M-=' compares the current file with its backup file. If there are several numerical backups, it uses the most recent one. If this file is a backup, it is compared with its original. --- 3379,3395 ---- as a default the last regular expression specified in a `%' command. ! *** Dired Case Conversion ! **** `% u' renames each of the selected files to an upper case name. ! **** `% l' renames each of the selected files to a lower case name. ! *** File Comparison with Dired ! **** `=' compares the current file with another file (the file at the mark), by running the `diff' program. The file at the mark is given to `diff' first. ! **** `M-=' compares the current file with its backup file. If there are several numerical backups, it uses the most recent one. If this file is a backup, it is compared with its original. *************** *** 3240,3244 **** The backup file is the first file given to `diff'. ! ** Subdirectories in Dired You can display more than one directory in one Dired buffer. --- 3397,3401 ---- The backup file is the first file given to `diff'. ! *** Subdirectories in Dired You can display more than one directory in one Dired buffer. *************** *** 3263,3277 **** in one Dired buffer: ! *** C-M-u Go up to the parent directory's headerline. ! *** C-M-d Go down in the tree, to the first subdirectory's headerline. ! *** C-M-n Go to next subdirectory headerline, regardless of level. ! *** C-M-p Go to previous subdirectory headerline, regardless of level. ! ** Hiding Subdirectories "Hiding" a subdirectory means to make it invisible, except for its --- 3420,3434 ---- in one Dired buffer: ! **** C-M-u Go up to the parent directory's headerline. ! **** C-M-d Go down in the tree, to the first subdirectory's headerline. ! **** C-M-n Go to next subdirectory headerline, regardless of level. ! **** C-M-p Go to previous subdirectory headerline, regardless of level. ! *** Hiding Subdirectories "Hiding" a subdirectory means to make it invisible, except for its *************** *** 3280,3287 **** files in hidden directories even if they are marked. ! *** `$' hides or unhides the current subdirectory and move to next subdirectory. A prefix argument serves as a repeat count. ! *** `M-$' hides all subdirectories, leaving only their header lines. Or, if at least one subdirectory is currently hidden, it makes everything visible again. You can use this command to get an overview --- 3437,3444 ---- files in hidden directories even if they are marked. ! **** `$' hides or unhides the current subdirectory and move to next subdirectory. A prefix argument serves as a repeat count. ! **** `M-$' hides all subdirectories, leaving only their header lines. Or, if at least one subdirectory is currently hidden, it makes everything visible again. You can use this command to get an overview *************** *** 3289,3295 **** away. ! ** Editing the Dired Buffer ! *** `l' updates the specified files in a Dired buffer. This means reading their current status from the file system and changing the buffer to reflect it properly. --- 3446,3452 ---- away. ! *** Editing the Dired Buffer ! **** `l' updates the specified files in a Dired buffer. This means reading their current status from the file system and changing the buffer to reflect it properly. *************** *** 3298,3306 **** contents of the subdirectory. ! *** `g' updates the entire contents of the Dired buffer. It preserves all marks except for those on files that have vanished. Hidden subdirectories are updated but remain hidden. ! *** `k' kills all marked lines (not the files). With a prefix argument, it kills that many lines starting with the current line. --- 3455,3463 ---- contents of the subdirectory. ! **** `g' updates the entire contents of the Dired buffer. It preserves all marks except for those on files that have vanished. Hidden subdirectories are updated but remain hidden. ! **** `k' kills all marked lines (not the files). With a prefix argument, it kills that many lines starting with the current line. *************** *** 3313,3317 **** Dired buffer. ! ** `find' and Dired. To search for files with names matching a wildcard pattern use --- 3470,3474 ---- Dired buffer. ! *** `find' and Dired. To search for files with names matching a wildcard pattern use *************** *** 3336,3348 **** use `find'. ! * New amusements and novelties. ! ** `M-x mpuz' displays a multiplication puzzle, in which each letter stands for a digit, and you must determine which digit. The puzzles are determined randomly, so they are always different. ! ** `M-x gomoku' plays the game Gomoku with you. It needs more work. ! ** `M-x spook' adds a line of randomly chosen keywords to an outgoing mail message. The keywords are chosen from a list of words that suggest you are discussing something subversive. --- 3493,3505 ---- use `find'. ! ** New amusements and novelties. ! *** `M-x mpuz' displays a multiplication puzzle, in which each letter stands for a digit, and you must determine which digit. The puzzles are determined randomly, so they are always different. ! *** `M-x gomoku' plays the game Gomoku with you. It needs more work. ! *** `M-x spook' adds a line of randomly chosen keywords to an outgoing mail message. The keywords are chosen from a list of words that suggest you are discussing something subversive. *************** *** 3355,3361 **** actually use now. ! * Installation changes ! ** The configure script has been provided to help with the installation process. It takes the place of editing the Makefiles and src/config.h, and can often guess the appropriate operating system to --- 3512,3518 ---- actually use now. ! ** Installation changes ! *** The configure script has been provided to help with the installation process. It takes the place of editing the Makefiles and src/config.h, and can often guess the appropriate operating system to *************** *** 3363,3370 **** description of the steps required for installation. ! ** If you create a Lisp file named `site-start.el', Emacs loads the file whenever it starts up. ! ** A new Lisp variable, `data-directory', indicates the directory containing the DOC file, tutorial, copying agreement, and other familiar `etc' files. The value of `data-directory' is a simple string. --- 3520,3527 ---- description of the steps required for installation. ! *** If you create a Lisp file named `site-start.el', Emacs loads the file whenever it starts up. ! *** A new Lisp variable, `data-directory', indicates the directory containing the DOC file, tutorial, copying agreement, and other familiar `etc' files. The value of `data-directory' is a simple string. *************** *** 3375,3379 **** refer to `data-directory' to find data files. ! ** The PURESIZE definition has been moved from config.h to its own file, puresize.h. Since almost every file of C source in the distribution depends on config.h, but only alloc.c and data.c depend --- 3532,3536 ---- refer to `data-directory' to find data files. ! *** The PURESIZE definition has been moved from config.h to its own file, puresize.h. Since almost every file of C source in the distribution depends on config.h, but only alloc.c and data.c depend *************** *** 3381,3385 **** only those two files to be recompiled. ! ** The makefile at the top of the Emacs source tree now supports a `dist' target, which creates a compressed tar file suitable for distribution, using the contents of the source tree. Object files, --- 3538,3542 ---- only those two files to be recompiled. ! *** The makefile at the top of the Emacs source tree now supports a `dist' target, which creates a compressed tar file suitable for distribution, using the contents of the source tree. Object files, *************** *** 3388,3393 **** the tar file. ! For older news, see the file ONEWS. For Lisp changes in (the first ! release of) Emacs 19, see the file LNEWS. ---------------------------------------------------------------------- --- 3545,3550 ---- the tar file. ! * For older news, see the file ONEWS. For Lisp changes in (the first ! * release of) Emacs 19, see the file LNEWS. ---------------------------------------------------------------------- diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/etc/ORDERS emacs-19.26/etc/ORDERS *** emacs-19.25/etc/ORDERS Sun May 22 19:31:54 1994 --- emacs-19.26/etc/ORDERS Mon Jun 20 12:56:02 1994 *************** *** 2905,2909 **** The following source and executables for MS-DOS, on 3.5" 1.44MB diskettes ! (see "MS-DOS Distribution"): *** BEING UPDATED !!! *** --- 2905,2909 ---- The following source and executables for MS-DOS, on 3.5" 1.44MB diskettes ! (see "MS-DOS Diskettes"): *** BEING UPDATED !!! *** diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/etc/SERVICE emacs-19.26/etc/SERVICE *** emacs-19.25/etc/SERVICE Thu May 5 11:46:53 1994 --- emacs-19.26/etc/SERVICE Tue Jun 14 19:29:48 1994 *************** *** 63,66 **** --- 63,85 ---- Updated: 5Apr94  + Gerd Aschemann + Herderstr. 15 + D-64285 Darmstadt + Tel.: +49 6151 62568 + + - System Administrator (UNIX) of Operating Systems Research Group, + CS Department, TU Darmstadt, Germany + - Consultant for other UNIX users at TU Darmstadt + - 14 years experience with CS, Systemadministration + - 7 years with UNIX/Networking/FreeWare/GNU/X11 + - 5 years organizer of practical OS courses + - Platforms: SunOS, HP-UX, Ultrix, OSF1, Linux, AIX, Solaris + - Experience with parallel environments (Transputers: Meiko, Parix) + + Rates are at 100,-- DM (~60 US$) per hour minimum, depending on the job. + I am willing to travel for sufficiently large jobs. + + Entered: 10Jun94 +  Giuseppe Attardi Dipartimento di Informatica *************** *** 503,507 **** Updated: 14Apr94  ! Julian H. Stacey. fallback 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 --- 522,526 ---- 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 *************** *** 535,539 **** Short enquiries free. (Kurze Anfragen Ohne Gebuhr). ! Updated: 7Apr94  Richard M. Stallman --- 554,558 ---- Short enquiries free. (Kurze Anfragen Ohne Gebuhr). ! Updated: 14Jun94  Richard M. Stallman diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/etc/TUTORIAL emacs-19.26/etc/TUTORIAL *** emacs-19.25/etc/TUTORIAL Wed Mar 30 13:19:46 1994 --- emacs-19.26/etc/TUTORIAL Sun Jul 3 15:32:02 1994 *************** *** 442,445 **** --- 442,452 ---- On VMS it will print "Wrote ...[...]TUTORIAL." + NOTE: On some systems, typing C-x C-s will freeze the screen and you + will see no further output from Emacs. This indicates that an + operating system "feature" called "flow control" is intercepting the + C-s and not letting it get through to Emacs. To unfreeze the screen, + type C-q. Then see the section "Spontaneous Entry to Incremental + Search" in the Emacs manual for advice on dealing with this "feature". + To make a new file, just find it "as if" it already existed. Then start typing in the text. When you ask to "save" the file, Emacs *************** *** 665,668 **** --- 672,682 ---- occurrence exists Emacs beeps and tells you that it is a failing search. C-g would also terminate the search. + + NOTE: On some systems, typing C-s will freeze the screen and you will + see no further output from Emacs. This indicates that an operating + system "feature" called "flow control" is intercepting the C-s and not + letting it get through to Emacs. To unfreeze the screen, type C-q. + Then see the section "Spontaneous Entry to Incremental Search" in the + Emacs manual for advice on dealing with this "feature". If you are in the middle of an incremental search and type , diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/etc/emacs.1 emacs-19.26/etc/emacs.1 *** emacs-19.25/etc/emacs.1 Tue Apr 19 12:29:45 1994 --- emacs-19.26/etc/emacs.1 Mon Jul 11 16:30:49 1994 *************** *** 13,22 **** .SH DESCRIPTION .I GNU Emacs ! is a new version of .I Emacs, written by the author of the original (PDP-10) .I Emacs, ! Richard Stallman. ! Its user functionality encompasses everything other .I Emacs --- 13,30 ---- .SH DESCRIPTION .I GNU Emacs ! is a version of .I Emacs, written by the author of the original (PDP-10) .I Emacs, ! Richard Stallman. ! .br ! The primary documentation of GNU Emacs is in the GNU Emacs Manual, ! which you can read on line using Info, a subsystem of Emacs. Please ! look there for complete and up-to-date documentation. This man page ! is updated only when someone volunteers to do so; the Emacs ! maintainers' priority goal is to minimize the amount of time this man ! page takes away from other more useful projects. ! .br ! The user functionality of GNU Emacs encompasses everything other .I Emacs *************** *** 104,112 **** as a batch editor: .TP 8 ! .BI \-batch " commandfile" ! Edit in batch mode using the commands found in ! .I commandfile. ! The editor will send messages to stdout. ! This option must be the first in the argument list. .TP .B \-kill --- 112,119 ---- as a batch editor: .TP 8 ! .BI \-batch ! Edit in batch mode. The editor will send messages to stdout. This ! option must be the first in the argument list. You must use -l and -f ! options to specify files to execute and functions to call. .TP .B \-kill *************** *** 378,389 **** .PP .SH MANUALS ! You can order printed copies of the GNU Emacs Manual for $20.00/copy ! postpaid from the Free Software Foundation, which develops GNU software ! (contact them for quantity prices on the manual). Their address is: ! .nf ! Free Software Foundation ! 675 Mass Ave. ! Cambridge, MA 02139 ! .fi Your local Emacs maintainer might also have copies available. As with all software and publications from FSF, everyone is permitted to --- 385,392 ---- .PP .SH MANUALS ! You can order printed copies of the GNU Emacs Manual from the Free ! Software Foundation, which develops GNU software. See the file ORDERS ! for ordering information. ! .br Your local Emacs maintainer might also have copies available. As with all software and publications from FSF, everyone is permitted to *************** *** 495,499 **** (Gnu's Not Unix) will be a complete replacement for Berkeley Unix. ! Everyone will be able to use the GNU system for free. .SH SEE ALSO X(1), xlsfonts(1), xterm(1), xrdb(1) --- 498,502 ---- (Gnu's Not Unix) will be a complete replacement for Berkeley Unix. ! Everyone will be free to use, copy, study and change the GNU system. .SH SEE ALSO X(1), xlsfonts(1), xterm(1), xrdb(1) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/info/dir emacs-19.26/info/dir *** emacs-19.25/info/dir Sat Jan 15 10:19:53 1994 --- emacs-19.26/info/dir Wed Aug 17 21:07:45 1994 *************** *** 9,12 **** --- 9,13 ---- gives a primer for first-timers, "mTexinfo" visits Texinfo topic, etc. + Or click mouse button 2 on a menu item or cross reference to select it. --- PLEASE ADD DOCUMENTATION TO THIS TREE. (See INFO topic first.) --- diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/info/info-1 emacs-19.26/info/info-1 *** emacs-19.25/info/info-1 --- emacs-19.26/info/info-1 Mon Jun 13 07:50:52 1994 *************** *** 0 **** --- 1,1217 ---- + This is Info file ../info/info, produced by Makeinfo-1.54 from the + input file info.texi. + + This file describes how to use Info, the on-line, menu-driven GNU + documentation system. + + Copyright (C) 1989, 1992 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this + manual provided the copyright notice and this permission notice are + preserved on all copies. + + Permission is granted to copy and distribute modified versions of + this manual under the conditions for verbatim copying, provided that + the entire resulting derived work is distributed under the terms of a + permission notice identical to this one. + + Permission is granted to copy and distribute translations of this + manual into another language, under the above conditions for modified + versions, except that this permission notice may be stated in a + translation approved by the Free Software Foundation. + +  + File: info, Node: Top, Next: Getting Started, Prev: (dir), Up: (dir) + + Info: An Introduction + ********************* + + Info is a program for reading documentation, which you are using now. + + To learn how to use Info, type the command `h'. It brings you to a + programmed instruction sequence. If at any time you are ready to stop + using Info, type `q'. + + To learn advanced Info commands, type `n' twice. This brings you to + `Info for Experts', skipping over the `Getting Started' chapter. + + * Menu: + + * Getting Started:: Getting started using an Info reader. + * Advanced Info:: Advanced commands within Info. + * Create an Info File:: How to make your own Info file. + +  + File: info, Node: Getting Started, Next: Advanced Info, Prev: Top, Up: Top + + Getting Started + *************** + + This first part of the Info manual describes how to get around inside + of Info. The second part of the manual describes various advanced Info + commands, and how to write an Info as distinct from a Texinfo file. + The third part is about how to generate Info files from Texinfo files. + + * Menu: + + * Help-Small-Screen:: Starting Info on a Small Screen + * Help:: How to use Info + * Help-P:: Returning to the Previous node + * Help-^L:: The Space, Rubout, B and ^L commands. + * Help-M:: Menus + * Help-Adv:: Some advanced Info commands + * Help-Q:: Quitting Info + * Using Stand-alone Info:: How to use the stand-alone Info reader. + +  + File: info, Node: Help-Small-Screen, Next: Help, Up: Getting Started + + Starting Info on a Small Screen + =============================== + + Since your terminal has an unusually small number of lines on its + screen, it is necessary to give you special advice at the beginning. + + If you see the text `--All----' at near the bottom right corner of + the screen, it means the entire text you are looking at fits on the + screen. If you see `--Top----' instead, it means that there is more + text below that does not fit. To move forward through the text and see + another screen full, press the Space bar, SPC. To move back up, press + the key labeled `Delete' or DEL. + + Here are 40 lines of junk, so you can try Spaces and Deletes and see + what they do. At the end are instructions of what you should do next. + This is line 17 + This is line 18 + This is line 19 + This is line 20 + This is line 21 + This is line 22 + This is line 23 + This is line 24 + This is line 25 + This is line 26 + This is line 27 + This is line 28 + This is line 29 + This is line 30 + This is line 31 + This is line 32 + This is line 33 + This is line 34 + This is line 35 + This is line 36 + This is line 37 + This is line 38 + This is line 39 + This is line 40 + This is line 41 + This is line 42 + This is line 43 + This is line 44 + This is line 45 + This is line 46 + This is line 47 + This is line 48 + This is line 49 + This is line 50 + This is line 51 + This is line 52 + This is line 53 + This is line 54 + This is line 55 + This is line 56 + If you have managed to get here, go back to the beginning with + Delete, and come back here again, then you understand Space and Delete. + So now type an `n' --just one character; don't type the quotes and + don't type the Return key afterward-- to get to the normal start of the + course. + +  + File: info, Node: Help, Next: Help-P, Prev: Help-Small-Screen, Up: Getting Started + + How to use Info + =============== + + You are talking to the program Info, for reading documentation. + + Right now you are looking at one "Node" of Information. A node + contains text describing a specific topic at a specific level of + detail. This node's topic is "how to use Info". + + The top line of a node is its "header". This node's header (look at + it now) says that it is the node named `Help' in the file `info'. It + says that the `Next' node after this one is the node called `Help-P'. + An advanced Info command lets you go to any node whose name you know. + + Besides a `Next', a node can have a `Previous' or an `Up'. This + node has a `Previous' but no `Up', as you can see. + + Now it is time to move on to the `Next' node, named `Help-P'. + + >> Type `n' to move there. Type just one character; + do not type the quotes and do not type a RET afterward. + + `>>' in the margin means it is really time to try a command. + +  + File: info, Node: Help-P, Next: Help-^L, Prev: Help, Up: Getting Started + + Returning to the Previous node + ============================== + + This node is called `Help-P'. The `Previous' node, as you see, is + `Help', which is the one you just came from using the `n' command. + Another `n' command now would take you to the next node, `Help-^L'. + + >> But do not do that yet. First, try the `p' command, which takes + you to the `Previous' node. When you get there, you can do an + `n' again to return here. + + This all probably seems insultingly simple so far, but *do not* be + led into skimming. Things will get more complicated soon. Also, do + not try a new command until you are told it is time to. Otherwise, you + may make Info skip past an important warning that was coming up. + + >> Now do an `n' to get to the node `Help-^L' and learn more. + +  + File: info, Node: Help-^L, Next: Help-M, Prev: Help-P, Up: Getting Started + + The Space, Delete, B and ^L commands. + ===================================== + + This node's header tells you that you are now at node `Help-^L', and + that `p' would get you back to `Help-P'. The node's title is + underlined; it says what the node is about (most nodes have titles). + + This is a big node and it does not all fit on your display screen. + You can tell that there is more that is not visible because you can see + the string `--Top-----' rather than `--All----' near the bottom right + corner of the screen. + + The Space, Delete and `B' commands exist to allow you to "move + around" in a node that does not all fit on the screen at once. Space + moves forward, to show what was below the bottom of the screen. Delete + moves backward, to show what was above the top of the screen (there is + not anything above the top until you have typed some spaces). + + >> Now try typing a Space (afterward, type a Delete to return here). + + When you type the space, the two lines that were at the bottom of + the screen appear at the top, followed by more lines. Delete takes the + two lines from the top and moves them to the bottom, *usually*, but if + there are not a full screen's worth of lines above them they may not + make it all the way to the bottom. + + If you type Space when there is no more to see, it rings the bell + and otherwise does nothing. The same goes for Delete when the header + of the node is visible. + + If your screen is ever garbaged, you can tell Info to print it out + again by typing `C-l' (`Control-L', that is--hold down "Control" and + type an L or `l'). + + >> Type `C-l' now. + + To move back to the beginning of the node you are on, you can type a + lot of Deletes. You can also type simply `b' for beginning. + >> Try that now. (We have put in enough verbiage to push this past + the first screenful, but screens are so big nowadays that perhaps it + isn't enough. You may need to shrink your Emacs or Info window.) + Then come back, with Spaces. + + If your screen is very tall, all of this node might fit at once. In + that case, "b" won't do anything. Sorry; what can we do? + + You have just learned a considerable number of commands. If you + want to use one but have trouble remembering which, you should type a ? + which prints out a brief list of commands. When you are finished + looking at the list, make it go away by typing a SPC. + + >> Type a ? now. After it finishes, type a SPC. + + (If you are using the standalone Info reader, type `l' to return + here.) + + From now on, you will encounter large nodes without warning, and + will be expected to know how to use Space and Delete to move around in + them without being told. Since not all terminals have the same size + screen, it would be impossible to warn you anyway. + + >> Now type `n' to see the description of the `m' command. + +  + File: info, Node: Help-M, Next: Help-Adv, Prev: Help-^L, Up: Getting Started + + Menus + ===== + + Menus and the `m' command + + With only the `n' and `p' commands for moving between nodes, nodes + are restricted to a linear sequence. Menus allow a branching + structure. A menu is a list of other nodes you can move to. It is + actually just part of the text of the node formatted specially so that + Info can interpret it. The beginning of a menu is always identified by + a line which starts with `* Menu:'. A node contains a menu if and only + if it has a line in it which starts that way. The only menu you can + use at any moment is the one in the node you are in. To use a menu in + any other node, you must move to that node first. + + After the start of the menu, each line that starts with a `*' + identifies one subtopic. The line usually contains a brief name for + the subtopic (followed by a `:'), the name of the node that talks about + that subtopic, and optionally some further description of the subtopic. + Lines in the menu that do not start with a `*' have no special + meaning--they are only for the human reader's benefit and do not define + additional subtopics. Here is an example: + + * Foo: FOO's Node This tells about FOO + + The subtopic name is Foo, and the node describing it is `FOO's Node'. + The rest of the line is just for the reader's Information. [[ But this + line is not a real menu item, simply because there is no line above it + which starts with `* Menu:'.]] + + When you use a menu to go to another node (in a way that will be + described soon), what you specify is the subtopic name, the first thing + in the menu line. Info uses it to find the menu line, extracts the + node name from it, and goes to that node. The reason that there is + both a subtopic name and a node name is that the node name must be + meaningful to the computer and may therefore have to be ugly looking. + The subtopic name can be chosen just to be convenient for the user to + specify. Often the node name is convenient for the user to specify and + so both it and the subtopic name are the same. There is an + abbreviation for this: + + * Foo:: This tells about FOO + + This means that the subtopic name and node name are the same; they are + both `Foo'. + + >> Now use Spaces to find the menu in this node, then come back to + the front with a `b' and some Spaces. As you see, a menu is + actually visible in its node. If you cannot find a menu in a node + by looking at it, then the node does not have a menu and the + `m' command is not available. + + The command to go to one of the subnodes is `m'--but *do not do it + yet!* Before you use `m', you must understand the difference between + commands and arguments. So far, you have learned several commands that + do not need arguments. When you type one, Info processes it and is + instantly ready for another command. The `m' command is different: it + is incomplete without the "name of the subtopic". Once you have typed + `m', Info tries to read the subtopic name. + + Now look for the line containing many dashes near the bottom of the + screen. There is one more line beneath that one, but usually it is + blank. If it is empty, Info is ready for a command, such as `n' or `b' + or Space or `m'. If that line contains text ending in a colon, it mean + Info is trying to read the "argument" to a command. At such times, + commands do not work, because Info tries to use them as the argument. + You must either type the argument and finish the command you started, + or type `Control-g' to cancel the command. When you have done one of + those things, the line becomes blank again. + + The command to go to a subnode via a menu is `m'. After you type + the `m', the line at the bottom of the screen says `Menu item: '. You + must then type the name of the subtopic you want, and end it with a RET. + + You can abbreviate the subtopic name. If the abbreviation is not + unique, the first matching subtopic is chosen. Some menus put the + shortest possible abbreviation for each subtopic name in capital + letters, so you can see how much you need to type. It does not matter + whether you use upper case or lower case when you type the subtopic. + You should not put any spaces at the end, or inside of the item name, + except for one space where a space appears in the item in the menu. + + You can also use the "completion" feature to help enter the subtopic + name. If you type the Tab key after entering part of a name, it will + magically fill in more of the name--as much as follows uniquely from + what you have entered. + + If you move the cursor to one of the menu subtopic lines, then you do + not need to type the argument: you just type a Return, and it stands for + the subtopic of the line you are on. + + Here is a menu to give you a chance to practice. + + * Menu: The menu starts here. + + This menu gives you three ways of going to one place, Help-FOO. + + * Foo: Help-FOO. A node you can visit for fun. + * Bar: Help-FOO. Strange! two ways to get to the same place. + * Help-FOO:: And yet another! + >> Now type just an `m' and see what happens: + + Now you are "inside" an `m' command. Commands cannot be used now; + the next thing you will type must be the name of a subtopic. + + You can change your mind about doing the `m' by typing Control-g. + + >> Try that now; notice the bottom line clear. + + >> Then type another `m'. + + >> Now type `BAR' item name. Do not type Return yet. + + While you are typing the item name, you can use the Delete key to + cancel one character at a time if you make a mistake. + + >> Type one to cancel the `R'. You could type another `R' to + replace it. You do not have to, since `BA' is a valid abbreviation. + + >> Now you are ready to go. Type a RET. + + After visiting Help-FOO, you should return here. + + >> Type `n' to see more commands. + + Here is another way to get to Help-FOO, a menu. You can ignore this + if you want, or else try it (but then please come back to here). + + * Menu: + + * Help-FOO:: + +  + File: info, Node: Help-FOO, Up: Help-M + + The `u' command + --------------- + + Congratulations! This is the node `Help-FOO'. Unlike the other + nodes you have seen, this one has an `Up': `Help-M', the node you just + came from via the `m' command. This is the usual convention--the nodes + you reach from a menu have `Up' nodes that lead back to the menu. + Menus move Down in the tree, and `Up' moves Up. `Previous', on the + other hand, is usually used to "stay on the same level but go backwards" + + You can go back to the node `Help-M' by typing the command `u' for + "Up". That puts you at the *front* of the node--to get back to where + you were reading you have to type some SPCs. + + >> Now type `u' to move back up to `Help-M'. + +  + File: info, Node: Help-Adv, Next: Help-Q, Prev: Help-M, Up: Getting Started + + Some advanced Info commands + =========================== + + The course is almost over, so please stick with it to the end. + + If you have been moving around to different nodes and wish to + retrace your steps, the `l' command (`l' for "last") will do that, one + node-step at a time. As you move from node to node, Info records the + nodes where you have been in a special history list. The `l' command + revisits nodes in the history list; each successive `l' command moves + one step back through the history. + + If you have been following directions, ad `l' command now will get + you back to `Help-M'. Another `l' command would undo the `u' and get + you back to `Help-FOO'. Another `l' would undo the `m' and get you + back to `Help-M'. + + >> Try typing three `l''s, pausing in between to see what each + `l' does. + + Then follow directions again and you will end up back here. + + Note the difference between `l' and `p': `l' moves to where *you* + last were, whereas `p' always moves to the node which the header says + is the `Previous' node (from this node, to `Help-M'). + + The `d' command gets you instantly to the Directory node. This + node, which is the first one you saw when you entered Info, has a menu + which leads (directly, or indirectly through other menus), to all the + nodes that exist. + + >> Try doing a `d', then do an `l' to return here (yes, + *do* return). + + Sometimes, in Info documentation, you will see a cross reference. + Cross references look like this: *Note Cross: Help-Cross. That is a + real, live cross reference which is named `Cross' and points at the + node named `Help-Cross'. + + If you wish to follow a cross reference, you must use the `f' + command. The `f' must be followed by the cross reference name (in this + case, `Cross'). While you enter the name, you can use the Delete key + to edit your input. If you change your mind about following any + reference, you can use `Control-g' to cancel the command. + + Completion is available in the `f' command; you can complete among + all the cross reference names in the current node by typing a Tab. + + >> Type `f', followed by `Cross', and a RET. + + To get a list of all the cross references in the current node, you + can type `?' after an `f'. The `f' continues to await a cross + reference name even after printing the list, so if you don't actually + want to follow a reference, you should type a `Control-g' to cancel the + `f'. + + >> Type "f?" to get a list of the cross references in this node. Then + type a `Control-g' and see how the `f' gives up. + + >> Now type `n' to see the last node of the course. + +  + File: info, Node: Help-Cross, Up: Help-Adv + + The node reached by the cross reference in Info + ----------------------------------------------- + + This is the node reached by the cross reference named `Cross'. + + While this node is specifically intended to be reached by a cross + reference, most cross references lead to nodes that "belong" someplace + else far away in the structure of Info. So you cannot expect the + footnote to have a `Next', `Previous' or `Up' pointing back to where + you came from. In general, the `l' (el) command is the only way to get + back there. + + >> Type `l' to return to the node where the cross reference was. + +  + File: info, Node: Help-Q, Prev: Help-Adv, Up: Getting Started + + Quitting Info + ============= + + To get out of Info, back to what you were doing before, type `q' for + "Quit". + + This is the end of the course on using Info. There are some other + commands that are meant for experienced users; they are useful, and you + can find them by looking in the directory node for documentation on + Info. Finding them will be a good exercise in using Info in the usual + manner. + + >> Type `d' to go to the Info directory node; then type + `mInfo' and Return, to get to the node about Info and + see what other help is available. + +  + File: info, Node: Advanced Info, Next: Create an Info File, Prev: Getting Started, Up: Top + + Info for Experts + **************** + + This chapter describes various advanced Info commands, and how to + write an Info as distinct from a Texinfo file. (However, in most + cases, writing a Texinfo file is better, since you can use it *both* to + generate an Info file and to make a printed manual. *Note Overview of + Texinfo: (texinfo)Top.) + + * Menu: + + * Expert:: Advanced Info commands: g, s, e, and 1 - 5. + * Add:: Describes how to add new nodes to the hierarchy. + Also tells what nodes look like. + * Menus:: How to add to or create menus in Info nodes. + * Cross-refs:: How to add cross-references to Info nodes. + * Tags:: How to make tag tables for Info files. + * Checking:: Checking an Info File + * Emacs Info Variables:: Variables modifying the behavior of Emacs Info. + +  + File: info, Node: Expert, Next: Add, Up: Advanced Info + + Advanced Info Commands + ====================== + + `g', `s', `1', - `9', and `e' + + If you know a node's name, you can go there by typing `g', the name, + and RET. Thus, `gTopRET' would go to the node called `Top' in this + file (its directory node). `gExpertRET' would come back here. + + Unlike `m', `g' does not allow the use of abbreviations. + + To go to a node in another file, you can include the filename in the + node name by putting it at the front, in parentheses. Thus, + `g(dir)TopRET' would go to the Info Directory node, which is node `Top' + in the file `dir'. + + The node name `*' specifies the whole file. So you can look at all + of the current file by typing `g*RET' or all of any other file with + `g(FILENAME)RET'. + + The `s' command allows you to search a whole file for a string. It + switches to the next node if and when that is necessary. You type `s' + followed by the string to search for, terminated by RET. To search for + the same string again, just `s' followed by RET will do. The file's + nodes are scanned in the order they are in in the file, which has no + necessary relationship to the order that they may be in in the tree + structure of menus and `next' pointers. But normally the two orders + are not very different. In any case, you can always do a `b' to find + out what node you have reached, if the header is not visible (this can + happen, because `s' puts your cursor at the occurrence of the string, + not at the beginning of the node). + + If you grudge the system each character of type-in it requires, you + might like to use the commands `1', `2', `3', `4', ... `9'. They are + short for the `m' command together with an argument. `1' goes through + the first item in the current node's menu; `2' goes through the second + item, etc. + + If your display supports multiple fonts, and you are using Emacs' + Info mode to read Info files, the `*' for the fifth menu item is + underlined, and so is the `*' for the ninth item; these underlines make + it easy to see at a glance which number to use for an item. + + On ordinary terminals, you won't have underlining. If you need to + actually count items, it is better to use `m' instead, and specify the + name. + + The Info command `e' changes from Info mode to an ordinary Emacs + editing mode, so that you can edit the text of the current node. Type + `C-c C-c' to switch back to Info. The `e' command is allowed only if + the variable `Info-enable-edit' is non-`nil'. + +  + File: info, Node: Add, Next: Menus, Prev: Expert, Up: Advanced Info + + Adding a new node to Info + ========================= + + To add a new topic to the list in the Info directory, you must: + 1. Create some nodes, in some file, to document that topic. + + 2. Put that topic in the menu in the directory. *Note Menu: Menus. + + Usually, the way to create the nodes is with Texinfo *note Overview + of Texinfo: (texinfo)Top.); this has the advantage that you can also + make a printed manual from them. However, if you want to edit an Info + file, here is how. + + The new node can live in an existing documentation file, or in a new + one. It must have a ^_ character before it (invisible to the user; + this node has one but you cannot see it), and it ends with either a ^_, + a ^L, or the end of file. Note: If you put in a ^L to end a new node, + be sure that there is a ^_ after it to start the next one, since ^L + cannot *start* a node. Also, a nicer way to make a node boundary be a + page boundary as well is to put a ^L *right after* the ^_. + + The ^_ starting a node must be followed by a newline or a ^L + newline, after which comes the node's header line. The header line + must give the node's name (by which Info finds it), and state the names + of the `Next', `Previous', and `Up' nodes (if there are any). As you + can see, this node's `Up' node is the node `Top', which points at all + the documentation for Info. The `Next' node is `Menus'. + + The keywords "Node", "Previous", "Up", and "Next", may appear in any + order, anywhere in the header line, but the recommended order is the + one in this sentence. Each keyword must be followed by a colon, spaces + and tabs, and then the appropriate name. The name may be terminated + with a tab, a comma, or a newline. A space does not end it; node names + may contain spaces. The case of letters in the names is insignificant. + + A node name has two forms. A node in the current file is named by + what appears after the `Node: ' in that node's first line. For + example, this node's name is `Add'. A node in another file is named by + `(FILENAME)NODE-WITHIN-FILE', as in `(info)Add' for this node. If the + file name starts with "./", then it is relative to the current + directory; otherwise, it is relative starting from the standard Info + file directory of your site. The name `(FILENAME)Top' can be + abbreviated to just `(FILENAME)'. By convention, the name `Top' is + used for the "highest" node in any single file--the node whose `Up' + points out of the file. The Directory node is `(dir)'. The `Top' node + of a document file listed in the Directory should have an `Up: (dir)' + in it. + + The node name `*' is special: it refers to the entire file. Thus, + `g*' shows you the whole current file. The use of the node `*' is to + make it possible to make old-fashioned, unstructured files into nodes + of the tree. + + The `Node:' name, in which a node states its own name, must not + contain a filename, since Info when searching for a node does not + expect one to be there. The `Next', `Previous' and `Up' names may + contain them. In this node, since the `Up' node is in the same file, + it was not necessary to use one. + + Note that the nodes in this file have a file name in the header + line. The file names are ignored by Info, but they serve as comments + to help identify the node for the user. + +  + File: info, Node: Menus, Next: Cross-refs, Prev: Add, Up: Advanced Info + + How to Create Menus + =================== + + Any node in the Info hierarchy may have a "menu"--a list of subnodes. + The `m' command searches the current node's menu for the topic which it + reads from the terminal. + + A menu begins with a line starting with `* Menu:'. The rest of the + line is a comment. After the starting line, every line that begins + with a `* ' lists a single topic. The name of the topic-the argument + that the user must give to the `m' command to select this topic--comes + right after the star and space, and is followed by a colon, spaces and + tabs, and the name of the node which discusses that topic. The node + name, like node names following `Next', `Previous' and `Up', may be + terminated with a tab, comma, or newline; it may also be terminated + with a period. + + If the node name and topic name are the same, then rather than + giving the name twice, the abbreviation `* NAME::' may be used (and + should be used, whenever possible, as it reduces the visual clutter in + the menu). + + It is considerate to choose the topic names so that they differ from + each other very near the beginning--this allows the user to type short + abbreviations. In a long menu, it is a good idea to capitalize the + beginning of each item name which is the minimum acceptable + abbreviation for it (a long menu is more than 5 or so entries). + + The nodes listed in a node's menu are called its "subnodes", and it + is their "superior". They should each have an `Up:' pointing at the + superior. It is often useful to arrange all or most of the subnodes in + a sequence of `Next' and `Previous' pointers so that someone who wants + to see them all need not keep revisiting the Menu. + + The Info Directory is simply the menu of the node `(dir)Top'--that + is, node `Top' in file `.../info/dir'. You can put new entries in that + menu just like any other menu. The Info Directory is *not* the same as + the file directory called `info'. It happens that many of Info's files + live on that file directory, but they do not have to; and files on that + directory are not automatically listed in the Info Directory node. + + Also, although the Info node graph is claimed to be a "hierarchy", + in fact it can be *any* directed graph. Shared structures and pointer + cycles are perfectly possible, and can be used if they are appropriate + to the meaning to be expressed. There is no need for all the nodes in + a file to form a connected structure. In fact, this file has two + connected components. You are in one of them, which is under the node + `Top'; the other contains the node `Help' which the `h' command goes + to. In fact, since there is no garbage collector, nothing terrible + happens if a substructure is not pointed to, but such a substructure is + rather useless since nobody can ever find out that it exists. + +  + File: info, Node: Cross-refs, Next: Tags, Prev: Menus, Up: Advanced Info + + Creating Cross References + ========================= + + A cross reference can be placed anywhere in the text, unlike a menu + item which must go at the front of a line. A cross reference looks + like a menu item except that it has `*note' instead of `*'. It + *cannot* be terminated by a `)', because `)''s are so often part of + node names. If you wish to enclose a cross reference in parentheses, + terminate it with a period first. Here are two examples of cross + references pointers: + + *Note details: commands. (See *note 3: Full Proof.) + + They are just examples. The places they "lead to" do not really + exist! + +  + File: info, Node: Tags, Next: Checking, Prev: Cross-refs, Up: Advanced Info + + Tag Tables for Info Files + ========================= + + You can speed up the access to nodes of a large Info file by giving + it a tag table. Unlike the tag table for a program, the tag table for + an Info file lives inside the file itself and is used automatically + whenever Info reads in the file. + + To make a tag table, go to a node in the file using Emacs Info mode + and type `M-x Info-tagify'. Then you must use `C-x C-s' to save the + file. + + Once the Info file has a tag table, you must make certain it is up + to date. If, as a result of deletion of text, any node moves back more + than a thousand characters in the file from the position recorded in + the tag table, Info will no longer be able to find that node. To + update the tag table, use the `Info-tagify' command again. + + An Info file tag table appears at the end of the file and looks like + this: + + ^_ + Tag Table: + File: info, Node: Cross-refs^?21419 + File: info, Node: Tags^?22145 + ^_ + End Tag Table + + Note that it contains one line per node, and this line contains the + beginning of the node's header (ending just after the node name), a + Delete character, and the character position in the file of the + beginning of the node. + +  + File: info, Node: Checking, Next: Emacs Info Variables, Prev: Tags, Up: Advanced Info + + Checking an Info File + ===================== + + When creating an Info file, it is easy to forget the name of a node + when you are making a pointer to it from another node. If you put in + the wrong name for a node, this is not detected until someone tries to + go through the pointer using Info. Verification of the Info file is an + automatic process which checks all pointers to nodes and reports any + pointers which are invalid. Every `Next', `Previous', and `Up' is + checked, as is every menu item and every cross reference. In addition, + any `Next' which does not have a `Previous' pointing back is reported. + Only pointers within the file are checked, because checking pointers to + other files would be terribly slow. But those are usually few. + + To check an Info file, do `M-x Info-validate' while looking at any + node of the file with Emacs Info mode. + +  + File: info, Node: Emacs Info Variables, Prev: Checking, Up: Advanced Info + + Emacs Info-mode Variables + ========================= + + The following variables may modify the behaviour of Info-mode in + Emacs; you may wish to set one or several of these variables + interactively, or in your `~/.emacs' init file. *Note Examining and + Setting Variables: (emacs)Examining. + + `Info-enable-edit' + Set to `nil', disables the `e' (`Info-edit') command. A non-`nil' + value enables it. *Note Edit: Add. + + `Info-enable-active-nodes' + When set to a non-`nil' value, allows Info to execute Lisp code + associated with nodes. The Lisp code is executed when the node is + selected. + + `Info-directory-list' + The list of directories to search for Info files. Each element is + a string (directory name) or `nil' (try default directory). + + `Info-directory' + The standard directory for Info documentation files. Only used + when the function `Info-directory' is called. + +  + File: info, Node: Create an Info File, Prev: Advanced Info, Up: Top + + Creating an Info File from a Makeinfo file + ****************************************** + + `makeinfo' is a utility that converts a Texinfo file into an Info + file; `texinfo-format-region' and `texinfo-format-buffer' are GNU Emacs + functions that do the same. + + *Note Creating an Info File: (texinfo)Create an Info File, to learn + how to create an Info file from a Texinfo file. + + *Note Overview of Texinfo: (texinfo)Top, to learn how to write a + Texinfo file. + +  + File: info, Node: Using Stand-alone Info, Next: Options, Up: Top + + Using the Stand-alone Info Reader + ********************************* + + What is Info? + ------------- + + This text documents the use of the GNU Info program, version + 2.10. + + "Info" is a program which is used to view info files on an ASCII + terminal. "info files" are the result of processing texinfo files with + the program `makeinfo' or with the Emacs command `M-x + texinfo-format-buffer'. Finally, "texinfo" is a documentation language + which allows a printed manual and online documentation (an info file) + to be produced from a single source file. + + * Menu: + + * Options:: Options you can pass on the command line. + * Cursor Commands:: Commands which move the cursor within a node. + * Scrolling Commands:: Commands for moving the node around in a window. + * Node Commands:: Commands for selecting a new node. + * Searching Commands:: Commands for searching an info file. + * Xref Commands:: Commands for selecting cross references. + * Window Commands:: Commands which manipulate multiple windows. + * Printing Nodes:: How to print out the contents of a node. + * Miscellaneous Commands:: A few commands that defy categories. + * Variables:: How to change the default behaviour of Info. + +  + File: info, Node: Options, Next: Cursor Commands, Up: Using Stand-alone Info + + Command Line Options + ==================== + + GNU Info accepts several options to control the initial node being + viewed, and to specify which directories to search for info files. Here + is a template showing an invocation of GNU Info from the shell: + + info [--OPTION-NAME OPTION-VALUE] MENU-ITEM... + + The following OPTION-NAMES are available when invoking Info from the + shell: + + `--directory DIRECTORY-PATH' + `-d DIRECTORY-PATH' + Adds DIRECTORY-PATH to the list of directory paths searched when + Info needs to find a file. You may issue `--directory' multiple + times; once for each directory which contains info files. + Alternatively, you may specify a value for the environment variable + `INFOPATH'; if `--directory' is not given, the value of `INFOPATH' + is used. The value of `INFOPATH' is a colon separated list of + directory names. If you do not supply `INFOPATH' or + `--directory-path' a default path is used. + + `--file FILENAME' + `-f FILENAME' + Specifies a particular info file to visit. Instead of visiting + the file `dir', Info will start with `(FILENAME)Top' as the first + file and node. + + `--node NODENAME' + `-n NODENAME' + Specifies a particular node to visit in the initial file loaded. + This is especially useful in conjunction with `--file'(1). You + may specify `--node' multiple times; for an interactive Info, each + NODENAME is visited in its own window, for a non-interactive Info + (such as when `--output' is given) each NODENAME is processed + sequentially. + + `--output FILENAME' + `-o FILENAME' + Specify FILENAME as the name of a file to output to. Each node + that Info visits will be output to FILENAME instead of + interactively viewed. A value of `-' for FILENAME specifies the + standard output. + + `--subnodes' + This option only has meaning when given in conjunction with + `--output'. It means to recursively output the nodes appearing in + the menus of each node being output. Menu items which resolve to + external info files are not output, and neither are menu items + which are members of an index. Each node is only output once. + + `--help' + `-h' + Produces a relatively brief description of the available Info + options. + + `--version' + Prints the version information of Info and exits. + + `MENU-ITEM' + Remaining arguments to Info are treated as the names of menu + items. The first argument would be a menu item in the initial + node visited, while the second argument would be a menu item in + the first argument's node. You can easily move to the node of + your choice by specifying the menu names which describe the path + to that node. For example, + + info emacs buffers + + first selects the menu item `Emacs' in the node `(dir)Top', and + then selects the menu item `Buffers' in the node `(emacs)Top'. + + ---------- Footnotes ---------- + + (1) Of course, you can specify both the file and node in a `--node' + command; but don't forget to escape the open and close parentheses from + the shell as in: `info --node '(emacs)Buffers'' + +  + File: info, Node: Cursor Commands, Next: Scrolling Commands, Prev: Options, Up: Using Stand-alone Info + + Moving the Cursor + ================= + + Many people find that reading screens of text page by page is made + easier when one is able to indicate particular pieces of text with some + kind of pointing device. Since this is the case, GNU Info (both the + Emacs and standalone versions) have several commands which allow you to + move the cursor about the screen. The notation used in this manual to + describe keystrokes is identical to the notation used within the Emacs + manual, and the GNU Readline manual. *Note Character Conventions: + (emacs)Characters, if you are unfamilar with the notation. + + The following table lists the basic cursor movement commands in Info. + Each entry consists of the key sequence you should type to execute the + cursor movement, the `M-x'(1) command name (displayed in parentheses), + and a short description of what the command does. All of the cursor + motion commands can take an "numeric" argument (*note + `universal-argument': Miscellaneous Commands.), to find out how to + supply them. With a numeric argument, the motion commands are simply + executed that many times; for example, a numeric argument of 4 given to + `next-line' causes the cursor to move down 4 lines. With a negative + numeric argument, the motion is reversed; an argument of -4 given to + the `next-line' command would cause the cursor to move *up* 4 lines. + + `C-n' (`next-line') + Moves the cursor down to the next line. + + `C-p' (`prev-line') + Move the cursor up to the previous line. + + `C-a' (`beginning-of-line') + Move the cursor to the start of the current line. + + `C-e' (`end-of-line') + Moves the cursor to the end of the current line. + + `C-f' (`forward-char') + Move the cursor forward a character. + + `C-b' (`backward-char') + Move the cursor backward a character. + + `M-f' (`forward-word') + Moves the cursor forward a word. + + `M-b' (`backward-word') + Moves the cursor backward a word. + + `M-<' (`beginning-of-node') + `b' + Moves the cursor to the start of the current node. + + `M->' (`end-of-node') + Moves the cursor to the end of the current node. + + `M-r' (`move-to-window-line') + Moves the cursor to a specific line of the window. Without a + numeric argument, `M-r' moves the cursor to the start of the line + in the center of the window. With a numeric argument of N, `M-r' + moves the cursor to the start of the Nth line in the window. + + ---------- Footnotes ---------- + + (1) `M-x' is also a command; it invokes `execute-extended-command'. + *Note Executing an extended command: (emacs)M-x, for more detailed + information. + +  + File: info, Node: Scrolling Commands, Next: Node Commands, Prev: Cursor Commands, Up: Using Stand-alone Info + + Moving Text Within a Window + =========================== + + Sometimes you are looking at a screenful of text, and only part of the + current paragraph you are reading is visible on the screen. The + commands detailed in this section are used to shift which part of the + current node is visible on the screen. + + `SPC' (`scroll-forward') + `C-v' + Shift the text in this window up. That is, show more of the node + which is currently below the bottom of the window. With a numeric + argument, show that many more lines at the bottom of the window; a + numeric argument of 4 would shift all of the text in the window up + 4 lines (discarding the top 4 lines), and show you four new lines + at the bottom of the window. Without a numeric argument, SPC + takes the bottom two lines of the window and places them at the + top of the window, redisplaying almost a completely new screenful + of lines. + + `DEL' (`scroll-backward') + `M-v' + Shift the text in this window down. The inverse of + `scroll-forward'. + + The `scroll-forward' and `scroll-backward' commands can also move + forward and backward through the node structure of the file. If you + press SPC while viewing the end of a node, or DEL while viewing the + beginning of a node, what happens is controlled by the variable + `scroll-behaviour'. *Note `scroll-behaviour': Variables, for more + information. + + `C-l' (`redraw-display') + Redraw the display from scratch, or shift the line containing the + cursor to a specified location. With no numeric argument, `C-l' + clears the screen, and then redraws its entire contents. Given a + numeric argument of N, the line containing the cursor is shifted + so that it is on the Nth line of the window. + + `C-x w' (`toggle-wrap') + Toggles the state of line wrapping in the current window. + Normally, lines which are longer than the screen width "wrap", + i.e., they are continued on the next line. Lines which wrap have + a `\' appearing in the rightmost column of the screen. You can + cause such lines to be terminated at the rightmost column by + changing the state of line wrapping in the window with `C-x w'. + When a line which needs more space than one screen width to + display is displayed, a `$' appears in the rightmost column of the + screen, and the remainder of the line is invisible. + +  + File: info, Node: Node Commands, Next: Searching Commands, Prev: Scrolling Commands, Up: Using Stand-alone Info + + Selecting a New Node + ==================== + + This section details the numerous Info commands which select a new + node to view in the current window. + + The most basic node commands are `n', `p', `u', and `l'. + + When you are viewing a node, the top line of the node contains some + Info "pointers" which describe where the next, previous, and up nodes + are. Info uses this line to move about the node structure of the file + when you use the following commands: + + `n' (`next-node') + Selects the `Next' node. + + `p' (`prev-node') + Selects the `Prev' node. + + `u' (`up-node') + Selects the `Up' node. + + You can easily select a node that you have already viewed in this + window by using the `l' command - this name stands for "last", and + actually moves through the list of already visited nodes for this + window. `l' with a negative numeric argument moves forward through the + history of nodes for this window, so you can quickly step between two + adjacent (in viewing history) nodes. + + `l' (`history-node') + Selects the most recently selected node in this window. + + Two additional commands make it easy to select the most commonly + selected nodes; they are `t' and `d'. + + `t' (`top-node') + Selects the node `Top' in the current info file. + + `d' (`dir-node') + Selects the directory node (i.e., the node `(dir)'). + + Here are some other commands which immediately result in the selection + of a different node in the current window: + + `<' (`first-node') + Selects the first node which appears in this file. This node is + most often `Top', but it doesn't have to be. + + `>' (`last-node') + Selects the last node which appears in this file. + + `]' (`global-next-node') + Moves forward or down through node structure. If the node that + you are currently viewing has a `Next' pointer, that node is + selected. Otherwise, if this node has a menu, the first menu item + is selected. If there is no `Next' and no menu, the same process + is tried with the `Up' node of this node. + + `[' (`global-prev-node') + Moves backward or up through node structure. If the node that you + are currently viewing has a `Prev' pointer, that node is selected. + Otherwise, if the node has an `Up' pointer, that node is selected, + and if it has a menu, the last item in the menu is selected. + + You can get the same behaviour as `global-next-node' and + `global-prev-node' while simply scrolling through the file with SPC and + DEL; *Note `scroll-behaviour': Variables, for more information. + + `g' (`goto-node') + Reads the name of a node and selects it. No completion is done + while reading the node name, since the desired node may reside in + a separate file. The node must be typed exactly as it appears in + the info file. A file name may be included as with any node + specification, for example + + `g(emacs)Buffers' + + finds the node `Buffers' in the info file `emacs'. + + `C-x k' (`kill-node') + Kills a node. The node name is prompted for in the echo area, + with a default of the current node. "Killing" a node means that + Info tries hard to forget about it, removing it from the list of + history nodes kept for the window where that node is found. + Another node is selected in the window which contained the killed + node. + + `C-x C-f' (`view-file') + Reads the name of a file and selects the entire file. The command + `C-x C-f FILENAME' + is equivalent to typing + `g(FILENAME)*' + + `C-x C-b' (`list-visited-nodes') + Makes a window containing a menu of all of the currently visited + nodes. This window becomes the selected window, and you may use + the standard Info commands within it. + + `C-x b' (`select-visited-node') + Selects a node which has been previously visited in a visible + window. This is similar to `C-x C-b' followed by `m', but no + window is created. + +  + File: info, Node: Searching Commands, Next: Xref Commands, Prev: Node Commands, Up: Using Stand-alone Info + + Searching an Info File + ====================== + + GNU Info allows you to search for a sequence of characters throughout + an entire info file, search through the indices of an info file, or find + areas within an info file which discuss a particular topic. + + `s' (`search') + Reads a string in the echo area and searches for it. + + `C-s' (`isearch-forward') + Interactively searches forward through the info file for a string + as you type it. + + `C-r' (`isearch-backward') + Interactively searches backward through the info file for a string + as you type it. + + `i' (`index-search') + Looks up a string in the indices for this info file, and selects a + node where the found index entry points to. + + `,' (`next-index-match') + Moves to the node containing the next matching index item from the + last `i' command. + + The most basic searching command is `s' (`search'). The `s' command + prompts you for a string in the echo area, and then searches the + remainder of the info file for an ocurrence of that string. If the + string is found, the node containing it is selected, and the cursor is + left positioned at the start of the found string. Subsequent `s' + commands show you the default search string within `[' and `]'; + pressing RET instead of typing a new string will use the default search + string. + + "Incremental searching" is similar to basic searching, but the string + is looked up while you are typing it, instead of waiting until the + entire search string has been specified. + +  + File: info, Node: Xref Commands, Next: Window Commands, Prev: Searching Commands, Up: Using Stand-alone Info + + Selecting Cross References + ========================== + + We have already discussed the `Next', `Prev', and `Up' pointers which + appear at the top of a node. In addition to these pointers, a node may + contain other pointers which refer you to a different node, perhaps in + another info file. Such pointers are called "cross references", or + "xrefs" for short. + + * Menu: + + * Parts of an Xref:: What a cross reference is made of. + * Selecting Xrefs:: Commands for selecting menu or note items. + diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/info/info-2 emacs-19.26/info/info-2 *** emacs-19.25/info/info-2 --- emacs-19.26/info/info-2 Mon Jun 13 07:50:52 1994 *************** *** 0 **** --- 1,586 ---- + This is Info file ../info/info, produced by Makeinfo-1.54 from the + input file info.texi. + + This file describes how to use Info, the on-line, menu-driven GNU + documentation system. + + Copyright (C) 1989, 1992 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this + manual provided the copyright notice and this permission notice are + preserved on all copies. + + Permission is granted to copy and distribute modified versions of + this manual under the conditions for verbatim copying, provided that + the entire resulting derived work is distributed under the terms of a + permission notice identical to this one. + + Permission is granted to copy and distribute translations of this + manual into another language, under the above conditions for modified + versions, except that this permission notice may be stated in a + translation approved by the Free Software Foundation. + +  + File: info, Node: Parts of an Xref, Next: Selecting Xrefs, Up: Xref Commands + + Parts of an Xref + ---------------- + + Cross references have two major parts: the first part is called the + "label"; it is the name that you can use to refer to the cross + reference, and the second is the "target"; it is the full name of the + node that the cross reference points to. + + The target is separated from the label by a colon `:'; first the + label appears, and then the target. For example, in the sample menu + cross reference below, the single colon separates the label from the + target. + + * Foo Label: Foo Target. More information about Foo. + + Note the `.' which ends the name of the target. The `.' is not part + of the target; it serves only to let Info know where the target name + ends. + + A shorthand way of specifying references allows two adjacent colons to + stand for a target name which is the same as the label name: + + * Foo Commands:: Commands pertaining to Foo. + + In the above example, the name of the target is the same as the name + of the label, in this case `Foo Commands'. + + You will normally see two types of cross references while viewing + nodes: "menu" references, and "note" references. Menu references + appear within a node's menu; they begin with a `*' at the beginning of + a line, and continue with a label, a target, and a comment which + describes what the contents of the node pointed to contains. + + Note references appear within the body of the node text; they begin + with `*Note', and continue with a label and a target. + + Like `Next', `Prev' and `Up' pointers, cross references can point to + any valid node. They are used to refer you to a place where more + detailed information can be found on a particular subject. Here is a + cross reference which points to a node within the Texinfo + documentation: *Note Writing an Xref: (texinfo)xref, for more + information on creating your own texinfo cross references. + +  + File: info, Node: Selecting Xrefs, Prev: Parts of an Xref, Up: Xref Commands + + Selecting Xrefs + --------------- + + The following table lists the Info commands which operate on menu + items. + + `1' (`menu-digit') + `2' ... `9' + Within an Info window, pressing a single digit, (such as `1'), + selects that menu item, and places its node in the current window. + For convenience, there is one exception; pressing `0' selects the + *last* item in the node's menu. + + `0' (`last-menu-item') + Select the last item in the current node's menu. + + `m' (`menu-item') + Reads the name of a menu item in the echo area and selects its + node. Completion is available while reading the menu label. + + `M-x find-menu' + Moves the cursor to the start of this node's menu. + + This table lists the Info commands which operate on note cross + references. + + `f' (`xref-item') + `r' + Reads the name of a note cross reference in the echo area and + selects its node. Completion is available while reading the cross + reference label. + + Finally, the next few commands operate on menu or note references + alike: + + `TAB' (`move-to-next-xref') + Moves the cursor to the start of the next nearest menu item or note + reference in this node. You can then use RET + (`select-reference-this-line' to select the menu or note reference. + + `M-TAB' (`move-to-prev-xref') + Moves the cursor the start of the nearest previous menu item or + note reference in this node. + + `RET' (`select-reference-this-line') + Selects the menu item or note reference appearing on this line. + +  + File: info, Node: Window Commands, Next: Printing Nodes, Prev: Xref Commands, Up: Using Stand-alone Info + + Manipulating Multiple Windows + ============================= + + A "window" is a place to show the text of a node. Windows have a + view area where the text of the node is displayed, and an associated + "mode line", which briefly describes the node being viewed. + + GNU Info supports multiple windows appearing in a single screen; each + window is separated from the next by its modeline. At any time, there + is only one "active" window, that is, the window in which the cursor + appears. There are commands available for creating windows, changing + the size of windows, selecting which window is active, and for deleting + windows. + + * Menu: + + * The Mode Line:: What appears in the mode line? + * Basic Windows:: Manipulating windows in Info. + * The Echo Area:: Used for displaying errors and reading input. + +  + File: info, Node: The Mode Line, Next: Basic Windows, Up: Window Commands + + The Mode Line + ------------- + + A "mode line" is a line of inverse video which appears at the bottom + of an info window. It describes the contents of the window just above + it; this information includes the name of the file and node appearing in + that window, the number of screen lines it takes to display the node, + and the percentage of text that is above the top of the window. It can + also tell you if the indirect tags table for this info file needs to be + updated, and whether or not the info file was compressed when stored on + disk. + + Here is a sample mode line for a window containing an uncompressed + file named `dir', showing the node `Top'. + + -----Info: (dir)Top, 40 lines --Top--------------------------------------- + ^^ ^ ^^^ ^^ + (file)Node #lines where + + When a node comes from a file which is compressed on disk, this is + indicated in the mode line with two small `z''s. In addition, if the + info file containing the node has been split into subfiles, the name of + the subfile containing the node appears in the modeline as well: + + --zz-Info: (emacs)Top, 291 lines --Top-- Subfile: emacs-1.Z--------------- + + When Info makes a node internally, such that there is no corresponding + info file on disk, the name of the node is surrounded by asterisks + (`*'). The name itself tells you what the contents of the window are; + the sample mode line below shows an internally constructed node showing + possible completions: + + -----Info: *Completions*, 7 lines --All----------------------------------- + +  + File: info, Node: Basic Windows, Next: The Echo Area, Prev: The Mode Line, Up: Window Commands + + Window Commands + --------------- + + It can be convenient to view more than one node at a time. To allow + this, Info can display more than one "window". Each window has its own + mode line (*note The Mode Line::.) and history of nodes viewed in that + window (*note `history-node': Node Commands.). + + `C-x o' (`next-window') + Selects the next window on the screen. Note that the echo area + can only be selected if it is already in use, and you have left it + temporarily. Normally, `C-x o' simply moves the cursor into the + next window on the screen, or if you are already within the last + window, into the first window on the screen. Given a numeric + argument, `C-x o' moves over that many windows. A negative + argument causes `C-x o' to select the previous window on the + screen. + + `M-x prev-window' + Selects the previous window on the screen. This is identical to + `C-x o' with a negative argument. + + `C-x 2' (`split-window') + Splits the current window into two windows, both showing the same + node. Each window is one half the size of the original window, + and the cursor remains in the original window. The variable + `automatic-tiling' can cause all of the windows on the screen to + be resized for you automatically, please *note automatic-tiling: + Variables. for more information. + + `C-x 0' (`delete-window') + Deletes the current window from the screen. If you have made too + many windows and your screen appears cluttered, this is the way to + get rid of some of them. + + `C-x 1' (`keep-one-window') + Deletes all of the windows excepting the current one. + + `ESC C-v' (`scroll-other-window') + Scrolls the other window, in the same fashion that `C-v' might + scroll the current window. Given a negative argument, the "other" + window is scrolled backward. + + `C-x ^' (`grow-window') + Grows (or shrinks) the current window. Given a numeric argument, + grows the current window that many lines; with a negative numeric + argument, the window is shrunk instead. + + `C-x t' (`tile-windows') + Divides the available screen space among all of the visible + windows. Each window is given an equal portion of the screen in + which to display its contents. The variable `automatic-tiling' + can cause `tile-windows' to be called when a window is created or + deleted. *Note `automatic-tiling': Variables. + +  + File: info, Node: The Echo Area, Prev: Basic Windows, Up: Window Commands + + The Echo Area + ------------- + + The "echo area" is a one line window which appears at the bottom of + the screen. It is used to display informative or error messages, and to + read lines of input from you when that is necessary. Almost all of the + commands available in the echo area are identical to their Emacs + counterparts, so please refer to that documentation for greater depth of + discussion on the concepts of editing a line of text. The following + table briefly lists the commands that are available while input is being + read in the echo area: + + `C-f' (`echo-area-forward') + Moves forward a character. + + `C-b' (`echo-area-backward') + Moves backward a character. + + `C-a' (`echo-area-beg-of-line') + Moves to the start of the input line. + + `C-e' (`echo-area-end-of-line') + Moves to the end of the input line. + + `M-f' (`echo-area-forward-word') + Moves forward a word. + + `M-b' (`echo-area-backward-word') + Moves backward a word. + + `C-d' (`echo-area-delete') + Deletes the character under the cursor. + + `DEL' (`echo-area-rubout') + Deletes the character behind the cursor. + + `C-g' (`echo-area-abort') + Cancels or quits the current operation. If completion is being + read, `C-g' discards the text of the input line which does not + match any completion. If the input line is empty, `C-g' aborts + the calling function. + + `RET' (`echo-area-newline') + Accepts (or forces completion of) the current input line. + + `C-q' (`echo-area-quoted-insert') + Inserts the next character verbatim. This is how you can insert + control characters into a search string, for example. + + PRINTING CHARACTER (`echo-area-insert') + Inserts the character. + + `M-TAB' (`echo-area-tab-insert') + Inserts a TAB character. + + `C-t' (`echo-area-transpose-chars') + Transposes the characters at the cursor. + + The next group of commands deal with "killing", and "yanking" text. + For an in depth discussion of killing and yanking, *note Killing and + Deleting: (emacs)Killing. + + `M-d' (`echo-area-kill-word') + Kills the word following the cursor. + + `M-DEL' (`echo-area-backward-kill-word') + Kills the word preceding the cursor. + + `C-k' (`echo-area-kill-line') + Kills the text from the cursor to the end of the line. + + `C-x DEL' (`echo-area-backward-kill-line') + Kills the text from the cursor to the beginning of the line. + + `C-y' (`echo-area-yank') + Yanks back the contents of the last kill. + + `M-y' (`echo-area-yank-pop') + Yanks back a previous kill, removing the last yanked text first. + + Sometimes when reading input in the echo area, the command that needed + input will only accept one of a list of several choices. The choices + represent the "possible completions", and you must respond with one of + them. Since there are a limited number of responses you can make, Info + allows you to abbreviate what you type, only typing as much of the + response as is necessary to uniquely identify it. In addition, you can + request Info to fill in as much of the response as is possible; this is + called "completion". + + The following commands are available when completing in the echo area: + + `TAB' (`echo-area-complete') + `SPC' + Inserts as much of a completion as is possible. + + `?' (`echo-area-possible-completions') + Displays a window containing a list of the possible completions of + what you have typed so far. For example, if the available choices + are: + bar + foliate + food + forget + and you have typed an `f', followed by `?', the possible + completions would contain: + foliate + food + forget + i.e., all of the choices which begin with `f'. Pressing SPC or + TAB would result in `fo' appearing in the echo area, since all of + the choices which begin with `f' continue with `o'. Now, typing + `l' followed by `TAB' results in `foliate' appearing in the echo + area, since that is the only choice which begins with `fol'. + + `ESC C-v' (`echo-area-scroll-completions-window') + Scrolls the completions window, if that is visible, or the "other" + window if not. + +  + File: info, Node: Printing Nodes, Next: Miscellaneous Commands, Prev: Window Commands, Up: Using Stand-alone Info + + Printing Out Nodes + ================== + + You may wish to print out the contents of a node as a quick reference + document for later use. Info provides you with a command for doing + this. In general, we recommend that you use TeX to format the document + and print sections of it, by running `tex' on the texinfo source file. + + `M-x print-node' + Pipes the contents of the current node through the command in the + environment variable `INFO_PRINT_COMMAND'. If the variable doesn't + exist, the node is simply piped to `lpr'. + +  + File: info, Node: Miscellaneous Commands, Next: Variables, Prev: Printing Nodes, Up: Using Stand-alone Info + + Miscellaneous Commands + ====================== + + GNU Info contains several commands which self-document GNU Info: + + `M-x describe-command' + Reads the name of an Info command in the echo area and then + displays a brief description of what that command does. + + `M-x describe-key' + Reads a key sequence in the echo area, and then displays the name + and documentation of the Info command that the key sequence + invokes. + + `M-x describe-variable' + Reads the name of a variable in the echo area and then displays a + brief description of what the variable affects. + + `M-x where-is' + Reads the name of an Info command in the echo area, and then + displays a key sequence which can be typed in order to invoke that + command. + + `C-h' (`get-help-window') + `?' + Creates (or moves into) the window displaying `*Help*', and places + a node containing a quick reference card into it. This window + displays the most concise information about GNU Info available. + + `h' (`get-info-help-node') + Tries hard to visit the node `(info)Help'. The info file + `info.texi' distributed with GNU Info contains this node. Of + course, the file must first be processed with `makeinfo', and then + placed into the location of your info directory. + + Here are the commands for creating a numeric argument: + + `C-u' (`universal-argument') + Starts (or multiplies by 4) the current numeric argument. `C-u' is + a good way to give a small numeric argument to cursor movement or + scrolling commands; `C-u C-v' scrolls the screen 4 lines, while + `C-u C-u C-n' moves the cursor down 16 lines. + + `M-1' (`add-digit-to-numeric-arg') + `M-2' ... `M-9' + Adds the digit value of the invoking key to the current numeric + argument. Once Info is reading a numeric argument, you may just + type the digits of the argument, without the Meta prefix. For + example, you might give `C-l' a numeric argument of 32 by typing: + + `C-u 3 2 C-l' + or + `M-3 2 C-l' + + `C-g' is used to abort the reading of a multi-character key sequence, + to cancel lengthy operations (such as multi-file searches) and to + cancel reading input in the echo area. + + `C-g' (`abort-key') + Cancels current operation. + + The `q' command of Info simply quits running Info. + + `q' (`quit') + Exits GNU Info. + + If the operating system tells GNU Info that the screen is 60 lines + tall, and it is actually only 40 lines tall, here is a way to tell Info + that the operating system is correct. + + `M-x set-screen-height' + Reads a height value in the echo area and sets the height of the + displayed screen to that value. + + Finally, Info provides a convenient way to display footnotes which + might be associated with the current node that you are viewing: + + `ESC C-f' (`show-footnotes') + Shows the footnotes (if any) associated with the current node in + another window. You can have Info automatically display the + footnotes associated with a node when the node is selected by + setting the variable `automatic-footnotes'. *Note + `automatic-footnotes': Variables. + +  + File: info, Node: Variables, Prev: Miscellaneous Commands, Up: Using Stand-alone Info + + Manipulating Variables + ====================== + + GNU Info contains several "variables" whose values are looked at by + various Info commands. You can change the values of these variables, + and thus change the behaviour of Info to more closely match your + environment and info file reading manner. + + `M-x set-variable' + Reads the name of a variable, and the value for it, in the echo + area and then sets the variable to that value. Completion is + available when reading the variable name; often, completion is + available when reading the value to give to the variable, but that + depends on the variable itself. If a variable does *not* supply + multiple choices to complete over, it expects a numeric value. + + `M-x describe-variable' + Reads the name of a variable in the echo area and then displays a + brief description of what the variable affects. + + Here is a list of the variables that you can set in Info. + + `automatic-footnotes' + When set to `On', footnotes appear and disappear automatically. + This variable is `On' by default. When a node is selected, a + window containing the footnotes which appear in that node is + created, and the footnotes are displayed within the new window. + The window that Info creates to contain the footnotes is called + `*Footnotes*'. If a node is selected which contains no footnotes, + and a `*Footnotes*' window is on the screen, the `*Footnotes*' + window is deleted. Footnote windows created in this fashion are + not automatically tiled so that they can use as little of the + display as is possible. + + `automatic-tiling' + When set to `On', creating or deleting a window resizes other + windows. This variable is `Off' by default. Normally, typing + `C-x 2' divides the current window into two equal parts. When + `automatic-tiling' is set to `On', all of the windows are resized + automatically, keeping an equal number of lines visible in each + window. There are exceptions to the automatic tiling; + specifically, the windows `*Completions*' and `*Footnotes*' are + *not* resized through automatic tiling; they remain their original + size. + + `visible-bell' + When set to `On', GNU Info attempts to flash the screen instead of + ringing the bell. This variable is `Off' by default. Of course, + Info can only flash the screen if the terminal allows it; in the + case that the terminal does not allow it, the setting of this + variable has no effect. However, you can make Info perform + quietly by setting the `errors-ring-bell' variable to `Off'. + + `errors-ring-bell' + When set to `On', errors cause the bell to ring. The default + setting of this variable is `On'. + + `gc-compressed-files' + When set to `On', Info garbage collects files which had to be + uncompressed. The default value of this variable is `Off'. + Whenever a node is visited in Info, the info file containing that + node is read into core, and Info reads information about the tags + and nodes contained in that file. Once the tags information is + read by Info, it is never forgotten. However, the actual text of + the nodes does not need to remain in core unless a particular info + window needs it. For non-compressed files, the text of the nodes + does not remain in core when it is no longer in use. But + de-compressing a file can be a time consuming operation, and so + Info tries hard not to do it twice. `gc-compressed-files' tells + Info it is okay to garbage collect the text of the nodes of a file + which was compressed on disk. + + `show-index-match' + When set to `On', the portion of the matched search string is + highlighted in the message which explains where the matched search + string was found. The default value of this variable is `On'. + When Info displays the location where an index match was found, + (*note `next-index-match': Searching Commands.), the portion of the + string that you had typed is highlighted by displaying it in the + inverse case from its surrounding characters. + + `scroll-behaviour' + Controls what happens when forward scrolling is requested at the + end of a node, or when backward scrolling is requested at the + beginning of a node. The default value for this variable is + `Continuous'. There are three possible values for this variable: + + `Continuous' + Tries to get the first item in this node's menu, or failing + that, the `Next' node, or failing that, the `Next' of the + `Up'. This behaviour is identical to using the `]' + (`global-next-node') and `[' (`global-prev-node') commands. + + `Next Only' + Only tries to get the `Next' node. + + `Page Only' + Simply gives up, changing nothing. If `scroll-behaviour' is + `Page Only', no scrolling command can change the node that is + being viewed. + + `scroll-step' + The number of lines to scroll when the cursor moves out of the + window. Scrolling happens automatically if the cursor has moved + out of the visible portion of the node text when it is time to + display. Usually the scrolling is done so as to put the cursor on + the center line of the current window. However, if the variable + `scroll-step' has a nonzero value, Info attempts to scroll the + node text by that many lines; if that is enough to bring the + cursor back into the window, that is what is done. The default + value of this variable is 0, thus placing the cursor (and the text + it is attached to) in the center of the window. Setting this + variable to 1 causes a kind of "smooth scrolling" which some + people prefer. + + `ISO-Latin' + When set to `On', Info accepts and displays ISO Latin-1 characters. + By default, Info assumes an ASCII character set. `ISO-Latin' tells + Info that it is running in an environment where the European + standard character set is in use, and allows you to input such + characters to Info, as well as display them. + + diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/ChangeLog emacs-19.26/lib-src/ChangeLog *** emacs-19.25/lib-src/ChangeLog Mon May 30 07:30:35 1994 --- emacs-19.26/lib-src/ChangeLog Wed Sep 7 03:56:21 1994 *************** *** 1,2 **** --- 1,92 ---- + Wed Sep 7 03:53:50 1994 Richard Stallman + + * Version 19.26 released. + + Mon Aug 15 15:49:19 1994 Paul Eggert + + * rcs2log: Add support for CVS. + Work with `rlog's that output ISO 8601 dates. + + Tue Aug 9 15:21:01 1994 Lawrence R. Dodd + + * rcs2log: Use <> to delimit email address. + + Sat Aug 6 18:12:14 1994 Richard Stallman + + * emacsserver.c [SYSV_IPC] (main): Make a separate process + so we can listen for multiple requests. + + Thu Aug 4 19:15:25 1994 Richard Stallman + + * movemail.c: Include config.h first thing. + + Mon Aug 1 03:43:20 1994 Richard Stallman + + * emacsserver.c (main): Add casts to avoid warnings. + + Fri Jul 29 16:32:15 1994 Richard Stallman + + * Makefile.in.in (${archlibdir}): Compare the proper dir + before installing the scripts. + + Wed Jul 27 13:58:25 1994 Richard Stallman + + * emacsclient.c (main): New local var progname saves argv[0]. + + Tue Jul 26 11:34:15 1994 Richard Stallman + + * emacsclient.c (main): Don't actually modify argv[0]. + Modify a copy instead. + + Mon Jul 25 19:21:02 1994 Richard Stallman + + * profile.c (reset_watch, get_time): Use EMACS_GET_TIME. + (tzp): Var deleted. + + * Makefile.in.in: Add #undef alloca. + + Tue Jul 12 18:28:18 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * timer.c (xmalloc): New function. + + Mon Jul 11 21:15:55 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile.in.in (ALLOCA_CFLAGS): New variable. + (alloca.o): New target. + + Tue Jul 8 15:57:28 1994 Dave Love (d.love@dl.ac.uk) + + * etags.c (takeprec): recognise `character*(*) function' + + Fri Jul 8 12:19:17 1994 Francesco Potorti` (pot@cnuce.cnr.it) + + * etags.c (main): Don't barf on obsolete -t and -T switches. + (main): Print an explicative message when a switch is not known. + + Thu Jun 23 15:25:21 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * hexl.c: Don't declare exit or perror. + + * emacsserver.c (main): Don't declare geteuid. + Don't declare getenv if convex. + + Tue Jun 7 03:30:14 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * Makefile.in.in (test-distrib): Use ALL_CFLAGS. + + Fri Jun 3 13:32:04 1994 Francesco Potorti` (pot@fly.cnuce.cnr.it) + + * etags.c (absolute_filename): Remove infinite loop bug when + accessing files in directories whose name begins with a dot. + + Fri Jun 3 13:32:04 1994 Francesco Potorti` (pot@fly.cnuce.cnr.it) + + * etags.c (etags_getcwd): Delete the trailing newline from cwd. + + Wed Jun 1 20:39:18 1994 Morten Welinder (terra@diku.dk) + + * yow.c (rootrelativepath) [MSDOS]: Define, expanding to dynamic + location of data directory. + Mon May 30 04:33:36 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/Makefile.in.in emacs-19.26/lib-src/Makefile.in.in *** emacs-19.25/lib-src/Makefile.in.in Sat May 28 00:54:42 1994 --- emacs-19.26/lib-src/Makefile.in.in Fri Jul 29 16:32:10 1994 *************** *** 110,113 **** --- 110,119 ---- #include "../src/config.h" + /* We won't really call alloca; + don't let the file name alloca.c get messed up. */ + #ifdef alloca + #undef alloca + #endif + /* Some s/*.h files define this to request special libraries. */ #ifndef LIBS_SYSTEM *************** *** 153,156 **** --- 159,164 ---- CPP_CFLAGS = C_SWITCH_SYSTEM C_SWITCH_MACHINE -Demacs -DHAVE_CONFIG_H \ -I. -I../src -I${srcdir} -I${srcdir}/../src ${CPPFLAGS} ${CFLAGS} + ALLOCA_CFLAGS = C_SWITCH_SYSTEM C_SWITCH_MACHINE -DHAVE_CONFIG_H \ + -I. -I../src -I${srcdir} -I${srcdir}/../src ${CPPFLAGS} ${CFLAGS} /* This is the default compilation command. *************** *** 192,195 **** --- 200,206 ---- (cd ..; $(INSTALL_PROGRAM) lib-src/$$file ${archlibdir}/$$file) ; \ done ; \ + fi + if [ `(cd ${archlibdir} && /bin/pwd)` \ + != `(cd ${srcdir} && /bin/pwd)` ]; then \ for file in ${SCRIPTS}; do \ (cd ..; $(INSTALL_PROGRAM) ${srcdir}/$$file ${archlibdir}/$$file); \ *************** *** 249,253 **** clobbered too. */ test-distrib: ${srcdir}/test-distrib.c ! $(CC) -o test-distrib ${srcdir}/test-distrib.c ./test-distrib ${srcdir}/testfile --- 260,264 ---- clobbered too. */ test-distrib: ${srcdir}/test-distrib.c ! $(CC) ${ALL_CFLAGS} -o test-distrib ${srcdir}/test-distrib.c ./test-distrib ${srcdir}/testfile *************** *** 258,261 **** --- 269,274 ---- getopt1.o: ${srcdir}/getopt1.c ${srcdir}/getopt.h ${CC} -c ${CPP_CFLAGS} ${srcdir}/getopt1.c + alloca.o: ${srcdir}/alloca.c + ${CC} -c ${ALLOCA_CFLAGS} ${srcdir}/alloca.c etags: ${srcdir}/etags.c $(GETOPTDEPS) ../src/config.h diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/alloca.c emacs-19.26/lib-src/alloca.c *** emacs-19.25/lib-src/alloca.c Mon May 9 22:08:48 1994 --- emacs-19.26/lib-src/alloca.c Thu Jun 2 13:44:39 1994 *************** *** 30,33 **** --- 30,37 ---- #endif + #ifdef emacs + #include "blockinput.h" + #endif + /* If compiling with GCC 2, this file's not needed. */ #if !defined (__GNUC__) || __GNUC__ < 2 *************** *** 177,180 **** --- 181,188 ---- register header *hp; /* Traverses linked list. */ + #ifdef emacs + BLOCK_INPUT; + #endif + for (hp = last_alloca_header; hp != NULL;) if ((STACK_DIR > 0 && hp->h.deep > depth) *************** *** 191,194 **** --- 199,206 ---- last_alloca_header = hp; /* -> last valid storage. */ + + #ifdef emacs + UNBLOCK_INPUT; + #endif } diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/emacsclient.c emacs-19.26/lib-src/emacsclient.c *** emacs-19.25/lib-src/emacsclient.c Tue Apr 12 01:17:55 1994 --- emacs-19.26/lib-src/emacsclient.c Wed Jul 27 13:57:35 1994 *************** *** 197,200 **** --- 197,201 ---- char *cwd; char *temp; + char *progname = argv[0]; if (argc < 2) *************** *** 252,258 **** { int need_cwd = 0; ! if (*argv[0] == '+') { ! char *p = argv[0] + 1; while (*p >= '0' && *p <= '9') p++; if (*p != 0) --- 253,260 ---- { int need_cwd = 0; ! char *modified_arg = argv[0]; ! if (*modified_arg == '+') { ! char *p = modified_arg + 1; while (*p >= '0' && *p <= '9') p++; if (*p != 0) *************** *** 259,263 **** need_cwd = 1; } ! else if (*argv[0] != '/') need_cwd = 1; --- 261,265 ---- need_cwd = 1; } ! else if (*modified_arg != '/') need_cwd = 1; *************** *** 264,268 **** if (need_cwd) used += strlen (cwd); ! used += strlen (argv[0]) + 1; while (used + 2 > size_allocated) { --- 266,270 ---- if (need_cwd) used += strlen (cwd); ! used += strlen (modified_arg) + 1; while (used + 2 > size_allocated) { *************** *** 276,280 **** strcat (msgp->mtext, cwd); ! strcat (msgp->mtext, argv[0]); strcat (msgp->mtext, " "); argv++; argc--; --- 278,282 ---- strcat (msgp->mtext, cwd); ! strcat (msgp->mtext, modified_arg); strcat (msgp->mtext, " "); argv++; argc--; *************** *** 291,295 **** if (msgsnd (s, msgp, strlen (msgp->mtext)+1, 0) < 0) { ! fprintf (stderr, "%s: ", argv[0]); perror ("msgsnd"); exit (1); --- 293,297 ---- if (msgsnd (s, msgp, strlen (msgp->mtext)+1, 0) < 0) { ! fprintf (stderr, "%s: ", progname); perror ("msgsnd"); exit (1); diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/emacsserver.c emacs-19.26/lib-src/emacsserver.c *** emacs-19.25/lib-src/emacsserver.c Tue Feb 8 18:56:44 1994 --- emacs-19.26/lib-src/emacsserver.c Sat Aug 6 18:27:17 1994 *************** *** 70,75 **** int openfiles_size; ! int geteuid (); char *getenv (); openfiles_size = 20; --- 70,76 ---- int openfiles_size; ! #ifndef convex char *getenv (); + #endif openfiles_size = 20; *************** *** 130,134 **** { int rmask = (1 << s) + 1; ! if (select (s + 1, &rmask, 0, 0, 0) < 0) perror ("select"); if (rmask & (1 << s)) /* client sends list of filenames */ --- 131,135 ---- { int rmask = (1 << s) + 1; ! if (select (s + 1, (fd_set *)&rmask, 0, 0, 0) < 0) perror ("select"); if (rmask & (1 << s)) /* client sends list of filenames */ *************** *** 136,140 **** fromlen = sizeof (fromunix); fromunix.sun_family = AF_UNIX; ! infd = accept (s, (struct sockaddr *) &fromunix, &fromlen); /* open socket fd */ if (infd < 0) { --- 137,142 ---- fromlen = sizeof (fromunix); fromunix.sun_family = AF_UNIX; ! infd = accept (s, (struct sockaddr *) &fromunix, ! (size_t *) &fromlen); if (infd < 0) { *************** *** 244,248 **** main () { ! int s, infd, fromlen; key_t key; struct msgbuf * msgp = --- 246,250 ---- main () { ! int s, infd, fromlen, ioproc; key_t key; struct msgbuf * msgp = *************** *** 301,305 **** } ! /* This is executed in the child made by forking above. */ while (1) { --- 303,325 ---- } ! /* This is executed in the child made by forking above. ! Call it c1. Make another process, ioproc. */ ! ! ioproc = fork (); ! if (ioproc == 0) ! { ! /* In process ioproc, wait for text from Emacs, ! and send it to the process c1. ! This way, c1 only has to wait for one source of input. */ ! while (fgets (msgp->mtext, BUFSIZ, stdin)) ! { ! msgp->mtype = 1; ! msgsnd (s, msgp, strlen (msgp->mtext) + 1, 0); ! } ! exit (1); ! } ! ! /* In the process c1, ! listen for messages from clients and pass them to Emacs. */ while (1) { *************** *** 312,326 **** { msgctl (s, IPC_STAT, &msg_st); strncpy (string, msgp->mtext, fromlen); string[fromlen] = 0; /* make sure */ /* Newline is part of string.. */ ! printf ("Client: %d %s", s, string); fflush (stdout); - /* Now, wait for a wakeup */ - fgets (msgp->mtext, BUFSIZ, stdin); - msgp->mtext[strlen (msgp->mtext)-1] = 0; - /* strcpy (msgp->mtext, "done");*/ - msgp->mtype = msg_st.msg_lspid; - msgsnd (s, msgp, strlen (msgp->mtext)+1, 0); } } --- 332,359 ---- { msgctl (s, IPC_STAT, &msg_st); + + /* Distinguish whether the message came from a client, or from + ioproc. */ + if (msg_st.msg_lspid == ioproc) + { + char code[BUFSIZ]; + int inproc; + + /* Message from ioproc: tell a client we are done. */ + msgp->mtext[strlen (msgp->mtext)-1] = 0; + sscanf (msgp->mtext, "%s %d", code, &inproc); + msgp->mtype = inproc; + msgsnd (s, msgp, strlen (msgp->mtext) + 1, 0); + continue; + } + + /* This is a request from a client: copy to stdout + so that Emacs will get it. Include msg_lspid + so server.el can tell us where to send the reply. */ strncpy (string, msgp->mtext, fromlen); string[fromlen] = 0; /* make sure */ /* Newline is part of string.. */ ! printf ("Client: %d %s", msg_st.msg_lspid, string); fflush (stdout); } } diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/etags.c emacs-19.26/lib-src/etags.c *** emacs-19.25/lib-src/etags.c Tue May 17 21:16:07 1994 --- emacs-19.26/lib-src/etags.c Fri Jul 8 06:24:10 1994 *************** *** 453,458 **** if (tagfile) { ! fprintf (stderr, ! "%s: -%c flag may only be given once\n", progname, opt); goto usage; } --- 453,458 ---- if (tagfile) { ! fprintf(stderr, ! "%s: -%c flag may only be given once.\n", progname, opt); goto usage; } *************** *** 468,471 **** --- 468,478 ---- print_help (); break; + case 't': + typedefs++; + break; + case 'T': + typedefs++; + typedefs_and_cplusplus++; + break; #if (!CTAGS) *************** *** 482,492 **** searchar = '?'; break; - case 't': - typedefs++; - break; - case 'T': - typedefs++; - typedefs_and_cplusplus++; - break; case 'u': update++; --- 489,492 ---- *************** *** 505,508 **** --- 505,510 ---- default: + fprintf (stderr, + "%s: -%c flag not recognised.\n", progname, opt); goto usage; } *************** *** 2075,2078 **** --- 2077,2082 ---- while (isspace (*dbp)) dbp++; + if (tail ("(*)")) + return; if (!isdigit (*dbp)) { *************** *** 3170,3173 **** --- 3174,3178 ---- } while (buf[strlen (buf) - 1] != '\n'); + buf[strlen (buf) - 1] = '\0'; return buf; } *************** *** 3250,3253 **** --- 3255,3259 ---- } slashp = cp; + continue; } else if (slashp[2] == '/' || slashp[2] == '\0') *************** *** 3254,3263 **** { strcpy (slashp, slashp + 2); } } ! else ! { ! slashp = etags_strchr (slashp + 1, '/'); ! } } --- 3260,3268 ---- { strcpy (slashp, slashp + 2); + continue; } } ! ! slashp = etags_strchr (slashp + 1, '/'); } diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/getopt.c emacs-19.26/lib-src/getopt.c *** emacs-19.25/lib-src/getopt.c Mon May 9 22:11:02 1994 --- emacs-19.26/lib-src/getopt.c Mon Jul 11 23:56:25 1994 *************** *** 159,162 **** --- 159,165 ---- REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; + + /* Value of POSIXLY_CORRECT environment variable. */ + static char *posixly_correct; #ifdef __GNU_LIBRARY__ *************** *** 290,293 **** --- 293,298 ---- nextchar = NULL; + posixly_correct = getenv ("POSIXLY_CORRECT"); + /* Determine how to handle the ordering of options and nonoptions. */ *************** *** 302,306 **** ++optstring; } ! else if (getenv ("POSIXLY_CORRECT") != NULL) ordering = REQUIRE_ORDER; else --- 307,311 ---- ++optstring; } ! else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else *************** *** 606,611 **** if (opterr) { ! /* 1003.2 specifies the format of this message. */ ! fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c); } optopt = c; --- 611,619 ---- if (opterr) { ! if (posixly_correct) ! /* 1003.2 specifies the format of this message. */ ! fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c); ! else ! fprintf (stderr, "%s: invalid option -- %c\n", argv[0], c); } optopt = c; diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/hexl.c emacs-19.26/lib-src/hexl.c *** emacs-19.25/lib-src/hexl.c Fri Apr 29 15:34:30 1994 --- emacs-19.26/lib-src/hexl.c Thu Jun 23 15:27:31 1994 *************** *** 13,21 **** #define FALSE (0) - #ifndef MSDOS - /* Defined volatile by std.h in MsDos. */ - extern void exit (), perror (); - #endif - int base = DEFAULT_BASE, un_flag = FALSE, iso_flag = FALSE, endian = 1; int group_by = DEFAULT_GROUPING; --- 13,16 ---- diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/movemail.c emacs-19.26/lib-src/movemail.c *** emacs-19.25/lib-src/movemail.c Wed Apr 13 18:18:44 1994 --- emacs-19.26/lib-src/movemail.c Thu Aug 4 19:15:22 1994 *************** *** 49,52 **** --- 49,54 ---- */ + #define NO_SHORTNAMES /* Tell config not to load remap.h */ + #include <../src/config.h> #include #include *************** *** 53,58 **** #include #include - #define NO_SHORTNAMES /* Tell config not to load remap.h */ - #include <../src/config.h> #include <../src/syswait.h> --- 55,58 ---- diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/profile.c emacs-19.26/lib-src/profile.c *** emacs-19.25/lib-src/profile.c Mon Apr 11 21:29:02 1994 --- emacs-19.26/lib-src/profile.c Mon Jul 25 19:20:58 1994 *************** *** 35,50 **** static struct timeval TV1, TV2; - static struct timezone *tzp = (struct timezone *) NULL; /* no need timezone */ static int watch_not_started = 1; /* flag */ static char time_string[30]; - #ifndef HAVE_GETTIMEOFDAY - gettimeofday () - { - fprintf (stderr, "profile: this system does not support gettimeofday\n"); - exit (1); - } - #endif - /* Reset the stopwatch to zero. */ --- 35,41 ---- *************** *** 52,56 **** reset_watch () { ! gettimeofday (&TV1, tzp); watch_not_started = 0; } --- 43,47 ---- reset_watch () { ! EMACS_GET_TIME (TV1); watch_not_started = 0; } *************** *** 65,69 **** if (watch_not_started) exit (1); /* call reset_watch first ! */ ! gettimeofday (&TV2, tzp); if (TV1.tv_usec > TV2.tv_usec) { --- 56,60 ---- if (watch_not_started) exit (1); /* call reset_watch first ! */ ! EMACS_GET_TIME (TV2); if (TV1.tv_usec > TV2.tv_usec) { diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/rcs2log emacs-19.26/lib-src/rcs2log *** emacs-19.25/lib-src/rcs2log Mon Oct 18 22:50:31 1993 --- emacs-19.26/lib-src/rcs2log Mon Aug 15 18:47:47 1994 *************** *** 13,17 **** # Author: Paul Eggert ! # $Id: rcs2log,v 1.16 1993/10/19 02:50:31 eggert Exp $ # Copyright 1992, 1993 Free Software Foundation, Inc. --- 13,17 ---- # Author: Paul Eggert ! # $Id: rcs2log,v 1.18 1994/08/15 22:44:10 eggert Exp $ # Copyright 1992, 1993 Free Software Foundation, Inc. *************** *** 141,163 **** datearg="-d>$date" # With no arguments, examine all files under the RCS directory. case $# in 0) ! files= ! for file in RCS/.* RCS/* .*,v *,v ! do ! case $file in ! RCS/. | RCS/..) continue;; ! RCS/.\* | RCS/\* | .\*,v | \*,v) test -f "$file" || continue esac ! files=$files$nl$file ! done ! case $files in ! '') exit 0 esac - oldIFS=$IFS - IFS=$nl - set $files - IFS=$oldIFS esac --- 141,181 ---- datearg="-d>$date" + repository= + rlog=rlog + case $CVSROOT in + ?*) + if test -d "$CVSROOT" && test -f CVS/Repository + then + r=`cat $rlogout || exit --- 184,188 ---- trap "rm -f $loginsout $rlogout; exit 1" 0 ! $rlog "$datearg" $rlog_options ${1+"$@"} >$rlogout || exit *************** *** 180,184 **** esac authors=` ! sed -n 's|^date: *[0-9]*/[0-9][0-9]/[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]; *author: *\([^; ]*\).*|\1|p' <$rlogout | case $loginsout in '') sort -u;; --- 198,202 ---- esac authors=` ! sed -n 's|^date: *[0-9]*[-/][0-9][0-9][-/][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9][-+0-9]*; *author: *\([^; ]*\).*|\1|p' <$rlogout | case $loginsout in '') sort -u;; *************** *** 291,298 **** /^date: /, /^(-----------*|===========*)$/ { if ($0 ~ /^branches: /) { next } ! if ($0 ~ /^date: [0-9][ \/0-9:]*;/) { ! time = substr($3, 1, length($3)-1) author = substr($5, 1, length($5)-1) ! printf "%s %s %s %s %c", filename, $2, time, author, 13 next } --- 309,327 ---- /^date: /, /^(-----------*|===========*)$/ { if ($0 ~ /^branches: /) { next } ! if ($0 ~ /^date: [0-9][- +\/0-9:]*;/) { ! date = $2 ! if (date ~ /-/) { ! # An ISO format date. Replace all "-"s with "/"s. ! newdate = "" ! while ((i = index(date, "-")) != 0) { ! newdate = newdate substr(date, 1, i-1) "/" ! date = substr(date, i+1) ! } ! date = newdate date ! } ! # Ignore any time zone; ChangeLog has no room for it. ! time = substr($3, 1, 8) author = substr($5, 1, length($5)-1) ! printf "%s %s %s %s %c", filename, date, time, author, 13 next } *************** *** 409,415 **** printf "%s %s %2d %s %d %s ", w[days_since_Sunday_before_epoch%7], m[month-1], day, $3, year, auth if (mailaddr[author]) ! printf "(%s)\n\n", mailaddr[author] else ! printf "(%s@%s)\n\n", author, "'"$hostname"'" } if (! filesknown[$1]) { --- 438,444 ---- printf "%s %s %2d %s %d %s ", w[days_since_Sunday_before_epoch%7], m[month-1], day, $3, year, auth if (mailaddr[author]) ! printf "<%s>\n\n", mailaddr[author] else ! printf "<%s@%s>\n\n", author, "'"$hostname"'" } if (! filesknown[$1]) { diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/timer.c emacs-19.26/lib-src/timer.c *** emacs-19.25/lib-src/timer.c Mon Jan 17 17:24:02 1994 --- emacs-19.26/lib-src/timer.c Tue Jul 12 18:27:50 1994 *************** *** 350,352 **** --- 350,369 ---- #endif /* ! HAVE_STRERROR */ + long * + xmalloc (size) + int size; + { + register long *val; + + val = (long *) malloc (size); + + if (!val && size) + { + fprintf (stderr, "timer: virtual memory exceeded\n"); + exit (1); + } + + return val; + } + /* timer.c ends here */ diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lib-src/yow.c emacs-19.26/lib-src/yow.c *** emacs-19.25/lib-src/yow.c Sat Sep 11 21:34:41 1993 --- emacs-19.26/lib-src/yow.c Tue Jun 7 11:18:54 1994 *************** *** 19,22 **** --- 19,34 ---- #endif + #ifdef MSDOS + #define rootrelativepath(rel) \ + ({\ + static char res[BUFSIZE], *p;\ + strcpy (res, argv[0]);\ + p = res + strlen (res);\ + while (p != res && *p != '/' && *p != '\\' && *p != ':') p--;\ + strcpy (p + 1, "../");\ + strcpy (p + 4, rel);\ + &res;}) + #endif + main (argc, argv) int argc; diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/ChangeLog emacs-19.26/lisp/ChangeLog *** emacs-19.25/lisp/ChangeLog Mon May 30 08:26:21 1994 --- emacs-19.26/lisp/ChangeLog Wed Sep 7 03:56:05 1994 *************** *** 1,2 **** --- 1,1992 ---- + Wed Sep 7 03:54:08 1994 Richard Stallman + + * Version 19.26 released. + + Tue Sep 6 16:33:01 1994 Richard Stallman + + * rmailmsc.el (set-rmail-inbox-list): Doc fix. + + Mon Sep 5 19:59:29 1994 Karl Heuer + + * help-macro.el (make-help-screen): Doc fix. + + Mon Sep 5 15:32:47 1994 Lawrence R. Dodd + + * dired-x.el: (dired-omit-expunge): Avoid setting buffer modified + unless it was modified before and some mark is set so `%*' won't + appear in mode-line of omitted buffers. + + Mon Sep 5 00:32:07 1994 Richard Stallman + + * saveplace.el (save-place-find-file-hook): + Check after-find-file-from-revert-buffer. + + * cmacexp.el (c-macro-prompt-flag): Set default back to nil. + + Sun Sep 4 20:10:40 1994 Richard Stallman + + * rmail.el (rmail-get-new-mail): Run rmail-get-new-mail-hook. + + Sun Sep 4 22:03:44 1994 Tom Tromey (tromey@drip.colorado.edu) + + * man.el (Man-notify-when-ready): Get Man-original-frame + from the proper buffer. + + Sat Sep 3 04:41:11 1994 Richard Stallman + + * simple.el (mark-ring): Add permanent-local prop. Doc fix. + + * shell.el (shell-command-regexp): Use a simpler faster regexp. + + * info.el (Info-mode): Text for using x, not for make-face defined. + + * mh-e.el (mh-get-new-mail): Always use mh-inc-prog, never `inc'. + + Fri Sep 2 20:07:38 1994 Richard Stallman + + * outline.el (outline-minor-mode-prefix): Doc fix. + + Fri Sep 2 19:11:03 1994 Espen Skoglund (espensk@tklab1.cs.uit.no) + + * pascal.el (pascal-auto-lineup): New variable. + (pascal-end-of-statement): New function. + (pascal-indent-command): Now does optional lineups of : and =. + (pascal-indent-case): Uses pascal-end-of-statement to skip the + case statements. + + Thu Sep 1 12:38:15 1994 Espen Skoglund (espensk@tklab1.cs.uit.no) + + * pascal.el (pascal-indent-declaration): Indent correctly + when record blocks are used within parameterlists. + (pascal-declaration-beg): Strange -0 argument removed. + (pascal-type-completion): Fix typo in regexp. + (pascal-get-lineup-indent): Use match-end instead of end-of-line. + + Thu Sep 1 16:43:04 1994 Richard Stallman + + * compile.el (grep-command): Doc fix. + + * tcl-mode.el: Call provide. + + Thu Sep 1 12:38:02 1994 Francesco Potorti` (pot@cnuce.cnr.it) + + * cmacexp.el (c-macro-prompt-flag): set default to t. + (c-macro-expand): buffer-flush-undo is outdated. + (c-macro-expansion): make exit-status a local variable. + + Thu Sep 1 02:12:12 1994 Richard Stallman + + * completion.el (completion-before-command): Don't call get + on a non-symbol. + + Tue Aug 30 02:58:32 1994 Richard Stallman + + * window.el (shrink-window-if-larger-than-buffer): + Don't make the window shorter than window-min-height. + + * calendar.el (exit-calendar): Don't restore window config. + (calendar): Don't save one. + + * isearch.el (isearch-edit-string): Use isearch-text-char-description. + + * ispell.el (ispell-dictionary-alist-1): + For English, remove hyphen from the OTHERCHARS. + + * isearch.el (isearch-edit-string): In the isearch-recursive-edit case, + don't end the recursive edit and don't start another one. + (isearch-done): New arg EDIT. + (isearch-mode): Return t if search succeeded. + + Mon Aug 29 22:20:43 1994 Tom Tromey (tromey@creche.colorado.edu) + + * replace.el (perform-replace): Restore match data before highlighting. + + Mon Aug 29 20:46:14 1994 Richard Stallman + + * help-macro.el (make-help-screen): Don't call window-frame + in a non-multi-frame Emacs. + + Mon Aug 29 08:43:49 1994 Lennart Staflin + + * diary-ins.el: Require diary-lib, not diary. + * diary-lib.el: Provide diary-lib not diary. + + Sun Aug 28 00:14:20 1994 Richard Stallman + + * files.el (after-find-file-from-revert-buffer): Add defvar. + + * gud.el (dbx): Use newline, not semicolon, between file and stop cmds. + + Sat Aug 27 15:02:55 1994 Richard Stallman + + * outline.el (outline-mode-prefix-map): New variable. + Define all the C-c commands here. + (outline-mode-menu-bar-map): New variable, holds local menu-bar keymap. + (outline-mode-map): Bind C-c and menu-bar to those maps. + (outline-minor-mode-map): Likewise use those submaps for the prefixes. + + * indent.el (indent-rigidly): Insert new indent, then delete old. + + * comint.el (comint-arguments): Treat \n and \t like space. + + Fri Aug 26 02:54:44 1994 Richard Stallman + + * simple.el (set-mark): When POS is nil, always clear mark-active. + + * rmailsum.el (rmail-summary-output-menu): New command. + (rmail-summary-mode-map): Add Output and Input with menu of files. + + Thu Aug 25 01:34:59 1994 Richard Stallman + + * vc.el (vc-backend-checkout): Don't use -G for SCCS. + + * rot13.el (toggle-rot13-mode): New function. + + * rmailsum.el (rmail-summary-rmail-update): + Check whether rmail-buffer is dead. + + Wed Aug 24 21:51:39 1994 Roland McGrath + + * etags.el (tags-table-extend-computed-list): In loop processing + list of included tables to incorporate it, advance TABLES to its + cdr at end of loop. + + Wed Aug 24 00:48:02 1994 Richard Stallman + + * files.el (find-file-noselect): Improve "file changed" message. + + * comint.el (comint-arguments): Rewrite for speed. + Don't keep parsing once we have enough args. + + * ispell.el (ispell-buffer-local-words): Don't treat doublequote + specially when splitting the line into words. + + * mouse-sel.el (mouse-extend): In Transient Mark mode, use the region + whenever it is active. + + Tue Aug 23 20:55:18 1994 Karl Heuer + + * simple.el (shell-command-on-region): Don't delete current buffer. + + Tue Aug 23 12:31:47 1994 Richard Stallman + + * simple.el (backward-delete-char-untabify): Doc fix. + + * lpr.el (lpr-headers-switches): Don't use -p on dgux, irix. + + * edebug.el (edebug-read-and-maybe-wrap-form): Increment + max-specpdl-size by 2000. + + * jka-compr.el (jka-compr-insert-file-contents): Run the + after-insert-file-functions. + + * rmail.el (rmail-ignored-headers): Split string constant into lines. + + Sun Aug 21 13:24:32 1994 Richard Stallman + + * term/news.el (news-fkey-prefix): Use kp-decimal, not kp-period. + + * rnews.el (news-select-message): Do most of the work + even for nonexistent article. (Code copied from 18.59). + + Fri Aug 19 00:37:37 1994 Richard Stallman + + * rmail.el (rmail-retry-failure, mail-unsent-separator): Doc fix. + + * rnews.el (news-mode): Don't set mode-name to a list. + Use mode-line-process instead. + + * rot13.el (rot13-other-window): Doc fix. + + * lpr.el (lpr-command, lpr-headers-switches): Undo previous change. + + Thu Aug 18 17:02:47 1994 Karl Heuer + + * window.el (split-window-horizontally): If size is negative, + measure from the right. + + Wed Aug 17 16:29:27 1994 Richard Stallman + + * info.el (Info-mode): Doc fix. + + * lpr.el (lpr-command, lpr-headers-switches): Treat Solaris like BSD. + + * paren.el (show-paren-command-hook): Set the face of an overlay + each time we move it somewhere. + + * files.el (after-find-file): + New arg after-find-file-from-revert-buffer. + (revert-buffer): Pass t for that. + + * simple.el (choose-completion-string): Use plain exit-minibuffer, + not minibuffer-complete-and-exit. And do so only if the minibuffer + was doing completion. + + * tex-mode.el (tex-mode): Allow for documentclass options + when checking for SliTeX. + + Wed Aug 17 19:51:28 1994 Lawrence R. Dodd + + * vc.el (vc-admin): Pass nil instead of + vc-checkout-writable-buffer-hook to vc-start-entry. + + Tue Aug 16 21:45:27 1994 Richard Stallman + + * perl-mode.el (perl-indent-command): Fix backwards conditional. + + Sun Aug 14 00:09:16 1994 Richard Stallman + + * rmailsum.el (rmail-summary-scroll-msg-up): Put rmail buffer + on the screen if necessary--but don't scroll in that case. + + * rmail.el (rmail-resend): Preserve point around expand-mail-aliases. + + * easymenu.el (easy-menu-define): Doc fix. + + Sat Aug 13 13:34:59 1994 Richard Stallman + + * cmacexp.el (c-macro-expansion): If the CPP output is empty, just + show error messages. + + * mouse.el (mouse-set-mark): Select the window before saving point. + + * iso-cvt.el (iso-tex2iso-trans-tab): Put the sequences with braces + before corresponding ones without. Escape ? in patterns. + (iso-translate-conventions): Don't widen. + (iso-german-tex-p): Preserve narrowing. + + * rmail.el (rmail-maybe-display-summary): If summary is in some frame, + just use that. + + Fri Aug 12 00:49:35 1994 Richard Stallman + + * rmail.el (rmail-retry-failure): Narrow to just the old header + for calling mail-fetch-field. + + Thu Aug 11 03:10:33 1994 Richard Stallman + + * compile.el (compilation-set-window-height): Add save-excursion. + + * rmail.el (rmail-maybe-display-summary): Don't set summary window + height if its frame isn't split. + + * subr.el (one-window-p): Doc fix. + + * frame.el (frame-notice-user-settings): If we change the frame's font, + call frame-update-faces. + + Wed Aug 10 22:41:58 1994 Richard Stallman + + * paren.el (show-paren-command-hook): Cope if matching-paren gives nil. + + Wed Aug 10 19:34:45 1994 Roland McGrath + + * etags.el (tags-table-including): Inside loop: if CORE-ONLY skip + all consecutive tables not in core; else extend computed list. + + Wed Aug 10 16:21:31 1994 Richard Stallman + + * gnus.el (gnus-summary-mode-map): Delete unusable `Sort Summary' item. + + Wed Aug 10 04:39:22 1994 Erik Naggum + + * rmail.el (rmail-forward): Anchor `mail-header-separator' on both + sides to match whole line, not just initial substring. + + Wed Aug 10 00:07:36 1994 Richard Stallman + + * help.el (view-lossage): Handle buffers and frames in recent-keys. + + Wed Aug 10 00:48:50 1994 Michael Kifer (Michael Kifer ) + + * ediff.el (ediff-find-file, ediff-patch-file): Handle symlinks. + + * ediff.el (ediff-save-buffer): Added option for saving diff output. + + * ediff.el (ediff-fine-diff-buffer, ediff-ignore-similar-regions): + New variables. + (ediff-no-fine-diffs): Macro added. + (ediff-next-difference, ediff-previous-difference) + (ediff-make-fine-diffs): Enabled a new feature that allows one to + skip over the difference regions where the only differences are + the white space and newlines. + (ediff-toggle-autorefine): Fixed a bug that caused error when the + current difference is <= 0 or > ediff-number-of-differences. + + Tue Aug 9 19:16:26 1994 Richard Stallman + + * menu-bar.el (menu-bar-file-menu): Compare Files renamed to Compare. + (menu-bar-ediff-menu): Add one element for compare-windows. + + * appt.el: Require calendar. + + Tue Aug 9 14:49:17 1994 Michael D. Ernst + + * rmailedit.el (rmail-abort-edit): Call `rmail-highlight-headers'. + + Tue Aug 9 01:41:58 1994 Richard Stallman + + * mailalias.el (define-mail-alias): Avoid error if DEFINITION is "". + + * appt.el (appt-check): Update on first wakeup after midnight + even if that's not precisely 12:01. + + Mon Aug 8 00:38:11 1994 Richard Stallman + + * mouse.el (mouse-drag-mode-line): New function (from mldrag.el, + but changed a little). Put it on mode-line down-mouse-1. + (mouse-select-window): Bind to mode-line drag-mouse-1. + + * info.el (Info-last-menu-item): Fix gross logic errors. + (Info-last-preorder): After going thru menu item, go to end. + (Info-scroll-up): Set window-start if it's out of range. + Once menu start is on or above screen, start using menu items. + (Info-scroll-down): Set window-start if it's out of range. + If there's a menu item, always use menu. + + * sendmail.el (mail-alias-file): Add autoload cookie. + + * mouse.el (x-fixed-font-alist): Add clean 5x8 and clean 6x8. + + * compile.el (compilation-set-window-height): New function, + broken out from compile-internal. + Don't change window height if it is the frame root window. + (compile-internal): Call it. + (compilation-goto-locus): Call it. + Use any visible frame already showing the compilation buffer. + + * gnus.el (gnus-start-news-server): Fix the call to `error'. + + Sun Aug 7 02:47:33 1994 Richard Stallman + + * info.el (Info-additional-directory-list): New variable. + (Info-find-node): Use it. + + * faces.el (copy-face): Ignore errors in set-face-font. + + * mouse.el (mouse-choose-completion): Pass completion-base-size value + to choose-completion-string. + + * simple.el (completion-base-size): New variable. + (completion-list-mode): Make it local. + (choose-completion): Pass its value to choose-completion-string. + (choose-completion-string): New arg base-size. + Use that when deciding how much to delete. + + * complete.el (PC-do-completion): Set completion-base-size. + + * cmacexp.el: Doc fixes. + (c-macro-expansion): Capture and display CPP error messages. + + * tex-mode.el (tex-mode): Accept documentclass when checking Slitex. + + Sat Aug 6 00:45:19 1994 Richard Stallman + + * gnus.el: Require timezone when loading this file. + Move the provide call to the end. + + * c-mode.el (indent-c-exp): Preserve point when handling comments. + + * byte-opt.el (byte-after-unbind-ops): Fix paren error wrt doc string. + + * font-lock.el (font-lock-hack-keywords): Delete debugging code. + + Fri Aug 5 12:46:53 1994 Erik Naggum + + * simple.el (choose-completion): Bury or iconify the completion list + using code copied from mouse-choose-completion. + + Fri Aug 5 22:58:12 1994 Richard Stallman + + * tex-mode.el (tex-mode): Check for documentclass like documentstyle. + + * info.el (Info-directory-list): Doc fix. + + Fri Aug 5 03:53:56 1994 Erik Naggum + + * files.el (save-buffer): Unconditionally make a backup with 2 or + 3 C-u's even if make-backup-files is nil. + + Fri Aug 5 14:56:12 1994 Richard Stallman + + * mouse.el (x-fixed-font-alist): Regularize how fonts are specified. + + * time.el (display-time-filter): pm starts at 12, not 13. + + Fri Aug 5 03:42:04 1994 Hans Chalupsky (hans@hydra.cs.Buffalo.EDU) + + * advice.el (ad-subr-arglist): Adapted to new DOC file format. + + Fri Aug 5 00:27:57 1994 Richard Stallman + + * etags.el (select-tags-table): Doc fix. + + * font-lock.el (font-lock-syntax-table): New syntax table. + (font-lock-hack-keywords): Use it temporarily here. + (font-lock-set-defaults): Set up special syntax table for C and C++. + + Thu Aug 4 01:43:39 1994 Richard Stallman + + * isearch.el (isearch-mode-map): Delete mouse-2, down-mouse-2 bindings. + + * rmail.el (rmail-select-summary): Preserve rmail buffer's value of + rmail-total-messages even while summary buffer is current. + + * gnus.el: Doc fixes. + + * frame.el (frame-delete-all): Copy the whole alist first. + + * hilit19.el (hilit-find-file-hook): Preserve buffer modified state. + + * simple.el (end-of-buffer-other-window): + Go to the end, not to the beginning. + + * appt.el (appt-make-list): Do nothing unless range being processed + for diary entries includes today's date. + + Wed Aug 3 23:27:05 1994 Hans Chalupsky (hans@hydra.cs.Buffalo.EDU) + + * bytecomp.el (byte-compile-protect-from-advice): Macro deleted. + (byte-compile-from-buffer, byte-compile-top-level): Don't use it. + + * advice.el: New handling of automatic advice activation that + exploits modified built-in versions of `fset' and `defalias' which + take care of this functionality directly: + (ad-start-advice-on-load, ad-activate-on-definition) + (ad-definition-hooks, ad-enable-definition-hooks, ad-defined-function) + (ad-advised-definers, ad-advised-byte-compilers, byte-constant) + (byte-constant-limit, byte-constant2, byte-fset) + (ad-byte-code-fset-regexp): Variables deleted. + (ad-activate-defined-function, ad-find-fset-in-byte-code) + (ad-scan-byte-code-for-fsets, ad-advised-byte-code) + (ad-recover-byte-code, ad-enable-definition-hooks) + (ad-disable-definition-hooks): Functions deleted. + (defun, defmacro, fset, defalias, define-function) + (byte-compile-from-buffer, byte-compile-top-level): Removed `defadvice' + for these functions. + (ad-save-real-definitions): Removed saving of `byte-code'. + (ad-activate-off): New dummy function. + (ad-activate-on): New name for `ad-activate'. All calls changed. + (ad-with-auto-activation-disabled): New macro prevents automatic + advice activation. + (ad-safe-fset): New function, used instead of `ad-real-fset'. + (ad-compile-function): Disable automatic advice activation while + compiling, because `byte-compile' uses `fset'. + (ad-activate-on): Renamed from `ad-activate'. Avoid recursive calls. + (ad-activate-on-top-level): New variable. + (ad-start-advice, ad-stop-advice, ad-recover-normality): Modified to + achieve de/activation of automatic advice activation by setting the + definition of `ad-activate' to `ad-activate-on' or `ad-activate-off'. + (ad-start-advice): Is now called unconditionally when Advice is loaded. + + Made compilation behavior of advised definitions customizable, since + loading the byte-compiler takes some time and is not always worth the + cost, e.g., if one only wants to make a few simple modifications: + (ad-default-compilation-action): New variable which specifies whether + to compile an advised definition in case the COMPILE argument to + `ad-activate-on' or one of its friends was supplied as nil. + (ad-preactivate-advice): Supply negative COMPILE argument to prevent + compilation. + (ad-should-compile): New function. + (ad-activate-advised-definition): Use `ad-should-compile' to determine + whether an advised definition should get compiled. + (ad-activate-on, ad-update, ad-activate-regexp, ad-update-regexp) + (ad-activate-all): Doc fixes. + (ad-update): Leave handling of COMPILE up to `ad-activate-on'. + + Extracted construction of freeze-advices from `defadvice': + (ad-make-freeze-definition): New function. + (defadvice): Use `ad-make-freeze-definition' to construct frozen defs. + + Wed Aug 3 16:41:06 1994 Richard Stallman + + * gnus.el (gnus-kill-files-directory): New variable. + (gnus-Newsgroup-kill-file, gnus-newsgroup-kill-file): Use it. + + * dired.el (dired-mode): Put expanded name in list-buffers-directory. + + * icomplete.el (icomplete-prime-minibuffer): Copy the hook lists + after making them local. + + * gnus.el (gnus): Require timezone. Delete timezone autoloads. + + * iso-cvt.el (iso-fix-iso2tex, iso-fix-tex2iso): Check plain-text-mode. + + Tue Aug 2 22:17:21 1994 Karl Heuer + + * sh-script.el (auto-mode-alist): Fix typos in comments. + + Tue Aug 2 17:58:24 1994 Richard Stallman + + * mouse.el: Capitalize some error messages. + (mouse-set-point): Nice error if button release is in scrollbar. + + Tue Aug 2 11:43:33 1994 Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr) + + * compile.el: Set up a "Compile" menubar item. + (recompile): New function. + (previous-error): New function. + (first-error): New function. + + Tue Aug 2 00:57:41 1994 Richard Stallman + + * frame.el (frame-delete-all): New function. + (frame-notice-user-settings): Call it--with or without separate + minibuffer frame. + + Mon Aug 1 00:40:54 1994 Richard Stallman + + * rmailsum.el (rmail-summary-mode-map): Fix the Get New Mail entry. + Fix typo. Add `...' where appropriate. + + * rmail.el (rmail-mode-map): Fix the Get New Mail entry. + Add `...' where appropriate. + + * ediff.el (ediff-version): Function, variable deleted. + (ediff-date): Var deleted. + (ediff-status-info): Don't call ediff-version. + + * dired.el (dired-insert-directory): Call expand-file-name here + because the dir name may have been abbreviated before. + + Sun Jul 31 21:25:27 1994 Morten Welinder (terra@diku.dk) + + * ls-lisp.el (insert-directory): Gracefully handle the case + where a file disappears between it is listed in the directory + and the attributes are requested. + + Sun Jul 31 01:30:57 1994 Richard Stallman + + * compile.el (compilation-error-regexp-alist): Fix previous change. + Add alternatives for GNU error messages with program name in them. + + * time.el (display-time-string-forms): New variable. + (display-time-filter): Simplify to use it. + + * dired.el (dired-noselect): Call abbreviate-file-name here. + (dired-internal-noselect): Not here. + + * comint.el (comint-password-prompt-regexp): Handle PGP prompt. + + * gnus.el (gnus-sortable-date): Use timezone-make-time-string. + + * rmail.el (rmail-retry-failure): Handle a weird case with + a couple of lines before the old message header. + + * compile.el (compilation-error-regexp-alist): Make separate + regexp for Borland C++; the combined one matched too much. + + * ange-ftp.el (ange-ftp-parse-netrc-group): Don't move back to line + beginning. Skip the machine name whatever it may be. + (ange-ftp-parse-netrc): Skip initial whitespace. + + * sendmail.el (sendmail-send-it): Handle resent-to specially. + + * mouse-sel.el (mouse-extend): Pass WINDOW arg to mouse-scroll-subr. + + * rmailsum.el (rmail-summary-mode-map): Add Get New Mail item. + Move new Re-send menu item to right place. + + * rmail.el (rmail-mode-map): Move new Re-send menu item to right place. + + Sat Jul 30 17:19:59 1994 Richard Stallman + + * hilit19.el: Specify patterns for objc-mode. + + Sat Jul 30 08:55:26 1994 Martin Boyer + + * menu-bar.el (menu-bar-enable-clipboard): Moved here the + clipboard function key bindings. + + Sat Jul 30 13:47:16 1994 Michael D. Ernst + + * ispell.el (ispell-message-text-end): Improve context diff regexp. + + Sat Jul 30 03:43:09 1994 Richard Stallman + + * rmailsum.el (rmail-new-summary): If just one window, + put the summary in the upper window and Rmail buffer below. + + Sat Jul 30 11:34:43 1994 Ake Stenhoff (etxaksf@aom.ericsson.se) + + * imenu.el (imenu, imenu--flatten-index-alist): Add marker support. + (imenu--cleanup): New function. + (imenu-example--name-and-position): Now uses markers. + + * imenu.el (imenu-add-to-menubar): New function to add an entry + to the menubar for the buffer's current local keymap. + + Fri Jul 29 15:59:47 1994 Richard Stallman + + * rmail.el (rmail-highlight-face): New variable. + (rmail-highlight-headers): Use it if non-nil. + + * gnus.el (gnus-group-suspend): Be sure to bury the right buffer. + + * hideif.el (hide-ifdefs): Doc fix. + + Fri Jul 29 14:52:10 1994 Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr) + + * rmail.el (rmail-display-summary): New variable. + (rmail): Call rmail-summary at the end if rmail-display-summary is + set. + + * rmail.el (rmail-mode-map): Add Re-send menu item. + * rmailsum.el (rmail-summary-mode-map): Add Re-send menu item. + + Thu Jul 28 20:44:04 1994 Andreas Schwab + + * simple.el (choose-completion): Check for + next-single-property-change returning nil. + * mouse.el (mouse-choose-completion): Dito. + + Thu Jul 28 02:22:24 1994 Richard Stallman + + * files.el (file-truename): Temporarily get rid of the + ange-ftp completion handler. + + * info.el (Info-find-node): Use a loop instead of mapcar and catch. + + * buff-menu.el (buffer-menu): Undo previous change. + Instead, save the point value that list-buffers set up + and go back there after switching windows. + + Wed Jul 27 13:49:32 1994 Richard Stallman + + * faces.el (face-initialize): Use underlining for region face + if there's no gray. + (face-try-color-list): Support `underline' in color list. + + * fill.el (justify-current-line): Delete space at end of line. + + * files.el (set-auto-mode): Shorten scope of case-fold-search binding. + + * files.el (cd-absolute): Call file-name-as-directory first thing. + + * compile.el (compilation-error-regexp-alist): Fix bug in Borland + C++ change. Make first regexp reject cases that give column + numbers. Add new regexp for GNU format with column numbers. + + Tue Jul 26 11:51:32 1994 Richard Stallman + + * mail-extr.el (what-domain): Doc fix. + + * files.el (basic-save-buffer-1): Ignore file-precious-flag + if the file's dir is not writable. + + * forms.el (forms--update): Undo change made mistakenly. + + * vc.el (vc-next-action): Even in 1-file case, get its name from FILES. + (vc-finish-logentry): Don't do vc-buffer-sync on the parent buffer + when hat parent buffer is a dired buffer. + + * menu-bar.el (menu-bar-update-buffers): + Use (current-global-map), not global-map. + + * compile.el (compilation-next-error-locus): New arg SILENT. + + * dissociate.el (dissociated-press): Error at start if buffer is empty. + + * ediff.el: Made menu bar's autoloaded stuff conditional on + purify-flag, to avoid error message when loading ediff in a frame + that has no menu bar. + + Tue Jul 26 16:24:25 1994 Michael Kifer (kifer@sbkifer) + + * ediff.el (ediff-setup): Improved mode-line-buffer-identification. + Now accommodates buffer identifications generated by + mode-line.el and uniquify.el. + + * ediff.el (ediff-current-diff-face-A/B, + ediff-fine-diff-face-A/B,ediff-odd/even-diff-face-A/B): + Variables changed to contain face names + instead of face internal representation. + + Mon Jul 25 20:55:46 1994 Johan Vromans (jv@squirrel.NL.net) + + * forms.el (forms-read-file-filter): new hook function to + preprocess file contents before being passed to forms mode. + (forms-write-file-filter): new hook function to preprocess file + contents before it is being saved to disk. Can be used to undo the + effects of `forms-read-file-filter'. + (forms-mode): Supply a default format if no `forms-format-list' was + specified. + Preprocess file contents using `forms-read-file-filter' and attach + `forms-write-file-filter' to the `local-write-file-hooks' of the file + buffer. + Present a friendly message if the visited file is empty or new. + (forms--intuit-from-file): New subroutine to get the number of fields + from the data file; constructs a default format list. + (forms-save-buffer): Forms mode wrapper for `save-buffer'. + (forms--change-commands, forms--exit): Use it. + (forms--update): Check for the presence of the field separator in any + of the fields. Refuse update if found. + (forms-delete-record): Allow the last record of the file to be + deleted, even if not terminated by a newline. + (forms--local-write-file-function): Remove. Didn't do any good. + Replaced by `forms-save-buffer'. + + * forms-d2.el: Use `forms-new-record-filter' variable instead of + defining the function. + + Mon Jul 25 17:45:22 1994 Richard Stallman + + * startup.el (command-line-args-left): Add defvar. + + Sun Jul 24 22:16:58 1994 Andreas Schwab + + * comint.el (comint-dynamic-list-completions): Listify the key + sequence to be put back. + + Sun Jul 24 15:57:12 1994 Richard Stallman + + * lisp-mode.el (emacs-lisp-mode-syntax-table): Give RET the + same syntax as newline. + * cplus-md.el (c++-mode-syntax-table): Likewise. + + * vc.el (vc-finish-logentry): Use vc-parent-buffer to find the buffer + to offer to save. + + * gud.el (dbx): Use system-configuration, not system-type. + + Sun Jul 24 01:53:22 1994 Erik Naggum + + * dired.el (dired-internal-noselect): a zero modtime means + directory is unchanged. + + Sat Jul 23 17:11:48 1994 David Robinson (drtr@mail.ast.cam.ac.uk) + + * term/x-win.el (system-key-alist): Add Sun-specific X11R6 keysyms. + + * menu-bar.el: Add to global key map for cut, paste & copy keys. + + Sun Jul 24 01:30:54 1994 Richard Stallman + + * mail-extr.el (mail-extr-all-top-level-domains): Update a few + long names. + + * menu-bar.el (menu-bar-update-buffers): If Buffers item is gone, + don't bring it back. + + Sat Jul 23 21:07:03 1994 Richard Stallman + + * ispell4.el (ispell-tex-buffer-p): Write names in lower case. + Add slitex-mode. + + * simple.el (line-move, next-line): Check last line moved over + has a newline, in a way that intangible text does not confuse. + + Sat Jul 23 14:18:38 1994 enami tsugutomo + + * lisp/add-log.el (add-log-current-defun): Skip doc string + correctly even if it ends with line that starts space. + + Fri Jul 22 16:43:48 1994 Ed Reingold + + * cal-menu.el (calendar-mode-map): Change reference from renamed + calendar-current-month to calendar-goto-today. + + Wed Jul 20 15:24:52 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * dired.el (dired-between-files): Ignore dired-subdir-regexp + if we can move to the file name on the line. + + * dired.el (dired-internal-noselect): Don't revert, just suggest `g'. + + Wed Jul 20 22:23:29 1994 Ethan Bradford (ethanb@ptolemy.astro.washington.edu) + + * ispell.el (ispell-command-loop, ispell-region, ispell-word): + Only pop up the choices window if an error is found in the region. + Don't change the size of the choices window except as needed. + Don't (sit-for 0) at the start of ispell-region (i.e. don't force + redisplay at the start of the region). + (ispell-overlay-window): Small documentation fix. + + Wed Jul 20 10:02:57 1994 Roland McGrath + + * etags.el (visit-tags-table-buffer): Bind a variable + local-tags-file-name with the value of tags-file-name before + calling tags-verify-table, which switches buffers; change all + references to use local-tags-file-name. Save current buffer + before that call and on error, switch back before killing local + value of tags-file-name. + + Wed Jul 20 00:08:39 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * imenu.el (imenu-choose-buffer-index): Use last-nonmenu-event + to decide on mouse vs non-mouse. + (imenu-progress-message): New arg prevpos. All callers changed. + Don't print messages too frequently. + + * byte-opt.el (byte-decompile-bytecode-1): Don't add pc values + if make-spliceable is non-nil. (Arg renamed from make-splicable.) + + * disass.el (disassemble-1): Display the pc values. + (disassemble-column-1-indent): Increase to 8. + + * byte-opt.el (byte-decompile-bytecode-1): + Put a pc value before each insn in the list we return. + + Tue Jul 19 16:00:10 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * ediff.el (Emacs 19 menu setup): Move back to top level + and do it only if purify-flag. + + * vc.el: At compile time, require dired. + (vc-finish-logentry): Use the proper files buffer for vc-buffer-sync. + + * compile.el (compilation-error-regexp-alist): Allow `(' after + linenum in "FILE", line LINENUM. Add backslash so C-M-a works. + + Tue Jul 19 02:38:56 1994 Michael Kifer (kifer@cs.sunysb.edu) + + * ediff.el (ediff-find-file, ediff-files-internal, ediff-patch-file): + Modified to work with remote and compressed files. + + * ediff.el (ediff-read-file-name, ediff-buffers): Better defaults. + (ediff-read-file-name) Handle OS/2. + + * ediff.el (ediff-forward-word-function) New function. + (ediff-wordify-function): Variable deleted. + (ediff-toggle-regexp-match, ediff-hide-regexp-matches): New functions. + (ediff-focus-on-regexp-matches): New function. + (ediff-status-info): New function. + (ediff-file-names, ediff-line-numbers): Functions deleted. + + Mon Jul 18 14:03:30 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * mh-e.el (mh-folder-mode): Use local-write-file-hooks. + + Mon Jul 18 09:39:49 1994 Barry A. Warsaw (warsaw@anthem.nlm.nih.gov) + + * reporter.el (reporter-dump-state, reporter-submit-bug-report): + Don't print package name if pkgname is nil. Don't dump state if + varlist is nil. + + * reporter.el (reporter-bug-hook, reporter-submit-bug-report) + (reporter-calculate-separator, reporter-initial-text): + New or modified functions and variables attempting to prohibit + submission of empty bug reporters. + + * reporter.el: (reporter-prompt-for-summary-p): Default value now nil. + + * reporter.el (reporter-dump-state): Make sure there's a final + newline after the setq sexp. + Pass mail buffer as second arg to print fcn. + Use symbol-value to get varsym's value. + + * reporter.el (reporter-dump-variable): Handle long sexp's even + after entering newline. Done by filling current line. + Much better pretty printing of long lists!! + Handle void variables. + + * reporter.el (reporter-version): New variable. + + * reporter.el (reporter-submit-bug-report-internal): Leave point + after the salutation. + + * reporter.el (reporter-submit-bug-report): Prompt for a subject. + + Mon Jul 18 03:26:04 1994 Karl Fogel (kfogel@phylo.life.uiuc.edu) + + * mail-hist.el: Make sure that headers are case-insensitive. + Upped version to 1.3. + + Sun Jul 17 19:55:40 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * forms.el (forms-delete-record): Handle deletion of last line + when it has no terminating newline. + + Sat Jul 16 15:29:29 1994 Richard Stallman + + * mouse.el ([vertical-line C-mouse-2]): Bind it as in a scroll bar. + + * comint.el (comint-mode-map): Move comint-bol to C-c C-a. + + * calendar.el (calendar-goto-today): + Renamed from calendar-current-month. + + * add-log.el (add-change-log-entry): Use <...> around mail address. + + * help.el (print-help-return-message): If help buffer is a + special display buffer, say nothing about how to switch back. + + * help-macro.el (make-help-screen): Handle case where *Help* comes + up in a separate frame. + + Fri Jul 15 00:30:53 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * sh-script.el: "Comment out" autoload cookies. + + * mouse.el (mouse-drag-region): Delete redundant switch-frame clause. + (mouse-drag-secondary): Likewise. + + * sendmail.el (mail-mailer-swallows-blank-line): Verify sendmail.cf + exists before reading it. + + Thu Jul 14 18:48:16 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * files.el (rmail-output-file-alist): Mark it risky. + + Wed Jul 13 18:56:52 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * help-macro.el (make-help-screen): Bind overriding-local-map + just for short sections of code. + + Wed Jul 13 13:19:39 1994 Noah Friedman (friedman@prep.ai.mit.edu) + + * rsz-mini.el: (resize-minibuffer-setup): Copy post-command-hook + when handling minibuffer windows in other frames, not just + minibuffer-exclusive frames. + Resize the minibuffer window/frame now, in case it has already + been initialized with text. + + Wed Jul 13 11:14:15 1994 Ed Reingold (reingold@albert.gnu.ai.mit.edu) + + * diary-lib.el: Correct file name on last line of file. + + Wed Jul 13 00:02:56 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * rmail.el (rmail-movemail-program): New variable. + (rmail-insert-inbox-text): Use it. + + * files.el (insert-directory): Fix previous change. + + Tue Jul 12 08:14:43 1994 enami tsugutomo (enami@sys.ptg.sony.co.jp) + + * vc.el (vc-finish-logentry): Use the value of + vc-log-after-operation-hook of *VC-log* buffer instead of + vc-parent-buffer. + + Tue Jul 12 00:08:25 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * rmail.el (rmail-mode-map): Fix previous change. + + * menu-bar.el (menu-bar-file-menu): Add insert-file menu item. + + * gnus.el: Clean up menu item string format. + Add a few menu items and separators. + (gnus-mouse-pick-group): New function, on mouse-2 in Group mode. + (gnus-mouse-pick-article): New function, on mouse-2 in Summary mode. + + * rsz-mini.el (resize-minibuffer-setup): + Copy the value of post-command-hook. + + * mouse-sel.el: Many doc fixes. + (mouse-extend): Don't use existing region if EVENT is nil. + + * mouse.el (mouse-drag-secondary): Don't start making an overlay + when the range is empty. + (mouse-secondary-save-then-kill): + The first time, make a new kill ring entry. + + * ispell4.el (ispell-word): Call ispell-dehighlight. + + * files.el (insert-directory): Fix prev change. + + * rmail.el (rmail-mode-map): Add "Get New Mail" menu item under Mail. + + * compile.el (compilation-next-error-locus): Don't call + compilation-forget-errors if compilation is still runing. + + Mon Jul 11 08:28:42 1994 Erik Naggum (erik@naggum.no) + + * buff-menu.el (buffer-menu): Call pop-to-buffer before + list-buffers. Don't move point afterwards. + + Mon Jul 11 20:40:45 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * prolog.el (prolog-mode-syntax-table): Make newline end comments. + + * sendmail.el (mail-setup): Insert -- line before .signature file. + + * dired-aux.el (dired-byte-compile): Use byte-compile-dest-file + to get the output file name. + + * subr.el (ignore): Put doc string in right place. + + * indent.el (move-to-tab-stop): Delete spurious multiple definition. + + Mon Jul 11 09:19:55 1994 Kevin Rodgers + + * mailabbrev.el (define-mail-abbrev): Don't try to parse empty aliases. + + Mon Jul 11 20:41:50 1994 Andreas Schwab (schwab@ls5.informatik.uni-dortmund.de) + + * backquote.el (backquote-splice-symbol): Doc typo fix. + + * edebug.el (edebug-install-read-eval-functions): Fix test for + edebug-read already installed. + + * hexl.el (hexl-maybe-dehexlify-buffer): New function. + (hexl-mode): Add it to change-major-mode-hook. + (hexl-mode-exit): Remove kludge for mode-line update. + (hexlify-buffer): Doc fix. + + Mon Jul 11 00:30:46 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * files.el (insert-directory): Allow list for SWITCHES. + Also split up a string containing separate options. + + * lisp.el (lisp-complete-symbol): Bind completion-fixup-function. + + * mouse.el (mouse-choose-completion): Use mouse-face properties to + find string to use. + + * simple.el (completion-setup-function): Put on mouse-face prop + even if no window-system. Call completion-fixup-function if not nil. + (completion-fixup-function): New variable. + (choose-completion): Use mouse-face properties to find string to use. + + * server.el (server-start): Try both possible socket file names + for the file to delete. + + * mouse.el (x-fixed-font-alist): Add 8x13. Don't specify 75-75 + for 7x13, 7x14. + + * diff.el (diff-latest-backup-file): Cope with backups stored + in a different directory. + + Sun Jul 10 17:32:27 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * etags.el (find-tag-regexp): Bind to C-M-.. + + Sun Jul 10 13:01:06 1994 Erik Naggum (erik@naggum.no) + + * buff-menu.el (Buffer-menu-not-modified): Make + `Buffer-menu-not-modified' handle an argument like `not-modified'. + + * info.el (Info-fontify-maximum-menu-size): New variable. + (Info-fontify-node): Use that variable. + + Sat Jul 9 00:15:40 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * faces.el (x-create-frame-with-faces): Don't downcase nil. + + * loadup.el (current-load-list): Set it to nil. + + * compile.el (compilation-window-height): Use defvar. + (compilation-leave-directory-regexp): Likewise. + (compilation-enter-directory-regexp): Likewise. + + * loadup.el: If have frames, load `faces'. + + * man.el (Man-bgproc-sentinel): Bind case-fold-search for just the + necessary parts of the function, not the call to Man-notify-when-ready. + + Fri Jul 8 17:26:21 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * files.el (hack-one-local-variable): Check for root using user-uid. + + Thu Jul 7 00:42:03 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * files.el (outline-level): Mark it risky. + + * version.el (emacs-version): Avoid unnecessary recursive call. + + * mouse.el ([vertical-scroll-bar C-mouse-2]): Split the window. + + * version.el (emacs-version): Check x-toolkit with featurep. + + * gud.el (gud-mips-p): Check for OSF system on Alpha also. + + * files.el (process-environment, exec-path, load-path,exec-directory): + Mark these as risky. + (hack-one-local-variable): Treat vars ending in -program and -command + as risky. + + * version.el (emacs-version): Indicate x toolkit usage in value. + + * files.el (switch-to-buffer-other-frame): Raise the frame. + + Wed Jul 6 21:32:45 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu) + + * gnus.el (gnus-summary-show-all-threads): Undo previous change. + (gnus-summary-show-thread, gnus-summary-hide-all-threads) + (gnus-summary-hide-thread): Likewise. + + Wed Jul 6 17:27:14 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * buff-menu.el (Buffer-menu-revert-function): New function. + (Buffer-menu-mode): Use it, for revert-buffer-function. + (Buffer-menu-mode-map): Bind revert-buffer. + + * files.el (revert-buffer-function): Doc fix. + + * vc.el (vc-start-entry): New arg after-hook. + Set vc-log-operation-hook locally. + (vc-next-action-on-file): Not here. + (vc-admin): Pass new arg. + (vc-checkin): Pass new arg instead of setting vc-log-operation-hook. + + * files.el (auto-save-mode): If autosave is off because buffer has + shrunk, then toggling should turn it on. + + * tpu-edt.el (tpu-save-all-buffers-kill-emacs): + Use delete-old-versions, and bind it locally. + + * completion.el (save-completions-to-file): Use delete-old-versions. + + * files.el (delete-old-versions): + Var renamed from trim-versions-without-asking. + + Wed Jul 6 16:25:29 1994 Ed Reingold (reingold@albert.gnu.ai.mit.edu) + + * diary-lib.el (fancy-diary-display): Consistently turn off selective + display in diary buffer before doing anything. + + Wed Jul 6 16:10:27 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * outline.el (outline-next-preface): Undo previous change: + Do stop before final newline. + + Wed Jul 6 13:56:23 1994 Morten Welinder (terra@tyr.diku.dk) + + * desktop.el (desktop-buffer-rmail): Handle the situation + where the RMAIL file is locked, mail is waiting, and the + user selects `quit' gracefully. + + Tue Jul 5 18:36:27 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * files.el (set-visited-file-name): Avoid crash if TRUENAME is nil. + + Tue Jul 5 17:52:48 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu) + + * sendmail.el (mail): Commented out buggy call to + set-visited-file-name. (It pukes on a nil argument.) + + Tue Jul 5 14:31:57 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * gnusmail.el (gnus-mail-reply-using-mhe): Handle case of no subject. + + * faces.el (x-create-frame-with-faces): Ignore case in X resource. + (make-face-x-resource-internal): Test underline attribute as boolean. + + * files.el (file-truename): Use iteration when possible. + Avoid recalculating the same truename twice in one invocation. + Error check for infinite link loop. + + * files.el (debugger): Mark it a risky-local-variable. + + * startup.el (command-line): Check LC_ALL and LANG as well as LC_CTYPE. + (iso-8859-1-locale-regexp): Don't check for `iso'. + + * paths.el (rmail-spool-directory): Use /var/mail if it exists. + + Tue Jul 5 11:44:59 1994 Ed Reingold (reingold@albert.gnu.ai.mit.edu) + + * calendar.el (generate-calendar-month): Make highlighted text for + mouse-2 a one character wide for single-digit dates (this undoes + the incorrect fix of May 30, 1994). + + Mon Jul 4 19:23:56 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * paths.el (rmail-spool-directory): Use /var/mail for bsd386. + + * startup.el (iso-8859-1-locale-regexp): New variable. + (command-line): Use it. + + Mon Jul 4 16:58:45 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * add-log.el (add-change-log-entry): Apply expand-file-name to + FILE-NAME. + + Sun Jul 3 20:47:46 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * mouse.el (mouse-drag-region): Bind this-command like last-command. + (mouse-kill-ring-save): Bind this-command and last-command. + + Sun Jul 3 15:05:04 1994 Richard Stallman (rms@gnu.ai.mit.edu) + + * startup.el (command-line): Accept iso-8859-1 like iso_8859_1. + + * sendmail.el (sendmail-send-it): Allow specifying Sender. + + * emacsbug.el (report-emacs-bug-hook): Error if user has added no text. + (report-emacs-bug): Set local report-emacs-bug-orig-text. + Add to mail-send-hook. Use mail-send-and-exit for the echo area msg. + + * frame.el (initial-frame-alist): Doc fix. + + * startup.el (command-line): Automatically use iso-syntax and + standard-display-european if LC_CTYPE asks for it. + + Sun Jul 3 09:30:57 1994 Ethan Bradford (ethanb@ptolemy.astro.washington.edu) + + * gnuspost.el (gnus-inews-news): Allow newsgroups to be separated + by spaces or commas and spaces. + + Set Jul 2 23:00:53 1994 Morten Welinder (terra@diku.dk) + + * meese.el: Use add-hook, (provide 'meese). + (protect-innocence-hook): compare expanded file names for the sake + of non-unix file systems. Use expand-file-name instead of concat + to create "celibacy.1" file name. Check that the "sex.6" exists. + + Sat Jul 2 00:48:54 1994 Richard Stallman (rms@gnu.ai.mit.edu) + + * ebuff-menu.el (electric-buffer-list): Change prompt message. + (electric-buffer-menu-mode-map): Define C-m like space. + + * sh-script.el (sh-chmod-argument): Change default. + + * vc.el (vc-update-change-log): Pass a -n option to rcs2log. + + Fri Jul 1 12:27:28 1994 Richard Stallman (rms@gnu.ai.mit.edu) + + * mouse.el (mouse-scroll-subr): Delete some debugging code. + + * etags.el (visit-tags-table-buffer): + Move error call into scope of `file'. + + * bytecomp.el (byte-compile-defalias): Fix typo in prev change. + + * bytecomp.el (byte-compile-callargs-warn): Handle function defnition + that is not a lambda expression or byte code function. + (byte-compile-arglist-warn): Likewise. + (byte-compile-defalias): New function, used to compile defalias. + (byte-compile-defalias-warn): New function. + + * lpr.el (print-region-1): Essentially undo previous change. + + * files.el (set-visited-file-name): Handle find-file-visit-truename + early on, before we deal with lock files. + + * gnuspost.el (gnus-inews-domain-name): + Once again test gnus-your-domain. + + * shell.el (shell-mode): Don't read history from /dev/null. + + * faces.el (make-face-italic, make-face-bold): Don't bind f2 here. + (make-face-bold-internal, make-face-italic-internal): Bind f2 here. + (make-face-bold-italic-internal, make-face-italic-internal) + (make-face-bold-internal): New arg `font'. Callers changed. + + * loadhist.el (unload-feature): The autoload property does not + start with `autoload'. + + * faces.el (list-faces-display): Line up multiple lines in sample. + + * sh-script.el (sh-set-shell): Obey sh-query-for-magic in all cases. + + Thu Jun 30 23:49:08 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * tcl-mode.el (tcl-mode): Fix regexp to avoid nexted loop. + + Thu Jun 30 14:56:58 1994 Richard Stallman (rms@gnu.ai.mit.edu) + + * hideif.el (minor-mode-map-alist): Add missing quote. + + * rmail.el (rmail-highlight-headers): Do nothing if + rmail-highlighted-headers is nil. + + Thu Jun 30 02:37:55 1994 Noah Friedman (friedman@prep.ai.mit.edu) + + * rsz-mini.el (resize-minibuffer-window-restore): Don't do + anything if the window height is already 1. + + Thu Jun 30 00:40:42 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * mouse.el (mouse-drag-secondary): Don't treat end of buffer + specially when within the window. + + Wed Jun 29 14:21:50 1994 Noah Friedman (friedman@prep.ai.mit.edu) + + * comint.el (comint-password-prompt-regexp): New variable. + (comint-watch-for-password-prompt): Use it. + + Wed Jun 29 12:27:55 1994 Richard Stallman (rms@gnu.ai.mit.edu) + + * easymenu.el (easy-menu-change): New function. + + Tue Jun 28 16:21:58 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * etags.el (tag-exact-match-p): Test for point sitting after the + explicit tag name itself. + + Tue Jun 28 08:25:30 1994 enami tsugutomo (enami@sys.ptg.sony.co.jp) + + * simple.el (line-move): Don't use message or ding; just signal errors. + + Tue Jun 28 10:12:51 1994 Lawrence R. Dodd (dodd@roebling.poly.edu) + + * dired-x.el (dired-x-hands-off-my-keys): New user-defined variable. + (dired-x-bind-find-file): Use it. + (dired-x-find-file): New function to substitute find-file. + (dired-x-find-file-other-window): New function to substitute + find-file-other-window. + + Tue Jun 28 00:14:23 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * frame.el (auto-lower-mode, auto-raise-mode): Doc fixes. + + * info.el (Info-index): Fix typo: t => \t. + + Mon Jun 27 16:52:57 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * sh-script.el (sh-mode): Don't move point permanently. + + * info.el (Info-insert-dir): Capitalize `node' when inserting it. + (Info-search): Don't move point to beginning, after Info-read-subfile. + + Sat Jun 25 00:30:25 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * mouse.el (mouse-scroll-subr): Don't do anything special at eob. + (mouse-drag-region): Don't treat scrolling differently at eob. + (mouse-drag-secondary): Likewise. + + * comint.el (comint-send-input): Update markers before + actually sending the input. + + * dired.el (dired-readin): Record the directory's modtime. + (dired-internal-noselect): Offer to revert if dir has changed. + + * menu-bar.el (menu-bar-mode): Make this a global variable. + (menu-bar-mode): Make variable menu-bar-mode and default-frame-alist + consistent. + + * frame.el (frame-notice-user-settings): Make menu-bar-mode + and default-frame-alist consistent with each other. + + * simple.el (beginning-of-buffer-other-window) + (end-of-buffer-other-window): New functions. + * loaddefs.el: Key bindings for M-home and M-end. + + * ispell.el (ispell-message): Avoid an infinite loop. + + Fri Jun 24 21:42:19 1994 Karl Heuer (kwzh@nutrimat.gnu.ai.mit.edu) + + * lmenu.el (popup-menu): Allow user to select nothing. + + Fri Jun 24 11:45:18 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * paren.el (show-paren-command-hook): Use matching-paren. + Call overlay-put once for each overlay. + Wait .1 sec to see if any input comes in. + + * gnuspost.el (gnus-inews-user-name, gnus-inews-domain-name): + Use user-mail-address unless there's a reason to do otherwise. + (gnus-inews-domain-name): Delete compatibility use of gnus-your-domain. + + * add-log.el (add-log-mailing-address): Use user-mail-address. + + * startup.el (user-mail-address): New variable. + (normal-top-level): Initialize it. + + * gnus.el (gnus-summary-show-all-threads): Enable thread use. + (gnus-summary-show-thread): Enable thread use. + (gnus-summary-hide-all-threads): Enable thread use. + (gnus-summary-hide-thread): Enable thread use. + (gnus-summary-catchup-to-here): New function. + (gnus-summary-mode-map): Add menu bar menus. + (gnus-group-mode-map): Add menu bar menus. + + * timer.el (run-at-time): If REPEAT is 0, don't repeat. + + * tar-mode.el (tar-alter-one-field): Finish previous renaming change. + + * add-log.el (find-change-log): If file name specified, just use it. + + Fri Jun 24 04:08:11 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * etags.el (visit-tags-table-buffer): Don't take car of return + from tags-table-including. + + Thu Jun 23 19:54:24 1994 Karl Heuer (kwzh@nutrimat.gnu.ai.mit.edu) + + * lmenu.el (popup-menu): Convert list to same-size vector, not + singleton vector. + + Thu Jun 23 10:22:48 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * comint.el (comint-read-input-ring): Use ring-insert-at-beginning. + Insert most recent string first and only as many as we need. + Don't visit the file, just read it. + + * ring.el (ring-insert-at-beginning): New function. + + * jka-compr.el (jka-compr-partial-uncompress): Handle the case where + LEN reaches to or past the end of the data. + + * soundex.el (soundex-alist): Delete the elements that mapped into nil. + + * tar-mode.el (tar-extract): Set file name by hand before calling + set-visited-file-name. + + * tar-mode.el: Various renamings; all callers changed. + (tar-header-block-tokenize): Renamed from tokenize-tar-header-block. + (tar-header-block-checksum): Renamed from checksum-tar-header-block. + (tar-header-block-check-checksum): + Renamed from check-tar-header-block-checksum. + (tar-header-block-recompute-checksum): + Renamed from recompute-tar-header-block-checksum. + (tar-header-block-summarize): + Renamed from summarize-tar-header-block. + + * paren.el (show-paren-command-hook): Set paren foreground to white. + (show-paren-command-hook): Handle close paren rather than open paren + if point is between the two. + + * info.el (Info-next-preorder-1): New function. + (Info-mouse-follow-nearest-node): Use that. + (Info-follow-nearest-node): Use that. + + Wed Jun 22 23:32:22 1994 Ethan Bradford (ethanb@ptolemy.astro.washington.edu) + + * lpr.el (print-region-1): Don't include a space in the job name. + + Wed Jun 22 21:11:56 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu) + + * etags.el (tags-table-including): Don't call + tags-table-check-computed-list. After skipping a table not in + core, make sure TABLES is non-nil before using it. At end, find + the table in the user's list which includes FOUND. + + Wed Jun 22 18:14:36 1994 Noah Friedman (friedman@prep.ai.mit.edu) + + * rsz-mini.el (resize-minibuffer-window-exactly, + resize-minibuffer-frame, resize-minibuffer-frame-exactly): Doc + fixes. + (resize-minibuffer-frame-exactly): make default t. + (resize-minibuffer-frame-original-height): New variable. + (resize-minibuffer-setup): Set it locally in the minibuffer. + (resize-minibuffer-frame): Use it instead of minibuffer-frame-alist's + height. + (resize-minibuffer-setup): Append resize-minibuffer-window and + resize-minibuffer-frame to the end of post-command-hook, don't + insert on the front. + (resize-minibuffer-window-restore): New function. + (resize-minibuffer-setup): Put it on minibuffer-exit-hook. + + Wed Jun 22 00:04:25 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * faces.el (make-face): Return the face name, not the vector. + + * menu-bar.el: Rearrange the edit and file menus, and add separators. + + * indent.el (move-to-tab-stop): Delete unnecessary spaces + before the old point if a tab followed or follows the old point. + + * backquote.el (backquote-process): Fix criterion for using FIRSTLIST. + + * loaddefs.el (global-map): Bind M-prior. + * simple.el (scroll-other-window-down): New command. + + * env.el (setenv): Rewrite. Provide a way to unset interactively. + + Tue Jun 21 16:17:42 1994 Per Abrahamsen (abraham@eupectic.research.att.com) + + * double.el (double-prefix-only): New variable. + (double-translate-key): Use it. + + Tue Jun 21 13:46:04 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * faces.el (face-equal): Do check the underline attribute. + + * files.el (delete-auto-save-files): Doc fix. + + Mon Jun 20 17:55:33 1994 Morten Welinder (terra@diku.dk) + + * info.el (Info-directory-list): For msdos, don't check for + exec-directory != ../lib-src (since we use wrapped binaries). + + * s-region.el: Don't bind keys C-insert, C-delete, and + S-insert if they are already bound. + + Mon Jun 20 12:45:13 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * indent.el (move-to-tab-stop): Get rid of spaces before tabs + that were made by an immediately previous use of this command. + + * gnus.el (gnus-summary-next-article): Fix previous change. + + * help.el (finder-by-keyword): Add doc string and t for interactive. + + * cc-mode.el: Large changes--version 3.349. + + * jka-compr.el: Use plists to record handlers. + (jka-compr-insert-file-contents): Don't leave buffer locked. + Call the standard function, and file-local-copy, + using jka-compr-run-real-handler. + (jka-compr-file-local-copy): Call file-local-copy + using jka-compr-run-real-handler. + (jka-compr-write-region): Likewise. + (jka-compr-load): Don't alter file-name-handler-alist. + Do bind inhibit-file-name-handlers and inhibit-file-name-operation. + (jka-compr-handler): Don't alter file-name-handler-alist. + + * shell.el (shell-prefixed-directory-name): Do nothing if + comint-file-name-prefix is empty. Do not inline. + + Tue May 31 17:52:11 1994 Lars Magne Ingebrigtsen (larsi@bera.ifi.uio.no) + + * gnus-uu.el (gnus-uu-view-directory): Fixed viewing with the + `gnus-uu-asynchronous' variable set. + (gnus-uu-ctl-map): Removed the keystrokes `C-c C-v C-h' and + `C-c C-v h' from the keymap. + (gnus-uu-decode-and-view-all-articles, + (gnus-uu-decode-and-view-all-unread-articles, + (gnus-uu-decode-and-save-all-unread-articles, + (gnus-uu-decode-and-save-all-articles): Accept prefix arg for # files. + (gnus-uu-uustrip-article-as): Waits for uudecode to finish before + further treatment of the resulting files. + (gnus-uu-summary-next-subject): After decoding, if there are no + more unread articles, jump to the last article decoded. + (gnus-uu-post-encoded): Make last posting in a + series always have more than 4 lines. + + * gnus-uu.el (gnus-uu-interactive-save-original-file): Fixed + original file save when there's more that one original file. + + * gnus-uu.el (gnus-uu-view-file): Rewrote function and fixed + ask before view/save after view. + (gnus-uu-ask-to-save-file): New function. + + * gnus-uu.el (gnus-uu-interactive-set-up-windows): New function. + (gnus-uu-interactive-scan-directory) New function. + (gnus-uu-interactive-rescan-directory): New function. + (gnus-uu-ignore-files-by-name, gnus-uu-ignore-files-by-type): New vars. + (gnus-uu-interactive-execute): Change directory to work dir before + executing. + + (gnus-uu-view-directory, gnus-uu-check-for-generated-files): + Fixed bug deleting generated directories. + (gnus-uu-unpack-archives): Added error message for corrupted archives. + + Sun Jun 19 13:13:44 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * indent.el (tab-to-tab-stop): Combine new indentation with previous. + + * mailalias.el (define-mail-alias): Copy parsing code from + mailabbrev.el. New arg from-mailrc-file. + (build-mail-aliases): Pass t as new arg. + + * mouse.el (mouse-scroll-subr): + Preserve point if WINDOW's not the selected window. + (mouse-drag-region, mouse-drag-secondary): Accept any list event + as normal termination of the dragging. + + Sun Jun 19 03:56:30 1994 Erik Naggum (erik@naggum.no) + + * simple.el (blink-matching-open): Use matching-paren. + + Sun Jun 19 15:19:56 1994 Rob Riepel (riepel@Snowflake.Stanford.edu) + + * tpu-doc.el (tpu-doc-revision): Variable deleted. + + * tpu-edt.el (tpu-edt-off): Restore original global key map. + (tpu-next-file-buffer): Move to dired buffer too. + (tpu-make-file-buffer-list): New function. + (tpu-version): New version. + (tpu-set-mode-line): Added line-number-mode to mode-line. + (tpu-search-forward-exit, tpu-search-backward-exit): New functions, + key mappings. + + * tpu-extras.el: Require tpu-edt. + (tpu-extras-revision): Variable deleted. + + * tpu-mapper.el: Change size of selected screen. Reposition after + printing help. Null default directory for save. Produce minibuffer + key bindings for kp4 and kp5. + (tpu-kp4, tpu-kp5): New variables. + (tpu-mapper-revision): Variable deleted. + + * vt-control.el (vt-revision): Variable deleted. + + Sat Jun 18 09:23:23 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * sendmail.el (mail-bury): Test that rmail-summary-buffer is boundp. + + * files.el (insert-directory): Don't quote braces for shell. + + * calendar.el: Fix references to diary.el. + + * diary-lib.el: Renamed from diary.el. + + * rmailmsc.el (set-rmail-inbox-list): Use insert-before-markers. + + Fri Jun 17 23:39:42 1994 Michael D. Ernst (mernst@research.microsoft.com) + + * rmail.el (rmail-highlight-headers): Don't skip newlines, + just tab and space. + + Fri Jun 17 18:28:59 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * gnus.el (gnus-summary-next-article): Handle non-character events. + + Fri Jun 17 18:15:03 1994 Karl Heuer (kwzh@hal.gnu.ai.mit.edu) + + * dired.el (dired-build-subdir-alist): Don't let looking-at + destroy the match data. + + Fri Jun 17 09:38:56 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * files.el (make-auto-save-file-name): Double the backslashes + and convert slashes to \!. + + * finder.el (finder-commentary): Fix error message syntax. + + * autoload.el, bookmark.el, cl-*.el, cl.el, complete.el: + * mouse-sel.el, rot13.el, thingatpt.el: Fix Commentary section comments + and other section comments. + + * lisp-mnt.el (lm-section-mark): Accept extra semicolons; + accept spaces at end of line. + + * faces.el (x-create-frame-with-faces): Set the cursor color last. + + Fri Jun 17 17:41:10 1994 Kevin Rodgers (kevinr@ihs.com) + + * mailabbrev.el (build-mail-abbrevs): Pass a recursivep argument in + recursive call. + + Fri Jun 17 00:06:16 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * etags.el (tags-table-computed-list, + tags-table-computed-list-for): New variables. + (tags-table-list-pointer, tags-table-list-started-at): Doc fixes. + (tags-table-parent-pointer-list): Variable removed. + (tags-table-check-computed-list, tags-table-extend-computed-list): New + functions. + (tags-find-table-in-list): Function removed. + (tags-table-list-member): New function replaces it. + (tags-verify-table): New function, broken out of + visit-tags-table-buffer. + (tags-table-including, tags-next-table): Rewritten. + (visit-tags-table-buffer-cont): Variable removed. + (visit-tags-table-buffer): Overhauled. + (tag-exact-match-p): Disallow newline in tag string before \177. + + Thu Jun 16 10:14:47 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * mouse.el (mouse-scroll-subr): New arg WINDOW. + (mouse-drag-region, mouse-drag-secondary): Pass new arg. + + * bibtex.el (bibtex-mode): Set up comment-start locally. + + * ange-ftp.el (ange-ftp-canonize-filename): Fix wrong var name. + + Thu Jun 16 04:09:48 1994 Noah Friedman (friedman@prep.ai.mit.edu) + + * rlogin.el (rlogin-password-paranoia): Variable deleted. + (rlogin-password): Function deleted. + This functionality is handled by comint-watch-for-password-prompt. + + * rlogin.el (rlogin-filter): Function deleted. + (rlogin): Do not set the process filter to rlogin-filter. + + Wed Jun 15 22:22:33 1994 Morten Welinder (terra@diku.dk) + + * info.el (Info-directory-list): For msdos, use ";" instead of + ":" as delimiter in INFOPATH. + + Wed Jun 15 00:37:07 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * outline.el (outline-mode): Make change-major-mode-hook buffer-local. + + * dired.el (dired-build-subdir-alist): Avoid mistaking a file name + ending in a colon for a subdir header line. + + * sendmail.el (mail-send-hook): Add defvar. + (mail-send): Run mail-send-hook before the `Sending...' message. + + * etags.el (find-tag-history): New variable. + (find-tag-noselect): Set that variable. + + Tue Jun 14 22:42:00 1994 Karl Heuer (kwzh@hal.gnu.ai.mit.edu) + + * mouse.el (mouse-drag-region): Bind last-command, not this-command. + + * files.el (make-auto-save-file-name): Don't use slashes in + autosave name for a non-file buffer. + + Tue Jun 14 16:18:12 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * ispell.el (ispell-command-loop): C-g should be like X, not q. + + * fortran.el (fortran-blink-matching-do): When looking for do, + insist on nondigit after it. + + Tue Jun 14 20:06:55 1994 Ed Reingold (reingold@albert.gnu.ai.mit.edu) + + * cal-menu.el (calendar-mode-map): Change moon menu bar to pop up + a menu instead doing it directly. + (calendar-mouse-2-date-menu): Remove moon phase. + + Tue Jun 14 19:50:14 1994 Richard Stallman (rms@albert.gnu.ai.mit.edu) + + * cal-menu.el (calendar-mouse-2-date-menu): Put moon phase here. + (calendar-mode-map): Delete from here. + + Tue Jun 14 00:34:43 1994 Richard Stallman (rms@albert.gnu.ai.mit.edu) + + * simple.el (pop-global-mark): Discard entries for nonexistent buffers. + + * startup.el (inhibit-startup-echo-area-message): Doc fix. + + * avoid.el (mouse-avoidance-threshold): Renamed from ...threshhold. + + Mon Jun 13 23:40:33 1994 Richard Stallman (rms@albert.gnu.ai.mit.edu) + + * simple.el (end-of-buffer): Recenter overlay lists. + + Mon Jun 13 19:40:12 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * simple.el (pop-global-mark): Discard entries for nonexistent buffers. + + * startup.el (inhibit-startup-echo-area-message): Doc fix. + + * avoid.el (mouse-avoidance-threshold): Renamed from ...threshhold. + + * simple.el (end-of-buffer): Recenter overlay lists. + + Mon Jun 13 19:27:54 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu) + + * compile.el (compilation-error-regexp-alist): Extend first regexp + to handle Borland C++ msgs: "Warning" or "Error" before file name. + + Mon Jun 13 18:06:09 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * ispell.el (ispell-dictionary-alist): Add autoload. + Split into two subvariables. + (ispell-menu-map): Defvar and set up at top level. + Split into parts. + (ispell-menu-map-needed): New variable. + + * font-lock.el (font-lock-hack-keywords, font-lock-fontify-region): + Don't call set-buffer-modified-p if no change in its value. + + Mon Jun 13 21:31:53 1994 Lawrence R. Dodd (dodd@roebling) + + * dired-x.el (dired-man): Use internal function from man.el. + (dired-omit-files): Omit `.' and `..' by default, not all files + ending in `.'. + + Mon Jun 13 09:56:51 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * font-lock.el: Don't alter the underline face. + + * font-lock.el (c-font-lock-keywords-2): Insist on whitespace + before a label. + + * mouse.el (mouse-save-then-kill-delete-region): Turn off change hooks + for the edit operations that are not real. + + Sun Jun 12 21:09:22 1994 Johan Vromans (jv@NL.net) + + * forms.el (forms-mode): + Plug security hole by disabling `eval-buffer' unless + `enable-local-eval' is set to t. + Correct setting of `forms--mode-setup'. + (forms--local-write-file-function): New function to be used as + `local-write-file-hooks'. + (forms-mode): Use it. + (forms-find-file,forms-find-file-other-window): Locally set + `enable-local-eval' and `enable-local-variables' to t. + (forms-find-file-other-window): Remove extraneous call to + `eval-current-buffer'. + + Sun Jun 12 22:31:50 1994 Kohtala Marko (Marko.Kohtala@ntc.nokia.com) + + * info.el (Info-insert-dir): Ignore access times when comparing + file attributes. Print message while merging. Use separate + buffers for merging. Try lower case `dir' first. + + Sun Jun 12 08:53:46 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * iso-cvt.el (iso-iso2tex-trans-tab): Add a few characters. + (iso-iso2gtex-trans-tab): Likewise. + (iso-tex2iso-trans-tab): Recognize TeX accent sequences without braces. + (iso-gtex2iso-trans-tab): Likewise. + + * info.el (Info-fontify-node): Require some whitespace after *Note. + + * sendmail.el (mail): If homedir is nonexistent, don't use as default. + + Sat Jun 11 14:13:07 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * server.el (server-start): Doc fix. + + * font-lock.el (font-lock-hack-keywords): Avoid changing the narrowing. + + * tex-mode.el (latex-mode, slitex-mode): In paragraph-separate, + delete spurious \\\\ from char set. + + * isearch.el (isearch-mode-map): + Bind the ASCII-equivalent fcn keys explicitly to nil. + + * iso-cvt.el (iso-translate-conventions): Get rid of interactive spec. + + Fri Jun 10 20:56:03 1994 Morten Welinder (terra@diku.dk) + + * font-lock.el (tex-font-lock-keywords): Make the pattern for + macros respect TeX's idea of identifiers. + (font-lock-set-defaults): Don't check for 'tex-mode, but instead + for 'plain-tex-mode, 'latex-mode, and 'slitex-mode which is what + tex-mode.el uses. + + Fri Jun 10 10:13:10 1994 Boris Goldowsky (boris@mink.cs.rochester.edu) + + * avoid.el (mouse-avoidance-point-position): Fix compute-motion + call to use (X . Y) relative to window, not frame. + Avoid errors if window-start < point-min. + + Fri Jun 10 16:28:12 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * comint.el (comint-dynamic-list-completions): + No space in *Completions*. + * ispell4.el (ispell-complete-word): Likewise. + * ielm.el (ielm-complete-symbol): Likewise. + * etags.el (complete-tag): Likewise. + * complete.el (PC-do-completion): Likewise. + * lisp.el (lisp-complete-symbol): Likewise. + + * ispell.el (ispell-dictionary-alist): Fix regexp in francais. + + * dired-x.el: Require dired and dired-aux in the standard way. + + * dired-aux.el: Add provide call. + + * info.el (Info-complete-menu-item): New function. + (Info-menu): Use it to speed completion. + + * tex-mode.el (tex-start-shell): Add autoload. + + Tue Jun 7 13:47:11 1994 Richard Stallman (rms@geech.gnu.ai.mit.edu) + + * iso-cvt.el (iso-translate-conventions): + Use case-dependent search and don't alter case. + + * disp-table.el (standard-display-european): Treat 0 arg like negative. + + * ange-ftp.el (ange-ftp-canonize-filename): Preserve // after colon. + (ange-ftp-expand-file-name): Likewise. + (ange-ftp-canonize-filename): Preserve // at very beginning. + + Tue Jun 7 12:35:11 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * tex-mode.el (tex-show-print-queue): Display the tex shell buffer. + (tex-file, tex-bibtex-file): Likewise. + (latex-mode, slitex-mode): Treat \] as paragraph starter. + + Tue Jun 7 21:33:02 1994 Morten Welinder (terra@diku.dk) + + * dos-fns.el (Info-default-directory-list): Setting this no + longer needed. + + Tue Jun 7 03:47:05 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * cal-menu.el (calendar-mouse-2-date-menu): Put moon phase here. + (calendar-mode-map): Delete from here. + + * simple.el (delete-blank-lines): Doc fix. + + Mon Jun 6 04:01:24 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * indent.el (tab-stop-list): Doc fix. + + * sendmail.el (mail-bury): If showing rmail buffer that has summary, + show the summary too. + + Mon Jun 6 01:04:39 1994 Karl Heuer (kwzh@hal.gnu.ai.mit.edu) + + * menu-bar.el (menu-bar-update-buffers): Avoid excessive consing. + + Sun Jun 5 06:59:44 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * tex-mode.el (tex-file, tex-region): Display the tex shell buffer. + + * gomoku.el (gomoku-display-statistics): Use human's point of view + for wins and losses. + (gomoku-number-of-emacs-wins): Renamed from gomoku-number-of-wins. + (gomoku-number-of-human-wins): Renamed from gomoku-number-losses. + + * derived.el (derived-mode-merge-abbrev-tables): + Do nothing if OLD is nil. + + * edebug.el (edebug-emacs-19-specific): + Call x-popup-menu only if using a window system. + + * info.el (Info-directory-list): Don't use the invocation directory + unless it was used for exec-directory too. + + * gud.el (gud-massage-args): Fix error message syntax. + (gud-marker-filter, gud-find-file): Likewise. + (gud-display-line): Don't use dialog box for questions. + + Fri Jun 3 20:16:43 1994 Morten Welinder (terra@diku.dk) + + * dos-fns.el (frame-parameters): Setting this is no longer needed. + + Fri Jun 3 20:27:02 1994 Ed Reingold (reingold@albert.gnu.ai.mit.edu) + + * solar.el (solar-sunrise, solar-sunset): Fix doc string. + (solar-time-string): Rewritten. + (solar-adj-time-for-dst): New function. + (solar-sunrise-sunset, diary-sabbath-candles, + solar-equinoxes-solstices): Revised to use the rewritten and new fcns. + + * calendar.el (solar-holidays): Revised to use the rewritten and + new fcns. + + * lunar.el (lunar-phase): Revised to use the rewritten and new fcns. + + Thu Jun 2 18:15:13 1994 Richard Stallman (rms@albert.gnu.ai.mit.edu) + + * compile.el (compilation-error-regexp-alist): Stricter Lucid regexp. + + * complete.el (PC-do-completion): Clear text props from inserted text. + + * comint.el (comint-dynamic-complete-as-filename) + (comint-dynamic-complete-filename): Suppress most messages + when completing in the minibuffer. + + Wed Jun 1 14:18:06 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) + + * gnus-uu.el (gnus-uu-ctl-map): Move C-h binding to C-d. + + * mouse.el (mouse-choose-completion): If *Completion* is a special + buffer or just has a dedicated window, do something reasonable. + + * gnus.el (gnus-newsrc-to-gnus-format): In main loop, + don't try to match the ranges with the regexp. + Match just the group name and the subscribed-flag. + + Mon May 30 17:44:30 1994 Paul Eggert (eggert@twinsun.com) + + * calendar.el (calendar-mod): Remove; it was equivalent to `mod'. + All callers changed. + + Mon May 30 14:51:16 1994 Ed Reingold (reingold@albert.gnu.ai.mit.edu) + + * calendar.el (generate-calendar-month): Make highlighted text for + mouse-2 a full column (2 chars) wide, even for single-digit dates. + + Mon May 30 12:23:10 1994 Richard Stallman (rms@albert.gnu.ai.mit.edu) + + * comint.el (comint-read-input-ring): Make regexp stricter. + + * paths.el (Info-default-directory-list): Don't attach ../info. + So now configure-info-directory comes last. + Put /usr/local/info second. + + * info.el (Info-directory-list): Doc fix. + + * font-lock.el (shell-font-lock-keywords): Removed regexp for commands. + (rmail-summary-font-lock-keywords): New variable. + (font-lock-set-defaults): Use it. + + * bibtex.el (bibtex-clean-entry): Back over close delimiter carefully. + + * cal-dst.el (calendar-current-time-zone): Fix typo that + transposed DST-STARTS-TIME and DST-ENDS-TIME. + + * ange-ftp.el (ange-ftp-insert-directory): Expand file name to + check whether it is really an ftp file name. + + * cal-dst.el (calendar-daylight-savings-ends): Fix typo in put. + + * menu-bar.el (menu-bar-mode): Fix previous change. + Mon May 30 04:33:36 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) *************** *** 4211,4215 **** Mon Dec 13 10:31:05 1993 Ulrich Mueller (ulm@vsnhd1.cern.ch) - Verify papers! * gud.el (gud-mipsdbx-massage-args, gud-mipsdbx-marker-filter): New functions for dbx support on Mips under Ultrix. --- 6201,6204 ---- *************** *** 5416,5419 **** --- 7405,7409 ---- `rlogin-mode' since the latter called `comint-mode', which sets its own initial process filter. + Mon Oct 18 20:28:36 1993 Barry A. Warsaw, ITB (warsaw@anthem) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/add-log.el emacs-19.26/lisp/add-log.el *** emacs-19.25/lisp/add-log.el Mon Mar 28 18:56:49 1994 --- emacs-19.26/lisp/add-log.el Sat Jul 23 22:47:18 1994 *************** *** 44,51 **** ;; This MUST not be autoloaded, since user-login-name ;; cannot be known at Emacs dump time. ! (defvar add-log-mailing-address (concat (user-login-name) "@" (system-name)) "*Electronic mail address of user, for inclusion in ChangeLog daily headers. ! This defaults to the value returned by `user-login-name', followed by ! an `@' character, followed by the value returned by `system-name'.") (defun change-log-name () --- 44,50 ---- ;; This MUST not be autoloaded, since user-login-name ;; cannot be known at Emacs dump time. ! (defvar add-log-mailing-address user-mail-address "*Electronic mail address of user, for inclusion in ChangeLog daily headers. ! This defaults to the value of `user-mail-address'.") (defun change-log-name () *************** *** 68,120 **** (defun find-change-log (&optional file-name) "Find a change log file for \\[add-change-log-entry] and return the name. ! Optional arg FILE-NAME is a name to try first. If FILE-NAME is nil, use the value of `change-log-default-name' if non-nil. ! Failing that, use \"ChangeLog\" in the current directory. ! If the file does not exist in the named directory, successive parent ! directories are tried. Once a file is found, `change-log-default-name' is set locally in the current buffer to the complete file name." (or file-name ! (setq file-name (or change-log-default-name ! ;; Chase links in the source file ! ;; and use the change log in the dir where it points. ! (and buffer-file-name ! (file-name-directory ! (file-chase-links buffer-file-name))) ! default-directory))) ! (if (and (eq file-name change-log-default-name) ! (assq 'change-log-default-name (buffer-local-variables))) ! ;; Don't do the searching if we already have a buffer-local value. ! file-name ! ! (if (file-directory-p file-name) ! (setq file-name (expand-file-name (change-log-name) file-name))) ! ;; Chase links before visiting the file. ! ;; This makes it easier to use a single change log file ! ;; for several related directories. ! (setq file-name (file-chase-links file-name)) ! (setq file-name (expand-file-name file-name)) ! ;; Move up in the dir hierarchy till we find a change log file. ! (let ((file1 file-name) ! parent-dir) ! (while (and (not (or (get-file-buffer file1) (file-exists-p file1))) ! (progn (setq parent-dir ! (file-name-directory ! (directory-file-name ! (file-name-directory file1)))) ! ;; Give up if we are already at the root dir. ! (not (string= (file-name-directory file1) ! parent-dir)))) ! ;; Move up to the parent dir and try again. ! (setq file1 (expand-file-name ! (file-name-nondirectory (change-log-name)) ! parent-dir))) ! ;; If we found a change log in a parent, use that. ! (if (or (get-file-buffer file1) (file-exists-p file1)) ! (setq file-name file1))) ! ;; Make a local variable in this buffer so we needn't search again. ! (set (make-local-variable 'change-log-default-name) file-name) ! file-name)) ;;;###autoload --- 67,117 ---- (defun find-change-log (&optional file-name) "Find a change log file for \\[add-change-log-entry] and return the name. ! ! Optional arg FILE-NAME specifies the file to use. If FILE-NAME is nil, use the value of `change-log-default-name' if non-nil. ! Otherwise, search in the current directory and its successive parents ! for a file named `ChangeLog' (or whatever we use on this operating system). Once a file is found, `change-log-default-name' is set locally in the current buffer to the complete file name." + ;; If user specified a file name or if this buffer knows which one to use, + ;; just use that. (or file-name ! (setq file-name change-log-default-name) ! (progn ! ;; Chase links in the source file ! ;; and use the change log in the dir where it points. ! (setq file-name (or (and buffer-file-name ! (file-name-directory ! (file-chase-links buffer-file-name))) ! default-directory)) ! (if (file-directory-p file-name) ! (setq file-name (expand-file-name (change-log-name) file-name))) ! ;; Chase links before visiting the file. ! ;; This makes it easier to use a single change log file ! ;; for several related directories. ! (setq file-name (file-chase-links file-name)) ! (setq file-name (expand-file-name file-name)) ! ;; Move up in the dir hierarchy till we find a change log file. ! (let ((file1 file-name) ! parent-dir) ! (while (and (not (or (get-file-buffer file1) (file-exists-p file1))) ! (progn (setq parent-dir ! (file-name-directory ! (directory-file-name ! (file-name-directory file1)))) ! ;; Give up if we are already at the root dir. ! (not (string= (file-name-directory file1) ! parent-dir)))) ! ;; Move up to the parent dir and try again. ! (setq file1 (expand-file-name ! (file-name-nondirectory (change-log-name)) ! parent-dir))) ! ;; If we found a change log in a parent, use that. ! (if (or (get-file-buffer file1) (file-exists-p file1)) ! (setq file-name file1))))) ! ;; Make a local variable in this buffer so we needn't search again. ! (set (make-local-variable 'change-log-default-name) file-name) ! file-name) ;;;###autoload *************** *** 141,145 **** paragraph-end entry) ! (setq file-name (find-change-log file-name)) ;; Set ENTRY to the file name to use in the new entry. --- 138,142 ---- paragraph-end entry) ! (setq file-name (expand-file-name (find-change-log file-name))) ;; Set ENTRY to the file name to use in the new entry. *************** *** 164,172 **** 0 10)) ".* " (regexp-quote add-log-full-name) ! " (" (regexp-quote add-log-mailing-address))) (forward-line 1) (insert (current-time-string) " " add-log-full-name ! " (" add-log-mailing-address ")\n\n")) ;; Search only within the first paragraph. --- 161,169 ---- 0 10)) ".* " (regexp-quote add-log-full-name) ! " <" (regexp-quote add-log-mailing-address))) (forward-line 1) (insert (current-time-string) " " add-log-full-name ! " <" add-log-mailing-address ">\n\n")) ;; Search only within the first paragraph. *************** *** 362,366 **** (if (condition-case nil (and (save-excursion ! (forward-line 1) (backward-sexp 1) (beginning-of-line) --- 359,365 ---- (if (condition-case nil (and (save-excursion ! (end-of-line) ! (while (= (preceding-char) ?\\) ! (end-of-line 2)) (backward-sexp 1) (beginning-of-line) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/advice.el emacs-19.26/lisp/advice.el *** emacs-19.25/lisp/advice.el Thu Feb 24 19:56:53 1994 --- emacs-19.26/lisp/advice.el Fri Aug 5 01:30:45 1994 *************** *** 5,9 **** ;; Author: Hans Chalupsky ;; Created: 12 Dec 1992 ! ;; Version: advice.el,v 2.11 1994/02/24 22:51:43 hans Exp ;; Keywords: extensions, lisp, tools --- 5,9 ---- ;; Author: Hans Chalupsky ;; Created: 12 Dec 1992 ! ;; Version: advice.el,v 2.14 1994/08/05 03:42:04 hans Exp ;; Keywords: extensions, lisp, tools *************** *** 27,31 **** ;; advice|Hans Chalupsky|hans@cs.buffalo.edu| ;; Overloading mechanism for Emacs Lisp functions| ! ;; 1994/02/24 22:51:43|2.11|~/packages/advice.el.Z| --- 27,31 ---- ;; advice|Hans Chalupsky|hans@cs.buffalo.edu| ;; Overloading mechanism for Emacs Lisp functions| ! ;; 1994/08/05 03:42:04|2.14|~/packages/advice.el.Z| *************** *** 69,74 **** ;; (see preactivation) or activation time. ;; - Separation of advice definition and activation ! ;; - Provides generally accessible function definition (after) hooks ! ;; - Forward advice is possible (an application of definition hooks), that is ;; as yet undefined or autoload functions can be advised without having to ;; preload the file in which they are defined. --- 69,73 ---- ;; (see preactivation) or activation time. ;; - Separation of advice definition and activation ! ;; - Forward advice is possible, that is ;; as yet undefined or autoload functions can be advised without having to ;; preload the file in which they are defined. *************** *** 84,89 **** ;; - Provides manipulation mechanisms for sets of advised functions via ;; regular expressions that match advice names - ;; - Allows definition of load-hooks for arbitrary Emacs Lisp files without - ;; modification of these files ;; @ How to get Advice for Emacs-18: --- 83,86 ---- *************** *** 115,119 **** ;; @ Restrictions: ;; =============== ! ;; - This version of Advice only works for Emacs-19 or Lucid Emacs. ;; - Advised functions/macros/subrs will only exhibit their advised behavior ;; when they are invoked via their function cell. This means that advice will --- 112,118 ---- ;; @ Restrictions: ;; =============== ! ;; - This version of Advice only works for Emacs 19.26 and later. It uses ! ;; new versions of the built-in functions `fset/defalias' which are not ! ;; yet available in Lucid Emacs, hence, it won't work there. ;; - Advised functions/macros/subrs will only exhibit their advised behavior ;; when they are invoked via their function cell. This means that advice will *************** *** 125,135 **** ;; their advice was activated. - ;; @ Known bug: - ;; ============ - ;; - Using automatic activation of (forward) advice will break the - ;; function `interactive-p' when it is used in the body of a `catch' - ;; (this problem will go away once automatic advice activation gets - ;; supported by built-in functions). - ;; @ Credits: ;; ========== --- 124,127 ---- *************** *** 152,163 **** ;; Advice provides you with a lot of rope to hang yourself on very ;; easily accessible trees, so, here are a few important things you ! ;; should know: Once Advice has been started with `ad-start-advice' it ! ;; generates advised definitions of the `documentation' function, and, ! ;; if definition hooks are enabled (e.g., for forward advice), also of ! ;; `defun', `defmacro' and `fset' (if you use Jamie Zawinski's (jwz) ! ;; optimizing byte-compiler as standardly used in Emacs-19 and ! ;; Lucid Emacs-19 (Lemacs), then enabling definition hooks will also ! ;; redefine the `byte-code' subr). All these changes can be undone at ! ;; any time with `M-x ad-stop-advice'. ;; ;; If you experience any strange behavior/errors etc. that you attribute to --- 144,152 ---- ;; Advice provides you with a lot of rope to hang yourself on very ;; easily accessible trees, so, here are a few important things you ! ;; should know: Once Advice has been started with `ad-start-advice' ! ;; (which happens automatically when you load this file), it ! ;; generates an advised definition of the `documentation' function, and ! ;; it will enable automatic advice activation when functions get defined. ! ;; All of this can be undone at any time with `M-x ad-stop-advice'. ;; ;; If you experience any strange behavior/errors etc. that you attribute to *************** *** 191,212 **** ;; @ Customization: ;; ================ - ;; Part of the advice magic does not start until you call `ad-start-advice' - ;; which you can either do interactively, explicitly in your .emacs, or by - ;; putting - ;; - ;; (setq ad-start-advice-on-load t) - ;; - ;; into your .emacs which will automatically start advice when the file gets - ;; loaded. - - ;; If you want to be able to forward advise functions, that is to advise them - ;; when they are not yet defined or defined as autoloads, then you should put - ;; the following into your .emacs - ;; - ;; (setq ad-activate-on-definition t) - ;; - ;; which will activate all advice at the time the function gets actually - ;; defined/loaded. The value of this variable will not have any effect until - ;; `ad-start-advice' gets executed. ;; Look at the documentation of `ad-redefinition-action' for possible values --- 180,183 ---- *************** *** 215,218 **** --- 186,194 ---- ;; new original definition and de/activated. + ;; Look at the documentation of `ad-default-compilation-action' for possible + ;; values of this variable. Its default value is `maybe' which will compile + ;; advised definitions during activation in case the byte-compiler is already + ;; loaded. Otherwise, it will leave them uncompiled. + ;; @ Motivation: ;; ============= *************** *** 576,581 **** ;; The advised definition will get compiled either if `ad-activate' was called ;; interactively with a prefix argument, or called explicitly with its second ! ;; argument as t, or, if this was a case of forward advice if the original ! ;; definition of the function was compiled. If the advised definition was ;; constructed during "preactivation" (see below) then that definition will ;; be already compiled because it was constructed during byte-compilation of --- 552,557 ---- ;; The advised definition will get compiled either if `ad-activate' was called ;; interactively with a prefix argument, or called explicitly with its second ! ;; argument as t, or, if `ad-default-compilation-action' justifies it according ! ;; to the current system state. If the advised definition was ;; constructed during "preactivation" (see below) then that definition will ;; be already compiled because it was constructed during byte-compilation of *************** *** 692,697 **** ;; `ad-enable-regexp' and then activate or update again. ! ;; @@ Forward advice, function definition hooks: ! ;; ============================================= ;; Because most Emacs Lisp packages are loaded on demand via an autoload ;; mechanism it is essential to be able to "forward advise" functions. --- 668,673 ---- ;; `ad-enable-regexp' and then activate or update again. ! ;; @@ Forward advice, automatic advice activation: ! ;; =============================================== ;; Because most Emacs Lisp packages are loaded on demand via an autoload ;; mechanism it is essential to be able to "forward advise" functions. *************** *** 707,728 **** ;; of advice definition and activation that makes it possible to accumulate ;; advice information without having the original function already defined, ! ;; 2) special versions of the function defining functions `defun', `defmacro' ! ;; and `fset' that check for advice information whenever they define a ! ;; function. If advice information was found and forward advice is enabled ! ;; then the advice will immediately get activated when the function gets ! ;; defined. ! ;; @@@ Enabling forward advice: ! ;; ============================ ! ;; Forward advice is enabled by setting `ad-activate-on-definition' to t ! ;; and then calling `ad-start-advice' which can either be done interactively, ! ;; directly with `(ad-start-advice)' in your .emacs, or by setting ! ;; `ad-start-advice-on-load' to t before advice gets loaded. For example, ! ;; putting the following into your .emacs will enable forward advice: ! ;; ! ;; (setq ad-start-advice-on-load t) ! ;; (setq ad-activate-on-definition t) ! ;; ! ;; "Activation on definition" means, that whenever a function gets defined ;; with either `defun', `defmacro', `fset' or by loading a byte-compiled ;; file, and the function has some advice-info stored with it then that --- 683,692 ---- ;; of advice definition and activation that makes it possible to accumulate ;; advice information without having the original function already defined, ! ;; 2) special versions of the built-in functions `fset/defalias' which check ! ;; for advice information whenever they define a function. If advice ! ;; information was found then the advice will immediately get activated when ! ;; the function gets defined. ! ;; Automatic advice activation means, that whenever a function gets defined ;; with either `defun', `defmacro', `fset' or by loading a byte-compiled ;; file, and the function has some advice-info stored with it then that *************** *** 729,833 **** ;; advice will get activated right away. ! ;; If jwz's byte-compiler is used then `ad-use-jwz-byte-compiler' should ! ;; be t in order to make forward advice work with functions defined in ! ;; compiled files generated by that compiler. In v19s which use this ! ;; compiler the value of this variable will be correct automatically. ! ;; If you use a v18 Emacs in conjunction with jwz's compiler and you want ! ;; to use forward advice then you should check its value after loading ! ;; advice. If it is nil set it explicitly with ! ;; ! ;; (setq ad-use-jwz-byte-compiler t) ! ;; ! ;; along with `ad-activate-on-definition' before you start advice (see above). ! ! ;; IMPORTANT: A v18 Emacs + jwz's compiler + forward advice means performance ! ;; tradeoffs which are described below. ! ! ;; @@@ Forward advice with compiled files generated by jwz's byte-compiler: ! ;; ======================================================================== ! ;; The v18 byte-compiler only uses `defun/defmacro' to define compiled ! ;; functions, hence, providing advised versions of these functions was ! ;; sufficient to achieve forward advice. With the advent of Jamie Zawinski's ! ;; optimizing byte-compiler which is now standardly used in Emacs-19 and ! ;; Lemacs things became more complicated. jwz's compiler defines functions ! ;; in hunks of byte-code without explicit usage of `defun/defmacro'. To ! ;; still provide forward advice even in this scenario, advice defines an ! ;; advised version of the `byte-code' subr that scans its arguments for ! ;; function definitions during the loading of compiled files. While this is ! ;; no problem in a v19 Emacs, because it uses a new datatype for compiled ! ;; code objects and the `byte-code' subr is only rarely used at all, it ! ;; presents a major problem in a v18 Emacs because there calls to ! ;; `byte-code' are the only means of executing compiled code (every body of ! ;; a compiled function contains a call to `byte-code'). Because the advised ! ;; `byte-code' has to perform some extra checks every call to a compiled ! ;; function becomes more expensive. ! ! ;; Enabling forward advice leads to performance degradation in the following ! ;; situations: ! ;; - A v18 Emacs is used and the value of `ad-use-jwz-byte-compiler' is t ! ;; (either because jwz's byte-compiler is used instead of the standard v18 ! ;; compiler, or some compiled files generated by jwz's compiler are used). ! ;; - A v19 Emacs is used with some old-style v18 compiled files. ! ;; Some performance experiments I conducted showed that function call intensive ! ;; code (such as the highly recursive byte-compiler itself) slows down by a ! ;; factor of 1.8. Function call intensive code that runs while a file gets ! ;; loaded can slow down by a factor of 6! For the v19 scenario this performance ! ;; lossage would only apply to code that was loaded from old v18 compiled ! ;; files. ! ! ;; MORAL: If you use a v18 Emacs in conjunction with jwz's byte-compiler you ! ;; should think twice whether you really need forward advice. There are some ! ;; alternatives to forward advice described below that might give you what ! ;; you need without the loss of performance (that performance loss probably ! ;; outweighs by far any performance gain due to the optimizing nature of jwz's ! ;; compiler). ! ! ;; @@@ Alternatives to automatic activation of forward advice: ! ;; =========================================================== ! ;; If you use a v18 Emacs in conjunction with jwz's compiler, or you simply ! ;; don't trust the automatic activation mechanism of forward advice, then ! ;; you can use some of the following alternatives to get around that: ! ;; - Preload the file that contains the definition of the function that you ! ;; want to advice. Inelegant and wasteful, but it works. ! ;; - If the package that contains the definition of the function you want to ! ;; advise has any mode hooks, and the advised function is only used once such ! ;; a mode has been entered, then you can activate the advice in the mode ! ;; hook. Just put a form like `(ad-activate 'my-advised-fn t)' into the ! ;; hook definition. The caching mechanism will reuse advised definitions, ! ;; so calling that mode hook over and over again will not construct ! ;; advised definitions over and over again, so you won't loose any ! ;; performance. ! ;; - If your Emacs comes with file load hooks (such as v19's ! ;; `after-load-alist' mechanism), then you can put the activation form ! ;; into that, for example, add `("myfile" (ad-activate 'my-advised-fn t))' ! ;; to it to activate the advice right ater "myfile" got loaded. ! ! ;; @@@ Function definition hooks: ! ;; ============================== ! ;; Automatic activation of forward advice is implemented as an application ! ;; of a more general function definition hook mechanism. After a function ! ;; gets re/defined with `defun/defmacro/fset' or via a hunk of byte-code ! ;; during the loading of a byte-compiled file, and function definition hooks ! ;; are enabled, then all hook functions stored in `ad-definition-hooks' are ! ;; run with the variable `ad-defined-function' bound to the name of the ! ;; currently defined function. ! ! ;; Function definition hooks can be enabled with ! ;; ! ;; (setq ad-enable-definition-hooks t) ! ;; ! ;; before advice gets started with `ad-start-advice'. Setting ! ;; `ad-activate-on-definition' to t automatically enables definition hooks ! ;; regardless of the value of `ad-enable-definition-hooks'. ! ! ;; @@@ Wish list: ! ;; ============== ! ;; - The implementation of definition hooks for v19 compiled files would be ! ;; safer if jwz's byte-compiler used something like `byte-code-tl' instead ! ;; of `byte-code' to execute hunks of function defining byte-code at the ! ;; top level of compiled files. ! ;; - Definition hooks should be implemented directly as part of the C-code ! ;; that implements `fset', because then Advice wouldn't have to use all ! ;; these dirty hacks to achieve this functionality. ;; @@ Caching of advised definitions: --- 693,700 ---- ;; advice will get activated right away. ! ;; @@@ Enabling automatic advice activation: ! ;; ========================================= ! ;; Automatic advice activation is enabled by default. It can be disabled by ! ;; doint `M-x ad-stop-advice' and enabled again with `M-x ad-start-advice'. ;; @@ Caching of advised definitions: *************** *** 1955,1963 **** - ;; @@ Variable definitions: - ;; ======================== - - (defconst ad-version "2.11") - (defmacro ad-lemacs-p () ;;Expands into Non-nil constant if we run Lucid's version of Emacs-19. --- 1822,1825 ---- *************** *** 1965,1986 **** (string-match "Lucid" emacs-version)) - ;;;###autoload - (defvar ad-start-advice-on-load t - "*Non-nil will start Advice magic when this file gets loaded. - Also see function `ad-start-advice'.") ! ;;;###autoload ! (defvar ad-activate-on-definition nil ! "*Non-nil means automatic advice activation at function definition. ! Set this variable to t if you want to enable forward advice (which is ! automatic advice activation of a previously undefined function at the ! point the function gets defined/loaded/autoloaded). The value of this ! variable takes effect only during the execution of `ad-start-advice'. ! If non-nil it will enable definition hooks regardless of the value ! of `ad-enable-definition-hooks'.") ;;;###autoload (defvar ad-redefinition-action 'warn ! "*Defines what to do with redefinitions during de/activation. Redefinition occurs if a previously activated function that already has an original definition associated with it gets redefined and then de/activated. --- 1827,1839 ---- (string-match "Lucid" emacs-version)) ! ;; @@ Variable definitions: ! ;; ======================== + (defconst ad-version "2.14") + ;;;###autoload (defvar ad-redefinition-action 'warn ! "*Defines what to do with redefinitions during Advice de/activation. Redefinition occurs if a previously activated function that already has an original definition associated with it gets redefined and then de/activated. *************** *** 1993,2006 **** ;;;###autoload ! (defvar ad-definition-hooks nil ! "*List of hooks to be run after a function definition. ! The variable `ad-defined-function' will be bound to the name of ! the currently defined function when the hook function is run.") ! ! ;;;###autoload ! (defvar ad-enable-definition-hooks nil ! "*Non-nil will enable hooks to be run on function definition. ! Setting this variable is a noop unless the value of ! `ad-activate-on-definition' (which see) is nil.") --- 1846,1857 ---- ;;;###autoload ! (defvar ad-default-compilation-action 'maybe ! "*Defines whether to compile advised definitions during activation. ! A value of `always' will result in unconditional compilation, `never' will ! always avoid compilation, `maybe' will compile if the byte-compiler is already ! loaded, and `like-original' will compile if the original definition of the ! advised function is compiled or a built-in function. Every other value will ! be interpreted as `maybe'. This variable will only be considered if the ! COMPILE argument of `ad-activate' was supplied as nil.") *************** *** 2101,2107 **** ;; proper values will be available at runtime without loading the compiler: (ad-save-real-definition fset) ! (ad-save-real-definition documentation) ! (ad-save-real-definition byte-code) ! (put 'ad-real-byte-code 'byte-compile nil)) (ad-save-real-definitions) --- 1952,1956 ---- ;; proper values will be available at runtime without loading the compiler: (ad-save-real-definition fset) ! (ad-save-real-definition documentation)) (ad-save-real-definitions) *************** *** 2264,2267 **** --- 2113,2165 ---- + ;; @@ Dealing with automatic advice activation via `fset/defalias': + ;; ================================================================ + + ;; Since Emacs 19.26 the built-in versions of `fset' and `defalias' + ;; take care of automatic advice activation, hence, we don't have to + ;; hack it anymore by advising `fset/defun/defmacro/byte-code/etc'. + + ;; The functionality of the new `fset' is as follows: + ;; + ;; fset(sym,newdef) + ;; assign NEWDEF to SYM + ;; if (get SYM 'ad-advice-info) + ;; ad-activate(SYM, nil) + ;; return (symbol-function SYM) + ;; + ;; Whether advised definitions created by automatic activations will be + ;; compiled depends on the value of `ad-default-compilation-action'. + + ;; Since calling `ad-activate' in the built-in definition of `fset' can + ;; create major disasters we have to be a bit careful. One precaution is + ;; to provide a dummy definition for `ad-activate' which can be used to + ;; turn off automatic advice activation (e.g., when `ad-stop-advice' or + ;; `ad-recover-normality' are called). Another is to avoid recursive calls + ;; to `ad-activate-on' by using `ad-with-auto-activation-disabled' where + ;; appropriate, especially in a safe version of `fset'. + + ;; For now define `ad-activate' to the dummy definition: + (defun ad-activate (function &optional compile) + "Automatic advice activation is disabled. `ad-start-advice' enables it." + nil) + + ;; This is just a copy of the above: + (defun ad-activate-off (function &optional compile) + "Automatic advice activation is disabled. `ad-start-advice' enables it." + nil) + + ;; This will be t for top-level calls to `ad-activate-on': + (defvar ad-activate-on-top-level t) + + (defmacro ad-with-auto-activation-disabled (&rest body) + (` (let ((ad-activate-on-top-level nil)) + (,@ body)))) + + (defun ad-safe-fset (symbol definition) + ;; A safe `fset' which will never call `ad-activate' recursively. + (ad-with-auto-activation-disabled + (ad-real-fset symbol definition))) + + ;; @@ Access functions for original definitions: ;; ============================================ *************** *** 2283,2287 **** (defmacro ad-set-orig-definition (function definition) ! (` (ad-real-fset (ad-get-advice-info-field function 'origname) (, definition)))) --- 2181,2185 ---- (defmacro ad-set-orig-definition (function definition) ! (` (ad-safe-fset (ad-get-advice-info-field function 'origname) (, definition)))) *************** *** 2599,2603 **** (if (and (not (fboundp 'byte-code-function-p)) (fboundp 'compiled-function-p)) ! (ad-real-fset 'byte-code-function-p 'compiled-function-p)) (defmacro ad-compiled-p (definition) --- 2497,2501 ---- (if (and (not (fboundp 'byte-code-function-p)) (fboundp 'compiled-function-p)) ! (ad-safe-fset 'byte-code-function-p 'compiled-function-p)) (defmacro ad-compiled-p (definition) *************** *** 2670,2679 **** ;; names from the docstring are more meaningful. Hence, I'll stick with ;; the old way of doing things. ! (t (let ((doc (ad-real-documentation subr-name t))) ! (cond ((and doc ! (string-match ! "[\n\t ]*\narguments: ?\\((.*)\\)\n?\\'" doc)) (ad-define-subr-args subr-name (car (read-from-string doc (match-beginning 1) (match-end 1)))) --- 2568,2586 ---- ;; names from the docstring are more meaningful. Hence, I'll stick with ;; the old way of doing things. ! (t (let ((doc (or (ad-real-documentation subr-name t) ""))) ! (cond ((string-match "^\\(([^\)]+)\\)\n?\\'" doc) (ad-define-subr-args subr-name + (cdr (car (read-from-string + (downcase + (substring doc + (match-beginning 1) + (match-end 1))))))) + (ad-get-subr-args subr-name)) + ;; this is the old format used before Emacs 19.24: + ((string-match + "[\n\t ]*\narguments: ?\\((.*)\\)\n?\\'" doc) + (ad-define-subr-args + subr-name (car (read-from-string doc (match-beginning 1) (match-end 1)))) *************** *** 2778,2782 **** (interactive "aByte-compile function: ") (if (ad-is-compilable function) ! (byte-compile function))) --- 2685,2692 ---- (interactive "aByte-compile function: ") (if (ad-is-compilable function) ! ;; Need to turn off auto-activation ! ;; because `byte-compile' uses `fset': ! (ad-with-auto-activation-disabled ! (byte-compile function)))) *************** *** 3470,3474 **** (ad-enable-advice function class (ad-advice-name advice)) (ad-clear-cache function) ! (ad-activate function nil) (if (and (ad-is-active function) (ad-get-cache-definition function)) --- 3380,3384 ---- (ad-enable-advice function class (ad-advice-name advice)) (ad-clear-cache function) ! (ad-activate-on function -1) (if (and (ad-is-active function) (ad-get-cache-definition function)) *************** *** 3478,3495 **** ;; Don't `fset' function to nil if it was previously unbound: (if function-defined-p ! (ad-real-fset function old-definition) (fmakunbound function))))) (defun ad-activate-advised-definition (function compile) ;;"Redefines FUNCTION with its advised definition from cache or scratch. ! ;;If COMPILE is true the resulting FUNCTION will be compiled. The current ! ;;definition and its cache-id will be put into the cache." (let ((verified-cached-definition (if (ad-verify-cache-id function) (ad-get-cache-definition function)))) ! (ad-real-fset function (or verified-cached-definition (ad-make-advised-definition function))) ! (if compile (ad-compile-function function)) (if verified-cached-definition (if (not (eq verified-cached-definition (symbol-function function))) --- 3388,3514 ---- ;; Don't `fset' function to nil if it was previously unbound: (if function-defined-p ! (ad-safe-fset function old-definition) (fmakunbound function))))) + + ;; @@ Freezing: + ;; ============ + ;; Freezing transforms a `defadvice' into a redefining `defun/defmacro' + ;; for the advised function without keeping any advice information. This + ;; feature was jwz's idea: It generates a dumpable function definition + ;; whose documentation can be written to the DOC file, and the generated + ;; code does not need any Advice runtime support. Of course, frozen advices + ;; cannot be undone. + + ;; Freezing only considers the advice of the particular `defadvice', other + ;; already existing advices for the same function will be ignored. To ensure + ;; proper interaction when an already advised function gets redefined with + ;; a frozen advice, frozen advices always use the actual original definition + ;; of the function, i.e., they are always at the core of the onion. E.g., if + ;; an already advised function gets redefined with a frozen advice and then + ;; unadvised, the frozen advice remains as the new definition of the function. + + ;; While multiple freeze advices for a single function or freeze-advising + ;; of an already advised function are possible, they are better avoided, + ;; because definition/compile/load ordering is relevant, and it becomes + ;; incomprehensible pretty quickly. + + (defun ad-make-freeze-definition (function advice class position) + (if (not (ad-has-proper-definition function)) + (error + "ad-make-freeze-definition: `%s' is not yet defined" + function)) + (let* ((name (ad-advice-name advice)) + ;; With a unique origname we can have multiple freeze advices + ;; for the same function, each overloading the previous one: + (unique-origname + (intern (format "%s-%s-%s" (ad-make-origname function) class name))) + (orig-definition + ;; If FUNCTION is already advised, we'll use its current origdef + ;; as the original definition of the frozen advice: + (or (ad-get-orig-definition function) + (symbol-function function))) + (old-advice-info + (if (ad-is-advised function) + (ad-copy-advice-info function))) + (real-docstring-fn + (symbol-function 'ad-make-advised-definition-docstring)) + (real-origname-fn + (symbol-function 'ad-make-origname)) + (frozen-definition + (unwind-protect + (progn + ;; Make sure we construct a proper docstring: + (ad-safe-fset 'ad-make-advised-definition-docstring + 'ad-make-freeze-docstring) + ;; Make sure `unique-origname' is used as the origname: + (ad-safe-fset 'ad-make-origname '(lambda (x) unique-origname)) + ;; No we reset all current advice information to nil and + ;; generate an advised definition that's solely determined + ;; by ADVICE and the current origdef of FUNCTION: + (ad-set-advice-info function nil) + (ad-add-advice function advice class position) + ;; The following will provide proper real docstrings as + ;; well as a definition that will make the compiler happy: + (ad-set-orig-definition function orig-definition) + (ad-make-advised-definition function)) + ;; Restore the old advice state: + (ad-set-advice-info function old-advice-info) + ;; Restore functions: + (ad-safe-fset + 'ad-make-advised-definition-docstring real-docstring-fn) + (ad-safe-fset 'ad-make-origname real-origname-fn)))) + (if frozen-definition + (let* ((macro-p (ad-macro-p frozen-definition)) + (body (cdr (if macro-p + (ad-lambdafy frozen-definition) + frozen-definition)))) + (` (progn + (if (not (fboundp '(, unique-origname))) + (fset '(, unique-origname) + ;; avoid infinite recursion in case the function + ;; we want to freeze is already advised: + (or (ad-get-orig-definition '(, function)) + (symbol-function '(, function))))) + ((, (if macro-p 'defmacro 'defun)) + (, function) + (,@ body)))))))) + + + ;; @@ Activation and definition handling: + ;; ====================================== + + (defun ad-should-compile (function compile) + ;;"Returns non-nil if the advised FUNCTION should be compiled. + ;;If COMPILE is non-nil and not a negative number then it returns t. + ;;If COMPILE is a negative number then it returns nil. + ;;If COMPILE is nil then the result depends on the value of + ;;`ad-default-compilation-action' (which see)." + (if (integerp compile) + (>= compile 0) + (if compile + compile + (cond ((eq ad-default-compilation-action 'never) + nil) + ((eq ad-default-compilation-action 'always) + t) + ((eq ad-default-compilation-action 'like-original) + (or (ad-subr-p (ad-get-orig-definition function)) + (ad-compiled-p (ad-get-orig-definition function)))) + ;; everything else means `maybe': + (t (featurep 'byte-compile)))))) + (defun ad-activate-advised-definition (function compile) ;;"Redefines FUNCTION with its advised definition from cache or scratch. ! ;;The resulting FUNCTION will be compiled if `ad-should-compile' returns t. ! ;;The current definition and its cache-id will be put into the cache." (let ((verified-cached-definition (if (ad-verify-cache-id function) (ad-get-cache-definition function)))) ! (ad-safe-fset function (or verified-cached-definition (ad-make-advised-definition function))) ! (if (ad-should-compile function compile) ! (ad-compile-function function)) (if verified-cached-definition (if (not (eq verified-cached-definition (symbol-function function))) *************** *** 3529,3533 **** function "illegally redefined") (if (eq ad-redefinition-action 'discard) ! (ad-real-fset function original-definition) (ad-set-orig-definition function current-definition) (if (eq ad-redefinition-action 'warn) --- 3548,3552 ---- function "illegally redefined") (if (eq ad-redefinition-action 'discard) ! (ad-safe-fset function original-definition) (ad-set-orig-definition function current-definition) (if (eq ad-redefinition-action 'warn) *************** *** 3548,3552 **** ;; ================================== ! (defun ad-activate (function &optional compile) "Activates all the advice information of an advised FUNCTION. If FUNCTION has a proper original definition then an advised --- 3567,3571 ---- ;; ================================== ! (defun ad-activate-on (function &optional compile) "Activates all the advice information of an advised FUNCTION. If FUNCTION has a proper original definition then an advised *************** *** 3553,3563 **** definition will be generated from FUNCTION's advice info and the definition of FUNCTION will be replaced with it. If a previously ! cached advised definition was available, it will be used. With an ! argument (COMPILE is non-nil) the resulting function (or a compilable ! cached definition) will also be compiled. Activation of an advised ! function that has an advice info but no actual pieces of advice is ! equivalent to a call to `ad-unadvise'. Activation of an advised ! function that has actual pieces of advice but none of them are enabled ! is equivalent to a call to `ad-deactivate'. The current advised definition will always be cached for later usage." (interactive --- 3572,3585 ---- definition will be generated from FUNCTION's advice info and the definition of FUNCTION will be replaced with it. If a previously ! cached advised definition was available, it will be used. ! The optional COMPILE argument determines whether the resulting function ! or a compilable cached definition will be compiled. If it is negative ! no compilation will be performed, if it is positive or otherwise non-nil ! the resulting function will be compiled, if it is nil the behavior depends ! on the value of `ad-default-compilation-action' (which see). ! Activation of an advised function that has an advice info but no actual ! pieces of advice is equivalent to a call to `ad-unadvise'. Activation of ! an advised function that has actual pieces of advice but none of them are ! enabled is equivalent to a call to `ad-deactivate'. The current advised definition will always be cached for later usage." (interactive *************** *** 3564,3582 **** (list (ad-read-advised-function "Activate advice of: ") current-prefix-arg)) ! (if (not (ad-is-advised function)) ! (error "ad-activate: `%s' is not advised" function) ! (ad-handle-definition function) ! ;; Just return for forward advised and not yet defined functions: ! (if (ad-get-orig-definition function) ! (if (not (ad-has-any-advice function)) ! (ad-unadvise function) ! ;; Otherwise activate the advice: ! (cond ((ad-has-redefining-advice function) ! (ad-activate-advised-definition function compile) ! (ad-set-advice-info-field function 'active t) ! (eval (ad-make-hook-form function 'activation)) ! function) ! ;; Here we are if we have all disabled advices: ! (t (ad-deactivate function))))))) (defun ad-deactivate (function) --- 3586,3607 ---- (list (ad-read-advised-function "Activate advice of: ") current-prefix-arg)) ! (if ad-activate-on-top-level ! ;; avoid recursive calls to `ad-activate-on': ! (ad-with-auto-activation-disabled ! (if (not (ad-is-advised function)) ! (error "ad-activate: `%s' is not advised" function) ! (ad-handle-definition function) ! ;; Just return for forward advised and not yet defined functions: ! (if (ad-get-orig-definition function) ! (if (not (ad-has-any-advice function)) ! (ad-unadvise function) ! ;; Otherwise activate the advice: ! (cond ((ad-has-redefining-advice function) ! (ad-activate-advised-definition function compile) ! (ad-set-advice-info-field function 'active t) ! (eval (ad-make-hook-form function 'activation)) ! function) ! ;; Here we are if we have all disabled advices: ! (t (ad-deactivate function))))))))) (defun ad-deactivate (function) *************** *** 3595,3599 **** (error "ad-deactivate: `%s' has no original definition" function) ! (ad-real-fset function (ad-get-orig-definition function)) (ad-set-advice-info-field function 'active nil) (eval (ad-make-hook-form function 'deactivation)) --- 3620,3624 ---- (error "ad-deactivate: `%s' has no original definition" function) ! (ad-safe-fset function (ad-get-orig-definition function)) (ad-set-advice-info-field function 'active nil) (eval (ad-make-hook-form function 'deactivation)) *************** *** 3602,3607 **** (defun ad-update (function &optional compile) "Update the advised definition of FUNCTION if its advice is active. ! With a prefix argument or if the current definition is compiled compile the ! resulting advised definition." (interactive (list (ad-read-advised-function --- 3627,3631 ---- (defun ad-update (function &optional compile) "Update the advised definition of FUNCTION if its advice is active. ! See `ad-activate-on' for documentation on the optional COMPILE argument." (interactive (list (ad-read-advised-function *************** *** 3608,3613 **** "Update advised definition of: " 'ad-is-active))) (if (ad-is-active function) ! (ad-activate ! function (or compile (ad-compiled-p (symbol-function function)))))) (defun ad-unadvise (function) --- 3632,3636 ---- "Update advised definition of: " 'ad-is-active))) (if (ad-is-active function) ! (ad-activate-on function compile))) (defun ad-unadvise (function) *************** *** 3635,3639 **** (cond ((ad-is-advised function) (cond ((ad-get-orig-definition function) ! (ad-real-fset function (ad-get-orig-definition function)) (ad-clear-orig-definition function))) (ad-set-advice-info function nil) --- 3658,3662 ---- (cond ((ad-is-advised function) (cond ((ad-get-orig-definition function) ! (ad-safe-fset function (ad-get-orig-definition function)) (ad-clear-orig-definition function))) (ad-set-advice-info function nil) *************** *** 3642,3646 **** (defun ad-activate-regexp (regexp &optional compile) "Activates functions with an advice name containing a REGEXP match. ! With prefix argument compiles resulting advised definitions." (interactive (list (ad-read-regexp "Activate via advice regexp: ") --- 3665,3669 ---- (defun ad-activate-regexp (regexp &optional compile) "Activates functions with an advice name containing a REGEXP match. ! See `ad-activate-on' for documentation on the optional COMPILE argument." (interactive (list (ad-read-regexp "Activate via advice regexp: ") *************** *** 3648,3652 **** (ad-do-advised-functions (function) (if (ad-find-some-advice function 'any regexp) ! (ad-activate function compile)))) (defun ad-deactivate-regexp (regexp) --- 3671,3675 ---- (ad-do-advised-functions (function) (if (ad-find-some-advice function 'any regexp) ! (ad-activate-on function compile)))) (defun ad-deactivate-regexp (regexp) *************** *** 3660,3664 **** (defun ad-update-regexp (regexp &optional compile) "Updates functions with an advice name containing a REGEXP match. ! With prefix argument compiles resulting advised definitions." (interactive (list (ad-read-regexp "Update via advice regexp: ") --- 3683,3687 ---- (defun ad-update-regexp (regexp &optional compile) "Updates functions with an advice name containing a REGEXP match. ! See `ad-activate-on' for documentation on the optional COMPILE argument." (interactive (list (ad-read-regexp "Update via advice regexp: ") *************** *** 3670,3677 **** (defun ad-activate-all (&optional compile) "Activates all currently advised functions. ! With prefix argument compiles resulting advised definitions." (interactive "P") (ad-do-advised-functions (function) ! (ad-activate function))) (defun ad-deactivate-all () --- 3693,3700 ---- (defun ad-activate-all (&optional compile) "Activates all currently advised functions. ! See `ad-activate-on' for documentation on the optional COMPILE argument." (interactive "P") (ad-do-advised-functions (function) ! (ad-activate-on function compile))) (defun ad-deactivate-all () *************** *** 3752,3756 **** `freeze': Expands the `defadvice' into a redefining `defun/defmacro' according ! to the current advice state. No other advice information will be saved. Frozen advices cannot be undone, they behave like a hard redefinition of the advised function. `freeze' implies `activate' and `preactivate'. The --- 3775,3779 ---- `freeze': Expands the `defadvice' into a redefining `defun/defmacro' according ! to this particular single advice. No other advice information will be saved. Frozen advices cannot be undone, they behave like a hard redefinition of the advised function. `freeze' implies `activate' and `preactivate'. The *************** *** 3792,3829 **** (preactivation (if (memq 'preactivate flags) (ad-preactivate-advice ! function advice class position))) ! unique-origname ! (redefinition ! (if (memq 'freeze flags) ! (ad-with-originals (ad-make-advised-definition-docstring ! ad-make-origname) ! ;; Make sure we construct the actual docstring: ! (fset 'ad-make-advised-definition-docstring ! 'ad-make-freeze-docstring) ! ;; With a unique origname we can have multiple freeze advices ! ;; for the same function, each overloading the previous one: ! (setq unique-origname ! (intern (format "%s-%s-%s" ! (ad-make-origname function) class name))) ! (fset 'ad-make-origname '(lambda (x) unique-origname)) ! (if (not (ad-has-proper-definition function)) ! (error ! "defadvice: `freeze' needs proper definition of `%s'" ! function)) ! (ad-preactivate-advice function advice class position))))) ;; Now for the things to be done at evaluation time: ! (if redefinition ;; jwz's idea: Freeze the advised definition into a dumpable ;; defun/defmacro whose docs can be written to the DOC file: ! (let* ((macro-p (ad-macro-p (car redefinition))) ! (body (cdr (if macro-p ! (ad-lambdafy (car redefinition)) ! (car redefinition))))) ! (` (progn ! (if (not (fboundp '(, unique-origname))) ! (fset '(, unique-origname) (symbol-function '(, function)))) ! ((, (if macro-p 'defmacro 'defun)) ! (, function) ! (,@ body))))) ;; the normal case: (` (progn --- 3815,3824 ---- (preactivation (if (memq 'preactivate flags) (ad-preactivate-advice ! function advice class position)))) ;; Now for the things to be done at evaluation time: ! (if (memq 'freeze flags) ;; jwz's idea: Freeze the advised definition into a dumpable ;; defun/defmacro whose docs can be written to the DOC file: ! (ad-make-freeze-definition function advice class position) ;; the normal case: (` (progn *************** *** 3842,3847 **** '(, (car (cdr preactivation)))))))) (,@ (if (memq 'activate flags) ! (` ((ad-activate '(, function) ! (, (if (memq 'compile flags) t))))))) '(, function)))))) --- 3837,3842 ---- '(, (car (cdr preactivation)))))))) (,@ (if (memq 'activate flags) ! (` ((ad-activate-on '(, function) ! (, (if (memq 'compile flags) t))))))) '(, function)))))) *************** *** 3875,3879 **** (lambda (function) (setq index (1+ index)) ! (` (ad-real-fset '(, function) (or (ad-get-orig-definition '(, function)) --- 3870,3874 ---- (lambda (function) (setq index (1+ index)) ! (` (ad-safe-fset '(, function) (or (ad-get-orig-definition '(, function)) *************** *** 3889,3893 **** (lambda (function) (setq index (1+ index)) ! (` (ad-real-fset '(, function) (, (car (nth index current-bindings))))))) --- 3884,3888 ---- (lambda (function) (setq index (1+ index)) ! (` (ad-safe-fset '(, function) (, (car (nth index current-bindings))))))) *************** *** 3898,3974 **** ! ;; @@ Advising `defun', `defmacro', `fset' and `documentation' ! ;; =========================================================== ! ;; Use the advice mechanism to advise defun/defmacro/fset so we can forward ! ;; advise functions that might be defined later during load/autoload. ! ;; Enabling forward advice was the original motivation for doing this, it ! ;; has now been generalized to running definition hooks so other packages ! ;; can make use of this sort of functionality too. ! ! (defvar ad-defined-function nil) ! ! (defun ad-activate-defined-function (&optional function) ! "Activates the advice of an advised and defined FUNCTION. ! If the current definition of FUNCTION is byte-compiled then the advised ! definition will be compiled too. FUNCTION defaults to the value of ! `ad-defined-function'." ! (if (and (null function) ! ad-defined-function) ! (setq function ad-defined-function)) ! (if (and (ad-is-advised function) ! (ad-real-definition function)) ! (ad-activate function (ad-compiled-p (symbol-function function))))) ! ! (defvar ad-advised-definers ! '(defun defmacro fset defalias define-function)) ! ! (defadvice defun (after ad-definition-hooks first disable preact) ! "Whenever a function gets re/defined with `defun' all hook functions ! in `ad-definition-hooks' will be run after the re/definition with ! `ad-defined-function' bound to the name of the function." ! (let ((ad-defined-function (ad-get-arg 0))) ! (run-hooks 'ad-definition-hooks))) ! ! (defadvice defmacro (after ad-definition-hooks first disable preact) ! "Whenever a macro gets re/defined with `defmacro' all hook functions ! in `ad-definition-hooks' will be run after the re/definition with ! `ad-defined-function' bound to the name of the function." ! (let ((ad-defined-function (ad-get-arg 0))) ! (run-hooks 'ad-definition-hooks))) ! ! (defadvice fset (after ad-definition-hooks first disable preact) ! "Whenever a function gets re/defined with `fset' all hook functions ! in `ad-definition-hooks' will be run after the re/definition with ! `ad-defined-function' bound to the name of the function. This advice was ! mainly created to handle forward-advice for byte-compiled files created ! by jwz's byte-compiler used in Lemacs. ! CAUTION: If you need the primitive `fset' behavior either deactivate ! its advice or use `ad-real-fset' instead!" ! (let ((ad-defined-function (ad-get-arg 0))) ! (run-hooks 'ad-definition-hooks))) ! ! ;; In Lemacs this is just a noop: ! (defadvice defalias (after ad-definition-hooks first disable preact) ! "Whenever a function gets re/defined with `defalias' all hook functions ! in `ad-definition-hooks' will be run after the re/definition with ! `ad-defined-function' bound to the name of the function." ! (let ((ad-defined-function (ad-get-arg 0))) ! ;; The new `byte-compile' uses `defalias' to set the definition which ! ;; leads to infinite recursion if it gets to use the advised version ! ;; (with `fset' this didn't matter because the compiled `byte-compile' ! ;; called it via its byte-code). Should there be a general provision to ! ;; avoid recursive application of definition hooks? ! (ad-with-originals (defalias) ! (run-hooks 'ad-definition-hooks)))) ! ! ;; Needed for Emacs (seems to be an identical copy of `defalias', but ! ;; it is used in `simple.el' and might be used later, hence, advise it): ! (defadvice define-function (after ad-definition-hooks first disable preact) ! "Whenever a function gets re/defined with `define-function' all hook ! functions in `ad-definition-hooks' will be run after the re/definition with ! `ad-defined-function' bound to the name of the function." ! (let ((ad-defined-function (ad-get-arg 0))) ! (ad-with-originals (define-function) ! (run-hooks 'ad-definition-hooks)))) (defadvice documentation (after ad-advised-docstring first disable preact) --- 3893,3900 ---- ! ;; @@ Advising `documentation': ! ;; ============================ ! ;; Use the advice mechanism to advise `documentation' to make it ! ;; generate proper documentation strings for advised definitions: (defadvice documentation (after ad-advised-docstring first disable preact) *************** *** 3989,4245 **** (substitute-command-keys ad-return-value)))))))) - ;; The following two advised functions are a (hopefully temporary) kludge - ;; to fix a problem with the compilation of embedded (or non-top-level) - ;; `defun/defmacro's when automatic activation of advice is enabled. For - ;; the time of the compilation they backdefine `defun/defmacro' to their - ;; original definition to make sure they are not treated as plain macros. - ;; Both advices are forward advices, hence, they will only be activated if - ;; automatic advice activation is enabled, but since that is the actual - ;; situation where we have a problem, we can be sure that the advices will - ;; be active when we need them. - - ;; We only need this in Lemacs, because in Emacs it is - ;; now taken care of directly by the byte-compiler: - (cond ((ad-lemacs-p) - - (defvar ad-advised-byte-compilers - '(byte-compile-from-buffer byte-compile-top-level)) - - (defadvice byte-compile-from-buffer (around ad-deactivate-defun-defmacro - first disable preact) - "Deactivates `defun/defmacro' for proper compilation when they are embedded." - (let (;; make sure no `require' starts them again by accident: - (ad-advised-definers '(fset defalias define-function))) - (ad-with-originals (defun defmacro) - ad-do-it))) - - (defadvice byte-compile-top-level (around ad-deactivate-defun-defmacro - first disable preact) - "Deactivates `defun/defmacro' for proper compilation when they are embedded." - (let (;; make sure no `require' starts them again by accident: - (ad-advised-definers '(fset defalias define-function))) - (ad-with-originals (defun defmacro) - ad-do-it))) - - )) ;; end of cond - - ;; Make sure advice-infos are not allocated in pure space - ;; (this might not be necessary anymore): - (ad-dolist (advised-function (cons 'documentation - (append ad-advised-definers - (if (ad-lemacs-p) - ad-advised-byte-compilers)))) - (ad-set-advice-info advised-function (ad-copy-advice-info advised-function))) - - - ;; @@ Forward advice support for jwz's byte-compiler (M-x serious-HACK-mode-on) - ;; ============================================================================ - ;; Jamie Zawinski's optimizing byte-compiler used in v19 (and by some daring - ;; folks in v18) produces compiled files that do not define functions via - ;; explicit calls to `defun/defmacro', it rather uses `fset' for functions with - ;; documentation strings, and hunks of byte-code for sets of functions without - ;; any documentation. In Jamie's byte-compiler a series of compiled functions - ;; without docstrings get hunked as - ;; (progn (fset 'f1 ) (fset 'f2 ) ...). - ;; The resulting progn will be compiled and the compiled form will be written - ;; to the compiled file as `(byte-code [progn-code] [constants] [depth])'. To - ;; handle forward advice we have to know when functions get defined so we can - ;; activate any advice there might be. For standard v18 byte-compiled files - ;; we can do this by simply advising `defun/defmacro' because these subrs are - ;; evaluated explicitly when such a file is loaded. For Jamie's v19 compiler - ;; our only choice is to additionally advise `fset' and change the subr - ;; `byte-code' such that it analyzes its byte-code string looking for fset's - ;; when we are currently loading a file. In v19 the general overhead caused - ;; by the advice of `byte-code' shouldn't be too bad, because byte-compiled - ;; functions do not call byte-code explicitly (as done in v18). In v18 this - ;; is a problem because with the changed `byte-code' function function calls - ;; become more expensive. - ;; - ;; Wish-List: - ;; - special defining functions for use in byte-compiled files, e.g., - ;; `byte-compile-fset' and `byte-code-tl' which do the same as their - ;; standard brothers, but which can be advised for forward advice without - ;; the problems that advising `byte-code' generates. - ;; - More generally, a symbol definition hook that could be used for - ;; forward advice and related purposes. - ;; - ;; Until then: For the analysis of the byte-code string we simply scan it for - ;; an `fset' opcode (M in ascii) that is preceded by two constant references, - ;; the first of which points to the function name and the second to its code. - ;; A constant reference can either be a simple one-byte one, or a three-byte - ;; one if the function has more than 64 constants. The scanning can pretty - ;; efficiently be done with a regular expression. Here it goes: - - ;; Have to hardcode these opcodes if I don't - ;; want to require the byte-compiler: - (defvar byte-constant 192) - (defvar byte-constant-limit 64) - (defvar byte-constant2 129) - (defvar byte-fset 77) - - ;; Matches a byte-compiled fset operation with two constant arguments: - (defvar ad-byte-code-fset-regexp - (let* ((constant-reference - (format "[%s-%s]" - (char-to-string byte-constant) - (char-to-string (+ byte-constant (1- byte-constant-limit))))) - (constant2-reference - ;; \0 makes it necessary to use concat instead of format in 18.57: - (concat (char-to-string byte-constant2) "[\0-\377][\0-\377]")) - (fset-opcode (char-to-string byte-fset))) - (concat "\\(" constant-reference "\\|" constant2-reference "\\)" - "\\(" constant-reference "\\|" constant2-reference "\\)" - fset-opcode))) - - (defun ad-find-fset-in-byte-code (code constants start) - ;;"Finds the first two-constant fset operation in CODE after START. - ;;Returns a three element list consisting of the name of the defined - ;;function, its code (both taken from the CONSTANTS vector), and an - ;;advanced start index." - (let ((start - ;; The odd case that this regexp matches something that isn't an - ;; actual fset operation is handled by additional tests and a - ;; condition handler in ad-scan-byte-code-for-fsets: - (string-match ad-byte-code-fset-regexp code start)) - name-index code-index) - (cond (start - (cond ((= (aref code start) byte-constant2) - (setq name-index - (+ (aref code (setq start (1+ start))) - (* (aref code (setq start (1+ start))) 256))) - (setq start (1+ start))) - (t (setq name-index (- (aref code start) byte-constant)) - (setq start (1+ start)))) - (cond ((= (aref code start) byte-constant2) - (setq code-index - (+ (aref code (setq start (1+ start))) - (* (aref code (setq start (1+ start))) 256))) - (setq start (1+ start))) - (t (setq code-index (- (aref code start) byte-constant)) - (setq start (1+ start)))) - (list (aref constants name-index) - (aref constants code-index) - ;; start points to fset opcode: - start)) - (t nil)))) - - (defun ad-scan-byte-code-for-fsets (ad-code ad-constants) - ;; In case anything in here goes wrong we reset `byte-code' to its real - ;; identity. In particular, the handler of the condition-case uses - ;; `byte-code', so it better be the real one if we have an error: - (ad-real-fset 'byte-code (symbol-function 'ad-real-byte-code)) - (condition-case nil - (let ((fset-args '(0 0 0))) - (while (setq fset-args (ad-find-fset-in-byte-code - ad-code ad-constants - (car (cdr (cdr fset-args))))) - (if (and (symbolp (car fset-args)) - (fboundp (car fset-args)) - (eq (symbol-function (car fset-args)) - (car (cdr fset-args)))) - ;; We've found an fset that was executed during this call - ;; to byte-code, and whose definition is still eq to the - ;; current definition of the defined function: - (let ((ad-defined-function (car fset-args))) - (run-hooks 'ad-definition-hooks)))) - ;; Everything worked fine, readvise `byte-code': - (ad-real-fset 'byte-code (symbol-function 'ad-advised-byte-code))) - (error nil))) - - ;; CAUTION: Don't try this at home!! Changing `byte-code' is a - ;; pretty suicidal activity. - ;; To allow v19 forward advice we cannot advise `byte-code' as a subr as - ;; we did for `defun' etc., because `ad-subr-args' of the advised - ;; `byte-code' would shield references to `ad-subr-args' in the body of - ;; v18 compiled advised subrs such as `defun', and, more importantly, the - ;; changed version of `byte-code' has to be as small and efficient as - ;; possible because it is used in every call to a compiled function. - ;; Hence, we previously saved its original definition and redefine it as - ;; the following function - yuck: - - ;; The arguments will scope around the body of every byte-compiled - ;; function, hence they have to be obscure enough to not be equal to any - ;; global or argument variable referenced by any compiled function: - (defun ad-advised-byte-code (ad-cOdE ad-cOnStAnTs ad-dEpTh) - "Modified version of `byte-code' subr used by the Advice package. - `byte-code' has been modified to allow automatic activation of forward - advice for functions that are defined in byte-compiled files. - See `ad-real-byte-code' for original documentation." - (prog1 (ad-real-byte-code ad-cOdE ad-cOnStAnTs ad-dEpTh) - (if load-in-progress - (ad-scan-byte-code-for-fsets ad-cOdE ad-cOnStAnTs)))) - - (defun ad-recover-byte-code () - "Recovers the real `byte-code' functionality." - (interactive) - (ad-real-fset 'byte-code (symbol-function 'ad-real-byte-code))) - - (defun ad-enable-definition-hooks () - ;;"Enables definition hooks by redefining definition primitives. - ;;Activates the advice of defun/defmacro/fset and redefines `byte-code'. - ;;Redefining these primitives might lead to problems. Use - ;;`ad-disable-definition-hooks' or `ad-stop-advice' in such a case - ;;to establish a safe state." - (ad-dolist (definer ad-advised-definers) - (ad-enable-advice definer 'after 'ad-definition-hooks) - (ad-activate definer 'compile)) - (if (ad-lemacs-p) - (ad-dolist (byte-compiler ad-advised-byte-compilers) - (ad-enable-advice byte-compiler 'around 'ad-deactivate-defun-defmacro) - (ad-activate byte-compiler 'compile))) - ;; Now redefine byte-code... - (ad-real-fset 'byte-code (symbol-function 'ad-advised-byte-code))) - - (defun ad-disable-definition-hooks () - ;;"Disables definition hooks by resetting definition primitives." - (ad-recover-byte-code) - (ad-dolist (definer ad-advised-definers) - (ad-disable-advice definer 'after 'ad-definition-hooks) - (ad-update definer)) - (if (ad-lemacs-p) - (ad-dolist (byte-compiler ad-advised-byte-compilers) - (ad-disable-advice byte-compiler 'around 'ad-deactivate-defun-defmacro) - (ad-update byte-compiler 'compile)))) - ;; @@ Starting, stopping and recovering from the advice package magic: ;; =================================================================== - ;;;###autoload (defun ad-start-advice () ! "Redefines some primitives to start the advice magic. ! If `ad-activate-on-definition' is t then advice information will ! automatically get activated whenever an advised function gets defined or ! redefined. This will enable goodies such as forward advice and ! automatically enable function definition hooks. If its value is nil but ! the value of `ad-enable-definition-hooks' is t then definition hooks ! will be enabled without having automatic advice activation, otherwise ! function definition hooks will be disabled too. If definition hooks are ! enabled then functions stored in `ad-definition-hooks' are run whenever ! a function gets defined or redefined." (interactive) (ad-enable-advice 'documentation 'after 'ad-advised-docstring) ! (ad-activate 'documentation 'compile) ! (if (or ad-activate-on-definition ! ad-enable-definition-hooks) ! (ad-enable-definition-hooks) ! (ad-disable-definition-hooks)) ! (setq ad-definition-hooks ! (if ad-activate-on-definition ! (if (memq 'ad-activate-defined-function ad-definition-hooks) ! ad-definition-hooks ! (cons 'ad-activate-defined-function ad-definition-hooks)) ! (delq 'ad-activate-defined-function ad-definition-hooks)))) (defun ad-stop-advice () ! "Undefines some primitives to stop the advice magic. ! This can also be used to recover from advice related emergencies." (interactive) ! (ad-recover-byte-code) (ad-disable-advice 'documentation 'after 'ad-advised-docstring) (ad-update 'documentation) ! (ad-disable-definition-hooks) ! (setq ad-definition-hooks ! (delq 'ad-activate-defined-function ad-definition-hooks))) (defun ad-recover-normality () --- 3915,3940 ---- (substitute-command-keys ad-return-value)))))))) ;; @@ Starting, stopping and recovering from the advice package magic: ;; =================================================================== (defun ad-start-advice () ! "Starts the automatic advice handling magic." (interactive) + ;; Advising `ad-activate' means death!! + (ad-set-advice-info 'ad-activate nil) + (ad-safe-fset 'ad-activate 'ad-activate-on) (ad-enable-advice 'documentation 'after 'ad-advised-docstring) ! (ad-activate-on 'documentation 'compile)) (defun ad-stop-advice () ! "Stops the automatic advice handling magic. ! You should only need this in case of Advice-related emergencies." (interactive) ! ;; Advising `ad-activate' means death!! ! (ad-set-advice-info 'ad-activate nil) (ad-disable-advice 'documentation 'after 'ad-advised-docstring) (ad-update 'documentation) ! (ad-safe-fset 'ad-activate 'ad-activate-off)) (defun ad-recover-normality () *************** *** 4247,4261 **** Use only in REAL emergencies." (interactive) ! (ad-recover-byte-code) (ad-recover-all) (setq ad-advised-functions nil)) ! (if (and ad-start-advice-on-load ! ;; ...but only if we are compiled: ! (ad-compiled-p (symbol-function 'ad-start-advice))) ! (ad-start-advice)) (provide 'advice) ;;; advice.el ends here - --- 3942,3959 ---- Use only in REAL emergencies." (interactive) ! ;; Advising `ad-activate' means death!! ! (ad-set-advice-info 'ad-activate nil) ! (ad-safe-fset 'ad-activate 'ad-activate-off) (ad-recover-all) (setq ad-advised-functions nil)) ! ;; Until the Advice-related changes to `data.c' are part of Lemacs we ! ;; have to load the old implementation of advice activation hooks: ! (if (ad-lemacs-p) ! (require 'ad-hooks)) + (ad-start-advice) + (provide 'advice) ;;; advice.el ends here diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/ange-ftp.el emacs-19.26/lisp/ange-ftp.el *** emacs-19.25/lisp/ange-ftp.el Mon May 30 06:09:16 1994 --- emacs-19.26/lisp/ange-ftp.el Sun Jul 31 14:22:25 1994 *************** *** 852,856 **** ;;;; ------------------------------------------------------------ ! (defconst ange-ftp-version "$Revision: 1.53 $") (defvar ange-ftp-data-buffer-name " *ftp data*" --- 852,856 ---- ;;;; ------------------------------------------------------------ ! (defconst ange-ftp-version "$Revision: 1.56 $") (defvar ange-ftp-data-buffer-name " *ftp data*" *************** *** 1158,1167 **** (defun ange-ftp-parse-netrc-group () - (beginning-of-line) (let ((start (point)) ! (end (progn (re-search-forward "machine\\|default" ! (point-max) 'end 2) (point))) machine login password account) - (goto-char start) (setq machine (ange-ftp-parse-netrc-token "machine" end) login (ange-ftp-parse-netrc-token "login" end) --- 1158,1177 ---- (defun ange-ftp-parse-netrc-group () (let ((start (point)) ! (end (save-excursion ! (if (looking-at "machine\\>") ! ;; Skip `machine' and the machine name that follows. ! (progn ! (skip-chars-forward "^ \t\n") ! (skip-chars-forward " \t\n") ! (skip-chars-forward "^ \t\n")) ! ;; Skip `default'. ! (skip-chars-forward "^ \t\n")) ! ;; Find start of the next `machine' or `default' ! ;; or the end of the buffer. ! (if (re-search-forward "machine\\>\\|default\\>" nil t) ! (match-beginning 0) ! (point-max)))) machine login password account) (setq machine (ange-ftp-parse-netrc-token "machine" end) login (ange-ftp-parse-netrc-token "login" end) *************** *** 1220,1223 **** --- 1230,1234 ---- (setq buffer-file-name nil) (goto-char (point-min)) + (skip-chars-forward " \t\n") (while (not (eobp)) (ange-ftp-parse-netrc-group)) *************** *** 2749,2753 **** (defun ange-ftp-canonize-filename (n) "Take a string and short-circuit //, /. and /.." ! (if (string-match ".+//" n) ;don't upset Apollo users (setq n (substring n (1- (match-end 0))))) (let ((parsed (ange-ftp-ftp-name n))) --- 2760,2764 ---- (defun ange-ftp-canonize-filename (n) "Take a string and short-circuit //, /. and /.." ! (if (string-match "[^:]+//" n) ;don't upset Apollo users (setq n (substring n (1- (match-end 0))))) (let ((parsed (ange-ftp-ftp-name n))) *************** *** 2784,2793 **** (error "Unable to obtain CWD"))))) ! (setq name (ange-ftp-real-expand-file-name name)) ! ! ;; see if hit real expand-file-name bug... this will probably annoy ! ;; some Apollo people. I'll wait until they shout, however. ! (if (string-match "^//" name) ! (setq name (substring name 1))) ;; Now substitute the expanded name back into the overall filename. --- 2795,2805 ---- (error "Unable to obtain CWD"))))) ! ;; If name starts with //, preserve that, for apollo system. ! (if (not (string-match "^//" name)) ! (progn ! (setq name (ange-ftp-real-expand-file-name name)) ! ! (if (string-match "^//" name) ! (setq name (substring name 1))))) ;; Now substitute the expanded name back into the overall filename. *************** *** 2805,2809 **** (ange-ftp-save-match-data (if (eq (string-to-char name) ?/) ! (while (cond ((string-match ".+//" name) ;don't upset Apollo users (setq name (substring name (1- (match-end 0))))) ((string-match "/~" name) --- 2817,2821 ---- (ange-ftp-save-match-data (if (eq (string-to-char name) ?/) ! (while (cond ((string-match "[^:]+//" name) ;don't upset Apollo users (setq name (substring name (1- (match-end 0))))) ((string-match "/~" name) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/appt.el emacs-19.26/lisp/appt.el *** emacs-19.25/lisp/appt.el Tue May 3 18:26:38 1994 --- emacs-19.26/lisp/appt.el Tue Aug 9 19:16:23 1994 *************** *** 66,70 **** ;;; The following three lines are required: ;;; (display-time) - ;;; (autoload 'appt-make-list "appt.el" nil t) ;;; (add-hook 'diary-hook 'appt-make-list) ;;; --- 66,69 ---- *************** *** 118,121 **** --- 117,123 ---- ;;; Code: + ;; Make sure calendar is loaded when we compile this. + (require 'calendar) + ;;;###autoload (defvar appt-issue-message t *************** *** 248,255 **** (cur-comp-time (+ (* cur-hour 60) cur-min))) ! ;; If the time is 12:01am, we should update our ! ;; appointments to todays list. ! (if (= cur-comp-time 1) (if (and view-diary-entries-initially appt-display-diary) (diary) --- 250,258 ---- (cur-comp-time (+ (* cur-hour 60) cur-min))) ! ;; At the first check after 12:01am, we should update our ! ;; appointments to today's list. ! (if (and (>= cur-comp-time 1) ! (<= cur-comp-time appt-display-interval)) (if (and view-diary-entries-initially appt-display-diary) (diary) *************** *** 446,516 **** ;; 12:00pm lunch ;; Wednesday ! ;; 10:00am group meeting" ;;;###autoload (defun appt-make-list () ! (setq appt-time-msg-list nil) ! ! (save-excursion ! (if diary-entries-list ! ;; Cycle through the entry-list (diary-entries-list) ! ;; looking for entries beginning with a time. If ! ;; the entry begins with a time, add it to the ! ;; appt-time-msg-list. Then sort the list. ! ! (let ((entry-list diary-entries-list) ! (new-time-string "")) ! (while (and entry-list ! (calendar-date-equal ! (calendar-current-date) (car (car entry-list)))) ! (let ((time-string (substring (prin1-to-string ! (cdr (car entry-list))) 2 -2))) ! ! (while (string-match ! "[0-9]?[0-9]:[0-9][0-9]\\(am\\|pm\\)?.*" ! time-string) ! (let* ((appt-time-string (substring time-string ! (match-beginning 0) ! (match-end 0)))) ! ! (if (< (match-end 0) (length time-string)) ! (setq new-time-string (substring time-string ! (+ (match-end 0) 1) ! nil)) ! (setq new-time-string "")) ! ! (string-match "[0-9]?[0-9]:[0-9][0-9]\\(am\\|pm\\)?" ! time-string) ! ! (let* ((appt-time (list (appt-convert-time ! (substring time-string ! (match-beginning 0) ! (match-end 0))))) ! (time-msg (cons appt-time ! (list appt-time-string)))) ! (setq time-string new-time-string) ! (setq appt-time-msg-list (append appt-time-msg-list ! (list time-msg))))))) ! (setq entry-list (cdr entry-list))))) ! (setq appt-time-msg-list (appt-sort-list appt-time-msg-list)) ! ! ;; Get the current time and convert it to minutes ! ;; from midnight. ie. 12:01am = 1, midnight = 0, ! ;; so that the elements in the list ! ;; that are earlier than the present time can ! ;; 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))))) ! ! (while (and appt-time-msg-list (< appt-comp-time cur-comp-time)) ! (setq appt-time-msg-list (cdr appt-time-msg-list)) ! (if appt-time-msg-list ! (setq appt-comp-time (car (car (car appt-time-msg-list))))))))) --- 449,538 ---- ;; 12:00pm lunch ;; Wednesday ! ;; 10:00am group meeting ! ;; We assume that the variables DATE and NUMBER ! ;; hold the arguments that list-diary-entries received. ! ;; They specify the range of dates that the diary is being processed for. ;;;###autoload (defun appt-make-list () ! ;; We have something to do if the range of dates that the diary is ! ;; considering includes the current date. ! (if (and (not (calendar-date-compare ! (list (calendar-current-date)) ! (list original-date))) ! (calendar-date-compare ! (list (calendar-current-date)) ! (list (calendar-gregorian-from-absolute ! (+ (calendar-absolute-from-gregorian original-date) ! number))))) ! (save-excursion ! ;; Clear the appointments list, then fill it in from the diary. ! (setq appt-time-msg-list nil) ! (if diary-entries-list ! ! ;; Cycle through the entry-list (diary-entries-list) ! ;; looking for entries beginning with a time. If ! ;; the entry begins with a time, add it to the ! ;; appt-time-msg-list. Then sort the list. ! ! (let ((entry-list diary-entries-list) ! (new-time-string "")) ! ;; Skip diary entries for dates before today. ! (while (and entry-list ! (calendar-date-compare ! (car entry-list) (list (calendar-current-date)))) ! (setq entry-list (cdr entry-list))) ! ;; Parse the entries for today. ! (while (and entry-list ! (calendar-date-equal ! (calendar-current-date) (car (car entry-list)))) ! (let ((time-string (substring (prin1-to-string ! (cdr (car entry-list))) 2 -2))) ! ! (while (string-match ! "[0-9]?[0-9]:[0-9][0-9]\\(am\\|pm\\)?.*" ! time-string) ! (let* ((appt-time-string (substring time-string ! (match-beginning 0) ! (match-end 0)))) ! (if (< (match-end 0) (length time-string)) ! (setq new-time-string (substring time-string ! (+ (match-end 0) 1) ! nil)) ! (setq new-time-string "")) ! ! (string-match "[0-9]?[0-9]:[0-9][0-9]\\(am\\|pm\\)?" ! time-string) ! ! (let* ((appt-time (list (appt-convert-time ! (substring time-string ! (match-beginning 0) ! (match-end 0))))) ! (time-msg (cons appt-time ! (list appt-time-string)))) ! (setq time-string new-time-string) ! (setq appt-time-msg-list (append appt-time-msg-list ! (list time-msg))))))) ! (setq entry-list (cdr entry-list))))) ! (setq appt-time-msg-list (appt-sort-list appt-time-msg-list)) ! ! ;; Get the current time and convert it to minutes ! ;; from midnight. ie. 12:01am = 1, midnight = 0, ! ;; so that the elements in the list ! ;; that are earlier than the present time can ! ;; 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))))) ! ! (while (and appt-time-msg-list (< appt-comp-time cur-comp-time)) ! (setq appt-time-msg-list (cdr appt-time-msg-list)) ! (if appt-time-msg-list ! (setq appt-comp-time (car (car (car appt-time-msg-list)))))))))) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/autoload.el emacs-19.26/lisp/autoload.el *** emacs-19.25/lisp/autoload.el Thu May 12 14:53:31 1994 --- emacs-19.26/lisp/autoload.el Fri Jun 17 16:04:19 1994 *************** *** 22,26 **** ;;; ! ;;; Commentary;: ;; This code helps GNU Emacs maintainers keep the loaddefs.el file up to --- 22,26 ---- ;;; ! ;;; Commentary: ;; This code helps GNU Emacs maintainers keep the loaddefs.el file up to diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/avoid.el emacs-19.26/lisp/avoid.el *** emacs-19.25/lisp/avoid.el Thu May 19 18:13:36 1994 --- emacs-19.26/lisp/avoid.el Mon Jun 13 20:10:52 1994 *************** *** 84,88 **** "*Average distance that mouse will be moved when approached by cursor. Only applies in mouse-avoidance-mode `jump' and its derivatives. ! For best results make this larger than `mouse-avoidance-threshhold'.") (defvar mouse-avoidance-nudge-var 10 --- 84,88 ---- "*Average distance that mouse will be moved when approached by cursor. Only applies in mouse-avoidance-mode `jump' and its derivatives. ! For best results make this larger than `mouse-avoidance-threshold'.") (defvar mouse-avoidance-nudge-var 10 *************** *** 92,96 **** "Delay between animation steps, in seconds.") ! (defvar mouse-avoidance-threshhold 5 "*Mouse-pointer's flight distance. If the cursor gets closer than this, the mouse pointer will move away. --- 92,96 ---- "Delay between animation steps, in seconds.") ! (defvar mouse-avoidance-threshold 5 "*Mouse-pointer's flight distance. If the cursor gets closer than this, the mouse pointer will move away. *************** *** 110,125 **** (edges (window-edges w)) (list ! (compute-motion (window-start w) ; start pos ! (cons (car edges) (car (cdr edges))) ; start XY (point) ; stop pos ! (cons (nth 2 edges) (nth 3 edges)) ; stop XY: none (1- (window-width)) ; width ! (cons (window-hscroll w) 0) ; 0 may not be right? (selected-window)))) ;; compute-motion returns (pos HPOS VPOS prevhpos contin) ;; we want: (frame hpos . vpos) ! (setcar list (selected-frame)) ! (setcdr (cdr list) (car (cdr (cdr list)))) ! list)) (defun mouse-avoidance-set-mouse-position (pos) --- 110,133 ---- (edges (window-edges w)) (list ! (compute-motion (max (window-start w) (point-min)) ; start pos ! ;; window-start can be < point-min if the ! ;; latter has changed since the last redisplay ! '(0 . 0) ; start XY (point) ; stop pos ! (cons (window-width) (window-height)); stop XY: none (1- (window-width)) ; width ! (cons (window-hscroll w) 0) ; 0 may not be right? (selected-window)))) ;; compute-motion returns (pos HPOS VPOS prevhpos contin) ;; we want: (frame hpos . vpos) ! (cons (selected-frame) ! (cons (+ (car edges) (car (cdr list))) ! (+ (car (cdr edges)) (car (cdr (cdr list)))))))) ! ! ;(defun mouse-avoidance-point-position-test () ! ; (interactive) ! ; (message (format "point=%s mouse=%s" ! ; (cdr (mouse-avoidance-point-position)) ! ; (cdr (mouse-position))))) (defun mouse-avoidance-set-mouse-position (pos) *************** *** 136,140 **** (defun mouse-avoidance-too-close-p (mouse) ;; Return t if mouse pointer and point cursor are too close. ! ;; Acceptable distance is defined by mouse-avoidance-threshhold. (let ((point (mouse-avoidance-point-position))) (and (eq (car mouse) (car point)) --- 144,148 ---- (defun mouse-avoidance-too-close-p (mouse) ;; Return t if mouse pointer and point cursor are too close. ! ;; Acceptable distance is defined by mouse-avoidance-threshold. (let ((point (mouse-avoidance-point-position))) (and (eq (car mouse) (car point)) *************** *** 141,147 **** (car (cdr mouse)) (< (abs (- (car (cdr mouse)) (car (cdr point)))) ! mouse-avoidance-threshhold) (< (abs (- (cdr (cdr mouse)) (cdr (cdr point)))) ! mouse-avoidance-threshhold)))) (defun mouse-avoidance-banish-destination () --- 149,155 ---- (car (cdr mouse)) (< (abs (- (car (cdr mouse)) (car (cdr point)))) ! mouse-avoidance-threshold) (< (abs (- (cdr (cdr mouse)) (cdr (cdr point)))) ! mouse-avoidance-threshold)))) (defun mouse-avoidance-banish-destination () *************** *** 304,308 **** Whenever the mouse is moved, the frame is also raised. ! \(see `mouse-avoidance-threshhold' for definition of \"too close\", and `mouse-avoidance-nudge-dist' and `mouse-avoidance-nudge-var' for definition of \"random distance\".)" --- 312,316 ---- Whenever the mouse is moved, the frame is also raised. ! \(see `mouse-avoidance-threshold' for definition of \"too close\", and `mouse-avoidance-nudge-dist' and `mouse-avoidance-nudge-var' for definition of \"random distance\".)" diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/backquote.el emacs-19.26/lisp/backquote.el *** emacs-19.25/lisp/backquote.el Fri May 6 20:13:09 1994 --- emacs-19.26/lisp/backquote.el Mon Jul 11 20:42:58 1994 *************** *** 91,95 **** (defvar backquote-splice-symbol ',@ ! "*Symbol used to represent a splice (e.g. `,'@) inside a backquote.") ;;;###autoload --- 91,95 ---- (defvar backquote-splice-symbol ',@ ! "*Symbol used to represent a splice (e.g. `,@') inside a backquote.") ;;;###autoload *************** *** 161,167 **** (cond ((= (car item) 2) ! (if (null firstlist) (setq firstlist list list nil)) (if list (setq lists (cons (backquote-listify list '(0 . nil)) lists))) --- 161,170 ---- (cond ((= (car item) 2) ! ;; Put the nonspliced items before the first spliced item ! ;; into FIRSTLIST. ! (if (null lists) (setq firstlist list list nil)) + ;; Otherwise, put any preceding nonspliced items into LISTS. (if list (setq lists (cons (backquote-listify list '(0 . nil)) lists))) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/bibtex.el emacs-19.26/lisp/bibtex.el *** emacs-19.25/lisp/bibtex.el Mon May 30 06:30:39 1994 --- emacs-19.26/lisp/bibtex.el Thu Jun 16 11:11:54 1994 *************** *** 700,703 **** --- 700,705 ---- (setq local-abbrev-table bibtex-mode-abbrev-table) (make-local-variable 'paragraph-start) + (make-local-variable 'comment-start) + (setq comment-start "%") (setq paragraph-start "^[ \f\n\t]*$") (auto-fill-mode 1) ; nice alignments diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/bookmark.el emacs-19.26/lisp/bookmark.el *** emacs-19.25/lisp/bookmark.el Fri May 20 17:18:53 1994 --- emacs-19.26/lisp/bookmark.el Fri Jun 17 16:03:51 1994 *************** *** 68,72 **** ;; Choice (both in Chicago's Chinatown). Well, both. How about you? ! ;;; Commentary on code: ;; bookmark alist format: --- 68,72 ---- ;; Choice (both in Chicago's Chinatown). Well, both. How about you? ! ;;; Commentary: ;; bookmark alist format: diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/buff-menu.el emacs-19.26/lisp/buff-menu.el *** emacs-19.25/lisp/buff-menu.el Mon May 23 04:22:12 1994 --- emacs-19.26/lisp/buff-menu.el Thu Jul 28 02:21:46 1994 *************** *** 80,83 **** --- 80,84 ---- (define-key Buffer-menu-mode-map "t" 'Buffer-menu-visit-tags-table) (define-key Buffer-menu-mode-map "%" 'Buffer-menu-toggle-read-only) + (define-key Buffer-menu-mode-map "g" 'revert-buffer) (define-key Buffer-menu-mode-map [mouse-2] 'Buffer-menu-mouse-select) ) *************** *** 126,132 **** --- 127,138 ---- (put-text-property (car where) (cdr where) 'mouse-face 'highlight)) (forward-line 1))) + (make-local-variable 'revert-buffer-function) + (setq revert-buffer-function 'Buffer-menu-revert-function) (setq truncate-lines t) (setq buffer-read-only t) (run-hooks 'buffer-menu-mode-hook)) + + (defun Buffer-menu-revert-function (ignore1 ignore2) + (list-buffers)) (defun Buffer-menu-buffer (error-if-non-existent-p) *************** *** 159,164 **** ;;; (setq Buffer-menu-window-config (current-window-configuration)) (list-buffers arg) ! (pop-to-buffer "*Buffer List*") ! (forward-line 2) (message "Commands: d, s, x, u; f, o, 1, 2, m, v; ~, %%; q to quit; ? for help.")) --- 165,172 ---- ;;; (setq Buffer-menu-window-config (current-window-configuration)) (list-buffers arg) ! (let ((newpoint (save-excursion (set-buffer "*Buffer List*") ! (point)))) ! (pop-to-buffer "*Buffer List*") ! (goto-char newpoint)) (message "Commands: d, s, x, u; f, o, 1, 2, m, v; ~, %%; q to quit; ? for help.")) *************** *** 237,253 **** (forward-line 1)))) ! (defun Buffer-menu-not-modified () "Mark buffer on this line as unmodified (no changes to save)." ! (interactive) (save-excursion (set-buffer (Buffer-menu-buffer t)) ! (set-buffer-modified-p nil)) (save-excursion (beginning-of-line) (forward-char 1) ! (if (looking-at "\\*") (let ((buffer-read-only nil)) (delete-char 1) ! (insert ? ))))) (defun Buffer-menu-execute () --- 245,261 ---- (forward-line 1)))) ! (defun Buffer-menu-not-modified (&optional arg) "Mark buffer on this line as unmodified (no changes to save)." ! (interactive "P") (save-excursion (set-buffer (Buffer-menu-buffer t)) ! (set-buffer-modified-p arg)) (save-excursion (beginning-of-line) (forward-char 1) ! (if (= (char-after (point)) (if arg ? ?*)) (let ((buffer-read-only nil)) (delete-char 1) ! (insert (if arg ?* ? )))))) (defun Buffer-menu-execute () diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/byte-opt.el emacs-19.26/lisp/byte-opt.el *** emacs-19.25/lisp/byte-opt.el Tue May 3 18:44:48 1994 --- emacs-19.26/lisp/byte-opt.el Sat Aug 6 15:25:03 1994 *************** *** 1084,1087 **** --- 1084,1089 ---- ;;; and by the disassembler. ;;; + ;;; This list contains numbers, which are pc values, + ;;; before each instruction. (defun byte-decompile-bytecode (bytes constvec) "Turns BYTECODE into lapcode, referring to CONSTVEC." *************** *** 1093,1099 **** ;; As byte-decompile-bytecode, but updates ;; byte-compile-{constants, variables, tag-number}. ! ;; If the optional 3rd arg is true, then `return' opcodes are replaced ;; with `goto's destined for the end of the code. ! (defun byte-decompile-bytecode-1 (bytes constvec &optional make-splicable) (let ((length (length bytes)) (ptr 0) optr tag tags op offset --- 1095,1105 ---- ;; As byte-decompile-bytecode, but updates ;; byte-compile-{constants, variables, tag-number}. ! ;; If MAKE-SPLICEABLE is true, then `return' opcodes are replaced ;; with `goto's destined for the end of the code. ! ;; That is for use by the compiler. ! ;; If MAKE-SPLICEABLE is nil, we are being called for the disassembler. ! ;; In that case, we put a pc value into the list ! ;; before each insn (or its label). ! (defun byte-decompile-bytecode-1 (bytes constvec &optional make-spliceable) (let ((length (length bytes)) (ptr 0) optr tag tags op offset *************** *** 1102,1105 **** --- 1108,1113 ---- (retcount 0)) (while (not (= ptr length)) + (or make-spliceable + (setq lap (cons ptr lap))) (setq op (aref bytes ptr) optr ptr *************** *** 1123,1127 **** (cons (list tmp) byte-compile-variables))))))) ! ((and make-splicable (eq op 'byte-return)) (if (= ptr (1- length)) --- 1131,1135 ---- (cons (list tmp) byte-compile-variables))))))) ! ((and make-spliceable (eq op 'byte-return)) (if (= ptr (1- length)) *************** *** 1136,1140 **** (let ((rest lap)) (while rest ! (cond ((setq tmp (assq (car (car rest)) tags)) ;; this addr is jumped to (setcdr rest (cons (cons nil (cdr tmp)) --- 1144,1149 ---- (let ((rest lap)) (while rest ! (cond ((numberp (car rest))) ! ((setq tmp (assq (car (car rest)) tags)) ;; this addr is jumped to (setcdr rest (cons (cons nil (cdr tmp)) *************** *** 1149,1153 **** (setq lap (cons (cons nil endtag) lap))) ;; remove addrs, lap = ( [ (op . arg) | (TAG tagno) ]* ) ! (mapcar 'cdr (nreverse lap)))) --- 1158,1166 ---- (setq lap (cons (cons nil endtag) lap))) ;; remove addrs, lap = ( [ (op . arg) | (TAG tagno) ]* ) ! (mapcar (function (lambda (elt) ! (if (numberp elt) ! elt ! (cdr elt)))) ! (nreverse lap)))) *************** *** 1165,1172 **** byte-eq byte-equal byte-not byte-cons byte-list1 byte-list2 ; byte-list3 byte-list4 ! byte-interactive-p ! ;; How about other side-effect-free-ops? Is it safe to move an ! ;; error invocation (such as from nth) out of an unwind-protect? ! "Byte-codes that can be moved past an unbind.")) (defconst byte-compile-side-effect-and-error-free-ops --- 1178,1185 ---- byte-eq byte-equal byte-not byte-cons byte-list1 byte-list2 ; byte-list3 byte-list4 ! byte-interactive-p) ! ;; How about other side-effect-free-ops? Is it safe to move an ! ;; error invocation (such as from nth) out of an unwind-protect? ! "Byte-codes that can be moved past an unbind.") (defconst byte-compile-side-effect-and-error-free-ops diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/bytecomp.el emacs-19.26/lisp/bytecomp.el *** emacs-19.25/lisp/bytecomp.el Tue May 3 18:14:02 1994 --- emacs-19.26/lisp/bytecomp.el Thu Aug 4 17:47:06 1994 *************** *** 835,839 **** (let* ((list (if macro-p byte-compile-macro-environment ! byte-compile-function-environment)) (env (cdr (assq name list)))) (or env --- 835,839 ---- (let* ((list (if macro-p byte-compile-macro-environment ! byte-compile-function-environment)) (env (cdr (assq name list)))) (or env *************** *** 900,904 **** (if (eq 'lambda (car-safe def)) (nth 1 def) ! (aref def 0))))) (ncall (length (cdr form)))) (if sig --- 900,906 ---- (if (eq 'lambda (car-safe def)) (nth 1 def) ! (if (compiled-function-p def) ! (aref def 0) ! '(&rest def)))))) (ncall (length (cdr form)))) (if sig *************** *** 933,937 **** (if (eq 'lambda (car-safe old)) (nth 1 old) ! (aref old 0)))) (sig2 (byte-compile-arglist-signature (nth 2 form)))) (or (byte-compile-arglist-signatures-congruent-p sig1 sig2) --- 935,941 ---- (if (eq 'lambda (car-safe old)) (nth 1 old) ! (if (compiled-function-p old) ! (aref old 0) ! '(&rest def))))) (sig2 (byte-compile-arglist-signature (nth 2 form)))) (or (byte-compile-arglist-signatures-congruent-p sig1 sig2) *************** *** 1247,1336 **** - (defmacro byte-compile-protect-from-advice (&rest body) - ;; Temporarily deactivates advice of `defun/defmacro' while BODY is run. - ;; After completion of BODY the initial advice state is reinstated. - ;; If `defun/defmacro' are actively advised during compilation then the - ;; compilation of nested `defun/defmacro's produces incorrect code which - ;; is the motivation for this macro. It calls the functions `ad-is-active', - ;; `ad-activate' and `ad-deactivate' which will be reported as undefined - ;; functions during the compilation of the compiler. - (` (let (;; make sure no `require' activates them by - ;; accident via a call to `ad-start-advice': - (ad-advised-definers '(fset defalias define-function)) - defun-active-p defmacro-active-p) - (cond (;; check whether Advice is loaded: - (fboundp 'ad-scan-byte-code-for-fsets) - ;; save activation state of `defun/defmacro' and - ;; deactivate them if their advice is active: - (if (setq defun-active-p (ad-is-active 'defun)) - (ad-deactivate 'defun)) - (if (setq defmacro-active-p (ad-is-active 'defmacro)) - (ad-deactivate 'defmacro)))) - (unwind-protect - (progn - (,@ body)) - ;; reactivate what was active before: - (if defun-active-p - (ad-activate 'defun)) - (if defmacro-active-p - (ad-activate 'defmacro)))))) - (defun byte-compile-from-buffer (inbuffer &optional filename) ;; Filename is used for the loading-into-Emacs-18 error message. ! (byte-compile-protect-from-advice ! (let (outbuffer) ! (let (;; Prevent truncation of flonums and lists as we read and print them ! (float-output-format nil) ! (case-fold-search nil) ! (print-length nil) ! ;; Simulate entry to byte-compile-top-level ! (byte-compile-constants nil) ! (byte-compile-variables nil) ! (byte-compile-tag-number 0) ! (byte-compile-depth 0) ! (byte-compile-maxdepth 0) ! (byte-compile-output nil) ! ;; #### This is bound in b-c-close-variables. ! ;; (byte-compile-warnings (if (eq byte-compile-warnings t) ! ;; byte-compile-warning-types ! ;; byte-compile-warnings)) ! ) ! (byte-compile-close-variables ! (save-excursion ! (setq outbuffer ! (set-buffer (get-buffer-create " *Compiler Output*"))) ! (erase-buffer) ! ;; (emacs-lisp-mode) ! (setq case-fold-search nil) ! ! ;; This is a kludge. Some operating systems (OS/2, DOS) need to ! ;; write files containing binary information specially. ! ;; Under most circumstances, such files will be in binary ! ;; overwrite mode, so those OS's use that flag to guess how ! ;; they should write their data. Advise them that .elc files ! ;; need to be written carefully. ! (setq overwrite-mode 'overwrite-mode-binary)) ! (displaying-byte-compile-warnings ! (save-excursion ! (set-buffer inbuffer) ! (goto-char 1) ! (while (progn ! (while (progn (skip-chars-forward " \t\n\^l") ! (looking-at ";")) ! (forward-line 1)) ! (not (eobp))) ! (byte-compile-file-form (read inbuffer))) ! ;; Compile pending forms at end of file. ! (byte-compile-flush-pending) ! (and filename (byte-compile-insert-header filename)) ! (byte-compile-warn-about-unresolved-functions) ! ;; always do this? When calling multiple files, it ! ;; would be useful to delay this warning until all have ! ;; been compiled. ! (setq byte-compile-unresolved-functions nil))) (save-excursion ! (set-buffer outbuffer) ! (goto-char (point-min))))) ! outbuffer))) ;;; (if (not eval) ;;; outbuffer --- 1251,1310 ---- (defun byte-compile-from-buffer (inbuffer &optional filename) ;; Filename is used for the loading-into-Emacs-18 error message. ! (let (outbuffer) ! (let (;; Prevent truncation of flonums and lists as we read and print them ! (float-output-format nil) ! (case-fold-search nil) ! (print-length nil) ! ;; Simulate entry to byte-compile-top-level ! (byte-compile-constants nil) ! (byte-compile-variables nil) ! (byte-compile-tag-number 0) ! (byte-compile-depth 0) ! (byte-compile-maxdepth 0) ! (byte-compile-output nil) ! ;; #### This is bound in b-c-close-variables. ! ;; (byte-compile-warnings (if (eq byte-compile-warnings t) ! ;; byte-compile-warning-types ! ;; byte-compile-warnings)) ! ) ! (byte-compile-close-variables ! (save-excursion ! (setq outbuffer ! (set-buffer (get-buffer-create " *Compiler Output*"))) ! (erase-buffer) ! ;; (emacs-lisp-mode) ! (setq case-fold-search nil) ! ! ;; This is a kludge. Some operating systems (OS/2, DOS) need to ! ;; write files containing binary information specially. ! ;; Under most circumstances, such files will be in binary ! ;; overwrite mode, so those OS's use that flag to guess how ! ;; they should write their data. Advise them that .elc files ! ;; need to be written carefully. ! (setq overwrite-mode 'overwrite-mode-binary)) ! (displaying-byte-compile-warnings (save-excursion ! (set-buffer inbuffer) ! (goto-char 1) ! (while (progn ! (while (progn (skip-chars-forward " \t\n\^l") ! (looking-at ";")) ! (forward-line 1)) ! (not (eobp))) ! (byte-compile-file-form (read inbuffer))) ! ;; Compile pending forms at end of file. ! (byte-compile-flush-pending) ! (and filename (byte-compile-insert-header filename)) ! (byte-compile-warn-about-unresolved-functions) ! ;; always do this? When calling multiple files, it ! ;; would be useful to delay this warning until all have ! ;; been compiled. ! (setq byte-compile-unresolved-functions nil))) ! (save-excursion ! (set-buffer outbuffer) ! (goto-char (point-min))))) ! outbuffer)) ;;; (if (not eval) ;;; outbuffer *************** *** 1818,1828 **** ;; 'lambda -> body of a lambda, ;; 'file -> used at file-level. ! (byte-compile-protect-from-advice ! (let ((byte-compile-constants nil) ! (byte-compile-variables nil) ! (byte-compile-tag-number 0) ! (byte-compile-depth 0) ! (byte-compile-maxdepth 0) ! (byte-compile-output nil)) (if (memq byte-optimize '(t source)) (setq form (byte-optimize-form form for-effect))) --- 1792,1801 ---- ;; 'lambda -> body of a lambda, ;; 'file -> used at file-level. ! (let ((byte-compile-constants nil) ! (byte-compile-variables nil) ! (byte-compile-tag-number 0) ! (byte-compile-depth 0) ! (byte-compile-maxdepth 0) ! (byte-compile-output nil)) (if (memq byte-optimize '(t source)) (setq form (byte-optimize-form form for-effect))) *************** *** 1835,1839 **** form (byte-compile-form form for-effect) ! (byte-compile-out-toplevel for-effect output-type))))) (defun byte-compile-out-toplevel (&optional for-effect output-type) --- 1808,1812 ---- form (byte-compile-form form for-effect) ! (byte-compile-out-toplevel for-effect output-type)))) (defun byte-compile-out-toplevel (&optional for-effect output-type) *************** *** 2772,2775 **** --- 2745,2749 ---- (byte-defop-compiler-1 autoload) (byte-defop-compiler-1 lambda byte-compile-lambda-form) + (byte-defop-compiler-1 defalias) (defun byte-compile-defun (form) *************** *** 2828,2831 **** --- 2802,2833 ---- (error "`lambda' used as function name is invalid")) + ;; Compile normally, but deal with warnings for the function being defined. + (defun byte-compile-defalias (form) + (if (and (consp (cdr form)) (consp (nth 1 form)) + (eq (car (nth 1 form)) 'quote) + (consp (cdr (nth 1 form))) + (symbolp (nth 1 (nth 1 form))) + (consp (nthcdr 2 form)) + (consp (nth 2 form)) + (eq (car (nth 2 form)) 'quote) + (consp (cdr (nth 2 form))) + (symbolp (nth 1 (nth 2 form)))) + (progn + (byte-compile-defalias-warn (nth 1 (nth 1 form)) + (nth 1 (nth 2 form))) + (setq byte-compile-function-environment + (cons (cons (nth 1 (nth 1 form)) + (nth 1 (nth 2 form))) + byte-compile-function-environment)))) + (byte-compile-normal-call form)) + + ;; Turn off warnings about prior calls to the function being defalias'd. + ;; This could be smarter and compare those calls with + ;; the function it is being aliased to. + (defun byte-compile-defalias-warn (new alias) + (let ((calls (assq new byte-compile-unresolved-functions))) + (if calls + (setq byte-compile-unresolved-functions + (delq calls byte-compile-unresolved-functions))))) ;;; tags diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/c-mode.el emacs-19.26/lisp/c-mode.el *** emacs-19.25/lisp/c-mode.el Wed May 25 04:38:09 1994 --- emacs-19.26/lisp/c-mode.el Sat Aug 6 17:21:33 1994 *************** *** 1250,1264 **** ;; Indent any comment following the text. (or (looking-at comment-start-skip) ! (let ((beg (point))) ! (and (re-search-forward ! comment-start-skip ! (save-excursion (end-of-line) (point)) t) ! ;; Make sure the comment starter we found ! ;; is not actually in a string or quoted. ! (let ((new-state ! (parse-partial-sexp beg (point) ! nil nil state))) ! (and (not (nth 3 new-state)) (not (nth 5 new-state)))) ! (progn (indent-for-comment) (beginning-of-line))))))))))) ;; Look at all comment-start strings in the current line after point. --- 1250,1265 ---- ;; Indent any comment following the text. (or (looking-at comment-start-skip) ! (save-excursion ! (let ((beg (point))) ! (and (re-search-forward ! comment-start-skip ! (save-excursion (end-of-line) (point)) t) ! ;; Make sure the comment starter we found ! ;; is not actually in a string or quoted. ! (let ((new-state ! (parse-partial-sexp beg (point) ! nil nil state))) ! (and (not (nth 3 new-state)) (not (nth 5 new-state)))) ! (indent-for-comment))))))))))) ;; Look at all comment-start strings in the current line after point. diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/cal-french.el emacs-19.26/lisp/cal-french.el *** emacs-19.25/lisp/cal-french.el Sun May 22 17:51:24 1994 --- emacs-19.26/lisp/cal-french.el Mon May 30 13:44:32 1994 *************** *** 28,32 **** ;; diary.el that deal with the French Revolutionary calendar. ! ;; Technical details of the Mayan calendrical calculations can be found in ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' ;; by E. M. Reingold, N. Dershowitz, and S. M. Clamen, --- 28,32 ---- ;; diary.el that deal with the French Revolutionary calendar. ! ;; 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, diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/cal-menu.el emacs-19.26/lisp/cal-menu.el *** emacs-19.25/lisp/cal-menu.el Sat May 28 00:27:06 1994 --- emacs-19.26/lisp/cal-menu.el Fri Jul 22 16:40:51 1994 *************** *** 42,48 **** (defvar calendar-mouse-3-map (make-sparse-keymap "Calendar")) (define-key calendar-mode-map [down-mouse-3] calendar-mouse-3-map) ! (define-key calendar-mode-map [menu-bar moon] ! '("Moon" . calendar-phases-of-moon)) (define-key calendar-mode-map [menu-bar diary] --- 42,51 ---- (defvar calendar-mouse-3-map (make-sparse-keymap "Calendar")) (define-key calendar-mode-map [down-mouse-3] calendar-mouse-3-map) ! (define-key calendar-mode-map [menu-bar moon] ! (cons "Moon" (make-sparse-keymap "Moon"))) ! ! (define-key calendar-mode-map [menu-bar moon moon] ! '("Lunar phases" . calendar-phases-of-moon)) (define-key calendar-mode-map [menu-bar diary] *************** *** 118,122 **** '("Beginning of week" . calendar-beginning-of-week)) (define-key calendar-mode-map [menu-bar goto today] ! '("Today" . calendar-current-month)) --- 121,125 ---- '("Beginning of week" . calendar-beginning-of-week)) (define-key calendar-mode-map [menu-bar goto today] ! '("Today" . calendar-goto-today)) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/calendar.el emacs-19.26/lisp/calendar.el *** emacs-19.25/lisp/calendar.el Sat May 28 00:31:17 1994 --- emacs-19.26/lisp/calendar.el Tue Aug 30 18:44:01 1994 *************** *** 53,57 **** ;; cal-menu.el Menu support ! ;; diary.el, diary-ins.el Diary functions ;; holidays.el Holiday functions ;; cal-french.el French Revolutionary calendar --- 53,57 ---- ;; cal-menu.el Menu support ! ;; diary-lib.el, diary-ins.el Diary functions ;; holidays.el Holiday functions ;; cal-french.el French Revolutionary calendar *************** *** 808,815 **** (if (fboundp 'atan) (solar-time-string ! (/ calendar-daylight-savings-starts-time ! (float 60)) ! date ! 'standard) "")))) (funcall --- 808,813 ---- (if (fboundp 'atan) (solar-time-string ! (/ calendar-daylight-savings-starts-time (float 60)) ! calendar-standard-time-zone-name) "")))) (funcall *************** *** 819,827 **** (if (fboundp 'atan) (solar-time-string ! (/ (- calendar-daylight-savings-ends-time ! calendar-daylight-time-offset) ! (float 60)) ! date ! 'daylight) "")))) "*Sun-related holidays. --- 817,822 ---- (if (fboundp 'atan) (solar-time-string ! (/ calendar-daylight-savings-ends-time (float 60)) ! calendar-daylight-time-zone-name) "")))) "*Sun-related holidays. *************** *** 1149,1153 **** (set-buffer (get-buffer-create calendar-buffer)) (calendar-mode) ! (setq calendar-window-configuration (current-window-configuration)) (let* ((completion-ignore-case t) (pop-up-windows t) --- 1144,1148 ---- (set-buffer (get-buffer-create calendar-buffer)) (calendar-mode) ! ;;; (setq calendar-window-configuration (current-window-configuration)) (let* ((completion-ignore-case t) (pop-up-windows t) *************** *** 1185,1189 **** (run-hooks 'initial-calendar-window-hook)) ! (autoload 'view-diary-entries "diary" "Prepare and display a buffer with diary entries. Searches your diary file for entries that match ARG days starting with --- 1180,1184 ---- (run-hooks 'initial-calendar-window-hook)) ! (autoload 'view-diary-entries "diary-lib" "Prepare and display a buffer with diary entries. Searches your diary file for entries that match ARG days starting with *************** *** 1248,1252 **** t) ! (autoload 'show-all-diary-entries "diary" "Show all of the diary entries in the diary file. This function gets rid of the selective display of the diary file so that --- 1243,1247 ---- t) ! (autoload 'show-all-diary-entries "diary-lib" "Show all of the diary entries in the diary file. This function gets rid of the selective display of the diary file so that *************** *** 1255,1259 **** t) ! (autoload 'mark-diary-entries "diary" "Mark days in the calendar window that have diary entries. Each entry in diary file visible in the calendar window is marked." --- 1250,1254 ---- t) ! (autoload 'mark-diary-entries "diary-lib" "Mark days in the calendar window that have diary entries. Each entry in diary file visible in the calendar window is marked." *************** *** 1385,1389 **** characters on the line." (let* ((blank-days;; at start of month ! (calendar-mod (- (calendar-day-of-week (list month 1 year)) calendar-week-start-day) --- 1380,1384 ---- characters on the line." (let* ((blank-days;; at start of month ! (mod (- (calendar-day-of-week (list month 1 year)) calendar-week-start-day) *************** *** 1398,1402 **** (calendar-for-loop i from 0 to 6 do (insert (substring (aref calendar-day-name-array ! (calendar-mod (+ calendar-week-start-day i) 7)) 0 2)) (insert " ")) --- 1393,1397 ---- (calendar-for-loop i from 0 to 6 do (insert (substring (aref calendar-day-name-array ! (mod (+ calendar-week-start-day i) 7)) 0 2)) (insert " ")) *************** *** 1410,1414 **** (put-text-property (- (point) (if (< i 10) 2 3)) (1- (point)) 'mouse-face 'highlight) ! (and (zerop (calendar-mod (+ i blank-days) 7)) (/= i last) (calendar-insert-indented "" 0 t) ;; Force onto following line --- 1405,1409 ---- (put-text-property (- (point) (if (< i 10) 2 3)) (1- (point)) 'mouse-face 'highlight) ! (and (zerop (mod (+ i blank-days) 7)) (/= i last) (calendar-insert-indented "" 0 t) ;; Force onto following line *************** *** 1511,1515 **** (define-key calendar-mode-map " " 'scroll-other-window) (define-key calendar-mode-map "\C-c\C-l" 'redraw-calendar) ! (define-key calendar-mode-map "." 'calendar-current-month) (define-key calendar-mode-map "o" 'calendar-other-month) (define-key calendar-mode-map "q" 'exit-calendar) --- 1506,1510 ---- (define-key calendar-mode-map " " 'scroll-other-window) (define-key calendar-mode-map "\C-c\C-l" 'redraw-calendar) ! (define-key calendar-mode-map "." 'calendar-goto-today) (define-key calendar-mode-map "o" 'calendar-other-month) (define-key calendar-mode-map "q" 'exit-calendar) *************** *** 1563,1567 **** (substitute-command-keys "\\\\[scroll-calendar-left]") "Calendar" ! (substitute-command-keys "\\\\[describe-calendar-mode] help/\\[calendar-other-month] other/\\[calendar-current-month] today") '(calendar-date-string (calendar-current-date) t) (substitute-command-keys "\\\\[scroll-calendar-right]")) --- 1558,1562 ---- (substitute-command-keys "\\\\[scroll-calendar-left]") "Calendar" ! (substitute-command-keys "\\\\[describe-calendar-mode] help/\\[calendar-other-month] other/\\[calendar-goto-today] today") '(calendar-date-string (calendar-current-date) t) (substitute-command-keys "\\\\[scroll-calendar-right]")) *************** *** 1607,1611 **** \\[scroll-calendar-right] scroll one month right \\[scroll-calendar-left] scroll one month left \\[scroll-calendar-right-three-months] scroll 3 months right \\[scroll-calendar-left-three-months] scroll 3 months left ! \\[calendar-current-month] display current month \\[calendar-other-month] display another month Whenever it makes sense, the above commands take prefix arguments that --- 1602,1606 ---- \\[scroll-calendar-right] scroll one month right \\[scroll-calendar-left] scroll one month left \\[scroll-calendar-right-three-months] scroll 3 months right \\[scroll-calendar-left-three-months] scroll 3 months left ! \\[calendar-goto-today] display current month \\[calendar-other-month] display another month Whenever it makes sense, the above commands take prefix arguments that *************** *** 1838,1842 **** (defun exit-calendar () ! "Get out of the calendar window and bury it and related buffers." (interactive) (let ((diary-buffer (get-file-buffer diary-file)) --- 1833,1837 ---- (defun exit-calendar () ! "Delete the calendar window, and bury the calendar and related buffers." (interactive) (let ((diary-buffer (get-file-buffer diary-file)) *************** *** 1845,1849 **** (if (not diary-buffer) (progn ! (set-window-configuration calendar-window-configuration) (bury-buffer calendar-buffer) (if d-buffer (bury-buffer d-buffer)) --- 1840,1848 ---- (if (not diary-buffer) (progn ! ;; Restoring the configuration is undesirable because ! ;; it restores the value of point in other windows. ! ;;; (set-window-configuration calendar-window-configuration) ! (or (one-window-p t) ! (delete-window)) (bury-buffer calendar-buffer) (if d-buffer (bury-buffer d-buffer)) *************** *** 1852,1856 **** (yes-or-no-p "Diary modified; do you really want to exit the calendar? ")) (progn ! (set-window-configuration calendar-window-configuration) (bury-buffer calendar-buffer) (if d-buffer (bury-buffer d-buffer)) --- 1851,1857 ---- (yes-or-no-p "Diary modified; do you really want to exit the calendar? ")) (progn ! ;;; (set-window-configuration calendar-window-configuration) ! (or (one-window-p t) ! (delete-window)) (bury-buffer calendar-buffer) (if d-buffer (bury-buffer d-buffer)) *************** *** 1860,1864 **** (bury-buffer diary-buffer)))))) ! (defun calendar-current-month () "Reposition the calendar window so the current date is visible." (interactive) --- 1861,1865 ---- (bury-buffer diary-buffer)))))) ! (defun calendar-goto-today () "Reposition the calendar window so the current date is visible." (interactive) *************** *** 2064,2068 **** (if (= day calendar-week-start-day) (* 7 arg) ! (+ (calendar-mod (- day calendar-week-start-day) 7) (* 7 (1- arg))))))) --- 2065,2069 ---- (if (= day calendar-week-start-day) (* 7 arg) ! (+ (mod (- day calendar-week-start-day) 7) (* 7 (1- arg))))))) *************** *** 2073,2079 **** (let ((day (calendar-day-of-week (calendar-cursor-to-date)))) (calendar-forward-day ! (if (= day (calendar-mod (1- calendar-week-start-day) 7)) (* 7 arg) ! (+ (- 6 (calendar-mod (- day calendar-week-start-day) 7)) (* 7 (1- arg))))))) --- 2074,2080 ---- (let ((day (calendar-day-of-week (calendar-cursor-to-date)))) (calendar-forward-day ! (if (= day (mod (1- calendar-week-start-day) 7)) (* 7 arg) ! (+ (- 6 (mod (- day calendar-week-start-day) 7)) (* 7 (1- arg))))))) *************** *** 2198,2208 **** (list month day year))))) - (defun calendar-mod (x y) - "Returns X % Y; value is *always* non-negative." - (let ((v (mod x y))) - (if (> 0 v) - (+ v y) - v))) - (defun calendar-cursor-to-visible-date (date) "Move the cursor to DATE that is on the screen." --- 2199,2202 ---- *************** *** 2213,2217 **** (goto-line (+ 3 (/ (+ day -1 ! (calendar-mod (- (calendar-day-of-week (list month 1 year)) calendar-week-start-day) --- 2207,2211 ---- (goto-line (+ 3 (/ (+ day -1 ! (mod (- (calendar-day-of-week (list month 1 year)) calendar-week-start-day) *************** *** 2222,2226 **** (1+ (calendar-interval displayed-month displayed-year month year))) ! (* 3 (calendar-mod (- (calendar-day-of-week date) calendar-week-start-day) --- 2216,2220 ---- (1+ (calendar-interval displayed-month displayed-year month year))) ! (* 3 (mod (- (calendar-day-of-week date) calendar-week-start-day) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/cc-mode.el emacs-19.26/lisp/cc-mode.el *** emacs-19.25/lisp/cc-mode.el Tue Apr 5 19:51:56 1994 --- emacs-19.26/lisp/cc-mode.el Fri Jul 1 11:37:03 1994 *************** *** 6,11 **** ;; Maintainer: cc-mode-help@anthem.nlm.nih.gov ;; Created: a long, long, time ago. adapted from the original c-mode.el ! ;; Version: 3.304 ! ;; Last Modified: 1994/03/31 15:10:09 ;; Keywords: C++ C editing major-mode --- 6,11 ---- ;; Maintainer: cc-mode-help@anthem.nlm.nih.gov ;; Created: a long, long, time ago. adapted from the original c-mode.el ! ;; Version: 3.349 ! ;; Last Modified: 1994/05/24 22:04:15 ;; Keywords: C++ C editing major-mode *************** *** 94,98 **** ;; cc-mode.el|Barry A. Warsaw|cc-mode-help@anthem.nlm.nih.gov ;; |Major mode for editing C++, and ANSI/K&R C code ! ;; |1994/03/31 15:10:09|3.304| ;;; Code: --- 94,98 ---- ;; cc-mode.el|Barry A. Warsaw|cc-mode-help@anthem.nlm.nih.gov ;; |Major mode for editing C++, and ANSI/K&R C code ! ;; |1994/05/24 22:04:15|3.349| ;;; Code: *************** *** 134,139 **** (inher-cont . c-lineup-multi-inher) (block-open . 0) - ;; some people might prefer - ;;(block-open . c-adaptive-block-open) (block-close . 0) (brace-list-open . 0) --- 134,137 ---- *************** *** 150,153 **** --- 148,152 ---- (statement-case-intro . +) (substatement . +) + (substatement-open . +) (case-label . 0) (access-label . -) *************** *** 173,177 **** As described below, each cons cell in this list has the form: ! (SYNTACTIC-ELEMENT . OFFSET) When a line is indented, cc-mode first determines the syntactic --- 172,176 ---- As described below, each cons cell in this list has the form: ! (SYNTACTIC-SYMBOL . OFFSET) When a line is indented, cc-mode first determines the syntactic *************** *** 188,192 **** calculates the absolute indentation for the line by looking at each syntactic element in the list. First, it compares the syntactic ! element against the SYNTACTIC-ELEMENT's in `c-offsets-alist'. When it finds a match, it adds the OFFSET to the column of the relative indent point. The sum of this calculation for each element in the syntactic --- 187,191 ---- calculates the absolute indentation for the line by looking at each syntactic element in the list. First, it compares the syntactic ! element against the SYNTACTIC-SYMBOL's in `c-offsets-alist'. When it finds a match, it adds the OFFSET to the column of the relative indent point. The sum of this calculation for each element in the syntactic *************** *** 235,238 **** --- 234,238 ---- statement-case-intro -- the first line in a case `block' substatement -- the first line after an if/while/for/do/else + substatement-open -- the brace that opens a substatement block case-label -- a case or default label access-label -- C++ private/protected/public access label *************** *** 324,341 **** when the second colon is typed.") ! (defvar c-hanging-braces-alist '((brace-list-open)) ! "*Controls the insertion of newlines before and after open braces. This variable contains an association list with elements of the ! following form: (SYNTACTIC-ELEMENT . (NL-LIST)). ! SYNTACTIC-ELEMENT can be any of: defun-open, class-open, inline-open, ! block-open, or brace-list-open. See `c-offsets-alist' for details. NL-LIST can contain any combination of the symbols `before' or ! `after'. It also be nil. When an open brace is inserted, the ! syntactic context it defines is looked up in this list, and if found, the ! NL-LIST is used to determine where newlines are inserted. If the ! language element for this brace is not found in this list, the default ! behavior is to insert a newline both before and after the brace.") (defvar c-hanging-colons-alist nil --- 324,344 ---- when the second colon is typed.") ! (defvar c-hanging-braces-alist '((brace-list-open) ! (substatement-open after)) ! "*Controls the insertion of newlines before and after braces. This variable contains an association list with elements of the ! following form: (SYNTACTIC-SYMBOL . (NL-LIST)). ! SYNTACTIC-SYMBOL can be any of: defun-open, defun-cloase, class-open, ! class-close, inline-open, inline-close, block-open, ! block-close, substatement-open, brace-list-open, or ! brace-list-close. See `c-offsets-alist' for details. NL-LIST can contain any combination of the symbols `before' or ! `after'. It also be nil. When a brace is inserted, the syntactic ! context it defines is looked up in this list, and if found, the ! NL-LIST is used to determine where newlines are inserted. If not ! found, the default is to insert a newline both before and after ! braces.") (defvar c-hanging-colons-alist nil *************** *** 342,348 **** "*Controls the insertion of newlines before and after certain colons. This variable contains an association list with elements of the ! following form: (SYNTACTIC-ELEMENT . (NL-LIST)). ! SYNTACTIC-ELEMENT can be any of: member-init-intro, inher-intro, case-label, label, and access-label. See `c-offsets-alist' for details. --- 345,351 ---- "*Controls the insertion of newlines before and after certain colons. This variable contains an association list with elements of the ! following form: (SYNTACTIC-SYMBOL . (NL-LIST)). ! SYNTACTIC-SYMBOL can be any of: member-init-intro, inher-intro, case-label, label, and access-label. See `c-offsets-alist' for details. *************** *** 372,376 **** (c-offsets-alist . ((statement-block-intro . +) (knr-argdecl-intro . 5) ! (block-open . 0) (label . -) (statement-cont . +) --- 375,379 ---- (c-offsets-alist . ((statement-block-intro . +) (knr-argdecl-intro . 5) ! (substatement-open . +) (label . -) (statement-cont . +) *************** *** 382,386 **** (c-offsets-alist . ((statement-block-intro . +) (knr-argdecl-intro . 0) ! (block-open . -) (label . -) (statement-cont . +) --- 385,389 ---- (c-offsets-alist . ((statement-block-intro . +) (knr-argdecl-intro . 0) ! (substatement-open . 0) (label . -) (statement-cont . +) *************** *** 392,396 **** (c-offsets-alist . ((statement-block-intro . +) (knr-argdecl-intro . +) ! (block-open . -) (label . -) (statement-cont . +) --- 395,399 ---- (c-offsets-alist . ((statement-block-intro . +) (knr-argdecl-intro . +) ! (substatement-open . 0) (label . -) (statement-cont . +) *************** *** 401,405 **** (c-comment-only-line-offset . 0) (c-offsets-alist . ((statement-block-intro . +) ! (block-open . -) (label . -) (statement-cont . +) --- 404,408 ---- (c-comment-only-line-offset . 0) (c-offsets-alist . ((statement-block-intro . +) ! (substatement-open . 0) (label . -) (statement-cont . +) *************** *** 411,415 **** (c-offsets-alist . ((statement-block-intro . +) (knr-argdecl-intro . +) ! (block-open . 0) (label . -) (statement-cont . +) --- 414,418 ---- (c-offsets-alist . ((statement-block-intro . +) (knr-argdecl-intro . +) ! (substatement-open . 0) (label . -) (statement-cont . +) *************** *** 420,431 **** (c-basic-offset . 3) (c-comment-only-line-offset . 0) ! (c-hanging-braces-alist . ((block-open before))) (c-offsets-alist . ((topmost-intro . 0) ! (topmost-intro-cont . -6) ! (substatement . 0) (case-label . +) (access-label . -3) (inclass . 6) ! (inline-open . -6) )) )) --- 423,435 ---- (c-basic-offset . 3) (c-comment-only-line-offset . 0) ! (c-hanging-braces-alist . ((substatement-open before))) (c-offsets-alist . ((topmost-intro . 0) ! (topmost-intro-cont . 0) ! (substatement . 3) ! (substatement-open . 0) (case-label . +) (access-label . -3) (inclass . 6) ! (inline-open . 0) )) )) *************** *** 442,446 **** case, the VALUE is a list containing elements of the form: ! (SYNTACTIC-ELEMENT . VALUE) as described in `c-offsets-alist'. These are passed directly to --- 446,450 ---- case, the VALUE is a list containing elements of the form: ! (SYNTACTIC-SYMBOL . VALUE) as described in `c-offsets-alist'. These are passed directly to *************** *** 448,451 **** --- 452,479 ---- your style, only those that are different from the default.") + ;; dynamically append the default value of most variables + (or (assoc "Default" c-style-alist) + (let* ((varlist '(c-inhibit-startup-warnings-p + c-strict-semantics-p + c-echo-semantic-information-p + c-basic-offset + c-offsets-alist + c-tab-always-indent + c-comment-only-line-offset + c-block-comments-indent-p + c-cleanup-list + c-hanging-braces-alist + c-hanging-colons-alist + c-backslash-column + c-electric-pound-behavior)) + (default (cons "Default" + (mapcar + (function + (lambda (var) + (cons var (symbol-value var)) + )) + varlist)))) + (setq c-style-alist (cons default c-style-alist)))) + (defvar c-mode-hook nil "*Hook called by `c-mode'.") *************** *** 476,518 **** (defconst c-emacs-features ! (let (major minor flavor comments) ! ;; figure out if we're in Emacs 18 or 19 ! (if (not (string-match "\\([0-9]+\\).\\([0-9]+\\)" emacs-version)) ! (error "Cannot figure out the major and minor version numbers.") ! (setq major (string-to-int (substring emacs-version ! (match-beginning 1) ! (match-end 1))) ! minor (string-to-int (substring emacs-version ! (match-beginning 2) ! (match-end 2)))) ! ;; calculate the major version ! (cond ! ((= major 18) (setq major 'v18)) ;Emacs 18 ! ((= major 4) (setq major 'v18)) ;Epoch 4 ! ((= major 19) (setq major 'v19 ;Emacs 19 ! flavor (if (string-match "Lucid" emacs-version) ! 'Lucid 'FSF))) ! ;; I don't know ! (t (error "Cannot recognize major version number: %s" major))) ! ;; All Lucid Emacs's use 8-bit modify-syntax-entry flags, as do all ! ;; patched (obsolete) Emacs 19, Emacs 18, Epoch 4's. Only ! ;; vanilla Emacs 19 uses 1-bit flag. Lets be as smart as we ! ;; can about figuring this out. ! (if (eq major 'v19) ! (let ((table (copy-syntax-table))) ! (modify-syntax-entry ?a ". 12345678" table) ! (if (= (logand (lsh (aref table ?a) -16) 255) 255) ! (setq comments '8-bit) ! (setq comments '1-bit))) ! (setq comments 'no-dual-comments)) ! ;; lets do some minimal sanity checking. ! (if (and (or ! ;; Lemacs before 19.6 had bugs ! (and (eq major 'v19) (eq flavor 'Lucid) (< minor 6)) ! ;; Emacs 19 before 19.21 has known bugs ! (and (eq major 'v19) (eq flavor 'FSF) (< minor 21))) ! (not c-inhibit-startup-warnings-p)) ! (with-output-to-temp-buffer "*cc-mode warnings*" ! (print (format "The version of Emacs that you are running, %s, has known bugs in its syntax.c parsing routines which will affect the --- 504,552 ---- (defconst c-emacs-features ! (let ((major (and (boundp 'emacs-major-version) ! emacs-major-version)) ! (minor (and (boundp 'emacs-minor-version) ! emacs-minor-version)) ! flavor comments) ! ;; figure out version numbers if not already discovered ! (and (or (not major) (not minor)) ! (string-match "\\([0-9]+\\).\\([0-9]+\\)" emacs-version) ! (setq major (string-to-int (substring emacs-version ! (match-beginning 1) ! (match-end 1))) ! minor (string-to-int (substring emacs-version ! (match-beginning 2) ! (match-end 2))))) ! (if (not (and major minor)) ! (error "Cannot figure out the major and minor version numbers.")) ! ;; calculate the major version ! (cond ! ((= major 18) (setq major 'v18)) ;Emacs 18 ! ((= major 4) (setq major 'v18)) ;Epoch 4 ! ((= major 19) (setq major 'v19 ;Emacs 19 ! flavor (if (string-match "Lucid" emacs-version) ! 'Lucid 'FSF))) ! ;; I don't know ! (t (error "Cannot recognize major version number: %s" major))) ! ;; All Lucid versions use 8-bit modify-syntax-entry flags, as do all ! ;; patched (obsolete) Emacs 19, Emacs 18, Epoch 4's. Only ! ;; vanilla Emacs 19 uses 1-bit flag. Lets be as smart as we ! ;; can about figuring this out. ! (if (eq major 'v19) ! (let ((table (copy-syntax-table))) ! (modify-syntax-entry ?a ". 12345678" table) ! (if (= (logand (lsh (aref table ?a) -16) 255) 255) ! (setq comments '8-bit) ! (setq comments '1-bit))) ! (setq comments 'no-dual-comments)) ! ;; lets do some minimal sanity checking. ! (if (and (or ! ;; Lemacs before 19.6 had bugs ! (and (eq major 'v19) (eq flavor 'Lucid) (< minor 6)) ! ;; Emacs 19 before 19.21 has known bugs ! (and (eq major 'v19) (eq flavor 'FSF) (< minor 21))) ! (not c-inhibit-startup-warnings-p)) ! (with-output-to-temp-buffer "*cc-mode warnings*" ! (print (format "The version of Emacs that you are running, %s, has known bugs in its syntax.c parsing routines which will affect the *************** *** 521,529 **** fashion, but strange indentation errors could be encountered." emacs-version)))) ! ;; Emacs 18, with no patch is not too good ! (if (and (eq major 'v18) (eq comments 'no-dual-comments) ! (not c-inhibit-startup-warnings-p)) ! (with-output-to-temp-buffer "*cc-mode warnings*" ! (print (format "The version of Emacs 18 you are running, %s, has known deficiencies in its ability to handle dual C++ comments, --- 555,563 ---- fashion, but strange indentation errors could be encountered." emacs-version)))) ! ;; Emacs 18, with no patch is not too good ! (if (and (eq major 'v18) (eq comments 'no-dual-comments) ! (not c-inhibit-startup-warnings-p)) ! (with-output-to-temp-buffer "*cc-mode warnings*" ! (print (format "The version of Emacs 18 you are running, %s, has known deficiencies in its ability to handle dual C++ comments, *************** *** 539,547 **** folded into the main release. " emacs-version)))) ! ;; Emacs 18 with the syntax patches are no longer supported ! (if (and (eq major 'v18) (not (eq comments 'no-dual-comments)) ! (not c-inhibit-startup-warnings-p)) ! (with-output-to-temp-buffer "*cc-mode warnings*" ! (print (format "You are running a syntax patched Emacs 18 variant. While this should work for you, you may want to consider upgrading to Emacs 19. --- 573,581 ---- folded into the main release. " emacs-version)))) ! ;; Emacs 18 with the syntax patches are no longer supported ! (if (and (eq major 'v18) (not (eq comments 'no-dual-comments)) ! (not c-inhibit-startup-warnings-p)) ! (with-output-to-temp-buffer "*cc-mode warnings*" ! (print (format "You are running a syntax patched Emacs 18 variant. While this should work for you, you may want to consider upgrading to Emacs 19. *************** *** 548,552 **** The syntax patches are no longer supported either for syntax.c or cc-mode.")))) - ) (list major flavor comments)) "A list of features extant in the Emacs you are using. --- 582,585 ---- *************** *** 608,611 **** --- 641,645 ---- (define-key c-mode-map "\C-c\C-c" 'comment-region) (define-key c-mode-map "\C-c\C-d" 'c-toggle-hungry-state) + (define-key c-mode-map "\C-c\C-e" 'c-macro-expand) (define-key c-mode-map "\C-c\C-o" 'c-set-offset) (define-key c-mode-map "\C-c\C-s" 'c-show-semantic-information) *************** *** 649,656 **** ) ;; in Lucid Emacs, we want the menu to popup when the 3rd button is ! ;; hit (if (memq 'Lucid c-emacs-features) ! (define-key c-mode-map 'button3 'c-popup-menu))) ! ) (defvar c++-mode-map () --- 683,692 ---- ) ;; in Lucid Emacs, we want the menu to popup when the 3rd button is ! ;; hit. In 19.10 and beyond this is done automatically if we put ! ;; the menu on mode-popup-menu variable, see c-common-init (if (memq 'Lucid c-emacs-features) ! (if (not (boundp 'mode-popup-menu)) ! (define-key c-mode-map 'button3 'c-popup-menu))) ! )) (defvar c++-mode-map () *************** *** 731,734 **** --- 767,774 ---- (defvar c-semantics nil "Variable containing semantics list during indentation.") + (defvar c-comment-start-regexp nil + "Buffer local variable describing how comment are introduced.") + (defvar c-conditional-key nil + "Buffer-local language-specific conditional keyword regexp.") (make-variable-buffer-local 'c-auto-newline) *************** *** 735,738 **** --- 775,780 ---- (make-variable-buffer-local 'c-hungry-delete-key) (make-variable-buffer-local 'c-auto-hungry-string) + (make-variable-buffer-local 'c-comment-start-regexp) + (make-variable-buffer-local 'c-conditional-key) ;; cmacexp is lame because it uses no preprocessor symbols. *************** *** 757,761 **** ;; I'd like to add \\= in the first grouping below, but 1. its not ;; defined in v18, and 2. doesn't seem to work in v19 anyway. ! "\\([^[ \t]+\\")) ! (forward-sexp -1)) ! ;; CASE 2: we're looking at any other conditional clause ! ((looking-at c-conditional-key)) ! ;; CASE 3: anything else ! (t (goto-char last-begin)))) ! ;; error for condition-case ! (error (if first ! (backward-up-list 1) ! (goto-char last-begin) ! ;; skip over any unary operators, or other special ! ;; characters appearing at front of identifier ! (skip-chars-backward "-+!*&:.~") ! )) ! ))) (defun c-end-of-statement-1 () --- 1835,1901 ---- (defun c-beginning-of-statement-1 () ! ;; move to the start of the current statement, or the previous ! ;; statement if already at the beginning of one. ! (let ((firstp t) ! donep literal-cache ! (last-begin (point))) ! (while (not donep) ! ;; stop at beginning of buffer ! (if (bobp) (setq donep t) ! ;; go backwards one balanced expression, but be careful of ! ;; unbalanced paren being reached ! (if (not (c-safe (progn (backward-sexp 1) t))) ! (progn ! (if firstp ! (backward-up-list 1) ! (goto-char last-begin)) ! ;; skip over any unary operators, or other special ! ;; characters appearing at front of identifier ! (save-excursion ! (c-backward-syntactic-ws) ! (skip-chars-backward "-+!*&:.~") ! (if (= (preceding-char) ?\() ! (setq last-begin (point)))) ! (goto-char last-begin) ! (setq donep t))) ! ! ;; see if we're in a literal. if not, then this bufpos may be ! ;; a candidate for stopping ! (cond ! ;; CASE 0: did we hit the error condition above? ! (donep) ! ;; CASE 1: are we in a literal? ! ((eq (setq literal-cache (c-in-literal)) 'pound) ! (beginning-of-line)) ! ;; CASE 2: some other kind of literal? ! (literal-cache) ! ;; CASE 3: is this the first time we're checking? ! (firstp (setq firstp nil ! last-begin (point))) ! ;; CASE 4: are we looking at a conditional keyword? ! ((looking-at c-conditional-key) ! ;; are we in the middle of an else-if clause? ! (if (save-excursion ! (c-safe (forward-sexp -1)) ! (looking-at "\\[ \t]+\\")) ! (forward-sexp -1)) ! (setq last-begin (point) ! donep t)) ! ;; CASE 5: have we crossed a statement barrier? ! ((let (crossedp) ! (save-excursion ! (while (and (not crossedp) ! (< (point) last-begin)) ! (skip-chars-forward "^;{}" last-begin) ! (if (and (memq (following-char) '(?\; ?{ ?})) ! (not (c-in-literal))) ! (setq crossedp t ! donep t) ! (forward-char 1)))) ! crossedp)) ! ;; CASE 6: nothing special ! (t (setq last-begin (point))) ! ))) ! (goto-char last-begin))) (defun c-end-of-statement-1 () *************** *** 1828,1831 **** --- 1919,1953 ---- + ;;(defun c-beginning-of-defun (count) + ;; "Move the the COUNTth `real' beginning-of-defun. + ;;This is defined as the first declaration line of the most enclosing + ;;top level construct; i.e. class/struct, function, enum, etc. With + ;;negative COUNT, go forward." + ;; (interactive "p") + ;; ) + ;; + ;;(defun c-beginning-of-defun-1 () + ;; ;; move to the real beginning of defun. `Real' being defined as the + ;; ;; first C/C++ declaration line of the most enclosing top level construct. + ;; (let* ((state (c-parse-state)) + ;; (search-start (car state))) + ;; ;; if the last thing is a cons then start searching from the end + ;; ;; of the previous balanced sexp + ;; (goto-char (or (car-safe search-start) + ;; (and (numberp search-start) + ;; search-start) + ;; (point))) + ;; (c-beginning-of-statement) + ;; (if (bobp) + ;; (c-forward-syntactic-ws)) + ;; )) + ;; + ;;(defun c-end-of-defun-1 () + ;; ;; move to the end of the defun. + ;; (let* ((state (c-parse-state)) + ;; (search-start (car state)) + ;; ))) + ;; + (defun c-up-conditional (count) "Move back to the containing preprocessor conditional, leaving mark behind. *************** *** 1923,1927 **** ;; If arg, always indent this line as C ;; and shift remaining lines of expression the same amount. ! (let ((shift-amt (c-indent-via-language-element bod)) beg end) (save-excursion --- 2045,2049 ---- ;; If arg, always indent this line as C ;; and shift remaining lines of expression the same amount. ! (let ((shift-amt (c-indent-line)) beg end) (save-excursion *************** *** 1946,1953 **** (not (bolp))) (insert-tab) ! (c-indent-via-language-element bod))) ;; CASE 2: just indent the line ((eq c-tab-always-indent t) ! (c-indent-via-language-element bod)) ;; CASE 3: if in a literal, insert a tab, but always indent the ;; line --- 2068,2075 ---- (not (bolp))) (insert-tab) ! (c-indent-line))) ;; CASE 2: just indent the line ((eq c-tab-always-indent t) ! (c-indent-line)) ;; CASE 3: if in a literal, insert a tab, but always indent the ;; line *************** *** 1955,1959 **** (if (c-in-literal bod) (insert-tab)) ! (c-indent-via-language-element bod) ))))) --- 2077,2081 ---- (if (c-in-literal bod) (insert-tab)) ! (c-indent-line) ))))) *************** *** 1965,1970 **** end) (unwind-protect ! (let ((bod (c-point 'bod)) ! (c-echo-semantic-information-p nil) ;keep quiet for speed (start (progn ;; try to be smarter about finding the range of --- 2087,2091 ---- end) (unwind-protect ! (let ((c-echo-semantic-information-p nil) ;keep quiet for speed (start (progn ;; try to be smarter about finding the range of *************** *** 1997,2001 **** (while (< (point) end) (if (not (looking-at "[ \t]*$")) ! (c-indent-via-language-element bod)) (forward-line 1))) ;; make sure marker is deleted --- 2118,2122 ---- (while (< (point) end) (if (not (looking-at "[ \t]*$")) ! (c-indent-line)) (forward-line 1))) ;; make sure marker is deleted *************** *** 2023,2026 **** --- 2144,2148 ---- (condition-case () (c-indent-exp) + (buffer-read-only (error)) (error (error "Cannot find closed top-level defun containing point."))) *************** *** 2036,2098 **** (skip-chars-forward " \t\n") (beginning-of-line) ! (let ((endmark (copy-marker end)) ! (c-tab-always-indent t) ! (c-echo-semantic-information-p nil)) ;shut up msgs on indiv lines ! (while (and (bolp) ! (not (eobp)) ! (< (point) endmark)) ! ;; Indent one line as with TAB. ! (let ((lim (c-point 'bod)) ! nextline sexpend sexpbeg) ! ;; skip blank lines ! (skip-chars-forward " \t\n") ! (beginning-of-line) ! ;; indent the current line ! (c-indent-via-language-element lim) ! (if (save-excursion (beginning-of-line) ! (looking-at "[ \t]*#")) ! (forward-line 1) ! (save-excursion ! ;; Find beginning of following line. ! (setq nextline (c-point 'bonl)) ! ;; Find first beginning-of-sexp for sexp extending past ! ;; this line. ! (beginning-of-line) ! (while (< (point) nextline) ! (condition-case nil ! (progn ! (forward-sexp 1) ! (setq sexpend (point))) ! (error (setq sexpend nil) ! (goto-char nextline))) ! (c-forward-syntactic-ws)) ! (if sexpend ! (progn ! ;; make sure the sexp we found really starts on the ! ;; current line and extends past it ! (goto-char sexpend) ! (setq sexpend (point-marker)) ! (backward-sexp 1) ! (setq sexpbeg (point))))) ! ;; If that sexp ends within the region, indent it all at ! ;; once, fast. ! (condition-case nil ! (if (and sexpend ! (> sexpend nextline) ! (<= sexpend endmark)) ! (progn ! (goto-char sexpbeg) ! (c-indent-exp 'shutup) ! (goto-char sexpend))) ! (error ! (goto-char sexpbeg) ! (c-indent-via-language-element lim))) ! ;; Move to following line and try again. ! (and sexpend ! (markerp sexpend) ! (set-marker sexpend nil)) ! (forward-line 1)))) ! (set-marker endmark nil))) (message "indenting region... done.")) --- 2158,2229 ---- (skip-chars-forward " \t\n") (beginning-of-line) ! (let (endmark) ! (unwind-protect ! (let ((c-tab-always-indent t) ! ;; shut up any echo msgs on indiv lines ! (c-echo-semantic-information-p nil)) ! (setq endmark (copy-marker end)) ! (while (and (bolp) ! (not (eobp)) ! (< (point) endmark)) ! ;; Indent one line as with TAB. ! (let (nextline sexpend sexpbeg) ! ;; skip blank lines ! (skip-chars-forward " \t\n") (beginning-of-line) ! ;; indent the current line ! (c-indent-line) ! (if (save-excursion ! (beginning-of-line) ! (looking-at "[ \t]*#")) ! (forward-line 1) ! (save-excursion ! ;; Find beginning of following line. ! (setq nextline (c-point 'bonl)) ! ;; Find first beginning-of-sexp for sexp extending past ! ;; this line. ! (beginning-of-line) ! (while (< (point) nextline) ! (condition-case nil ! (progn ! (forward-sexp 1) ! (setq sexpend (point))) ! (error (setq sexpend nil) ! (goto-char nextline))) ! (c-forward-syntactic-ws)) ! (if sexpend ! (progn ! ;; make sure the sexp we found really starts on the ! ;; current line and extends past it ! (goto-char sexpend) ! (setq sexpend (point-marker)) ! (backward-sexp 1) ! (setq sexpbeg (point))))) ! ;; check to see if the next line starts a ! ;; comment-only line ! (save-excursion ! (forward-line 1) ! (skip-chars-forward " \t") ! (if (looking-at c-comment-start-regexp) ! (setq sexpbeg (c-point 'bol)))) ! ;; If that sexp ends within the region, indent it all at ! ;; once, fast. ! (condition-case nil ! (if (and sexpend ! (> sexpend nextline) ! (<= sexpend endmark)) ! (progn ! (goto-char sexpbeg) ! (c-indent-exp 'shutup) ! (goto-char sexpend))) ! (error ! (goto-char sexpbeg) ! (c-indent-line))) ! ;; Move to following line and try again. ! (and sexpend ! (markerp sexpend) ! (set-marker sexpend nil)) ! (forward-line 1))))) ! (set-marker endmark nil)))) (message "indenting region... done.")) *************** *** 2160,2164 **** ;; `beginning-of-defun' is used." ! ;; This is for all Emacsen supporting 8-bit syntax (Lucid Emacs, patched Emacs 18) (defun c-in-literal (&optional lim) ;; Determine if point is in a C++ literal --- 2291,2295 ---- ;; `beginning-of-defun' is used." ! ;; This is for all v19 Emacsen supporting either 1-bit or 8-bit syntax (defun c-in-literal (&optional lim) ;; Determine if point is in a C++ literal *************** *** 2176,2212 **** 'pound) (t nil))))) - - ;; This is for all 1-bit emacsen (Emacs 19) - (defun c-1bit-il (&optional lim) - ;; Determine if point is in a C++ literal - (save-excursion - (let* ((lim (or lim (c-point 'bod))) - (here (point)) - (state (parse-partial-sexp lim (point)))) - (cond - ((nth 3 state) 'string) - ((nth 4 state) (if (nth 7 state) 'c++ 'c)) - ((progn - (goto-char here) - (beginning-of-line) - (looking-at "[ \t]*#")) - 'pound) - (t nil))))) - - ;; Emacs 19 does this differently than Lucid Emacs - (if (memq '1-bit c-emacs-features) - (fset 'c-in-literal 'c-1bit-il)) - ;; utilities for moving and querying around semantic elements ! (defun c-parse-state (&optional lim) ! ;; Determinate the syntactic state of the code at point. ! ;; Iteratively uses `parse-partial-sexp' from point to LIM and ! ;; returns the result of `parse-partial-sexp' at point. LIM is ! ;; optional and defaults to `point-max'. ! (let ((lim (or lim (point-max))) ! state) ! (while (< (point) lim) ! (setq state (parse-partial-sexp (point) lim 0))) state)) --- 2307,2375 ---- 'pound) (t nil))))) ;; utilities for moving and querying around semantic elements ! (defun c-parse-state () ! ;; Finds and records all open parens between some important point ! ;; earlier in the file and point. ! (let* (at-bob ! (pos (save-excursion ! ;; go back 2 bods, but ignore any bogus positions ! ;; returned by beginning-of-defun (i.e. open paren in ! ;; column zero) ! (let ((cnt 0)) ! (while (and (not at-bob) (< cnt 2)) ! (beginning-of-defun) ! (if (= (following-char) ?\{) ! (setq cnt (1+ cnt))) ! (if (bobp) ! (setq at-bob t)))) ! (point))) ! (here (save-excursion ! ;;(skip-chars-forward " \t}") ! (point))) ! (last-bod pos) (last-pos pos) state sexp-end) ! ;; cache last bod position ! (while (catch 'backup-bod ! (setq state nil) ! (while (and pos (< pos here)) ! (setq last-pos pos) ! (if (and (setq pos (c-safe (scan-lists pos 1 -1))) ! (<= pos here)) ! (progn ! (setq sexp-end (c-safe (scan-sexps (1- pos) 1))) ! (if (and sexp-end ! (<= sexp-end here)) ! ;; we want to record both the start and end ! ;; of this sexp, but we only want to record ! ;; the last-most of any of them before here ! (progn ! (if (= (char-after (1- pos)) ?\{) ! (setq state (cons (cons (1- pos) sexp-end) ! (if (consp (car state)) ! (cdr state) ! state)))) ! (setq pos sexp-end)) ! ;; we're contained in this sexp so put pos on ! ;; front of list ! (setq state (cons (1- pos) state)))) ! ;; something bad happened. check to see if we crossed ! ;; an unbalanced close paren. if so, we didn't really ! ;; find the right `important bufpos' so lets back up ! ;; and try again ! (if (and (not pos) (not at-bob) ! (c-safe (scan-lists last-pos 1 1))) ! (save-excursion ! (let (donep) ! (goto-char last-bod) ! (while (and (not donep) (not at-bob)) ! (beginning-of-defun) ! (if (= (following-char) ?\{) ! (setq last-bod (point) ! donep t)) ! (setq at-bob (bobp))) ! (setq pos (point)) ! (throw 'backup-bod t)))) ! )) ! nil)) state)) *************** *** 2315,2319 **** (setq if-level (1+ if-level))) ((looking-at "if\\b[^_]") ! (setq if-level (1- if-level))) ((< (point) lim) (setq if-level 0) --- 2478,2488 ---- (setq if-level (1+ if-level))) ((looking-at "if\\b[^_]") ! ;; check for else if... skip over ! (let ((here (point))) ! (c-safe (forward-sexp -1)) ! (if (looking-at "\\[ \t]+\\") ! nil ! (setq if-level (1- if-level)) ! (goto-char here)))) ((< (point) lim) (setq if-level 0) *************** *** 2333,2400 **** 1 2)))) ! (defun c-search-uplist-for-classkey (&optional search-end) ! (save-excursion ! (save-restriction ! (let ((end (or search-end (point))) ! (here (point)) ! (bod2 (progn (beginning-of-defun 2) (point))) ! (start (c-safe (progn (end-of-defun) (point)))) ! class brace state foundp) ! ;; if the end-of-defun leaves us after `here', or there was no ! ;; matching end-of-defun then the farthest back we look is ! ;; bod2 ! (if (or (not start) ! (>= start here)) ! (setq start bod2)) ! (narrow-to-region start end) ! ;; try to narrow the region even farther. skip over any ! ;; balanced lists between start and end. Could be ill-formed ! ;; top-level constructs that b-o-d didn't pick up ! (c-safe ! (let (newstart) ! (while (setq newstart (scan-lists start 1 0)) ! (setq start newstart)))) ! (widen) ! (narrow-to-region start end) ! ;; now parse from the point we're at to end ! (setq state (parse-partial-sexp start end)) ! (if (and (setq brace (nth 1 state)) ! (setq start (or (c-safe (scan-lists brace -1 -1)) ! (c-safe (scan-lists brace -1 1)) ! start))) ! (progn ! (goto-char start) (while (and (not foundp) (save-restriction (c-forward-syntactic-ws) (widen) ! (narrow-to-region (point) end) ! (re-search-forward c-class-key brace t))) ! (setq class (match-beginning 0)) ! (if (not (c-in-literal start)) (progn (goto-char class) (skip-chars-forward " \t\n") ! (setq class (point)) ! ;; now find opening brace ! (if (= (1+ brace) ! (or (c-safe (scan-lists (point) 1 -1)) ! 0)) (progn ! (goto-char class) ! (setq foundp (vector (c-point 'boi) brace)))) ! ;; make sure there's no semi-colon between class ! ;; and brace. Otherwise, we found a forward ! ;; declaration. ! (goto-char class) ! (skip-chars-forward "^;" brace) ! (if (= (following-char) ?\;) ! (setq foundp nil)) ! ))) ;end while ! )) ;end if ! ;; right now this returns a cons cell, but later it will ! ;; return a vector for speed ! ;;(cons (aref foundp 1) (aref foundp 0))) ! foundp)))) (defun c-inside-bracelist-p (containing-sexp) --- 2502,2582 ---- 1 2)))) ! (defun c-search-uplist-for-classkey (brace-state) ! ;; search for the containing class, returning a 2 element vector if ! ;; found. aref 0 contains the bufpos of the class key, and aref 1 ! ;; contains the bufpos of the open brace. ! (if (null brace-state) ! ;; no brace-state means we cannot be inside a class ! nil ! (let ((carcache (car brace-state)) ! search-start search-end) ! (if (consp carcache) ! ;; a cons cell in the first element means that there is some ! ;; balanced sexp before the current bufpos. this we can ! ;; ignore. the nth 1 and nth 2 elements define for us the ! ;; search boundaries ! (setq search-start (nth 2 brace-state) ! search-end (nth 1 brace-state)) ! ;; if the car was not a cons cell then nth 0 and nth 1 define ! ;; for us the search boundaries ! (setq search-start (nth 1 brace-state) ! search-end (nth 0 brace-state))) ! ;; if search-end is nil we are definitely not in a class ! (if (not search-end) ! nil ! ;; search-end cannot be a cons cell ! (and (consp search-end) ! (error "consp search-end: %s" search-end)) ! ;; now, we need to look more closely at search-start. if ! ;; search-start is nil, then our start boundary is really ! ;; point-min. ! (if (not search-start) ! (setq search-start (point-min)) ! ;; if search-start is a cons cell, then we can start ! ;; searching from the end of the balanced sexp just ahead of ! ;; us ! (if (consp search-start) ! (setq search-start (cdr search-start)))) ! ;; now we can do a quick regexp search from search-start to ! ;; search-end and see if we can find a class key. watch for ! ;; class like strings in literals ! (save-excursion ! (save-restriction ! (goto-char search-start) ! (let (foundp class match-end) (while (and (not foundp) (save-restriction (c-forward-syntactic-ws) + ;; see c-class-key comments for why we + ;; need to do this. (widen) ! (narrow-to-region (point) search-end) ! (re-search-forward c-class-key search-end t))) ! (setq class (match-beginning 0) ! match-end (match-end 0)) ! (if (not (c-in-literal search-start)) (progn (goto-char class) (skip-chars-forward " \t\n") ! (setq foundp (vector (c-point 'boi) search-end)) ! ;; make sure there's no semi-colon or equal sign ! ;; between class and brace. Otherwise, we found ! ;; a forward declaration or a struct init. ! (skip-chars-forward "^;=,)" search-end) ! (if (/= (point) search-end) (progn ! (setq foundp nil) ! (goto-char match-end)) ! ;; make sure we aren't looking at the `class' ! ;; keyword inside a template arg list ! (goto-char class) ! (skip-chars-backward " \t\n") ! (if (= (preceding-char) ?<) ! (progn ! (setq foundp nil) ! (skip-chars-forward "^>" search-end)))) ! ))) ! foundp)) ! ))))) (defun c-inside-bracelist-p (containing-sexp) *************** *** 2414,2418 **** (setq bufpos (point)) (and (< bufpos containing-sexp) ! (looking-at "\\(typedef[ \t]+\\)?\\"))) ;; this will pick up array/aggregate init lists, even if they ;; are nested --- 2596,2603 ---- (setq bufpos (point)) (and (< bufpos containing-sexp) ! (looking-at "\\(typedef[ \t]+\\)?enum[ \t\n]+") ! (save-excursion ! (skip-chars-forward "^;" containing-sexp) ! (= (point) containing-sexp)))) ;; this will pick up array/aggregate init lists, even if they ;; are nested *************** *** 2450,2491 **** (` (setq semantics (cons (cons (, symbol) (, relpos)) semantics)))) ! (defun c-guess-basic-semantics (&optional lim) ;; guess the semantic description of the current line of C++ code. - ;; Optional LIM is the farthest back we should search (save-excursion ! (beginning-of-line) ! (let ((indent-point (point)) ! (case-fold-search nil) ! state literal ! containing-sexp char-before-ip char-after-ip ! (lim (or lim (c-point 'bod))) ! semantics placeholder inclass-p ! ) ;end-let ! ;; narrow out the enclosing class ! (save-restriction ! (if (setq inclass-p (c-search-uplist-for-classkey)) ! (progn ! (narrow-to-region ! (progn ! (goto-char (1+ (aref inclass-p 1))) ! (skip-chars-forward " \t\n" indent-point) ! ;; if point is now left of the class opening brace, ! ;; we're hosed, so try a different tact ! (if (<= (c-point 'bol) (aref inclass-p 1)) ! (progn ! (goto-char (1+ (aref inclass-p 1))) ! (c-forward-syntactic-ws indent-point))) ! (c-point 'bol)) ! (progn ! (goto-char indent-point) ! (c-point 'eol))) ! (setq lim (point-min)))) ! ;; parse the state of the line ! (goto-char lim) ! (setq state (c-parse-state indent-point) ! containing-sexp (nth 1 state) ! literal (c-in-literal lim)) ;; cache char before and after indent point, and move point to ! ;; the most like position to perform regexp tests (goto-char indent-point) (skip-chars-forward " \t") --- 2635,2715 ---- (` (setq semantics (cons (cons (, symbol) (, relpos)) semantics)))) ! (defun c-enclosing-brace (state) ! ;; return the bufpos of the most enclosing brace that hasn't been ! ;; narrowed out by any enclosing class, or nil if none was found ! (let (enclosingp) ! (while (and state (not enclosingp)) ! (setq enclosingp (car state) ! state (cdr state)) ! (if (consp enclosingp) ! (setq enclosingp nil) ! (if (> (point-min) enclosingp) ! (setq enclosingp nil)) ! (setq state nil))) ! enclosingp)) ! ! (defun c-narrow-out-enclosing-class (state lim) ! ;; narrow the buffer so that the enclosing class is hidden ! (let (inclass-p) ! (and state ! (setq inclass-p (c-search-uplist-for-classkey state)) ! (narrow-to-region ! (progn ! (goto-char (1+ (aref inclass-p 1))) ! (skip-chars-forward " \t\n" lim) ! ;; if point is now left of the class opening brace, we're ! ;; hosed, so try a different tact ! (if (<= (c-point 'bol) (aref inclass-p 1)) ! (progn ! (goto-char (1+ (aref inclass-p 1))) ! (c-forward-syntactic-ws lim))) ! (c-point 'bol)) ! ;; end point is the end of the current line ! (progn ! (goto-char lim) ! (c-point 'eol)))) ! ;; return the class vector ! inclass-p)) ! ! (defun c-guess-basic-semantics () ;; guess the semantic description of the current line of C++ code. (save-excursion ! (save-restriction ! (beginning-of-line) ! (let* ((indent-point (point)) ! (case-fold-search nil) ! (state (c-parse-state)) ! literal containing-sexp char-before-ip char-after-ip lim ! semantics placeholder ! ;; narrow out any enclosing class ! (inclass-p (c-narrow-out-enclosing-class state indent-point)) ! ) ! ! ;; get the buffer position of the most nested opening brace, ! ;; if there is one, and it hasn't been narrowed out ! (save-excursion ! (goto-char indent-point) ! (skip-chars-forward " \t}") ! (skip-chars-backward " \t") ! (while (and state (not containing-sexp)) ! (setq containing-sexp (car state) ! state (cdr state)) ! (if (consp containing-sexp) ! ;; if cdr == point, then containing sexp is the brace ! ;; that opens the sexp we close ! (if (= (cdr containing-sexp) (point)) ! (setq containing-sexp (car containing-sexp)) ! ;; otherwise, ignore this element ! (setq containing-sexp nil)) ! ;; ignore the bufpos if its been narrowed out by the ! ;; containing class ! (if (<= containing-sexp (point-min)) ! (setq containing-sexp nil))))) ! ! ;; set the limit on the farthest back we need to search ! (setq lim (or containing-sexp (point-min))) ! ;; cache char before and after indent point, and move point to ! ;; the most likely position to perform the majority of tests (goto-char indent-point) (skip-chars-forward " \t") *************** *** 2495,2498 **** --- 2719,2726 ---- (goto-char indent-point) (skip-chars-forward " \t") + + ;; are we in a literal? + (setq literal (c-in-literal lim)) + ;; now figure out semantic qualities of the current line (cond *************** *** 2521,2525 **** (goto-char indent-point) (skip-chars-forward " \t{") ! (let ((decl (c-search-uplist-for-classkey (point)))) (and decl (setq placeholder (aref decl 0))) --- 2749,2753 ---- (goto-char indent-point) (skip-chars-forward " \t{") ! (let ((decl (c-search-uplist-for-classkey (c-parse-state)))) (and decl (setq placeholder (aref decl 0))) *************** *** 2533,2538 **** (c-forward-syntactic-ws indent-point)) (setq placeholder (point)) ! (or (looking-at "\\") ! (= char-before-ip ?=))) (c-add-semantics 'brace-list-open placeholder)) ;; CASE 4A.3: inline defun open --- 2761,2769 ---- (c-forward-syntactic-ws indent-point)) (setq placeholder (point)) ! (and (or (looking-at "enum[ \t\n]+") ! (= char-before-ip ?=)) ! (save-excursion ! (skip-chars-forward "^;" indent-point) ! (/= (following-char) ?\;)))) (c-add-semantics 'brace-list-open placeholder)) ;; CASE 4A.3: inline defun open *************** *** 2541,2544 **** --- 2772,2776 ---- ;; CASE 4A.4: ordinary defun open (t + (goto-char placeholder) (c-add-semantics 'defun-open (c-point 'bol)) ))) *************** *** 2649,2653 **** (c-add-semantics 'inclass (aref inclass-p 0))) ;; CASE 4F: we are looking at the brace which closes the ! ;; enclosing class decl ((and inclass-p (= char-after-ip ?}) --- 2881,2885 ---- (c-add-semantics 'inclass (aref inclass-p 0))) ;; CASE 4F: we are looking at the brace which closes the ! ;; enclosing nested class decl ((and inclass-p (= char-after-ip ?}) *************** *** 2674,2678 **** (setq placeholder (point)) (c-backward-syntactic-ws lim)) ! (= (preceding-char) ?\)))) (goto-char placeholder) (c-add-semantics 'knr-argdecl (c-point 'boi))) --- 2906,2913 ---- (setq placeholder (point)) (c-backward-syntactic-ws lim)) ! (= (preceding-char) ?\))) ! (save-excursion ! (c-beginning-of-statement) ! (not (looking-at "typedef[ \t\n]+")))) (goto-char placeholder) (c-add-semantics 'knr-argdecl (c-point 'boi))) *************** *** 2808,2814 **** (>= (point) indent-point)))) (goto-char placeholder) - (c-add-semantics 'substatement (c-point 'boi)) (if (= char-after-ip ?{) ! (c-add-semantics 'block-open))) ;; CASE 8B: open braces for class or brace-lists ((= char-after-ip ?{) --- 3043,3049 ---- (>= (point) indent-point)))) (goto-char placeholder) (if (= char-after-ip ?{) ! (c-add-semantics 'substatement-open (c-point 'boi)) ! (c-add-semantics 'substatement (c-point 'boi)))) ;; CASE 8B: open braces for class or brace-lists ((= char-after-ip ?{) *************** *** 2818,2822 **** (goto-char indent-point) (skip-chars-forward " \t{") ! (let ((decl (c-search-uplist-for-classkey (point)))) (and decl (setq placeholder (aref decl 0))) --- 3053,3057 ---- (goto-char indent-point) (skip-chars-forward " \t{") ! (let ((decl (c-search-uplist-for-classkey (c-parse-state)))) (and decl (setq placeholder (aref decl 0))) *************** *** 2898,2914 **** (goto-char containing-sexp) (if (/= (point) (c-point 'boi)) ! (c-beginning-of-statement nil lim)) ! (point)))) ! ;; lets see if we close a top-level construct. ! (goto-char indent-point) ! (skip-chars-forward " \t}") ! (if (zerop (car (parse-partial-sexp lim (point)))) ! (if inclass-p ! (progn (goto-char relpos) ! (c-add-semantics 'inline-close (c-point 'boi))) ! (c-add-semantics 'defun-close relpos)) ! (goto-char relpos) ! (c-add-semantics 'block-close (c-point 'boi)) ! ))) ;; CASE 14: statement catchall (t --- 3133,3159 ---- (goto-char containing-sexp) (if (/= (point) (c-point 'boi)) ! (c-beginning-of-statement)) ! (c-point 'boi)))) ! (cond ! ;; CASE 13.A: does this close an inline? ! ((progn ! (goto-char containing-sexp) ! (c-search-uplist-for-classkey state)) ! (c-add-semantics 'inline-close relpos)) ! ;; CASE 13.B: if there an enclosing brace that hasn't ! ;; been narrowed out by a class, then this is a ! ;; block-close ! ((c-enclosing-brace state) ! (c-add-semantics 'block-close relpos)) ! ;; CASE 13.C: find out whether we're closing a top-level ! ;; class or a defun ! (t ! (save-restriction ! (narrow-to-region (point-min) indent-point) ! (let ((decl (c-search-uplist-for-classkey (c-parse-state)))) ! (if decl ! (c-add-semantics 'class-close (aref decl 0)) ! (c-add-semantics 'defun-close relpos))))) ! ))) ;; CASE 14: statement catchall (t *************** *** 2962,2967 **** (if (= char-after-ip ?{) (c-add-semantics 'block-open))) ! ;; CASE 14.E: first statement in a top-level defun ! ((= containing-sexp (c-point 'bod)) (goto-char containing-sexp) (c-add-semantics 'defun-block-intro (c-point 'boi))) --- 3207,3220 ---- (if (= char-after-ip ?{) (c-add-semantics 'block-open))) ! ;; CASE 14.E: first statement in an inline, or first ! ;; statement in a top-level defun. we can tell this is it ! ;; if there are no enclosing braces that haven't been ! ;; narrowed out by a class (i.e. don't use bod here!) ! ((save-excursion ! (save-restriction ! (widen) ! (goto-char containing-sexp) ! (c-narrow-out-enclosing-class state containing-sexp) ! (not (c-enclosing-brace state)))) (goto-char containing-sexp) (c-add-semantics 'defun-block-intro (c-point 'boi))) *************** *** 2974,2998 **** (c-add-semantics 'block-open))) ))) ! )) ; end save-restriction ! ;; now we need to look at any langelem modifiers ! (goto-char indent-point) ! (skip-chars-forward " \t") ! (if (looking-at "\\(//\\|/\\*\\)") ! ;; we are looking at a comment. if the comment is at or to ! ;; the right of comment-column, then all we want on the ! ;; semantics list is comment-intro, otherwise, the ! ;; indentation of the comment is relative to where a normal ! ;; statement would indent ! (if (< (current-column) comment-column) ! (c-add-semantics 'comment-intro) ! ;; reset semantics kludge ! (setq semantics nil) ! (c-add-semantics 'comment-intro))) ! ;; we might want to give additional offset to friends (in C++) ! (if (and (eq major-mode 'c++-mode) ! (looking-at "friend[ \t]+")) ! (c-add-semantics 'friend)) ! ;; return the semantics ! semantics))) --- 3227,3252 ---- (c-add-semantics 'block-open))) ))) ! ) ! ! ;; now we need to look at any modifiers ! (goto-char indent-point) ! (skip-chars-forward " \t") ! (if (looking-at c-comment-start-regexp) ! ;; we are looking at a comment. if the comment is at or to ! ;; the right of comment-column, then all we want on the ! ;; semantics list is comment-intro, otherwise, the ! ;; indentation of the comment is relative to where a ! ;; normal statement would indent ! (if (< (current-column) comment-column) ! (c-add-semantics 'comment-intro) ! ;; reset semantics kludge ! (setq semantics nil) ! (c-add-semantics 'comment-intro))) ! ;; we might want to give additional offset to friends (in C++) ! (if (and (eq major-mode 'c++-mode) ! (looking-at "friend[ \t]+")) ! (c-add-semantics 'friend)) ! ;; return the semantics ! semantics)))) *************** *** 3032,3042 **** offset))) ! (defun c-indent-via-language-element (&optional lim semantics) ! ;; indent the curent line as C/C++ code. Optional LIM is the ! ;; farthest point back to search. Optional SEMANTICS is the semantic ! ;; information for the current line. Returns the amount of ;; indentation change ! (let* ((lim (or lim (c-point 'bod))) ! (c-semantics (or semantics (c-guess-basic-semantics lim))) (pos (- (point-max) (point))) (indent (apply '+ (mapcar 'c-get-offset c-semantics))) --- 3286,3294 ---- offset))) ! (defun c-indent-line (&optional semantics) ! ;; indent the curent line as C/C++ code. Optional SEMANTICS is the ! ;; semantic information for the current line. Returns the amount of ;; indentation change ! (let* ((c-semantics (or semantics (c-guess-basic-semantics))) (pos (- (point-max) (point))) (indent (apply '+ (mapcar 'c-get-offset c-semantics))) *************** *** 3126,3130 **** (skip-chars-forward " \t:" eol) (if (or (eolp) ! (looking-at "/\\*\\|//")) (c-forward-syntactic-ws here)) (- (current-column) cs-curcol) --- 3378,3382 ---- (skip-chars-forward " \t:" eol) (if (or (eolp) ! (looking-at c-comment-start-regexp)) (c-forward-syntactic-ws here)) (- (current-column) cs-curcol) *************** *** 3152,3162 **** (- (current-column) cs-curcol)))) - (defun c-adaptive-block-open (langelem) - ;; when substatement is on semantics list, return negative - ;; c-basic-offset, otherwise return zero - (if (assq 'substatement c-semantics) - (- c-basic-offset) - 0)) - (defun c-lineup-comment (langelem) ;; support old behavior for comment indentation. we look at --- 3404,3407 ---- *************** *** 3193,3197 **** ;; line up math statement-cont after the equals (save-excursion ! (let ((curcol (progn (goto-char (cdr langelem)) (current-column)))) --- 3438,3447 ---- ;; line up math statement-cont after the equals (save-excursion ! (let ((equalp (save-excursion ! (goto-char (c-point 'boi)) ! (skip-chars-forward "^=" (c-point 'eol)) ! (and (= (following-char) ?=) ! (- (point) (c-point 'boi))))) ! (curcol (progn (goto-char (cdr langelem)) (current-column)))) *************** *** 3200,3207 **** ;; there's no equal sign on the line c-basic-offset ! ;; calculate indentation column after equals and ws ! (forward-char 1) ! (skip-chars-forward " \t") ! (- (current-column) curcol)) ))) --- 3450,3461 ---- ;; there's no equal sign on the line c-basic-offset ! ;; calculate indentation column after equals and ws, unless ! ;; our line contains an equals sign ! (if (not equalp) ! (progn ! (forward-char 1) ! (skip-chars-forward " \t") ! (setq equalp 0))) ! (- (current-column) equalp curcol)) ))) *************** *** 3336,3340 **** ;; defuns for submitting bug reports ! (defconst c-version "3.304" "cc-mode version number.") (defconst c-mode-help-address "cc-mode-help@anthem.nlm.nih.gov" --- 3590,3594 ---- ;; defuns for submitting bug reports ! (defconst c-version "3.349" "cc-mode version number.") (defconst c-mode-help-address "cc-mode-help@anthem.nlm.nih.gov" *************** *** 3377,3380 **** --- 3631,3635 ---- 'c-hanging-colons-alist 'c-tab-always-indent + 'defun-prompt-regexp 'tab-width ) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/cl-compat.el emacs-19.26/lisp/cl-compat.el *** emacs-19.25/lisp/cl-compat.el Fri Jul 30 16:15:09 1993 --- emacs-19.26/lisp/cl-compat.el Fri Jun 17 16:03:17 1994 *************** *** 23,27 **** ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;; Commentary: ;; These are extensions to Emacs Lisp that provide a degree of --- 23,27 ---- ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;;; Commentary: ;; These are extensions to Emacs Lisp that provide a degree of *************** *** 43,47 **** ! ;; Code: ;; Require at load-time, but not when compiling cl-compat. --- 43,47 ---- ! ;;; Code: ;; Require at load-time, but not when compiling cl-compat. diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/cl-extra.el emacs-19.26/lisp/cl-extra.el *** emacs-19.25/lisp/cl-extra.el Tue Aug 10 00:12:31 1993 --- emacs-19.26/lisp/cl-extra.el Fri Jun 17 16:02:51 1994 *************** *** 23,27 **** ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;; Commentary: ;; These are extensions to Emacs Lisp that provide a degree of --- 23,27 ---- ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;;; Commentary: ;; These are extensions to Emacs Lisp that provide a degree of *************** *** 42,46 **** ! ;; Code: (or (memq 'cl-19 features) --- 42,46 ---- ! ;;; Code: (or (memq 'cl-19 features) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/cl-macs.el emacs-19.26/lisp/cl-macs.el *** emacs-19.25/lisp/cl-macs.el Fri Jul 30 16:15:07 1993 --- emacs-19.26/lisp/cl-macs.el Fri Jun 17 16:02:17 1994 *************** *** 23,27 **** ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;; Commentary: ;; These are extensions to Emacs Lisp that provide a degree of --- 23,27 ---- ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;;; Commentary: ;; These are extensions to Emacs Lisp that provide a degree of *************** *** 44,48 **** ! ;; Code: (or (memq 'cl-19 features) --- 44,48 ---- ! ;;; Code: (or (memq 'cl-19 features) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/cl-seq.el emacs-19.26/lisp/cl-seq.el *** emacs-19.25/lisp/cl-seq.el Fri Jul 30 16:14:26 1993 --- emacs-19.26/lisp/cl-seq.el Fri Jun 17 16:01:39 1994 *************** *** 23,27 **** ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;; Commentary: ;; These are extensions to Emacs Lisp that provide a degree of --- 23,27 ---- ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;;; Commentary: ;; These are extensions to Emacs Lisp that provide a degree of *************** *** 42,46 **** ! ;; Code: (or (memq 'cl-19 features) --- 42,46 ---- ! ;;; Code: (or (memq 'cl-19 features) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/cl.el emacs-19.26/lisp/cl.el *** emacs-19.25/lisp/cl.el Fri Jul 30 16:14:08 1993 --- emacs-19.26/lisp/cl.el Fri Jun 17 16:01:06 1994 *************** *** 23,27 **** ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;; Commentary: ;; These are extensions to Emacs Lisp that provide a degree of --- 23,27 ---- ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;;; Commentary: ;; These are extensions to Emacs Lisp that provide a degree of *************** *** 40,44 **** ! ;; Future notes: ;; Once Emacs 19 becomes standard, many things in this package which are --- 40,44 ---- ! ;;; Future notes: ;; Once Emacs 19 becomes standard, many things in this package which are *************** *** 47,51 **** ! ;; Change Log: ;; Version 2.02 (30 Jul 93): --- 47,51 ---- ! ;;; Change Log: ;; Version 2.02 (30 Jul 93): *************** *** 93,97 **** ! ;; Code: (defvar cl-emacs-type (cond ((or (and (fboundp 'epoch::version) --- 93,97 ---- ! ;;; Code: (defvar cl-emacs-type (cond ((or (and (fboundp 'epoch::version) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/cmacexp.el emacs-19.26/lisp/cmacexp.el *** emacs-19.25/lisp/cmacexp.el Tue May 3 18:17:05 1994 --- emacs-19.26/lisp/cmacexp.el Mon Sep 5 00:33:25 1994 *************** *** 4,8 **** ;; Author: Francesco Potorti` ! ;; Version: $Id: cmacexp.el,v 1.14 1994/05/03 22:17:03 kwzh Exp $ ;; Adapted-By: ESR ;; Keywords: c --- 4,8 ---- ;; Author: Francesco Potorti` ! ;; Version: $Id: cmacexp.el,v 1.18 1994/09/05 04:33:23 rms Exp $ ;; Adapted-By: ESR ;; Keywords: c *************** *** 67,71 **** ;; IMPROVEMENTS OVER emacs 18.xx cmacexp.el ========================== ! ;; - A lot of user visible changes. See above. ;; - #line directives are inserted, so __LINE__ and __FILE__ are ;; correctly expanded. Works even with START inside a string, a --- 67,71 ---- ;; IMPROVEMENTS OVER emacs 18.xx cmacexp.el ========================== ! ;; - A lot of user and programmer visible changes. See above. ;; - #line directives are inserted, so __LINE__ and __FILE__ are ;; correctly expanded. Works even with START inside a string, a *************** *** 97,105 **** "The preprocessor used by the cmacexp package. ! If you change this, be sure to preserve the -C (don't strip comments) option, or to set an equivalent one.") (defvar c-macro-cppflags "" ! "*Preprocessor flags used by c-macro-expand.") (defconst c-macro-buffer-name "*Macroexpansion*") --- 97,105 ---- "The preprocessor used by the cmacexp package. ! If you change this, be sure to preserve the `-C' (don't strip comments) option, or to set an equivalent one.") (defvar c-macro-cppflags "" ! "*Preprocessor flags used by `c-macro-expand'.") (defconst c-macro-buffer-name "*Macroexpansion*") *************** *** 151,155 **** (set-buffer displaybuf) (setq buffer-read-only nil) ! (buffer-flush-undo displaybuf) (erase-buffer) (insert expansion) --- 151,155 ---- (set-buffer displaybuf) (setq buffer-read-only nil) ! (buffer-disable-undo displaybuf) (erase-buffer) (insert expansion) *************** *** 240,244 **** (linenum 0) (startstat ()) ! (startmarker "")) (unwind-protect (save-excursion --- 240,246 ---- (linenum 0) (startstat ()) ! (startmarker "") ! (exit-status 0) ! (tempname (make-temp-name "/tmp/"))) (unwind-protect (save-excursion *************** *** 301,313 **** ;; Call the preprocessor. (if display (message mymsg)) ! (call-process-region 1 (point-max) "sh" t t nil "-c" ! (concat cppcommand " 2>/dev/null")) (if display (message (concat mymsg "done"))) ! ! ;; Find and delete the mark of the start of the expansion. ! ;; Look for `# nn "file.c"' lines and delete them. ! (goto-char (point-min)) ! (search-forward startmarker) ! (delete-region 1 (point)) (while (re-search-forward (concat "^# [0-9]+ \"" (regexp-quote filename) --- 303,318 ---- ;; Call the preprocessor. (if display (message mymsg)) ! (setq exit-status ! (call-process-region 1 (point-max) "sh" t t nil "-c" ! (concat cppcommand " 2>" tempname))) (if display (message (concat mymsg "done"))) ! (if (= (buffer-size) 0) ! ;; Empty output is normal after a fatal error. ! (insert "\nPreprocessor produced no output\n") ! ;; Find and delete the mark of the start of the expansion. ! ;; Look for `# nn "file.c"' lines and delete them. ! (goto-char (point-min)) ! (search-forward startmarker) ! (delete-region 1 (point))) (while (re-search-forward (concat "^# [0-9]+ \"" (regexp-quote filename) *************** *** 317,320 **** --- 322,335 ---- (forward-line 1) (delete-region beg (point)))) + + ;; If CPP got errors, show them at the beginning. + (or (eq exit-status 0) + (progn + (goto-char (point-min)) + (insert (format "Preprocessor terminated with status %s\n" + exit-status)) + (insert-file-contents tempname) + (insert "\n"))) + (delete-file tempname) ;; Compute the return value, keeping in account the space diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/comint.el emacs-19.26/lisp/comint.el *** emacs-19.25/lisp/comint.el Mon May 30 08:20:50 1994 --- emacs-19.26/lisp/comint.el Sat Aug 27 15:02:53 1994 *************** *** 70,75 **** ;;; m-c-l comint-show-output Show last batch of process output ;;; return comint-send-input - ;;; c-a comint-bol Beginning of line; skip prompt ;;; c-d comint-delchar-or-maybe-eof Delete char unless at end of buff ;;; c-c c-u comint-kill-input ^u ;;; c-c c-w backward-kill-word ^w --- 70,75 ---- ;;; m-c-l comint-show-output Show last batch of process output ;;; return comint-send-input ;;; c-d comint-delchar-or-maybe-eof Delete char unless at end of buff + ;;; c-c c-a comint-bol Beginning of line; skip prompt ;;; c-c c-u comint-kill-input ^u ;;; c-c c-w backward-kill-word ^w *************** *** 220,223 **** --- 220,228 ---- This variable is buffer-local.") + (defvar comint-password-prompt-regexp + "\\(^[Pp]assword\\|pass phrase\\):\\s *\\'" + "*Regexp matching prompts for passwords in the inferior process. + This is used by `comint-watch-for-password-prompt'.") + ;;; Here are the per-interpreter hooks. (defvar comint-get-old-input (function comint-get-old-input-default) *************** *** 397,401 **** (define-key comint-mode-map "\C-m" 'comint-send-input) (define-key comint-mode-map "\C-d" 'comint-delchar-or-maybe-eof) ! (define-key comint-mode-map "\C-a" 'comint-bol) (define-key comint-mode-map "\C-c\C-u" 'comint-kill-input) (define-key comint-mode-map "\C-c\C-w" 'backward-kill-word) --- 402,406 ---- (define-key comint-mode-map "\C-m" 'comint-send-input) (define-key comint-mode-map "\C-d" 'comint-delchar-or-maybe-eof) ! (define-key comint-mode-map "\C-c\C-a" 'comint-bol) (define-key comint-mode-map "\C-c\C-u" 'comint-kill-input) (define-key comint-mode-map "\C-c\C-w" 'backward-kill-word) *************** *** 617,632 **** comint-input-ring-file-name))) (t ! (let ((history-buf (get-file-buffer comint-input-ring-file-name)) (ring (make-ring comint-input-ring-size))) ! (save-excursion ! (set-buffer (or history-buf ! (find-file-noselect comint-input-ring-file-name))) ! ;; Save restriction in case file is already visited... ! ;; Watch for those date stamps in history files! ! (save-excursion ! (save-restriction (widen) ! (goto-char (point-min)) ! (while (re-search-forward "^[ \t]*\\([^#\n].*\\)[ \t]*$" nil t) (let ((history (buffer-substring (match-beginning 1) (match-end 1)))) --- 622,641 ---- comint-input-ring-file-name))) (t ! (let ((history-buf (get-buffer-create " *temp*")) ! (file comint-input-ring-file-name) ! (count 0) (ring (make-ring comint-input-ring-size))) ! (unwind-protect ! (save-excursion ! (set-buffer history-buf) (widen) ! (erase-buffer) ! (insert-file-contents file) ! ;; Save restriction in case file is already visited... ! ;; Watch for those date stamps in history files! ! (goto-char (point-max)) ! (while (and (< count comint-input-ring-size) ! (re-search-backward "^[ \t]*\\([^#\n].*\\)[ \t]*$" ! nil t)) (let ((history (buffer-substring (match-beginning 1) (match-end 1)))) *************** *** 634,641 **** (ring-empty-p ring) (not (string-equal (ring-ref ring 0) history))) ! (ring-insert ring history))))) ! ;; Kill buffer unless already visited. ! (if (null history-buf) ! (kill-buffer nil)))) (setq comint-input-ring ring comint-input-ring-index nil))))) --- 643,649 ---- (ring-empty-p ring) (not (string-equal (ring-ref ring 0) history))) ! (ring-insert-at-beginning ring history))) ! (setq count (1+ count)))) ! (kill-buffer history-buf)) (setq comint-input-ring ring comint-input-ring-index nil))))) *************** *** 1036,1051 **** in `comint-delimiter-argument-list' is a separate argument. Argument 0 is the command name." ! (let ((arg "\\(\\(\"[^\"]*\"\\|\'[^\']*\'\\|\`[^\`]*\`\\)\\|\\S \\)+") ! (args ()) (pos 0) (str nil)) ! ;; We build a list of all the args. Unnecessary, but more efficient, when ! ;; ranges of args are required, than picking out one by one and recursing. ! (while (string-match arg string pos) ! (setq pos (match-end 0) ! str (substring string (match-beginning 0) pos) ! ;; (match-end 2) is non-nil if we found quotes. ! args (if (match-end 2) (cons str args) ! (nconc (comint-delim-arg str) args)))) ! (let ((n (or nth (1- (length args)))) ! (m (if mth (1- (- (length args) mth)) 0))) (mapconcat (function (lambda (a) a)) (nthcdr n (nreverse (nthcdr m args))) " ")))) --- 1044,1075 ---- in `comint-delimiter-argument-list' is a separate argument. Argument 0 is the command name." ! (let ((argpart "[^ \n\t\"'`]+\\|\\(\"[^\"]*\"\\|'[^']*'\\|`[^`]*`\\)") ! (args ()) (pos 0) ! (count 0) ! beg str value quotes) ! ;; Build a list of all the args until we have as many as we want. ! (while (and (or (null mth) (<= count mth)) ! (string-match argpart string pos)) ! (if (and beg (= pos (match-beginning 0))) ! ;; It's contiguous, part of the same arg. ! (setq pos (match-end 0) ! quotes (or quotes (match-beginning 1))) ! ;; It's a new separate arg. ! (if beg ! ;; Put the previous arg, if there was one, onto ARGS. ! (setq str (substring string beg pos) ! args (if quotes (cons str args) ! (nconc (comint-delim-arg str) args)) ! count (1+ count))) ! (setq quotes (match-beginning 1)) ! (setq beg (match-beginning 0)) ! (setq pos (match-end 0)))) ! (if beg ! (setq str (substring string beg pos) ! args (if quotes (cons str args) ! (nconc (comint-delim-arg str) args)) ! count (1+ count))) ! (let ((n (or nth (1- count))) ! (m (if mth (1- (- count mth)) 0))) (mapconcat (function (lambda (a) a)) (nthcdr n (nreverse (nthcdr m args))) " ")))) *************** *** 1135,1143 **** (funcall (car functions) (concat input "\n")) (setq functions (cdr functions)))) - (funcall comint-input-sender proc input) (setq comint-input-ring-index nil) (set-marker comint-last-input-start pmark) (set-marker comint-last-input-end (point)) (set-marker (process-mark proc) (point)) (comint-output-filter proc ""))))) --- 1159,1169 ---- (funcall (car functions) (concat input "\n")) (setq functions (cdr functions)))) (setq comint-input-ring-index nil) + ;; Update the markers before we send the input + ;; in case we get output amidst sending the input. (set-marker comint-last-input-start pmark) (set-marker comint-last-input-end (point)) (set-marker (process-mark proc) (point)) + (funcall comint-input-sender proc input) (comint-output-filter proc ""))))) *************** *** 1307,1314 **** The prompt skip is done by skipping text matching the regular expression ! `comint-prompt-regexp', a buffer local variable. ! ! If you don't like this command, bind C-a to `beginning-of-line' ! in your hook, `comint-mode-hook'." (interactive "P") (beginning-of-line) --- 1333,1337 ---- The prompt skip is done by skipping text matching the regular expression ! `comint-prompt-regexp', a buffer local variable." (interactive "P") (beginning-of-line) *************** *** 1385,1392 **** "Prompt in the minibuffer for password and send without echoing. This function uses `send-invisible' to read and send a password to the buffer's ! process if STRING contains a password prompt (matches \"^[Pp]assword:\\\\s *\\\\'\"). This function could be in the list `comint-output-filter-functions'." ! (if (string-match "^[Pp]assword:\\s *\\'" string) (send-invisible nil))) --- 1408,1416 ---- "Prompt in the minibuffer for password and send without echoing. This function uses `send-invisible' to read and send a password to the buffer's ! process if STRING contains a password prompt defined by ! `comint-password-prompt-regexp'. This function could be in the list `comint-output-filter-functions'." ! (if (string-match comint-password-prompt-regexp string) (send-invisible nil))) *************** *** 1838,1842 **** (interactive) (if (comint-match-partial-filename) ! (prog2 (message "Completing file name...") (comint-dynamic-complete-as-filename)))) --- 1862,1867 ---- (interactive) (if (comint-match-partial-filename) ! (prog2 (or (eq (selected-window) (minibuffer-window)) ! (message "Completing file name...")) (comint-dynamic-complete-as-filename)))) *************** *** 1852,1856 **** (pathnondir (file-name-nondirectory filename)) (directory (if pathdir (comint-directory pathdir) default-directory)) ! (completion (file-name-completion pathnondir directory))) (cond ((null completion) (message "No completions of %s" filename) --- 1877,1882 ---- (pathnondir (file-name-nondirectory filename)) (directory (if pathdir (comint-directory pathdir) default-directory)) ! (completion (file-name-completion pathnondir directory)) ! (mini-flag (eq (selected-window) (minibuffer-window)))) (cond ((null completion) (message "No completions of %s" filename) *************** *** 1858,1862 **** ((eq completion t) ; Means already completed "file". (if comint-completion-addsuffix (insert " ")) ! (message "Sole completion")) ((string-equal completion "") ; Means completion on "directory/". (comint-dynamic-list-filename-completions)) --- 1884,1888 ---- ((eq completion t) ; Means already completed "file". (if comint-completion-addsuffix (insert " ")) ! (or mini-flag (message "Sole completion"))) ((string-equal completion "") ; Means completion on "directory/". (comint-dynamic-list-filename-completions)) *************** *** 1869,1873 **** (if comint-completion-addsuffix (insert (if (file-directory-p file) "/" " "))) ! (message "Completed")) ((and comint-completion-recexact comint-completion-addsuffix (string-equal pathnondir completion) --- 1895,1899 ---- (if comint-completion-addsuffix (insert (if (file-directory-p file) "/" " "))) ! (or mini-flag (message "Completed"))) ((and comint-completion-recexact comint-completion-addsuffix (string-equal pathnondir completion) *************** *** 1875,1879 **** ;; It's not unique, but user wants shortest match. (insert (if (file-directory-p file) "/" " ")) ! (message "Completed shortest")) ((or comint-completion-autolist (string-equal pathnondir completion)) --- 1901,1905 ---- ;; It's not unique, but user wants shortest match. (insert (if (file-directory-p file) "/" " ")) ! (or mini-flag (message "Completed shortest"))) ((or comint-completion-autolist (string-equal pathnondir completion)) *************** *** 1881,1885 **** (comint-dynamic-list-filename-completions)) (t ! (message "Partially completed")))))) success)) --- 1907,1911 ---- (comint-dynamic-list-filename-completions)) (t ! (or mini-flag (message "Partially completed"))))))) success)) *************** *** 1964,1968 **** Typing SPC flushes the help buffer." (let ((conf (current-window-configuration))) ! (with-output-to-temp-buffer " *Completions*" (display-completion-list (sort completions 'string-lessp))) (message "Hit space to flush") --- 1990,1994 ---- Typing SPC flushes the help buffer." (let ((conf (current-window-configuration))) ! (with-output-to-temp-buffer "*Completions*" (display-completion-list (sort completions 'string-lessp))) (message "Hit space to flush") *************** *** 1969,1973 **** (let (key first) (if (save-excursion ! (set-buffer (get-buffer " *Completions*")) (setq key (read-key-sequence nil) first (aref key 0)) --- 1995,1999 ---- (let (key first) (if (save-excursion ! (set-buffer (get-buffer "*Completions*")) (setq key (read-key-sequence nil) first (aref key 0)) *************** *** 1974,1978 **** (and (consp first) (eq (window-buffer (posn-window (event-start first))) ! (get-buffer " *Completions*")) (eq (key-binding key) 'mouse-choose-completion))) ;; If the user does mouse-choose-completion with the mouse, --- 2000,2004 ---- (and (consp first) (eq (window-buffer (posn-window (event-start first))) ! (get-buffer "*Completions*")) (eq (key-binding key) 'mouse-choose-completion))) ;; If the user does mouse-choose-completion with the mouse, *************** *** 1983,1987 **** (if (eq first ?\ ) (set-window-configuration conf) ! (setq unread-command-events (append key nil))))))) ;;; Converting process modes to use comint mode --- 2009,2013 ---- (if (eq first ?\ ) (set-window-configuration conf) ! (setq unread-command-events (listify-key-sequence key))))))) ;;; Converting process modes to use comint mode diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/compile.el emacs-19.26/lisp/compile.el *** emacs-19.25/lisp/compile.el Mon May 30 04:42:28 1994 --- emacs-19.26/lisp/compile.el Mon Sep 5 13:22:05 1994 *************** *** 35,39 **** ;;;###autoload ! (defconst compilation-window-height nil "*Number of lines in a compilation window. If nil, use Emacs default.") --- 35,39 ---- ;;;###autoload ! (defvar compilation-window-height nil "*Number of lines in a compilation window. If nil, use Emacs default.") *************** *** 101,105 **** (defvar compilation-error-regexp-alist '( ! ;; NOTE! This first one is repeated in grep-regexp-alist, below. ;; 4.3BSD grep, cc, lint pass 1: --- 101,105 ---- (defvar compilation-error-regexp-alist '( ! ;; NOTE! See also grep-regexp-alist, below. ;; 4.3BSD grep, cc, lint pass 1: *************** *** 110,118 **** ;; foo.f :16 some horrible error message ;; ;; We'll insist that the number be followed by a colon or closing ;; paren, because otherwise this matches just about anything ;; containing a number with spaces around it. ! ("\n\\([^:( \t\n]+\\)[:(][ \t]*\\([0-9]+\\)[:) \t]" 1 2) ;; 4.3BSD lint pass 2 ;; strcmp: variable # of args. llib-lc(359) :: /usr/src/foo/foo.c(8) --- 110,132 ---- ;; foo.f :16 some horrible error message ;; + ;; We refuse to match file:number:number + ;; because we want to leave that for another case (see below, GNAT). + ;; ;; We'll insist that the number be followed by a colon or closing ;; paren, because otherwise this matches just about anything ;; containing a number with spaces around it. ! ("\n\\([^:( \t\n]+\\)[:(][ \t]*\\([0-9]+\\)\\([) \t]\\|:[^0-9\n]\\)" 1 2) + ;; GNU error message with a program name in it. + ;; compilername:file:linenum: error message + ("\n\\([^:( \t\n]+\\):\\([^:( \t\n]+\\):[ \t]*\\([0-9]+\\)\\(:[^0-9\n]\\)" + 2 3) + + ;; Borland C++: + ;; Error ping.c 15: Unable to open include file 'sys/types.h' + ;; Warning ping.c 68: Call to function 'func' with no prototype + ("\n\\(Error\\|Warning\\) \\([^:( \t\n]+\\)\ + \\([0-9]+\\)\\([) \t]\\|:[^0-9\n]\\)" 2 3) + ;; 4.3BSD lint pass 2 ;; strcmp: variable # of args. llib-lc(359) :: /usr/src/foo/foo.c(8) *************** *** 146,150 **** ;; Microtec mcc68k: ;; "foo.c", line 32 pos 1; (E) syntax error; unexpected symbol: "lossage" ! ("\"\\([^,\" \n\t]+\\)\", lines? \\([0-9]+\\)[:., -]" 1 2) ;; MIPS RISC CC - the one distributed with Ultrix: --- 160,166 ---- ;; Microtec mcc68k: ;; "foo.c", line 32 pos 1; (E) syntax error; unexpected symbol: "lossage" ! ;; GNAT (as of July 94): ! ;; "foo.adb", line 2(11): warning: file name does not match ... ! ("\"\\([^,\" \n\t]+\\)\", lines? \\([0-9]+\\)[:., (-]" 1 2) ;; MIPS RISC CC - the one distributed with Ultrix: *************** *** 164,167 **** --- 180,190 ---- ("\n[EW], \\([^(\n]*\\)(\\([0-9]+\\),[ \t]*\\([0-9]+\\)" 1 2 3) + ;; GNAT compiler v1.82 + ;; foo.adb:2:1: Unit name does not match file name + ("\n\\([^ \n\t:]+\\):\\([0-9]+\\):\\([0-9]+\\)[: \t]" 1 2 3) + + ;; GNU message with program name and column number. + ("\n\\([^ \n\t:]+\\):\\([^ \n\t:]+\\):\ + \\([0-9]+\\):\\([0-9]+\\)[: \t]" 2 3 4) ) "Alist that specifies how to match errors in compiler output. *************** *** 184,188 **** (defvar grep-command "grep -n " ! "Last grep command used in \\{grep}; default for next grep.") ;;;###autoload --- 207,211 ---- (defvar grep-command "grep -n " ! "Last grep command used in \\[grep]; default for next grep.") ;;;###autoload *************** *** 205,209 **** buffer-file-name))))))") ! (defconst compilation-enter-directory-regexp ": Entering directory `\\(.*\\)'$" "Regular expression matching lines that indicate a new current directory. --- 228,232 ---- buffer-file-name))))))") ! (defvar compilation-enter-directory-regexp ": Entering directory `\\(.*\\)'$" "Regular expression matching lines that indicate a new current directory. *************** *** 212,216 **** The default value matches lines printed by the `-w' option of GNU Make.") ! (defconst compilation-leave-directory-regexp ": Leaving directory `\\(.*\\)'$" "Regular expression matching lines that indicate restoring current directory. --- 235,239 ---- The default value matches lines printed by the `-w' option of GNU Make.") ! (defvar compilation-leave-directory-regexp ": Leaving directory `\\(.*\\)'$" "Regular expression matching lines that indicate restoring current directory. *************** *** 256,259 **** --- 279,289 ---- (compile-internal compile-command "No more errors")) + ;;; run compile with the default command line + (defun recompile () + "Re-compile the program including the current buffer." + (interactive) + (save-some-buffers (not compilation-ask-about-save) nil) + (compile-internal compile-command "No more errors")) + ;;;###autoload (defun grep (command-args) *************** *** 351,363 **** (or (eq outwin (selected-window)) (set-window-point outwin (point-min))) ! (and compilation-window-height ! (= (window-width outwin) (frame-width)) ! (let ((w (selected-window))) ! (unwind-protect ! (progn ! (select-window outwin) ! (enlarge-window (- compilation-window-height ! (window-height)))) ! (select-window w)))) ;; Start the compilation. (if (fboundp 'start-process) --- 381,385 ---- (or (eq outwin (selected-window)) (set-window-point outwin (point-min))) ! (compilation-set-window-height outwin) ;; Start the compilation. (if (fboundp 'start-process) *************** *** 378,381 **** --- 400,421 ---- (setq compilation-last-buffer outbuf))) + ;; Set the height of WINDOW according to compilation-window-height. + (defun compilation-set-window-height (window) + (and compilation-window-height + (= (window-width window) (frame-width (window-frame window))) + ;; If window is alone in its frame, aside from a minibuffer, + ;; don't change its height. + (not (eq window (frame-root-window (window-frame window)))) + ;; This save-excursion prevents us from changing the current buffer, + ;; which might not be the same as the selected window's buffer. + (save-excursion + (let ((w (selected-window))) + (unwind-protect + (progn + (select-window window) + (enlarge-window (- compilation-window-height + (window-height)))) + (select-window w)))))) + (defvar compilation-minor-mode-map (let ((map (make-sparse-keymap))) *************** *** 394,397 **** --- 434,459 ---- (define-key map " " 'scroll-up) (define-key map "\^?" 'scroll-down) + ;; Set up the menu-bar + (define-key map [menu-bar compilation-menu] + (cons "Compile" (make-sparse-keymap "Compile"))) + + (define-key map [menu-bar compilation-menu compilation-mode-kill-compilation] + '("Stop compilation" . kill-compilation)) + (define-key map [menu-bar compilation-menu compilation-mode-separator2] + '("----" . nil)) + (define-key map [menu-bar compilation-menu compilation-mode-first-error] + '("First error" . first-error)) + (define-key map [menu-bar compilation-menu compilation-mode-previous-error] + '("Previous error" . previous-error)) + (define-key map [menu-bar compilation-menu compilation-mode-next-error] + '("Next error" . next-error)) + (define-key map [menu-bar compilation-menu compilation-separator2] + '("----" . nil)) + (define-key map [menu-bar compilation-menu compilation-mode-grep] + '("Grep" . grep)) + (define-key map [menu-bar compilation-menu compilation-mode-recompile] + '("Recompile" . recompile)) + (define-key map [menu-bar compilation-menu compilation-mode-compile] + '("Compile" . compile)) map) "Keymap for compilation log buffers. *************** *** 814,818 **** ;;;###autoload (define-key ctl-x-map "`" 'next-error) ! (defun compilation-next-error-locus (&optional move reparse) "Visit next compilation error and return locus in corresponding source code. This operates on the output from the \\[compile] command. --- 876,893 ---- ;;;###autoload (define-key ctl-x-map "`" 'next-error) ! (defun previous-error () ! "Visit previous compilation error message and corresponding source code. ! This operates on the output from the \\[compile] command." ! (interactive) ! (next-error '-1)) ! ! (defun first-error () ! "Reparse the error message buffer and start at the first error ! Visit corresponding source code. ! This operates on the output from the \\[compile] command." ! (interactive) ! (next-error '(1.1))) ! ! (defun compilation-next-error-locus (&optional move reparse silent) "Visit next compilation error and return locus in corresponding source code. This operates on the output from the \\[compile] command. *************** *** 827,831 **** backwards, if negative); default is 1. Optional second arg REPARSE, if non-nil, says to reparse the error message buffer and reset to the first ! error (plus MOVE - 1). The current buffer should be the desired compilation output buffer." --- 902,907 ---- backwards, if negative); default is 1. Optional second arg REPARSE, if non-nil, says to reparse the error message buffer and reset to the first ! error (plus MOVE - 1). If optional third argument SILENT is non-nil, return ! nil instead of raising an error if there are no more errors. The current buffer should be the desired compilation output buffer." *************** *** 834,944 **** (if (< move 1) 0 (1- move)))) (let (next-errors next-error) ! (save-excursion ! (set-buffer compilation-last-buffer) ! ;; compilation-error-list points to the "current" error. ! (setq next-errors ! (if (> move 0) ! (nthcdr (1- move) ! compilation-error-list) ! ;; Zero or negative arg; we need to move back in the list. ! (let ((n (1- move)) ! (i 0) ! (e compilation-old-error-list)) ! ;; See how many cdrs away the current error is from the start. ! (while (not (eq e compilation-error-list)) ! (setq i (1+ i) ! e (cdr e))) ! (if (> (- n) i) ! (error "Moved back past first error") ! (nthcdr (+ i n) compilation-old-error-list)))) ! next-error (car next-errors)) ! (while ! (if (null next-error) ! (progn ! (and move (/= move 1) ! (error (if (> move 0) ! "Moved past last error") ! "Moved back past first error")) ! (compilation-forget-errors) ! (error (concat compilation-error-message ! (and (get-buffer-process (current-buffer)) ! (eq (process-status ! (get-buffer-process ! (current-buffer))) ! 'run) ! " yet")))) ! (setq compilation-error-list (cdr next-errors)) ! (if (null (cdr next-error)) ! ;; This error is boring. Go to the next. ! t ! (or (markerp (cdr next-error)) ! ;; This error has a filename/lineno pair. ! ;; Find the file and turn it into a marker. ! (let* ((fileinfo (car (cdr next-error))) ! (buffer (compilation-find-file (cdr fileinfo) ! (car fileinfo) ! (car next-error)))) ! (if (null buffer) ! ;; We can't find this error's file. ! ;; Remove all errors in the same file. ! (progn ! (setq next-errors compilation-old-error-list) ! (while next-errors ! (and (consp (cdr (car next-errors))) ! (equal (car (cdr (car next-errors))) ! fileinfo) ! (progn ! (set-marker (car (car next-errors)) nil) ! (setcdr (car next-errors) nil))) ! (setq next-errors (cdr next-errors))) ! ;; Look for the next error. ! t) ! ;; We found the file. Get a marker for this error. ! ;; compilation-old-error-list is a buffer-local ! ;; variable, so we must be careful to extract its value ! ;; before switching to the source file buffer. ! (let ((errors compilation-old-error-list) ! (last-line (nth 1 (cdr next-error))) ! (column (nth 2 (cdr next-error)))) ! (set-buffer buffer) ! (save-excursion ! (save-restriction ! (widen) ! (goto-line last-line) ! (if column ! (move-to-column column) ! (beginning-of-line)) ! (setcdr next-error (point-marker)) ! ;; Make all the other error messages referring ! ;; to the same file have markers into the buffer. ! (while errors ! (and (consp (cdr (car errors))) ! (equal (car (cdr (car errors))) fileinfo) ! (let* ((this (nth 1 (cdr (car errors)))) ! (column (nth 2 (cdr (car errors)))) ! (lines (- this last-line))) ! (if (eq selective-display t) ! ;; When selective-display is t, ! ;; each C-m is a line boundary, ! ;; as well as each newline. ! (if (< lines 0) ! (re-search-backward "[\n\C-m]" ! nil 'end ! (- lines)) ! (re-search-forward "[\n\C-m]" ! nil 'end ! lines)) ! (forward-line lines)) ! (if column ! (move-to-column column)) ! (setq last-line this) ! (setcdr (car errors) (point-marker)))) ! (setq errors (cdr errors))))))))) ! ;; If we didn't get a marker for this error, or this ! ;; marker's buffer was killed, go on to the next one. ! (or (not (markerp (cdr next-error))) ! (not (marker-buffer (cdr next-error)))))) ! (setq next-errors compilation-error-list ! next-error (car next-errors)))) ;; Skip over multiple error messages for the same source location, --- 910,1029 ---- (if (< move 1) 0 (1- move)))) (let (next-errors next-error) ! (catch 'no-next-error ! (save-excursion ! (set-buffer compilation-last-buffer) ! ;; compilation-error-list points to the "current" error. ! (setq next-errors ! (if (> move 0) ! (nthcdr (1- move) ! compilation-error-list) ! ;; Zero or negative arg; we need to move back in the list. ! (let ((n (1- move)) ! (i 0) ! (e compilation-old-error-list)) ! ;; See how many cdrs away the current error is from the start. ! (while (not (eq e compilation-error-list)) ! (setq i (1+ i) ! e (cdr e))) ! (if (> (- n) i) ! (error "Moved back past first error") ! (nthcdr (+ i n) compilation-old-error-list)))) ! next-error (car next-errors)) ! (while ! (if (null next-error) ! (progn ! (and move (/= move 1) ! (error (if (> move 0) ! "Moved past last error") ! "Moved back past first error")) ! ;; Forget existing error messages if compilation has finished. ! (if (not (and (get-buffer-process (current-buffer)) ! (eq (process-status ! (get-buffer-process ! (current-buffer))) ! 'run))) ! (compilation-forget-errors)) ! (if silent ! (throw 'no-next-error nil) ! (error (concat compilation-error-message ! (and (get-buffer-process (current-buffer)) ! (eq (process-status ! (get-buffer-process ! (current-buffer))) ! 'run) ! " yet"))))) ! (setq compilation-error-list (cdr next-errors)) ! (if (null (cdr next-error)) ! ;; This error is boring. Go to the next. ! t ! (or (markerp (cdr next-error)) ! ;; This error has a filename/lineno pair. ! ;; Find the file and turn it into a marker. ! (let* ((fileinfo (car (cdr next-error))) ! (buffer (compilation-find-file (cdr fileinfo) ! (car fileinfo) ! (car next-error)))) ! (if (null buffer) ! ;; We can't find this error's file. ! ;; Remove all errors in the same file. ! (progn ! (setq next-errors compilation-old-error-list) ! (while next-errors ! (and (consp (cdr (car next-errors))) ! (equal (car (cdr (car next-errors))) ! fileinfo) ! (progn ! (set-marker (car (car next-errors)) nil) ! (setcdr (car next-errors) nil))) ! (setq next-errors (cdr next-errors))) ! ;; Look for the next error. ! t) ! ;; We found the file. Get a marker for this error. ! ;; compilation-old-error-list is a buffer-local ! ;; variable, so we must be careful to extract its value ! ;; before switching to the source file buffer. ! (let ((errors compilation-old-error-list) ! (last-line (nth 1 (cdr next-error))) ! (column (nth 2 (cdr next-error)))) ! (set-buffer buffer) ! (save-excursion ! (save-restriction ! (widen) ! (goto-line last-line) ! (if column ! (move-to-column column) ! (beginning-of-line)) ! (setcdr next-error (point-marker)) ! ;; Make all the other error messages referring ! ;; to the same file have markers into the buffer. ! (while errors ! (and (consp (cdr (car errors))) ! (equal (car (cdr (car errors))) fileinfo) ! (let* ((this (nth 1 (cdr (car errors)))) ! (column (nth 2 (cdr (car errors)))) ! (lines (- this last-line))) ! (if (eq selective-display t) ! ;; When selective-display is t, ! ;; each C-m is a line boundary, ! ;; as well as each newline. ! (if (< lines 0) ! (re-search-backward "[\n\C-m]" ! nil 'end ! (- lines)) ! (re-search-forward "[\n\C-m]" ! nil 'end ! lines)) ! (forward-line lines)) ! (if column ! (move-to-column column)) ! (setq last-line this) ! (setcdr (car errors) (point-marker)))) ! (setq errors (cdr errors))))))))) ! ;; If we didn't get a marker for this error, or this ! ;; marker's buffer was killed, go on to the next one. ! (or (not (markerp (cdr next-error))) ! (not (marker-buffer (cdr next-error)))))) ! (setq next-errors compilation-error-list ! next-error (car next-errors))))) ;; Skip over multiple error messages for the same source location, *************** *** 970,976 **** ;; Show compilation buffer in other window, scrolled to this error. (let* ((pop-up-windows t) ! (w (display-buffer (marker-buffer (car next-error))))) (set-window-point w (car next-error)) ! (set-window-start w (car next-error)))) ;; Find a buffer for file FILENAME. --- 1055,1063 ---- ;; Show compilation buffer in other window, scrolled to this error. (let* ((pop-up-windows t) ! (w (or (get-buffer-window (marker-buffer (car next-error)) 'visible) ! (display-buffer (marker-buffer (car next-error)))))) (set-window-point w (car next-error)) ! (set-window-start w (car next-error)) ! (compilation-set-window-height w))) ;; Find a buffer for file FILENAME. diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/complete.el emacs-19.26/lisp/complete.el *** emacs-19.25/lisp/complete.el Sun May 22 17:51:33 1994 --- emacs-19.26/lisp/complete.el Sun Aug 7 14:10:33 1994 *************** *** 23,27 **** ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;; Commentary: ;; Extended completion for the Emacs minibuffer. --- 23,27 ---- ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ! ;;; Commentary: ;; Extended completion for the Emacs minibuffer. *************** *** 95,99 **** ! ;; Code: (defvar PC-meta-flag t --- 95,99 ---- ! ;;; Code: (defvar PC-meta-flag t *************** *** 264,267 **** --- 264,268 ---- read-directory-name-internal))) (dirname nil) + dirlength (str (buffer-substring beg end)) (incname (and filename (string-match "<\\([^\"<>]*\\)>?$" str))) *************** *** 279,282 **** --- 280,290 ---- 'complete + ;; Record how many characters at the beginning are not included + ;; in completion. + (setq dirlength + (if filename + (length (file-name-directory str)) + 0)) + ;; Do substitutions in directory names (and filename *************** *** 476,480 **** (setq end (1- end)))) (setq improved t)) ! (insert (substring prefix i (1+ i))) (setq end (1+ end))) (setq i (1+ i))) --- 484,489 ---- (setq end (1- end)))) (setq improved t)) ! ;; Use format to discard text properties. ! (insert (format "%s" (substring prefix i (1+ i)))) (setq end (1+ end))) (setq i (1+ i))) *************** *** 523,528 **** (if (or completion-auto-help (eq mode 'help)) ! (with-output-to-temp-buffer " *Completions*" ! (display-completion-list (sort helpposs 'string-lessp))) (PC-temp-minibuffer-message " (Next char not unique)")) nil))))) --- 532,543 ---- (if (or completion-auto-help (eq mode 'help)) ! (with-output-to-temp-buffer "*Completions*" ! (display-completion-list (sort helpposs 'string-lessp)) ! (save-excursion ! (set-buffer standard-output) ! ;; Record which part of the buffer we are completing ! ;; so that choosing a completion from the list ! ;; knows how much old text to replace. ! (setq completion-base-size dirlength))) (PC-temp-minibuffer-message " (Next char not unique)")) nil))))) *************** *** 534,540 **** (PC-temp-minibuffer-message " (Sole completion)")) (delete-region beg end) ! (insert (if filename ! (substitute-in-file-name (concat dirname (car poss))) ! (car poss)))) t))))) --- 549,556 ---- (PC-temp-minibuffer-message " (Sole completion)")) (delete-region beg end) ! (insert (format "%s" ! (if filename ! (substitute-in-file-name (concat dirname (car poss))) ! (car poss))))) t))))) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/completion.el emacs-19.26/lisp/completion.el *** emacs-19.25/lisp/completion.el Fri Feb 11 03:08:13 1994 --- emacs-19.26/lisp/completion.el Thu Sep 1 02:11:22 1994 *************** *** 2213,2217 **** (message "Saving completions to file %s" filename) ! (let* ((trim-versions-without-asking t) (kept-old-versions 0) (kept-new-versions completions-file-versions-kept) --- 2213,2217 ---- (message "Saving completions to file %s" filename) ! (let* ((delete-old-versions t) (kept-old-versions 0) (kept-new-versions completions-file-versions-kept) *************** *** 2541,2545 **** (defun completion-before-command () ! (funcall (or (get this-command 'completion-function) 'use-completion-under-or-before-point))) (add-hook 'pre-command-hook 'completion-before-command) --- 2541,2546 ---- (defun completion-before-command () ! (funcall (or (and (symbolp this-command) ! (get this-command 'completion-function)) 'use-completion-under-or-before-point))) (add-hook 'pre-command-hook 'completion-before-command) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/cplus-md.el emacs-19.26/lisp/cplus-md.el *** emacs-19.25/lisp/cplus-md.el Tue May 3 19:33:04 1994 --- emacs-19.26/lisp/cplus-md.el Sun Jul 24 20:34:19 1994 *************** *** 126,130 **** (modify-syntax-entry ?* ". 23b" c++-mode-syntax-table) (modify-syntax-entry ?/ ". 124" c++-mode-syntax-table) ! (modify-syntax-entry ?\n ">" c++-mode-syntax-table)) (defvar c++-continued-member-init-offset nil --- 126,131 ---- (modify-syntax-entry ?* ". 23b" c++-mode-syntax-table) (modify-syntax-entry ?/ ". 124" c++-mode-syntax-table) ! (modify-syntax-entry ?\n ">" c++-mode-syntax-table) ! (modify-syntax-entry ?\^m ">" c++-mode-syntax-table)) (defvar c++-continued-member-init-offset nil diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/derived.el emacs-19.26/lisp/derived.el *** emacs-19.25/lisp/derived.el Sat May 28 00:48:13 1994 --- emacs-19.26/lisp/derived.el Sun Jun 5 11:16:07 1994 *************** *** 312,328 **** (setq idx (1+ idx))))) (defun derived-mode-merge-abbrev-tables (old new) ! "Merge an old abbrev table into a new one. ! This function requires internal knowledge of how abbrev tables work, ! presuming that they are obarrays with the abbrev as the symbol, the expansion ! as the value of the symbol, and the hook as the function definition. ! This could well break with some future version of Gnu Emacs." ! (mapatoms ! (function ! (lambda (symbol) ! (or (intern-soft (symbol-name symbol) new) ! (define-abbrev new (symbol-name symbol) ! (symbol-value symbol) (symbol-function symbol))))) ! old)) (provide 'derived) --- 312,328 ---- (setq idx (1+ idx))))) + ;; Merge an old abbrev table into a new one. + ;; This function requires internal knowledge of how abbrev tables work, + ;; presuming that they are obarrays with the abbrev as the symbol, the expansion + ;; as the value of the symbol, and the hook as the function definition. (defun derived-mode-merge-abbrev-tables (old new) ! (if old ! (mapatoms ! (function ! (lambda (symbol) ! (or (intern-soft (symbol-name symbol) new) ! (define-abbrev new (symbol-name symbol) ! (symbol-value symbol) (symbol-function symbol))))) ! old))) (provide 'derived) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/desktop.el emacs-19.26/lisp/desktop.el *** emacs-19.25/lisp/desktop.el Sat Apr 30 22:05:01 1994 --- emacs-19.26/lisp/desktop.el Wed Jul 6 15:44:35 1994 *************** *** 448,452 **** (defun desktop-buffer-rmail () "Load an RMAIL file." (if (eq 'rmail-mode mam) ! (progn (rmail-input fn) t))) ;; ---------------------------------------------------------------------------- (defun desktop-buffer-mh () "Load a folder in the mh system." --- 448,456 ---- (defun desktop-buffer-rmail () "Load an RMAIL file." (if (eq 'rmail-mode mam) ! (condition-case error ! (progn (rmail-input fn) t) ! (file-locked ! (kill-buffer (current-buffer)) ! 'ignored)))) ;; ---------------------------------------------------------------------------- (defun desktop-buffer-mh () "Load a folder in the mh system." diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/diary-ins.el emacs-19.26/lisp/diary-ins.el *** emacs-19.25/lisp/diary-ins.el Thu Apr 7 16:23:56 1994 --- emacs-19.26/lisp/diary-ins.el Mon Aug 29 20:33:06 1994 *************** *** 35,39 **** ;;; Code: ! (require 'diary) (defun make-diary-entry (string &optional nonmarking file) --- 35,39 ---- ;;; Code: ! (require 'diary-lib) (defun make-diary-entry (string &optional nonmarking file) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/diary-lib.el emacs-19.26/lisp/diary-lib.el *** emacs-19.25/lisp/diary-lib.el Sun May 22 17:51:44 1994 --- emacs-19.26/lisp/diary-lib.el Mon Aug 29 20:34:06 1994 *************** *** 1,3 **** ! ;;; diary.el --- diary functions. ;; Copyright (C) 1989, 1990, 1992, 1993, 1994 Free Software Foundation, Inc. --- 1,3 ---- ! ;;; diary-lib.el --- diary functions. ;; Copyright (C) 1989, 1990, 1992, 1993, 1994 Free Software Foundation, Inc. *************** *** 318,321 **** --- 318,328 ---- "Prepare a diary buffer with relevant entries in a fancy, noneditable form. This function is provided for optional use as the `diary-display-hook'." + (save-excursion;; Turn off selective-display in the diary file's buffer. + (set-buffer (get-file-buffer (substitute-in-file-name diary-file))) + (let ((diary-modified (buffer-modified-p))) + (subst-char-in-region (point-min) (point-max) ?\^M ?\n t) + (setq selective-display nil) + (kill-local-variable 'mode-line-format) + (set-buffer-modified-p diary-modified))) (if (or (not diary-entries-list) (and (not (cdr diary-entries-list)) *************** *** 338,348 **** (display-buffer holiday-buffer) (message "No diary entries for %s" date-string))) - (save-excursion;; Turn off selective-display in the diary file's buffer. - (set-buffer (get-file-buffer (substitute-in-file-name diary-file))) - (let ((diary-modified (buffer-modified-p))) - (subst-char-in-region (point-min) (point-max) ?\^M ?\n t) - (setq selective-display nil) - (kill-local-variable 'mode-line-format) - (set-buffer-modified-p diary-modified))) (save-excursion;; Prepare the fancy diary buffer. (set-buffer (get-buffer-create fancy-diary-buffer)) --- 345,348 ---- *************** *** 1894,1898 **** (calendar-gregorian-from-absolute date))))))))) ! (provide 'diary) ! ;;; diary.el ends here --- 1894,1898 ---- (calendar-gregorian-from-absolute date))))))))) ! (provide 'diary-lib) ! ;;; diary-lib.el ends here diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/diff.el emacs-19.26/lisp/diff.el *** emacs-19.25/lisp/diff.el Fri Apr 22 19:36:05 1994 --- emacs-19.26/lisp/diff.el Mon Jul 11 00:30:44 1994 *************** *** 267,272 **** (let ((bak (make-backup-file-name fn))) (if (file-exists-p bak) bak)) ! (let* ((dir (file-name-directory fn)) ! (base-versions (concat (file-name-nondirectory fn) ".~")) (bv-length (length base-versions))) (concat dir --- 267,276 ---- (let ((bak (make-backup-file-name fn))) (if (file-exists-p bak) bak)) ! ;; We use BACKUPNAME to cope with backups stored in a different dir. ! (let* ((backupname (car (find-backup-file-name fn))) ! (dir (file-name-directory backupname)) ! (base-versions (concat (file-name-sans-versions ! (file-name-nondirectory backupname)) ! ".~")) (bv-length (length base-versions))) (concat dir diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/dired-aux.el emacs-19.26/lisp/dired-aux.el *** emacs-19.25/lisp/dired-aux.el Tue May 24 15:05:51 1994 --- emacs-19.26/lisp/dired-aux.el Mon Jul 11 21:46:11 1994 *************** *** 629,637 **** ;; Return nil for success, offending file name else. (let* ((filename (dired-get-filename)) ! (elc-file ! (if (eq system-type 'vax-vms) ! (concat (substring filename 0 (string-match ";" filename)) "c") ! (concat filename "c"))) ! buffer-read-only failure) (condition-case err (save-excursion (byte-compile-file filename)) --- 629,633 ---- ;; Return nil for success, offending file name else. (let* ((filename (dired-get-filename)) ! elc-file buffer-read-only failure) (condition-case err (save-excursion (byte-compile-file filename)) *************** *** 638,641 **** --- 634,638 ---- (error (setq failure err))) + (setq elc-file (byte-compile-dest-file filename)) (if failure (progn *************** *** 1856,1859 **** --- 1853,1858 ---- ;;;###end dired-ins.el + + (provide 'dired-aux) ;;; dired-aux.el ends here diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/dired-x.el emacs-19.26/lisp/dired-x.el *** emacs-19.25/lisp/dired-x.el Fri May 27 02:37:49 1994 --- emacs-19.26/lisp/dired-x.el Tue Sep 6 02:56:43 1994 *************** *** 4,9 **** ;; Lawrence R. Dodd ;; Maintainer: Lawrence R. Dodd ! ;; Version: 2.27 ! ;; Date: 1994/04/05 12:45:30 ;; Keywords: dired extensions --- 4,9 ---- ;; Lawrence R. Dodd ;; Maintainer: Lawrence R. Dodd ! ;; Version: 2.37+ ! ;; Date: 1994/08/18 19:27:42 ;; Keywords: dired extensions *************** *** 32,38 **** ;;; has been removed or renamed in order to work properly with dired of ;;; GNU Emacs 19. All suggestions or comments are most welcomed. - ;;; - ;;; *Please* see the info pages. ;;; BUGS: Type M-x dired-x-submit-report and a report will be generated. --- 32,40 ---- ;;; has been removed or renamed in order to work properly with dired of ;;; GNU Emacs 19. All suggestions or comments are most welcomed. + ;;; + ;;; Please, PLEASE, *PLEASE* see the info pages. + ;;; + ;;; BUGS: Type M-x dired-x-submit-report and a report will be generated. *************** *** 50,53 **** --- 52,71 ---- ;;; bind some dired keys. *Please* see the info pages for more details. + ;;; CAUTION: If you are using a version of GNU Emacs earlier than 19.20 than + ;;; you may have to edit dired.el. The copy of dired.el in GNU Emacs versions + ;;; earlier than 19.20 incorrectly had the call to run-hooks *before* the call + ;;; to provide. In such a case, it is possible that byte-compiling and/or + ;;; loading dired can cause an infinite loop. To prevent this, make sure the + ;;; line of code + ;;; + ;;; (run-hooks 'dired-load-hook) + ;;; + ;;; is the *last* executable line in the file dired.el. That is, make sure it + ;;; comes *after* the line + ;;; + ;;; (provide 'dired) + ;;; + ;;; *Please* see the info pages for more details. + ;;; User defined variables: ;;; *************** *** 57,60 **** --- 75,79 ---- ;;; dired-bind-info ;;; dired-bind-man + ;;; dired-x-hands-off-my-keys ;;; dired-find-subdir ;;; dired-enable-local-variables *************** *** 102,127 **** ;;; (instead of autoloading to dired as is suggested in the info-pages). ! ;;; WARNING: The copy of dired.el in GNU Emacs versions earlier than 19.20 had ! ;;; the `provide' *after* the `run-hooks'. In such a case, loading dired below ! ;;; will cause an infinite loop. To prevent this we test the value of the GNU ! ;;; Emacs major version number before requiring dired. ! ! (if (string< "19.19" ! ;; Compare with major version number (i.e., 19.22 not 19.22.11). ! (substring emacs-version 0 ! (and (string-match "^[0-9]*\\.[0-9]*" emacs-version) ! (match-end 0)))) ! (require 'dired)) ;;; We will redefine some functions and also need some macros so we need to ! ;;; load dired stuff of GNU Emacs. Since dired-aux.el (at least up to GNU ! ;;; Emacs 19.22) does not `provide' itself, we do it here. This avoids the ! ;;; possibility recursive loading because of the nasty `eval-when-compile' that ! ;;; is in dired-aux.el. ! ! (and (not (featurep 'dired-aux)) ! (load "dired-aux" nil t) ! (not (featurep 'dired-aux)) ! (provide 'dired-aux)) ;;;; User-defined variables. --- 121,130 ---- ;;; (instead of autoloading to dired as is suggested in the info-pages). ! (require 'dired) ;;; We will redefine some functions and also need some macros so we need to ! ;;; load dired stuff of GNU Emacs. ! ! (require 'dired-aux) ;;;; User-defined variables. *************** *** 154,161 **** plus those ending with extensions in `dired-omit-extensions'.") ! (defvar dired-omit-files "^#\\|\\.$" ! "*Filenames matching this regexp will not be displayed (buffer-local). ! This only has effect when `dired-omit-files-p' is t. ! See also `dired-omit-extensions'.") (defvar dired-find-subdir nil ; t is pretty near to DWIM... --- 157,166 ---- plus those ending with extensions in `dired-omit-extensions'.") ! (defvar dired-omit-files "^#\\|^\\.$\\|^\\.\\.$" ! "*Filenames matching this regexp will not be displayed \(buffer-local\). ! This only has effect when `dired-omit-files-p' is t. See interactive function ! `dired-omit-toggle' \(\\[dired-omit-toggle]\) and variable ! `dired-omit-extensions'. The default is to omit `.', `..', and auto-save ! files.") (defvar dired-find-subdir nil ; t is pretty near to DWIM... *************** *** 529,533 **** (defun dired-omit-toggle (&optional flag) ! "Toggle between displaying and omitting files matching `dired-omit-files'. With an arg, and if omitting was off, don't toggle and just mark the files but don't actually omit them. --- 534,538 ---- (defun dired-omit-toggle (&optional flag) ! "Toggle omitting files matching `dired-omit-files' and `dired-omit-extensions'. With an arg, and if omitting was off, don't toggle and just mark the files but don't actually omit them. *************** *** 551,559 **** dired-bibtex-unclean-extensions dired-texinfo-unclean-extensions) ! "If non-nil, a list of extensions (strings) to omit from Dired ! listings. Defaults to the elements of ! `completion-ignored-extensions', `dired-latex-unclean-extensions', ! `dired-bibtex-unclean-extensions' and `dired-texinfo-unclean-extensions'.") (defun dired-omit-expunge (&optional regexp) "Erases all unmarked files matching REGEXP. --- 556,567 ---- dired-bibtex-unclean-extensions dired-texinfo-unclean-extensions) ! "If non-nil, a list of extensions \(strings\) to omit from Dired listings. ! Defaults to elements of `completion-ignored-extensions', ! `dired-latex-unclean-extensions', `dired-bibtex-unclean-extensions', and ! `dired-texinfo-unclean-extensions'. + See interactive function `dired-omit-toggle' \(\\[dired-omit-toggle]\) and + variables `dired-omit-files-p' and `dired-omit-files'.") + (defun dired-omit-expunge (&optional regexp) "Erases all unmarked files matching REGEXP. *************** *** 568,571 **** --- 576,580 ---- (if dired-omit-files-p (let ((omit-re (or regexp (dired-omit-regexp))) + (old-modified-p (buffer-modified-p)) count) (or (string= omit-re "") *************** *** 578,581 **** --- 587,596 ---- (set-buffer-modified-p (buffer-modified-p))) (message "(Nothing to omit)")))) + ;; Try to preserve modified state of buffer. So `%*' doesn't appear + ;; in mode-line of omitted buffers. + (set-buffer-modified-p (and old-modified-p + (save-excursion + (goto-char (point-min)) + (re-search-forward dired-re-mark nil t)))) count))) *************** *** 1289,1338 **** (defun dired-man () "Run man on this file. Display old buffer if buffer name matches filename. ! Results displayed based on value of `Man-notify'. See that variable." (interactive) ! (let* ((file (dired-get-filename)) ! (string (format "*man %s*" (file-name-nondirectory file))) ! (Man-buffer (get-buffer string)) ! (msg "Expanding manual page...cleaning...done")) ! ! ;; If Man-buffer already exists and has not been modified, display it. ! ;; Otherwise, create a fresh one. ! (if (and Man-buffer ! (save-excursion ! (set-buffer Man-buffer) ! (not (buffer-modified-p)) ! buffer-read-only)) ! ! (setq msg "Displaying pre-existing manual page.") ! ! ;; Create Man-buffer. ! (save-excursion ! ! ;; Prepare buffer. ! (setq Man-buffer (get-buffer-create string)) ! (set-buffer Man-buffer) ! (setq buffer-read-only nil) ! (erase-buffer) ! ! ;; Expand and clean man page. ! (message "Expanding manual page...") ! (call-process shell-file-name nil t nil "-c" ! (concat " nroff -man -h " file)) ! (message "Expanding manual page...cleaning...") ! (call-process-region (point-min) (point-max) ! shell-file-name t t nil "-c" " col -b") ! (goto-char (point-min)) ! ! ;; Reset buffer. ! (setq buffer-read-only t) ! (buffer-disable-undo (current-buffer)) ! (set-buffer-modified-p nil))) ! ! ;; Display results. Use display function of ../lisp/man.el whose behavior ! ;; is determined by user-defined variable Man-notify. ! (require 'man) ! (Man-notify-when-ready Man-buffer) ! ;; Overrides any message issued by above function. ! (message msg))) ;;; Run Info on files. --- 1304,1313 ---- (defun dired-man () "Run man on this file. Display old buffer if buffer name matches filename. ! Uses ../lisp/man.el of \\[manual-entry] fame." (interactive) ! (require 'man) ! (let ((file (dired-get-filename)) ! (manual-program "nroff -man -h")) ! (Man-getpage-in-background file))) ;;; Run Info on files. *************** *** 1540,1561 **** ;;;; FIND FILE AT POINT. - (defun dired-find-this-file (&optional other-window) - "Edit filename or directory at point. - Switch to a buffer visiting filename, creating one if none already exists. - With non-nil prefix argument OTHER-WINDOW do so in the other window. - - Useful for editing the file mentioned in the buffer you are viewing, or to - test if that file exists. Use minibuffer after snatching the filename." - - (interactive "P") - (let* ((guess (dired-filename-at-point)) - (file (read-file-name "Find file: " guess guess nil nil))) - (if other-window - (find-file-other-window (expand-file-name file)) - (find-file (expand-file-name file))))) ! (fset 'find-this-file 'dired-find-this-file) ! ;;; Internal function. (defun dired-filename-at-point () --- 1515,1583 ---- ;;;; FIND FILE AT POINT. ! (defvar dired-x-hands-off-my-keys t ! "*t means don't bind `dired-x-find-file' over `find-file' on keyboard. ! Similarly for `dired-x-find-file-other-window' over `find-file-other-window'. ! If you change this variable after dired-x.el is loaded then do ! \\[dired-x-bind-find-file].") ! ! ;;; Bind `dired-x-find-file{-other-window}' over wherever ! ;;; `find-file{-other-window}' is bound? ! (defun dired-x-bind-find-file () ! "Bind `dired-x-find-file' in place of `find-file' \(or reverse\). ! Similarly for `dired-x-find-file-other-window' and `find-file-other-window'. ! Binding direction based on `dired-x-hands-off-my-keys'. ! This function part of `after-init-hook'." ! (interactive) ! (if (interactive-p) ! (setq dired-x-hands-off-my-keys ! (not (y-or-n-p "Bind dired-x-find-file over find-file? ")))) ! (cond ((not dired-x-hands-off-my-keys) ! (substitute-key-definition 'find-file ! 'dired-x-find-file ! (current-global-map)) ! (substitute-key-definition 'find-file-other-window ! 'dired-x-find-file-other-window ! (current-global-map))) ! (t ! (substitute-key-definition 'dired-x-find-file ! 'find-file ! (current-global-map)) ! (substitute-key-definition 'dired-x-find-file-other-window ! 'find-file-other-window ! (current-global-map)))) ! ;; Clear mini-buffer. ! (message nil)) ! ! ;;; Now call it so binding is correct and put on `after-init-hook' in case ! ;;; user changes binding. ! (dired-x-bind-find-file) ! (add-hook 'after-init-hook 'dired-x-bind-find-file) ! ! (defun dired-x-find-file (filename) ! "Edit file FILENAME. ! May create a new window, or reuse an existing one. ! See the function `display-buffer'. ! ! Identical to `find-file' except when called interactively, with a prefix arg ! \(e.g., \\[universal-argument]\), in which case it guesses filename near ! point. Useful for editing file mentioned in buffer you are viewing, or to ! test if that file exists. Use minibuffer after snatching filename." ! (interactive (list (read-filename-at-point "Find file: "))) ! (find-file (expand-file-name filename))) ! ! (defun dired-x-find-file-other-window (filename) ! "Edit file FILENAME, in another window. ! May create a new window, or reuse an existing one. ! See the function `display-buffer'. ! ! Identical to `find-file-other-window' except when called interactively, with a ! prefix arg \(e.g., \\[universal-argument]\), in which case it guesses filename ! near point. Useful for editing file mentioned in buffer you are viewing, or ! to test if that file exists. Use minibuffer after snatching filename." ! (interactive (list (read-filename-at-point "Find file: "))) ! (find-file-other-window (expand-file-name filename))) ! ;;; Internal functions. (defun dired-filename-at-point () *************** *** 1592,1595 **** --- 1614,1628 ---- (expand-file-name (buffer-substring start (point)))))) + (defun read-filename-at-point (prompt) + ;;; Returns filename prompting with PROMPT with completion. If + ;;; `current-prefix-arg' is non-nil, uses name at point as guess. + (if current-prefix-arg + (let ((guess (dired-filename-at-point))) + (read-file-name prompt + (file-name-directory guess) + guess + nil (file-name-nondirectory guess))) + (read-file-name prompt default-directory))) + ;;;; BUG REPORTS *************** *** 1598,1602 **** ;;; reporter.el which is bundled with GNU Emacs v19. ! (defconst dired-x-version "2.27" "Revision number of dired-x.el -- dired extra for GNU Emacs v19. Type \\[dired-x-submit-report] to send a bug report. Available via anonymous --- 1631,1635 ---- ;;; reporter.el which is bundled with GNU Emacs v19. ! (defconst dired-x-version "2.37" "Revision number of dired-x.el -- dired extra for GNU Emacs v19. Type \\[dired-x-submit-report] to send a bug report. Available via anonymous diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/dired.el emacs-19.26/lisp/dired.el *** emacs-19.25/lisp/dired.el Sat May 28 08:11:15 1994 --- emacs-19.26/lisp/dired.el Sat Aug 6 14:36:26 1994 *************** *** 186,189 **** --- 186,190 ---- "-[-r][-w].[-r][-w].[-r][-w][xst]") "\\|")) + (defvar dired-re-perms "-[-r][-w].[-r][-w].[-r][-w].") (defvar dired-re-dot "^.* \\.\\.?$") *************** *** 365,369 **** (setq dirname (car dir-or-list)) (setq dirname dir-or-list)) ! (setq dirname (expand-file-name (directory-file-name dirname))) (if (file-directory-p dirname) (setq dirname (file-name-as-directory dirname))) --- 366,371 ---- (setq dirname (car dir-or-list)) (setq dirname dir-or-list)) ! (setq dirname (abbreviate-file-name ! (expand-file-name (directory-file-name dirname)))) (if (file-directory-p dirname) (setq dirname (file-name-as-directory dirname))) *************** *** 398,408 **** (if (not new-buffer-p) ; existing buffer ... (if switches ; ... but new switches ! (dired-sort-other switches)) ; this calls dired-revert ;; Else a new buffer (setq default-directory ! (abbreviate-file-name ! (if (file-directory-p dirname) ! dirname ! (file-name-directory dirname)))) (or switches (setq switches dired-listing-switches)) (dired-mode dirname switches) --- 400,418 ---- (if (not new-buffer-p) ; existing buffer ... (if switches ; ... but new switches ! (dired-sort-other switches) ; this calls dired-revert ! ;; If directory has changed on disk, offer to revert. ! (if (let ((attributes (file-attributes dirname)) ! (modtime (visited-file-modtime))) ! (or (eq modtime 0) ! (not (eq (car attributes) t)) ! (and (= (car (nth 5 attributes)) (car modtime)) ! (= (nth 1 (nth 5 attributes)) (cdr modtime))))) ! nil ! (message "Directory has changed on disk; type `g' to update Dired"))) ;; Else a new buffer (setq default-directory ! (if (file-directory-p dirname) ! dirname ! (file-name-directory dirname))) (or switches (setq switches dired-listing-switches)) (dired-mode dirname switches) *************** *** 482,485 **** --- 492,498 ---- (set (make-local-variable 'dired-subdir-alist) nil) (dired-build-subdir-alist) + (let ((attributes (file-attributes dirname))) + (if (eq (car attributes) t) + (set-visited-file-modtime (nth 5 attributes)))) (set-buffer-modified-p nil)))) *************** *** 514,517 **** --- 527,532 ---- ;; inset all files listed in the cdr (the car is the passed-in directory ;; list). + ;; We expand the file names here because the may have been abbreviated + ;; in dired-noselect. (let ((opoint (point))) (if (consp dir-or-list) *************** *** 518,524 **** (progn (mapcar ! (function (lambda (x) (insert-directory x switches wildcard full-p))) (cdr dir-or-list))) ! (insert-directory dir-or-list switches wildcard full-p)) (dired-insert-set-properties opoint (point))) (setq dired-directory dir-or-list)) --- 533,540 ---- (progn (mapcar ! (function (lambda (x) (insert-directory (expand-file-name x) ! switches wildcard full-p))) (cdr dir-or-list))) ! (insert-directory (expand-file-name dir-or-list) switches wildcard full-p)) (dired-insert-set-properties opoint (point))) (setq dired-directory dir-or-list)) *************** *** 961,965 **** ;; list-buffers uses this to display the dir being edited in this buffer. (set (make-local-variable 'list-buffers-directory) ! dired-directory) (set (make-local-variable 'dired-actual-switches) (or switches dired-listing-switches)) --- 977,981 ---- ;; list-buffers uses this to display the dir being edited in this buffer. (set (make-local-variable 'list-buffers-directory) ! (expand-file-name dired-directory)) (set (make-local-variable 'dired-actual-switches) (or switches dired-listing-switches)) *************** *** 1361,1365 **** (goto-char (point-min)) (setq dired-subdir-alist nil) ! (while (re-search-forward dired-subdir-regexp nil t) (save-excursion (goto-char (match-beginning 1)) --- 1377,1388 ---- (goto-char (point-min)) (setq dired-subdir-alist nil) ! (while (and (re-search-forward dired-subdir-regexp nil t) ! ;; Avoid taking a file name ending in a colon ! ;; as a subdir name. ! (not (save-excursion ! (goto-char (match-beginning 0)) ! (beginning-of-line) ! (forward-char 2) ! (save-match-data (looking-at dired-re-perms))))) (save-excursion (goto-char (match-beginning 1)) *************** *** 1733,1737 **** ;; but is about 1.5..2.0 times as fast. (Actually that's not worth it) (or (looking-at "^$\\|^. *$\\|^. total\\|^. wildcard") ! (looking-at dired-subdir-regexp))) (defun dired-next-marked-file (arg &optional wrap opoint) --- 1756,1761 ---- ;; but is about 1.5..2.0 times as fast. (Actually that's not worth it) (or (looking-at "^$\\|^. *$\\|^. total\\|^. wildcard") ! (and (looking-at dired-subdir-regexp) ! (save-excursion (not (dired-move-to-filename)))))) (defun dired-next-marked-file (arg &optional wrap opoint) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/disass.el emacs-19.26/lisp/disass.el *** emacs-19.25/lisp/disass.el Thu Sep 23 16:37:14 1993 --- emacs-19.26/lisp/disass.el Wed Jul 20 01:33:09 1994 *************** *** 42,46 **** (require 'byte-compile "bytecomp") ! (defvar disassemble-column-1-indent 5 "*") (defvar disassemble-column-2-indent 10 "*") --- 42,46 ---- (require 'byte-compile "bytecomp") ! (defvar disassemble-column-1-indent 8 "*") (defvar disassemble-column-2-indent 10 "*") *************** *** 170,174 **** constvec (aref obj 2))) (let ((lap (byte-decompile-bytecode bytes constvec)) ! op arg opname) (let ((tagno 0) tmp --- 170,174 ---- constvec (aref obj 2))) (let ((lap (byte-decompile-bytecode bytes constvec)) ! op arg opname pc-value) (let ((tagno 0) tmp *************** *** 178,187 **** (setq lap (cdr (memq tmp lap))))) (while lap (setq op (car (car lap)) arg (cdr (car lap))) (indent-to indent) (if (eq 'TAG op) ! (insert (int-to-string (car arg)) ":") ! (indent-to (+ indent disassemble-column-1-indent)) (if (and op --- 178,201 ---- (setq lap (cdr (memq tmp lap))))) (while lap + ;; Take off the pc value of the next thing + ;; and put it in pc-value. + (setq pc-value nil) + (if (numberp (car lap)) + (setq pc-value (car lap) + lap (cdr lap))) + ;; Fetch the next op and its arg. (setq op (car (car lap)) arg (cdr (car lap))) + (setq lap (cdr lap)) (indent-to indent) (if (eq 'TAG op) ! (progn ! ;; We have a label. Display it, but first its pc value. ! (if pc-value ! (insert (format "%d:" pc-value))) ! (insert (int-to-string (car arg)))) ! ;; We have an instruction. Display its pc value first. ! (if pc-value ! (insert (format "%d" pc-value))) (indent-to (+ indent disassemble-column-1-indent)) (if (and op *************** *** 242,247 **** (prin1 arg (current-buffer)))))) ) ! (insert "\n")) ! (setq lap (cdr lap))))) nil) --- 256,260 ---- (prin1 arg (current-buffer)))))) ) ! (insert "\n"))))) nil) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/disp-table.el emacs-19.26/lisp/disp-table.el *** emacs-19.25/lisp/disp-table.el Tue May 3 19:00:59 1994 --- emacs-19.26/lisp/disp-table.el Tue Jun 7 14:01:39 1994 *************** *** 153,157 **** With prefix argument, enable European character display iff arg is positive." (interactive "P") ! (if (or (< (prefix-numeric-value arg) 0) (and (null arg) (vectorp standard-display-table) --- 153,157 ---- With prefix argument, enable European character display iff arg is positive." (interactive "P") ! (if (or (<= (prefix-numeric-value arg) 0) (and (null arg) (vectorp standard-display-table) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/dissociate.el emacs-19.26/lisp/dissociate.el *** emacs-19.25/lisp/dissociate.el Sun Aug 1 16:50:07 1993 --- emacs-19.26/lisp/dissociate.el Tue Jul 26 11:51:24 1994 *************** *** 46,49 **** --- 46,51 ---- (search-function (if (> arg 0) 'search-forward 'word-search-forward)) (last-query-point 0)) + (if (= (point-max) (point-min)) + (error "The buffer contains no text to start from")) (switch-to-buffer outbuf) (erase-buffer) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/dos-fns.el emacs-19.26/lisp/dos-fns.el *** emacs-19.25/lisp/dos-fns.el Sun May 1 16:25:05 1994 --- emacs-19.26/lisp/dos-fns.el Tue Jun 7 11:31:51 1994 *************** *** 100,106 **** (add-hook 'find-file-not-found-hooks 'find-file-not-found-set-buffer-file-type) - ;;; We use the Emacs directory, not /usr/local - (setq Info-default-directory-list (list "c:/emacs/info")) - (defvar msdos-shells '("command.com" "4dos.com" "ndos.com") "*List of shells that use `/c' instead of `-c' and a backslashed command.") --- 100,103 ---- *************** *** 149,153 **** (defalias 'x-set-selection 'ignore) (fset 'x-get-selection '(lambda (&rest rest) "")) - (fset 'frame-parameters 'ignore) (fmakunbound 'font-menu-add-default) (global-unset-key [C-down-mouse-1]) --- 146,149 ---- diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/double.el emacs-19.26/lisp/double.el *** emacs-19.25/lisp/double.el Mon May 2 14:26:44 1994 --- emacs-19.26/lisp/double.el Wed Jun 22 14:02:08 1994 *************** *** 53,56 **** --- 53,60 ---- ;;; ChangeLog: + ;; * 1994-06-21 Per Abrahamsen + ;; Added `double-prefix-only'. + ;; * 1994-02-28 Per Abrahamsen + ;; Use 127 instead of 'delete to delete a character. ;; * 1994-02-03 Per Abrahamsen ;; Created. *************** *** 72,75 **** --- 76,84 ---- 3. The string to be inserted when the key is pressed twice.") + (defvar double-prefix-only t + "*Non-nil means that double mode mapping only works for prefix keys. + That is, for any key `X' in `double-map', `X' alone will be mapped + but not `C-u X' or `ESC X' since the X is not the prefix key.") + ;;; Read Event *************** *** 99,102 **** --- 108,115 ---- (cond (unread-command-events ;; Artificial event, ignore it. + (vector key)) + ((and double-prefix-only + (> (length (this-command-keys)) 1)) + ;; This is not a prefix key, ignore it. (vector key)) ((eq key 'magic-start) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/easymenu.el emacs-19.26/lisp/easymenu.el *** emacs-19.25/lisp/easymenu.el Wed May 25 16:34:33 1994 --- emacs-19.26/lisp/easymenu.el Sun Aug 14 00:09:12 1994 *************** *** 46,51 **** or a list to evaluate when the item is chosen. ! ENABLE is a symbol; if its value is non-nil, the item is enabled ! for selection. A menu item can be a string. Then that string appears in the menu as --- 46,51 ---- or a list to evaluate when the item is chosen. ! ENABLE is an expression; the item is enabled for selection ! whenever this expression's value is non-nil. A menu item can be a string. Then that string appears in the menu as *************** *** 104,107 **** --- 104,121 ---- (setq menu-items (cdr menu-items))) menu)) + + (defun easy-menu-change (path name items) + "Change menu found at PATH as item NAME to contain ITEMS. + PATH is a list of strings for locating the menu containing NAME in the + menu bar. ITEMS is a list of menu items, as in `easy-menu-define'. + These items entirely replace the previous items in that map. + + Call this from `activate-menubar-hook' to implement dynamic menus." + (let ((map (key-binding (apply 'vector + 'menu-bar + (mapcar 'intern (append path (list name))))))) + (if (keymapp map) + (setcdr map (cdr (easy-menu-create-keymaps name items))) + (error "Malformed menu in `easy-menu-change'")))) (defmacro easy-menu-remove (menu)) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/ebuff-menu.el emacs-19.26/lisp/ebuff-menu.el *** emacs-19.25/lisp/ebuff-menu.el Tue May 3 19:36:33 1994 --- emacs-19.26/lisp/ebuff-menu.el Sat Jul 2 13:00:27 1994 *************** *** 64,68 **** (setq select (catch 'electric-buffer-menu-select ! (message "<<< Press Space to bury the buffer list >>>") (if (eq (setq unread-command-events (list (read-event))) ?\ ) --- 64,68 ---- (setq select (catch 'electric-buffer-menu-select ! (message "<<< Press Return to bury the buffer list >>>") (if (eq (setq unread-command-events (list (read-event))) ?\ ) *************** *** 166,169 **** --- 166,170 ---- (define-key map "q" 'Electric-buffer-menu-quit) (define-key map " " 'Electric-buffer-menu-select) + (define-key map "\C-m" 'Electric-buffer-menu-select) (define-key map "\C-l" 'recenter) (define-key map "s" 'Buffer-menu-save) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/edebug.el emacs-19.26/lisp/edebug.el *** emacs-19.25/lisp/edebug.el Thu May 26 20:39:21 1994 --- emacs-19.26/lisp/edebug.el Tue Aug 23 17:53:02 1994 *************** *** 9,13 **** ;; edebug|Daniel LaLiberte|liberte@cs.uiuc.edu ;; |A source level debugger for Emacs Lisp. ! ;; |$Date: 1994/05/27 00:38:54 $|$Revision: 3.5.1.7 $|~/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: 1994/08/23 21:52:41 $|$Revision: 3.5.1.10 $|~/modes/edebug.el| ;; This file is part of GNU Emacs. *************** *** 84,88 **** (defconst edebug-version ! (let ((raw-version "$Revision: 3.5.1.7 $")) (substring raw-version (string-match "[0-9.]*" raw-version) (match-end 0)))) --- 84,88 ---- (defconst edebug-version ! (let ((raw-version "$Revision: 3.5.1.10 $")) (substring raw-version (string-match "[0-9.]*" raw-version) (match-end 0)))) *************** *** 605,609 **** (interactive) ;; Don't install if already installed. ! (if (eq 'read 'edebug-read) nil (elisp-eval-region-install) (defalias 'read 'edebug-read) --- 605,609 ---- (interactive) ;; Don't install if already installed. ! (if (eq (symbol-function 'read) 'edebug-read) nil (elisp-eval-region-install) (defalias 'read 'edebug-read) *************** *** 1079,1083 **** ;; Do this once here instead of several times. (max-lisp-eval-depth (+ 800 max-lisp-eval-depth)) ! (max-specpdl-size (+ 1200 max-specpdl-size))) (setq no-match (catch 'no-match --- 1079,1083 ---- ;; Do this once here instead of several times. (max-lisp-eval-depth (+ 800 max-lisp-eval-depth)) ! (max-specpdl-size (+ 2000 max-specpdl-size))) (setq no-match (catch 'no-match *************** *** 4380,4384 **** (easy-menu-define 'edebug edebug-mode-map "Edebug menus" edebug-mode-menus) ! (x-popup-menu nil (lookup-key edebug-mode-map [menu-bar Edebug])) ) --- 4380,4385 ---- (easy-menu-define 'edebug edebug-mode-map "Edebug menus" edebug-mode-menus) ! (if window-system ! (x-popup-menu nil (lookup-key edebug-mode-map [menu-bar Edebug]))) ) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/ediff.el emacs-19.26/lisp/ediff.el *** emacs-19.25/lisp/ediff.el Fri May 27 21:59:14 1994 --- emacs-19.26/lisp/ediff.el Tue Aug 9 23:50:03 1994 *************** *** 4,9 **** ;; Author: Michael Kifer ;; Created: February 2, 1994 ! ;; Version: 1.52 ! ;; Keywords: tools ;; This file is part of GNU Emacs. --- 4,9 ---- ;; Author: Michael Kifer ;; Created: February 2, 1994 ! ;; Version: 1.65c ! ;; Keywords: comparing, merging, patching, version control. ;; This file is part of GNU Emacs. *************** *** 30,34 **** ;; Apply patch selectively, like a pro! ! ;; This package provides a convenient way of simultaneous brousing through ;; the differences between a pair of files or buffers. The two files being ;; compared (file-A and file-B) are shown in separate windows (side by --- 30,34 ---- ;; Apply patch selectively, like a pro! ! ;; This package provides a convenient way of simultaneous browsing through ;; the differences between a pair of files or buffers. The two files being ;; compared (file-A and file-B) are shown in separate windows (side by *************** *** 39,43 **** ;; In addition, Ediff can apply a patch to a file and then let you step ! ;; though both files, the patched and the original one, simultateously, ;; difference-by-difference. You can even apply a patch right out of a ;; mail buffer, i.e., patches received by mail don't even have to be saved. --- 39,43 ---- ;; In addition, Ediff can apply a patch to a file and then let you step ! ;; though both files, the patched and the original one, simultaneously, ;; difference-by-difference. You can even apply a patch right out of a ;; mail buffer, i.e., patches received by mail don't even have to be saved. *************** *** 104,113 **** ;; same pair of files. So, in principle, it is possible to do, say, ;; pairwise comparison of three (or more) different files. Each session ! ;; would have its own *ediff-control* buffer and all the regarding a ! ;; particular session is local to the associated *ediff-control* buffer. ;; You can switch between sessions by suspending one session and then ! ;; switching to another *ediff-control* buffer. (Different such buffers ! ;; are distinguished by a numerical suffix, e.g., *ediff-control*<3>.) ! ;; This, if you would like to compare three files pairwise, you can do ;; this by preparing three different frames, each with its own control ;; window. (This would require a very wide screen, and I never claimed --- 104,113 ---- ;; same pair of files. So, in principle, it is possible to do, say, ;; pairwise comparison of three (or more) different files. Each session ! ;; would have its own Ediff Control Panel and all the regarding a ! ;; particular session is local to the associated control panel buffer. ;; You can switch between sessions by suspending one session and then ! ;; switching to another control panel. (Different control panel buffers ! ;; are distinguished by a numerical suffix, e.g., Ediff Control Panel<3>.) ! ;; Thus, if you would like to compare three files pairwise, you can do ;; this by preparing three different frames, each with its own control ;; window. (This would require a very wide screen, and I never claimed *************** *** 123,127 **** --- 123,154 ---- ;; with faces (unhighlighting on a dumb terminal). + ;;; Remote and Compressed Files + ;; --------------------------- + ;; Ediff will work with remote files, compressed files, and, probably, + ;; with encrypted files. (I have only tested it with ange-ftp.el, + ;; jka-compr.el, and uncompress.el.) This means that you can compare files + ;; residing on another machine, or you can apply a patch to a file on + ;; another machine (even the patch itself can be a remote file!). This is + ;; provided that you access remote files via the usual find-file command + ;; using the syntax acceptable to ange-ftp (see Emacs Manual). + ;; + ;; The files to be compared or patched can be compressed or be both + ;; compressed and remote. To be able to handle compressed files, you + ;; should use uncompress.el or jka-compr.el. Ediff is designed so that it + ;; will interface to these packages. When patching compressed or remote + ;; files, Ediff doesn't rename the source file into source-file-name.orig + ;; (unlike what `patch' would usually do). Instead, the source file + ;; retains its name and the result of applying the patch is placed in a + ;; temporary file that has the suffix `.patched'. Generally, this applies + ;; to files that are handled using black magic, such as special file + ;; handlers (ange-ftp and some compression and encryption packages all + ;; use this method). + ;; + ;; Regular files are treated by `patch' in the usual manner, i.e., the + ;; original is renamed into source-name.orig and the result of the patch + ;; is placed into the file source-name. + + ;;; Remarks: ;; ------- *************** *** 130,135 **** ;; It won't run under Emacs 18 at all. ;; 2. If running Lucid Emacs, Ediff requires at least version 19.9. ! ;; 3. The function vc-ediff requires the vc.el version that comes with ! ;; Emacs 19.22. --- 157,162 ---- ;; It won't run under Emacs 18 at all. ;; 2. If running Lucid Emacs, Ediff requires at least version 19.9. ! ;; 3. The function vc-ediff requires the version of vc.el that comes with ! ;; Emacs 19.22 and later. *************** *** 140,144 **** ;; ;; ediff-buffers - compare buffers ! ;; ediff (alias for ediff-files) ;; ediff-files - compare files ;; ediff-patch-file - patch file then compare --- 167,171 ---- ;; ;; ediff-buffers - compare buffers ! ;; ediff - alias for ediff-files) ;; ediff-files - compare files ;; ediff-patch-file - patch file then compare *************** *** 153,158 **** ;; standard Emacs distribution. ;; - ;; There is also the function ediff-files-remote, which can be invoked only - ;; from within another Emacs Lisp function, i.e., non-interactively. ;; ;; To use Ediff, put this in your .emacs file: --- 180,183 ---- *************** *** 226,230 **** ;; configuration you want. However, make sure you understand what you are ;; doing. Many variables that drive Ediff are local to the different ! ;; *ediff-control* buffers. Take a look at ediff-default-suspend-hook and ;; ediff-default-quit-hook to see what's involved. ;; The hooks in ediff-prepare-buffer-hooks are executed for each Ediff buffer --- 251,255 ---- ;; configuration you want. However, make sure you understand what you are ;; doing. Many variables that drive Ediff are local to the different ! ;; Ediff Control Panel buffers. Take a look at ediff-default-suspend-hook and ;; ediff-default-quit-hook to see what's involved. ;; The hooks in ediff-prepare-buffer-hooks are executed for each Ediff buffer *************** *** 231,236 **** ;; (A and B) right after these buffers are arranged. ;; ! ;; Highlighting of difference regions ! ;; ---------------------------------- ;; The second group of Ediff variables that could be changed, if you so ;; wish, is: --- 256,328 ---- ;; (A and B) right after these buffers are arranged. ;; ! ;; ! ;; Selective browsing: Control over stepping through difference regions ! ;; ----------------------------------------------- ! ;; ! ;; Sometimes it is convenient to be able to step through only some ! ;; difference regions, those that satisfy certain conditions and to ignore ! ;; all others. The commands `#f' and `#h' let the user specify regular ! ;; expressions to control the way Ediff skips to the next or previous ! ;; difference. Typing `#f' lets one specify a pair of regular expressions, ! ;; regexp-A and regexp-B. ! ;; Ediff will then start stepping only through those difference regions where ! ;; the region in buffer A matches regexp-A and the region in buffer B ! ;; matches regexp-B. ! ;; Similarly, using `#h', one specifies expressions that match difference ! ;; regions to be ignored while stepping through the differences. That is, if ! ;; the buf A part matches regexp-A and the buf B part matches regexp B then ! ;; the region will be ignored by ediff-next-difference and ! ;; ediff-previous-difference commands. ! ;; ! ;; Hitting `#f' and `#h' toggles this feature on/off. ! ;; ! ;; Note that selective browsing affects only ediff-next-difference and ! ;; ediff-previous-difference, i.e., the commands invoked by typing n/SPC ! ;; and p/DEL. You can still jump directly (using `j' or `ga/gb') to any ! ;; numbered difference. Also, it should be understood, that #f and #h do ! ;; not change the position of the point in the buffers. The effect of these ! ;; commands is seen only when the user types `n' or `p', i.e., when ! ;; Ediff is told to jump to the next or previous difference. ! ;; ! ;; Users can supply their own functions that specify how Ediff should do ! ;; selective browsing. To change the default Ediff function, add a function to ! ;; ediff-load-hooks which will do the following assignments: ! ;; ! ;; (fset ediff-hide-regexp-matches 'your-hide-function) ! ;; (fset ediff-focus-on-regexp-matches 'your-focus-function) ! ;; ! ;; Useful hints: To specify a regexp that matches everything, don't simply ! ;; type RET in response to a prompt. Typing RET tells Ediff to accept the ! ;; default value, which may not be what you want. Instead, one should enter ! ;; something like `^' or `$' --- which would match every line. ! ;; ! ;; If the user doesn't remember if selective browsing is in effect and ! ;; which regexps are being used, the status command, `i', will supply ! ;; the requisite information. ! ;; ! ;; In addition to the ability to ignore regions that match regular ! ;; expressions, Ediff can be ordered to start skipping over certain ! ;; `inessential' regions. This is controlled by the variable ! ;; ! ;; ediff-ignore-similar-regions ! ;; ! ;; which, if set to t, will cause Ediff to skip over difference regions ! ;; that has been found similar, i.e., where the only differences are those ! ;; in the white space and newlines. ! ;; ! ;; Note: In order for this feature to work, auto-refining of difference ! ;; regions must be on, since otherwise Ediff won't know if there are no ! ;; fine differences between regions. Under X, auto-refining is a default, ! ;; but it is nixed on a dumb terminal or in an Xterm window. Therefore, in ! ;; a non-windowing environment, the user must explicitly turn ! ;; auto-refining on (e.g., by typing `@'). ! ;; ! ;; CAUTION: If many inessential regions appear in a row, Ediff may take a ! ;; long time to jump to the next region because it has to compute fine ! ;; differences of all intermediate regions. ! ;; ! ;; ! ;; Highlighting difference regions ! ;; ------------------------------- ;; The second group of Ediff variables that could be changed, if you so ;; wish, is: *************** *** 265,276 **** ;; faces are actually identical on monochrome displays, because it is ;; rather poor in what you can do on such a display. So, I chose to use ! ;; italics to highlight other differences. Any ideas would be welcome. (In ! ;; Lucid Emacs, the faces are different because it supports pixmaps.) ;; There are two ways to change the default setting for highlighting faces: ;; either change the variables, as in ;; ! ;; (setq ediff-current-diff-face-A (internal-get-face 'bold-italic)) ;; ! ;; (`internal-get-face' should be `get-face' if you are using Lucid Emacs) ;; or by selectively modifying the defaults: ;; --- 357,371 ---- ;; faces are actually identical on monochrome displays, because it is ;; rather poor in what you can do on such a display. So, I chose to use ! ;; italics to highlight other differences. Any ideas would be welcome. ;; There are two ways to change the default setting for highlighting faces: ;; either change the variables, as in ;; ! ;; (setq ediff-current-diff-face-A 'bold-italic) ;; ! ;; or ! ;; ! ;; (setq ediff-current-diff-face-A ! ;; (copy-face 'bold-italic 'ediff-current-diff-face-A)) ! ;; ;; or by selectively modifying the defaults: ;; *************** *** 284,287 **** --- 379,387 ---- ;; Ediff. ;; + ;; Note: it is not recommended to use `internal-get-face' (or `get-face' in + ;; Lucid) when defining faces for Ediff, since this may cause + ;; problems when there are several frames with different font sizes. + ;; Instead, use copy-face or set/make-face-* as shown above. + ;; ;; The last group of variables in this group, ;; *************** *** 317,322 **** ;; Refining difference regions ;; --------------------------- ! ;; There are also variables that control the way fine differences are ! ;; highlighted. This feature lets the user highlight the exact words that ;; make the difference regions in buffer A and B different. This process ;; ignores spaces, tabs, and newlines. --- 417,422 ---- ;; Refining difference regions ;; --------------------------- ! ;; Ediff has variables that control the way fine differences are ! ;; highlighted. This feature lets the user highlight the exact words that ;; make the difference regions in buffer A and B different. This process ;; ignores spaces, tabs, and newlines. *************** *** 342,346 **** ;; ediff-fine-diff-program ;; ediff-fine-diff-options ! ;; ediff-wordify-function ;; ;; These variables let the user control how fine differences are computed. --- 442,446 ---- ;; ediff-fine-diff-program ;; ediff-fine-diff-options ! ;; ediff-forward-word-function ;; ;; These variables let the user control how fine differences are computed. *************** *** 347,355 **** ;; `ediff-fine-diff-program' is diff, by default. However, you can use ;; any function as long as it produces output consistent with diff. ! ;; `ediff-wordify-function' is a lisp function that determines how the ;; current difference region is split into words. (Fine diferences are ;; computed by first splitting the current difference region into words and ;; then passing this along to `ediff-fine-diff-program'. For the default ! ;; wordify function, `ediff-wordify', a word is a string consisting of ;; letters, `-', or `_', or a string consisting of symbols that are neither ;; space, nor a letter.) --- 447,455 ---- ;; `ediff-fine-diff-program' is diff, by default. However, you can use ;; any function as long as it produces output consistent with diff. ! ;; `ediff-forward-word-function' is a lisp function that determines how the ;; current difference region is split into words. (Fine diferences are ;; computed by first splitting the current difference region into words and ;; then passing this along to `ediff-fine-diff-program'. For the default ! ;; wordify function, `ediff-forward-word', a word is a string consisting of ;; letters, `-', or `_', or a string consisting of symbols that are neither ;; space, nor a letter.) *************** *** 375,383 **** ;; has several other useful options (type 'man diff' to find out). ;; ! ;; The output from diff is found in *ediff-diff* buffer. However, this ! ;; makes sense only if you also intend to use Ediff to browse through the ! ;; diff'ed files before sending the patch. This is because diff.el is much ! ;; faster in yielding the output of diff (Ediff is a big gun, if used ! ;; for this simple purpose). ;; ;; Miscellaneous --- 475,499 ---- ;; has several other useful options (type 'man diff' to find out). ;; ! ;; The output from diff is found in *ediff-diff* buffer, which you can save. ! ;; However, using Ediff for producing a diff output makes sense only if you ! ;; also intend to use Ediff to browse through the diff'ed files before ! ;; sending the patch. This is because diff.el, which also comes with ! ;; Emacs, is much faster in yielding the output of diff (Ediff is a big ! ;; gun, if used for this simple purpose). ! ;; ! ;; Mode line ! ;; --------- ! ;; ! ;; When Ediff is running, the mode line of Ediff Control Panel buffer ! ;; displays the current difference being displayed and the total number of ! ;; difference regions in the two files. ! ;; ! ;; The mode line of the buffers being compared displays the type of the ! ;; buffer (`A:' or `B:') and (usually) the file name. Ediff is trying to be ! ;; intelligent in choosing mode line buffer identification. In particular, ! ;; it works well with uniquify.el and mode-line.el packages (which improve ! ;; on the default way in which Emacs displays buffer identification). ! ;; If you don't like the way Ediff identifies its buffers, there is always ! ;; ediff-prepare-buffer-hooks, which can be used to modify the mode line. ;; ;; Miscellaneous *************** *** 440,443 **** --- 556,565 ---- ;; The total number of differences and the current difference number are ;; always displayed in the mode line of the control window. + ;; + ;; If, after making changes to buffers A and B, you decide to save them, it + ;; is recommended to use `ediff-save-buffer', which is bound to `wa' and + ;; `wb' (`wa will save buffer A and `wb' saves buffer B). + ;; + ;; Typing `wf' will also save the diff output in a file. ;;; Display Modes *************** *** 453,462 **** ;; 1. file-A and file-B are in different frames (you have to put them into ;; different frames manually); or ! ;; 2. *ediff-control* buffer is visible in one frame and one other file (A ;; or B) is visible in another frame. If, say, fileA is visible in a ! ;; different frame than *ediff-control*, fileB doesn't have to be ;; visible. If it is, Ediff will continue displaying fileB in the frame ;; where it was visible before. If it isn't then Ediff will arrange for ! ;; fileB to share a frame with *ediff-control*. ;; ;; If all three buffers are in separate frames, Ediff will switch to a --- 575,584 ---- ;; 1. file-A and file-B are in different frames (you have to put them into ;; different frames manually); or ! ;; 2. Ediff Control Panel is visible in one frame and one other file (A ;; or B) is visible in another frame. If, say, fileA is visible in a ! ;; different frame than Ediff Control Panel, fileB doesn't have to be ;; visible. If it is, Ediff will continue displaying fileB in the frame ;; where it was visible before. If it isn't then Ediff will arrange for ! ;; fileB to share a frame with Ediff Control Panel. ;; ;; If all three buffers are in separate frames, Ediff will switch to a *************** *** 463,467 **** ;; 3-frame mode. If Ediff buffers are currently visible only in two ;; frames, Ediff will work in a 2-frame mode. In this mode, one of the ! ;; frames will be shared by *ediff-control* and file-A or file-B ;; (whichever is appropriate). --- 585,589 ---- ;; 3-frame mode. If Ediff buffers are currently visible only in two ;; frames, Ediff will work in a 2-frame mode. In this mode, one of the ! ;; frames will be shared by Ediff Control Panel and file-A or file-B ;; (whichever is appropriate). *************** *** 482,486 **** ;; faces. Somethimes, these may cause highlighting of the refinements or ;; of the unselected differences to disappear. Hitting `!' will bring them ! ;; back. In version 19.23, these problems no longer occur. ;; 3. On a monochrome display, the repertoire of faces with which to --- 604,608 ---- ;; faces. Somethimes, these may cause highlighting of the refinements or ;; of the unselected differences to disappear. Hitting `!' will bring them ! ;; back. In version 19.23 and later, these problems no longer occur. ;; 3. On a monochrome display, the repertoire of faces with which to *************** *** 743,747 **** --- 865,944 ---- ;; Fixed buglet in vc-ediff (thanks to Ray Nickson ). + ;; Wed May 18, 1994 + + ;; Modified ediff-read-file-name to not put long file names in the + ;; default prompt area, as suggested by KevinB@bartley.demon.co.uk. + ;; Applied patch supplied by burt@dfki.uni-kl.de, fixing a problem with + ;; ediff-diff-to-diff in Lemacs. + + ;; Tue May 31, 1994 + + ;; Added ediff-forward-word-function (as suggested by Job Ganzevoort + ;; ). Modified ediff-default-quit-hook so it + ;; will clean things up in a more satisfactory way. + + ;; Thu Jun 2, 1994 + + ;; Added `ediff-toggle-regexp-match', which allows the user to step + ;; through only those difference regions that match some regexp; or, + ;; vice versa, to skip over regions that match a regexp. (This feature + ;; was suggested by Andy Scott .) + ;; Added ediff-eval-in-buffer, which is a modified emerge-eval-in-buffer. + ;; The function ediff-status-info, bound to `i', now replaces and extends + ;; ediff-file-names and ediff-line-numbers, which were bound to `f' + ;; and `i', respectively. + + ;; Wed Jun 8, 1994 + + ;; Made `ediff-frame-has-menubar' into a function; copied + ;; `emerge-defvar-local' and turned it into `ediff-defvar-local' + ;; This is supposed to make the same ediff.elc file work for both Emacs + ;; and Lucid Emacs, at least, if compiled under Lucid Emacs. (Thanks + ;; to Eric Eide .) + + ;; Wed Jun 10, 1994 + + ;; Improved `ediff-read-file-name' and `ediff-buffers' so they are now + ;; providing more intuitive defaults. Modified `ediff-read-file-name' + ;; so it won't cause problems under OS/2. + + ;; Fri Jun 24, 1994 + + ;; Modified ediff-find-file, ediff-files-internal, and made + ;; emerge-verify-file-buffer into ediff-verify-file-buffer so that + ;; Ediff will work correctly with remote and compressed + ;; files. (Suggested by Sandy Rutherford .) + ;; Fri Jun 28, 1994 + + ;; Fixed ediff-patch-files to work with remote and compressed files. + + ;; Wed July 20, 1994 + + ;; Changed menu bar items per RMS's suggestion. Changed odd/even faces + ;; in Lemacs to italic. Changed ediff-*-face-* variables so that they + ;; will contain names of faces instead of the face internal + ;; representation. (Copy-face works better with face names than with + ;; face internal representation. With face internal representation, if + ;; a face vector mentions a font explicitly, copy-face may attempt to + ;; copy this font, which would cause an error if the font has a wrong + ;; size for one of the existing frames.) Improved the way + ;; mode-line-buffer-identification is set in ediff-setup so that Ediff + ;; will accommodate the way buffers are identified in mode-line.el and + ;; uniquify.el. + + ;; Fri August 5, 1994 + + ;; Ediff can now automatically skip over regions that differ only in + ;; the white space and line breaks. This is controled with the variable + ;; `ediff-ignore-similar-regions' and can be toggled on/off by typing + ;; `##'. + + ;; Mon August 8, 1994 + + ;; If ediff-save-buffer is invoked with `wf', it'll save the diff + ;; output in a file. + + ;;; Acknowledgements: *************** *** 748,752 **** ;; Special thanks to Alastair Burt , Kevin Esler ;; , Kevin Broadey , ! ;; Eric Freudenthal , Job Ganzevoort ;; , Boris Goldowsky , ;; Allan Gottlieb , Xiaoli Huang --- 945,951 ---- ;; Special thanks to Alastair Burt , Kevin Esler ;; , Kevin Broadey , ! ;; Harald Boegeholz , ! ;; Robert Estes , Eric Eide , ! ;; Eric Freudenthal , Job Ganzevoort ;; , Boris Goldowsky , ;; Allan Gottlieb , Xiaoli Huang *************** *** 756,762 **** ;; , Martin Maechler ;; , Richard Mlynarik , ! ;; Ray Nickson , Andy Scott , ! ;; Richard Stanton , for contributing ideas, ! ;; patches and bug reports. ;; ;; Thanks also to many others who felt obliged to drop a thanks note. --- 955,963 ---- ;; , Martin Maechler ;; , Richard Mlynarik , ! ;; Ray Nickson , Sandy Rutherford ! ;; , Andy Scott , ! ;; Richard Stallman , Richard Stanton ! ;; , Peter Stout ! ;; for contributing ideas, patches, and bug reports. ;; ;; Thanks also to many others who felt obliged to drop a thanks note. *************** *** 794,797 **** --- 995,1005 ---- (` (aref ediff-difference-vector (, n)))) + ;; tell if it has been previously found that the region doesn't + ;; contain diffs other than the white space and newlines + ;; The argument, N, is the diff region number used by Ediff to index the + ;; diff vector. It is 1 less than the number seen by the user. + (defmacro ediff-no-fine-diffs (n) + (` (aref (ediff-get-difference n) 3))) + (defmacro ediff-get-diff-overlay-from-vector (vec buf-type) (` (aref (, vec) *************** *** 811,814 **** --- 1019,1029 ---- (defmacro ediff-set-fine-diff-vector (n fine-vec) (` (aset (ediff-get-difference (, n)) 2 (, fine-vec)))) + + ;; if flag is t, puts a mark on diff region saying that + ;; the differences are in white space only. If flag is nil, + ;; the region is marked as essential (i.e., differences are + ;; not just in the white space and newlines.) + (defmacro ediff-mark-diff-as-space-only (n flag) + (` (aset (ediff-get-difference (, n)) 3 (, flag)))) (defmacro ediff-get-fine-diff-vector (n) *************** *** 815,823 **** (` (ediff-get-fine-diff-vector-from-vec (ediff-get-difference (, n))))) ! (defmacro ediff-frame-has-menubar () ! (if (ediff-if-lucid) ! current-menubar ! (< 0 (cdr (assq 'menu-bar-lines (frame-parameters (selected-frame))))) ! )) --- 1030,1064 ---- (` (ediff-get-fine-diff-vector-from-vec (ediff-get-difference (, n))))) ! ! (defmacro ediff-defvar-local (var value doc) ! "Defines SYMBOL as an advertised local variable. ! Performs a defvar, then executes `make-variable-buffer-local' on ! the variable. Also sets the `preserved' (Emacs) or `permanent-local' (Lucid) ! property, so that `kill-all-local-variables' (called by major-mode setting ! commands) won't destroy Ediff control variables. ! ! This is a merge of `emerge-defvar-local' for Emacs and Lucid Emacs. It is ! needed to make the same ediff.elc work under both Emacsen." ! (` (progn ! (defvar (, var) (, value) (, doc)) ! (make-variable-buffer-local '(, var)) ! (put '(, var) ! (if (ediff-if-lucid) 'permanent-local 'preserved) ! t)))) ! ! (defmacro ediff-eval-in-buffer (buffer &rest forms) ! "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. ! This is essentially `emerge-eval-in-buffer' with the test for live buffers." ! (` (let ((StartBuffer (current-buffer))) ! (if (ediff-buffer-live-p (, buffer)) ! (unwind-protect ! (progn ! (set-buffer (, buffer)) ! (,@ forms)) ! (set-buffer StartBuffer)) ! (beep 1) ! (message "You seem to have killed an essential Ediff buffer---quit!")) ! ))) *************** *** 836,841 **** `vc-ediff' `rcs-ediff' - or through a non-interactive Emacs Lisp function - `ediff-files-remote' Commands: --- 1077,1080 ---- *************** *** 846,861 **** (setq mode-name "Ediff")) - (defvar ediff-version "1.52" - "The current version of Ediff.") - (defun ediff-version () - "Return string describing the version of Ediff. - When called interactively, displays the version." - (interactive) - (if (interactive-p) - (message "Ediff version %s" (ediff-version)) - ediff-version)) - - ;; Hook variables --- 1085,1089 ---- *************** *** 886,898 **** (defconst ediff-help-message-long ! "p,DEL - prev diff v/V - scroll up/dn * - refine diff ! - recomp diffs ! n,SPC - next diff - scroll lt/rt ab - diff A to B l - line numbers ! j - jump to diff s - toggle split ba - diff B to A f - file names ! ga/gb - goto pt in A/B h - toggle hilit ra - restore A z - suspend Ediff ! c - recenter @ - toggle refine rb - restore B q - quit Ediff ! wa/wb - save buf A/B A/B - toggle read-only in buffers A/B ? - toggle help") (defconst ediff-help-message-short ! " ? - toggle help window") (defvar ediff-help-message ediff-help-message-long --- 1114,1132 ---- (defconst ediff-help-message-long ! " Moving around | Toggling features | Miscellaneous ! =======================|===========================|=========================== ! p,DEL -previous diff | s -vert/horiz split | ab/ba -copy diff A->B/B->A ! n,SPC -next diff | h -hiliting | ra/rb -restore diff in A/B ! j -jump to diff | @ -auto-refining | * -refine diff ! ga/gb -to point in A/B |---------------------------| ! -recompute diffs ! c -recenter | ## -skip whitespace |--------------------------- ! v/V -scroll up/down | #f/#h -focus/hide regions | wa/wb -save buf A/B ! -scroll lft/rght | A/B -read-only buf A/B | wf -save diff output ! =======================|===========================|=========================== ! i -status info | ? -toggle help window | z/q -suspend/quit Ediff" ! ) (defconst ediff-help-message-short ! " ? - toggle help window") (defvar ediff-help-message ediff-help-message-long *************** *** 903,911 **** "*Name of the program that compares two files.") (defvar ediff-diff-options "" ! "*Options to pass to `ediff-diff-program'.") ! ! ;; Find diff stuff. ! (defvar ediff-wordify-function 'ediff-wordify ! "*Function to call to split current diff region into separate words.") (defvar ediff-fine-diff-program "diff" --- 1137,1148 ---- "*Name of the program that compares two files.") (defvar ediff-diff-options "" ! "*Options to pass to `ediff-diff-program'. ! If diff\(1\) is used as `ediff-diff-program', then the most useful options are ! `-w', to ignore space, and `-i', to ignore case of letters.") ! ! ;; Fine differences ! (defvar ediff-forward-word-function 'ediff-forward-word ! "*Function to call to move to the next word. ! Used for splitting difference regions into individual words.") (defvar ediff-fine-diff-program "diff" *************** *** 916,922 **** (defvar ediff-fine-diff-options "" ! "*Options to pass to `ediff-fine-diff-program'.") ! (defvar ediff-whitespace " \n\t\j" "*White space. Used to split strings into words.") --- 1153,1161 ---- (defvar ediff-fine-diff-options "" ! "*Options to pass to `ediff-fine-diff-program'. ! If diff\(1\) is used as `ediff-diff-program', then the most useful options are ! `-w', to ignore space, and `-i', to ignore case of letters.") ! (defvar ediff-whitespace " \n\t\C-j" "*White space. Used to split strings into words.") *************** *** 929,935 **** another out of characters matching `ediff-word-1'.") ! (defvar ediff-word-2 "^a-zA-Z---_`'.?!: \t\n\j" "*Characters matching this regexp constitute words of type 2. See `ediff-word-1' for more details.") --- 1168,1193 ---- another out of characters matching `ediff-word-1'.") ! (defvar ediff-word-2 "^a-zA-Z---_`'.?!: \t\n\C-j" "*Characters matching this regexp constitute words of type 2. See `ediff-word-1' for more details.") + + ;; Selective browsing + + (ediff-defvar-local ediff-skip-diff-region-function 'ediff-show-all-diffs + "Function that determines the next/previous diff region to show. + Should return t for regions to be ignored and nil otherwise. + This function gets a region number as an argument. The region number + is the one used internally by Ediff. It is 1 less than the number seen + by the user.") + + (ediff-defvar-local ediff-regexp-focus-A "" + "Regexp that determines buf A regions to focus on when skipping to diff.") + (ediff-defvar-local ediff-regexp-focus-B "" + "Regexp that determines buf B regions to focus on when skipping to diff.") + + (ediff-defvar-local ediff-regexp-hide-A "" + "Regexp that determines buf A regions to ignore when skipping to diff.") + (ediff-defvar-local ediff-regexp-hide-B "" + "Regexp that determines buf B regions to ignore when skipping to diff.") *************** *** 975,979 **** ;; Copying diffs betw buffers. ! (emerge-defvar-local ediff-killed-diffs-alist nil "A list of killed diffs. A diff is saved here if it is replaced by a diff --- 1233,1237 ---- ;; Copying diffs betw buffers. ! (ediff-defvar-local ediff-killed-diffs-alist nil "A list of killed diffs. A diff is saved here if it is replaced by a diff *************** *** 1000,1004 **** "*Like ediff-after-flag, used when a difference starts in mid-line.") ! (emerge-defvar-local ediff-before-flag-A nil "This is the actual ASCII before-flag in effect in buffer A. It is either `ediff-before-flag-mol' or `ediff-before-flag-bol' depending --- 1258,1262 ---- "*Like ediff-after-flag, used when a difference starts in mid-line.") ! (ediff-defvar-local ediff-before-flag-A nil "This is the actual ASCII before-flag in effect in buffer A. It is either `ediff-before-flag-mol' or `ediff-before-flag-bol' depending *************** *** 1005,1009 **** on whether the selected difference region starts in the middle of a line or at the beginning of a line.") ! (emerge-defvar-local ediff-after-flag-A nil "This is the actual ASCII after-flag in effect in buffer A. It is either `ediff-before-flag-mol' or `ediff-before-flag-bol' depending --- 1263,1267 ---- on whether the selected difference region starts in the middle of a line or at the beginning of a line.") ! (ediff-defvar-local ediff-after-flag-A nil "This is the actual ASCII after-flag in effect in buffer A. It is either `ediff-before-flag-mol' or `ediff-before-flag-bol' depending *************** *** 1010,1014 **** on whether the selected difference region starts in the middle of a line or at the beginning of a line.") ! (emerge-defvar-local ediff-before-flag-B nil "This is the actual ASCII before-flag in effect in buffer B. It is either `ediff-before-flag-mol' or `ediff-before-flag-bol' depending --- 1268,1272 ---- on whether the selected difference region starts in the middle of a line or at the beginning of a line.") ! (ediff-defvar-local ediff-before-flag-B nil "This is the actual ASCII before-flag in effect in buffer B. It is either `ediff-before-flag-mol' or `ediff-before-flag-bol' depending *************** *** 1015,1019 **** on whether the selected difference region starts in the middle of a line or at the beginning of a line.") ! (emerge-defvar-local ediff-after-flag-B nil "This is the actual ASCII after-flag in effect in buffer B. It is either `ediff-before-flag-mol' or `ediff-before-flag-bol' depending --- 1273,1277 ---- on whether the selected difference region starts in the middle of a line or at the beginning of a line.") ! (ediff-defvar-local ediff-after-flag-B nil "This is the actual ASCII after-flag in effect in buffer B. It is either `ediff-before-flag-mol' or `ediff-before-flag-bol' depending *************** *** 1022,1026 **** ! (emerge-defvar-local ediff-want-faces t "If t, differences are highlighted using faces on a window system. If nil, they are highlighted using ASCII flags, ediff-before-flag --- 1280,1284 ---- ! (ediff-defvar-local ediff-want-faces t "If t, differences are highlighted using faces on a window system. If nil, they are highlighted using ASCII flags, ediff-before-flag *************** *** 1031,1035 **** ediff-toggle-hilit.") ! (emerge-defvar-local ediff-want-default-menus t "If t, Ediff will set up menus in the menu bar. This variable must be set before Ediff is loaded. If you don't like the --- 1289,1293 ---- ediff-toggle-hilit.") ! (ediff-defvar-local ediff-want-default-menus t "If t, Ediff will set up menus in the menu bar. This variable must be set before Ediff is loaded. If you don't like the *************** *** 1037,1041 **** menus.") ! (emerge-defvar-local ediff-auto-refine 'on "If `'on', Ediff auto-highlights fine diffs for the current diff region. If `off', auto-highlighting is not used. If `'nix', no fine diffs are shown --- 1295,1299 ---- menus.") ! (ediff-defvar-local ediff-auto-refine (if window-system 'on 'nix) "If `'on', Ediff auto-highlights fine diffs for the current diff region. If `off', auto-highlighting is not used. If `'nix', no fine diffs are shown *************** *** 1045,1052 **** ediff-toggle-hilit.") ! (emerge-defvar-local ediff-auto-refine-limit 700 "Auto-refine only those regions that are smaller than this number of bytes.") ! (emerge-defvar-local ediff-highlight-all-diffs t "If nil, only the selected differences are highlighted. This variable can be set either in .emacs or toggled interactively, using --- 1303,1313 ---- ediff-toggle-hilit.") ! (ediff-defvar-local ediff-ignore-similar-regions nil ! "*If t, skip over difference regions that differ only in the white space and line breaks.") ! ! (ediff-defvar-local ediff-auto-refine-limit 700 "Auto-refine only those regions that are smaller than this number of bytes.") ! (ediff-defvar-local ediff-highlight-all-diffs t "If nil, only the selected differences are highlighted. This variable can be set either in .emacs or toggled interactively, using *************** *** 1053,1058 **** ediff-toggle-hilit.") ! (emerge-defvar-local ediff-highlighting-style nil ! "A var local to each ediff-control buffer. Indicates highlighting style in effect for this buffer: `face', `ascii', nil -- temporarily unhighlighted, `off' -- turned off \(on a dumb --- 1314,1319 ---- ediff-toggle-hilit.") ! (ediff-defvar-local ediff-highlighting-style nil ! "A var local to each control panel buffer. Indicates highlighting style in effect for this buffer: `face', `ascii', nil -- temporarily unhighlighted, `off' -- turned off \(on a dumb *************** *** 1065,1081 **** ;; Mode variables ! (emerge-defvar-local ediff-A-buffer nil "The buffer in which the A variant is stored.") ! (emerge-defvar-local ediff-B-buffer nil "The buffer in which the B variant is stored.") ! (emerge-defvar-local ediff-control-buffer nil "The control buffer of ediff. ") ! ;(emerge-defvar-local ediff-control-buffer-suffix nil ; "The suffix of the control buffer name. ") ! (emerge-defvar-local ediff-control-window nil "The control window.") ! (emerge-defvar-local ediff-window-config-saved "" "Ediff's window configuration. Used to minimize the need to rearrange windows.") --- 1326,1342 ---- ;; Mode variables ! (ediff-defvar-local ediff-A-buffer nil "The buffer in which the A variant is stored.") ! (ediff-defvar-local ediff-B-buffer nil "The buffer in which the B variant is stored.") ! (ediff-defvar-local ediff-control-buffer nil "The control buffer of ediff. ") ! ;(ediff-defvar-local ediff-control-buffer-suffix nil ; "The suffix of the control buffer name. ") ! (ediff-defvar-local ediff-control-window nil "The control window.") ! (ediff-defvar-local ediff-window-config-saved "" "Ediff's window configuration. Used to minimize the need to rearrange windows.") *************** *** 1082,1096 **** ! (emerge-defvar-local ediff-A-buffer-values nil "Keeps working values of ediff-saved-variables for ediff-A-buffer.") ! (emerge-defvar-local ediff-B-buffer-values nil "Keeps working values of ediff-saved-variables for ediff-B-buffer.") ! (emerge-defvar-local ediff-A-buffer-values-setup nil "Remembers ediff-saved-variables for ediff-A-buffer as they were at setup.") ! (emerge-defvar-local ediff-B-buffer-values-setup nil "Remembers ediff-saved-variables for ediff-B-buffer as they were at setup.") ! (emerge-defvar-local ediff-difference-vector nil "Vector of differences between the variants. Each difference is represented by a vector of two overlays. The first --- 1343,1357 ---- ! (ediff-defvar-local ediff-A-buffer-values nil "Keeps working values of ediff-saved-variables for ediff-A-buffer.") ! (ediff-defvar-local ediff-B-buffer-values nil "Keeps working values of ediff-saved-variables for ediff-B-buffer.") ! (ediff-defvar-local ediff-A-buffer-values-setup nil "Remembers ediff-saved-variables for ediff-A-buffer as they were at setup.") ! (ediff-defvar-local ediff-B-buffer-values-setup nil "Remembers ediff-saved-variables for ediff-B-buffer as they were at setup.") ! (ediff-defvar-local ediff-difference-vector nil "Vector of differences between the variants. Each difference is represented by a vector of two overlays. The first *************** *** 1099,1117 **** overlay's endpoints coincide. ") ! (emerge-defvar-local ediff-current-difference -1 "The difference that is currently selected.") ! (emerge-defvar-local ediff-number-of-differences nil "Number of differences found.") ! (emerge-defvar-local ediff-diff-buffer nil "Buffer containing the output of diff, which is used by Ediff to step through files.") ! (emerge-defvar-local ediff-tmp-buffer nil "Temporary buffer used for computing fine differences.") ! (emerge-defvar-local ediff-error-buffer nil "Buffer containing the output of diff when diff returns errors.") ! (emerge-defvar-local ediff-this-buffer-control-sessions nil ! "List of ediff-control buffers associated with each buffer A/B.") (defvar ediff-disturbed-overlays nil --- 1360,1380 ---- overlay's endpoints coincide. ") ! (ediff-defvar-local ediff-current-difference -1 "The difference that is currently selected.") ! (ediff-defvar-local ediff-number-of-differences nil "Number of differences found.") ! (ediff-defvar-local ediff-diff-buffer nil "Buffer containing the output of diff, which is used by Ediff to step through files.") ! (ediff-defvar-local ediff-fine-diff-buffer nil ! "Buffer used for diff-style fine differences between regions.") ! (ediff-defvar-local ediff-tmp-buffer nil "Temporary buffer used for computing fine differences.") ! (ediff-defvar-local ediff-error-buffer nil "Buffer containing the output of diff when diff returns errors.") ! (ediff-defvar-local ediff-this-buffer-control-sessions nil ! "List of ediff control panels associated with each buffer A/B.") (defvar ediff-disturbed-overlays nil *************** *** 1118,1127 **** "List of difference overlays disturbed by working with the current diff.") ! (defvar ediff-shaded-overlay-priority ! (if (ediff-if-lucid) ! (1+ mouse-highlight-priority) ! 100) ;; 100 is a kludge. There is a bug in insert-in-front-hooks ! ;; in Emacs < 19.23. When this is fixed, I will get rid of ! ;; this kludge. "Priority of non-selected overlays.") --- 1381,1385 ---- "List of difference overlays disturbed by working with the current diff.") ! (defvar ediff-shaded-overlay-priority 100 "Priority of non-selected overlays.") *************** *** 1177,1181 **** () (defun ediff-set-face (ground face color) ! "Sets face foreground/background. If color unavailable, guides the user." (if (ediff-valid-color-p color) (if (eq ground 'foreground) --- 1435,1439 ---- () (defun ediff-set-face (ground face color) ! "Sets face foreground/background." (if (ediff-valid-color-p color) (if (eq ground 'foreground) *************** *** 1208,1212 **** (copy-face 'highlight 'ediff-current-diff-face-A)) ))) ! (ediff-get-face 'ediff-current-diff-face-A)) "Face for highlighting the selected difference in buffer A.") --- 1466,1471 ---- (copy-face 'highlight 'ediff-current-diff-face-A)) ))) ! 'ediff-current-diff-face-A) ! ;;(ediff-get-face 'ediff-current-diff-face-A)) "Face for highlighting the selected difference in buffer A.") *************** *** 1225,1229 **** (copy-face 'highlight 'ediff-current-diff-face-B)) ))) ! (ediff-get-face 'ediff-current-diff-face-B)) "Face for highlighting the selected difference in buffer B.") --- 1484,1489 ---- (copy-face 'highlight 'ediff-current-diff-face-B)) ))) ! 'ediff-current-diff-face-B) ! ;;(ediff-get-face 'ediff-current-diff-face-B)) "Face for highlighting the selected difference in buffer B.") *************** *** 1238,1242 **** "sky blue")) (t (set-face-underline-p 'ediff-fine-diff-face-A t)))) ! (ediff-get-face 'ediff-fine-diff-face-A)) "Face for highlighting the refinement of the selected diff in buffer A.") --- 1498,1503 ---- "sky blue")) (t (set-face-underline-p 'ediff-fine-diff-face-A t)))) ! 'ediff-fine-diff-face-A) ! ;;(ediff-get-face 'ediff-fine-diff-face-A)) "Face for highlighting the refinement of the selected diff in buffer A.") *************** *** 1249,1253 **** (ediff-set-face 'background 'ediff-fine-diff-face-B "cyan")) (t (set-face-underline-p 'ediff-fine-diff-face-B t)))) ! (ediff-get-face 'ediff-fine-diff-face-B)) "Face for highlighting the refinement of the selected diff in buffer B.") --- 1510,1515 ---- (ediff-set-face 'background 'ediff-fine-diff-face-B "cyan")) (t (set-face-underline-p 'ediff-fine-diff-face-B t)))) ! 'ediff-fine-diff-face-B) ! ;;(ediff-get-face 'ediff-fine-diff-face-B)) "Face for highlighting the refinement of the selected diff in buffer B.") *************** *** 1263,1272 **** 'background 'ediff-even-diff-face-A "light grey")) (t ! (if (ediff-if-lucid) ! (progn ! (copy-face 'highlight 'ediff-even-diff-face-A) ! (invert-face 'ediff-even-diff-face-A)) ! (copy-face 'italic 'ediff-even-diff-face-A))))) ! (ediff-get-face 'ediff-even-diff-face-A)) "Face used to highlight even-numbered differences in buffer A.") --- 1525,1531 ---- 'background 'ediff-even-diff-face-A "light grey")) (t ! (copy-face 'italic 'ediff-even-diff-face-A)))) ! 'ediff-even-diff-face-A) ! ;;(ediff-get-face 'ediff-even-diff-face-A)) "Face used to highlight even-numbered differences in buffer A.") *************** *** 1281,1288 **** 'background 'ediff-even-diff-face-B "Gray")) (t ! (if (ediff-if-lucid) ! (copy-face 'highlight 'ediff-even-diff-face-B) ! (copy-face 'italic 'ediff-even-diff-face-B))))) ! (ediff-get-face 'ediff-even-diff-face-B)) "Face used to highlight even-numbered differences in buffer B.") --- 1540,1546 ---- 'background 'ediff-even-diff-face-B "Gray")) (t ! (copy-face 'italic 'ediff-even-diff-face-B)))) ! 'ediff-even-diff-face-B) ! ;;(ediff-get-face 'ediff-even-diff-face-B)) "Face used to highlight even-numbered differences in buffer B.") *************** *** 1297,1304 **** 'background 'ediff-odd-diff-face-A "Gray")) (t ! (if (ediff-if-lucid) ! (copy-face 'highlight 'ediff-odd-diff-face-A) ! (copy-face 'italic 'ediff-odd-diff-face-A))))) ! (ediff-get-face 'ediff-odd-diff-face-A)) "Face used to highlight odd-numbered differences in buffer A.") --- 1555,1561 ---- 'background 'ediff-odd-diff-face-A "Gray")) (t ! (copy-face 'italic 'ediff-odd-diff-face-A)))) ! 'ediff-odd-diff-face-A) ! ;;(ediff-get-face 'ediff-odd-diff-face-A)) "Face used to highlight odd-numbered differences in buffer A.") *************** *** 1313,1322 **** 'background 'ediff-odd-diff-face-B "light grey")) (t ! (if (ediff-if-lucid) ! (progn ! (copy-face 'highlight 'ediff-odd-diff-face-B) ! (invert-face 'ediff-odd-diff-face-B)) ! (copy-face 'italic 'ediff-odd-diff-face-B))))) ! (ediff-get-face 'ediff-odd-diff-face-B)) "Face used to highlight odd-numbered differences in buffer B.") --- 1570,1576 ---- 'background 'ediff-odd-diff-face-B "light grey")) (t ! (copy-face 'italic 'ediff-odd-diff-face-B)))) ! 'ediff-odd-diff-face-B) ! ;;(ediff-get-face 'ediff-odd-diff-face-B)) "Face used to highlight odd-numbered differences in buffer B.") *************** *** 1352,1359 **** ;;; Overlays ! (emerge-defvar-local ediff-current-diff-overlay-A nil ! "Overlay in buffer A.") ! (emerge-defvar-local ediff-current-diff-overlay-B nil ! "Overlay in buffer B.") (defun ediff-make-current-diff-overlay (type) --- 1606,1613 ---- ;;; Overlays ! (ediff-defvar-local ediff-current-diff-overlay-A nil ! "Overlay specifying the current difference region in buffer A.") ! (ediff-defvar-local ediff-current-diff-overlay-B nil ! "Overlay specifying the current difference region in buffer B.") (defun ediff-make-current-diff-overlay (type) *************** *** 1370,1374 **** )) ! ;; Computes priority of ediff overlay. (defun ediff-highest-priority (start end buffer) (let ((pos (max 1 (1- start))) --- 1624,1628 ---- )) ! ;; Compute priority of ediff overlay. (defun ediff-highest-priority (start end buffer) (let ((pos (max 1 (1- start))) *************** *** 1375,1380 **** ovr-list) (if (ediff-if-lucid) ! (+ 2 mouse-highlight-priority) ! (emerge-eval-in-buffer buffer (while (< pos (min (point-max) (1+ end))) --- 1629,1634 ---- ovr-list) (if (ediff-if-lucid) ! (1+ ediff-shaded-overlay-priority) ! (ediff-eval-in-buffer buffer (while (< pos (min (point-max) (1+ end))) *************** *** 1419,1427 **** (defvar ediff-no-help-in-control-buffer nil ! "*Non-nil mean C-h should not invoke Emacs help. Instead, C-h jumps to previous difference.") (defvar ediff-temp-file-prefix ! (let ((env (getenv "TMPDIR")) d) (setq d (if (and env (> (length env) 0)) --- 1673,1683 ---- (defvar ediff-no-help-in-control-buffer nil ! "*Non-nil means C-h should not invoke Emacs help in control buffer. Instead, C-h jumps to previous difference.") (defvar ediff-temp-file-prefix ! (let ((env (or (getenv "TMPDIR") ! (getenv "TMP") ! (getenv "TEMP"))) d) (setq d (if (and env (> (length env) 0)) *************** *** 1437,1443 **** "*Mode for Ediff temporary files.") ! (emerge-defvar-local ediff-temp-file-A nil "Temporary file used for refining difference regions in buffer B.") ! (emerge-defvar-local ediff-temp-file-B nil "Temporary file used for refining difference regions in buffer B.") --- 1693,1699 ---- "*Mode for Ediff temporary files.") ! (ediff-defvar-local ediff-temp-file-A nil "Temporary file used for refining difference regions in buffer B.") ! (ediff-defvar-local ediff-temp-file-B nil "Temporary file used for refining difference regions in buffer B.") *************** *** 1446,1449 **** --- 1702,1707 ---- (defvar ediff-last-dir-B nil "Last directory used by an Ediff command for file-B.") + (defvar ediff-last-dir-patch nil + "Last directory used by an Ediff command for file to patch.") ;; Build keymaps *************** *** 1452,1455 **** --- 1710,1719 ---- "Local keymap used in Ediff mode.") + (defun ediff-frame-has-menubar () + (if (ediff-if-lucid) + current-menubar + (< 0 (cdr (assq 'menu-bar-lines (frame-parameters (selected-frame))))) + )) + ;;; This is split in three parts to avoid ;;; making a line in loaddefs.el that is too long for patch. *************** *** 1456,1506 **** ;;; Note that autoload.el currently looks for cookies ;;; only at top level in the file. ;;;###autoload ! (progn ! (defvar menu-bar-epatch-menu (make-sparse-keymap "menu-bar-epatch-map")) ! (fset 'menu-bar-epatch-menu (symbol-value 'menu-bar-epatch-menu)) ! (defvar menu-bar-ediff-menu (make-sparse-keymap "menu-bar-ediff-map")) ! (fset 'menu-bar-ediff-menu (symbol-value 'menu-bar-ediff-menu))) ;;;###autoload ! (progn ! (define-key menu-bar-ediff-menu [rcs-ediff] ! '("With a Revision via RCS ..." . rcs-ediff)) ! (define-key menu-bar-ediff-menu [vc-ediff] ! '("With a Revision via VC ..." . vc-ediff)) ! (define-key menu-bar-ediff-menu [ediff-buffers] ! '("Between Buffers ..." . ediff-buffers)) ! (define-key menu-bar-ediff-menu [ediff-files] ! '("Between Files ..." . ediff-files))) ;;;###autoload ! (progn ! (define-key menu-bar-epatch-menu [ediff-patch-buffer] ! '("To a Buffer ..." . ediff-patch-buffer)) ! (define-key menu-bar-epatch-menu [ediff-patch-file] ! '("To a File ..." . ediff-patch-file))) - (if (and window-system ediff-want-default-menus (ediff-frame-has-menubar)) - (if (ediff-if-lucid) - (progn ;; Lucid menu bars - (defvar ediff-menu - '("" - ["Between Files ..." ediff-files t] - ["Between Buffers ..." ediff-buffers t] - ["With a Revision via VC ..." vc-ediff t] - ["With a Revision via RCS ..." rcs-ediff t])) - (defvar epatch-menu - '("" - ["To a File ..." ediff-patch-file t] - ["To a Buffer ..." ediff-patch-buffer t])) - (add-menu '("File") "Find Differences" - ediff-menu - "Delete Screen") - (add-menu '("File") "Apply Patch" - epatch-menu - "Delete Screen") - ;; Displays as a solid horizontal line - (add-menu-item '("File") "---" nil nil "Delete Screen") - ))) --- 1720,1782 ---- ;;; Note that autoload.el currently looks for cookies ;;; only at top level in the file. + ;;; So I moved these to top level. But the conditionals on + ;;; purify-flag make these no-ops when you load ediff. + ;;; They only do something in loaddefs.el. ;;;###autoload ! (if purify-flag ! (progn ! (defvar menu-bar-epatch-menu (make-sparse-keymap "Epatch")) ! (fset 'menu-bar-epatch-menu (symbol-value 'menu-bar-epatch-menu)) ! (defvar menu-bar-ediff-menu (make-sparse-keymap "Ediff")) ! (fset 'menu-bar-ediff-menu (symbol-value 'menu-bar-ediff-menu)))) ! ;;;###autoload ! (if purify-flag ! (progn ! (define-key menu-bar-ediff-menu [rcs-ediff] ! '("File with a version via RCS ..." . rcs-ediff)) ! (define-key menu-bar-ediff-menu [vc-ediff] ! '("File with a version via VC ..." . vc-ediff)) ! (define-key menu-bar-ediff-menu [ediff-buffers] ! '("Buffers ..." . ediff-buffers)) ! (define-key menu-bar-ediff-menu [ediff-files] ! '("Files ..." . ediff-files)))) ;;;###autoload ! (if purify-flag ! (progn ! (define-key menu-bar-epatch-menu [ediff-patch-buffer] ! '("To a Buffer ..." . ediff-patch-buffer)) ! (define-key menu-bar-epatch-menu [ediff-patch-file] ! '("To a File ..." . ediff-patch-file)))) ! ! (define-key menu-bar-file-menu [epatch] ! '("Apply Patch" . menu-bar-epatch-menu)) ! (define-key menu-bar-file-menu [ediff] ! '("Compare" . menu-bar-ediff-menu)) ! ! (if (and window-system ediff-want-default-menus (ediff-frame-has-menubar) ! (ediff-if-lucid)) ! (progn ;; Lucid menu bars ! (defvar ediff-menu ! '("" ! ["Files ..." ediff-files t] ! ["Buffers ..." ediff-buffers t] ! ["File with a version via VC ..." vc-ediff t] ! ["File with a version via RCS ..." rcs-ediff t])) ! (defvar epatch-menu ! '("" ! ["To a file ..." ediff-patch-file t] ! ["To a buffer ..." ediff-patch-buffer t])) ! (add-menu '("File") "Compare" ! ediff-menu ! "New Screen") ! (add-menu '("File") "Apply Patch" ! epatch-menu ! "New Screen") ! ;; Displays as a solid horizontal line ! (add-menu-item '("File") "---" nil nil "New Screen"))) *************** *** 1533,1538 **** (define-key ediff-mode-map "<" 'ediff-scroll-left) (define-key ediff-mode-map ">" 'ediff-scroll-right) ! (define-key ediff-mode-map "f" 'ediff-file-names) ! (define-key ediff-mode-map "l" 'ediff-line-numbers) (define-key ediff-mode-map "?" 'ediff-toggle-help) (define-key ediff-mode-map "!" 'ediff-recompute-diffs) --- 1809,1813 ---- (define-key ediff-mode-map "<" 'ediff-scroll-left) (define-key ediff-mode-map ">" 'ediff-scroll-right) ! (define-key ediff-mode-map "i" 'ediff-status-info) (define-key ediff-mode-map "?" 'ediff-toggle-help) (define-key ediff-mode-map "!" 'ediff-recompute-diffs) *************** *** 1545,1548 **** --- 1820,1827 ---- (define-key ediff-mode-map "ra" 'ediff-restore-diff) (define-key ediff-mode-map "rb" 'ediff-restore-diff) + (define-key ediff-mode-map "#" nil) + (define-key ediff-mode-map "#h" 'ediff-toggle-regexp-match) + (define-key ediff-mode-map "#f" 'ediff-toggle-regexp-match) + (define-key ediff-mode-map "##" 'ediff-toggle-skip-similar) (define-key ediff-mode-map "o" nil) (define-key ediff-mode-map "A" 'ediff-toggle-read-only) *************** *** 1551,1556 **** (define-key ediff-mode-map "wa" 'ediff-save-buffer) (define-key ediff-mode-map "wb" 'ediff-save-buffer) (define-key ediff-mode-map "k" nil) ! (define-key ediff-mode-map "kkk" 'ediff-reload-keymap) ;; for debug ;; Allow ediff-mode-map to be referenced indirectly (fset 'ediff-mode-map ediff-mode-map)) --- 1830,1836 ---- (define-key ediff-mode-map "wa" 'ediff-save-buffer) (define-key ediff-mode-map "wb" 'ediff-save-buffer) + (define-key ediff-mode-map "wf" 'ediff-save-buffer) (define-key ediff-mode-map "k" nil) ! (define-key ediff-mode-map "kkk" 'ediff-reload-keymap) ;; for debugging ;; Allow ediff-mode-map to be referenced indirectly (fset 'ediff-mode-map ediff-mode-map)) *************** *** 1559,1590 **** ;;; Setup functions ! (defun ediff-find-file (file buffer &optional last-dir) ! "Visits FILE for ediff. ! BUFFER is a variable symbol that is supposed to ! get the buffer into which FILE is read. LAST-DIR is the directory variable ! symbol where FILE's dir name should be returned. ! Arguments: (file 'buffer &optional 'last-dir)" ! (if (not (file-readable-p file)) ! (error "File `%s' does not exist or is not readable" file)) ! ! ;; Record the buffer ! (set buffer (find-file-noselect file)) ! ;; Record the directory of the file ! (if last-dir ! (set last-dir (expand-file-name (file-name-directory file)))) ! ! ;; Make sure the entire file is seen, and it reflects what is on disk ! (emerge-eval-in-buffer ! (eval buffer) ! (widen) ! (let ((temp (file-local-copy file)) ! startup-hooks) ! (if temp ! (setq file temp ! startup-hooks ! (cons (` (lambda () (delete-file (, file)))) ! startup-hooks)) ! ;; Verify that the file matches the buffer ! (emerge-verify-file-buffer))))) (defun ediff-files-internal (file-A file-B &optional startup-hooks) --- 1839,1882 ---- ;;; Setup functions ! (defun ediff-find-file (file-var buffer &optional last-dir hooks-var) ! "Visit FILE and arrange its buffer to Ediff's liking. ! FILE is actually a variables symbol that must contain a true file name. ! BUFFER is a variable symbol, which will get the buffer object into which ! FILE is read. LAST-DIR is the directory variable symbol where FILE's ! directory name should be returned. HOOKS is a variable symbol that will be ! assigned the hook to be executed after `ediff-strartup' is finished. ! `ediff-find-file' arranges that the temp files it might create will be ! deleted. ! Arguments: (file buffer &optional last-dir hooks)" ! (let* ((file (eval file-var)) ! (file-magic (find-file-name-handler file 'find-file-noselect))) ! (if (not (file-readable-p file)) ! (error "File `%s' does not exist or is not readable" file)) ! ! ;; Record the directory of the file ! (if last-dir ! (set last-dir (expand-file-name (file-name-directory file)))) ! ! ;; Setup the buffer ! (set buffer (find-file-noselect file)) ! ! (ediff-eval-in-buffer ! (eval buffer) ! (widen) ;; Make sure the entire file is seen ! (cond (file-magic ;; file has handler, such as jka-compr-handler or ! ;; ange-ftp-hook-function--arrange for temp file ! (ediff-verify-file-buffer 'magic) ! (setq file (ediff-make-temp-file)) ! (set hooks-var (cons (` (lambda () (delete-file (, file)))) ! (eval hooks-var)))) ! ;; file processed via auto-mode-alist, a la uncompress.el ! ((not (equal (file-truename file) ! (file-truename (buffer-file-name)))) ! (setq file (ediff-make-temp-file)) ! (set hooks-var (cons (` (lambda () (delete-file (, file)))) ! (eval hooks-var)))) ! (t ;; plain file---just check that the file matches the buffer ! (ediff-verify-file-buffer)))) ! (set file-var file))) (defun ediff-files-internal (file-A file-B &optional startup-hooks) *************** *** 1591,1597 **** (let (buffer-A buffer-B) (message "Reading file %s ... " file-A)(sit-for .5) ! (ediff-find-file file-A 'buffer-A 'ediff-last-dir-A) (message "Reading file %s ... " file-B)(sit-for .5) ! (ediff-find-file file-B 'buffer-B 'ediff-last-dir-B) (ediff-setup buffer-A file-A buffer-B file-B startup-hooks))) --- 1883,1889 ---- (let (buffer-A buffer-B) (message "Reading file %s ... " file-A)(sit-for .5) ! (ediff-find-file 'file-A 'buffer-A 'ediff-last-dir-A 'startup-hooks) (message "Reading file %s ... " file-B)(sit-for .5) ! (ediff-find-file 'file-B 'buffer-B 'ediff-last-dir-B 'startup-hooks) (ediff-setup buffer-A file-A buffer-B file-B startup-hooks))) *************** *** 1603,1609 **** (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)))) ! (emerge-eval-in-buffer ediff-patch-buf (toggle-read-only 1)) --- 1895,1900 ---- (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)))) ! (ediff-eval-in-buffer ediff-patch-buf (toggle-read-only 1)) *************** *** 1610,1614 **** (setq ediff-patch-diagnostics (get-buffer-create "*ediff patch diagnostics*")) ! (emerge-eval-in-buffer ediff-patch-diagnostics (insert-buffer ediff-patch-buf)) --- 1901,1905 ---- (setq ediff-patch-diagnostics (get-buffer-create "*ediff patch diagnostics*")) ! (ediff-eval-in-buffer ediff-patch-diagnostics (insert-buffer ediff-patch-buf)) *************** *** 1619,1627 **** (setq file-A (expand-file-name file-A)) (setq file-B (expand-file-name file-B)) ! (let* ((control-buffer-name (emerge-unique-buffer-name "*ediff-control" "*")) ! (control-buffer (emerge-eval-in-buffer buffer-A (get-buffer-create control-buffer-name)))) ! (emerge-eval-in-buffer control-buffer (ediff-mode) ;; in control buffer only --- 1910,1919 ---- (setq file-A (expand-file-name file-A)) (setq file-B (expand-file-name file-B)) ! (let* ((control-buffer-name ! (emerge-unique-buffer-name "Ediff Control Panel" "")) ! (control-buffer (ediff-eval-in-buffer buffer-A (get-buffer-create control-buffer-name)))) ! (ediff-eval-in-buffer control-buffer (ediff-mode) ;; in control buffer only *************** *** 1650,1659 **** (ediff-setup-windows buffer-A buffer-B control-buffer t) ! ;; all these must be inside emerge-eval-in-buffer control-buffer, ;; since these vars are local to control-buffer ;; These won't run if there are errors in diff ! (emerge-eval-in-buffer ediff-A-buffer - (run-hooks 'ediff-prepare-buffer-hooks) (add-hook 'local-write-file-hooks 'ediff-block-write-file) (setq before-change-function 'ediff-before-change-guard) --- 1942,1950 ---- (ediff-setup-windows buffer-A buffer-B control-buffer t) ! ;; all these must be inside ediff-eval-in-buffer control-buffer, ;; since these vars are local to control-buffer ;; These won't run if there are errors in diff ! (ediff-eval-in-buffer ediff-A-buffer (add-hook 'local-write-file-hooks 'ediff-block-write-file) (setq before-change-function 'ediff-before-change-guard) *************** *** 1662,1669 **** (setq ediff-this-buffer-control-sessions (cons control-buffer ediff-this-buffer-control-sessions))) ! (setq mode-line-buffer-identification '("A: %b"))) ! (emerge-eval-in-buffer ediff-B-buffer - (run-hooks 'ediff-prepare-buffer-hooks) (add-hook 'local-write-file-hooks 'ediff-block-write-file) (setq before-change-function 'ediff-before-change-guard) --- 1953,1967 ---- (setq ediff-this-buffer-control-sessions (cons control-buffer ediff-this-buffer-control-sessions))) ! (setq mode-line-buffer-identification ! (cons "A: " ! (if (string-match "\\(^ \\|^[^ \t]*: \\)" ! (car mode-line-buffer-identification)) ! (cons (substring (car mode-line-buffer-identification) ! (match-end 0)) ! (cdr mode-line-buffer-identification)) ! mode-line-buffer-identification))) ! (run-hooks 'ediff-prepare-buffer-hooks)) ! (ediff-eval-in-buffer ediff-B-buffer (add-hook 'local-write-file-hooks 'ediff-block-write-file) (setq before-change-function 'ediff-before-change-guard) *************** *** 1672,1678 **** (setq ediff-this-buffer-control-sessions (cons control-buffer ediff-this-buffer-control-sessions))) ! (setq mode-line-buffer-identification '("B: %b"))) ! (emerge-eval-in-buffer control-buffer (run-hooks 'startup-hooks 'ediff-startup-hooks) (setq buffer-read-only t))))) --- 1970,1984 ---- (setq ediff-this-buffer-control-sessions (cons control-buffer ediff-this-buffer-control-sessions))) ! (setq mode-line-buffer-identification ! (cons "B: " ! (if (string-match "\\(^ \\|^[^ \t]*: \\)" ! (car mode-line-buffer-identification)) ! (cons (substring (car mode-line-buffer-identification) ! (match-end 0)) ! (cdr mode-line-buffer-identification)) ! mode-line-buffer-identification))) ! (run-hooks 'ediff-prepare-buffer-hooks)) ! (ediff-eval-in-buffer control-buffer (run-hooks 'startup-hooks 'ediff-startup-hooks) (setq buffer-read-only t))))) *************** *** 1692,1698 **** (or use-old (setq ediff-diff-buffer (get-buffer-create ! (emerge-unique-buffer-name "*ediff-diff" "*")))) ! (emerge-eval-in-buffer ! ediff-diff-buffer (erase-buffer) ;; shell-command tends to display old shell command buffers even when it --- 1998,2008 ---- (or use-old (setq ediff-diff-buffer (get-buffer-create ! (emerge-unique-buffer-name "*ediff-diff" "*")) ! ediff-fine-diff-buffer ! (get-buffer-create ! (emerge-unique-buffer-name "*ediff-fine-diff" "*")) ! )) ! (ediff-eval-in-buffer ! (if refine-region ediff-fine-diff-buffer ediff-diff-buffer) (erase-buffer) ;; shell-command tends to display old shell command buffers even when it *************** *** 1710,1735 **** t) )) ! (ediff-prepare-error-list diff-ok-lines-regexp) ! (if refine-region ! (message "Refining difference region %d ... Done." (1+ refine-region)) ! (message "Computing differences ... Done.")(sit-for .5)) (if refine-region ! (ediff-convert-diffs-to-overlays-refine ! ediff-A-buffer ediff-B-buffer ! (ediff-extract-diffs ediff-diff-buffer) ! refine-region) (ediff-convert-diffs-to-overlays ediff-A-buffer ediff-B-buffer ! (ediff-extract-diffs ediff-diff-buffer ediff-A-buffer ediff-B-buffer))) ! ) ! (defun ediff-prepare-error-list (ok-regexp) ! (let ((diff-buff ediff-diff-buffer)) ! (emerge-eval-in-buffer ediff-error-buffer (erase-buffer) (insert-buffer diff-buff) ! (delete-matching-lines ok-regexp)))) ;;; Function to start Ediff by patching a file --- 2020,2047 ---- t) )) ! ! (if refine-region ! (progn ! (ediff-prepare-error-list diff-ok-lines-regexp ediff-fine-diff-buffer) ! (message "Refining difference region %d ... Done." (1+ refine-region)) ! (ediff-convert-diffs-to-overlays-refine ! ediff-A-buffer ediff-B-buffer ! (ediff-extract-diffs ediff-fine-diff-buffer) ! refine-region)) ! (ediff-prepare-error-list diff-ok-lines-regexp ediff-diff-buffer) ! (message "Computing differences ... Done.")(sit-for .5) (ediff-convert-diffs-to-overlays ediff-A-buffer ediff-B-buffer ! (ediff-extract-diffs ediff-diff-buffer ! ediff-A-buffer ediff-B-buffer)))) ! (defun ediff-prepare-error-list (ok-regexp diff-buff) ! (ediff-eval-in-buffer ediff-error-buffer (erase-buffer) (insert-buffer diff-buff) ! (delete-matching-lines ok-regexp))) ;;; Function to start Ediff by patching a file *************** *** 1736,1760 **** ;;;###autoload ! (defun ediff-patch-file (file-to-patch &optional startup-hooks) "Run Ediff by patching FILE-TP-PATCH." ! (interactive "fFile to patch: ") ! ! (ediff-get-patch-buffer (file-name-directory file-to-patch)) ! (let ((buf (get-file-buffer file-to-patch))) ! (if buf ! (progn ! (emerge-eval-in-buffer ! buf ! (if (buffer-modified-p buf) ! (if (y-or-n-p ! (format ! "File '%s' is already in buffer %s. Save before killing? " ! file-to-patch (buffer-name buf))) ! (save-buffer buf))) ! (set-buffer-modified-p nil)) ! (ediff-kill-buffer-carefully buf)))) ! (emerge-eval-in-buffer ! ediff-patch-diagnostics ! (let ((shell-file-name ediff-shell)) (message "Applying patch ... ")(sit-for .5) ;; always pass patch the -f option, so it won't ask any questions --- 2048,2094 ---- ;;;###autoload ! (defun ediff-patch-file (source-filename &optional startup-hooks) "Run Ediff by patching FILE-TP-PATCH." ! (interactive ! (list (ediff-read-file-name "File to patch" ! (if ediff-use-last-dir ! ediff-last-dir-patch ! default-directory) ! nil))) ! ! (ediff-get-patch-buffer (file-name-directory source-filename)) ! (let* ((backup-extension ! ;; if the user specified a -b option, extract the backup ! ;; extension from there; else use `.orig' ! (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))) ! (backup-extension (if (string= backup-extension "") ! "orig" backup-extension)) ! (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) ! ! ;; 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 ! ;; synch; 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. ! (setq file-name-magic-p (not (equal (file-truename true-source-filename) ! (file-truename source-filename)))) ! ! (ediff-eval-in-buffer ! ediff-patch-diagnostics (message "Applying patch ... ")(sit-for .5) ;; always pass patch the -f option, so it won't ask any questions *************** *** 1761,1782 **** (shell-command-on-region (point-min) (point-max) ! (format "%s %s %s" ! ediff-patch-program (concat "-f " ediff-patch-options) ! (expand-file-name file-to-patch)) ! t) ! (message "Applying patch ... Done.")(sit-for .5) ! )) ! (switch-to-buffer ediff-patch-diagnostics) ! (sit-for 0) ;; synchronize ! (setq startup-hooks (cons 'ediff-toggle-read-only-A startup-hooks)) ! (if (file-exists-p (format "%s.orig" file-to-patch)) ! (ediff-files ! (format "%s.orig" file-to-patch) file-to-patch startup-hooks) ! (error "Patch failed or didn't modify the original file.")) ! ! (bury-buffer ediff-patch-diagnostics) ! (message "Patch diagnostics available in buffer %s." ! (buffer-name ediff-patch-diagnostics))) (defalias 'epatch 'ediff-patch-file) --- 2095,2139 ---- (shell-command-on-region (point-min) (point-max) ! (format "%s -f %s %s" ! ediff-patch-program ediff-patch-options ! (expand-file-name true-source-filename)) ! t)) ! (message "Applying patch ... Done.")(sit-for .5) ! (switch-to-buffer ediff-patch-diagnostics) ! (sit-for 0) ;; synchronize ! ! (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 ! ;; ***.patched. 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)) ! (setq target-filename (concat true-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-toggle-read-only-A startup-hooks)) ! ;; set up a buf for the patched file ! (setq target-buf (find-file-noselect target-filename)) ! ! (ediff-buffers buf-to-patch target-buf startup-hooks) ! (bury-buffer ediff-patch-diagnostics) ! (message "Patch diagnostics available in buffer %s." ! (buffer-name ediff-patch-diagnostics)))) (defalias 'epatch 'ediff-patch-file) *************** *** 1794,1802 **** ediff-last-dir-A default-directory) ! nil nil)) (ediff-read-file-name "File B to compare" (if ediff-use-last-dir ediff-last-dir-B nil) ! f f) ))) (ediff-files-internal file-A --- 2151,2159 ---- ediff-last-dir-A default-directory) ! nil)) (ediff-read-file-name "File B to compare" (if ediff-use-last-dir ediff-last-dir-B nil) ! f) ))) (ediff-files-internal file-A *************** *** 1816,1825 **** (defun ediff-buffers (buffer-A buffer-B &optional startup-hooks) "Run Ediff on a pair of buffers, BUFFER-A and BUFFER-B." ! (interactive "bBuffer A to compare: \nbBuffer B to compare: ") (let (file-A file-B) ! (emerge-eval-in-buffer buffer-A (setq file-A (ediff-make-temp-file))) ! (emerge-eval-in-buffer buffer-B (setq file-B (ediff-make-temp-file))) --- 2173,2195 ---- (defun ediff-buffers (buffer-A buffer-B &optional startup-hooks) "Run Ediff on a pair of buffers, BUFFER-A and BUFFER-B." ! (interactive ! (list (read-buffer "Buffer A to compare: " (current-buffer) t) ! (read-buffer "Buffer B to compare: " ! (progn ! ;; realign buffers so that two visible bufs will be ! ;; at the top ! (save-window-excursion (other-window 1)) ! (other-buffer (current-buffer) t)) ! t))) ! (if (not (ediff-buffer-live-p buffer-A)) ! (error "Buffer %S doesn't exist." buffer-A)) ! (if (not (ediff-buffer-live-p buffer-B)) ! (error "Buffer %S doesn't exist." buffer-B)) ! (let (file-A file-B) ! (ediff-eval-in-buffer buffer-A (setq file-A (ediff-make-temp-file))) ! (ediff-eval-in-buffer buffer-B (setq file-B (ediff-make-temp-file))) *************** *** 1862,1866 **** (error "The VC package is apparently not installed."))) (let ((newvers (current-buffer)) ! (oldvers (vc-version-other-window rev))) ;; current-buffer is supposed to contain the old version in another ;; window --- 2232,2237 ---- (error "The VC package is apparently not installed."))) (let ((newvers (current-buffer)) ! ) ! (vc-version-other-window rev) ;; current-buffer is supposed to contain the old version in another ;; window *************** *** 1879,1884 **** (message "Working...") (setq filename (expand-file-name filename)) ! (with-output-to-temp-buffer ! buff (let ((output-buffer (ediff-rcs-get-output-buffer filename buff))) (delete-windows-on output-buffer) --- 2250,2254 ---- (message "Working...") (setq filename (expand-file-name filename)) ! (with-output-to-temp-buffer buff (let ((output-buffer (ediff-rcs-get-output-buffer filename buff))) (delete-windows-on output-buffer) *************** *** 1895,1899 **** ;; Get a buffer for RCS output for FILE, make it writable and clean it up. ;; Optional NAME is name to use instead of `*RCS-output*'. ! ;; This is a mofified version from rcs.el v1.1. I use it here to make ;; Ediff immune to changes in rcs.el (let* ((default-major-mode 'fundamental-mode);; no frills! --- 2265,2269 ---- ;; Get a buffer for RCS output for FILE, make it writable and clean it up. ;; Optional NAME is name to use instead of `*RCS-output*'. ! ;; This is a modified version from rcs.el v1.1. I use it here to make ;; Ediff immune to changes in rcs.el (let* ((default-major-mode 'fundamental-mode);; no frills! *************** *** 1924,1943 **** - ;;; Functions to start Ediff via remote request - ;;;###autoload - (defun ediff-files-remote (file-a file-b) - "Run Ediff on remote files, FILE-A and FILE-B." - (ediff-files-internal file-a file-b nil) - (throw 'client-wait nil)) - - - (defun ediff-remote-exit (exit-func) - "Exit remote Ediff session." - (ediff-really-quit) - (funcall exit-func)) - - ;; Select the lowest window on the frame. (defun ediff-select-lowest-window () --- 2294,2299 ---- *************** *** 1983,1987 **** ;; If diff reports errors, show them then quit. ! (if (/= 0 (emerge-eval-in-buffer ediff-error-buffer (buffer-size))) (let ((diff-output-buf ediff-diff-buffer)) (switch-to-buffer ediff-error-buffer) --- 2339,2343 ---- ;; If diff reports errors, show them then quit. ! (if (/= 0 (ediff-eval-in-buffer ediff-error-buffer (buffer-size))) (let ((diff-output-buf ediff-diff-buffer)) (switch-to-buffer ediff-error-buffer) *************** *** 2060,2064 **** (and (eq control-buf (current-buffer)) (/= (buffer-size) 0) ! (emerge-eval-in-buffer control-buf (string= ediff-window-config-saved --- 2416,2420 ---- (and (eq control-buf (current-buffer)) (/= (buffer-size) 0) ! (ediff-eval-in-buffer control-buf (string= ediff-window-config-saved *************** *** 2092,2106 **** (function (lambda (buf) ! (if (ediff-buffer-live-p buf) ! (emerge-eval-in-buffer ! buf ! (if (eq ediff-highlighting-style 'ascii) ! (progn ! (ediff-unselect-and-select-difference ! ediff-current-difference ! 'unselect-only 'no-recenter) ! (setq rehighlight-key ! (substitute-command-keys "\\[ediff-recenter]")) ! )))))) ediff-this-buffer-control-sessions) (if rehighlight-key --- 2448,2461 ---- (function (lambda (buf) ! (ediff-eval-in-buffer ! buf ! (if (eq ediff-highlighting-style 'ascii) ! (progn ! (ediff-unselect-and-select-difference ! ediff-current-difference ! 'unselect-only 'no-recenter) ! (setq rehighlight-key ! (substitute-command-keys "\\[ediff-recenter]")) ! ))))) ediff-this-buffer-control-sessions) (if rehighlight-key *************** *** 2113,2125 **** "Recompute difference regions in buffers A and B." (interactive) ! (let ((curr-diff ediff-current-difference) ! (point-A (emerge-eval-in-buffer ediff-A-buffer (point))) ! (point-B (emerge-eval-in-buffer ediff-B-buffer (point))) file-A file-B) (ediff-unselect-and-select-difference -1) ! (emerge-eval-in-buffer ediff-A-buffer (setq file-A (ediff-make-temp-file))) ! (emerge-eval-in-buffer ediff-B-buffer (setq file-B (ediff-make-temp-file))) --- 2468,2479 ---- "Recompute difference regions in buffers A and B." (interactive) ! (let ((point-A (ediff-eval-in-buffer ediff-A-buffer (point))) ! (point-B (ediff-eval-in-buffer ediff-B-buffer (point))) file-A file-B) (ediff-unselect-and-select-difference -1) ! (ediff-eval-in-buffer ediff-A-buffer (setq file-A (ediff-make-temp-file))) ! (ediff-eval-in-buffer ediff-B-buffer (setq file-B (ediff-make-temp-file))) *************** *** 2132,2142 **** (delete-file file-A) (delete-file file-B) ! (emerge-eval-in-buffer ediff-A-buffer (goto-char point-A)) (ediff-jump-to-difference (ediff-diff-at-point 'A)) (beep 1) (if (y-or-n-p ! "Ediff is around last posn in buff A. Stay (or goto last posn in B)? ") () ! (emerge-eval-in-buffer ediff-B-buffer (goto-char point-B)) (ediff-jump-to-difference (ediff-diff-at-point 'B))) (message "") --- 2486,2496 ---- (delete-file file-A) (delete-file file-B) ! (ediff-eval-in-buffer ediff-A-buffer (goto-char point-A)) (ediff-jump-to-difference (ediff-diff-at-point 'A)) (beep 1) (if (y-or-n-p ! "Ediff is at last posn in buff A. Stay (or goto last posn in B)? ") () ! (ediff-eval-in-buffer ediff-B-buffer (goto-char point-B)) (ediff-jump-to-difference (ediff-diff-at-point 'B))) (message "") *************** *** 2152,2156 **** ;; remember and alter buffer characteristics (set (if arg 'ediff-A-buffer-values-setup 'ediff-A-buffer-values) ! (emerge-eval-in-buffer ediff-A-buffer (prog1 --- 2506,2510 ---- ;; remember and alter buffer characteristics (set (if arg 'ediff-A-buffer-values-setup 'ediff-A-buffer-values) ! (ediff-eval-in-buffer ediff-A-buffer (prog1 *************** *** 2159,2163 **** ediff-working-values)))) (set (if arg 'ediff-B-buffer-values-setup 'ediff-B-buffer-values) ! (emerge-eval-in-buffer ediff-B-buffer (prog1 --- 2513,2517 ---- ediff-working-values)))) (set (if arg 'ediff-B-buffer-values-setup 'ediff-B-buffer-values) ! (ediff-eval-in-buffer ediff-B-buffer (prog1 *************** *** 2170,2182 **** (let ((A-values (if arg ediff-A-buffer-values-setup ediff-A-buffer-values)) (B-values (if arg ediff-B-buffer-values-setup ediff-B-buffer-values))) ! (emerge-eval-in-buffer ediff-A-buffer ! (emerge-restore-variables ediff-saved-variables ! A-values)) ! (emerge-eval-in-buffer ediff-B-buffer ! (emerge-restore-variables ediff-saved-variables ! B-values)))) ! ;; if optional A-buffer and B-buffer are given, then construct a vector of ;; diff using point values. Otherwise, use line offsets. (defun ediff-extract-diffs (diff-buffer &optional A-buffer B-buffer) --- 2524,2537 ---- (let ((A-values (if arg ediff-A-buffer-values-setup ediff-A-buffer-values)) (B-values (if arg ediff-B-buffer-values-setup ediff-B-buffer-values))) ! ! (ediff-eval-in-buffer ediff-A-buffer ! (emerge-restore-variables ediff-saved-variables ! A-values)) ! (ediff-eval-in-buffer ediff-B-buffer ! (emerge-restore-variables ediff-saved-variables ! B-values)))) ! ;; If optional A-buffer and B-buffer are given, then construct a vector of ;; diff using point values. Otherwise, use line offsets. (defun ediff-extract-diffs (diff-buffer &optional A-buffer B-buffer) *************** *** 2187,2198 **** (if (and A-buffer B-buffer) (progn ;; reset point in buffers A and B ! (emerge-eval-in-buffer A-buffer (goto-char (point-min))) ! (emerge-eval-in-buffer B-buffer (goto-char (point-min))))) ! (emerge-eval-in-buffer diff-buffer (goto-char (point-min)) --- 2542,2553 ---- (if (and A-buffer B-buffer) (progn ;; reset point in buffers A and B ! (ediff-eval-in-buffer A-buffer (goto-char (point-min))) ! (ediff-eval-in-buffer B-buffer (goto-char (point-min))))) ! (ediff-eval-in-buffer diff-buffer (goto-char (point-min)) *************** *** 2230,2234 **** (progn ;; computing main diff vector ;; convert to relative line numbers ! (emerge-eval-in-buffer A-buffer (forward-line (- a-begin a-prev)) --- 2585,2589 ---- (progn ;; computing main diff vector ;; convert to relative line numbers ! (ediff-eval-in-buffer A-buffer (forward-line (- a-begin a-prev)) *************** *** 2237,2241 **** (setq a-end-pt (point) a-prev a-end)) ! (emerge-eval-in-buffer B-buffer (forward-line (- b-begin b-prev)) --- 2592,2596 ---- (setq a-end-pt (point) a-prev a-end)) ! (ediff-eval-in-buffer B-buffer (forward-line (- b-begin b-prev)) *************** *** 2256,2260 **** b-prev b-end)) ! ))) ;; end emerge-eval-in-buffer diff-list )) --- 2611,2615 ---- b-prev b-end)) ! ))) ;; end ediff-eval-in-buffer diff-list )) *************** *** 2276,2283 **** b-end (aref list-element 3)) ! ;; place overlays at the appropriate places in the buffers (setq a-overlay (ediff-make-overlay a-begin a-end A-buffer)) ! ;; priorities of overlays should be equal in all ediff-control ! ;; buffers. otherwise it won't work due to Emacs ;; bug---insert-in-front-hooks will be called ;; only on behalf of the buffer with higher priority. --- 2631,2638 ---- b-end (aref list-element 3)) ! ;; Put overlays at appropriate places in buffers (setq a-overlay (ediff-make-overlay a-begin a-end A-buffer)) ! ;; Priorities of overlays should be equal in all ediff control ! ;; panels buffers. Otherwise it won't work due to Emacs ;; bug---insert-in-front-hooks will be called ;; only on behalf of the buffer with higher priority. *************** *** 2318,2323 **** ;; record all overlays for this difference (setq diff-overlay-list ! (nconc diff-overlay-list (list (vector a-overlay b-overlay nil))) ! diff-list (cdr diff-list)) (message "Processing diff region %d of %d" current-diff total-diffs) --- 2673,2680 ---- ;; record all overlays for this difference (setq diff-overlay-list ! (nconc diff-overlay-list ! (list (vector a-overlay b-overlay nil nil))) ! diff-list ! (cdr diff-list)) (message "Processing diff region %d of %d" current-diff total-diffs) *************** *** 2340,2346 **** (setq ediff-disturbed-overlays nil) ;; clear after use (let (buffer-read-only) ! (ediff-setup-windows ediff-A-buffer ediff-B-buffer ediff-control-buffer)) ;; Redisplay whatever buffers are showing, if there is a selected difference ! (if (and (>= ediff-current-difference 0) (< ediff-current-difference ediff-number-of-differences)) (let* ( ;; context must be saved before switching to windows A/B --- 2697,2708 ---- (setq ediff-disturbed-overlays nil) ;; clear after use (let (buffer-read-only) ! (if (and (ediff-buffer-live-p ediff-A-buffer) ! (ediff-buffer-live-p ediff-B-buffer)) ! (ediff-setup-windows ! ediff-A-buffer ediff-B-buffer ediff-control-buffer))) ;; Redisplay whatever buffers are showing, if there is a selected difference ! (if (and (ediff-buffer-live-p ediff-A-buffer) ! (ediff-buffer-live-p ediff-B-buffer) ! (>= ediff-current-difference 0) (< ediff-current-difference ediff-number-of-differences)) (let* ( ;; context must be saved before switching to windows A/B *************** *** 2448,2464 **** "Toggle auto-refine mode." (interactive) ! (if window-system ! (cond ((eq ediff-auto-refine 'nix) ! (setq ediff-auto-refine 'on) ! (ediff-make-fine-diffs ediff-current-difference 'noforce) ! (message "Auto-refining is ON.")) ! ((eq ediff-auto-refine 'on) ! (message "Auto-refining is OFF.") ! (setq ediff-auto-refine 'off)) ! (t ! (ediff-set-fine-diff-properties ediff-current-difference 'default) ! (message "Refinements are HIDDEN.") ! (setq ediff-auto-refine 'nix)) ! ))) (defun ediff-toggle-help () --- 2810,2825 ---- "Toggle auto-refine mode." (interactive) ! (cond ((eq ediff-auto-refine 'nix) ! (setq ediff-auto-refine 'on) ! (ediff-make-fine-diffs ediff-current-difference 'noforce) ! (message "Auto-refining is ON.")) ! ((eq ediff-auto-refine 'on) ! (message "Auto-refining is OFF.") ! (setq ediff-auto-refine 'off)) ! (t ! (ediff-set-fine-diff-properties ediff-current-difference 'default) ! (message "Refinements are HIDDEN.") ! (setq ediff-auto-refine 'nix)) ! )) (defun ediff-toggle-help () *************** *** 2482,2486 **** "Toggles buffer-read-only for buffer buffers A and B." (interactive) ! (emerge-eval-in-buffer (if (eq last-command-char ?A) ediff-A-buffer ediff-B-buffer) (setq buffer-read-only (null buffer-read-only)))) --- 2843,2847 ---- "Toggles buffer-read-only for buffer buffers A and B." (interactive) ! (ediff-eval-in-buffer (if (eq last-command-char ?A) ediff-A-buffer ediff-B-buffer) (setq buffer-read-only (null buffer-read-only)))) *************** *** 2652,2656 **** (+ ediff-current-difference (if arg arg 1)))) (buffer-read-only nil)) ! (ediff-unselect-and-select-difference n)) (error "At end of the difference list."))) --- 3013,3029 ---- (+ ediff-current-difference (if arg arg 1)))) (buffer-read-only nil)) ! ! (while (and (< n ediff-number-of-differences) ! (funcall ediff-skip-diff-region-function n)) ! (setq n (1+ n))) ! ! (ediff-unselect-and-select-difference n) ! ;; possibly skip inessential difference regions ! (while (and ediff-ignore-similar-regions ! (< n ediff-number-of-differences) ! (ediff-no-fine-diffs n)) ! (setq n (1+ n)) ! (ediff-unselect-and-select-difference n)) ! ) ;; let (error "At end of the difference list."))) *************** *** 2662,2666 **** --- 3035,3050 ---- (let ((n (max -1 (- ediff-current-difference (if arg arg 1)))) (buffer-read-only nil)) + + (while (and (funcall ediff-skip-diff-region-function n) + (> n -1)) + (setq n (1- n))) + (ediff-unselect-and-select-difference n) + ;; possibly skip inessential difference regions + (while (and ediff-ignore-similar-regions + (> n -1) + (ediff-no-fine-diffs n)) + (setq n (1- n)) (ediff-unselect-and-select-difference n)) + ) ;; let (error "At beginning of the difference list."))) *************** *** 2677,2682 **** (defun ediff-jump-to-difference-at-point () "Go to the difference closest to the point in buffer A or B. ! If this command is invoked via `ja' or `ga' then the point in buffer A is ! used. Otherwise, buffer B is used." (interactive) (let ((buffer-read-only nil) --- 3061,3067 ---- (defun ediff-jump-to-difference-at-point () "Go to the difference closest to the point in buffer A or B. ! If this command is invoked via `\\[ediff-jump-to-difference-at-point]' ! then the point in buffer B is used. ! Otherwise, buffer A's point is used." (interactive) (let ((buffer-read-only nil) *************** *** 2690,2693 **** --- 3075,3079 ---- (let ((buffer (ediff-get-buffer buf-type)) (ctl-buffer ediff-control-buffer) + (max-dif-num (1- ediff-number-of-differences)) (diff-no -1) (prev-beg 0) *************** *** 2696,2702 **** (end 0)) ! (emerge-eval-in-buffer buffer ! (while (or (< (point) prev-beg) (> (point) beg)) (setq diff-no (1+ diff-no)) (setq prev-beg beg --- 3082,3089 ---- (end 0)) ! (ediff-eval-in-buffer buffer ! (while (and (or (< (point) prev-beg) (> (point) beg)) ! (< diff-no max-dif-num)) (setq diff-no (1+ diff-no)) (setq prev-beg beg *************** *** 2721,2728 **** (if arg (ediff-jump-to-difference arg)) ! (ediff-copy-diff ediff-current-difference ! (ediff-char-to-buftype (aref (this-command-keys) 0)) ! (ediff-char-to-buftype (aref (this-command-keys) 1))) ! (ediff-recenter 'no-rehighlight)) --- 3108,3119 ---- (if arg (ediff-jump-to-difference arg)) ! (let* ((key1 (aref (this-command-keys) 0)) ! (key2 (aref (this-command-keys) 1)) ! (char1 (if (ediff-if-lucid) (event-key key1) key1)) ! (char2 (if (ediff-if-lucid) (event-key key2) key2))) ! (ediff-copy-diff ediff-current-difference ! (ediff-char-to-buftype char1) ! (ediff-char-to-buftype char2)) ! (ediff-recenter 'no-rehighlight))) *************** *** 2740,2744 **** (setq reg-to-delete-end (ediff-get-diff-posn to-buf-type 'end n ctrl-buf)) ! (setq reg-to-copy (emerge-eval-in-buffer from-buf (buffer-substring (ediff-get-diff-posn --- 3131,3135 ---- (setq reg-to-delete-end (ediff-get-diff-posn to-buf-type 'end n ctrl-buf)) ! (setq reg-to-copy (ediff-eval-in-buffer from-buf (buffer-substring (ediff-get-diff-posn *************** *** 2746,2750 **** (ediff-get-diff-posn from-buf-type 'end n ctrl-buf)))) ! (setq reg-to-delete (emerge-eval-in-buffer to-buf (buffer-substring reg-to-delete-beg --- 3137,3141 ---- (ediff-get-diff-posn from-buf-type 'end n ctrl-buf)))) ! (setq reg-to-delete (ediff-eval-in-buffer to-buf (buffer-substring reg-to-delete-beg *************** *** 2763,2767 **** (condition-case conds (let (inhibit-read-only) ! (emerge-eval-in-buffer to-buf ;; to prevent flags from interfering if buffer is writable --- 3154,3158 ---- (condition-case conds (let (inhibit-read-only) ! (ediff-eval-in-buffer to-buf ;; to prevent flags from interfering if buffer is writable *************** *** 2849,2853 **** (condition-case conds ! (emerge-eval-in-buffer buf (let ((inhibit-read-only (null buffer-read-only)) --- 3240,3244 ---- (condition-case conds ! (ediff-eval-in-buffer buf (let ((inhibit-read-only (null buffer-read-only)) *************** *** 2891,2894 **** --- 3282,3397 ---- (ediff-char-to-buftype last-command-char)) (ediff-recenter 'no-rehighlight)) + + (defun ediff-toggle-regexp-match () + "Toggle focus on difference regions that match a regexp or hide those diffs." + (interactive) + (let (regexp-A regexp-B) + (cond + ((or (and (eq ediff-skip-diff-region-function 'ediff-focus-on-regexp-matches) + (eq last-command-char ?f)) + (and (eq ediff-skip-diff-region-function 'ediff-hide-regexp-matches) + (eq last-command-char ?h))) + (message "Selective browsing by regexp turned off.") + (setq ediff-skip-diff-region-function 'ediff-show-all-diffs)) + ((eq last-command-char ?h) + (setq ediff-skip-diff-region-function 'ediff-hide-regexp-matches + regexp-A + (read-string + (format + "Ignore A-regions matching this regexp (default \"%s\"): " + (regexp-quote ediff-regexp-hide-A))) + regexp-B + (read-string + (format + "Ignore B-regions matching this regexp (default \"%s\"): " + (regexp-quote ediff-regexp-hide-B)))) + (message "Hide difference regions matching regexp.") + (or (string= regexp-A "") (setq ediff-regexp-hide-A regexp-A)) + (or (string= regexp-B "") (setq ediff-regexp-hide-B regexp-B))) + ((eq last-command-char ?f) + (setq ediff-skip-diff-region-function 'ediff-focus-on-regexp-matches + regexp-A + (read-string + (format + "Focus on A-regions matching this regexp (default \"%s\"): " + (regexp-quote ediff-regexp-focus-A))) + regexp-B + (read-string + (format + "Focus on B-regions matching this regexp (default \"%s\"): " + (regexp-quote ediff-regexp-focus-B)))) + (message "Focus on difference regions matching regexp.") + (or (string= regexp-A "") (setq ediff-regexp-focus-A regexp-A)) + (or (string= regexp-B "") (setq ediff-regexp-focus-B regexp-B)))))) + + (defun ediff-toggle-skip-similar () + (interactive) + (setq ediff-ignore-similar-regions (not ediff-ignore-similar-regions)) + (if ediff-ignore-similar-regions + (message "Skipping over regions that differ only in white space & line breaks.") + (message "Skipping over white-space differences turned off."))) + + (defun ediff-show-all-diffs (n) + "Don't skip difference regions." + nil) + + (defun ediff-focus-on-regexp-matches (n) + "Focus on diffs that match regexp `ediff-regexp-focus-A/B'. + Regions to be ignored according to this function are those where + buf A region doesn't match `ediff-regexp-focus-A' and buf B region + doesn't match `ediff-regexp-focus-B'. + This function returns nil if the region number N (specified as + an argument) is not to be ignored and t if region N is to be ignored. + + N is a region number used by Ediff internally. It is 1 less + the number seen by the user." + (if (and (>= n 0) (< n ediff-number-of-differences)) + (let* ((ctl-buf ediff-control-buffer) + (regex-A ediff-regexp-focus-A) + (regex-B ediff-regexp-focus-B) + (reg-A-match (ediff-eval-in-buffer + ediff-A-buffer + (goto-char (ediff-get-diff-posn 'A 'beg n ctl-buf)) + (re-search-forward + regex-A + (ediff-get-diff-posn 'A 'end n ctl-buf) + t))) + (reg-B-match (ediff-eval-in-buffer + ediff-B-buffer + (goto-char (ediff-get-diff-posn 'B 'beg n ctl-buf)) + (re-search-forward + regex-B + (ediff-get-diff-posn 'B 'end n ctl-buf) + t)))) + (not (and reg-A-match reg-B-match))))) + + (defun ediff-hide-regexp-matches (n) + "Hide diffs that match regexp `ediff-regexp-hide-A/B'. + Regions to be ignored are those where buf A region matches + `ediff-regexp-hide-A' and buf B region matches `ediff-regexp-hide-B'. + This function returns nil if the region number N (specified as + an argument) is not to be ignored and t if region N is to be ignored. + + N is a region number used by Ediff internally. It is 1 less + the number seen by the user." + (if (and (>= n 0) (< n ediff-number-of-differences)) + (let* ((ctl-buf ediff-control-buffer) + (regex-A ediff-regexp-hide-A) + (regex-B ediff-regexp-hide-B) + (reg-A-match (ediff-eval-in-buffer + ediff-A-buffer + (goto-char (ediff-get-diff-posn 'A 'beg n ctl-buf)) + (re-search-forward + regex-A + (ediff-get-diff-posn 'A 'end n ctl-buf) + t))) + (reg-B-match (ediff-eval-in-buffer + ediff-B-buffer + (goto-char (ediff-get-diff-posn 'B 'beg n ctl-buf)) + (re-search-forward + regex-B + (ediff-get-diff-posn 'B 'end n ctl-buf) + t)))) + (and reg-A-match reg-B-match)))) *************** *** 2917,2938 **** ;; restore buffer mode line id's in buffer-A/B (let ((control-buffer ediff-control-buffer)) ! (emerge-eval-in-buffer ! ediff-A-buffer ! (setq before-change-function nil) ! (setq ediff-this-buffer-control-sessions ! (delq control-buffer ediff-this-buffer-control-sessions)) ! (if (null ediff-this-buffer-control-sessions) ! (setq local-write-file-hooks ! (delq 'ediff-block-write-file local-write-file-hooks))) ! (kill-local-variable 'mode-line-buffer-identification)) ! (emerge-eval-in-buffer ! ediff-B-buffer ! (setq ediff-this-buffer-control-sessions ! (delq control-buffer ediff-this-buffer-control-sessions)) ! (if (null ediff-this-buffer-control-sessions) ! (setq local-write-file-hooks ! (delq 'ediff-block-write-file local-write-file-hooks))) ! (setq before-change-function nil) ! (kill-local-variable 'mode-line-buffer-identification))) (run-hooks 'ediff-quit-hooks)) --- 3420,3446 ---- ;; restore buffer mode line id's in buffer-A/B (let ((control-buffer ediff-control-buffer)) ! (condition-case nil ! (ediff-eval-in-buffer ! ediff-A-buffer ! (setq before-change-function nil) ! (setq ediff-this-buffer-control-sessions ! (delq control-buffer ediff-this-buffer-control-sessions)) ! (if (null ediff-this-buffer-control-sessions) ! (setq local-write-file-hooks ! (delq 'ediff-block-write-file local-write-file-hooks))) ! (kill-local-variable 'mode-line-buffer-identification)) ! (error)) ! ! (condition-case nil ! (ediff-eval-in-buffer ! ediff-B-buffer ! (setq ediff-this-buffer-control-sessions ! (delq control-buffer ediff-this-buffer-control-sessions)) ! (if (null ediff-this-buffer-control-sessions) ! (setq local-write-file-hooks ! (delq 'ediff-block-write-file local-write-file-hooks))) ! (setq before-change-function nil) ! (kill-local-variable 'mode-line-buffer-identification)) ! (error))) (run-hooks 'ediff-quit-hooks)) *************** *** 2950,2953 **** --- 3458,3462 ---- (buff-B ediff-B-buffer)) (ediff-kill-buffer-carefully ediff-diff-buffer) + (ediff-kill-buffer-carefully ediff-fine-diff-buffer) (ediff-kill-buffer-carefully ediff-tmp-buffer) (ediff-kill-buffer-carefully ediff-error-buffer) *************** *** 2955,2961 **** (ediff-kill-buffer-carefully ediff-patch-diagnostics) (delete-other-windows) ! (switch-to-buffer buff-B) ! (split-window-vertically) ! (switch-to-buffer buff-A))) ;; The default way of suspending Ediff. --- 3464,3482 ---- (ediff-kill-buffer-carefully ediff-patch-diagnostics) (delete-other-windows) ! ;; display only if not visible ! ! (condition-case nil ! (or (get-buffer-window buff-B t) ! (switch-to-buffer buff-B)) ! (error)) ! (condition-case nil ! (or (get-buffer-window buff-A t) ! (progn ! (if (get-buffer-window buff-B) ! (split-window-vertically)) ! (switch-to-buffer buff-A))) ! (error)) ! (message "") ! )) ;; The default way of suspending Ediff. *************** *** 2967,2971 **** (buf-patch-diag ediff-patch-diagnostics) (buf-err ediff-error-buffer) ! (buf-diff ediff-diff-buffer)) (bury-buffer) ;; ediff-control-buffer (delete-other-windows) --- 3488,3493 ---- (buf-patch-diag ediff-patch-diagnostics) (buf-err ediff-error-buffer) ! (buf-diff ediff-diff-buffer) ! (buf-fine-diff ediff-fine-diff-buffer)) (bury-buffer) ;; ediff-control-buffer (delete-other-windows) *************** *** 2972,2975 **** --- 3494,3498 ---- (bury-buffer buf-err) (bury-buffer buf-diff) + (bury-buffer buf-fine-diff) (bury-buffer buf-patch) (bury-buffer buf-patch-diag) *************** *** 2980,2984 **** (defun ediff-suspend () "Suspend Ediff. ! To resume, switch to the appropriate `*ediff-control*' buffer and then type \\[ediff-recenter]. Ediff will automatically set up an appropriate window config." --- 3503,3507 ---- (defun ediff-suspend () "Suspend Ediff. ! To resume, switch to the appropriate `Ediff Control Panel' buffer and then type \\[ediff-recenter]. Ediff will automatically set up an appropriate window config." *************** *** 2987,2999 **** (run-hooks 'ediff-suspend-hooks) (message ! "To resume Ediff, switch to *ediff-control* and hit '%S'" key))) ! (defun ediff-file-names () "Show the names of the buffers or files being operated on by Ediff. Hit \\[ediff-recenter] to reset the windows afterward." (interactive) ! (with-output-to-temp-buffer "*Help*" ! (emerge-eval-in-buffer ediff-A-buffer (if buffer-file-name (princ --- 3510,3522 ---- (run-hooks 'ediff-suspend-hooks) (message ! "To resume Ediff, switch to Ediff Control Panel and hit '%S'" key))) ! (defun ediff-status-info () "Show the names of the buffers or files being operated on by Ediff. Hit \\[ediff-recenter] to reset the windows afterward." (interactive) ! (with-output-to-temp-buffer " *ediff-info*" ! (ediff-eval-in-buffer ediff-A-buffer (if buffer-file-name (princ *************** *** 3001,3005 **** (princ (format "Buffer A is: %s\n" (buffer-name))))) ! (emerge-eval-in-buffer ediff-B-buffer (if buffer-file-name (princ --- 3524,3528 ---- (princ (format "Buffer A is: %s\n" (buffer-name))))) ! (ediff-eval-in-buffer ediff-B-buffer (if buffer-file-name (princ *************** *** 3007,3023 **** (princ (format "Buffer B is: %s\n" (buffer-name))))) ! )) ! ! ! ! (defun ediff-line-numbers () ! "Display the current line numbers. ! This function displays the line numbers of the points in the A, B." ! (interactive) ! (let* ((A-line (emerge-eval-in-buffer ediff-A-buffer (count-lines (point-min) (point)))) ! (B-line (emerge-eval-in-buffer ediff-B-buffer (count-lines (point-min) (point))))) ! (message "At lines: A = %d, B = %d" A-line B-line))) --- 3530,3572 ---- (princ (format "Buffer B is: %s\n" (buffer-name))))) ! ! (let* ((A-line (ediff-eval-in-buffer ediff-A-buffer (count-lines (point-min) (point)))) ! (B-line (ediff-eval-in-buffer ediff-B-buffer (count-lines (point-min) (point))))) ! (princ (format "\nPoint position in buffer A = %d\n" A-line)) ! (princ (format "Point position in buffer B = %d\n" B-line))) ! ! (princ (format "\nCurrent difference number = %S\n" ! (cond ((< ediff-current-difference 0) 'start) ! ((>= ediff-current-difference ! ediff-number-of-differences) 'end) ! (t (1+ ediff-current-difference))))) ! ! (cond (ediff-ignore-similar-regions ! (princ "\nSkipping over regions that differ only in white space & line breaks.")) ! (t ! (princ "\nNo skipping over regions that differ in white space & line breaks."))) ! ! (cond ((eq ediff-skip-diff-region-function 'ediff-show-all-diffs) ! (princ "\nSelective browsing by regexp is off.\n")) ! ((eq ediff-skip-diff-region-function 'ediff-hide-regexp-matches) ! (princ ! "\nIgnoring regions that match") ! (princ ! (format "\n\t regexp `%s' in buffer A and\n\t regexp `%s' in buffer B\n" ! ediff-regexp-hide-A ediff-regexp-hide-B))) ! ((eq ediff-skip-diff-region-function 'ediff-focus-on-regexp-matches) ! (princ ! "\nFocusing on regions that match") ! (princ ! (format "\n\t regexp `%s' in buffer A and\n\t regexp `%s' in buffer B\n" ! ediff-regexp-focus-A ediff-regexp-focus-B))) ! (t (princ "\nSelective browsing via a user-defined method.\n"))) ! ! (princ "\nBug fixes to: Michael Kifer \n") ! (princ "Gripes to: /dev/null \n") ! )) ! *************** *** 3027,3031 **** ;; group of lines in the A, B buffers (defun ediff-select-difference (n) ! (if (and (>= n 0) (< n ediff-number-of-differences)) (progn (ediff-remember-buffer-characteristics) --- 3576,3582 ---- ;; group of lines in the A, B buffers (defun ediff-select-difference (n) ! (if (and (ediff-buffer-live-p ediff-A-buffer) ! (ediff-buffer-live-p ediff-B-buffer) ! (>= n 0) (< n ediff-number-of-differences)) (progn (ediff-remember-buffer-characteristics) *************** *** 3040,3057 **** ediff-control-buffer n)) ! (if window-system ! (cond ((eq ediff-auto-refine 'on) ! (if (and ! (> ediff-auto-refine-limit ! (- (ediff-get-diff-posn 'A 'end n) ! (ediff-get-diff-posn 'A 'beg n))) ! (> ediff-auto-refine-limit ! (- (ediff-get-diff-posn 'B 'end n) ! (ediff-get-diff-posn 'B 'beg n)))) ! (ediff-make-fine-diffs n 'noforce) ! (ediff-make-fine-diffs n 'skip))) ! ! ((eq ediff-auto-refine 'off) ; highlight iff fine diffs ! (ediff-make-fine-diffs n 'skip)))) ; already exist (ediff-restore-buffer-characteristics) --- 3591,3607 ---- ediff-control-buffer n)) ! (cond ((eq ediff-auto-refine 'on) ! (if (and ! (> ediff-auto-refine-limit ! (- (ediff-get-diff-posn 'A 'end n) ! (ediff-get-diff-posn 'A 'beg n))) ! (> ediff-auto-refine-limit ! (- (ediff-get-diff-posn 'B 'end n) ! (ediff-get-diff-posn 'B 'beg n)))) ! (ediff-make-fine-diffs n 'noforce) ! (ediff-make-fine-diffs n 'skip))) ! ! ((eq ediff-auto-refine 'off) ; highlight iff fine diffs ! (ediff-make-fine-diffs n 'skip))) ; already exist (ediff-restore-buffer-characteristics) *************** *** 3083,3089 **** ;; unhighlight fine diffs ! (if window-system ! (ediff-set-fine-diff-properties ! ediff-current-difference 'default)) (run-hooks 'ediff-unselect-hooks)))) --- 3633,3637 ---- ;; unhighlight fine diffs ! (ediff-set-fine-diff-properties ediff-current-difference 'default) (run-hooks 'ediff-unselect-hooks)))) *************** *** 3098,3102 **** ;; ;; Don't use `ediff-select-difference' and `ediff-unselect-difference' ! ;; directly,;; since this will screw up the undo info in the presence of ;; ASCII flags. ;; Instead, use `ediff-unselect-and-select-difference' with appropriate --- 3646,3650 ---- ;; ;; Don't use `ediff-select-difference' and `ediff-unselect-difference' ! ;; directly, since this will screw up the undo info in the presence of ;; ASCII flags. ;; Instead, use `ediff-unselect-and-select-difference' with appropriate *************** *** 3115,3127 **** (ediff-recenter 'no-rehighlight))) ! (emerge-eval-in-buffer ! ediff-A-buffer ! (setq buf-A-undo buffer-undo-list)) ! (emerge-eval-in-buffer ! ediff-B-buffer ! (setq buf-B-undo buffer-undo-list)) ! (buffer-disable-undo ediff-A-buffer) ! (buffer-disable-undo ediff-B-buffer) (unwind-protect ;; we don't want to lose undo info due to error --- 3663,3678 ---- (ediff-recenter 'no-rehighlight))) ! (if (and (ediff-buffer-live-p ediff-A-buffer) ! (ediff-buffer-live-p ediff-B-buffer)) ! (progn ! (ediff-eval-in-buffer ! ediff-A-buffer ! (setq buf-A-undo buffer-undo-list)) ! (ediff-eval-in-buffer ! ediff-B-buffer ! (setq buf-B-undo buffer-undo-list)) ! (buffer-disable-undo ediff-A-buffer) ! (buffer-disable-undo ediff-B-buffer))) (unwind-protect ;; we don't want to lose undo info due to error *************** *** 3131,3139 **** ;; Auto-save buffers while Ediff flags are temporarily removed. ! (emerge-eval-in-buffer ediff-A-buffer (if buf-A-modified (do-auto-save))) ! (emerge-eval-in-buffer ediff-B-buffer (if buf-B-modified --- 3682,3690 ---- ;; Auto-save buffers while Ediff flags are temporarily removed. ! (ediff-eval-in-buffer ediff-A-buffer (if buf-A-modified (do-auto-save))) ! (ediff-eval-in-buffer ediff-B-buffer (if buf-B-modified *************** *** 3145,3165 **** ) ;; end protected section ! (emerge-eval-in-buffer control-buf ! (ediff-refresh-mode-line) ! ;; restore undo and buffer-modified info ! (emerge-eval-in-buffer ! ediff-A-buffer ! (set-buffer-modified-p buf-A-modified) ! (setq buffer-undo-list buf-A-undo))) ! ! (emerge-eval-in-buffer control-buf ! (emerge-eval-in-buffer ! ediff-B-buffer ! (set-buffer-modified-p buf-B-modified) ! (setq buffer-undo-list buf-B-undo)) ! )))) ;; Revise the mode line to display which difference we have selected --- 3696,3715 ---- ) ;; end protected section ! (ediff-eval-in-buffer control-buf ! (ediff-refresh-mode-line) ! ;; restore undo and buffer-modified info ! (ediff-eval-in-buffer ! ediff-A-buffer ! (set-buffer-modified-p buf-A-modified) ! (setq buffer-undo-list buf-A-undo))) ! (ediff-eval-in-buffer control-buf ! (ediff-eval-in-buffer ! ediff-B-buffer ! (set-buffer-modified-p buf-B-modified) ! (setq buffer-undo-list buf-B-undo))) ! ))) ;; Revise the mode line to display which difference we have selected *************** *** 3168,3182 **** (setq mode-line-buffer-identification (cond ((< ediff-current-difference 0) ! (list (format "Ediff: %%b At start: %d diffs" ediff-number-of-differences))) ((>= ediff-current-difference ediff-number-of-differences) ! (list (format "Ediff: %%b At end: %d diffs" ediff-number-of-differences))) (t ! (list (format "Ediff: %%b diff %d of %d" (1+ ediff-current-difference) ediff-number-of-differences))))) ;; Force mode-line redisplay ! (set-buffer-modified-p (buffer-modified-p))) --- 3718,3732 ---- (setq mode-line-buffer-identification (cond ((< ediff-current-difference 0) ! (list (format "%%b: At start of %d diffs" ediff-number-of-differences))) ((>= ediff-current-difference ediff-number-of-differences) ! (list (format "%%b: At end of %d diffs" ediff-number-of-differences))) (t ! (list (format "%%b: diff %d of %d" (1+ ediff-current-difference) ediff-number-of-differences))))) ;; Force mode-line redisplay ! (force-mode-line-update)) *************** *** 3188,3241 **** (error "No difference selected"))) ! (defun ediff-read-file-name (prompt default-dir default-file A-file) ; This is a modified version of a similar function in `emerge.el'. ; PROMPT should not have trailing ': ', so that it can be modified ; according to context. - ; If both A-FILE and default-dir are set, the file constructed our of - ; default-dir and the non-directory part of A-FILE is used as default and as - ; initial input. - ; If A-FILE is set (but default-dir is not), it is used as default and - ; initial input. ; If default-file is set, it should be used as the default value. ; If default-dir is non-nil, use it as the default directory. ! ; Otherwise, use the value in Emacs's var default-directory. (let (f) ! (setq f ! (cond ! ((and A-file default-dir) ! (read-file-name (format "%s (default %s%s): " ! prompt ! (abbreviate-file-name ! (expand-file-name default-dir)) ! (file-name-nondirectory A-file)) ! (expand-file-name default-dir) ! (concat (expand-file-name default-dir) ! (file-name-nondirectory A-file)) ! 'confirm (file-name-nondirectory A-file))) ! (A-file ! (read-file-name (format "%s (default %s): " ! prompt (file-name-nondirectory A-file)) ! (expand-file-name (file-name-directory A-file)) ! A-file ! 'confirm (file-name-nondirectory A-file))) ! ;; If there is a default file, but no A-file, use it. ! (default-file ! (read-file-name (format "%s (default %s): " prompt default-file) ! default-dir;; if nil then default-directory. ! nil 'confirm)) ! (t ! (read-file-name (concat prompt ": ") ! default-dir;; if nil then default-directory. ! nil 'confirm)))) ;; If user enters a directory name, expand the default file in that ;; directory. This allows the user to enter a directory name for the ! ;; B-file and diff against the A-file in that directory instead of a DIRED ! ;; listing! ! (if (and (file-directory-p f) ! (or A-file default-file)) (setq f (expand-file-name ! (file-name-nondirectory (or A-file default-file)) f))) ! f)) ! ;; If `prefix' is given, then it is used as a prefix for the temp file --- 3738,3785 ---- (error "No difference selected"))) ! (defun ediff-read-file-name (prompt default-dir default-file) ; This is a modified version of a similar function in `emerge.el'. ; PROMPT should not have trailing ': ', so that it can be modified ; according to context. ; If default-file is set, it should be used as the default value. ; If default-dir is non-nil, use it as the default directory. ! ; Otherwise, use the value of Emacs' variable `default-directory.' ! ! ;; hack default-dir if it is not set ! (setq default-dir ! (file-name-as-directory ! (abbreviate-file-name ! (expand-file-name (or default-dir ! (and default-file ! (file-name-directory default-file)) ! default-directory))))) ! ! ;; strip the directory from default-file ! (if default-file ! (setq default-file (file-name-nondirectory default-file))) ! (let (f) ! (setq f (expand-file-name ! (read-file-name ! (format "%s%s: " ! prompt ! (if default-file ! (concat " (default " default-file ")") ! "")) ! default-dir ! default-file ! 'confirm ! default-file ! ) ! default-dir ! )) ;; If user enters a directory name, expand the default file in that ;; directory. This allows the user to enter a directory name for the ! ;; B-file and diff against the default-file in that directory instead ! ;; of a DIRED listing! ! (if (and (file-directory-p f) default-file) (setq f (expand-file-name ! (file-name-nondirectory default-file) f))) ! f)) ;; If `prefix' is given, then it is used as a prefix for the temp file *************** *** 3249,3254 **** (format ".%s" ! (file-name-nondirectory ! (buffer-name))))))))) ;; create the file (write-region (point-min) (point-max) f nil 'no-message) --- 3793,3797 ---- (format ".%s" ! "buf"))))))) ;; create the file (write-region (point-min) (point-max) f nil 'no-message) *************** *** 3268,3271 **** --- 3811,3850 ---- str) + ;; Make sure the current buffer (for a file) has the same contents as the + ;; file on disk, and attempt to remedy the situation if not. + ;; 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 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) + ;; First check if the file has been modified since the buffer visited it. + (if (verify-visited-file-modtime (current-buffer)) + (if (buffer-modified-p) + ;; 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 + (if file-magic + (erase-buffer)) + (revert-buffer t t)) + (error "Buffer out of sync for file %s" buffer-file-name)))) + (defun ediff-block-write-file () *************** *** 3272,3276 **** "Prevent writing files A and B directly." (if (ediff-check-for-ascii-flags) ! (error "Use 'wa' and 'wb' to save buffs A/B (first switch back to *ediff-control*."))) (defun ediff-check-for-ascii-flags () --- 3851,3855 ---- "Prevent writing files A and B directly." (if (ediff-check-for-ascii-flags) ! (error "Type 'wa' and 'wb' in Ediff Control Panel to save buffs A/B."))) (defun ediff-check-for-ascii-flags () *************** *** 3278,3284 **** (cons 'or (mapcar (function (lambda (buf) ! (emerge-eval-in-buffer ! buf ! (eq ediff-highlighting-style 'ascii)))) ediff-this-buffer-control-sessions)))) --- 3857,3864 ---- (cons 'or (mapcar (function (lambda (buf) ! (if (ediff-buffer-live-p buf) ! (ediff-eval-in-buffer ! buf ! (eq ediff-highlighting-style 'ascii))))) ediff-this-buffer-control-sessions)))) *************** *** 3332,3336 **** (defun ediff-save-buffer () ! "Safe way of saving buffers A and B." (interactive) (let ((hooks local-write-file-hooks)) --- 3912,3917 ---- (defun ediff-save-buffer () ! "Safe way of saving buffers A, B, and the diff output. ! `wa' saves buffer A, `wb' saves buffer B, and `wf' saves the diff output." (interactive) (let ((hooks local-write-file-hooks)) *************** *** 3338,3343 **** 'unselect-only) (unwind-protect ! (emerge-eval-in-buffer ! (if (eq last-command-char ?a) ediff-A-buffer ediff-B-buffer) ;; temporarily remove writing block (setq hooks (delq 'ediff-block-write-file hooks)) --- 3919,3930 ---- 'unselect-only) (unwind-protect ! (ediff-eval-in-buffer ! (cond ((eq last-command-char ?a) ! ediff-A-buffer) ! ((eq last-command-char ?b) ! ediff-B-buffer) ! ((eq last-command-char ?f) ! (message "Saving diff output ...")(sit-for 1) ! ediff-diff-buffer)) ;; temporarily remove writing block (setq hooks (delq 'ediff-block-write-file hooks)) *************** *** 3354,3358 **** (defun ediff-remove-flags-from-buffer (buffer before-posn after-posn before-flag after-flag) ! (emerge-eval-in-buffer buffer (let ((buffer-read-only nil) --- 3941,3945 ---- (defun ediff-remove-flags-from-buffer (buffer before-posn after-posn before-flag after-flag) ! (ediff-eval-in-buffer buffer (let ((buffer-read-only nil) *************** *** 3375,3379 **** (if (ediff-if-lucid) (ediff-adjust-disturbed-extents-lucid (point))) ! (if (ediff-if-lucid) (ediff-collect-extents-lucid (point))) --- 3962,3966 ---- (if (ediff-if-lucid) (ediff-adjust-disturbed-extents-lucid (point))) ! (if (ediff-if-lucid) (ediff-collect-extents-lucid (point))) *************** *** 3392,3396 **** ;; This is a modified `emerge-place-flags-in-buffer'. (defun ediff-place-flags-in-buffer (buf-type buffer ctl-buffer difference) ! (emerge-eval-in-buffer buffer (ediff-place-flags-in-buffer1 buf-type ctl-buffer difference))) --- 3979,3983 ---- ;; This is a modified `emerge-place-flags-in-buffer'. (defun ediff-place-flags-in-buffer (buf-type buffer ctl-buffer difference) ! (ediff-eval-in-buffer buffer (ediff-place-flags-in-buffer1 buf-type ctl-buffer difference))) *************** *** 3414,3418 **** (setq beg-of-line (bolp)) ! (setq flag (emerge-eval-in-buffer ctl-buffer (if beg-of-line --- 4001,4005 ---- (setq beg-of-line (bolp)) ! (setq flag (ediff-eval-in-buffer ctl-buffer (if beg-of-line *************** *** 3434,3438 **** (setq beg-of-line (bolp)) ! (setq flag (emerge-eval-in-buffer ctl-buffer (if beg-of-line --- 4021,4025 ---- (setq beg-of-line (bolp)) ! (setq flag (ediff-eval-in-buffer ctl-buffer (if beg-of-line *************** *** 3463,3467 **** (setq control-buf (current-buffer))) ! (emerge-eval-in-buffer control-buf (or n (setq n ediff-current-difference)) --- 4050,4054 ---- (setq control-buf (current-buffer))) ! (ediff-eval-in-buffer control-buf (or n (setq n ediff-current-difference)) *************** *** 3487,3492 **** (defun ediff-highlight-diff (n) "Put face on diff N. Invoked for X displays only." ! (let* ((last-A (emerge-eval-in-buffer ediff-A-buffer (point-max))) ! (last-B (emerge-eval-in-buffer ediff-B-buffer (point-max))) (begin-A (ediff-get-diff-posn 'A 'beg n)) (end-A (ediff-get-diff-posn 'A 'end n)) --- 4074,4079 ---- (defun ediff-highlight-diff (n) "Put face on diff N. Invoked for X displays only." ! (let* ((last-A (ediff-eval-in-buffer ediff-A-buffer (point-max))) ! (last-B (ediff-eval-in-buffer ediff-B-buffer (point-max))) (begin-A (ediff-get-diff-posn 'A 'beg n)) (end-A (ediff-get-diff-posn 'A 'end n)) *************** *** 3533,3537 **** (ediff-overlay-put (ediff-get-diff-overlay n 'B) 'face nil) ! (sit-for 0) ;; needs to synch for some reason )) --- 4120,4124 ---- (ediff-overlay-put (ediff-get-diff-overlay n 'B) 'face nil) ! ;; (sit-for 0) ;; needed synch for some reason in v19.22 )) *************** *** 3596,3603 **** This is usually needed only when a buffer is involved in multiple Ediff sessions." ! (let* ((A-sessions (emerge-eval-in-buffer ediff-A-buffer ediff-this-buffer-control-sessions)) ! (B-sessions (emerge-eval-in-buffer ediff-B-buffer ediff-this-buffer-control-sessions)) --- 4183,4190 ---- This is usually needed only when a buffer is involved in multiple Ediff sessions." ! (let* ((A-sessions (ediff-eval-in-buffer ediff-A-buffer ediff-this-buffer-control-sessions)) ! (B-sessions (ediff-eval-in-buffer ediff-B-buffer ediff-this-buffer-control-sessions)) *************** *** 3606,3619 **** (mapcar (function (lambda (buf) ! (if (ediff-buffer-live-p buf) ! (emerge-eval-in-buffer ! buf ! (or (if (eq action 'insert) (memq ediff-highlighting-style '(ascii off)) ! (not (eq ediff-highlighting-style 'ascii))) ! (ediff-unselect-and-select-difference ! ediff-current-difference ! flag 'no-recenter)) ! )))) sessions))) --- 4193,4205 ---- (mapcar (function (lambda (buf) ! (ediff-eval-in-buffer ! buf ! (or (if (eq action 'insert) (memq ediff-highlighting-style '(ascii off)) ! (not (eq ediff-highlighting-style 'ascii))) ! (ediff-unselect-and-select-difference ! ediff-current-difference ! flag 'no-recenter)) ! ))) sessions))) *************** *** 3623,3626 **** --- 4209,4218 ---- ;; Split region along word boundaries. Each word will be on its own line. ;; Output to buffer out-buffer. + (defun ediff-forward-word () + "Move point one word forward. Used for splitting diff regions into words. + This is the default for `ediff-forward-word-function'." + (or (> (skip-chars-forward ediff-word-1) 0) + (> (skip-chars-forward ediff-word-2) 0))) + (defun ediff-wordify (beg end in-buffer out-buffer) (let (sv-point string) *************** *** 3636,3647 **** (delete-region (point-min) (point)) ! (while (or (> (skip-chars-forward ediff-word-1) 0) ! (> (skip-chars-forward ediff-word-2) 0)) ! (setq sv-point (point)) (skip-chars-forward ediff-whitespace) (delete-region sv-point (point)) ! (insert "\n"))))) ! ;; `n' is the diff region to work on. --- 4228,4237 ---- (delete-region (point-min) (point)) ! (while (not (eobp)) ! (funcall ediff-forward-word-function) (setq sv-point (point)) (skip-chars-forward ediff-whitespace) (delete-region sv-point (point)) ! (insert "\n"))))) ;; `n' is the diff region to work on. *************** *** 3651,3656 **** (defun ediff-make-fine-diffs (&optional n flag) (interactive) - (if (not window-system) - (error "Non-window system.")) (or n (setq n ediff-current-difference)) --- 4241,4244 ---- *************** *** 3658,3746 **** (error "No differences found.")) ! (let ((file-A ediff-temp-file-A) (file-B ediff-temp-file-B)) ! (cond ((and (eq flag 'noforce) (ediff-get-fine-diff-vector n)) ! nil) ! ((eq flag 'skip) ! (or (ediff-get-fine-diff-vector n) ! (eq ediff-auto-refine 'off) ! (message "Region %d is larger than auto-refine limit. Hit %S to force-refine." ! (1+ n) ! (substitute-command-keys "\\[ediff-make-fine-diffs]") ! ))) ! (t ! ;; delete old fine diffs ! (ediff-clear-diff-vector (ediff-get-fine-diff-vector n)) ! ;; recompute fine diffs ! (setq ediff-tmp-buffer (get-buffer-create "*ediff-tmp*")) ! ! (funcall ediff-wordify-function ! (ediff-get-diff-posn 'A 'beg n) ! (ediff-get-diff-posn 'A 'end n) ! ediff-A-buffer ! ediff-tmp-buffer) ! (emerge-eval-in-buffer ! ediff-tmp-buffer ! (setq file-A (ediff-make-temp-file ".fine-diffs-A" file-A))) ! ! (funcall ediff-wordify-function ! (ediff-get-diff-posn 'B 'beg n) ! (ediff-get-diff-posn 'B 'end n) ! ediff-B-buffer ! ediff-tmp-buffer) ! (emerge-eval-in-buffer ! ediff-tmp-buffer ! (setq file-B (ediff-make-temp-file ".fine-diffs-B" file-B))) ! ! ;; save temp file names. ! (setq ediff-temp-file-A file-A ! ediff-temp-file-B file-B) ! ! ;; set the new vector of fine diffs, if none exists ! (ediff-set-fine-diff-vector ! n ! (ediff-setup-diff-regions file-A file-B 'use-old-diff-buf n ! ediff-fine-diff-program ! ediff-fine-diff-options ! ediff-fine-diff-ok-lines-regexp)) ! (if (eq (length (ediff-get-fine-diff-vector n)) 0) ! (message "No differences found in region %d, except for white space and line breaks." ! (1+ n)))) ! ) ;; end cond ! (ediff-set-fine-diff-properties n) ! )) (defun ediff-set-fine-diff-properties (n &optional default) ! (let ((fine-diff-vector (ediff-get-fine-diff-vector n)) ! (face-A (if default 'default (face-name ediff-fine-diff-face-A))) ! (face-B (if default 'default (face-name ediff-fine-diff-face-B))) ! (priority-A (if default ! 0 ! (1+ (ediff-overlay-get ediff-current-diff-overlay-A ! 'priority)))) ! (priority-B (if default ! 0 ! (1+ (ediff-overlay-get ediff-current-diff-overlay-B ! 'priority))))) ! (mapcar ! (function (lambda (vec) ! (ediff-overlay-put ! (ediff-get-diff-overlay-from-vector vec 'A) ! 'face face-A) ! (ediff-overlay-put ! (ediff-get-diff-overlay-from-vector vec 'A) ! 'priority priority-A) ! ! (ediff-overlay-put ! (ediff-get-diff-overlay-from-vector vec 'B) ! 'face face-B) ! (ediff-overlay-put ! (ediff-get-diff-overlay-from-vector vec 'B) ! 'priority priority-B) ! )) ! fine-diff-vector) ! )) (defun ediff-convert-diffs-to-overlays-refine (A-buffer B-buffer --- 4246,4345 ---- (error "No differences found.")) ! (or (< n 0) ! (>= n ediff-number-of-differences) ! ;; n is within the range ! (let ((file-A ediff-temp-file-A) (file-B ediff-temp-file-B)) ! (cond ((and (eq flag 'noforce) (ediff-get-fine-diff-vector n)) ! nil) ! ((eq flag 'skip) ! (or (ediff-get-fine-diff-vector n) ! (eq ediff-auto-refine 'off) ! (message "Region %d is larger than auto-refine limit. Hit %S to force-refine." ! (1+ n) ! (substitute-command-keys ! "\\[ediff-make-fine-diffs]") ! ))) ! (t ! ;; delete old fine diffs ! (ediff-clear-diff-vector (ediff-get-fine-diff-vector n)) ! ;; recompute fine diffs ! (setq ediff-tmp-buffer (get-buffer-create "*ediff-tmp*")) ! ! (ediff-wordify ! (ediff-get-diff-posn 'A 'beg n) ! (ediff-get-diff-posn 'A 'end n) ! ediff-A-buffer ! ediff-tmp-buffer) ! (ediff-eval-in-buffer ! ediff-tmp-buffer ! (setq file-A (ediff-make-temp-file ".fine-diffs-A" file-A))) ! ! (ediff-wordify ! (ediff-get-diff-posn 'B 'beg n) ! (ediff-get-diff-posn 'B 'end n) ! ediff-B-buffer ! ediff-tmp-buffer) ! (ediff-eval-in-buffer ! ediff-tmp-buffer ! (setq file-B (ediff-make-temp-file ".fine-diffs-B" file-B))) ! ! ;; save temp file names. ! (setq ediff-temp-file-A file-A ! ediff-temp-file-B file-B) ! ! ;; set the new vector of fine diffs, if none exists ! (ediff-set-fine-diff-vector ! n ! (ediff-setup-diff-regions file-A file-B 'use-old-diff-buf n ! ediff-fine-diff-program ! ediff-fine-diff-options ! ediff-fine-diff-ok-lines-regexp)) ! (if (eq (length (ediff-get-fine-diff-vector n)) 0) ! (progn ! (message "No diffs found in region %d, except for white space and line breaks." ! (1+ n)) ! (ediff-mark-diff-as-space-only n t)) ! (ediff-mark-diff-as-space-only n nil))) ! ) ;; end cond ! (ediff-set-fine-diff-properties n) ! ))) (defun ediff-set-fine-diff-properties (n &optional default) ! (or (not window-system) ! (< n 0) ! (>= n ediff-number-of-differences) ! ;; in a window system, set faces and priorities of fine overlays ! (let ((fine-diff-vector (ediff-get-fine-diff-vector n)) ! (face-A (if default 'default (face-name ediff-fine-diff-face-A))) ! (face-B (if default 'default (face-name ediff-fine-diff-face-B))) ! (priority-A (if default ! 0 ! (1+ (ediff-overlay-get ediff-current-diff-overlay-A ! 'priority)))) ! (priority-B (if default ! 0 ! (1+ (ediff-overlay-get ediff-current-diff-overlay-B ! 'priority))))) ! (mapcar ! (function (lambda (vec) ! (ediff-overlay-put ! (ediff-get-diff-overlay-from-vector vec 'A) ! 'face face-A) ! (ediff-overlay-put ! (ediff-get-diff-overlay-from-vector vec 'A) ! 'priority priority-A) ! ! (ediff-overlay-put ! (ediff-get-diff-overlay-from-vector vec 'B) ! 'face face-B) ! (ediff-overlay-put ! (ediff-get-diff-overlay-from-vector vec 'B) ! 'priority priority-B) ! )) ! fine-diff-vector) ! ))) (defun ediff-convert-diffs-to-overlays-refine (A-buffer B-buffer *************** *** 3753,3758 **** a-overlay b-overlay) ! (emerge-eval-in-buffer A-buffer (goto-char reg-A-start)) ! (emerge-eval-in-buffer B-buffer (goto-char reg-B-start)) (while diff-list --- 4352,4357 ---- a-overlay b-overlay) ! (ediff-eval-in-buffer A-buffer (goto-char reg-A-start)) ! (ediff-eval-in-buffer B-buffer (goto-char reg-B-start)) (while diff-list *************** *** 3764,3768 **** b-end (aref list-element 3)) ! ;; place overlays at the appropriate places in the buffers (setq a-overlay (ediff-make-overlay (ediff-goto-word (1+ a-begin) A-buffer) --- 4363,4367 ---- b-end (aref list-element 3)) ! ;; put overlays at appropriate places in buffers (setq a-overlay (ediff-make-overlay (ediff-goto-word (1+ a-begin) A-buffer) *************** *** 3786,3798 **** ;; goto word #n starting at current position in buffer `buf' ;; For ediff, a word is either a string of a-z,A-Z, incl `-' and `_'; ! ;; or a string of other non-blanks. A blank is a \n\t\j ;; If `flag' is non-nil, goto the end of the n-th word. (defun ediff-goto-word (n buf &optional flag) ! (emerge-eval-in-buffer buf (skip-chars-forward ediff-whitespace) (while (> n 1) ! (or (> (skip-chars-forward ediff-word-1) 0) ! (> (skip-chars-forward ediff-word-2) 0)) (skip-chars-forward ediff-whitespace) (setq n (1- n))) --- 4385,4396 ---- ;; goto word #n starting at current position in buffer `buf' ;; For ediff, a word is either a string of a-z,A-Z, incl `-' and `_'; ! ;; or a string of other non-blanks. A blank is a \n\t\C-j ;; If `flag' is non-nil, goto the end of the n-th word. (defun ediff-goto-word (n buf &optional flag) ! (ediff-eval-in-buffer buf (skip-chars-forward ediff-whitespace) (while (> n 1) ! (funcall ediff-forward-word-function) (skip-chars-forward ediff-whitespace) (setq n (1- n))) *************** *** 3799,3804 **** ;(if flag (if (and flag (> n 0)) ! (or (> (skip-chars-forward ediff-word-1) 0) ! (> (skip-chars-forward ediff-word-2) 0))) (point))) --- 4397,4401 ---- ;(if flag (if (and flag (> n 0)) ! (funcall ediff-forward-word-function)) (point))) *************** *** 3826,3830 **** (setq list2 (cdr list2))) list1))) - ;(defun ediff-debug () --- 4423,4426 ---- diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/emacsbug.el emacs-19.26/lisp/emacsbug.el *** emacs-19.25/lisp/emacsbug.el Fri May 20 04:24:48 1994 --- emacs-19.26/lisp/emacsbug.el Wed Jul 6 17:51:56 1994 *************** *** 40,43 **** --- 40,46 ---- "Address of site maintaining mailing list for GNU Emacs bugs.") + (defvar report-emacs-bug-orig-text nil + "The automatically-created initial text of bug report.") + ;;;###autoload (defun report-emacs-bug (topic) *************** *** 49,53 **** (re-search-forward (concat "^" (regexp-quote mail-header-separator) "\n")) (insert "In " (emacs-version) "\n\n") ! (message (substitute-command-keys "Type \\[mail-send] to send bug report."))) (provide 'emacsbug) --- 52,74 ---- (re-search-forward (concat "^" (regexp-quote mail-header-separator) "\n")) (insert "In " (emacs-version) "\n\n") ! (message (substitute-command-keys "Type \\[mail-send-and-exit] to send bug report.")) ! ;; Make it less likely people will send empty messages. ! (make-local-variable 'mail-send-hook) ! (add-hook 'mail-send-hook 'report-emacs-bug-hook) ! (save-excursion ! (goto-char (point-max)) ! (skip-chars-backward " \t\n") ! (make-local-variable 'report-emacs-bug-orig-text) ! (setq report-emacs-bug-orig-text (buffer-substring (point-min) (point))))) ! ! (defun report-emacs-bug-hook () ! (save-excursion ! (goto-char (point-max)) ! (skip-chars-backward " \t\n") ! (if (and (= (- (point) (point-min)) ! (length report-emacs-bug-orig-text)) ! (equal (buffer-substring (point-min) (point)) ! report-emacs-bug-orig-text)) ! (error "No text entered in bug report")))) (provide 'emacsbug) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/env.el emacs-19.26/lisp/env.el *** emacs-19.25/lisp/env.el Fri Jun 11 17:32:53 1993 --- emacs-19.26/lisp/env.el Wed Jun 22 00:40:08 1994 *************** *** 1,5 **** ;;; env.el --- functions to manipulate environment variables. ! ;;; Copyright Free Software Foundation 1991 ;; Maintainer: FSF --- 1,5 ---- ;;; env.el --- functions to manipulate environment variables. ! ;;; Copyright 1991, 1994 Free Software Foundation, Inc. ;; Maintainer: FSF *************** *** 32,41 **** ;;;###autoload ! (defun setenv (variable &optional value) "Set the value of the environment variable named VARIABLE to VALUE. VARIABLE should be a string. VALUE is optional; if not provided or is `nil', the environment variable VARIABLE will be removed. This function works by modifying `process-environment'." ! (interactive "sSet environment variable: \nsSet %s to value: ") (if (string-match "=" variable) (error "Environment variable name `%s' contains `='" variable) --- 32,48 ---- ;;;###autoload ! (defun setenv (variable &optional value unset) "Set the value of the environment variable named VARIABLE to VALUE. VARIABLE should be a string. VALUE is optional; if not provided or is `nil', the environment variable VARIABLE will be removed. + + Interactively, a prefix argument means to unset the variable. This function works by modifying `process-environment'." ! (interactive ! (if current-prefix-arg ! (list (read-string "Clear environment variable: ") nil t) ! (let ((var (read-string "Set environment variable: "))) ! (list var (read-string (format "Set %s to value: " var)))))) ! (if unset (setq value nil)) (if (string-match "=" variable) (error "Environment variable name `%s' contains `='" variable) *************** *** 42,56 **** (let ((pattern (concat "\\`" (regexp-quote (concat variable "=")))) (case-fold-search nil) ! (scan process-environment)) (while scan ! (cond ! ((string-match pattern (car scan)) ! (if (eq nil value) ! (setq process-environment (delq (car scan) process-environment)) ! (setcar scan (concat variable "=" value))) ! (setq scan nil)) ! ((null (setq scan (cdr scan))) ! (setq process-environment ! (cons (concat variable "=" value) process-environment)))))))) (provide 'env) --- 49,67 ---- (let ((pattern (concat "\\`" (regexp-quote (concat variable "=")))) (case-fold-search nil) ! (scan process-environment) ! found) (while scan ! (cond ((string-match pattern (car scan)) ! (setq found t) ! (if (eq nil value) ! (setq process-environment (delq (car scan) process-environment)) ! (setcar scan (concat variable "=" value))) ! (setq scan nil))) ! (setq scan (cdr scan))) ! (or found ! (if value ! (setq process-environment ! (cons (concat variable "=" value) ! process-environment))))))) (provide 'env) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/etags.el emacs-19.26/lisp/etags.el *** emacs-19.25/lisp/etags.el Mon May 23 01:06:47 1994 --- emacs-19.26/lisp/etags.el Wed Aug 24 21:50:17 1994 *************** *** 50,66 **** to the current list (as opposed to starting a new list).") (defvar tags-table-list-pointer nil ! "Pointer into `tags-table-list' where the current state of searching is. ! Might instead point into a list of included tags tables. Use `visit-tags-table-buffer' to cycle through tags tables in this list.") (defvar tags-table-list-started-at nil ! "Pointer into `tags-table-list', where the current search started.") ! ! (defvar tags-table-parent-pointer-list nil ! "Saved state of the tags table that included this one. ! Each element is (LIST POINTER STARTED-AT), giving the values of ! `tags-table-list', `tags-table-list-pointer' and ! `tags-table-list-started-at' from before we moved into the current table.") (defvar tags-table-set-list nil --- 50,73 ---- to the current list (as opposed to starting a new list).") + (defvar tags-table-computed-list nil + "List of tags tables to search, computed from `tags-table-list'. + This includes tables implicitly included by other tables. The list is not + always complete: the included tables of a table are not known until that + table is read into core. An element that is `t' is a placeholder + indicating that the preceding element is a table that has not been read + into core and might contain included tables to search. + See `tags-table-check-computed-list'.") + + (defvar tags-table-computed-list-for nil + "Value of `tags-table-list' that `tags-table-computed-list' corresponds to. + If `tags-table-list' changes, `tags-table-computed-list' is thrown away and + recomputed; see `tags-table-check-computed-list'.") + (defvar tags-table-list-pointer nil ! "Pointer into `tags-table-computed-list' for the current state of searching. Use `visit-tags-table-buffer' to cycle through tags tables in this list.") (defvar tags-table-list-started-at nil ! "Pointer into `tags-table-computed-list', where the current search started.") (defvar tags-table-set-list nil *************** *** 204,259 **** (setq-default tags-file-name file))) ! ;; Move tags-table-list-pointer along and set tags-file-name. ! ;; If NO-INCLUDES is non-nil, ignore included tags tables. ! ;; Returns nil when out of tables. ! (defun tags-next-table (&optional no-includes) ! ;; Do we have any included tables? ! (if (and (not no-includes) ! (visit-tags-table-buffer 'same) ! (tags-included-tables)) ! ! ;; Move into the included tags tables. ! (setq tags-table-parent-pointer-list ! ;; Save the current state of what table we are in. ! (cons (list tags-table-list ! tags-table-list-pointer ! tags-table-list-started-at) ! tags-table-parent-pointer-list) ! ;; Start the pointer in the list of included tables. ! tags-table-list tags-included-tables ! tags-table-list-pointer tags-included-tables ! tags-table-list-started-at tags-included-tables) ! ! ;; No included tables. Go to the next table in the list. ! (setq tags-table-list-pointer ! (cdr tags-table-list-pointer)) ! (or tags-table-list-pointer ! ;; Wrap around. ! (setq tags-table-list-pointer tags-table-list)) ! ! (if (eq tags-table-list-pointer tags-table-list-started-at) ! ;; We have come full circle. No more tables. ! (if tags-table-parent-pointer-list ! ;; Pop back to the tags table which includes this one. ! (progn ! ;; Restore the state variables. ! (setq tags-table-list ! (nth 0 (car tags-table-parent-pointer-list)) ! tags-file-name (car tags-table-list) ! tags-table-list-pointer ! (nth 1 (car tags-table-parent-pointer-list)) ! tags-table-list-started-at ! (nth 2 (car tags-table-parent-pointer-list)) ! tags-table-parent-pointer-list ! (cdr tags-table-parent-pointer-list)) ! ;; Recurse to skip to the next table after the parent. ! (tags-next-table t)) ! ;; All out of tags tables. ! (setq tags-table-list-pointer nil)))) ! ! (and tags-table-list-pointer ! ;; Set tags-file-name to the fully-expanded name. ! (setq tags-file-name ! (tags-expand-table-name (car tags-table-list-pointer))))) ;; Expand tags table name FILE into a complete file name. --- 211,286 ---- (setq-default tags-file-name file))) ! (defun tags-table-check-computed-list () ! "Compute `tags-table-computed-list' from `tags-table-list' if necessary." ! (let ((expanded-list (mapcar 'tags-expand-table-name tags-table-list))) ! (or (equal tags-table-computed-list-for expanded-list) ! ;; The list (or default-directory) has changed since last computed. ! (let* ((compute-for (mapcar 'copy-sequence expanded-list)) ! (tables (copy-sequence compute-for)) ;Mutated in the loop. ! (computed nil) ! table-buffer) ! ! (while tables ! (setq computed (cons (car tables) computed) ! table-buffer (get-file-buffer (car tables))) ! (if table-buffer ! (save-excursion ! (set-buffer table-buffer) ! (if (tags-included-tables) ! ;; Insert the included tables into the list we ! ;; are processing. ! (setcdr tables (append (tags-included-tables) ! (cdr tables))))) ! ;; This table is not in core yet. Insert a placeholder ! ;; saying we must read it into core to check for included ! ;; tables before searching the next table in the list. ! (setq computed (cons t computed))) ! (setq tables (cdr tables))) ! ! ;; Record the tags-table-list value (and the context of the ! ;; current directory) we computed from. ! (setq tags-table-computed-list-for compute-for ! tags-table-computed-list (nreverse computed)))))) ! ! ;; Extend `tags-table-computed-list' to remove the first `t' placeholder. ! ;; An element of the list that is `t' is a placeholder indicating that the ! ;; preceding element is a table that has not been read into core and might ! ;; contain included tables to search. On return, the first placeholder ! ;; element will be gone and the element before it read into core and its ! ;; included tables inserted into the list. ! (defun tags-table-extend-computed-list () ! (let ((list tags-table-computed-list)) ! (while (not (eq (nth 1 list) t)) ! (setq list (cdr list))) ! (save-excursion ! (if (tags-verify-table (car list)) ! ;; We are now in the buffer visiting (car LIST). Extract its ! ;; list of included tables and insert it into the computed list. ! (let ((tables (tags-included-tables)) ! (computed nil) ! table-buffer) ! (while tables ! (setq computed (cons (car tables) computed) ! table-buffer (get-file-buffer (car tables))) ! (if table-buffer ! (save-excursion ! (set-buffer table-buffer) ! (if (tags-included-tables) ! ;; Insert the included tables into the list we ! ;; are processing. ! (setcdr tables (append (tags-included-tables) ! tables)))) ! ;; This table is not in core yet. Insert a placeholder ! ;; saying we must read it into core to check for included ! ;; tables before searching the next table in the list. ! (setq computed (cons t computed))) ! (setq tables (cdr tables))) ! (setq computed (nreverse computed)) ! ;; COMPUTED now contains the list of included tables (and ! ;; tables included by them, etc.). Now splice this into the ! ;; current list. ! (setcdr list (nconc computed (cdr (cdr list))))) ! ;; It was not a valid table, so just remove the following placeholder. ! (setcdr list (cdr (cdr list))))))) ;; Expand tags table name FILE into a complete file name. *************** *** 264,415 **** file)) ! ;; Search for FILE in LIST (default: tags-table-list); also search ! ;; tables that are already in core for FILE being included by them. Return t ! ;; if we find it, nil if not. Comparison is done after tags-expand-table-name ! ;; on both sides. If MOVE-TO is non-nil, update tags-table-list and the list ! ;; pointers to point to the table found. In recursive calls, MOVE-TO is a list ! ;; value for tags-table-parent-pointer-list describing the position of the ! ;; caller's search. ! (defun tags-find-table-in-list (file move-to &optional list) ! (or list ! (setq list tags-table-list)) (setq file (tags-expand-table-name file)) ! (let (;; Set up the MOVE-TO argument used for the recursive calls we will do ! ;; for included tables. This is a list value for ! ;; tags-table-parent-pointer-list describing the included tables we are ! ;; descending; we cons our position onto the list from our recursive ! ;; caller (which is searching a list that contains the table whose ! ;; included tables we are searching). The atom `in-progress' is a ! ;; placeholder; when a recursive call locates FILE, we replace ! ;; 'in-progress with the tail of LIST whose car contained FILE. ! (recursing-move-to (if move-to ! (cons (list list 'in-progress 'in-progress) ! (if (eq move-to t) nil move-to)))) ! this-file) ! (while (and (consp list) ; We set LIST to t when we locate FILE. ! (not (string= file ! (setq this-file ! (tags-expand-table-name (car list)))))) ! (if (get-file-buffer this-file) ! ;; This table is already in core. Visit it and recurse to check ! ;; its included tables. ! (save-excursion ! (let ((tags-file-name this-file) ! found) ! (visit-tags-table-buffer 'same) ! (and (tags-included-tables) ! ;; We have some included tables; check them. ! (tags-find-table-in-list file recursing-move-to ! tags-included-tables) ! (progn ! ;; We found FILE in the included table. ! (if move-to ! (progn ! ;; The recursive call has already frobbed the list ! ;; pointers. It set tags-table-parent-pointer-list ! ;; to a list including RECURSING-MOVE-TO. Now we ! ;; must mutate that cons so its list pointers show ! ;; the position where we found this included table. ! (setcar (cdr (car recursing-move-to)) list) ! (setcar (cdr (cdr (car recursing-move-to))) list) ! ;; Don't do further list frobnication below. ! (setq move-to nil))) ! (setq list t)))))) ! (if (consp list) ! (setq list (cdr list)))) ! (and list move-to ! (progn ! ;; We have located FILE in the list. ! ;; Now frobnicate the list pointers to point to it. ! (setq tags-table-list-started-at list ! tags-table-list-pointer list) ! (if (consp move-to) ! ;; We are in a recursive call. MOVE-TO is the value for ! ;; tags-table-parent-pointer-list that describes the tables ! ;; descended by the caller (and its callers, recursively). ! (setq tags-table-parent-pointer-list move-to))))) list) ! ;; Local var in visit-tags-table-buffer ! ;; which is set by tags-table-including. ! (defvar visit-tags-table-buffer-cont) ! ! ;; Subroutine of visit-tags-table-buffer. Frobs its local vars. ! ;; Search TABLES for one that has tags for THIS-FILE. Recurses on ! ;; included tables. Returns the tail of TABLES (or of an inner ! ;; included list) whose car is a table listing THIS-FILE. If ! ;; CORE-ONLY is non-nil, check only tags tables that are already in ! ;; buffers--don't visit any new files. ! (defun tags-table-including (this-file tables core-only &optional recursing) ! (let ((starting-tables tables) (found nil)) ! ;; Loop over TABLES, looking for one containing tags for THIS-FILE. (while (and (not found) tables) ! (let ((tags-file-name (tags-expand-table-name (car tables)))) ! (if (or (get-file-buffer tags-file-name) ! (and (not core-only) ! (file-exists-p tags-file-name))) ! (progn ! ;; Select the tags table buffer and get the file list up to date. ! (visit-tags-table-buffer 'same) ! (or tags-table-files ! (setq tags-table-files ! (funcall tags-table-files-function))) ! ! (cond ((member this-file tags-table-files) ! ;; Found it. ! (setq found tables)) ! ! ((tags-included-tables) ! ;; This table has included tables. Check them. ! (let ((old tags-table-parent-pointer-list)) ! (unwind-protect ! (progn ! (or recursing ! ;; At top level (not in an included tags ! ;; table), set the list to nil so we can ! ;; collect just the elts from this run. ! (setq tags-table-parent-pointer-list nil)) ! (setq found ! ;; Recurse on the list of included tables. ! (tags-table-including this-file ! tags-included-tables ! core-only ! t)) ! (if found ! ;; One of them lists THIS-FILE. ! ;; Set the table list state variables to move ! ;; us inside the list of included tables. ! (setq tags-table-parent-pointer-list ! (cons ! (list tags-table-list ! tags-table-list-pointer ! tags-table-list-started-at) ! tags-table-parent-pointer-list) ! tags-table-list starting-tables ! tags-table-list-pointer found ! tags-table-list-started-at found ! ;; Set a local variable of ! ;; our caller, visit-tags-table-buffer. ! ;; Set it so we won't frob lists later. ! visit-tags-table-buffer-cont ! 'included))) ! (or recursing ! ;; tags-table-parent-pointer-list now describes ! ;; the path of included tables taken by recursive ! ;; invocations of this function. The recursive ! ;; calls have consed onto the front of the list, ! ;; so it is now outermost first. We want it ! ;; innermost first, so reverse it. Then append ! ;; the old list (from before we were called the ! ;; outermost time), to get the complete current ! ;; state of included tables. ! (setq tags-table-parent-pointer-list ! (nconc (nreverse ! tags-table-parent-pointer-list) ! old)))))))))) (setq tables (cdr tables))) ! found)) (defun visit-tags-table-buffer (&optional cont) --- 291,398 ---- file)) ! ;; Like member, but comparison is done after tags-expand-table-name on both ! ;; sides and elements of LIST that are t are skipped. ! (defun tags-table-list-member (file list) (setq file (tags-expand-table-name file)) ! (while (and list ! (or (eq (car list) t) ! (not (string= file (tags-expand-table-name (car list)))))) ! (setq list (cdr list))) list) ! (defun tags-verify-table (file) ! "Read FILE into a buffer and verify that it is a valid tags table. ! Sets the current buffer to one visiting FILE (if it exists). ! Returns non-nil iff it is a valid table." ! (if (get-file-buffer file) ! ;; The file is already in a buffer. Check for the visited file ! ;; having changed since we last used it. ! (let (win) ! (set-buffer (get-file-buffer file)) ! (setq win (or verify-tags-table-function (initialize-new-tags-table))) ! (if (or (verify-visited-file-modtime (current-buffer)) ! (not (yes-or-no-p ! (format "Tags file %s has changed, read new contents? " ! file)))) ! (and win (funcall verify-tags-table-function)) ! (revert-buffer t t) ! (initialize-new-tags-table))) ! (and (file-exists-p file) ! (progn ! (set-buffer (find-file-noselect file)) ! (or (string= file buffer-file-name) ! ;; find-file-noselect has changed the file name. ! ;; Propagate the change to tags-file-name and tags-table-list. ! (let ((tail (member file tags-table-list))) ! (if tail ! (setcar tail buffer-file-name)) ! (if (eq file tags-file-name) ! (setq tags-file-name buffer-file-name)))) ! (initialize-new-tags-table))))) ! ! ;; Subroutine of visit-tags-table-buffer. Search the current tags tables ! ;; for one that has tags for THIS-FILE (or that includes a table that ! ;; does). Return the name of the first table table listing THIS-FILE; if ! ;; the table is one included by another table, it is the master table that ! ;; we return. If CORE-ONLY is non-nil, check only tags tables that are ! ;; already in buffers--don't visit any new files. ! (defun tags-table-including (this-file core-only) ! (let ((tables tags-table-computed-list) (found nil)) ! ;; Loop over the list, looking for a table containing tags for THIS-FILE. (while (and (not found) tables) ! ! (if core-only ! ;; Skip tables not in core. ! (while (eq (nth 1 tables) t) ! (setq tables (cdr (cdr tables)))) ! (if (eq (nth 1 tables) t) ! ;; This table has not been read into core yet. Read it in now. ! (tags-table-extend-computed-list))) ! ! (if tables ! ;; Select the tags table buffer and get the file list up to date. ! (let ((tags-file-name (car tables))) ! (visit-tags-table-buffer 'same) ! (if (member this-file (tags-table-files)) ! ;; Found it. ! (setq found tables)))) (setq tables (cdr tables))) ! (if found ! ;; Now determine if the table we found was one included by another ! ;; table, not explicitly listed. ! (let ((could-be nil) ! (elt tags-table-computed-list)) ! (while (not (eq elt (cdr found))) ! (if (tags-table-list-member (car elt) tags-table-list) ! ;; This table appears in the user's list, so it could be ! ;; the one which includes the table we found. ! (setq could-be (cons (car elt) could-be))) ! (setq elt (cdr elt))) ! ;; The last element we found in the computed list before FOUND ! ;; that appears in the user's list will be the table that ! ;; included the one we found. This will be the head of the ! ;; COULD-BE list. ! (car could-be))))) ! ! ;; Subroutine of visit-tags-table-buffer. Move tags-table-list-pointer ! ;; along and set tags-file-name. Returns nil when out of tables. ! (defun tags-next-table () ! ;; If there is a placeholder element next, compute the list to replace it. ! (while (eq (nth 1 tags-table-list-pointer) t) ! (tags-table-extend-computed-list)) ! ! ;; Go to the next table in the list. ! (setq tags-table-list-pointer (cdr tags-table-list-pointer)) ! (or tags-table-list-pointer ! ;; Wrap around. ! (setq tags-table-list-pointer tags-table-computed-list)) ! ! (if (eq tags-table-list-pointer tags-table-list-started-at) ! ;; We have come full circle. No more tables. ! (setq tags-table-list-pointer nil) ! ;; Set tags-file-name to the name from the list. It is already expanded. ! (setq tags-file-name (car tags-table-list-pointer)))) (defun visit-tags-table-buffer (&optional cont) *************** *** 424,539 **** ;; Set tags-file-name to the tags table file we want to visit. ! (let ((visit-tags-table-buffer-cont cont)) ! (cond ((eq visit-tags-table-buffer-cont 'same) ! ;; Use the ambient value of tags-file-name. ! (or tags-file-name ! (error (substitute-command-keys ! (concat "No tags table in use! " ! "Use \\[visit-tags-table] to select one."))))) ! ! ((eq t visit-tags-table-buffer-cont) ! ;; Find the next table. ! (if (tags-next-table) ! ;; Skip over nonexistent files. ! (let (file) ! (while (and (setq file ! (tags-expand-table-name tags-file-name)) ! (not (or (get-file-buffer file) ! (file-exists-p file)))) ! (tags-next-table))))) ! (t ! ;; We are visiting a table anew, so throw away the previous ! ;; context of what included tables we were inside of. ! (while tags-table-parent-pointer-list ! ;; Set the pointer as if we had iterated through all the ! ;; tables in the list. ! (setq tags-table-list-pointer tags-table-list-started-at) ! ;; Fetching the next table will pop the included-table state. ! (tags-next-table)) ! ! ;; Pick a table out of our hat. ! (setq tags-file-name ! (or ! ;; If passed a string, use that. ! (if (stringp visit-tags-table-buffer-cont) ! (prog1 visit-tags-table-buffer-cont ! (setq visit-tags-table-buffer-cont nil))) ! ;; First, try a local variable. ! (cdr (assq 'tags-file-name (buffer-local-variables))) ! ;; Second, try a user-specified function to guess. ! (and default-tags-table-function ! (funcall default-tags-table-function)) ! ;; Third, look for a tags table that contains ! ;; tags for the current buffer's file. ! ;; If one is found, the lists will be frobnicated, ! ;; and VISIT-TAGS-TABLE-BUFFER-CONT ! ;; will be set non-nil so we don't do it below. ! (and buffer-file-name ! (car (or ! ;; First check only tables already in buffers. ! (save-excursion ! (tags-table-including buffer-file-name ! tags-table-list ! t)) ! ;; Since that didn't find any, now do the ! ;; expensive version: reading new files. ! (save-excursion ! (tags-table-including buffer-file-name ! tags-table-list ! nil))))) ! ;; Fourth, use the user variable tags-file-name, if it is ! ;; not already in tags-table-list. ! (and tags-file-name ! (not (tags-find-table-in-list tags-file-name nil)) ! tags-file-name) ! ;; Fifth, use the user variable giving the table list. ! ;; Find the first element of the list that actually exists. ! (let ((list tags-table-list) ! file) ! (while (and list ! (setq file (tags-expand-table-name (car list))) ! (not (get-file-buffer file)) ! (not (file-exists-p file))) ! (setq list (cdr list))) ! (car list)) ! ;; Finally, prompt the user for a file name. ! (expand-file-name ! (read-file-name "Visit tags table: (default TAGS) " ! default-directory ! "TAGS" ! t)))))) ! ! ;; Expand the table name into a full file name. ! (setq tags-file-name (tags-expand-table-name tags-file-name)) ! ! (if (and (eq visit-tags-table-buffer-cont t) ! (null tags-table-list-pointer)) ! ;; All out of tables. ! nil ! ! ;; Verify that tags-file-name is a valid tags table. ! (if (if (get-file-buffer tags-file-name) ! ;; The file is already in a buffer. Check for the visited file ! ;; having changed since we last used it. ! (let (win) ! (set-buffer (get-file-buffer tags-file-name)) ! (setq win (or verify-tags-table-function ! (initialize-new-tags-table))) ! (if (or (verify-visited-file-modtime (current-buffer)) ! (not (yes-or-no-p ! "Tags file has changed, read new contents? "))) ! (and win (funcall verify-tags-table-function)) ! (revert-buffer t t) ! (initialize-new-tags-table))) ! (set-buffer (find-file-noselect tags-file-name)) ! (or (string= tags-file-name buffer-file-name) ! ;; find-file-noselect has changed the file name. ! ;; Propagate the change to tags-file-name and tags-table-list. ! (let ((tail (member tags-file-name tags-table-list))) ! (if tail ! (setcar tail buffer-file-name)) ! (setq tags-file-name buffer-file-name))) ! (initialize-new-tags-table)) ;; We have a valid tags table. --- 407,487 ---- ;; Set tags-file-name to the tags table file we want to visit. ! (cond ((eq cont 'same) ! ;; Use the ambient value of tags-file-name. ! (or tags-file-name ! (error (substitute-command-keys ! (concat "No tags table in use! " ! "Use \\[visit-tags-table] to select one."))))) ! ! ((eq t cont) ! ;; Find the next table. ! (if (tags-next-table) ! ;; Skip over nonexistent files. ! (while (and (not (or (get-file-buffer tags-file-name) ! (file-exists-p tags-file-name))) ! (tags-next-table))))) ! (t ! ;; Pick a table out of our hat. ! (tags-table-check-computed-list) ;Get it up to date, we might use it. ! (setq tags-file-name ! (or ! ;; If passed a string, use that. ! (if (stringp cont) ! (prog1 cont ! (setq cont nil))) ! ;; First, try a local variable. ! (cdr (assq 'tags-file-name (buffer-local-variables))) ! ;; Second, try a user-specified function to guess. ! (and default-tags-table-function ! (funcall default-tags-table-function)) ! ;; Third, look for a tags table that contains tags for the ! ;; current buffer's file. If one is found, the lists will ! ;; be frobnicated, and CONT will be set non-nil so we don't ! ;; do it below. ! (and buffer-file-name ! (or ! ;; First check only tables already in buffers. ! (tags-table-including buffer-file-name t) ! ;; Since that didn't find any, now do the ! ;; expensive version: reading new files. ! (tags-table-including buffer-file-name nil))) ! ;; Fourth, use the user variable tags-file-name, if it is ! ;; not already in the current list. ! (and tags-file-name ! (not (tags-table-list-member tags-file-name ! tags-table-computed-list)) ! tags-file-name) ! ;; Fifth, use the user variable giving the table list. ! ;; Find the first element of the list that actually exists. ! (let ((list tags-table-list) ! file) ! (while (and list ! (setq file (tags-expand-table-name (car list))) ! (not (get-file-buffer file)) ! (not (file-exists-p file))) ! (setq list (cdr list))) ! (car list)) ! ;; Finally, prompt the user for a file name. ! (expand-file-name ! (read-file-name "Visit tags table: (default TAGS) " ! default-directory ! "TAGS" ! t)))))) ! ! ;; Expand the table name into a full file name. ! (setq tags-file-name (tags-expand-table-name tags-file-name)) ! ! (if (and (eq cont t) ! (null tags-table-list-pointer)) ! ;; All out of tables. ! nil ! ! ;; Verify that tags-file-name names a valid tags table. ! ;; Bind another variable with the value of tags-file-name ! ;; before we switch buffers, in case tags-file-name is buffer-local. ! (let ((curbuf (current-buffer)) ! (local-tags-file-name tags-file-name)) ! (if (tags-verify-table local-tags-file-name) ;; We have a valid tags table. *************** *** 543,553 **** (bury-buffer (current-buffer)) ! ;; If this was a new table selection (CONT is nil), make sure ! ;; tags-table-list includes the chosen table, and update the ! ;; list pointer variables. ! (or visit-tags-table-buffer-cont ;; Look in the list for the table we chose. ! ;; This updates the list pointers if it finds the table. ! (or (tags-find-table-in-list tags-file-name t) ;; The table is not in the current set. ;; Try to find it in another previously used set. --- 491,507 ---- (bury-buffer (current-buffer)) ! ;; If this was a new table selection (CONT is nil), make ! ;; sure tags-table-list includes the chosen table, and ! ;; update the list pointer variables. ! (or cont ;; Look in the list for the table we chose. ! (let ((found (tags-table-list-member ! local-tags-file-name ! tags-table-computed-list))) ! (if found ! ;; There it is. Just switch to it. ! (setq tags-table-list-pointer found ! tags-table-list-started-at found) ! ;; The table is not in the current set. ;; Try to find it in another previously used set. *************** *** 554,559 **** (let ((sets tags-table-set-list)) (while (and sets ! (not (tags-find-table-in-list tags-file-name ! t (car sets)))) (setq sets (cdr sets))) (if sets --- 508,514 ---- (let ((sets tags-table-set-list)) (while (and sets ! (not (tags-table-list-member ! local-tags-file-name ! (car sets)))) (setq sets (cdr sets))) (if sets *************** *** 565,570 **** (cons tags-table-list tags-table-set-list))) - ;; The list pointers are already up to date; - ;; we need only set tags-table-list. (setq tags-table-list (car sets))) --- 520,523 ---- *************** *** 577,582 **** "tags tables also? "))))) ;; Add it to the current list. ! (setq tags-table-list (cons tags-file-name tags-table-list)) ;; Make a fresh list, and store the old one. (message "Starting a new list of tags tables") --- 530,536 ---- "tags tables also? "))))) ;; Add it to the current list. ! (setq tags-table-list (cons local-tags-file-name tags-table-list)) + ;; Make a fresh list, and store the old one. (message "Starting a new list of tags tables") *************** *** 586,595 **** (cons tags-table-list tags-table-set-list))) ! (setq tags-table-list (list tags-file-name))) ! ;; Set the tags table list state variables to point ! ;; at the table we want to use first. ! (setq tags-table-list-started-at tags-table-list ! tags-table-list-pointer tags-table-list))))) ;; Return of t says the tags table is valid. --- 540,552 ---- (cons tags-table-list tags-table-set-list))) ! (setq tags-table-list (list local-tags-file-name)))) ! ;; Recompute tags-table-computed-list. ! (tags-table-check-computed-list) ! ;; Set the tags table list state variables to start ! ;; over from tags-table-computed-list. ! (setq tags-table-list-started-at tags-table-computed-list ! tags-table-list-pointer ! tags-table-computed-list))))) ;; Return of t says the tags table is valid. *************** *** 597,605 **** ;; The buffer was not valid. Don't use it again. ! (let ((file tags-file-name)) ! (kill-local-variable 'tags-file-name) ! (if (eq file tags-file-name) ! (setq tags-file-name nil))) ! (error "File %s is not a valid tags table" buffer-file-name))))) (defun file-of-tag () --- 554,562 ---- ;; The buffer was not valid. Don't use it again. ! (set-buffer curbuf) ! (kill-local-variable 'tags-file-name) ! (if (eq local-tags-file-name tags-file-name) ! (setq tags-file-name nil)) ! (error "File %s is not a valid tags table" local-tags-file-name))))) (defun file-of-tag () *************** *** 711,714 **** --- 668,673 ---- (find-tag-tag prompt))))) + (defvar find-tag-history nil) + ;;;###autoload (defun find-tag-noselect (tagname &optional next-p regexp-p) *************** *** 729,732 **** --- 688,692 ---- (interactive (find-tag-interactive "Find tag: ")) + (setq find-tag-history (cons tagname find-tag-history)) ;; Save the current buffer's value of `find-tag-hook' before selecting the ;; tags table buffer. *************** *** 869,872 **** --- 829,833 ---- (funcall (if other-window 'find-tag-other-window 'find-tag) regexp next-p t)) + ;;;###autoload (define-key esc-map [?\C-.] 'find-tag-regexp) ;; Internal tag finding function. *************** *** 1198,1202 **** (defun tag-exact-match-p (tag) ;; The match is really exact if there is an explicit tag name. ! (or (looking-at (concat "[^\177]*\177" (regexp-quote tag) "\001")) ;; We also call it "exact" if it is surrounded by symbol boundaries. ;; This is needed because etags does not always generate explicit names. --- 1159,1166 ---- (defun tag-exact-match-p (tag) ;; The match is really exact if there is an explicit tag name. ! (or (and (eq (char-after (point)) ?\001) ! (eq (char-after (- (point) (length tag) 1)) ?\177)) ! ;; We are not on the explicit tag name, but perhaps it follows. ! (looking-at (concat "[^\177\n]*\177" (regexp-quote tag) "\001")) ;; We also call it "exact" if it is surrounded by symbol boundaries. ;; This is needed because etags does not always generate explicit names. *************** *** 1416,1420 **** (defun select-tags-table () "Select a tags table file from a menu of those you have already used. ! The list of tags tables to select from is stored in `tags-table-file-list'; see the doc of that variable if you want to add names to the list." (interactive) --- 1380,1384 ---- (defun select-tags-table () "Select a tags table file from a menu of those you have already used. ! The list of tags tables to select from is stored in `tags-table-set-list'; see the doc of that variable if you want to add names to the list." (interactive) *************** *** 1535,1539 **** (t (message "Making completion list...") ! (with-output-to-temp-buffer " *Completions*" (display-completion-list (all-completions pattern 'tags-complete-tag nil))) --- 1499,1503 ---- (t (message "Making completion list...") ! (with-output-to-temp-buffer "*Completions*" (display-completion-list (all-completions pattern 'tags-complete-tag nil))) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/faces.el emacs-19.26/lisp/faces.el *** emacs-19.25/lisp/faces.el Thu May 19 00:27:44 1994 --- emacs-19.26/lisp/faces.el Thu Aug 11 03:12:00 1994 *************** *** 231,235 **** (if (eq window-system 'x) (make-face-x-resource-internal face)) ! face))) ;; Fill in a face by default based on X resources, for all existing frames. --- 231,236 ---- (if (eq window-system 'x) (make-face-x-resource-internal face)) ! face)) ! name) ;; Fill in a face by default based on X resources, for all existing frames. *************** *** 270,276 **** ;; "Face.AttributeBackgroundPixmap") ;; (and set-anyway (face-background-pixmap face)))) ! (ulp (or (x-get-resource (concat name ".attributeUnderline") ! "Face.AttributeUnderline") ! (and set-anyway (face-underline-p face)))) ) (if fn --- 271,280 ---- ;; "Face.AttributeBackgroundPixmap") ;; (and set-anyway (face-background-pixmap face)))) ! (ulp (let ((resource (x-get-resource ! (concat name ".attributeUnderline") ! "Face.AttributeUnderline"))) ! (if resource ! (member (downcase resource) '("on" "true")) ! (and set-anyway (face-underline-p face))))) ) (if fn *************** *** 320,324 **** (setq new-face (or (internal-find-face new-face new-frame) (make-face new-face))) ! (set-face-font new-face (face-font old-face frame) new-frame) (set-face-foreground new-face (face-foreground old-face frame) new-frame) (set-face-background new-face (face-background old-face frame) new-frame) --- 324,334 ---- (setq new-face (or (internal-find-face new-face new-frame) (make-face new-face))) ! (condition-case nil ! ;; A face that has a global symbolic font modifier such as `bold' ! ;; might legitimately get an error here. ! ;; Use the frame's default font in that case. ! (set-face-font new-face (face-font old-face frame) new-frame) ! (error ! (set-face-font new-face nil new-frame))) (set-face-foreground new-face (face-foreground old-face frame) new-frame) (set-face-background new-face (face-background old-face frame) new-frame) *************** *** 336,339 **** --- 346,350 ---- (equal (face-background face1 frame) (face-background face2 frame)) (equal (face-font face1 frame) (face-font face2 frame)) + (eq (face-underline-p face1 frame) (face-underline-p face2 frame)) ;; (equal (face-background-pixmap face1 frame) ;; (face-background-pixmap face2 frame)) *************** *** 517,521 **** t) (let ((ofont (face-font face frame)) ! font f2) (if (null frame) (let ((frames (frame-list))) --- 528,532 ---- t) (let ((ofont (face-font face frame)) ! font) (if (null frame) (let ((frames (frame-list))) *************** *** 534,538 **** (face-font 'default frame) (cdr (assq 'font (frame-parameters frame))))) ! (make-face-bold-internal face frame)) (or (not (equal ofont (face-font face))) (and (not noerror) --- 545,549 ---- (face-font 'default frame) (cdr (assq 'font (frame-parameters frame))))) ! (make-face-bold-internal face frame font)) (or (not (equal ofont (face-font face))) (and (not noerror) *************** *** 539,547 **** (error "No bold version of %S" font)))))) ! (defun make-face-bold-internal (face frame) ! (or (and (setq f2 (x-make-font-bold font)) ! (internal-try-face-font face f2 frame)) ! (and (setq f2 (x-make-font-demibold font)) ! (internal-try-face-font face f2 frame)))) (defun make-face-italic (face &optional frame noerror) --- 550,559 ---- (error "No bold version of %S" font)))))) ! (defun make-face-bold-internal (face frame font) ! (let (f2) ! (or (and (setq f2 (x-make-font-bold font)) ! (internal-try-face-font face f2 frame)) ! (and (setq f2 (x-make-font-demibold font)) ! (internal-try-face-font face f2 frame))))) (defun make-face-italic (face &optional frame noerror) *************** *** 554,558 **** t) (let ((ofont (face-font face frame)) ! font f2) (if (null frame) (let ((frames (frame-list))) --- 566,570 ---- t) (let ((ofont (face-font face frame)) ! font) (if (null frame) (let ((frames (frame-list))) *************** *** 571,575 **** (face-font 'default frame) (cdr (assq 'font (frame-parameters frame))))) ! (make-face-italic-internal face frame)) (or (not (equal ofont (face-font face))) (and (not noerror) --- 583,587 ---- (face-font 'default frame) (cdr (assq 'font (frame-parameters frame))))) ! (make-face-italic-internal face frame font)) (or (not (equal ofont (face-font face))) (and (not noerror) *************** *** 576,584 **** (error "No italic version of %S" font)))))) ! (defun make-face-italic-internal (face frame) ! (or (and (setq f2 (x-make-font-italic font)) ! (internal-try-face-font face f2 frame)) ! (and (setq f2 (x-make-font-oblique font)) ! (internal-try-face-font face f2 frame)))) (defun make-face-bold-italic (face &optional frame noerror) --- 588,597 ---- (error "No italic version of %S" font)))))) ! (defun make-face-italic-internal (face frame font) ! (let (f2) ! (or (and (setq f2 (x-make-font-italic font)) ! (internal-try-face-font face f2 frame)) ! (and (setq f2 (x-make-font-oblique font)) ! (internal-try-face-font face f2 frame))))) (defun make-face-bold-italic (face &optional frame noerror) *************** *** 606,610 **** (face-font 'default frame) (cdr (assq 'font (frame-parameters frame))))) ! (make-face-bold-italic-internal face frame)) (or (not (equal ofont (face-font face))) (and (not noerror) --- 619,623 ---- (face-font 'default frame) (cdr (assq 'font (frame-parameters frame))))) ! (make-face-bold-italic-internal face frame font)) (or (not (equal ofont (face-font face))) (and (not noerror) *************** *** 611,615 **** (error "No bold italic version of %S" font)))))) ! (defun make-face-bold-italic-internal (face frame) (let (f2 f3) (or (and (setq f2 (x-make-font-italic font)) --- 624,628 ---- (error "No bold italic version of %S" font)))))) ! (defun make-face-bold-italic-internal (face frame font) (let (f2 f3) (or (and (setq f2 (x-make-font-italic font)) *************** *** 728,732 **** (insert list-faces-sample-text) (insert "\n") ! (put-text-property beg (1- (point)) 'face face))) (goto-char (point-min)))) ;; If the *Faces* buffer appears in a different frame, --- 741,751 ---- (insert list-faces-sample-text) (insert "\n") ! (put-text-property beg (1- (point)) 'face face) ! ;; If the sample text has multiple lines, line up all of them. ! (goto-char beg) ! (forward-line 1) ! (while (not (eobp)) ! (insert " ") ! (forward-line 1)))) (goto-char (point-min)))) ;; If the *Faces* buffer appears in a different frame, *************** *** 769,773 **** (set-face-background 'highlight '("darkseagreen2" "green" t) t) ! (set-face-background 'region '("gray" t) t) (set-face-background 'secondary-selection '("paleturquoise" "green" t) t) (set-face-background 'modeline '(t) t) --- 788,792 ---- (set-face-background 'highlight '("darkseagreen2" "green" t) t) ! (set-face-background 'region '("gray" underline) t) (set-face-background 'secondary-selection '("paleturquoise" "green" t) t) (set-face-background 'modeline '(t) t) *************** *** 803,809 **** (if (cdr (or (assq 'reverse parameters) (assq 'reverse default-frame-alist) ! (cons nil ! (member (x-get-resource "reverseVideo" "ReverseVideo") ! '("on" "true"))))) (let ((params (frame-parameters frame))) (modify-frame-parameters --- 822,830 ---- (if (cdr (or (assq 'reverse parameters) (assq 'reverse default-frame-alist) ! (let ((resource (x-get-resource "reverseVideo" ! "ReverseVideo"))) ! (if resource ! (cons nil (member (downcase resource) ! '("on" "true"))))))) (let ((params (frame-parameters frame))) (modify-frame-parameters *************** *** 812,817 **** (cons 'background-color (cdr (assq 'foreground-color params))) (cons 'mouse-color (cdr (assq 'background-color params))) ! (cons 'cursor-color (cdr (assq 'background-color params))) ! (cons 'border-color (cdr (assq 'background-color params))))))) ;; Copy the vectors that represent the faces. --- 833,840 ---- (cons 'background-color (cdr (assq 'foreground-color params))) (cons 'mouse-color (cdr (assq 'background-color params))) ! (cons 'border-color (cdr (assq 'background-color params))))) ! (modify-frame-parameters ! frame ! (list (cons 'cursor-color (cdr (assq 'background-color params))))))) ;; Copy the vectors that represent the faces. *************** *** 908,914 **** (condition-case nil (progn ! (if (eq (car colors) t) ! (invert-face face frame) ! (funcall function face (car colors) frame)) (setq done t)) (error nil)) --- 931,940 ---- (condition-case nil (progn ! (cond ((eq (car colors) t) ! (invert-face face frame)) ! ((eq (car colors) 'underline) ! (set-face-underline-p face t frame)) ! (t ! (funcall function face (car colors) frame))) (setq done t)) (error nil)) *************** *** 915,921 **** ;; If this is the last color, let the error get out if it fails. ;; If it succeeds, we will exit anyway after this iteration. ! (if (eq (car colors) t) ! (invert-face face frame) ! (funcall function face (car colors) frame)))) (setq colors (cdr colors))))))) --- 941,950 ---- ;; If this is the last color, let the error get out if it fails. ;; If it succeeds, we will exit anyway after this iteration. ! (cond ((eq (car colors) t) ! (invert-face face frame)) ! ((eq (car colors) 'underline) ! (set-face-underline-p face t frame)) ! (t ! (funcall function face (car colors) frame))))) (setq colors (cdr colors))))))) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/files.el emacs-19.26/lisp/files.el *** emacs-19.25/lisp/files.el Sat May 28 08:32:24 1994 --- emacs-19.26/lisp/files.el Sun Aug 28 03:37:49 1994 *************** *** 30,34 **** (defconst delete-auto-save-files t ! "*Non-nil means delete a buffer's auto-save file when the buffer is saved.") (defconst directory-abbrev-alist --- 30,34 ---- (defconst delete-auto-save-files t ! "*Non-nil means delete auto-save file when a buffer is saved or killed.") (defconst directory-abbrev-alist *************** *** 142,148 **** "*When cleaning directory, number of versions to keep.") ! (defvar trim-versions-without-asking nil ! "*If t, deletes excess backup versions silently. ! If nil, asks confirmation. Any other value prevents any trimming.") (defvar kept-old-versions 2 --- 142,148 ---- "*When cleaning directory, number of versions to keep.") ! (defvar delete-old-versions nil ! "*If t, delete excess backup versions silently. ! If nil, ask confirmation. Any other value prevents any trimming.") (defvar kept-old-versions 2 *************** *** 279,285 **** (defun cd-absolute (dir) "Change current directory to given absolute file name DIR." ! (setq dir (abbreviate-file-name (expand-file-name dir))) (if (not (eq system-type 'vax-vms)) (setq dir (file-name-as-directory dir))) (if (not (file-directory-p dir)) (error "%s is not a directory" dir) --- 279,287 ---- (defun cd-absolute (dir) "Change current directory to given absolute file name DIR." ! ;; Put the name into directory syntax now, ! ;; because otherwise expand-file-name may give some bad results. (if (not (eq system-type 'vax-vms)) (setq dir (file-name-as-directory dir))) + (setq dir (abbreviate-file-name (expand-file-name dir))) (if (not (file-directory-p dir)) (error "%s is not a directory" dir) *************** *** 330,338 **** nil))) ! (defun file-truename (filename) "Return the truename of FILENAME, which should be absolute. The truename of a file name is found by chasing symbolic links both at the level of the file and at the level of the directories ! containing it, until no links are left at any level." (if (or (string= filename "~") (and (string= (substring filename 0 1) "~") --- 332,347 ---- nil))) ! (defun file-truename (filename &optional counter prev-dirs) "Return the truename of FILENAME, which should be absolute. The truename of a file name is found by chasing symbolic links both at the level of the file and at the level of the directories ! containing it, until no links are left at any level. ! ! The arguments COUNTER and PREV-DIRS are used only in recursive calls. ! Do not specify them in other calls." ! ;; COUNTER can be a cons cell whose car is the count of how many more links ! ;; to chase before getting an error. ! ;; PREV-DIRS can be a cons cell whose car is an alist ! ;; of truenames we've just recently computed. (if (or (string= filename "~") (and (string= (substring filename 0 1) "~") *************** *** 342,376 **** (if (string= filename "") (setq filename "/")))) ! (let ((handler (find-file-name-handler filename 'file-truename))) ! ;; For file name that has a special handler, call handler. ! ;; This is so that ange-ftp can save time by doing a no-op. ! (if handler ! (funcall handler 'file-truename filename) ! (let ((dir (file-name-directory filename)) ! target dirfile) ! ;; Get the truename of the directory. ! (setq dirfile (directory-file-name dir)) ! ;; If these are equal, we have the (or a) root directory. ! (or (string= dir dirfile) ! (setq dir (file-name-as-directory (file-truename dirfile)))) ! (if (equal ".." (file-name-nondirectory filename)) ! (directory-file-name (file-name-directory (directory-file-name dir))) ! (if (equal "." (file-name-nondirectory filename)) ! (directory-file-name dir) ! ;; Put it back on the file name. ! (setq filename (concat dir (file-name-nondirectory filename))) ! ;; Is the file name the name of a link? ! (setq target (file-symlink-p filename)) ! (if target ! ;; Yes => chase that link, then start all over ! ;; since the link may point to a directory name that uses links. ! ;; We can't safely use expand-file-name here ! ;; since target might look like foo/../bar where foo ! ;; is itself a link. Instead, we handle . and .. above. ! (if (file-name-absolute-p target) ! (file-truename target) ! (file-truename (concat dir target))) ! ;; No, we are done! ! filename))))))) (defun file-chase-links (filename) --- 351,415 ---- (if (string= filename "") (setq filename "/")))) ! (or counter (setq counter (list 100))) ! (let (done ! ;; For speed, remove the ange-ftp completion handler from the list. ! ;; We know it's not needed here. ! ;; For even more speed, do this only on the outermost call. ! (file-name-handler-alist ! (if prev-dirs file-name-handler-alist ! (let ((tem (copy-sequence file-name-handler-alist))) ! (delq (rassq 'ange-ftp-completion-hook-function tem) tem))))) ! (or prev-dirs (setq prev-dirs (list nil))) ! ;; If this file directly leads to a link, process that iteratively ! ;; so that we don't use lots of stack. ! (while (not done) ! (setcar counter (1- (car counter))) ! (if (< (car counter) 0) ! (error "Apparent cycle of symbolic links for %s" filename)) ! (let ((handler (find-file-name-handler filename 'file-truename))) ! ;; For file name that has a special handler, call handler. ! ;; This is so that ange-ftp can save time by doing a no-op. ! (if handler ! (setq filename (funcall handler 'file-truename filename) ! done t) ! (let ((dir (file-name-directory filename)) ! target dirfile) ! ;; Get the truename of the directory. ! (setq dirfile (directory-file-name dir)) ! ;; If these are equal, we have the (or a) root directory. ! (or (string= dir dirfile) ! ;; If this is the same dir we last got the truename for, ! ;; save time--don't recalculate. ! (if (assoc dir (car prev-dirs)) ! (setq dir (cdr (assoc dir (car prev-dirs)))) ! (let ((old dir) ! (new (file-name-as-directory (file-truename dirfile counter prev-dirs)))) ! (setcar prev-dirs (cons (cons old new) (car prev-dirs))) ! (setq dir new)))) ! (if (equal ".." (file-name-nondirectory filename)) ! (setq filename ! (directory-file-name (file-name-directory (directory-file-name dir))) ! done t) ! (if (equal "." (file-name-nondirectory filename)) ! (setq filename (directory-file-name dir) ! done t) ! ;; Put it back on the file name. ! (setq filename (concat dir (file-name-nondirectory filename))) ! ;; Is the file name the name of a link? ! (setq target (file-symlink-p filename)) ! (if target ! ;; Yes => chase that link, then start all over ! ;; since the link may point to a directory name that uses links. ! ;; We can't safely use expand-file-name here ! ;; since target might look like foo/../bar where foo ! ;; is itself a link. Instead, we handle . and .. above. ! (setq filename ! (if (file-name-absolute-p target) ! target ! (concat dir target)) ! done nil) ! ;; No, we are done! ! (setq done t)))))))) ! filename)) (defun file-chase-links (filename) *************** *** 414,418 **** (interactive "BSwitch to buffer in other frame: ") (let ((pop-up-frames t)) ! (pop-to-buffer buffer t))) (defun find-file (filename) --- 453,458 ---- (interactive "BSwitch to buffer in other frame: ") (let ((pop-up-frames t)) ! (pop-to-buffer buffer t) ! (raise-frame (window-frame (selected-window))))) (defun find-file (filename) *************** *** 645,649 **** (if (buffer-modified-p buf) "File %s changed on disk. Discard your edits? " ! "File %s changed on disk. Read the new version? ") (file-name-nondirectory filename))) (save-excursion --- 685,689 ---- (if (buffer-modified-p buf) "File %s changed on disk. Discard your edits? " ! "File %s changed on disk. Reread from disk? ") (file-name-nondirectory filename))) (save-excursion *************** *** 701,705 **** buf))) ! (defun after-find-file (&optional error warn noauto) "Called after finding a file and by the default revert function. Sets buffer mode, parses local variables. --- 741,748 ---- buf))) ! (defvar after-find-file-from-revert-buffer nil) ! ! (defun after-find-file (&optional error warn noauto ! after-find-file-from-revert-buffer) "Called after finding a file and by the default revert function. Sets buffer mode, parses local variables. *************** *** 708,711 **** --- 751,756 ---- exists an auto-save file more recent than the visited file. NOAUTO means don't mess with auto-save mode. + Fourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER non-nil + means this call was from `revert-buffer'. Finishes by calling the functions in `find-file-hooks'." (setq buffer-read-only (not (file-writable-p buffer-file-name))) *************** *** 934,938 **** (if (and (not done) buffer-file-name) (let ((name buffer-file-name) - (case-fold-search (eq system-type 'vax-vms)) (keep-going t)) ;; Remove backup-suffixes from file name. --- 979,982 ---- *************** *** 943,957 **** (mode nil)) ;; Find first matching alist entry. ! (while (and (not mode) alist) ! (if (string-match (car (car alist)) name) ! (if (and (consp (cdr (car alist))) ! (nth 2 (car alist))) ! (progn ! (setq mode (car (cdr (car alist))) ! name (substring name 0 (match-beginning 0)) ! keep-going t)) ! (setq mode (cdr (car alist)) ! keep-going nil))) ! (setq alist (cdr alist))) (if mode (funcall mode) --- 987,1002 ---- (mode nil)) ;; Find first matching alist entry. ! (let ((case-fold-search (eq system-type 'vax-vms))) ! (while (and (not mode) alist) ! (if (string-match (car (car alist)) name) ! (if (and (consp (cdr (car alist))) ! (nth 2 (car alist))) ! (progn ! (setq mode (car (cdr (car alist))) ! name (substring name 0 (match-beginning 0)) ! keep-going t)) ! (setq mode (cdr (car alist)) ! keep-going nil))) ! (setq alist (cdr alist)))) (if mode (funcall mode) *************** *** 1106,1109 **** --- 1151,1155 ---- ;; Get confirmation before setting these variables as locals in a file. + (put 'debugger 'risky-local-variable t) (put 'enable-local-eval 'risky-local-variable t) (put 'eval 'risky-local-variable t) *************** *** 1114,1117 **** --- 1160,1170 ---- (put 'buffer-auto-save-file-name 'risky-local-variable t) (put 'buffer-file-truename 'risky-local-variable t) + (put 'exec-path 'risky-local-variable t) + (put 'load-path 'risky-local-variable t) + (put 'exec-directory 'risky-local-variable t) + (put 'process-environment '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) + (put 'rmail-output-file-alist 'risky-local-variable t) (defun hack-one-local-variable-quotep (exp) *************** *** 1129,1133 **** ;; Likewise for setting hook variables. ((or (get var 'risky-local-variable) ! (string-match "-hooks?$\\|-functions?$\\|-forms?$" (symbol-name var))) ;; Permit evaling a put of a harmless property --- 1182,1186 ---- ;; Likewise for setting hook variables. ((or (get var 'risky-local-variable) ! (string-match "-hooks?$\\|-functions?$\\|-forms?$\\|-program$\\|-command$" (symbol-name var))) ;; Permit evaling a put of a harmless property *************** *** 1145,1149 **** '(lisp-indent-hook))) ;; Permit eval if not root and user says ok. ! (and (not (string= (user-login-name) "root")) (or (eq enable-local-eval t) (and enable-local-eval --- 1198,1202 ---- '(lisp-indent-hook))) ;; Permit eval if not root and user says ok. ! (and (not (zerop (user-uid))) (or (eq enable-local-eval t) (and enable-local-eval *************** *** 1173,1205 **** if you wish to pass an empty string as the argument." (interactive "FSet visited file name: ") ! (if filename ! (setq filename ! (if (string-equal filename "") ! nil ! (expand-file-name filename)))) ! (or (equal filename buffer-file-name) ! (progn ! (and filename (lock-buffer filename)) ! (unlock-buffer))) ! (setq buffer-file-name filename) ! (if filename ; make buffer name reflect filename. ! (let ((new-name (file-name-nondirectory buffer-file-name))) ! (if (string= new-name "") ! (error "Empty file name")) ! (if (eq system-type 'vax-vms) ! (setq new-name (downcase new-name))) ! (setq default-directory (file-name-directory buffer-file-name)) ! (or (string= new-name (buffer-name)) ! (rename-buffer new-name t)))) ! (setq buffer-backed-up nil) ! (clear-visited-file-modtime) ! (if filename ! (progn ! (setq buffer-file-truename ! (abbreviate-file-name (file-truename buffer-file-name))) ! (if find-file-visit-truename ! (setq buffer-file-name buffer-file-truename)) ! (setq buffer-file-number (nth 10 (file-attributes buffer-file-name)))) ! (setq buffer-file-truename nil buffer-file-number nil)) ;; write-file-hooks is normally used for things like ftp-find-file ;; that visit things that are not local files as if they were files. --- 1226,1264 ---- if you wish to pass an empty string as the argument." (interactive "FSet visited file name: ") ! (let (truename) ! (if filename ! (setq filename ! (if (string-equal filename "") ! nil ! (expand-file-name filename)))) ! (if filename ! (progn ! (setq truename (file-truename filename)) ! (if find-file-visit-truename ! ;; Do not use the abbreviated filename, because ! ;; write-region will reset it to the expanded filename ! (setq filename truename)))) ! (or (equal filename buffer-file-name) ! (progn ! (and filename (lock-buffer filename)) ! (unlock-buffer))) ! (setq buffer-file-name filename) ! (if filename ; make buffer name reflect filename. ! (let ((new-name (file-name-nondirectory buffer-file-name))) ! (if (string= new-name "") ! (error "Empty file name")) ! (if (eq system-type 'vax-vms) ! (setq new-name (downcase new-name))) ! (setq default-directory (file-name-directory buffer-file-name)) ! (or (string= new-name (buffer-name)) ! (rename-buffer new-name t)))) ! (setq buffer-backed-up nil) ! (clear-visited-file-modtime) ! (if truename ! (setq buffer-file-truename (abbreviate-file-name truename))) ! (setq buffer-file-number ! (if filename ! (nth 10 (file-attributes buffer-file-name)) ! nil))) ;; write-file-hooks is normally used for things like ftp-find-file ;; that visit things that are not local files as if they were files. *************** *** 1292,1297 **** ;; But don't actually delete til later. (and targets ! (or (eq trim-versions-without-asking t) (eq trim-versions-without-asking nil)) ! (or trim-versions-without-asking (y-or-n-p (format "Delete excess backup versions of %s? " real-file-name)))))) --- 1351,1356 ---- ;; But don't actually delete til later. (and targets ! (or (eq delete-old-versions t) (eq delete-old-versions nil)) ! (or delete-old-versions (y-or-n-p (format "Delete excess backup versions of %s? " real-file-name)))))) *************** *** 1482,1486 **** Defaults are 2 old versions and 2 new. `dired-kept-versions' controls dired's clean-directory (.) command. ! If `trim-versions-without-asking' is nil, system will query user before trimming versions. Otherwise it does it silently." (interactive "p") --- 1541,1545 ---- Defaults are 2 old versions and 2 new. `dired-kept-versions' controls dired's clean-directory (.) command. ! If `delete-old-versions' is nil, system will query user before trimming versions. Otherwise it does it silently." (interactive "p") *************** *** 1487,1491 **** (let ((modp (buffer-modified-p)) (large (> (buffer-size) 50000)) ! (make-backup-files (and make-backup-files (not (eq args 0))))) (and modp (memq args '(16 64)) (setq buffer-backed-up nil)) (if (and modp large) (message "Saving file %s..." (buffer-file-name))) --- 1546,1551 ---- (let ((modp (buffer-modified-p)) (large (> (buffer-size) 50000)) ! (make-backup-files (or (and make-backup-files (not (eq args 0))) ! (memq args '(16 64))))) (and modp (memq args '(16 64)) (setq buffer-backed-up nil)) (if (and modp large) (message "Saving file %s..." (buffer-file-name))) *************** *** 1589,1629 **** (or buffer-backed-up (setq setmodes (backup-buffer))) ! (if file-precious-flag ! ;; If file is precious, write temp name, then rename it. ! (let ((dir (file-name-directory buffer-file-name)) ! (realname buffer-file-name) ! tempname temp nogood i succeed) ! (setq i 0) ! (setq nogood t) ! ;; Find the temporary name to write under. ! (while nogood ! (setq tempname (format "%s#tmp#%d" dir i)) ! (setq nogood (file-exists-p tempname)) ! (setq i (1+ i))) ! (unwind-protect ! (progn (clear-visited-file-modtime) ! (write-region (point-min) (point-max) ! tempname nil realname) ! (setq succeed t)) ! ;; If writing the temp file fails, ! ;; delete the temp file. ! (or succeed (delete-file tempname))) ! ;; Since we have created an entirely new file ! ;; and renamed it, make sure it gets the ! ;; right permission bits set. ! (setq setmodes (file-modes buffer-file-name)) ! ;; We succeeded in writing the temp file, ! ;; so rename it. ! (rename-file tempname buffer-file-name t)) ! ;; If file not writable, see if we can make it writable ! ;; temporarily while we write it. ! ;; But no need to do so if we have just backed it up ! ;; (setmodes is set) because that says we're superseding. ! (cond ((and tempsetmodes (not setmodes)) ! ;; Change the mode back, after writing. ! (setq setmodes (file-modes buffer-file-name)) ! (set-file-modes buffer-file-name 511))) ! (write-region (point-min) (point-max) ! buffer-file-name nil t)) setmodes)) --- 1649,1692 ---- (or buffer-backed-up (setq setmodes (backup-buffer))) ! (let ((dir (file-name-directory buffer-file-name))) ! (if (and file-precious-flag ! (file-writable-p dir)) ! ;; If file is precious, write temp name, then rename it. ! ;; This requires write access to the containing dir, ! ;; which is why we don't try it if we don't have that access. ! (let ((realname buffer-file-name) ! tempname temp nogood i succeed) ! (setq i 0) ! (setq nogood t) ! ;; Find the temporary name to write under. ! (while nogood ! (setq tempname (format "%s#tmp#%d" dir i)) ! (setq nogood (file-exists-p tempname)) ! (setq i (1+ i))) ! (unwind-protect ! (progn (clear-visited-file-modtime) ! (write-region (point-min) (point-max) ! tempname nil realname) ! (setq succeed t)) ! ;; If writing the temp file fails, ! ;; delete the temp file. ! (or succeed (delete-file tempname))) ! ;; Since we have created an entirely new file ! ;; and renamed it, make sure it gets the ! ;; right permission bits set. ! (setq setmodes (file-modes buffer-file-name)) ! ;; We succeeded in writing the temp file, ! ;; so rename it. ! (rename-file tempname buffer-file-name t)) ! ;; If file not writable, see if we can make it writable ! ;; temporarily while we write it. ! ;; But no need to do so if we have just backed it up ! ;; (setmodes is set) because that says we're superseding. ! (cond ((and tempsetmodes (not setmodes)) ! ;; Change the mode back, after writing. ! (setq setmodes (file-modes buffer-file-name)) ! (set-file-modes buffer-file-name 511))) ! (write-region (point-min) (point-max) ! buffer-file-name nil t))) setmodes)) *************** *** 1775,1779 **** (put 'revert-buffer-function 'permanent-local t) (defvar revert-buffer-function nil ! "Function to use to revert this buffer, or nil to do the default.") (put 'revert-buffer-insert-file-contents-function 'permanent-local t) --- 1838,1844 ---- (put 'revert-buffer-function 'permanent-local t) (defvar revert-buffer-function nil ! "Function to use to revert this buffer, or nil to do the default. ! The function receives two arguments IGNORE-AUTO and NOCONFIRM, ! which are the arguments that `revert-buffer' received.") (put 'revert-buffer-insert-file-contents-function 'permanent-local t) *************** *** 1853,1857 **** nil nil t))) (goto-char (min opoint (point-max))) ! (after-find-file nil nil t) (run-hooks 'after-revert-hook) t))))) --- 1918,1922 ---- nil nil t))) (goto-char (min opoint (point-max))) ! (after-find-file nil nil t t) (run-hooks 'after-revert-hook) t))))) *************** *** 1913,1917 **** (setq buffer-auto-save-file-name (and (if (null arg) ! (not buffer-auto-save-file-name) (or (eq arg t) (listp arg) (and (integerp arg) (> arg 0)))) (if (and buffer-file-name auto-save-visited-file-name --- 1978,1985 ---- (setq buffer-auto-save-file-name (and (if (null arg) ! (or (not buffer-auto-save-file-name) ! ;; If autosave is off because buffer has shrunk, ! ;; then toggling should turn it on. ! (< buffer-saved-size 0)) (or (eq arg t) (listp arg) (and (integerp arg) (> arg 0)))) (if (and buffer-file-name auto-save-visited-file-name *************** *** 1951,1956 **** (file-name-nondirectory buffer-file-name) "#") ! ;; For non-file bfr, use bfr name and Emacs pid. ! (expand-file-name (format "#%s#%s#" (buffer-name) (make-temp-name ""))))) (defun auto-save-file-name-p (filename) --- 2019,2044 ---- (file-name-nondirectory buffer-file-name) "#") ! ! ;; Deal with buffers that don't have any associated files. (Mail ! ;; mode tends to create a good number of these.) ! ! (let ((buffer-name (buffer-name)) ! (limit 0)) ! ;; Use technique from Sebastian Kremer's auto-save ! ;; package to turn slashes into \\!. This ensures that ! ;; the auto-save buffer name is unique. ! ! (while (string-match "[/\\]" buffer-name limit) ! (setq buffer-name (concat (substring buffer-name 0 (match-beginning 0)) ! (if (string= (substring buffer-name ! (match-beginning 0) ! (match-end 0)) ! "/") ! "\\!" ! "\\\\") ! (substring buffer-name (match-end 0)))) ! (setq limit (1+ (match-end 0)))) ! ! (expand-file-name (format "#%s#%s#" buffer-name (make-temp-name "")))))) (defun auto-save-file-name-p (filename) *************** *** 2018,2021 **** --- 2106,2110 ---- "Insert directory listing for FILE, formatted according to SWITCHES. Leaves point after the inserted text. + SWITCHES may be a string of options, or a list of strings. Optional third arg WILDCARD means treat FILE as shell wildcard. Optional fourth arg FULL-DIRECTORY-P means file is a directory and *************** *** 2046,2050 **** ;; in case people want to use them explicitly to quote ;; wildcard characters. ! (while (string-match "[ \t\n;<>&|{}()#$]" pattern beg) (setq pattern (concat (substring pattern 0 (match-beginning 0)) --- 2135,2139 ---- ;; in case people want to use them explicitly to quote ;; wildcard characters. ! (while (string-match "[ \t\n;<>&|()#$]" pattern beg) (setq pattern (concat (substring pattern 0 (match-beginning 0)) *************** *** 2054,2065 **** (call-process shell-file-name nil t nil "-c" (concat insert-directory-program ! " -d " switches " " pattern))) ;; SunOS 4.1.3, SVr4 and others need the "." to list the ;; directory if FILE is a symbolic link. ! (call-process insert-directory-program nil t nil switches ! (if full-directory-p ! (concat (file-name-as-directory file) ".") ! file))))))) (defvar kill-emacs-query-functions nil --- 2143,2173 ---- (call-process shell-file-name nil t nil "-c" (concat insert-directory-program ! " -d " ! (if (stringp switches) ! switches ! (mapconcat 'identity switches " ")) ! " " pattern))) ;; SunOS 4.1.3, SVr4 and others need the "." to list the ;; directory if FILE is a symbolic link. ! (apply 'call-process ! insert-directory-program nil t nil ! (let (list) ! (if (listp switches) ! (setq list switches) ! (if (not (equal switches "")) ! (progn ! ;; Split the switches at any spaces ! ;; so we can pass separate options as separate args. ! (while (string-match " " switches) ! (setq list (cons (substring switches 0 (match-beginning 0)) ! list) ! switches (substring switches (match-end 0)))) ! (setq list (cons switches list))))) ! (append list ! (list ! (if full-directory-p ! (concat (file-name-as-directory file) ".") ! file)))))))))) (defvar kill-emacs-query-functions nil diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/fill.el emacs-19.26/lisp/fill.el *** emacs-19.25/lisp/fill.el Wed May 25 04:41:52 1994 --- emacs-19.26/lisp/fill.el Wed Jul 27 16:07:31 1994 *************** *** 273,277 **** (save-excursion (save-restriction ! (let (ncols beg indent) (beginning-of-line) (forward-char (length fill-prefix)) --- 273,277 ---- (save-excursion (save-restriction ! (let (ncols beg indent end) (beginning-of-line) (forward-char (length fill-prefix)) *************** *** 281,284 **** --- 281,287 ---- (end-of-line) (narrow-to-region beg (point)) + (setq end (point)) + (skip-chars-backward " \t") + (delete-char (- end (point))) (goto-char beg) (while (re-search-forward " *" nil t) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/finder-inf.el emacs-19.26/lisp/finder-inf.el *** emacs-19.25/lisp/finder-inf.el Tue Nov 23 15:19:15 1993 --- emacs-19.26/lisp/finder-inf.el Sat Jun 18 14:55:12 1994 *************** *** 20,28 **** (maint)) ("advice.el" ! "advice mechanism for Emacs Lisp functions" (extensions lisp tools)) ("allout.el" nil ! nil) ("ange-ftp.el" "transparent FTP support for GNU Emacs" --- 20,28 ---- (maint)) ("advice.el" ! "an overloading mechanism for Emacs Lisp functions" (extensions lisp tools)) ("allout.el" nil ! (outline mode)) ("ange-ftp.el" "transparent FTP support for GNU Emacs" *************** *** 56,61 **** (unix languages)) ("backquote.el" ! "backquoting for Emacs Lisp macros" ! (extensions)) ("bib-mode.el" "bib-mode, major mode for editing bib files." --- 56,61 ---- (unix languages)) ("backquote.el" ! nil ! (extensions internal)) ("bib-mode.el" "bib-mode, major mode for editing bib files." *************** *** 67,70 **** --- 67,73 ---- "blackbox game in Emacs Lisp" (games)) + ("blessmail.el" + "Decide whether movemail needs special privileges." + (internal)) ("bookmark.el" "set bookmarks, jump to them later." *************** *** 94,97 **** --- 97,103 ---- "calendar functions for the Mayan calendars." (calendar)) + ("cal-menu.el" + "calendar functions for menu bar and popup menu support" + (calendar)) ("calendar.el" "Calendar functions." *************** *** 100,103 **** --- 106,112 ---- "code to extend the character set and support case tables." (i18n)) + ("cc-mode.el" + "major mode for editing C++ and C code" + (c++ c editing major-mode)) ("cdl.el" nil *************** *** 121,124 **** --- 130,136 ---- nil (extensions)) + ("cl-specs.el" + nil + (lisp tools maint)) ("cl.el" nil *************** *** 151,157 **** "C++ code editing commands for Emacs" (c)) - ("cplus-md1.el" - "major mode for editing C++ (and C) code" - (languages)) ("cust-print.el" "handles print-level and print-circle." --- 163,166 ---- *************** *** 169,179 **** "delete selection if you insert" nil) ("desktop.el" "save partial status of Emacs when killed" ! nil) ("diary-ins.el" "calendar functions for adding diary entries." (diary calendar)) ! ("diary.el" "diary functions." (calendar)) --- 178,191 ---- "delete selection if you insert" nil) + ("derived.el" + nil + nil) ("desktop.el" "save partial status of Emacs when killed" ! (customization)) ("diary-ins.el" "calendar functions for adding diary entries." (diary calendar)) ! ("diary-lib.el" "diary functions." (calendar)) *************** *** 184,187 **** --- 196,202 ---- "all of dired except what people usually use" nil) + ("dired-x.el" + "Sebastian Kremer's Extra DIRED hacked up for GNU Emacs19" + (dired extensions)) ("dired.el" "directory-browsing commands" *************** *** 199,205 **** --- 214,229 ---- "psychological help for frustrated users." (games)) + ("dos-fns.el" + "MS-Dos specific functions." + (internal)) + ("double.el" + nil + (i18n)) ("dunnet.el" "Text adventure for Emacs" (games)) + ("easymenu.el" + "support the easymenu interface for defining a menu." + (emulations)) ("ebuff-menu.el" "electric-buffer-list mode" *************** *** 209,214 **** nil) ("edebug.el" ! "a source-level debugger for emacs lisp" (lisp tools maint)) ("edmacro.el" "keyboard macro editor" --- 233,241 ---- nil) ("edebug.el" ! "a source-level debugger for Emacs Lispl" (lisp tools maint)) + ("ediff.el" + "a visual interface to diff & patch" + (tools)) ("edmacro.el" "keyboard macro editor" *************** *** 235,238 **** --- 262,268 ---- "etags facility for Emacs" (tools)) + ("eval-reg.el" + "Redefine eval-region, and subrs that use it, in Lisp" + (lisp)) ("faces.el" "Lisp interface to the c \"face\" structure" *************** *** 265,268 **** --- 295,301 ---- "help for lusers on cu(1) or ttys with wired-in ^S/^Q flow control" (hardware)) + ("foldout.el" + "Folding extensions for outline-mode and outline-minor-mode." + (folding outline)) ("font-lock.el" nil *************** *** 283,286 **** --- 316,322 ---- "multi-frame management independent of window systems." (internal)) + ("gnus-uu.el" + "extract, view or save (uu)encoded files from gnus" + nil) ("gnus.el" nil *************** *** 301,307 **** "rebindings to imitate Gosmacs." (emulations)) - ("grow-vers.el" - "increment Emacs version number" - (internal)) ("gud.el" "Grand Unified Debugger mode for gdb, sdb, dbx, or xdb" --- 337,340 ---- *************** *** 330,343 **** ("hippie-exp.el" "expand text trying various ways to find its expansion." ! (extensions)) ("holidays.el" "holiday functions for the calendar package" (holidays calendar)) ("icon.el" "mode for editing Icon code" (languages)) ! ("inc-vers.el" ! "load this to increment the recorded Emacs version number." ! (internal)) ("indent.el" "indentation commands for Emacs" --- 363,382 ---- ("hippie-exp.el" "expand text trying various ways to find its expansion." ! (abbrev)) ("holidays.el" "holiday functions for the calendar package" (holidays calendar)) + ("icomplete.el" + nil + nil) ("icon.el" "mode for editing Icon code" (languages)) ! ("ielm.el" ! "interaction mode for Emacs Lisp" ! (lisp)) ! ("imenu.el" ! "Framework for mode-specific buffer indexes." ! (tools)) ("indent.el" "indentation commands for Emacs" *************** *** 361,364 **** --- 400,406 ---- "set up char tables for ISO 8859/1 on ASCII terminals." (i18n)) + ("iso-cvt.el" + nil + (tex iso latin i18n)) ("iso-insert.el" "insert functions for ISO 8859/1." *************** *** 374,379 **** --- 416,427 ---- (i18n)) ("ispell.el" + nil + nil) + ("ispell4.el" "this is the GNU EMACS interface to GNU ISPELL version 4." (wp)) + ("jka-compr.el" + nil + (data)) ("kermit.el" "additions to shell mode for use with kermit, etc." *************** *** 430,433 **** --- 478,484 ---- "extract full name and address from RFC 822 mail header." (mail)) + ("mail-hist.el" + "Headers and message body history for outgoing mail." + (mail)) ("mail-utils.el" "utility functions used both by rmail and rnews" *************** *** 469,475 **** --- 520,544 ---- "Metamail interface for GNU Emacs" (mail news mime multimedia)) + ("mh-comp.el" + "mh-e functions for composing messages" + nil) ("mh-e.el" "GNU Emacs interface to the MH mail system" (mail)) + ("mh-funcs.el" + "mh-e functions not everyone will use right away" + nil) + ("mh-mime.el" + "mh-e support for composing MIME messages" + nil) + ("mh-pick.el" + "make a search pattern and search for a message in mh-e" + nil) + ("mh-seq.el" + "mh-e sequences support" + nil) + ("mh-utils.el" + "mh-e code needed for both sending and reading" + nil) ("mhspool.el" "MH folder access using NNTP for GNU Emacs" *************** *** 487,490 **** --- 556,562 ---- "convert buffer of Mocklisp code to real lisp." (emulations)) + ("mldrag.el" + nil + (mouse)) ("mlsupport.el" "run-time support for mocklisp code." *************** *** 537,541 **** ("pascal.el" nil ! (languages)) ("paths.el" "define pathnames for use by various Emacs commands." --- 609,613 ---- ("pascal.el" nil ! nil) ("paths.el" "define pathnames for use by various Emacs commands." *************** *** 556,559 **** --- 628,634 ---- "major mode for editing and running Prolog under Emacs" (languages)) + ("rcompile.el" + nil + (tools processes)) ("rect.el" "rectangle functions for GNU Emacs." *************** *** 622,625 **** --- 697,706 ---- "display a buffer in rot13." nil) + ("rsz-mini.el" + "dynamically resize minibuffer to display entire contents" + nil) + ("s-region.el" + "set region using shift key." + (terminals)) ("saveplace.el" "automatically save place in files." *************** *** 649,652 **** --- 730,736 ---- "SGML-editing mode" (wp)) + ("sh-script.el" + "shell-script editing commands for Emacs" + (shell programming)) ("shadowfile.el" nil *************** *** 664,667 **** --- 748,754 ---- nil nil) + ("skeleton.el" + "Metalanguage for writing statement skeletons" + (shell programming)) ("solar.el" "calendar functions for solar events." *************** *** 670,673 **** --- 757,763 ---- "commands to sort text in an Emacs buffer." (unix)) + ("soundex.el" + nil + (matching)) ("spell.el" "spelling correction interface for Emacs." *************** *** 703,706 **** --- 793,799 ---- "simple editing of tar files from GNU emacs" (unix)) + ("tcl-mode.el" + nil + (languages processes tools)) ("tcp.el" nil *************** *** 709,712 **** --- 802,808 ---- "run a telnet session from within an Emacs buffer" nil) + ("tempo.el" + "templates with hotspots" + (extensions languages tools)) ("term-nasty.el" "Damned Things from terminfo.el" diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/finder.el emacs-19.26/lisp/finder.el *** emacs-19.25/lisp/finder.el Mon May 9 16:42:37 1994 --- emacs-19.26/lisp/finder.el Fri Jun 17 16:35:02 1994 *************** *** 210,214 **** (let* ((str (lm-commentary (finder-find-library file)))) (if (null str) ! (error "Can't find any Commentary section.")) (pop-to-buffer "*Finder*") (setq buffer-read-only nil) --- 210,214 ---- (let* ((str (lm-commentary (finder-find-library file)))) (if (null str) ! (error "Can't find any Commentary section")) (pop-to-buffer "*Finder*") (setq buffer-read-only nil) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/font-lock.el emacs-19.26/lisp/font-lock.el *** emacs-19.25/lisp/font-lock.el Mon May 30 06:39:30 1994 --- emacs-19.26/lisp/font-lock.el Sat Aug 6 00:45:15 1994 *************** *** 58,65 **** (error "Can't fontify on an ASCII terminal")) - (or (internal-find-face 'underline) - (copy-face 'default 'underline)) - (set-face-underline-p 'underline t) - (defvar font-lock-comment-face 'italic --- 58,61 ---- *************** *** 117,120 **** --- 113,120 ---- "*Non-nil means the patterns in `font-lock-keywords' are case-insensitive.") + (defvar font-lock-syntax-table nil + "*Non-nil means use this syntax table for fontifying. + If this is nil, the major mode's syntax table is used.") + (defvar font-lock-verbose t "*Non-nil means `font-lock-fontify-buffer' should print status messages.") *************** *** 216,220 **** (and prev (remove-text-properties prev end '(face nil))) ! (set-buffer-modified-p modified)))) ;; This code used to be used to show a string on reaching the end of it. --- 216,222 ---- (and prev (remove-text-properties prev end '(face nil))) ! (and (buffer-modified-p) ! (not modified) ! (set-buffer-modified-p nil))))) ;; This code used to be used to show a string on reaching the end of it. *************** *** 285,332 **** (buffer-read-only nil) (modified (buffer-modified-p)) ! first str match face s e allow-overlap-p) ! (while rest ! (setq first (car rest) rest (cdr rest)) ! (goto-char start) ! (cond ((consp first) ! (setq str (car first)) ! (cond ((consp (cdr first)) ! (setq match (nth 1 first) ! face (eval (nth 2 first)) ! allow-overlap-p (nth 3 first))) ! ((symbolp (cdr first)) ! (setq match 0 allow-overlap-p nil ! face (eval (cdr first)))) ! (t ! (setq match (cdr first) ! allow-overlap-p nil ! face font-lock-keyword-face)))) ! (t ! (setq str first match 0 allow-overlap-p nil ! face font-lock-keyword-face))) ! ;(message "regexp: %s" str) ! (while (re-search-forward str end t) ! (setq s (match-beginning match) ! e (match-end match)) ! (or s (error "expression did not match subexpression %d" match)) ! ;; don't fontify this keyword if we're already in some other context. ! (or (if allow-overlap-p nil (font-lock-any-properties-p s e)) ! (if (not (memq allow-overlap-p '(t nil))) ! (save-excursion ! (goto-char s) ! (save-restriction ! (narrow-to-region s e) ! (while (not (eobp)) ! (let ((next (next-single-property-change (point) 'face))) ! (if (or (null next) (> next (point-max))) ! (setq next (point-max))) ! (if (not (get-text-property (point) 'face)) ! (put-text-property (point) next 'face face)) ! (goto-char next))))) ! (put-text-property s e 'face face)))) ! (if loudly (message "Fontifying %s... (regexps...%s)" ! (buffer-name) ! (make-string (setq count (1+ count)) ?.)))) ! (set-buffer-modified-p modified))) ;; The user level functions --- 287,341 ---- (buffer-read-only nil) (modified (buffer-modified-p)) ! first str match face s e allow-overlap-p ! (old-syntax (syntax-table))) ! (unwind-protect ! (progn ! (if font-lock-syntax-table ! (set-syntax-table font-lock-syntax-table)) ! (while rest ! (setq first (car rest) rest (cdr rest)) ! (goto-char start) ! (cond ((consp first) ! (setq str (car first)) ! (cond ((consp (cdr first)) ! (setq match (nth 1 first) ! face (eval (nth 2 first)) ! allow-overlap-p (nth 3 first))) ! ((symbolp (cdr first)) ! (setq match 0 allow-overlap-p nil ! face (eval (cdr first)))) ! (t ! (setq match (cdr first) ! allow-overlap-p nil ! face font-lock-keyword-face)))) ! (t ! (setq str first match 0 allow-overlap-p nil ! face font-lock-keyword-face))) ! ;(message "regexp: %s" str) ! (while (re-search-forward str end t) ! (setq s (match-beginning match) ! e (match-end match)) ! (or s (error "expression did not match subexpression %d" match)) ! ;; don't fontify this keyword if we're already in some other context. ! (or (if allow-overlap-p nil (font-lock-any-properties-p s e)) ! (if (not (memq allow-overlap-p '(t nil))) ! (save-excursion ! (goto-char s) ! (while (< (point) e) ! (let ((next (next-single-property-change (point) 'face ! nil e))) ! (if (or (null next) (> next e)) ! (setq next e)) ! (if (not (get-text-property (point) 'face)) ! (put-text-property (point) next 'face face)) ! (goto-char next)))) ! (put-text-property s e 'face face)))) ! (if loudly (message "Fontifying %s... (regexps...%s)" ! (buffer-name) ! (make-string (setq count (1+ count)) ?.))))) ! (set-syntax-table old-syntax)) ! (and (buffer-modified-p) ! (not modified) ! (set-buffer-modified-p nil)))) ;; The user level functions *************** *** 586,590 **** ;; fontify case targets and goto-tags. This is slow because the ;; expression is anchored on the right. ! "\\(\\(\\sw\\|\\s_\\)+\\):" ;; ;; Fontify variables declared with structures, or typedef names. --- 595,599 ---- ;; fontify case targets and goto-tags. This is slow because the ;; expression is anchored on the right. ! '("[ \t\n]\\(\\(\\sw\\|\\s_\\)+\\):" . 1) ;; ;; Fontify variables declared with structures, or typedef names. *************** *** 635,639 **** (defvar tex-font-lock-keywords (list ! '("\\(\\\\\\w+\\)" 1 font-lock-keyword-face t) '("{\\\\em\\([^}]+\\)}" 1 font-lock-comment-face t) '("{\\\\bf\\([^}]+\\)}" 1 font-lock-keyword-face t) --- 644,648 ---- (defvar tex-font-lock-keywords (list ! '("\\(\\\\\\([a-zA-Z@]+\\|.\\)\\)" 1 font-lock-keyword-face t) '("{\\\\em\\([^}]+\\)}" 1 font-lock-comment-face t) '("{\\\\bf\\([^}]+\\)}" 1 font-lock-keyword-face t) *************** *** 704,712 **** (cond ((eq major-mode 'lisp-mode) lisp-font-lock-keywords) ((eq major-mode 'emacs-lisp-mode) lisp-font-lock-keywords) ! ((eq major-mode 'c-mode) c-font-lock-keywords) ! ((eq major-mode 'c++-c-mode) c-font-lock-keywords) ((eq major-mode 'c++-mode) c++-font-lock-keywords) ((eq major-mode 'perl-mode) perl-font-lock-keywords) ! ((eq major-mode 'tex-mode) tex-font-lock-keywords) ((eq major-mode 'texinfo-mode) texi-font-lock-keywords) ((eq major-mode 'shell-mode) shell-font-lock-keywords) --- 713,733 ---- (cond ((eq major-mode 'lisp-mode) lisp-font-lock-keywords) ((eq major-mode 'emacs-lisp-mode) lisp-font-lock-keywords) ! ((eq major-mode 'c-mode) ! (make-local-variable 'font-lock-syntax-table) ! (setq font-lock-syntax-table ! (copy-syntax-table (syntax-table))) ! (modify-syntax-entry ?_ "w" font-lock-syntax-table) ! c-font-lock-keywords) ! ((eq major-mode 'c++-c-mode) ! (make-local-variable 'font-lock-syntax-table) ! (setq font-lock-syntax-table ! (copy-syntax-table (syntax-table))) ! (modify-syntax-entry ?_ "w" font-lock-syntax-table) ! c-font-lock-keywords) ((eq major-mode 'c++-mode) c++-font-lock-keywords) ((eq major-mode 'perl-mode) perl-font-lock-keywords) ! ((eq major-mode 'plain-tex-mode) tex-font-lock-keywords) ! ((eq major-mode 'latex-mode) tex-font-lock-keywords) ! ((eq major-mode 'slitex-mode) tex-font-lock-keywords) ((eq major-mode 'texinfo-mode) texi-font-lock-keywords) ((eq major-mode 'shell-mode) shell-font-lock-keywords) diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/forms-d2.el emacs-19.26/lisp/forms-d2.el *** emacs-19.25/lisp/forms-d2.el Fri Jul 2 19:53:30 1993 --- emacs-19.26/lisp/forms-d2.el Tue Jul 26 15:42:38 1994 *************** *** 1,10 **** ! ;; demo2 -- demo forms-mode -*- emacs-lisp -*- ! ;; SCCS Status : @(#)@ demo2 1.1.2 ;; Author : Johan Vromans ;; Created On : 1989 ;; Last Modified By: Johan Vromans ! ;; Last Modified On: Mon Jul 1 13:56:31 1991 ! ;; Update Count : 2 ;; Status : OK ;; --- 1,10 ---- ! ;; forms-demo -- demo forms-mode -*- emacs-lisp -*- ! ;; RCS Status : $Id: forms-d2.el,v 1.3 1994/07/25 20:53:03 jv Exp $ ;; Author : Johan Vromans ;; Created On : 1989 ;; Last Modified By: Johan Vromans ! ;; Last Modified On: Mon Jul 25 22:53:01 1994 ! ;; Update Count : 8 ;; Status : OK ;; *************** *** 47,53 **** ;; Record filters. - ;; This example uses the (defun ...) method of defining. ;; ! (defun forms-new-record-filter (the-record) "Form a new record with some defaults." (aset the-record arch-from (user-full-name)) --- 47,52 ---- ;; Record filters. ;; ! (defun arch-new-record-filter (the-record) "Form a new record with some defaults." (aset the-record arch-from (user-full-name)) *************** *** 55,58 **** --- 54,58 ---- the-record ; return it ) + (setq forms-new-record-filter 'arch-new-record-filter) ;; The format list. diff -rc2P --exclude-from=/gd2/gnu/emacs/exceptions emacs-19.25/lisp/forms.el emacs-19.26/lisp/forms.el *** emacs-19.25/lisp/forms.el Sun May 22 18:07:45 1994 --- emacs-19.26/lisp/forms.el Tue Jul 26 17:31:18 1994 *************** *** 3,7 **** ;; Author: Johan Vromans ! ;; Version: $Revision: 2.6 $ ;; This file is part of GNU Emacs. --- 3,7 ---- ;; Author: Johan Vromans ! ;; Version: $Revision: 2.10 $ ;; This file is part of GNU Emacs. *************** *** 124,127 **** --- 124,140 ---- ;;; to perform `forms-first-field' resp. `forms-last-field'. ;;; + ;;; forms-read-file-filter [symbol, default nil] + ;;; If not nil: this should be the name of a + ;;; function that is called after the forms data file + ;;; has been read. It can be used to transform + ;;; the contents of the file into a format more suitable + ;;; for forms-mode processing. + ;;; + ;;; forms-write-file-filter [symbol, default nil] + ;;; If not nil: this should be the name of a + ;;; function that is called before the forms data file + ;;; is written (saved) to disk. It can be used to undo + ;;; the effects of `forms-read-file-filter', if any. + ;;; ;;; forms-new-record-filter [symbol, default nil] ;;; If not nil: this should be the name of a *************** *** 267,274 **** (provide 'forms-mode) ;;; for compatibility ! (defconst forms-version (substring "$Revision: 2.6 $" 11 -2) "The version number of forms-mode (as string). The complete RCS id is: ! $Id: forms.el,v 2.6 1994/05/22 22:07:37 rms Exp $") (defvar forms-mode-hooks nil --- 280,287 ---- (provide 'forms-mode) ;;; for compatibility ! (defconst forms-version (substring "$Revision: 2.10 $" 11 -2) "The version number of forms-mode (as string). The complete RCS id is: ! $Id: forms.el,v 2.10 1994/07/26 21:31:13 rms Exp $") (defvar forms-mode-hooks nil *************** *** 306,309 **** --- 319,331 ---- The replacement commands performs forms-first/last-record.") + (defvar forms-read-file-filter nil + "The name of a function that is called after reading the data file. + This can be used to change the contents of the file to something more + suitable for forms processing.") + + (defvar forms-write-file-filter nil + "The name of a function that is called before writing the data file. + This can be used to undo the effects of form-read-file-hook.") + (defvar forms-new-record-filter nil "The name of a function that is called when a new record is created.") *************** *** 429,432 **** --- 451,458 ---- (make-local-variable 'forms-forms-jump) (make-local-variable 'forms-use-text-properties) + + ;; Filter functions. + (make-local-variable 'forms-read-file-filter) + (make-local-variable 'forms-write-file-filter) (make-local-variable 'forms-new-record-filter) (make-local-variable 'forms-modified-record-filter) *************** *** 433,436 **** --- 459,464 ---- ;; Make sure no filters exist. + (setq forms-read-file-filter nil) + (setq forms-write-file-filter nil) (setq forms-new-record-filter nil) (setq forms-modified-record-filter nil) *************** *** 445,464 **** ;; eval the buffer, should set variables ;;(message "forms: processing control file...") ! (eval-current-buffer) ! ;; check if the mandatory variables make sense. (or forms-file (error (concat "Forms control file error: " "'forms-file' has not been set"))) ! (or forms-number-of-fields ! (error (concat "Forms control file error: " ! "'forms-number-of-fields' has not been set"))) ! (or (and (numberp forms-number-of-fields) ! (> forms-number-of-fields 0)) ! (error (concat "Forms control file error: " ! "'forms-number-of-fields' must be a number > 0"))) (or (stringp forms-field-sep) (error (concat "Forms control file error: " "'forms-field-sep' is not a string"))) (if forms-multi-line (if (and (stringp forms-multi-line) --- 473,507 ---- ;; eval the buffer, should set variables ;;(message "forms: processing control file...") ! ;; If enable-local-eval is not set to t the user is asked first. ! (if (or (eq enable-local-eval t) ! (yes-or-no-p ! (concat "Evaluate lisp code in buffer " ! (buffer-name) " to display forms "))) ! (eval-current-buffer) ! (error "`enable-local-eval' inhibits buffer evaluation")) ! ;; Check if the mandatory variables make sense. (or forms-file (error (concat "Forms control file error: " "'forms-file' has not been set"))) ! ! ;; Check forms-field-sep first, since it can be needed to ! ;; construct a default format list. (or (stringp forms-field-sep) (error (concat "Forms control file error: " "'forms-field-sep' is not a string"))) + + (if forms-number-of-fields + (or (and (numberp forms-number-of-fields) + (> forms-number-of-fields 0)) + (error (concat "Forms control file error: " + "'forms-number-of-fields' must be a number > 0"))) + (or (null forms-format-list) + (error (concat "Forms control file error: " + "'forms-number-of-fields' has not been set")))) + + (or forms-format-list + (forms--intuit-from-file)) + (if forms-multi-line (if (and (stringp forms-multi-line) *************** *** 515,518 **** --- 558,564 ---- )) + ;; initialization done + (setq forms--mode-setup t) + ;; Copy desired faces to the actual variables used by the forms formatter. (if (fboundp 'make-face) *************** *** 552,555 **** --- 598,620 ---- (setq forms--file-buffer (find-file-noselect forms-file)) + ;; Pre-transform. + (let ((read-file-filter forms-read-file-filter) + (write-file-filter forms-write-file-filter)) + (if read-file-filter + (save-excursion + (set-buffer forms--file-buffer) + (let ((inhibit-read-only t)) + (run-hooks 'read-file-filter)) + (set-buffer-modified-p nil) + (if write-file-filter + (progn + (make-variable-buffer-local 'local-write-file-hooks) + (setq local-write-file-hooks (list write-file-filter))))) + (if write-file-filter + (save-excursion + (set-buffer forms--file-buffer) + (make-variable-buffer-local 'local-write-file-hooks) + (setq local-write-file-hooks write-file-filter))))) + ;; count the number of records, and set see if it may be modified (let (ro) *************** *** 584,591 **** (set-buffer-modified-p nil) ! ;; setup the first (or current) record to show ! (if (< forms--current-record 1) ! (setq forms--current-record 1)) ! (forms-jump-record forms--current-record) ;; user customising --- 649,673 ---- (set-buffer-modified-p nil) ! (if (= forms--total-records 0) ! ;;(message "forms: proceeding setup (new file)...") ! (progn ! (insert ! "GNU Emacs Forms Mode version " forms-version "\n\n" ! (if (file-exists-p forms-file) ! (concat "No records available in file \"" forms-file "\".\n\n") ! (format "Creating new file \"%s\"\nwith %d field%s per record.\n\n" ! forms-file forms-number-of-fields ! (if (= 1 forms-number-of-fields) "" "s"))) ! "Use " (substitute-command-keys "\\[forms-insert-record]") ! " to create new records.\n") ! (setq forms--current-record 1) ! (setq buffer-read-only t) ! (set-buffer-modified-p nil)) ! ! ;; setup the first (or current) record to show ! (if (< forms--current-record 1) ! (setq forms--current-record 1)) ! (forms-jump-record forms--current-record) ! ) ;; user customising *************** *** 596,602 **** ;; be helpful (forms--help) ! ! ;; initialization done ! (setq forms--mode-setup t)) (defun forms--process-format-list () --- 678,682 ---- ;; be helpful (forms--help) ! ) (defun forms--process-format-list () *************** *** 1076,1079 **** --- 1156,1205 ---- )) + (defun forms--intuit-from-file () + "Get number of fields and a default form using the data file." + + ;; If `forms-number-of-fields' is not set, get it from the data file. + (if (null forms-number-of-fields) + + ;; Need a file to do this. + (if (not (file-exists-p forms-file)) + (error "Need existing file or explicit 'forms-number-of-records'.") + + ;; Visit the file and extract the first record. + (setq forms--file-buffer (find-file-noselect forms-file)) + (let ((read-file-filter forms-read-file-filter) + (the-record)) + (setq the-record + (save-excursion + (set-buffer forms--file-buffer) + (let ((inhibit-read-only t)) + (run-hooks 'read-file-filter)) + (goto-char (point-min))