From: tomo Date: Wed, 19 Jan 2000 11:12:54 +0000 (+0000) Subject: Sync up with r21-2-27. X-Git-Tag: r21-2-27-utf-2000-0_13-0~5 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81572e9b4653c5545c2eb43e87dec439f356c19c;p=chise%2Fxemacs-chise.git- Sync up with r21-2-27. --- diff --git a/CHANGES-beta b/CHANGES-beta index 7a22198..d46ad3a 100644 --- a/CHANGES-beta +++ b/CHANGES-beta @@ -1,3 +1,22 @@ +to 21.2.27 "Hera" +-- Dynamic layout for widgets from Andy Piper +-- config.sub, config.guess major upgrade, Marcus Thiessel +-- gdbinit renamed to .gdbinit +-- dbxrc renamed to .dbxrc +-- Mail locking overhaul, Michael Sperber +-- Info-visit-file can now be used non-interactively, Martin Buchholz +-- FAQ updates, Sandra Wambold +-- Document lisp-level error handling, Hrvoje Niksic +-- Windows changes, Kirill Katsnelson +-- Portable dumper ported to Windows, Kirill Katsnelson +-- idlwave-mode added, Carsten Dominik +-- Info changes, Yoshiki Hayashi and Didier Verna. +-- Again support BSD/OS 2.0 +-- minibuf.* changes, Yoshiki Hayashi +-- hyper-apropos changes, Yoshiki Hayashi +-- buffers tab has its own face, Andy Piper +-- modeline scrolling changes, Didier Verna + to 21.2.26 "Millenium" -- Fix unpredictable results, perhaps even crashes, if using the `return from debugger feature' and errors in `eval' or `funcall'. diff --git a/ChangeLog b/ChangeLog index dfc84eb..aa16740 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,6 +21,51 @@ * configure.in: Add new option `--with-utf-2000'; define `UTF2000' if it is specified. +2000-01-18 Martin Buchholz + + * XEmacs 21.2.27 is released. + +2000-01-15 Adrian Aichner + + * etc/TUTORIAL.de: Update copyright and fix typo. + +2000-01-14 Martin Buchholz + + * configure.in: Create a .dbxrc in the src directory, like .gdbinit. + + * configure.in: Add `tests' symlink to make it easier to find + automated tests directory. + +2000-01-14 Andy Piper + + * configure.in: for cygwin 1.0 we must pick up the mingw32 headers + before the cygwin headers. + +2000-01-08 Martin Buchholz + + * configure.in: + - Allow find-tag to work in the build directory. + - rename src/gdbinit to src/.gdbinit, so that gdb can find it. + - Less verbose messages when creating .sbinit, .gdbinit, TAGS. + +2000-01-07 Marcus Thiessel + + * config.sub: Upgrade to 1.169, imported from autoconf's CVS + * config.guess: Upgrade to 1.158, imported from autoconf's CVS + +2000-01-03 Michael Sperber [Mr. Preprocessor] + + * etc/NEWS: Document mail spool locking overhaul. + + * configure.usage (--mail-locking): + * configure.in: Handle --mail-locking option correctly in + preparation for the movemail locking overhaul. + +2000-01-05 Daniel Pittman + + * configure.in (Installation): Report which Athena header/library + combo is being used. + 1999-12-31 Martin Buchholz * XEmacs 21.2.26 is released. diff --git a/README.packages b/README.packages index dbbc6c5..d618862 100644 --- a/README.packages +++ b/README.packages @@ -9,8 +9,10 @@ Real Real Quickstart FAQ ------------------------ Q. Do I need to have the packages to compile XEmacs? -A. If you want to compile with MULE, you need the mule-base package installed. - Otherwise, no package is required before compilation. +A. No, XEmacs will build and install just fine without any packages + installed. However, only the most basic editing functions will be + available with no packages installed, so installing packages is an + essential part of making your installed XEmacs _useful_. Q. I really liked the old way that packages were bundled and do not want to mess with packages at all. @@ -20,11 +22,11 @@ A. You can grab all the packages at once like you used to with old A note of caution ----------------- -The XEmacs package system is still in its infancy. Please expect a few -minor hurdles on the way. Also neither the interface nor the structure is +The XEmacs package system is still in its infancy. Please expect a few +minor hurdles on the way. Also neither the interface nor the structure is set in stone. The XEmacs maintainers reserve the right to sacrifice backwards compatibility as quirks are worked out over the coming -releases. +releases. Some Package Theory ------------------- @@ -35,7 +37,7 @@ have been unbundled. They have been replaced by the package system. Each elisp add-on (or groups of them when they are small) now comes in its own tarball that contains a small search hierarchy. -You select just the ones you need. Install them by untarring them into +You select just the ones you need. Install them by untarring them into the right place. On startup XEmacs will find them, set up the load path correctly, install autoloads, etc, etc. @@ -60,7 +62,7 @@ Where to get the packages ------------------------- Packages are available from ftp://ftp.xemacs.org/pub/xemacs/packages -and its mirror. +and its mirrors. How to install the packages --------------------------- @@ -73,14 +75,14 @@ The Sumo Tarball ---------------- Those with little time, cheap connections and plenty of disk space can -install all packages at once using the sumo tarballs. +install all the packages at once using the sumo tarballs. Download the file -xemacs-sumo-.tar.gz +xemacs-sumo.tar.gz For an XEmacs compiled with Mule you also need -xemacs-mule-sumo-.tar.gz +xemacs-mule-sumo.tar.gz N.B. They are called 'Sumo Tarballs' for good reason. They are currently about 15MB and 2.3MB (gzipped) respectively. @@ -120,8 +122,8 @@ XEmacs comes with some tools to make the periodic updating and installing easier. It will notice if new packages or versions are available and will fetch them from the ftp site. -Unfortunately this requires that a few packages are already in place. -You will have to install them by hand as above or use a SUMO tarball. +Unfortunately this requires that a few packages are already in place. +You will have to install them by hand as above or use a SUMO tarball. This requirement will hopefully go away in the future. The packages you need are: @@ -132,7 +134,7 @@ and optionally: mailcrypt - If you have PGP installed and want to verify the signature of the index file. - mule-base - Needed if you want to compile XEmacs with MULE. + mule-base - Needed if you want to use XEmacs with MULE. After installing these by hand, you can start XEmacs. (It is a good idea to use 'xemacs -vanilla' here as your startup files might need @@ -164,7 +166,7 @@ things now moved to packages.) - When you are finished choosing packages, invoke 'Packages->Install/Remove Select' from the menu or type 'x' to begin installing packages. - + After Installation ------------------ @@ -173,7 +175,7 @@ New packages can only be used by XEmacs after a restart. Note to MULE users ------------------ -Unlike all other packages the mule-base package is used at build/dump +Unlike all other packages the mule-base package is used at build/dump time. This means that you need this available before compiling XEmacs with MULE. Also it is a good idea to keep packages that are MULE-only separate by putting them in the mule-packages hierarchy. @@ -200,7 +202,7 @@ Upgrading/Removing Packages --------------------------- As the exact files and their locations contained in a package may -change it is recommend to remove a package first before installing a +change it is recommended to remove a package first before installing a new version. In order to facilitate removal each package contains an pgkinfo/MANIFEST.pkgname file which list all the files belong to the package. M-x package-admin-delete-binary-package RET can be used to @@ -230,7 +232,7 @@ Finding the right packages If you want to find out which package contains the functionality you are looking for, use M-x package-get-package-provider, and give it a -symbol that is likely to be in that package. eg, if some code you -want to use has a (require 'thingatpt) in it, try doing +symbol that is likely to be in that package. For example, if some +code you want to use has a (require 'thingatpt) in it, try doing M-x package-get-package-provider RET thingatpt , which will return something like: (fsf-compat "1.06"). diff --git a/config.guess b/config.guess index 7f2ead9..e1b5871 100755 --- a/config.guess +++ b/config.guess @@ -1,6 +1,7 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 +# Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -23,6 +24,7 @@ # Written by Per Bothner . # The master version of this file is at the FSF in /home/gd/gnu/lib. +# Please send patches to . # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and @@ -35,6 +37,20 @@ # (but try to keep the structure clean). # +# Use $HOST_CC if defined. $CC may point to a cross-compiler +if test x"$CC_FOR_BUILD" = x; then + if test x"$HOST_CC" != x; then + CC_FOR_BUILD="$HOST_CC" + else + if test x"$CC" != x; then + CC_FOR_BUILD="$CC" + else + CC_FOR_BUILD=cc + fi + fi +fi + + # 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 @@ -46,7 +62,8 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 # Note: order is significant - the case branches are not exclusive. @@ -59,7 +76,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - cat <dummy.s + cat <$dummy.s .globl main .ent main main: @@ -76,9 +93,9 @@ main: ret \$31,(\$26),1 .end main EOF - ${CC-cc} dummy.s -o dummy 2>/dev/null + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then - ./dummy + ./$dummy case "$?" in 7) UNAME_MACHINE="alpha" @@ -97,8 +114,14 @@ EOF ;; esac fi - rm -f dummy.s dummy - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]` + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 @@ -133,6 +156,9 @@ EOF wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; @@ -142,7 +168,7 @@ EOF SR2?01:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; - Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*) + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 @@ -150,7 +176,7 @@ EOF echo pyramid-pyramid-bsd fi exit 0 ;; - NILE:*:*:dcosx) + NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; sun4H:SunOS:5.*:*) @@ -201,6 +227,32 @@ EOF atari*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; sun3*:NetBSD:*:*) echo m68k-sun-netbsd${UNAME_RELEASE} exit 0 ;; @@ -234,12 +286,16 @@ EOF VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; - 2020:CLIX:*:*) + 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) - sed 's/^ //' << EOF >dummy.c - int main (argc, argv) int argc; char **argv; { + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); @@ -254,10 +310,10 @@ EOF exit (-1); } EOF - ${CC-cc} dummy.c -o dummy \ - && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD $dummy.c -o $dummy \ + && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Night_Hawk:Power_UNIX:*:*) @@ -275,15 +331,18 @@ EOF AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ - -o ${TARGET_BINARY_INTERFACE}x = x ] ; then + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then echo m88k-dg-dgux${UNAME_RELEASE} - else + else echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} fi - else echo i586-dg-dgux${UNAME_RELEASE} - fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 @@ -309,7 +368,7 @@ EOF exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - sed 's/^ //' << EOF >dummy.c + sed 's/^ //' << EOF >$dummy.c #include main() @@ -320,8 +379,8 @@ EOF exit(0); } EOF - ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD $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 echo rs6000-ibm-aix3.2.4 @@ -369,24 +428,24 @@ EOF 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) - sed 's/^ //' << EOF >dummy.c + sed 's/^ //' << EOF >$dummy.c #include #include - + int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); - #endif + #endif long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) + + switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: + case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) - switch (bits) + switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; @@ -394,20 +453,20 @@ EOF } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; - #endif + #endif default: puts ("hppa1.0"); break; } exit (0); } EOF - ${CC-cc} dummy.c -o dummy && HP_ARCH=`./dummy` - rm -f dummy.c dummy + (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + rm -f $dummy.c $dummy esac HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) - sed 's/^ //' << EOF >dummy.c + sed 's/^ //' << EOF >$dummy.c #include int main () @@ -432,8 +491,8 @@ EOF exit (0); } EOF - ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) @@ -442,6 +501,9 @@ EOF 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; + *9??*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; @@ -458,6 +520,9 @@ EOF parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; + hppa*:OpenBSD:*:*) + echo hppa-unknown-openbsd + exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; @@ -490,11 +555,14 @@ EOF CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} exit 0 ;; + CRAY*T3E:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} + exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; F300:UNIX_System_V:*:*) - FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; @@ -507,29 +575,47 @@ EOF hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; + i?86:BSD/386:*:* | i?86:BSD/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; - i?86:BSD/386:*:* | *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) + if test -x /usr/bin/objformat; then + if test "elf" = "`/usr/bin/objformat`"; then + echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'` + exit 0 + fi + fi 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/[-_].*/\./'` + echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'` exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin32 + echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i386-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin32 + echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` @@ -538,15 +624,11 @@ EOF echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:Linux:*:*) - # uname on the ARM produces all sorts of strangeness, and we need to - # filter it out. - case "$UNAME_MACHINE" in - arm* | sa110*) UNAME_MACHINE="arm" ;; - esac # The BFD linker knows what the default object file format is, so - # first see if it will tell us. - ld_help_string=`ld --help 2>&1` + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + ld_help_string=`cd /; ld --help 2>&1` ld_supported_emulations=`echo $ld_help_string \ | sed -ne '/supported emulations:/!d s/[ ][ ]*/ /g @@ -554,16 +636,74 @@ EOF s/ .*// p'` case "$ld_supported_emulations" in - i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; - i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; - sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; - armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; - m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; - elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;; + *ia64) + echo "${UNAME_MACHINE}-unknown-linux" + exit 0 + ;; + i?86linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 + ;; + i?86coff) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 + ;; + sparclinux) + echo "${UNAME_MACHINE}-unknown-linux-gnuaout" + exit 0 + ;; + armlinux) + echo "${UNAME_MACHINE}-unknown-linux-gnuaout" + exit 0 + ;; + elf32arm*) + echo "${UNAME_MACHINE}-unknown-linux-gnu" + exit 0 + ;; + armelf_linux*) + echo "${UNAME_MACHINE}-unknown-linux-gnu" + exit 0 + ;; + m68klinux) + echo "${UNAME_MACHINE}-unknown-linux-gnuaout" + exit 0 + ;; + elf32ppc) + # Determine Lib Version + cat >$dummy.c < +#if defined(__GLIBC__) +extern char __libc_version[]; +extern char __libc_release[]; +#endif +main(argc, argv) + int argc; + char *argv[]; +{ +#if defined(__GLIBC__) + printf("%s %s\n", __libc_version, __libc_release); +#else + printf("unkown\n"); +#endif + return 0; +} +EOF + LIBC="" + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null + if test "$?" = 0 ; then + ./$dummy | grep 1\.99 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f $dummy.c $dummy + echo powerpc-unknown-linux-gnu${LIBC} + exit 0 + ;; esac if test "${UNAME_MACHINE}" = "alpha" ; then - sed 's/^ //' <dummy.s + sed 's/^ //' <$dummy.s .globl main .ent main main: @@ -581,9 +721,9 @@ EOF .end main EOF LIBC="" - ${CC-cc} dummy.s -o dummy 2>/dev/null + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then - ./dummy + ./$dummy case "$?" in 7) UNAME_MACHINE="alpha" @@ -600,22 +740,23 @@ EOF 16) UNAME_MACHINE="alphaev6" ;; - esac + esac - objdump --private-headers dummy | \ + objdump --private-headers $dummy | \ grep ld.so.1 > /dev/null if test "$?" = 0 ; then LIBC="libc1" fi - fi - rm -f dummy.s dummy + fi + rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 elif test "${UNAME_MACHINE}" = "mips" ; then - cat >dummy.c <$dummy.c </dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy else # Either a pre-BFD a.out linker (linux-gnuoldld) # or one that does not give us useful --help. @@ -645,12 +786,13 @@ EOF ;; esac # Determine whether the default compiler is a.out or elf - cat >dummy.c <$dummy.c < -main(argc, argv) - int argc; - char *argv[]; -{ +#ifdef __cplusplus + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 @@ -667,8 +809,8 @@ main(argc, argv) return 0; } EOF - ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy fi ;; # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions # are messed up and put the nodename in both sysname and nodename. @@ -684,10 +826,20 @@ EOF echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i?86:*:5:7*) + # Fixed at (any) Pentium or better + UNAME_MACHINE=i586 + if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then + echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} fi exit 0 ;; i?86:*:3.2:*) @@ -699,18 +851,15 @@ EOF (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 + (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; - i?86:UnixWare:*:*) - if /bin/uname -X 2>/dev/null >/dev/null ; then - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - fi - echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION} - exit 0 ;; pc:*:*:*) # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. @@ -752,7 +901,7 @@ EOF mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; - i?86:LynxOS:2.*:*) + i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) @@ -764,6 +913,9 @@ EOF SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; @@ -794,7 +946,7 @@ EOF news*:NEWS-OS:*:6*) echo mips-sony-newsos6 exit 0 ;; - R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*) + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else @@ -810,12 +962,27 @@ EOF BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-qnx-qnx${UNAME_VERSION} + exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 -cat >dummy.c <$dummy.c < # include @@ -853,7 +1020,10 @@ main () #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif @@ -913,8 +1083,8 @@ main () } EOF -${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 -rm -f dummy.c dummy +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 +rm -f $dummy.c $dummy # Apollos put the system type in the environment. diff --git a/config.sub b/config.sub index f791166..28426bb 100755 --- a/config.sub +++ b/config.sub @@ -1,6 +1,6 @@ #! /bin/sh # Configuration validation subroutine script, version 1.1. -# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc. +# Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc. # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. @@ -98,11 +98,21 @@ case $os in os= basic_machine=$1 ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; -hiux*) os=-hiuxwe2 ;; -sco5) - os=sco3.2v5 + os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) @@ -121,6 +131,9 @@ case $os in os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` @@ -143,22 +156,33 @@ case $os in -psos*) os=-psos ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. - tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ + tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ - | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \ - | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \ - | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \ - | mips64 | mipsel | mips64el | mips64orion | mips64orionel \ - | mipstx39 | mipstx39el \ - | sparc | sparclet | sparclite | sparc64 | v850) + | 580 | i960 | h8300 \ + | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ + | alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \ + | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \ + | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ + | mips64orion | mips64orionel | mipstx39 | mipstx39el \ + | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ + | mips64vr5000 | miprs64vr5000el | mcore \ + | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ + | thumb | d10v | fr30) basic_machine=$basic_machine-unknown ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl) + ;; + # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. @@ -171,27 +195,45 @@ case $basic_machine in exit 1 ;; # Recognize the basic CPU types with company name. - vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \ + # FIXME: clean up the formatting here. + vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ - | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \ - | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \ - | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \ - | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ + | xmp-* | ymp-* \ + | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \ + | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \ + | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ + | clipper-* | orion-* \ | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ - | sparc64-* | mips64-* | mipsel-* \ - | mips64el-* | mips64orion-* | mips64orionel-* \ - | mipstx39-* | mipstx39el-* \ - | f301-*) + | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ + | mipstx39-* | mipstx39el-* | mcore-* \ + | f301-* | armv*-* | t3e-* \ + | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ + | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* ) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; alliant | fx80) basic_machine=fx80-alliant ;; @@ -221,6 +263,10 @@ case $basic_machine in basic_machine=m68k-apollo os=-sysv ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; aux) basic_machine=m68k-apple os=-aux @@ -297,6 +343,10 @@ case $basic_machine in encore | umax | mmax) basic_machine=ns32k-encore ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; fx2800) basic_machine=i860-alliant ;; @@ -315,6 +365,14 @@ case $basic_machine in basic_machine=h8300-hitachi os=-hms ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; harris) basic_machine=m88k-harris os=-sysv3 @@ -330,13 +388,30 @@ case $basic_machine in basic_machine=m68k-hp os=-hpux ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; - hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) @@ -345,9 +420,16 @@ case $basic_machine in hppa-next) os=-nextstep3 ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; i370-ibm* | ibm*) basic_machine=i370-ibm - os=-mvs ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i[34567]86v32) @@ -366,6 +448,25 @@ case $basic_machine in basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + i386-go32 | go32) + basic_machine=i386-unknown + os=-go32 + ;; + i386-mingw32 | mingw32) + basic_machine=i386-unknown + os=-mingw32 + ;; + i386-qnx | qnx) + basic_machine=i386-qnx + ;; iris | iris4d) basic_machine=mips-sgi case $os in @@ -394,6 +495,10 @@ case $basic_machine in miniframe) basic_machine=m68000-convergent ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; mipsel*-linux*) basic_machine=mipsel-unknown os=-linux-gnu @@ -408,10 +513,30 @@ case $basic_machine in mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + msdos) + basic_machine=i386-unknown + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos @@ -424,6 +549,10 @@ case $basic_machine in basic_machine=mips-sony os=-newsos ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; next | m*-next ) basic_machine=m68k-next case $os in @@ -449,9 +578,25 @@ case $basic_machine in basic_machine=i960-intel os=-nindy ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; np1) basic_machine=np1-gould ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 @@ -469,19 +614,19 @@ case $basic_machine in pc532 | pc532-*) basic_machine=ns32k-pc532 ;; - pentium | p5 | k5 | nexen) + pentium | p5 | k5 | k6 | nexen) basic_machine=i586-pc ;; - pentiumpro | p6 | k6 | 6x86) + pentiumpro | p6 | 6x86) basic_machine=i686-pc ;; pentiumii | pentium2) basic_machine=i786-pc ;; - pentium-* | p5-* | k5-* | nexen-*) + pentium-* | p5-* | k5-* | k6-* | nexen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - pentiumpro-* | p6-* | k6-* | 6x86-*) + pentiumpro-* | p6-* | 6x86-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) @@ -505,12 +650,20 @@ case $basic_machine in ps2) basic_machine=i386-ibm ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; sequent) basic_machine=i386-sequent ;; @@ -518,6 +671,10 @@ case $basic_machine in basic_machine=sh-hitachi os=-hms ;; + sparclite-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; sps7) basic_machine=m68k-bull os=-sysv2 @@ -525,6 +682,13 @@ case $basic_machine in spur) basic_machine=spur-unknown ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; sun2) basic_machine=m68000-sun ;; @@ -569,6 +733,10 @@ case $basic_machine in basic_machine=i386-sequent os=-dynix ;; + t3e) + basic_machine=t3e-cray + os=-unicos + ;; tx39) basic_machine=mipstx39-unknown ;; @@ -586,6 +754,10 @@ case $basic_machine in basic_machine=a29k-nyu os=-sym1 ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; vaxv) basic_machine=vax-dec os=-sysv @@ -609,6 +781,14 @@ case $basic_machine in basic_machine=a29k-wrs os=-vxworks ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; xmp) basic_machine=xmp-cray os=-unicos @@ -616,6 +796,10 @@ case $basic_machine in xps | xps100) basic_machine=xps100-honeywell ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -623,6 +807,15 @@ case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; mips) if [ x$os = x-linux-gnu ]; then basic_machine=mips-unknown @@ -645,7 +838,7 @@ case $basic_machine in we32k) basic_machine=we32k-att ;; - sparc) + sparc | sparcv9) basic_machine=sparc-sun ;; cydra) @@ -657,6 +850,16 @@ case $basic_machine in orion105) basic_machine=clipper-highlevel ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + c4x*) + basic_machine=c4x-none + os=-coff + ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 @@ -710,13 +913,21 @@ case $os in | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -uxpv* | -beos*) + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -rhapsody* | -opened* | -openstep* | -oskit*) # Remember, each alternative MUST END IN *, to match a version number. ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; @@ -726,6 +937,9 @@ case $os in -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; + -opened*) + os=-openedition + ;; -osfrose*) os=-osfrose ;; @@ -741,6 +955,9 @@ case $os in -acis*) os=-aos ;; + -386bsd) + os=-bsd + ;; -ctix* | -uts*) os=-sysv ;; @@ -760,6 +977,9 @@ case $os in -oss*) os=-sysv3 ;; + -qnx) + os=-qnx4 + ;; -svr4) os=-sysv4 ;; @@ -772,9 +992,18 @@ case $os in # This must come after -sysvr4. -sysv*) ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; -xenix) os=-xenix ;; + -*mint | -*MiNT) + os=-mint + ;; -none) ;; *) @@ -800,6 +1029,9 @@ case $basic_machine in *-acorn) os=-riscix1.2 ;; + arm*-rebel) + os=-linux + ;; arm*-semi) os=-aout ;; @@ -821,6 +1053,15 @@ case $basic_machine in # default. # os=-sunos4 ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; @@ -833,6 +1074,15 @@ case $basic_machine in *-ibm) os=-aix ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; *-hp) os=-hpux ;; @@ -896,6 +1146,18 @@ case $basic_machine in f301-fujitsu) os=-uxpv ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; *) os=-none ;; @@ -917,9 +1179,15 @@ case $basic_machine in -aix*) vendor=ibm ;; + -beos*) + vendor=be + ;; -hpux*) vendor=hp ;; + -mpeix*) + vendor=hp + ;; -hiux*) vendor=hitachi ;; @@ -935,7 +1203,7 @@ case $basic_machine in -genix*) vendor=ns ;; - -mvs*) + -mvs* | -opened*) vendor=ibm ;; -ptx*) @@ -947,6 +1215,15 @@ case $basic_machine in -aux*) vendor=apple ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -*MiNT) + vendor=atari + ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; diff --git a/configure b/configure index 2f6aca0..fbc135d 100755 --- a/configure +++ b/configure @@ -517,10 +517,11 @@ echo " Use \`$progname --help' to show usage.") >&2 && exit 1 ;; case "$val" in lockf ) val=lockf ;; flock ) val=flock ;; - file ) val=file ;; + file | dot ) val=file ;; + locking ) val=locking ;; * ) (echo "$progname: Usage error:" echo " " "The \`--$optname' option must have one of these values: - \`lockf', \`flock', or \`file'." + \`lockf', \`flock', \`file', \`locking', or \`mmdf'." echo " Use \`$progname --help' to show usage.") >&2 && exit 1 ;; esac eval "$opt=\"$val\"" @@ -832,7 +833,7 @@ echo " Use \`$progname --help' to show usage.") >&2 && exit 1 fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:836: checking whether ln -s works" >&5 +echo "configure:837: checking whether ln -s works" >&5 rm -f conftestdata if ln -s X conftestdata 2>/dev/null @@ -850,7 +851,7 @@ else fi -for dir in lisp etc man info; do +for dir in lisp etc man info tests; do if test ! -d "$dir" ; then echo Making symbolic link to "$srcdir/$dir" ${LN_S} "$srcdir/$dir" "$dir" @@ -1077,7 +1078,7 @@ EOF echo $ac_n "checking "host system type"""... $ac_c" 1>&6 -echo "configure:1081: checking "host system type"" >&5 +echo "configure:1082: checking "host system type"" >&5 internal_configuration=`echo $configuration | sed 's/-\(workshop\)//'` canonical=`${CONFIG_SHELL-/bin/sh} $srcdir/config.sub "$internal_configuration"` configuration=`echo "$configuration" | sed 's/^\([^-][^-]*-[^-][^-]*-[^-][^-]*\)-.*$/\1/'` @@ -1571,7 +1572,7 @@ xe_save_CFLAGS="$CFLAGS" # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1575: checking for $ac_word" >&5 +echo "configure:1576: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1598,7 +1599,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1602: checking for $ac_word" >&5 +echo "configure:1603: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1646,7 +1647,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1650: checking for $ac_word" >&5 +echo "configure:1651: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1675,7 +1676,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1679: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:1680: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS' @@ -1688,12 +1689,12 @@ cross_compiling=no cat > conftest.$ac_ext << EOF -#line 1692 "configure" +#line 1693 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:1697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -1721,19 +1722,19 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1725: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:1726: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1730: checking whether we are using GNU C" >&5 +echo "configure:1731: checking whether we are using GNU C" >&5 cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1738: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1751,7 +1752,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1755: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1756: checking whether ${CC-cc} accepts -g" >&5 echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then @@ -1784,7 +1785,7 @@ if test "$with_gcc" = "no" -a "$GCC" = "yes"; then # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1788: checking for $ac_word" >&5 +echo "configure:1789: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1811,7 +1812,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1815: checking for $ac_word" >&5 +echo "configure:1816: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1859,7 +1860,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1863: checking for $ac_word" >&5 +echo "configure:1864: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1888,7 +1889,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1892: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:1893: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS' @@ -1901,12 +1902,12 @@ cross_compiling=no cat > conftest.$ac_ext << EOF -#line 1905 "configure" +#line 1906 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:1910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -1934,19 +1935,19 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1938: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:1939: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1943: checking whether we are using GNU C" >&5 +echo "configure:1944: checking whether we are using GNU C" >&5 cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1951: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1964,7 +1965,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1968: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1969: checking whether ${CC-cc} accepts -g" >&5 echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then @@ -1997,7 +1998,7 @@ elif test "$with_gcc" = "yes" -a "$GCC" != "yes" ; then # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2001: checking for $ac_word" >&5 +echo "configure:2002: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2024,7 +2025,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2028: checking for $ac_word" >&5 +echo "configure:2029: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2072,7 +2073,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2076: checking for $ac_word" >&5 +echo "configure:2077: checking for $ac_word" >&5 if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2101,7 +2102,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:2105: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:2106: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c xe_cppflags='$CPPFLAGS $c_switch_site $c_switch_machine $c_switch_system $c_switch_x_site $X_CFLAGS' @@ -2114,12 +2115,12 @@ cross_compiling=no cat > conftest.$ac_ext << EOF -#line 2118 "configure" +#line 2119 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:2123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -2147,19 +2148,19 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:2151: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:2152: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:2156: checking whether we are using GNU C" >&5 +echo "configure:2157: checking whether we are using GNU C" >&5 cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:2164: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -2177,7 +2178,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:2181: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:2182: checking whether ${CC-cc} accepts -g" >&5 echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then @@ -2214,7 +2215,7 @@ test -n "$CPP" -a -d "$CPP" && CPP= test -n "$NON_GNU_CPP" -a "$GCC" != "yes" -a -z "$CPP" && CPP="$NON_GNU_CPP" echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:2218: checking how to run the C preprocessor" >&5 +echo "configure:2219: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -2227,13 +2228,13 @@ if test -z "$CPP"; then # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2237: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2238: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -2244,13 +2245,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2254: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2255: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -2261,13 +2262,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2271: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2272: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -2292,9 +2293,9 @@ echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for AIX""... $ac_c" 1>&6 -echo "configure:2296: checking for AIX" >&5 +echo "configure:2297: checking for AIX" >&5 cat > conftest.$ac_ext <&6 -echo "configure:2325: checking for GNU libc" >&5 +echo "configure:2326: checking for GNU libc" >&5 cat > conftest.$ac_ext < int main() { @@ -2335,7 +2336,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:2339: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* have_glibc=yes else @@ -2357,7 +2358,7 @@ EOF cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:2374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then : else @@ -2542,6 +2543,12 @@ configure___ mail_use_lockf=yes configure___ mail_use_lockf=no #endif +#ifdef MAIL_USE_LOCKING +configure___ mail_use_locking=yes +#else +configure___ mail_use_locking=no +#endif + #ifdef HAVE_WIN32_PROCESSES configure___ win32_processes=yes #else @@ -2559,6 +2566,12 @@ rm $tempcname test "$extra_verbose" = "yes" && \ for var in libs_machine libs_system libs_termcap libs_standard objects_machine objects_system c_switch_machine c_switch_system ld_switch_machine ld_switch_system unexec ld_switch_shared ld lib_gcc ld_text_start_addr start_files ordinary_link have_terminfo mail_use_flock mail_use_lockf; do eval "echo \"$var = '\$$var'\""; done && echo "" +case "$opsys" in mingw*) mingw_include=`eval "gcc -print-file-name=libc.a"` ; + mingw_include=`eval "dirname $mingw_include"` ; + mingw_include="-I$mingw_include/../include/mingw32" ; + c_switch_system="$c_switch_system $mingw_include" && if test "$extra_verbose" = "yes"; then echo " Appending \"$mingw_include\" to \$c_switch_system"; fi ;; +esac + test "$ordinary_link" = "no" -a -z "$libs_standard" && libs_standard="-lc" test "$__DECC" = "yes" && c_switch_site="$c_switch_site -std" && if test "$extra_verbose" = "yes"; then echo " Appending \"-std\" to \$c_switch_site"; fi @@ -2643,7 +2656,7 @@ test -n "$unexec" && extra_objs="$extra_objs $unexec" && if test "$ext fi echo $ac_n "checking for dynodump""... $ac_c" 1>&6 -echo "configure:2647: checking for dynodump" >&5 +echo "configure:2660: checking for dynodump" >&5 if test "$unexec" != "unexsol2.o"; then echo "$ac_t""no" 1>&6 else @@ -2681,12 +2694,12 @@ if test "$unexec" = "unexaix.o"; then done echo $ac_n "checking for terminateAndUnload in -lC""... $ac_c" 1>&6 -echo "configure:2685: checking for terminateAndUnload in -lC" >&5 +echo "configure:2698: checking for terminateAndUnload in -lC" >&5 ac_lib_var=`echo C'_'terminateAndUnload | sed 'y%./+-%__p_%'` xe_check_libs=" -lC " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2801,7 +2814,7 @@ fi if test "$add_runtime_path" = "yes"; then echo $ac_n "checking "for runtime libraries flag"""... $ac_c" 1>&6 -echo "configure:2805: checking "for runtime libraries flag"" >&5 +echo "configure:2818: checking "for runtime libraries flag"" >&5 case "$opsys" in sol2 ) dash_r="-R" ;; decosf* | linux* | irix*) dash_r="-rpath " ;; @@ -2823,14 +2836,14 @@ if test "$GCC" = "yes"; then done fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* dash_r="$try_dash_r" else @@ -2932,10 +2945,10 @@ else fi after_morecore_hook_exists=yes echo $ac_n "checking for malloc_get_state""... $ac_c" 1>&6 -echo "configure:2936: checking for malloc_get_state" >&5 +echo "configure:2949: checking for malloc_get_state" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_malloc_get_state=yes" else @@ -2978,10 +2991,10 @@ doug_lea_malloc=no fi echo $ac_n "checking for malloc_set_state""... $ac_c" 1>&6 -echo "configure:2982: checking for malloc_set_state" >&5 +echo "configure:2995: checking for malloc_set_state" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_malloc_set_state=yes" else @@ -3024,16 +3037,16 @@ doug_lea_malloc=no fi echo $ac_n "checking whether __after_morecore_hook exists""... $ac_c" 1>&6 -echo "configure:3028: checking whether __after_morecore_hook exists" >&5 +echo "configure:3041: checking whether __after_morecore_hook exists" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else @@ -3092,7 +3105,7 @@ fi # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3096: checking for $ac_word" >&5 +echo "configure:3109: checking for $ac_word" >&5 if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -3147,7 +3160,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:3151: checking for a BSD compatible install" >&5 +echo "configure:3164: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" @@ -3201,7 +3214,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3205: checking for $ac_word" >&5 +echo "configure:3218: checking for $ac_word" >&5 if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. @@ -3233,15 +3246,15 @@ for ac_hdr in mach/mach.h sys/stropts.h sys/timeb.h sys/time.h unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3237: checking for $ac_hdr" >&5 +echo "configure:3250: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3245: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3258: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3274,15 +3287,15 @@ for ac_hdr in utime.h locale.h libgen.h fcntl.h ulimit.h cygwin/version.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3278: checking for $ac_hdr" >&5 +echo "configure:3291: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3286: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3299: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3315,15 +3328,15 @@ for ac_hdr in kstat.h sys/pstat.h inttypes.h sys/un.h a.out.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3319: checking for $ac_hdr" >&5 +echo "configure:3332: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3327: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3340: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3353,10 +3366,10 @@ fi done echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:3357: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:3370: checking for sys/wait.h that is POSIX.1 compatible" >&5 cat > conftest.$ac_ext < #include @@ -3372,7 +3385,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:3376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -3396,10 +3409,10 @@ EOF fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:3400: checking for ANSI C header files" >&5 +echo "configure:3413: checking for ANSI C header files" >&5 cat > conftest.$ac_ext < #include @@ -3407,7 +3420,7 @@ cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3411: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3424: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3424,7 +3437,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -3442,7 +3455,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -3460,7 +3473,7 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -3471,7 +3484,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:3475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:3488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then : else @@ -3497,10 +3510,10 @@ EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:3501: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:3514: checking whether time.h and sys/time.h may both be included" >&5 cat > conftest.$ac_ext < #include @@ -3509,7 +3522,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:3513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3526: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -3533,10 +3546,10 @@ EOF fi echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6 -echo "configure:3537: checking for sys_siglist declaration in signal.h or unistd.h" >&5 +echo "configure:3550: checking for sys_siglist declaration in signal.h or unistd.h" >&5 cat > conftest.$ac_ext < #include @@ -3548,7 +3561,7 @@ int main() { char *msg = *(sys_siglist + 1); ; return 0; } EOF -if { (eval echo configure:3552: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3565: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_decl_sys_siglist=yes else @@ -3573,9 +3586,9 @@ fi echo $ac_n "checking for struct utimbuf""... $ac_c" 1>&6 -echo "configure:3577: checking for struct utimbuf" >&5 +echo "configure:3590: checking for struct utimbuf" >&5 cat > conftest.$ac_ext < @@ -3594,7 +3607,7 @@ int main() { static struct utimbuf x; x.actime = x.modtime; ; return 0; } EOF -if { (eval echo configure:3598: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3611: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF @@ -3614,10 +3627,10 @@ fi rm -f conftest* echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3618: checking return type of signal handlers" >&5 +echo "configure:3631: checking return type of signal handlers" >&5 cat > conftest.$ac_ext < #include @@ -3634,7 +3647,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3638: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3656,10 +3669,10 @@ EOF echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3660: checking for size_t" >&5 +echo "configure:3673: checking for size_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3690,10 +3703,10 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3694: checking for pid_t" >&5 +echo "configure:3707: checking for pid_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3724,10 +3737,10 @@ EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3728: checking for uid_t in sys/types.h" >&5 +echo "configure:3741: checking for uid_t in sys/types.h" >&5 cat > conftest.$ac_ext < EOF @@ -3763,10 +3776,10 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3767: checking for mode_t" >&5 +echo "configure:3780: checking for mode_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3797,10 +3810,10 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3801: checking for off_t" >&5 +echo "configure:3814: checking for off_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3831,10 +3844,10 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3835: checking for ssize_t" >&5 +echo "configure:3848: checking for ssize_t" >&5 cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3866,9 +3879,9 @@ fi echo $ac_n "checking for struct timeval""... $ac_c" 1>&6 -echo "configure:3870: checking for struct timeval" >&5 +echo "configure:3883: checking for struct timeval" >&5 cat > conftest.$ac_ext < @@ -3884,7 +3897,7 @@ int main() { static struct timeval x; x.tv_sec = x.tv_usec; ; return 0; } EOF -if { (eval echo configure:3888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 HAVE_TIMEVAL=yes @@ -3906,10 +3919,10 @@ fi rm -f conftest* echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 -echo "configure:3910: checking whether struct tm is in sys/time.h or time.h" >&5 +echo "configure:3923: checking whether struct tm is in sys/time.h or time.h" >&5 cat > conftest.$ac_ext < #include @@ -3917,7 +3930,7 @@ int main() { struct tm *tp; tp->tm_sec; ; return 0; } EOF -if { (eval echo configure:3921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3934: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else @@ -3941,10 +3954,10 @@ EOF fi echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 -echo "configure:3945: checking for tm_zone in struct tm" >&5 +echo "configure:3958: checking for tm_zone in struct tm" >&5 cat > conftest.$ac_ext < #include <$ac_cv_struct_tm> @@ -3952,7 +3965,7 @@ int main() { struct tm tm; tm.tm_zone; ; return 0; } EOF -if { (eval echo configure:3956: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm_zone=yes else @@ -3975,10 +3988,10 @@ EOF else echo $ac_n "checking for tzname""... $ac_c" 1>&6 -echo "configure:3979: checking for tzname" >&5 +echo "configure:3992: checking for tzname" >&5 cat > conftest.$ac_ext < #ifndef tzname /* For SGI. */ @@ -3988,7 +4001,7 @@ int main() { atoi(*tzname); ; return 0; } EOF -if { (eval echo configure:3992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_var_tzname=yes else @@ -4014,10 +4027,10 @@ fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:4018: checking for working const" >&5 +echo "configure:4031: checking for working const" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -4091,7 +4104,7 @@ fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:4095: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "configure:4108: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` cat > conftestmake <<\EOF @@ -4116,12 +4129,12 @@ fi echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:4120: checking whether byte ordering is bigendian" >&5 +echo "configure:4133: checking whether byte ordering is bigendian" >&5 ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -4132,11 +4145,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:4136: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4149: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -4147,7 +4160,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:4151: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -4164,7 +4177,7 @@ fi rm -f conftest* if test $ac_cv_c_bigendian = unknown; then cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_c_bigendian=no else @@ -4204,10 +4217,10 @@ fi echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:4208: checking size of short" >&5 +echo "configure:4221: checking size of short" >&5 cat > conftest.$ac_ext < main() @@ -4218,7 +4231,7 @@ main() exit(0); } EOF -if { (eval echo configure:4222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4235: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_short=`cat conftestval` else @@ -4246,10 +4259,10 @@ if test "$ac_cv_sizeof_short" = 0; then exit 1 fi echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:4250: checking size of int" >&5 +echo "configure:4263: checking size of int" >&5 cat > conftest.$ac_ext < main() @@ -4260,7 +4273,7 @@ main() exit(0); } EOF -if { (eval echo configure:4264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_int=`cat conftestval` else @@ -4282,10 +4295,10 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:4286: checking size of long" >&5 +echo "configure:4299: checking size of long" >&5 cat > conftest.$ac_ext < main() @@ -4296,7 +4309,7 @@ main() exit(0); } EOF -if { (eval echo configure:4300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4313: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_long=`cat conftestval` else @@ -4318,10 +4331,10 @@ EOF echo $ac_n "checking size of long long""... $ac_c" 1>&6 -echo "configure:4322: checking size of long long" >&5 +echo "configure:4335: checking size of long long" >&5 cat > conftest.$ac_ext < main() @@ -4332,7 +4345,7 @@ main() exit(0); } EOF -if { (eval echo configure:4336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_long_long=`cat conftestval` else @@ -4354,10 +4367,10 @@ EOF echo $ac_n "checking size of void *""... $ac_c" 1>&6 -echo "configure:4358: checking size of void *" >&5 +echo "configure:4371: checking size of void *" >&5 cat > conftest.$ac_ext < main() @@ -4368,7 +4381,7 @@ main() exit(0); } EOF -if { (eval echo configure:4372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:4385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_sizeof_void_p=`cat conftestval` else @@ -4391,7 +4404,7 @@ EOF echo $ac_n "checking for long file names""... $ac_c" 1>&6 -echo "configure:4395: checking for long file names" >&5 +echo "configure:4408: checking for long file names" >&5 ac_cv_sys_long_file_names=yes # Test for long file names in all the places we know might matter: @@ -4437,10 +4450,10 @@ fi echo $ac_n "checking for sin""... $ac_c" 1>&6 -echo "configure:4441: checking for sin" >&5 +echo "configure:4454: checking for sin" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_sin=yes" else @@ -4481,12 +4494,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6 -echo "configure:4485: checking for sin in -lm" >&5 +echo "configure:4498: checking for sin in -lm" >&5 ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'` xe_check_libs=" -lm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4541,14 +4554,14 @@ EOF cat > conftest.$ac_ext < int main() { return atanh(1.0) + asinh(1.0) + acosh(1.0); ; return 0; } EOF -if { (eval echo configure:4552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_INVERSE_HYPERBOLIC @@ -4565,37 +4578,115 @@ fi rm -f conftest* echo "checking type of mail spool file locking" 1>&6 -echo "configure:4569: checking type of mail spool file locking" >&5 +echo "configure:4582: checking type of mail spool file locking" >&5 +for ac_func in lockf flock +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:4586: checking for $ac_func" >&5 + +cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* 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 +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + { test "$extra_verbose" = "yes" && cat << EOF + Defining $ac_tr_func +EOF +cat >> confdefs.h <&6 +fi +done + test -z "$mail_locking" -a "$mail_use_flock" = "yes" && mail_locking=flock test -z "$mail_locking" -a "$mail_use_lockf" = "yes" && mail_locking=lockf +test -z "$mail_locking" -a "$mail_use_locking" = "yes" && mail_locking=locking if test "$mail_locking" = "lockf"; then { test "$extra_verbose" = "yes" && cat << \EOF - Defining REAL_MAIL_USE_LOCKF + Defining MAIL_LOCK_LOCKF EOF cat >> confdefs.h <<\EOF -#define REAL_MAIL_USE_LOCKF 1 +#define MAIL_LOCK_LOCKF 1 EOF } elif test "$mail_locking" = "flock"; then { test "$extra_verbose" = "yes" && cat << \EOF - Defining REAL_MAIL_USE_FLOCK + Defining MAIL_LOCK_FLOCK EOF cat >> confdefs.h <<\EOF -#define REAL_MAIL_USE_FLOCK 1 +#define MAIL_LOCK_FLOCK 1 +EOF +} + +elif test "$mail_locking" = "locking"; then { test "$extra_verbose" = "yes" && cat << \EOF + Defining MAIL_LOCK_LOCKING +EOF +cat >> confdefs.h <<\EOF +#define MAIL_LOCK_LOCKING 1 +EOF +} + +else mail_locking="dot-locking"; { test "$extra_verbose" = "yes" && cat << \EOF + Defining MAIL_LOCK_DOT +EOF +cat >> confdefs.h <<\EOF +#define MAIL_LOCK_DOT 1 EOF } -else mail_locking="dot-locking" fi +test "$mail_locking" = "lockf" -a "$ac_cv_func_lockf" != "yes" && \ + { echo "Error:" "lockf mail locking requested but not available." >&2; exit 1; } +test "$mail_locking" = "flock" -a "$ac_cv_func_flock" != "yes" && \ + { echo "Error:" "flock mail locking requested but not available." >&2; exit 1; } +test "$mail_locking" = "locking" -a "$ac_cv_func_locking" != "yes" && \ + { echo "Error:" "locking mail locking requested but not available." >&2; exit 1; } case "$opsys" in decosf*) echo $ac_n "checking for cma_open in -lpthreads""... $ac_c" 1>&6 -echo "configure:4594: checking for cma_open in -lpthreads" >&5 +echo "configure:4685: checking for cma_open in -lpthreads" >&5 ac_lib_var=`echo pthreads'_'cma_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lpthreads " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4701: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4642,7 +4733,7 @@ fi esac echo $ac_n "checking whether the -xildoff compiler flag is required""... $ac_c" 1>&6 -echo "configure:4646: checking whether the -xildoff compiler flag is required" >&5 +echo "configure:4737: checking whether the -xildoff compiler flag is required" >&5 if ${CC-cc} '-###' -xildon no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/null ; then if ${CC-cc} '-###' -xildoff no_such_file.c 2>&1 | grep '^[^ ]*/ild ' > /dev/null ; then echo "$ac_t""no" 1>&6; @@ -4653,7 +4744,7 @@ fi if test "$opsys" = "sol2" && test "$OS_RELEASE" -ge 56; then echo $ac_n "checking for \"-z ignore\" linker flag""... $ac_c" 1>&6 -echo "configure:4657: checking for \"-z ignore\" linker flag" >&5 +echo "configure:4748: checking for \"-z ignore\" linker flag" >&5 case "`ld -h 2>&1`" in *-z\ ignore\|record* ) echo "$ac_t""yes" 1>&6 ld_switch_site="-z ignore $ld_switch_site" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-z ignore\" to \$ld_switch_site"; fi ;; @@ -4663,7 +4754,7 @@ fi echo "checking "for specified window system"" 1>&6 -echo "configure:4667: checking "for specified window system"" >&5 +echo "configure:4758: checking "for specified window system"" >&5 if test "$with_x11" != "no"; then test "$x_includes $x_libraries" != "NONE NONE" && \ @@ -4696,7 +4787,7 @@ if test "$with_x11" != "no"; then # Uses ac_ vars as temps to allow command line to override cache and checks. # --without-x overrides everything else, but does not touch the cache. echo $ac_n "checking for X""... $ac_c" 1>&6 -echo "configure:4700: checking for X" >&5 +echo "configure:4791: checking for X" >&5 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then @@ -4756,12 +4847,12 @@ if test "$ac_x_includes" = NO; then # First, try using that file with no special directory specified. cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4765: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4856: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4830,14 +4921,14 @@ if test "$ac_x_libraries" = NO; then ac_save_LIBS="$LIBS" LIBS="-l$x_direct_test_library $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4932: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* LIBS="$ac_save_LIBS" # We can link X programs with no special library path. @@ -4946,17 +5037,17 @@ else case "`(uname -sr) 2>/dev/null`" in "SunOS 5"*) echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6 -echo "configure:4950: checking whether -R must be followed by a space" >&5 +echo "configure:5041: checking whether -R must be followed by a space" >&5 ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_R_nospace=yes else @@ -4972,14 +5063,14 @@ rm -f conftest* else LIBS="$ac_xsave_LIBS -R $x_libraries" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_R_space=yes else @@ -5015,12 +5106,12 @@ ac_cv_lib_dnet_dnet_ntoa=no else echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6 -echo "configure:5019: checking for dnet_ntoa in -ldnet" >&5 +echo "configure:5110: checking for dnet_ntoa in -ldnet" >&5 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'` xe_check_libs=" -ldnet " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5055,12 +5146,12 @@ fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6 -echo "configure:5059: checking for dnet_ntoa in -ldnet_stub" >&5 +echo "configure:5150: checking for dnet_ntoa in -ldnet_stub" >&5 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'` xe_check_libs=" -ldnet_stub " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5100,10 +5191,10 @@ fi # The nsl library prevents programs from opening the X display # on Irix 5.2, according to dickey@clark.net. echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 -echo "configure:5104: checking for gethostbyname" >&5 +echo "configure:5195: checking for gethostbyname" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_gethostbyname=yes" else @@ -5147,12 +5238,12 @@ fi if test $ac_cv_func_gethostbyname = no; then echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 -echo "configure:5151: checking for gethostbyname in -lnsl" >&5 +echo "configure:5242: checking for gethostbyname in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` xe_check_libs=" -lnsl " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5193,10 +5284,10 @@ fi # -lsocket must be given before -lnsl if both are needed. # We assume that if connect needs -lnsl, so does gethostbyname. echo $ac_n "checking for connect""... $ac_c" 1>&6 -echo "configure:5197: checking for connect" >&5 +echo "configure:5288: checking for connect" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_connect=yes" else @@ -5242,12 +5333,12 @@ fi xe_msg_checking="for connect in -lsocket" test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:5246: checking "$xe_msg_checking"" >&5 +echo "configure:5337: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` xe_check_libs=" -lsocket $X_EXTRA_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5282,10 +5373,10 @@ fi # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX. echo $ac_n "checking for remove""... $ac_c" 1>&6 -echo "configure:5286: checking for remove" >&5 +echo "configure:5377: checking for remove" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_remove=yes" else @@ -5329,12 +5420,12 @@ fi if test $ac_cv_func_remove = no; then echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6 -echo "configure:5333: checking for remove in -lposix" >&5 +echo "configure:5424: checking for remove in -lposix" >&5 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'` xe_check_libs=" -lposix " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5369,10 +5460,10 @@ fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo $ac_n "checking for shmat""... $ac_c" 1>&6 -echo "configure:5373: checking for shmat" >&5 +echo "configure:5464: checking for shmat" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5490: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_shmat=yes" else @@ -5416,12 +5507,12 @@ fi if test $ac_cv_func_shmat = no; then echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6 -echo "configure:5420: checking for shmat in -lipc" >&5 +echo "configure:5511: checking for shmat in -lipc" >&5 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'` xe_check_libs=" -lipc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5468,12 +5559,12 @@ fi xe_msg_checking="for IceConnectionNumber in -lICE" test -n "$X_EXTRA_LIBS" && xe_msg_checking="$xe_msg_checking using extra libs $X_EXTRA_LIBS" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:5472: checking "$xe_msg_checking"" >&5 +echo "configure:5563: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'` xe_check_libs=" -lICE $X_EXTRA_LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5653,7 +5744,7 @@ EOF echo "checking for X defines extracted by xmkmf" 1>&6 -echo "configure:5657: checking for X defines extracted by xmkmf" >&5 +echo "configure:5748: checking for X defines extracted by xmkmf" >&5 rm -fr conftestdir if mkdir conftestdir; then cd conftestdir @@ -5685,15 +5776,15 @@ EOF ac_safe=`echo "X11/Intrinsic.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Intrinsic.h""... $ac_c" 1>&6 -echo "configure:5689: checking for X11/Intrinsic.h" >&5 +echo "configure:5780: checking for X11/Intrinsic.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5697: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5788: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5717,12 +5808,12 @@ fi echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6 -echo "configure:5721: checking for XOpenDisplay in -lX11" >&5 +echo "configure:5812: checking for XOpenDisplay in -lX11" >&5 ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5758,12 +5849,12 @@ fi xe_msg_checking="for XGetFontProperty in -lX11" test -n "-b i486-linuxaout" && xe_msg_checking="$xe_msg_checking using extra libs -b i486-linuxaout" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:5762: checking "$xe_msg_checking"" >&5 +echo "configure:5853: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo X11'_'XGetFontProperty | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 -b i486-linuxaout" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5801,12 +5892,12 @@ fi echo $ac_n "checking for XShapeSelectInput in -lXext""... $ac_c" 1>&6 -echo "configure:5805: checking for XShapeSelectInput in -lXext" >&5 +echo "configure:5896: checking for XShapeSelectInput in -lXext" >&5 ac_lib_var=`echo Xext'_'XShapeSelectInput | sed 'y%./+-%__p_%'` xe_check_libs=" -lXext " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5912: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5840,12 +5931,12 @@ fi echo $ac_n "checking for XtOpenDisplay in -lXt""... $ac_c" 1>&6 -echo "configure:5844: checking for XtOpenDisplay in -lXt" >&5 +echo "configure:5935: checking for XtOpenDisplay in -lXt" >&5 ac_lib_var=`echo Xt'_'XtOpenDisplay | sed 'y%./+-%__p_%'` xe_check_libs=" -lXt " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5879,14 +5970,14 @@ fi echo $ac_n "checking the version of X11 being used""... $ac_c" 1>&6 -echo "configure:5883: checking the version of X11 being used" >&5 +echo "configure:5974: checking the version of X11 being used" >&5 cat > conftest.$ac_ext < int main(int c, char *v[]) { return c>1 ? XlibSpecificationRelease : 0; } EOF -if { (eval echo configure:5890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:5981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ./conftest foobar; x11_release=$? else @@ -5911,15 +6002,15 @@ EOF do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5915: checking for $ac_hdr" >&5 +echo "configure:6006: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5923: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6014: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5950,7 +6041,7 @@ done echo $ac_n "checking for XFree86""... $ac_c" 1>&6 -echo "configure:5954: checking for XFree86" >&5 +echo "configure:6045: checking for XFree86" >&5 if test -d "/usr/X386/include" -o \ -f "/etc/XF86Config" -o \ -f "/etc/X11/XF86Config" -o \ @@ -5970,12 +6061,12 @@ EOF test -z "$with_xmu" && { echo $ac_n "checking for XmuReadBitmapDataFromFile in -lXmu""... $ac_c" 1>&6 -echo "configure:5974: checking for XmuReadBitmapDataFromFile in -lXmu" >&5 +echo "configure:6065: checking for XmuReadBitmapDataFromFile in -lXmu" >&5 ac_lib_var=`echo Xmu'_'XmuReadBitmapDataFromFile | sed 'y%./+-%__p_%'` xe_check_libs=" -lXmu " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6081: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6025,19 +6116,19 @@ EOF echo $ac_n "checking for main in -lXbsd""... $ac_c" 1>&6 -echo "configure:6029: checking for main in -lXbsd" >&5 +echo "configure:6120: checking for main in -lXbsd" >&5 ac_lib_var=`echo Xbsd'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lXbsd " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6074,22 +6165,22 @@ fi fi if test "$with_msw" != "no"; then echo "checking for MS-Windows" 1>&6 -echo "configure:6078: checking for MS-Windows" >&5 +echo "configure:6169: checking for MS-Windows" >&5 echo $ac_n "checking for main in -lgdi32""... $ac_c" 1>&6 -echo "configure:6081: checking for main in -lgdi32" >&5 +echo "configure:6172: checking for main in -lgdi32" >&5 ac_lib_var=`echo gdi32'_'main | sed 'y%./+-%__p_%'` xe_check_libs=" -lgdi32 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6155,12 +6246,12 @@ EOF fi fi cat > conftest.$ac_ext < int main() { return (open("/dev/windows", O_RDONLY, 0) > 0)? 0 : 1; } EOF -if { (eval echo configure:6164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:6255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_MSG_SELECT @@ -6236,7 +6327,7 @@ case "$x_libraries" in *X11R4* ) esac echo "checking for WM_COMMAND option" 1>&6 -echo "configure:6240: checking for WM_COMMAND option" >&5; +echo "configure:6331: checking for WM_COMMAND option" >&5; if test "$with_wmcommand" != "no"; then { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_WMCOMMAND @@ -6251,15 +6342,15 @@ fi test -z "$with_xauth" && test "$window_system" = "none" && with_xauth=no test -z "$with_xauth" && { ac_safe=`echo "X11/Xauth.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xauth.h""... $ac_c" 1>&6 -echo "configure:6255: checking for X11/Xauth.h" >&5 +echo "configure:6346: checking for X11/Xauth.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6263: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6354: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6282,12 +6373,12 @@ fi } test -z "$with_xauth" && { echo $ac_n "checking for XauGetAuthByAddr in -lXau""... $ac_c" 1>&6 -echo "configure:6286: checking for XauGetAuthByAddr in -lXau" >&5 +echo "configure:6377: checking for XauGetAuthByAddr in -lXau" >&5 ac_lib_var=`echo Xau'_'XauGetAuthByAddr | sed 'y%./+-%__p_%'` xe_check_libs=" -lXau " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6343,15 +6434,15 @@ if test "$with_tooltalk" != "no" ; then for dir in "" "Tt/" "desktop/" ; do ac_safe=`echo "${dir}tt_c.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ${dir}tt_c.h""... $ac_c" 1>&6 -echo "configure:6347: checking for ${dir}tt_c.h" >&5 +echo "configure:6438: checking for ${dir}tt_c.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6355: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6446: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6387,12 +6478,12 @@ if test "$with_tooltalk" != "no" ; then xe_msg_checking="for tt_message_create in -ltt" test -n "$extra_libs" && xe_msg_checking="$xe_msg_checking using extra libs $extra_libs" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:6391: checking "$xe_msg_checking"" >&5 +echo "configure:6482: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo tt'_'tt_message_create | sed 'y%./+-%__p_%'` xe_check_libs=" -ltt $extra_libs" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6460,15 +6551,15 @@ fi test -z "$with_cde" && { ac_safe=`echo "Dt/Dt.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Dt/Dt.h""... $ac_c" 1>&6 -echo "configure:6464: checking for Dt/Dt.h" >&5 +echo "configure:6555: checking for Dt/Dt.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6472: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6491,12 +6582,12 @@ fi } test -z "$with_cde" && { echo $ac_n "checking for DtDndDragStart in -lDtSvc""... $ac_c" 1>&6 -echo "configure:6495: checking for DtDndDragStart in -lDtSvc" >&5 +echo "configure:6586: checking for DtDndDragStart in -lDtSvc" >&5 ac_lib_var=`echo DtSvc'_'DtDndDragStart | sed 'y%./+-%__p_%'` xe_check_libs=" -lDtSvc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6576,7 +6667,7 @@ EOF fi echo $ac_n "checking if drag and drop API is needed""... $ac_c" 1>&6 -echo "configure:6580: checking if drag and drop API is needed" >&5 +echo "configure:6671: checking if drag and drop API is needed" >&5 if test "$with_dragndrop" != "no" ; then if test -n "$dragndrop_proto" ; then with_dragndrop=yes @@ -6597,18 +6688,18 @@ EOF fi echo "checking for LDAP" 1>&6 -echo "configure:6601: checking for LDAP" >&5 +echo "configure:6692: checking for LDAP" >&5 test -z "$with_ldap" && { ac_safe=`echo "ldap.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ldap.h""... $ac_c" 1>&6 -echo "configure:6604: checking for ldap.h" >&5 +echo "configure:6695: checking for ldap.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6612: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6703: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6631,15 +6722,15 @@ fi } test -z "$with_ldap" && { ac_safe=`echo "lber.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for lber.h""... $ac_c" 1>&6 -echo "configure:6635: checking for lber.h" >&5 +echo "configure:6726: checking for lber.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:6643: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:6734: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -6663,12 +6754,12 @@ fi if test "$with_ldap" != "no"; then echo $ac_n "checking for ldap_search in -lldap""... $ac_c" 1>&6 -echo "configure:6667: checking for ldap_search in -lldap" >&5 +echo "configure:6758: checking for ldap_search in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_search | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6704,12 +6795,12 @@ fi xe_msg_checking="for ldap_open in -lldap" test -n "-llber" && xe_msg_checking="$xe_msg_checking using extra libs -llber" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:6708: checking "$xe_msg_checking"" >&5 +echo "configure:6799: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap -llber" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6815: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6745,12 +6836,12 @@ fi xe_msg_checking="for ldap_open in -lldap" test -n "-llber -lkrb" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:6749: checking "$xe_msg_checking"" >&5 +echo "configure:6840: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap -llber -lkrb" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6786,12 +6877,12 @@ fi xe_msg_checking="for ldap_open in -lldap" test -n "-llber -lkrb -ldes" && xe_msg_checking="$xe_msg_checking using extra libs -llber -lkrb -ldes" echo $ac_n "checking "$xe_msg_checking"""... $ac_c" 1>&6 -echo "configure:6790: checking "$xe_msg_checking"" >&5 +echo "configure:6881: checking "$xe_msg_checking"" >&5 ac_lib_var=`echo ldap'_'ldap_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lldap -llber -lkrb -ldes" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -6853,10 +6944,10 @@ EOF for ac_func in ldap_set_option ldap_get_lderrno ldap_result2error ldap_parse_result do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6857: checking for $ac_func" >&5 +echo "configure:6948: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6911,15 +7002,15 @@ fi if test "$window_system" != "none"; then echo "checking for graphics libraries" 1>&6 -echo "configure:6915: checking for graphics libraries" >&5 +echo "configure:7006: checking for graphics libraries" >&5 xpm_problem="" if test -z "$with_xpm"; then echo $ac_n "checking for Xpm - no older than 3.4f""... $ac_c" 1>&6 -echo "configure:6920: checking for Xpm - no older than 3.4f" >&5 +echo "configure:7011: checking for Xpm - no older than 3.4f" >&5 xe_check_libs=-lXpm cat > conftest.$ac_ext < int main(int c, char **v) { @@ -6927,7 +7018,7 @@ echo "configure:6920: checking for Xpm - no older than 3.4f" >&5 XpmIncludeVersion != XpmLibraryVersion() ? 1 : XpmIncludeVersion < 30406 ? 2 : 0 ;} EOF -if { (eval echo configure:6931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:7022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ./conftest dummy_arg; xpm_status=$?; if test "$xpm_status" = "0"; then @@ -6969,17 +7060,17 @@ EOF libs_x="-lXpm $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXpm\" to \$libs_x"; fi echo $ac_n "checking for \"FOR_MSW\" xpm""... $ac_c" 1>&6 -echo "configure:6973: checking for \"FOR_MSW\" xpm" >&5 +echo "configure:7064: checking for \"FOR_MSW\" xpm" >&5 xe_check_libs=-lXpm cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* xpm_for_msw=no else @@ -7005,15 +7096,15 @@ EOF test -z "$with_xface" && { ac_safe=`echo "compface.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for compface.h""... $ac_c" 1>&6 -echo "configure:7009: checking for compface.h" >&5 +echo "configure:7100: checking for compface.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7017: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7108: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7036,12 +7127,12 @@ fi } test -z "$with_xface" && { echo $ac_n "checking for UnGenFace in -lcompface""... $ac_c" 1>&6 -echo "configure:7040: checking for UnGenFace in -lcompface" >&5 +echo "configure:7131: checking for UnGenFace in -lcompface" >&5 ac_lib_var=`echo compface'_'UnGenFace | sed 'y%./+-%__p_%'` xe_check_libs=" -lcompface " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7104,12 +7195,12 @@ EOF if test "$with_png $with_tiff" != "no no"; then echo $ac_n "checking for inflate in -lc""... $ac_c" 1>&6 -echo "configure:7108: checking for inflate in -lc" >&5 +echo "configure:7199: checking for inflate in -lc" >&5 ac_lib_var=`echo c'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7139,12 +7230,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6 -echo "configure:7143: checking for inflate in -lz" >&5 +echo "configure:7234: checking for inflate in -lz" >&5 ac_lib_var=`echo z'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lz " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7174,12 +7265,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for inflate in -lgz""... $ac_c" 1>&6 -echo "configure:7178: checking for inflate in -lgz" >&5 +echo "configure:7269: checking for inflate in -lgz" >&5 ac_lib_var=`echo gz'_'inflate | sed 'y%./+-%__p_%'` xe_check_libs=" -lgz " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7220,15 +7311,15 @@ fi test -z "$with_jpeg" && { ac_safe=`echo "jpeglib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for jpeglib.h""... $ac_c" 1>&6 -echo "configure:7224: checking for jpeglib.h" >&5 +echo "configure:7315: checking for jpeglib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7232: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7323: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7251,12 +7342,12 @@ fi } test -z "$with_jpeg" && { echo $ac_n "checking for jpeg_destroy_decompress in -ljpeg""... $ac_c" 1>&6 -echo "configure:7255: checking for jpeg_destroy_decompress in -ljpeg" >&5 +echo "configure:7346: checking for jpeg_destroy_decompress in -ljpeg" >&5 ac_lib_var=`echo jpeg'_'jpeg_destroy_decompress | sed 'y%./+-%__p_%'` xe_check_libs=" -ljpeg " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7303,10 +7394,10 @@ EOF png_problem="" test -z "$with_png" && { echo $ac_n "checking for pow""... $ac_c" 1>&6 -echo "configure:7307: checking for pow" >&5 +echo "configure:7398: checking for pow" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_pow=yes" else @@ -7350,15 +7441,15 @@ fi } test -z "$with_png" && { ac_safe=`echo "png.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for png.h""... $ac_c" 1>&6 -echo "configure:7354: checking for png.h" >&5 +echo "configure:7445: checking for png.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7453: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7381,12 +7472,12 @@ fi } test -z "$with_png" && { echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6 -echo "configure:7385: checking for png_read_image in -lpng" >&5 +echo "configure:7476: checking for png_read_image in -lpng" >&5 ac_lib_var=`echo png'_'png_read_image | sed 'y%./+-%__p_%'` xe_check_libs=" -lpng " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7420,10 +7511,10 @@ fi } if test -z "$with_png"; then echo $ac_n "checking for workable png version information""... $ac_c" 1>&6 -echo "configure:7424: checking for workable png version information" >&5 +echo "configure:7515: checking for workable png version information" >&5 xe_check_libs="-lpng -lz" cat > conftest.$ac_ext < int main(int c, char **v) { @@ -7431,7 +7522,7 @@ echo "configure:7424: checking for workable png version information" >&5 if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING) != 0) return 1; return (PNG_LIBPNG_VER < 10002) ? 2 : 0 ;} EOF -if { (eval echo configure:7435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:7526: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ./conftest dummy_arg; png_status=$?; if test "$png_status" = "0"; then @@ -7474,15 +7565,15 @@ EOF test -z "$with_tiff" && { ac_safe=`echo "tiffio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for tiffio.h""... $ac_c" 1>&6 -echo "configure:7478: checking for tiffio.h" >&5 +echo "configure:7569: checking for tiffio.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7486: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7577: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7505,12 +7596,12 @@ fi } test -z "$with_tiff" && { echo $ac_n "checking for TIFFClientOpen in -ltiff""... $ac_c" 1>&6 -echo "configure:7509: checking for TIFFClientOpen in -ltiff" >&5 +echo "configure:7600: checking for TIFFClientOpen in -ltiff" >&5 ac_lib_var=`echo tiff'_'TIFFClientOpen | sed 'y%./+-%__p_%'` xe_check_libs=" -ltiff " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7560,10 +7651,10 @@ fi if test "$with_x11" = "yes"; then echo "checking for X11 graphics libraries" 1>&6 -echo "configure:7564: checking for X11 graphics libraries" >&5 +echo "configure:7655: checking for X11 graphics libraries" >&5 echo "checking for the Athena widgets" 1>&6 -echo "configure:7567: checking for the Athena widgets" >&5 +echo "configure:7658: checking for the Athena widgets" >&5 case "$with_athena" in "xaw" | "") athena_variant=Xaw athena_3d=no ;; @@ -7577,12 +7668,12 @@ echo "configure:7567: checking for the Athena widgets" >&5 if test "$athena_3d" = "no"; then echo $ac_n "checking for XawScrollbarSetThumb in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:7581: checking for XawScrollbarSetThumb in -l$athena_variant" >&5 +echo "configure:7672: checking for XawScrollbarSetThumb in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'XawScrollbarSetThumb | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7609,12 +7700,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:7613: checking for threeDClassRec in -l$athena_variant" >&5 +echo "configure:7704: checking for threeDClassRec in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7656,12 +7747,12 @@ fi else echo $ac_n "checking for threeDClassRec in -l$athena_variant""... $ac_c" 1>&6 -echo "configure:7660: checking for threeDClassRec in -l$athena_variant" >&5 +echo "configure:7751: checking for threeDClassRec in -l$athena_variant" >&5 ac_lib_var=`echo $athena_variant'_'threeDClassRec | sed 'y%./+-%__p_%'` xe_check_libs=" -l$athena_variant " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7690,12 +7781,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for threeDClassRec in -lXaw""... $ac_c" 1>&6 -echo "configure:7694: checking for threeDClassRec in -lXaw" >&5 +echo "configure:7785: checking for threeDClassRec in -lXaw" >&5 ac_lib_var=`echo Xaw'_'threeDClassRec | sed 'y%./+-%__p_%'` xe_check_libs=" -lXaw " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7801: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7720,7 +7811,7 @@ xe_check_libs="" if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then echo "$ac_t""yes" 1>&6 - athena_lib=Xaw; + athena_lib=Xaw; echo "configure: warning: "Assuming that libXaw is actually $athena_variant."" 1>&2; else @@ -7737,15 +7828,15 @@ fi if test "$athena_3d" = "no"; then ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6 -echo "configure:7741: checking for X11/Xaw/ThreeD.h" >&5 +echo "configure:7832: checking for X11/Xaw/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7765,15 +7856,15 @@ else echo "$ac_t""no" 1>&6 ac_safe=`echo "X11/Xaw/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/XawInit.h""... $ac_c" 1>&6 -echo "configure:7769: checking for X11/Xaw/XawInit.h" >&5 +echo "configure:7860: checking for X11/Xaw/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7777: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7868: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7799,15 +7890,15 @@ fi else ac_safe=`echo "X11/$athena_variant/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/$athena_variant/XawInit.h""... $ac_c" 1>&6 -echo "configure:7803: checking for X11/$athena_variant/XawInit.h" >&5 +echo "configure:7894: checking for X11/$athena_variant/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7811: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7902: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7824,15 +7915,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "X11/$athena_variant/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/$athena_variant/ThreeD.h""... $ac_c" 1>&6 -echo "configure:7828: checking for X11/$athena_variant/ThreeD.h" >&5 +echo "configure:7919: checking for X11/$athena_variant/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7836: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7927: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7860,15 +7951,15 @@ fi if test -z "$athena_h_path" -a "$athena_variant" != "Xaw3d"; then ac_safe=`echo "X11/Xaw3d/XawInit.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw3d/XawInit.h""... $ac_c" 1>&6 -echo "configure:7864: checking for X11/Xaw3d/XawInit.h" >&5 +echo "configure:7955: checking for X11/Xaw3d/XawInit.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7872: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7963: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7885,15 +7976,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "X11/Xaw3d/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw3d/ThreeD.h""... $ac_c" 1>&6 -echo "configure:7889: checking for X11/Xaw3d/ThreeD.h" >&5 +echo "configure:7980: checking for X11/Xaw3d/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7897: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:7988: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7925,15 +8016,15 @@ fi if test -z "$athena_h_path"; then ac_safe=`echo "X11/Xaw/ThreeD.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for X11/Xaw/ThreeD.h""... $ac_c" 1>&6 -echo "configure:7929: checking for X11/Xaw/ThreeD.h" >&5 +echo "configure:8020: checking for X11/Xaw/ThreeD.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7937: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8028: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7968,15 +8059,15 @@ fi ac_safe=`echo "Xm/Xm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for Xm/Xm.h""... $ac_c" 1>&6 -echo "configure:7972: checking for Xm/Xm.h" >&5 +echo "configure:8063: checking for Xm/Xm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:7980: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8071: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -7993,12 +8084,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for XmStringFree in -lXm""... $ac_c" 1>&6 -echo "configure:7997: checking for XmStringFree in -lXm" >&5 +echo "configure:8088: checking for XmStringFree in -lXm" >&5 ac_lib_var=`echo Xm'_'XmStringFree | sed 'y%./+-%__p_%'` xe_check_libs=" -lXm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8104: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8038,9 +8129,9 @@ fi if test "$have_motif" = "yes"; then echo $ac_n "checking for Lesstif""... $ac_c" 1>&6 -echo "configure:8042: checking for Lesstif" >&5 +echo "configure:8133: checking for Lesstif" >&5 cat > conftest.$ac_ext < #ifdef LESSTIF_VERSION @@ -8373,7 +8464,7 @@ fi if test "$with_mule" = "yes" ; then echo "checking for Mule-related features" 1>&6 -echo "configure:8377: checking for Mule-related features" >&5 +echo "configure:8468: checking for Mule-related features" >&5 { test "$extra_verbose" = "yes" && cat << \EOF Defining MULE EOF @@ -8414,15 +8505,15 @@ EOF do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:8418: checking for $ac_hdr" >&5 +echo "configure:8509: checking for $ac_hdr" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8426: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8517: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8453,12 +8544,12 @@ done echo $ac_n "checking for strerror in -lintl""... $ac_c" 1>&6 -echo "configure:8457: checking for strerror in -lintl" >&5 +echo "configure:8548: checking for strerror in -lintl" >&5 ac_lib_var=`echo intl'_'strerror | sed 'y%./+-%__p_%'` xe_check_libs=" -lintl " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8521,18 +8612,18 @@ EOF fi echo "checking for Mule input methods" 1>&6 -echo "configure:8525: checking for Mule input methods" >&5 +echo "configure:8616: checking for Mule input methods" >&5 case "$with_xim" in "" | "yes" ) echo "checking for XIM" 1>&6 -echo "configure:8528: checking for XIM" >&5 +echo "configure:8619: checking for XIM" >&5 echo $ac_n "checking for XOpenIM in -lX11""... $ac_c" 1>&6 -echo "configure:8531: checking for XOpenIM in -lX11" >&5 +echo "configure:8622: checking for XOpenIM in -lX11" >&5 ac_lib_var=`echo X11'_'XOpenIM | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8567,12 +8658,12 @@ fi if test "$have_motif $have_lesstif" = "yes no"; then echo $ac_n "checking for XmImMbLookupString in -lXm""... $ac_c" 1>&6 -echo "configure:8571: checking for XmImMbLookupString in -lXm" >&5 +echo "configure:8662: checking for XmImMbLookupString in -lXm" >&5 ac_lib_var=`echo Xm'_'XmImMbLookupString | sed 'y%./+-%__p_%'` xe_check_libs=" -lXm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8648,15 +8739,15 @@ EOF if test "$with_xfs" = "yes" ; then echo "checking for XFontSet" 1>&6 -echo "configure:8652: checking for XFontSet" >&5 +echo "configure:8743: checking for XFontSet" >&5 echo $ac_n "checking for XmbDrawString in -lX11""... $ac_c" 1>&6 -echo "configure:8655: checking for XmbDrawString in -lX11" >&5 +echo "configure:8746: checking for XmbDrawString in -lX11" >&5 ac_lib_var=`echo X11'_'XmbDrawString | sed 'y%./+-%__p_%'` xe_check_libs=" -lX11 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8707,15 +8798,15 @@ EOF test "$with_wnn6" = "yes" && with_wnn=yes # wnn6 implies wnn support test -z "$with_wnn" && { ac_safe=`echo "wnn/jllib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wnn/jllib.h""... $ac_c" 1>&6 -echo "configure:8711: checking for wnn/jllib.h" >&5 +echo "configure:8802: checking for wnn/jllib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:8719: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:8810: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -8740,10 +8831,10 @@ fi for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8744: checking for $ac_func" >&5 +echo "configure:8835: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8795,12 +8886,12 @@ done test "$ac_cv_func_crypt" != "yes" && { echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:8799: checking for crypt in -lcrypt" >&5 +echo "configure:8890: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` xe_check_libs=" -lcrypt " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8846,12 +8937,12 @@ fi if test -z "$with_wnn" -o "$with_wnn" = "yes"; then echo $ac_n "checking for jl_dic_list_e in -lwnn""... $ac_c" 1>&6 -echo "configure:8850: checking for jl_dic_list_e in -lwnn" >&5 +echo "configure:8941: checking for jl_dic_list_e in -lwnn" >&5 ac_lib_var=`echo wnn'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8880,12 +8971,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for jl_dic_list_e in -lwnn4""... $ac_c" 1>&6 -echo "configure:8884: checking for jl_dic_list_e in -lwnn4" >&5 +echo "configure:8975: checking for jl_dic_list_e in -lwnn4" >&5 ac_lib_var=`echo wnn4'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn4 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8991: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8914,12 +9005,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for jl_dic_list_e in -lwnn6""... $ac_c" 1>&6 -echo "configure:8918: checking for jl_dic_list_e in -lwnn6" >&5 +echo "configure:9009: checking for jl_dic_list_e in -lwnn6" >&5 ac_lib_var=`echo wnn6'_'jl_dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn6 " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8948,12 +9039,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dic_list_e in -lwnn6_fromsrc""... $ac_c" 1>&6 -echo "configure:8952: checking for dic_list_e in -lwnn6_fromsrc" >&5 +echo "configure:9043: checking for dic_list_e in -lwnn6_fromsrc" >&5 ac_lib_var=`echo wnn6_fromsrc'_'dic_list_e | sed 'y%./+-%__p_%'` xe_check_libs=" -lwnn6_fromsrc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9012,12 +9103,12 @@ EOF if test "$with_wnn6" != "no"; then echo $ac_n "checking for jl_fi_dic_list in -l$libwnn""... $ac_c" 1>&6 -echo "configure:9016: checking for jl_fi_dic_list in -l$libwnn" >&5 +echo "configure:9107: checking for jl_fi_dic_list in -l$libwnn" >&5 ac_lib_var=`echo $libwnn'_'jl_fi_dic_list | sed 'y%./+-%__p_%'` xe_check_libs=" -l$libwnn " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9063,15 +9154,15 @@ EOF if test "$with_canna" != "no"; then ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6 -echo "configure:9067: checking for canna/jrkanji.h" >&5 +echo "configure:9158: checking for canna/jrkanji.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9075: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9166: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9098,15 +9189,15 @@ fi c_switch_site="$c_switch_site -I/usr/local/canna/include" ac_safe=`echo "canna/jrkanji.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/jrkanji.h""... $ac_c" 1>&6 -echo "configure:9102: checking for canna/jrkanji.h" >&5 +echo "configure:9193: checking for canna/jrkanji.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9110: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9201: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9134,15 +9225,15 @@ fi test -z "$with_canna" && { ac_safe=`echo "canna/RK.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for canna/RK.h""... $ac_c" 1>&6 -echo "configure:9138: checking for canna/RK.h" >&5 +echo "configure:9229: checking for canna/RK.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:9146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:9237: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -9165,12 +9256,12 @@ fi } test -z "$with_canna" && { echo $ac_n "checking for RkBgnBun in -lRKC""... $ac_c" 1>&6 -echo "configure:9169: checking for RkBgnBun in -lRKC" >&5 +echo "configure:9260: checking for RkBgnBun in -lRKC" >&5 ac_lib_var=`echo RKC'_'RkBgnBun | sed 'y%./+-%__p_%'` xe_check_libs=" -lRKC " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9276: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9204,12 +9295,12 @@ fi } test -z "$with_canna" && { echo $ac_n "checking for jrKanjiControl in -lcanna""... $ac_c" 1>&6 -echo "configure:9208: checking for jrKanjiControl in -lcanna" >&5 +echo "configure:9299: checking for jrKanjiControl in -lcanna" >&5 ac_lib_var=`echo canna'_'jrKanjiControl | sed 'y%./+-%__p_%'` xe_check_libs=" -lcanna " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9269,12 +9360,12 @@ if test "$need_motif" = "yes" ; then libs_x="-lXm $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-lXm\" to \$libs_x"; fi echo $ac_n "checking for layout_object_getvalue in -li18n""... $ac_c" 1>&6 -echo "configure:9273: checking for layout_object_getvalue in -li18n" >&5 +echo "configure:9364: checking for layout_object_getvalue in -li18n" >&5 ac_lib_var=`echo i18n'_'layout_object_getvalue | sed 'y%./+-%__p_%'` xe_check_libs=" -li18n " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9368,13 +9459,13 @@ fi fi -for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp ftime gethostname getpagesize gettimeofday getcwd getpt getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strcasecmp strerror tzset ulimit usleep utimes waitpid vsnprintf +for ac_func in cbrt closedir dup2 eaccess fmod fpathconf frexp ftime gethostname getpagesize gettimeofday getcwd getpt getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strcasecmp strerror tzset ulimit usleep utimes waitpid vsnprintf fsync ftruncate umask do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9375: checking for $ac_func" >&5 +echo "configure:9466: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9438,10 +9529,10 @@ case "$opsys" in * ) for ac_func in realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9442: checking for $ac_func" >&5 +echo "configure:9533: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9500,10 +9591,10 @@ esac for ac_func in getloadavg do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9504: checking for $ac_func" >&5 +echo "configure:9595: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9562,12 +9653,12 @@ then echo $ac_n "checking for kstat_open in -lkstat""... $ac_c" 1>&6 -echo "configure:9566: checking for kstat_open in -lkstat" >&5 +echo "configure:9657: checking for kstat_open in -lkstat" >&5 ac_lib_var=`echo kstat'_'kstat_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lkstat " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9612,12 +9703,12 @@ fi echo $ac_n "checking for kvm_read in -lkvm""... $ac_c" 1>&6 -echo "configure:9616: checking for kvm_read in -lkvm" >&5 +echo "configure:9707: checking for kvm_read in -lkvm" >&5 ac_lib_var=`echo kvm'_'kvm_read | sed 'y%./+-%__p_%'` xe_check_libs=" -lkvm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -9662,16 +9753,16 @@ fi fi echo $ac_n "checking whether netdb declares h_errno""... $ac_c" 1>&6 -echo "configure:9666: checking whether netdb declares h_errno" >&5 +echo "configure:9757: checking whether netdb declares h_errno" >&5 cat > conftest.$ac_ext < int main() { return h_errno; ; return 0; } EOF -if { (eval echo configure:9675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF @@ -9691,16 +9782,16 @@ fi rm -f conftest* echo $ac_n "checking for sigsetjmp""... $ac_c" 1>&6 -echo "configure:9695: checking for sigsetjmp" >&5 +echo "configure:9786: checking for sigsetjmp" >&5 cat > conftest.$ac_ext < int main() { sigjmp_buf bar; sigsetjmp (bar, 0); ; return 0; } EOF -if { (eval echo configure:9704: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9795: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 { test "$extra_verbose" = "yes" && cat << \EOF @@ -9720,11 +9811,11 @@ fi rm -f conftest* echo $ac_n "checking whether localtime caches TZ""... $ac_c" 1>&6 -echo "configure:9724: checking whether localtime caches TZ" >&5 +echo "configure:9815: checking whether localtime caches TZ" >&5 if test "$ac_cv_func_tzset" = "yes"; then cat > conftest.$ac_ext < #if STDC_HEADERS @@ -9759,7 +9850,7 @@ main() exit (0); } EOF -if { (eval echo configure:9763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:9854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then emacs_cv_localtime_cache=no else @@ -9789,9 +9880,9 @@ fi if test "$HAVE_TIMEVAL" = "yes"; then echo $ac_n "checking whether gettimeofday accepts one or two arguments""... $ac_c" 1>&6 -echo "configure:9793: checking whether gettimeofday accepts one or two arguments" >&5 +echo "configure:9884: checking whether gettimeofday accepts one or two arguments" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""two" 1>&6 else @@ -9835,19 +9926,19 @@ fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:9839: checking for inline" >&5 +echo "configure:9930: checking for inline" >&5 ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9942: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -9897,17 +9988,17 @@ fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:9901: checking for working alloca.h" >&5 +echo "configure:9992: checking for working alloca.h" >&5 cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:9911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -9931,10 +10022,10 @@ EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:9935: checking for alloca" >&5 +echo "configure:10026: checking for alloca" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -10001,10 +10092,10 @@ EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:10005: checking whether alloca needs Cray hooks" >&5 +echo "configure:10096: checking whether alloca needs Cray hooks" >&5 cat > conftest.$ac_ext <&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10032: checking for $ac_func" >&5 +echo "configure:10123: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10084,10 +10175,10 @@ done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:10088: checking stack direction for C alloca" >&5 +echo "configure:10179: checking stack direction for C alloca" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:10201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_c_stack_direction=1 else @@ -10135,15 +10226,15 @@ test -n "$ALLOCA" && extra_objs="$extra_objs $ALLOCA" && if test "$extra_verbos ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 -echo "configure:10139: checking for vfork.h" >&5 +echo "configure:10230: checking for vfork.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10147: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10238: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10171,10 +10262,10 @@ else fi echo $ac_n "checking for working vfork""... $ac_c" 1>&6 -echo "configure:10175: checking for working vfork" >&5 +echo "configure:10266: checking for working vfork" >&5 cat > conftest.$ac_ext < @@ -10269,7 +10360,7 @@ main() { } } EOF -if { (eval echo configure:10273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:10364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_vfork_works=yes else @@ -10295,10 +10386,10 @@ fi echo $ac_n "checking for working strcoll""... $ac_c" 1>&6 -echo "configure:10299: checking for working strcoll" >&5 +echo "configure:10390: checking for working strcoll" >&5 cat > conftest.$ac_ext < main () @@ -10308,7 +10399,7 @@ main () strcoll ("123", "456") >= 0); } EOF -if { (eval echo configure:10312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:10403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_strcoll_works=yes else @@ -10336,10 +10427,10 @@ fi for ac_func in getpgrp do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:10340: checking for $ac_func" >&5 +echo "configure:10431: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -10390,10 +10481,10 @@ fi done echo $ac_n "checking whether getpgrp takes no argument""... $ac_c" 1>&6 -echo "configure:10394: checking whether getpgrp takes no argument" >&5 +echo "configure:10485: checking whether getpgrp takes no argument" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:10543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then ac_cv_func_getpgrp_void=yes else @@ -10475,10 +10566,10 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:10479: checking for working mmap" >&5 +echo "configure:10570: checking for working mmap" >&5 case "$opsys" in ultrix* ) have_mmap=no ;; *) cat > conftest.$ac_ext < #include @@ -10511,7 +10602,7 @@ int main (int argc, char *argv[]) return 1; } EOF -if { (eval echo configure:10515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:10606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then have_mmap=yes else @@ -10546,15 +10637,15 @@ EOF ac_safe=`echo "termios.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for termios.h""... $ac_c" 1>&6 -echo "configure:10550: checking for termios.h" >&5 +echo "configure:10641: checking for termios.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10558: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10649: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10597,15 +10688,15 @@ else echo "$ac_t""no" 1>&6 ac_safe=`echo "termio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for termio.h""... $ac_c" 1>&6 -echo "configure:10601: checking for termio.h" >&5 +echo "configure:10692: checking for termio.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10609: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10700: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10637,10 +10728,10 @@ fi echo $ac_n "checking for socket""... $ac_c" 1>&6 -echo "configure:10641: checking for socket" >&5 +echo "configure:10732: checking for socket" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_socket=yes" else @@ -10678,15 +10769,15 @@ if eval "test \"`echo '$ac_cv_func_'socket`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "netinet/in.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for netinet/in.h""... $ac_c" 1>&6 -echo "configure:10682: checking for netinet/in.h" >&5 +echo "configure:10773: checking for netinet/in.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10690: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10781: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10703,15 +10794,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "arpa/inet.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for arpa/inet.h""... $ac_c" 1>&6 -echo "configure:10707: checking for arpa/inet.h" >&5 +echo "configure:10798: checking for arpa/inet.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10806: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10736,9 +10827,9 @@ EOF } echo $ac_n "checking "for sun_len member in struct sockaddr_un"""... $ac_c" 1>&6 -echo "configure:10740: checking "for sun_len member in struct sockaddr_un"" >&5 +echo "configure:10831: checking "for sun_len member in struct sockaddr_un"" >&5 cat > conftest.$ac_ext < @@ -10749,7 +10840,7 @@ int main() { static struct sockaddr_un x; x.sun_len = 1; ; return 0; } EOF -if { (eval echo configure:10753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_SOCKADDR_SUN_LEN @@ -10767,9 +10858,9 @@ else fi rm -f conftest* echo $ac_n "checking "for ip_mreq struct in netinet/in.h"""... $ac_c" 1>&6 -echo "configure:10771: checking "for ip_mreq struct in netinet/in.h"" >&5 +echo "configure:10862: checking "for ip_mreq struct in netinet/in.h"" >&5 cat > conftest.$ac_ext < @@ -10779,7 +10870,7 @@ int main() { static struct ip_mreq x; ; return 0; } EOF -if { (eval echo configure:10783: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6; { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_MULTICAST @@ -10810,10 +10901,10 @@ fi echo $ac_n "checking for msgget""... $ac_c" 1>&6 -echo "configure:10814: checking for msgget" >&5 +echo "configure:10905: checking for msgget" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_msgget=yes" else @@ -10851,15 +10942,15 @@ if eval "test \"`echo '$ac_cv_func_'msgget`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "sys/ipc.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/ipc.h""... $ac_c" 1>&6 -echo "configure:10855: checking for sys/ipc.h" >&5 +echo "configure:10946: checking for sys/ipc.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10863: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10954: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10876,15 +10967,15 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_safe=`echo "sys/msg.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/msg.h""... $ac_c" 1>&6 -echo "configure:10880: checking for sys/msg.h" >&5 +echo "configure:10971: checking for sys/msg.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:10979: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10922,15 +11013,15 @@ fi ac_safe=`echo "dirent.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dirent.h""... $ac_c" 1>&6 -echo "configure:10926: checking for dirent.h" >&5 +echo "configure:11017: checking for dirent.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10934: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11025: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10957,15 +11048,15 @@ else echo "$ac_t""no" 1>&6 ac_safe=`echo "sys/dir.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/dir.h""... $ac_c" 1>&6 -echo "configure:10961: checking for sys/dir.h" >&5 +echo "configure:11052: checking for sys/dir.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:10969: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11060: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -10998,15 +11089,15 @@ fi ac_safe=`echo "nlist.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for nlist.h""... $ac_c" 1>&6 -echo "configure:11002: checking for nlist.h" >&5 +echo "configure:11093: checking for nlist.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11010: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11101: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11036,22 +11127,22 @@ fi echo "checking "for sound support"" 1>&6 -echo "configure:11040: checking "for sound support"" >&5 +echo "configure:11131: checking "for sound support"" >&5 test -z "$with_native_sound" -a -n "$native_sound_lib" && with_native_sound=yes if test "$with_native_sound" != "no"; then if test -n "$native_sound_lib"; then ac_safe=`echo "multimedia/audio_device.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for multimedia/audio_device.h""... $ac_c" 1>&6 -echo "configure:11047: checking for multimedia/audio_device.h" >&5 +echo "configure:11138: checking for multimedia/audio_device.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11055: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11099,12 +11190,12 @@ fi if test -z "$native_sound_lib"; then echo $ac_n "checking for ALopenport in -laudio""... $ac_c" 1>&6 -echo "configure:11103: checking for ALopenport in -laudio" >&5 +echo "configure:11194: checking for ALopenport in -laudio" >&5 ac_lib_var=`echo audio'_'ALopenport | sed 'y%./+-%__p_%'` xe_check_libs=" -laudio " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11210: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11146,12 +11237,12 @@ fi if test -z "$native_sound_lib"; then echo $ac_n "checking for AOpenAudio in -lAlib""... $ac_c" 1>&6 -echo "configure:11150: checking for AOpenAudio in -lAlib" >&5 +echo "configure:11241: checking for AOpenAudio in -lAlib" >&5 ac_lib_var=`echo Alib'_'AOpenAudio | sed 'y%./+-%__p_%'` xe_check_libs=" -lAlib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11200,15 +11291,15 @@ fi for dir in "machine" "sys" "linux"; do ac_safe=`echo "${dir}/soundcard.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ${dir}/soundcard.h""... $ac_c" 1>&6 -echo "configure:11204: checking for ${dir}/soundcard.h" >&5 +echo "configure:11295: checking for ${dir}/soundcard.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11212: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11303: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11262,15 +11353,15 @@ fi if test "$with_nas_sound" != "no"; then ac_safe=`echo "audio/audiolib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for audio/audiolib.h""... $ac_c" 1>&6 -echo "configure:11266: checking for audio/audiolib.h" >&5 +echo "configure:11357: checking for audio/audiolib.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11274: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11365: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11288,12 +11379,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo $ac_n "checking for AuOpenServer in -laudio""... $ac_c" 1>&6 -echo "configure:11292: checking for AuOpenServer in -laudio" >&5 +echo "configure:11383: checking for AuOpenServer in -laudio" >&5 ac_lib_var=`echo audio'_'AuOpenServer | sed 'y%./+-%__p_%'` xe_check_libs=" -laudio " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11343,7 +11434,7 @@ EOF fi libs_x="-laudio $libs_x" && if test "$extra_verbose" = "yes"; then echo " Prepending \"-laudio\" to \$libs_x"; fi cat > conftest.$ac_ext < EOF @@ -11374,7 +11465,7 @@ if test "$with_esd_sound" != "no"; then # Extract the first word of "esd-config", so it can be a program name with args. set dummy esd-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:11378: checking for $ac_word" >&5 +echo "configure:11469: checking for $ac_word" >&5 if test -n "$have_esd_config"; then ac_cv_prog_have_esd_config="$have_esd_config" # Let the user override the test. @@ -11403,10 +11494,10 @@ fi c_switch_site="$c_switch_site `esd-config --cflags`" && if test "$extra_verbose" = "yes"; then echo " Appending \"`esd-config --cflags`\" to \$c_switch_site"; fi LIBS="`esd-config --libs` $LIBS" && if test "$extra_verbose" = "yes"; then echo " Prepending \"`esd-config --libs`\" to \$LIBS"; fi echo $ac_n "checking for esd_play_stream""... $ac_c" 1>&6 -echo "configure:11407: checking for esd_play_stream" >&5 +echo "configure:11498: checking for esd_play_stream" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_esd_play_stream=yes" else @@ -11480,7 +11571,7 @@ test -z "$with_tty" && with_tty=yes if test "$with_tty" = "yes" ; then echo "checking for TTY-related features" 1>&6 -echo "configure:11484: checking for TTY-related features" >&5 +echo "configure:11575: checking for TTY-related features" >&5 { test "$extra_verbose" = "yes" && cat << \EOF Defining HAVE_TTY EOF @@ -11496,12 +11587,12 @@ EOF if test -z "$with_ncurses"; then echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6 -echo "configure:11500: checking for tgetent in -lncurses" >&5 +echo "configure:11591: checking for tgetent in -lncurses" >&5 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -lncurses " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11545,15 +11636,15 @@ EOF ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6 -echo "configure:11549: checking for ncurses/curses.h" >&5 +echo "configure:11640: checking for ncurses/curses.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11557: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11648: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11575,15 +11666,15 @@ fi ac_safe=`echo "ncurses/term.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/term.h""... $ac_c" 1>&6 -echo "configure:11579: checking for ncurses/term.h" >&5 +echo "configure:11670: checking for ncurses/term.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11587: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11613,15 +11704,15 @@ fi c_switch_site="$c_switch_site -I/usr/include/ncurses" ac_safe=`echo "ncurses/curses.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ncurses/curses.h""... $ac_c" 1>&6 -echo "configure:11617: checking for ncurses/curses.h" >&5 +echo "configure:11708: checking for ncurses/curses.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11625: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11716: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11656,12 +11747,12 @@ fi for lib in curses termlib termcap; do echo $ac_n "checking for tgetent in -l$lib""... $ac_c" 1>&6 -echo "configure:11660: checking for tgetent in -l$lib" >&5 +echo "configure:11751: checking for tgetent in -l$lib" >&5 ac_lib_var=`echo $lib'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -l$lib " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11703,12 +11794,12 @@ fi else echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6 -echo "configure:11707: checking for tgetent in -lcurses" >&5 +echo "configure:11798: checking for tgetent in -lcurses" >&5 ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -lcurses " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11737,12 +11828,12 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes" ; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6 -echo "configure:11741: checking for tgetent in -ltermcap" >&5 +echo "configure:11832: checking for tgetent in -ltermcap" >&5 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'` xe_check_libs=" -ltermcap " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11801,15 +11892,15 @@ EOF test -z "$with_gpm" && { ac_safe=`echo "gpm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for gpm.h""... $ac_c" 1>&6 -echo "configure:11805: checking for gpm.h" >&5 +echo "configure:11896: checking for gpm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11813: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:11904: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11832,12 +11923,12 @@ fi } test -z "$with_gpm" && { echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6 -echo "configure:11836: checking for Gpm_Open in -lgpm" >&5 +echo "configure:11927: checking for Gpm_Open in -lgpm" >&5 ac_lib_var=`echo gpm'_'Gpm_Open | sed 'y%./+-%__p_%'` xe_check_libs=" -lgpm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:11943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11898,20 +11989,20 @@ test "$with_x11" = "yes" -o "$with_tty" = "yes" && extra_objs="$extra_objs event test "$with_database_gdbm $with_database_dbm $with_database_berkdb" \ != "no no no" && echo "checking for database support" 1>&6 -echo "configure:11902: checking for database support" >&5 +echo "configure:11993: checking for database support" >&5 if test "$with_database_gdbm $with_database_dbm" != "no no"; then ac_safe=`echo "ndbm.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ndbm.h""... $ac_c" 1>&6 -echo "configure:11907: checking for ndbm.h" >&5 +echo "configure:11998: checking for ndbm.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:11915: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12006: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -11941,12 +12032,12 @@ fi if test "$with_database_gdbm" != "no"; then echo $ac_n "checking for dbm_open in -lgdbm""... $ac_c" 1>&6 -echo "configure:11945: checking for dbm_open in -lgdbm" >&5 +echo "configure:12036: checking for dbm_open in -lgdbm" >&5 ac_lib_var=`echo gdbm'_'dbm_open | sed 'y%./+-%__p_%'` xe_check_libs=" -lgdbm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -11985,10 +12076,10 @@ fi if test "$with_database_dbm" != "no"; then echo $ac_n "checking for dbm_open""... $ac_c" 1>&6 -echo "configure:11989: checking for dbm_open" >&5 +echo "configure:12080: checking for dbm_open" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12106: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_dbm_open=yes" else @@ -12030,12 +12121,12 @@ else echo $ac_n "checking for dbm_open in -ldbm""... $ac_c" 1>&6 -echo "configure:12034: checking for dbm_open in -ldbm" >&5 +echo "configure:12125: checking for dbm_open in -ldbm" >&5 ac_lib_var=`echo dbm'_'dbm_open | sed 'y%./+-%__p_%'` xe_check_libs=" -ldbm " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12087,10 +12178,10 @@ EOF if test "$with_database_berkdb" != "no"; then echo $ac_n "checking for Berkeley db.h""... $ac_c" 1>&6 -echo "configure:12091: checking for Berkeley db.h" >&5 +echo "configure:12182: checking for Berkeley db.h" >&5 for path in "db/db.h" "db.h"; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* db_h_path="$path"; break else @@ -12124,9 +12215,9 @@ rm -f conftest* if test "$with_database_berkdb" != "no"; then echo $ac_n "checking for Berkeley DB version""... $ac_c" 1>&6 -echo "configure:12128: checking for Berkeley DB version" >&5 +echo "configure:12219: checking for Berkeley DB version" >&5 cat > conftest.$ac_ext < #if DB_VERSION_MAJOR > 1 @@ -12145,10 +12236,10 @@ fi rm -f conftest* echo $ac_n "checking for $dbfunc""... $ac_c" 1>&6 -echo "configure:12149: checking for $dbfunc" >&5 +echo "configure:12240: checking for $dbfunc" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$dbfunc=yes" else @@ -12190,12 +12281,12 @@ else echo $ac_n "checking for $dbfunc in -ldb""... $ac_c" 1>&6 -echo "configure:12194: checking for $dbfunc in -ldb" >&5 +echo "configure:12285: checking for $dbfunc in -ldb" >&5 ac_lib_var=`echo db'_'$dbfunc | sed 'y%./+-%__p_%'` xe_check_libs=" -ldb " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12270,12 +12361,12 @@ fi if test "$with_socks" = "yes"; then echo $ac_n "checking for SOCKSinit in -lsocks""... $ac_c" 1>&6 -echo "configure:12274: checking for SOCKSinit in -lsocks" >&5 +echo "configure:12365: checking for SOCKSinit in -lsocks" >&5 ac_lib_var=`echo socks'_'SOCKSinit | sed 'y%./+-%__p_%'` xe_check_libs=" -lsocks " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12341,19 +12432,19 @@ fi if test "$with_modules" != "no"; then echo "checking for module support" 1>&6 -echo "configure:12345: checking for module support" >&5 +echo "configure:12436: checking for module support" >&5 ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6 -echo "configure:12349: checking for dlfcn.h" >&5 +echo "configure:12440: checking for dlfcn.h" >&5 cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12357: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12448: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12371,12 +12462,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:12375: checking for dlopen in -ldl" >&5 +echo "configure:12466: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` xe_check_libs=" -ldl " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12406,12 +12497,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen in -lc""... $ac_c" 1>&6 -echo "configure:12410: checking for dlopen in -lc" >&5 +echo "configure:12501: checking for dlopen in -lc" >&5 ac_lib_var=`echo c'_'dlopen | sed 'y%./+-%__p_%'` xe_check_libs=" -lc " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12461,12 +12552,12 @@ EOF else echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 -echo "configure:12465: checking for shl_load in -ldld" >&5 +echo "configure:12556: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` xe_check_libs=" -ldld " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12504,12 +12595,12 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dld_init in -ldld""... $ac_c" 1>&6 -echo "configure:12508: checking for dld_init in -ldld" >&5 +echo "configure:12599: checking for dld_init in -ldld" >&5 ac_lib_var=`echo dld'_'dld_init | sed 'y%./+-%__p_%'` xe_check_libs=" -ldld " cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12615: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12565,7 +12656,7 @@ xehost=$canonical xealias=$internal_configuration echo "checking how to build dynamic libraries for ${xehost}" 1>&6 -echo "configure:12569: checking how to build dynamic libraries for ${xehost}" >&5 +echo "configure:12660: checking how to build dynamic libraries for ${xehost}" >&5 # Transform *-*-linux* to *-*-linux-gnu*, to support old configure scripts. case "$xehost" in *-*-linux-gnu*) ;; @@ -12593,9 +12684,9 @@ if test "$GCC" = "yes"; then XEGCC=yes else echo $ac_n "checking checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:12597: checking checking whether we are using GNU C" >&5 +echo "configure:12688: checking checking whether we are using GNU C" >&5 cat > conftest.$ac_ext <&6 -echo "configure:12621: checking how to produce PIC code" >&5 +echo "configure:12712: checking how to produce PIC code" >&5 wl= can_build_shared=yes @@ -12710,18 +12801,18 @@ if test -n "$dll_cflags"; then # Check to make sure the dll_cflags actually works. echo $ac_n "checking if PIC flag ${dll_cflags} really works""... $ac_c" 1>&6 -echo "configure:12714: checking if PIC flag ${dll_cflags} really works" >&5 +echo "configure:12805: checking if PIC flag ${dll_cflags} really works" >&5 save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $dll_cflags -DPIC" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # On HP-UX, the stripped-down bundled CC doesn't accept +Z, but also @@ -12752,7 +12843,7 @@ cc_produces_so=no xldf= xcldf= echo $ac_n "checking if C compiler can produce shared libraries""... $ac_c" 1>&6 -echo "configure:12756: checking if C compiler can produce shared libraries" >&5 +echo "configure:12847: checking if C compiler can produce shared libraries" >&5 if test "$XEGCC" = yes; then xcldf="-shared" xldf="-shared" @@ -12803,14 +12894,14 @@ if test -n "$xcldf"; then xe_libs= ac_link='${CC-cc} -o conftest $CFLAGS '"$xe_cppflags $xe_ldflags"' conftest.$ac_ext '"$xe_libs"' 1>&5' cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* cc_produces_so=yes else @@ -12835,7 +12926,7 @@ if test -z "$LTLD"; then if test "$XEGCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 -echo "configure:12839: checking for ld used by GCC" >&5 +echo "configure:12930: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. @@ -12860,7 +12951,7 @@ echo "configure:12839: checking for ld used by GCC" >&5 esac else echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 -echo "configure:12864: checking for GNU ld" >&5 +echo "configure:12955: checking for GNU ld" >&5 fi if test -z "$LTLD"; then @@ -12898,7 +12989,7 @@ ld_dynamic_link_flags= # Check to see if it really is or isn't GNU ld. echo $ac_n "checking if the linker is GNU ld""... $ac_c" 1>&6 -echo "configure:12902: checking if the linker is GNU ld" >&5 +echo "configure:12993: checking if the linker is GNU ld" >&5 # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LTLD -v 2>&1 &5; then xe_gnu_ld=yes @@ -12925,7 +13016,7 @@ else # OK - only NOW do we futz about with ld. # See if the linker supports building shared libraries. echo $ac_n "checking whether the linker supports shared libraries""... $ac_c" 1>&6 -echo "configure:12929: checking whether the linker supports shared libraries" >&5 +echo "configure:13020: checking whether the linker supports shared libraries" >&5 dll_ld=$CC dll_ldflags=$LDFLAGS ld_shlibs=yes @@ -13140,10 +13231,10 @@ EOF for ac_func in dlerror _dlerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:13144: checking for $ac_func" >&5 +echo "configure:13235: checking for $ac_func" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -13205,11 +13296,11 @@ done fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 +if { (eval echo configure:13304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit $?) 2>&5 then : else @@ -13350,13 +13441,25 @@ if test "$extra_verbose" = "yes"; then echo "" fi -if test -f $srcdir/src/gdbinit -a ! -f src/gdbinit ; then - echo "creating src/gdbinit"; echo "" - echo "source $srcdir/src/gdbinit" > src/gdbinit + +if test -f "$srcdir/src/.gdbinit" -a ! -f "src/.gdbinit"; then + test "$extra_verbose" = "yes" && echo "creating src/.gdbinit" + echo "source $srcdir/src/.gdbinit" > "src/.gdbinit" +fi + +if test -f "$srcdir/src/.dbxrc" -a ! -f "src/.dbxrc"; then + test "$extra_verbose" = "yes" && echo "creating src/.dbxrc" + echo ". $srcdir/src/.dbxrc" > "src/.dbxrc" +fi + +if test -f "$srcdir/TAGS" -a ! -f "TAGS"; then + test "$extra_verbose" = "yes" && echo "creating TAGS" + echo " +$srcdir/TAGS,include" > "TAGS" fi if test "$__SUNPRO_C" = "yes"; then - echo "creating .sbinit"; echo "" + test "$extra_verbose" = "yes" && echo "creating .sbinit" ( echo "# For use with Sun WorkShop's Source browser." echo "# See sbquery(1) and sbinit(4) for more information" for dir in $MAKE_SUBDIR; do echo "import $dir"; done @@ -13838,6 +13941,10 @@ fi if test -n "$runpath"; then echo " Runtime library search path: $runpath" fi +if test "$have_xaw" = "yes"; then + echo " Athena library to link: $athena_lib" + echo " Athena header include path: $athena_h_path" +fi test "$with_dnet" = yes && echo " Compiling in support for DNET." test "$with_socks" = yes && echo " Compiling in support for SOCKS." test "$with_xauth" = yes && echo " Compiling in support for XAUTH." @@ -13923,13 +14030,11 @@ case "$with_scrollbars" in lucid ) echo " Using Lucid scrollbars." ;; motif ) echo " Using Motif scrollbars." ;; athena ) echo " Using Athena scrollbars." ;; - athena3d ) echo " Using Athena-3d scrollbars." ;; msw ) echo " Using MS-Windows scrollbars." ;; esac case "$with_widgets" in motif ) echo " Using Motif native widgets." ;; athena ) echo " Using Athena native widgets." ;; - athena3d ) echo " Using Athena-3d native widgets." ;; msw ) echo " Using MS-Windows native widgets." ;; esac case "$with_dialogs" in @@ -13943,7 +14048,6 @@ case "$with_dialogs" in fi; fi ;; athena ) echo " Using Athena dialog boxes." ;; - athena3d ) echo " Using Athena-3d dialog boxes." ;; msw ) echo " Using MS-Windows dialog boxes." ;; esac test "$with_modules" = "yes" && echo " Compiling in dynamic shared object module support." diff --git a/configure.in b/configure.in index 1574790..c2cd178 100644 --- a/configure.in +++ b/configure.in @@ -675,9 +675,10 @@ The default is to autodetect all sound support."]) case "$val" in lockf ) val=lockf ;; flock ) val=flock ;; - file ) val=file ;; + file | dot ) val=file ;; + locking ) val=locking ;; * ) USAGE_ERROR(["The \`--$optname' option must have one of these values: - \`lockf', \`flock', or \`file'."]) ;; + \`lockf', \`flock', \`file', \`locking', or \`mmdf'."]) ;; esac eval "$opt=\"$val\"" ;; @@ -908,7 +909,7 @@ dnl is still relative. We do not symlink lock because someone may dnl have stuck the source on a read-only partition. Instead we dnl create it as an actual directory later on if it does not already dnl exist. -for dir in lisp etc man info; do +for dir in lisp etc man info tests; do if test ! -d "$dir" ; then echo Making symbolic link to "$srcdir/$dir" ${LN_S} "$srcdir/$dir" "$dir" @@ -1771,8 +1772,10 @@ configure___ start_files=START_FILES CPP_boolean_to_sh(ORDINARY_LINK, ordinary_link) CPP_boolean_to_sh(SYSTEM_MALLOC, system_malloc) CPP_boolean_to_sh(TERMINFO, have_terminfo) +dnl The MAIL_USE_xxx variables come from the s&m headers CPP_boolean_to_sh(MAIL_USE_FLOCK, mail_use_flock) CPP_boolean_to_sh(MAIL_USE_LOCKF, mail_use_lockf) +CPP_boolean_to_sh(MAIL_USE_LOCKING, mail_use_locking) CPP_boolean_to_sh(HAVE_WIN32_PROCESSES, win32_processes) EOF @@ -1795,6 +1798,13 @@ test "$extra_verbose" = "yes" && \ ld lib_gcc ld_text_start_addr start_files ordinary_link have_terminfo mail_use_flock mail_use_lockf) && echo "" +dnl Pick up mingw32 include path +case "$opsys" in mingw*) mingw_include=`eval "gcc -print-file-name=libc.a"` ; + mingw_include=`eval "dirname $mingw_include"` ; + mingw_include="-I$mingw_include/../include/mingw32" ; + XE_APPEND($mingw_include, c_switch_system) ;; +esac + dnl Non-ordinary link usually requires -lc test "$ordinary_link" = "no" -a -z "$libs_standard" && libs_standard="-lc" @@ -2257,12 +2267,22 @@ AC_TRY_LINK([#include ], dnl Determine type of mail locking from configure args and s&m headers AC_CHECKING(type of mail spool file locking) +AC_CHECK_FUNCS(lockf flock) +dnl The mail_use_xxx variables are set according to the s&m headers. test -z "$mail_locking" -a "$mail_use_flock" = "yes" && mail_locking=flock test -z "$mail_locking" -a "$mail_use_lockf" = "yes" && mail_locking=lockf -if test "$mail_locking" = "lockf"; then AC_DEFINE(REAL_MAIL_USE_LOCKF) -elif test "$mail_locking" = "flock"; then AC_DEFINE(REAL_MAIL_USE_FLOCK) -else mail_locking="dot-locking" +test -z "$mail_locking" -a "$mail_use_locking" = "yes" && mail_locking=locking +if test "$mail_locking" = "lockf"; then AC_DEFINE(MAIL_LOCK_LOCKF) +elif test "$mail_locking" = "flock"; then AC_DEFINE(MAIL_LOCK_FLOCK) +elif test "$mail_locking" = "locking"; then AC_DEFINE(MAIL_LOCK_LOCKING) +else mail_locking="dot-locking"; AC_DEFINE(MAIL_LOCK_DOT) fi +test "$mail_locking" = "lockf" -a "$ac_cv_func_lockf" != "yes" && \ + XE_DIE("lockf mail locking requested but not available.") +test "$mail_locking" = "flock" -a "$ac_cv_func_flock" != "yes" && \ + XE_DIE("flock mail locking requested but not available.") +test "$mail_locking" = "locking" -a "$ac_cv_func_locking" != "yes" && \ + XE_DIE("locking mail locking requested but not available.") case "$opsys" in decosf*) AC_CHECK_LIB(pthreads, cma_open) @@ -2901,7 +2921,7 @@ if test "$with_x11" = "yes"; then dnl What in heck did the user actually want? case "$with_athena" in - dnl This is the default, old fashioned flat Athena. + dnl This is the default, old fashioned flat Athena. "xaw" | "") athena_variant=Xaw athena_3d=no ;; "3d") athena_variant=Xaw3d athena_3d=yes ;; "next") athena_variant=neXtaw athena_3d=yes ;; @@ -2912,22 +2932,22 @@ if test "$with_x11" = "yes"; then dnl Search for the Athena library... if test "$athena_3d" = "no"; then - AC_CHECK_LIB($athena_variant, XawScrollbarSetThumb, + AC_CHECK_LIB($athena_variant, XawScrollbarSetThumb, [ dnl Must not be a 3d library... - AC_CHECK_LIB($athena_variant, threeDClassRec, + AC_CHECK_LIB($athena_variant, threeDClassRec, AC_MSG_WARN("Could not find a non-3d Athena widget library."), athena_lib=$athena_variant) - ], + ], AC_MSG_WARN("Could not find an Athena widget library.")) else dnl The real configuration, need 3d library AC_CHECK_LIB($athena_variant, threeDClassRec, athena_lib=$athena_variant, dnl OK, couldn't find it with a proper name, try the standard Athena lib dnl If that is 3d, presume the user asked for what they have installed. - AC_CHECK_LIB(Xaw, threeDClassRec, + AC_CHECK_LIB(Xaw, threeDClassRec, [ - athena_lib=Xaw; + athena_lib=Xaw; AC_MSG_WARN("Assuming that libXaw is actually $athena_variant."); ], AC_MSG_WARN("Could not find a 3d Athena widget library that looked like $athena_variant."))) @@ -3255,7 +3275,7 @@ if test "$need_motif" = "yes" ; then XE_COMPUTE_RUNPATH() fi -AC_CHECK_FUNCS(cbrt closedir dup2 eaccess fmod fpathconf frexp ftime gethostname getpagesize gettimeofday getcwd getpt getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strcasecmp strerror tzset ulimit usleep utimes waitpid vsnprintf) +AC_CHECK_FUNCS(cbrt closedir dup2 eaccess fmod fpathconf frexp ftime gethostname getpagesize gettimeofday getcwd getpt getwd logb lrand48 matherr mkdir mktime perror poll random rename res_init rint rmdir select setitimer setpgid setlocale setsid sigblock sighold sigprocmask snprintf stpcpy strcasecmp strerror tzset ulimit usleep utimes waitpid vsnprintf fsync ftruncate umask) dnl realpath is buggy on linux, decosf and aix4 @@ -3926,15 +3946,32 @@ if test "$extra_verbose" = "yes"; then echo "" fi -dnl Create some auxiliary files -if test -f $srcdir/src/gdbinit -a ! -f src/gdbinit ; then - echo "creating src/gdbinit"; echo "" - echo "source $srcdir/src/gdbinit" > src/gdbinit +dnl ---------------------------------------------- +dnl Create some auxiliary files for developers. +dnl ---------------------------------------------- + +dnl Create a .gdbinit useful for debugging XEmacs +if test -f "$srcdir/src/.gdbinit" -a ! -f "src/.gdbinit"; then + test "$extra_verbose" = "yes" && echo "creating src/.gdbinit" + echo "source $srcdir/src/.gdbinit" > "src/.gdbinit" +fi + +dnl Create a .dbxrc useful for debugging XEmacs +if test -f "$srcdir/src/.dbxrc" -a ! -f "src/.dbxrc"; then + test "$extra_verbose" = "yes" && echo "creating src/.dbxrc" + echo ". $srcdir/src/.dbxrc" > "src/.dbxrc" +fi + +dnl Create a useful TAGS file +if test -f "$srcdir/TAGS" -a ! -f "TAGS"; then + test "$extra_verbose" = "yes" && echo "creating TAGS" + echo " +$srcdir/TAGS,include" > "TAGS" fi dnl Create top level .sbinit for Sun compilers if test "$__SUNPRO_C" = "yes"; then - echo "creating .sbinit"; echo "" + test "$extra_verbose" = "yes" && echo "creating .sbinit" ( echo "# For use with Sun WorkShop's Source browser." echo "# See sbquery(1) and sbinit(4) for more information" for dir in $MAKE_SUBDIR; do echo "import $dir"; done @@ -4253,6 +4290,10 @@ fi if test -n "$runpath"; then echo " Runtime library search path: $runpath" fi +if test "$have_xaw" = "yes"; then + echo " Athena library to link: $athena_lib" + echo " Athena header include path: $athena_h_path" +fi test "$with_dnet" = yes && echo " Compiling in support for DNET." test "$with_socks" = yes && echo " Compiling in support for SOCKS." test "$with_xauth" = yes && echo " Compiling in support for XAUTH." @@ -4338,13 +4379,11 @@ case "$with_scrollbars" in lucid ) echo " Using Lucid scrollbars." ;; motif ) echo " Using Motif scrollbars." ;; athena ) echo " Using Athena scrollbars." ;; - athena3d ) echo " Using Athena-3d scrollbars." ;; msw ) echo " Using MS-Windows scrollbars." ;; esac case "$with_widgets" in motif ) echo " Using Motif native widgets." ;; athena ) echo " Using Athena native widgets." ;; - athena3d ) echo " Using Athena-3d native widgets." ;; msw ) echo " Using MS-Windows native widgets." ;; esac case "$with_dialogs" in @@ -4358,7 +4397,6 @@ case "$with_dialogs" in fi; fi ;; athena ) echo " Using Athena dialog boxes." ;; - athena3d ) echo " Using Athena-3d dialog boxes." ;; msw ) echo " Using MS-Windows dialog boxes." ;; esac test "$with_modules" = "yes" && echo " Compiling in dynamic shared object module support." diff --git a/configure.usage b/configure.usage index 71d3f8f..a6e9c6b 100644 --- a/configure.usage +++ b/configure.usage @@ -141,7 +141,7 @@ Additional features: installed LDAP libraries on the system). --mail-locking=TYPE (*) Specify the locking to be used by movemail to prevent concurrent updates of mail spool files. Valid types - are `lockf', `flock', and `file'. + are `lockf', `flock', and `dot'. --with-modules Compile in experimental support for dynamically loaded libraries (Dynamic Shared Objects). --with-site-lisp=yes Allow for a site-lisp directory in the XEmacs hierarchy diff --git a/etc/NEWS b/etc/NEWS index 3dcba1e..1c58518 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -136,6 +136,21 @@ The only thing selection doesn't do is set the clipboard automatically as this would break the MS-Windows model. If you want this behaviour then set `selection-sets-clipboard' to t +** Mail spool locking now works correctly. +XEmacs has always come with a little auxiliary program, movemail, +which moves mail out of the system's spool area into user storage. To +coordinate between XEmacs, the mail delivery agent, and other mail +user agents, movemail needs to properly lock the spool file before +moving it. Movemail now correctly respects the --mail-locking option +to configure. Moreover, movemail's locking behavior can be specified +at run-time, via a new command-line option -m to movemail, or through +the environment variable EMACSLOCKMETHOD. + +When installing XEmacs, make sure you configure it according to your +environment's mail spool locking conventions. When you're using a +binary kit, set the `mail-lock-method' variable at startup, or the +EMACSLOCKMETHOD environment variable. + ** New command-line switches -user-init-file and -user-init-directory. These can be used to specify alternate locations for what is normally ~/.emacs and ~/.xemacs. @@ -144,6 +159,10 @@ Moreover, -user (which used to only work in unpredictable ways) is now equivalent to -user-init-file ~/.emacs -user-init-directory ~/.xemacs. +** New variable `mswindows-meta-activates-menu'. +If you set this variable to nil then pressing the Alt key under +MS-Windows will no longer activate the menubar. The default is t. + ** Etags changes. *** In DOS, etags looks for file.cgz if it cannot find file.c. diff --git a/etc/TUTORIAL.de b/etc/TUTORIAL.de index f15c75d..def5aa3 100644 --- a/etc/TUTORIAL.de +++ b/etc/TUTORIAL.de @@ -1,4 +1,4 @@ -Copyright (c) 1997, Adrian Aichner . +Copyright (c) 1997-2000, Adrian Aichner . Copyright (c) 1985, 1996 Free Software Foundation, Inc. See end for conditions. @@ -39,7 +39,7 @@ weiterbewegt. Um eine Seite zur META-Taste gedrückt und tippe v oder tippe v wenn Deine Tastatur keine META-, EDIT- oder ALT-Taste besitzt). ->> Versuche ein paar Mal M-v und C-v zu tippen. +>> Versuche ein paarmal M-v und C-v zu tippen. * ZUSAMMENFASSUNG @@ -1137,7 +1137,7 @@ Diese Version des Tutorials ist, wie GNU Emacs selbst, urheberrechtlich geschützt und erlaubt die Verteilung von Kopien unter bestimmten Voraussetzungen: -Copyright (c) 1997, Adrian Aichner . +Copyright (c) 1997-2000, Adrian Aichner . Copyright (c) 1985, 1996 Free Software Foundation diff --git a/info/custom.info b/info/custom.info index ccf40ba..0a0b284 100644 --- a/info/custom.info +++ b/info/custom.info @@ -1,5 +1,5 @@ -This is Info file ../info/custom.info, produced by Makeinfo version -1.68 from the input file custom.texi. +This is ../info/custom.info, produced by makeinfo version 4.0 from +custom.texi. INFO-DIR-SECTION XEmacs Editor START-INFO-DIR-ENTRY @@ -58,7 +58,7 @@ Declaring Groups Use `defgroup' to declare new customization groups. - - Function: defgroup SYMBOL MEMBERS DOC [KEYWORD VALUE]... + - Function: defgroup symbol members doc [keyword value]... Declare SYMBOL as a customization group containing MEMBERS. SYMBOL does not need to be quoted. @@ -89,7 +89,7 @@ Declaring Variables Use `defcustom' to declare user editable variables. - - Function: defcustom SYMBOL VALUE DOC [KEYWORD VALUE]... + - Function: defcustom symbol value doc [keyword value]... Declare SYMBOL as a customizable variable that defaults to VALUE. Neither SYMBOL nor VALUE needs to be quoted. If SYMBOL is not already bound, initialize it to VALUE. @@ -156,7 +156,7 @@ default value, `saved-value' for a value saved by the user, and Use `custom-add-option' to specify that a specific function is useful as an member of a hook. - - Function: custom-add-option SYMBOL OPTION + - Function: custom-add-option symbol option To the variable SYMBOL add OPTION. If SYMBOL is a hook variable, OPTION should be a hook member. For @@ -170,7 +170,7 @@ Declaring Faces Faces are declared with `defface'. - - Function: defface FACE SPEC DOC [KEYWORD VALUE]... + - Function: defface face spec doc [keyword value]... Declare FACE as a customizable face that defaults to SPEC. FACE does not need to be quoted. @@ -225,7 +225,7 @@ subgroups, with each subgroup being member of the top level group. The top level group for the package should itself be member of one or more of the standard customization groups. There exists a group for -each *finder* keyword. Press `C-h p' to see a list of finder keywords, +each _finder_ keyword. Press `C-h p' to see a list of finder keywords, and add you group to each of them, using the `:group' keyword.  @@ -240,18 +240,18 @@ Utilities Widget type for specifying the info manual entry for a customization option. It takes one argument, an info address. - - Function: custom-add-to-group GROUP MEMBER WIDGET + - Function: custom-add-to-group group member widget To existing GROUP add a new MEMBER of type WIDGET, If there already is an entry for that member, overwrite it. - - Function: custom-add-link SYMBOL WIDGET + - Function: custom-add-link symbol widget To the custom option SYMBOL add the link WIDGET. - - Function: custom-add-load SYMBOL LOAD + - Function: custom-add-load symbol load To the custom option SYMBOL add the dependency LOAD. LOAD should be either a library file name, or a feature name. - - Function: customize-menu-create SYMBOL &optional NAME + - Function: customize-menu-create symbol &optional name Create menu for customization group SYMBOL. If optional NAME is given, use that as the name of the menu. Otherwise the menu will be named `Customize'. The menu is in a format applicable to @@ -378,15 +378,16 @@ Wishlist Add colors. +  Tag Table: -Node: Top230 -Node: Declaring Groups1651 -Node: Declaring Variables2752 -Node: Declaring Faces5843 -Node: Usage for Package Authors7541 -Node: Utilities8320 -Node: The Init File9404 -Node: Wishlist9856 +Node: Top204 +Node: Declaring Groups1625 +Node: Declaring Variables2726 +Node: Declaring Faces5817 +Node: Usage for Package Authors7515 +Node: Utilities8294 +Node: The Init File9378 +Node: Wishlist9830  End Tag Table diff --git a/info/emodules.info b/info/emodules.info index 763a373..9b95d11 100644 --- a/info/emodules.info +++ b/info/emodules.info @@ -1,5 +1,5 @@ -This is Info file ../info/emodules.info, produced by Makeinfo version -1.68 from the input file emodules.texi. +This is ../info/emodules.info, produced by makeinfo version 4.0 from +emodules.texi. This file documents the module loading technology of XEmacs. @@ -47,7 +47,7 @@ support documentation. * Defining Variables:: Creating new Lisp variables * Index:: Concept Index - -- The Detailed Node Listing -- + --- The Detailed Node Listing --- Annatomy of a Module @@ -244,7 +244,7 @@ place-holder, not an actual function name. `syms_of_module' This required function is responsible for introducing to the Lisp reader all functions that you have defined in your module using - `DEFUN()'. Note that *only* functions are declared here, using + `DEFUN()'. Note that _only_ functions are declared here, using the `DEFSUBR()' macro. No variables are declared. `vars_of_module' @@ -276,7 +276,7 @@ Required Variables Not only does a module need to declare the initialization functions mentioned above, it is also required to provide certain variables which the module loading code searches for in order to determine the viability -of a module. You are *not* required to provide these variables in your +of a module. You are _not_ required to provide these variables in your source files. They are automatically set up in the module initialization file by the `ellcc' compiler. These variables are discussed here simply for the sake of completeness. @@ -820,7 +820,7 @@ initialization function using special XEmacs macros such as how to use these macros is to look at existing source code, or read the internals manual. - One *very* important difference between XEmacs variables and module + One _very_ important difference between XEmacs variables and module variables is how you use pure space. Simply put, you *never* use pure space in XEmacs modules. The pure space storage is of a limited size, and is initialized propperly during the dumping of XEmacs. Because @@ -930,23 +930,23 @@ Index  Tag Table: -Node: Top1562 -Node: Introduction2908 -Node: Annatomy of a Module7417 -Node: Required Header File8233 -Node: Required Functions10154 -Node: Required Variables12403 -Node: Loading other Modules15090 -Node: Using ellcc17148 -Node: Compile Mode18943 -Node: Initialization Mode20311 -Node: Link Mode25343 -Node: Other ellcc options26490 -Node: Environment Variables29070 -Node: Defining Functions30761 -Node: Using DEFUN32772 -Node: Declaring Functions34483 -Node: Defining Variables35826 -Node: Index38071 +Node: Top1536 +Node: Introduction2884 +Node: Annatomy of a Module7393 +Node: Required Header File8209 +Node: Required Functions10130 +Node: Required Variables12379 +Node: Loading other Modules15066 +Node: Using ellcc17124 +Node: Compile Mode18919 +Node: Initialization Mode20287 +Node: Link Mode25319 +Node: Other ellcc options26466 +Node: Environment Variables29046 +Node: Defining Functions30737 +Node: Using DEFUN32748 +Node: Declaring Functions34459 +Node: Defining Variables35802 +Node: Index38047  End Tag Table diff --git a/info/info.info b/info/info.info index b47a130..749c9c9 100644 --- a/info/info.info +++ b/info/info.info @@ -779,7 +779,7 @@ 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. +Setting Variables: (xemacs)Examining. `Info-enable-edit' Set to `nil', disables the `e' (`Info-edit') command. A non-`nil' @@ -835,6 +835,6 @@ Node: Cross-refs29297 Node: Tags29999 Node: Checking31301 Node: Emacs Info Variables32254 -Node: Creating an Info File33243 +Node: Creating an Info File33244  End Tag Table diff --git a/info/internals.info b/info/internals.info index df42ba5..b3bc9ec 100644 --- a/info/internals.info +++ b/info/internals.info @@ -42,11 +42,11 @@ Indirect: internals.info-1: 1796 internals.info-2: 45950 internals.info-3: 93024 -internals.info-4: 141396 -internals.info-5: 183427 -internals.info-6: 232848 -internals.info-7: 281578 -internals.info-8: 331035 +internals.info-4: 141398 +internals.info-5: 183429 +internals.info-6: 232850 +internals.info-7: 281580 +internals.info-8: 331037  Tag Table: (Indirect) @@ -74,106 +74,106 @@ Node: Conversion to and from External Data96774 Node: General Guidelines for Writing Mule-Aware Code101655 Node: An Example of Mule-Aware Code103686 Node: Techniques for XEmacs Developers105673 -Node: A Summary of the Various XEmacs Modules109444 -Node: Low-Level Modules110264 -Node: Basic Lisp Modules117786 -Node: Modules for Standard Editing Operations126110 -Node: Editor-Level Control Flow Modules131998 -Node: Modules for the Basic Displayable Lisp Objects135445 -Node: Modules for other Display-Related Lisp Objects137967 -Node: Modules for the Redisplay Mechanism139045 -Node: Modules for Interfacing with the File System141396 -Node: Modules for Other Aspects of the Lisp Interpreter and Object System145094 -Node: Modules for Interfacing with the Operating System150548 -Node: Modules for Interfacing with X Windows158209 -Node: Modules for Internationalization161645 -Node: Allocation of Objects in XEmacs Lisp164282 -Node: Introduction to Allocation164836 -Node: Garbage Collection170299 -Node: GCPROing173252 -Node: Garbage Collection - Step by Step180063 -Node: Invocation180455 -Node: garbage_collect_1183427 -Node: mark_object192907 -Node: gc_sweep194719 -Node: sweep_lcrecords_1199782 -Node: compact_string_chars200777 -Node: sweep_strings202957 -Node: sweep_bit_vectors_1203922 -Node: Integers and Characters204598 -Node: Allocation from Frob Blocks205350 -Node: lrecords206954 -Node: Low-level allocation219416 -Node: Pure Space223584 -Node: Cons223759 -Node: Vector224475 -Node: Bit Vector225052 -Node: Symbol225545 -Node: Marker226114 -Node: String226669 -Node: Compiled Function230284 -Node: Events and the Event Loop230453 -Node: Introduction to Events230932 -Node: Main Loop232848 -Node: Specifics of the Event Gathering Mechanism236424 -Node: Specifics About the Emacs Event248877 -Node: The Event Stream Callback Routines249132 -Node: Other Event Loop Functions249377 -Node: Converting Events250517 -Node: Dispatching Events; The Command Builder251126 -Node: Evaluation; Stack Frames; Bindings251361 -Node: Evaluation251703 -Node: Dynamic Binding; The specbinding Stack; Unwind-Protects258243 -Node: Simple Special Forms260627 -Node: Catch and Throw261409 -Node: Symbols and Variables263984 -Node: Introduction to Symbols264248 -Node: Obarrays265286 -Node: Symbol Values268819 -Node: Buffers and Textual Representation271107 -Node: Introduction to Buffers271765 -Node: The Text in a Buffer274428 -Node: Buffer Lists281578 -Node: Markers and Extents283529 -Node: Bufbytes and Emchars285794 -Node: The Buffer Object286009 -Node: MULE Character Sets and Encodings289489 -Node: Character Sets290551 -Node: Encodings293994 -Node: Japanese EUC (Extended Unix Code)295061 -Node: JIS7295875 -Node: Internal Mule Encodings297225 -Node: Internal String Encoding299055 -Node: Internal Character Encoding301168 -Node: CCL302892 -Node: The Lisp Reader and Compiler309644 -Node: Lstreams309857 -Node: Creating an Lstream310888 -Node: Lstream Types312098 -Node: Lstream Functions312350 -Node: Lstream Methods315919 -Node: Consoles; Devices; Frames; Windows319062 -Node: Introduction to Consoles; Devices; Frames; Windows319377 -Node: Point321869 -Node: Window Hierarchy323148 -Node: The Window Object327598 -Node: The Redisplay Mechanism331035 -Node: Critical Redisplay Sections331827 -Node: Line Start Cache332782 -Node: Redisplay Piece by Piece336019 -Node: Extents338055 -Node: Introduction to Extents338593 -Node: Extent Ordering339719 -Node: Format of the Extent Info340960 -Node: Zero-Length Extents342848 -Node: Mathematics of Extent Ordering344246 -Node: Extent Fragments349003 -Node: Faces350090 -Node: Glyphs350206 -Node: Specifiers353224 -Node: Menus353353 -Node: Subprocesses355611 -Node: Interface to X Windows357587 -Node: Index357758 +Node: A Summary of the Various XEmacs Modules109446 +Node: Low-Level Modules110266 +Node: Basic Lisp Modules117788 +Node: Modules for Standard Editing Operations126112 +Node: Editor-Level Control Flow Modules132000 +Node: Modules for the Basic Displayable Lisp Objects135447 +Node: Modules for other Display-Related Lisp Objects137969 +Node: Modules for the Redisplay Mechanism139047 +Node: Modules for Interfacing with the File System141398 +Node: Modules for Other Aspects of the Lisp Interpreter and Object System145096 +Node: Modules for Interfacing with the Operating System150550 +Node: Modules for Interfacing with X Windows158211 +Node: Modules for Internationalization161647 +Node: Allocation of Objects in XEmacs Lisp164284 +Node: Introduction to Allocation164838 +Node: Garbage Collection170301 +Node: GCPROing173254 +Node: Garbage Collection - Step by Step180065 +Node: Invocation180457 +Node: garbage_collect_1183429 +Node: mark_object192909 +Node: gc_sweep194721 +Node: sweep_lcrecords_1199784 +Node: compact_string_chars200779 +Node: sweep_strings202959 +Node: sweep_bit_vectors_1203924 +Node: Integers and Characters204600 +Node: Allocation from Frob Blocks205352 +Node: lrecords206956 +Node: Low-level allocation219418 +Node: Pure Space223586 +Node: Cons223761 +Node: Vector224477 +Node: Bit Vector225054 +Node: Symbol225547 +Node: Marker226116 +Node: String226671 +Node: Compiled Function230286 +Node: Events and the Event Loop230455 +Node: Introduction to Events230934 +Node: Main Loop232850 +Node: Specifics of the Event Gathering Mechanism236426 +Node: Specifics About the Emacs Event248879 +Node: The Event Stream Callback Routines249134 +Node: Other Event Loop Functions249379 +Node: Converting Events250519 +Node: Dispatching Events; The Command Builder251128 +Node: Evaluation; Stack Frames; Bindings251363 +Node: Evaluation251705 +Node: Dynamic Binding; The specbinding Stack; Unwind-Protects258245 +Node: Simple Special Forms260629 +Node: Catch and Throw261411 +Node: Symbols and Variables263986 +Node: Introduction to Symbols264250 +Node: Obarrays265288 +Node: Symbol Values268821 +Node: Buffers and Textual Representation271109 +Node: Introduction to Buffers271767 +Node: The Text in a Buffer274430 +Node: Buffer Lists281580 +Node: Markers and Extents283531 +Node: Bufbytes and Emchars285796 +Node: The Buffer Object286011 +Node: MULE Character Sets and Encodings289491 +Node: Character Sets290553 +Node: Encodings293996 +Node: Japanese EUC (Extended Unix Code)295063 +Node: JIS7295877 +Node: Internal Mule Encodings297227 +Node: Internal String Encoding299057 +Node: Internal Character Encoding301170 +Node: CCL302894 +Node: The Lisp Reader and Compiler309646 +Node: Lstreams309859 +Node: Creating an Lstream310890 +Node: Lstream Types312100 +Node: Lstream Functions312352 +Node: Lstream Methods315921 +Node: Consoles; Devices; Frames; Windows319064 +Node: Introduction to Consoles; Devices; Frames; Windows319379 +Node: Point321871 +Node: Window Hierarchy323150 +Node: The Window Object327600 +Node: The Redisplay Mechanism331037 +Node: Critical Redisplay Sections331829 +Node: Line Start Cache332784 +Node: Redisplay Piece by Piece336021 +Node: Extents338057 +Node: Introduction to Extents338595 +Node: Extent Ordering339721 +Node: Format of the Extent Info340962 +Node: Zero-Length Extents342850 +Node: Mathematics of Extent Ordering344248 +Node: Extent Fragments349005 +Node: Faces350092 +Node: Glyphs350208 +Node: Specifiers353226 +Node: Menus353355 +Node: Subprocesses355613 +Node: Interface to X Windows357589 +Node: Index357760  End Tag Table diff --git a/info/internals.info-3 b/info/internals.info-3 index 2468102..8fce7d2 100644 --- a/info/internals.info-3 +++ b/info/internals.info-3 @@ -382,8 +382,8 @@ out where the cycles are going. Specific projects: Function calls in elisp are especially expensive. Iterating over a long list is going to be 30 times faster implemented in C than in Elisp. - To get started debugging XEmacs, take a look at the `gdbinit' and -`dbxrc' files in the `src' directory. *Note Q2.1.15 - How to Debug an + To get started debugging XEmacs, take a look at the `.gdbinit' and +`.dbxrc' files in the `src' directory. *Note Q2.1.15 - How to Debug an XEmacs problem with a debugger: (xemacs-faq)Q2.1.15 - How to Debug an XEmacs problem with a debugger. diff --git a/info/internals.info-5 b/info/internals.info-5 index 54a670b..944ee4a 100644 --- a/info/internals.info-5 +++ b/info/internals.info-5 @@ -227,7 +227,7 @@ File: internals.info, Node: mark_object, Next: gc_sweep, Prev: garbage_collec the object is a real Lisp object `Lisp_Type_Record' or just an integer or a character. Integers and characters are the only two types that are stored directly - without another level of indirection, and therefore -they don´t have to be marked and collected. *Note How Lisp Objects Are +they don't have to be marked and collected. *Note How Lisp Objects Are Represented in C::. The second case is the one we have to handle. It is the one when we @@ -268,7 +268,7 @@ and managed, and consequently different ways to free them from memory. objects are allocated and handled using that scheme of `lcrecords'. Each object is `malloc'ed separately instead of placing it in one of the contiguous frob blocks. All types that are currently stored using -`lcrecords'´s `alloc_lcrecord' and `make_lcrecord_list' are the types: +`lcrecords''s `alloc_lcrecord' and `make_lcrecord_list' are the types: vectors, buffers, char-table, char-table-entry, console, weak-list, database, device, ldap, hash-table, command-builder, extent-auxiliary, extent-info, face, coding-system, frame, image-instance, glyph, diff --git a/info/lispref.info b/info/lispref.info index be9fb29..bbd178b 100644 --- a/info/lispref.info +++ b/info/lispref.info @@ -59,42 +59,42 @@ lispref.info-5: 195524 lispref.info-6: 243218 lispref.info-7: 291479 lispref.info-8: 340637 -lispref.info-9: 387989 -lispref.info-10: 436636 -lispref.info-11: 484814 -lispref.info-12: 531411 -lispref.info-13: 579316 -lispref.info-14: 627531 -lispref.info-15: 675782 -lispref.info-16: 725497 -lispref.info-17: 774234 -lispref.info-18: 821024 -lispref.info-19: 868080 -lispref.info-20: 916814 -lispref.info-21: 966178 -lispref.info-22: 1013019 -lispref.info-23: 1060032 -lispref.info-24: 1109434 -lispref.info-25: 1159112 -lispref.info-26: 1209010 -lispref.info-27: 1258233 -lispref.info-28: 1307008 -lispref.info-29: 1356451 -lispref.info-30: 1397762 -lispref.info-31: 1446914 -lispref.info-32: 1496128 -lispref.info-33: 1545712 -lispref.info-34: 1593896 -lispref.info-35: 1639532 -lispref.info-36: 1680851 -lispref.info-37: 1725798 -lispref.info-38: 1775494 -lispref.info-39: 1824556 -lispref.info-40: 1873941 -lispref.info-41: 1923837 -lispref.info-42: 1972828 -lispref.info-43: 2017337 -lispref.info-44: 2055716 +lispref.info-9: 387481 +lispref.info-10: 436941 +lispref.info-11: 485107 +lispref.info-12: 534860 +lispref.info-13: 582765 +lispref.info-14: 630980 +lispref.info-15: 679231 +lispref.info-16: 728946 +lispref.info-17: 777683 +lispref.info-18: 824473 +lispref.info-19: 871529 +lispref.info-20: 920263 +lispref.info-21: 969627 +lispref.info-22: 1016468 +lispref.info-23: 1063481 +lispref.info-24: 1112883 +lispref.info-25: 1162561 +lispref.info-26: 1212459 +lispref.info-27: 1261682 +lispref.info-28: 1310457 +lispref.info-29: 1359900 +lispref.info-30: 1401211 +lispref.info-31: 1450363 +lispref.info-32: 1499577 +lispref.info-33: 1549161 +lispref.info-34: 1597345 +lispref.info-35: 1642981 +lispref.info-36: 1684300 +lispref.info-37: 1729247 +lispref.info-38: 1778943 +lispref.info-39: 1828005 +lispref.info-40: 1877390 +lispref.info-41: 1927286 +lispref.info-42: 1976277 +lispref.info-43: 2020786 +lispref.info-44: 2059165  Tag Table: (Indirect) @@ -255,633 +255,633 @@ Node: Catch and Throw365886 Node: Examples of Catch369730 Node: Errors371749 Node: Signaling Errors373238 -Node: Processing of Errors376306 -Node: Handling Errors377636 -Node: Error Symbols384542 -Node: Cleanups387989 -Node: Variables391769 -Node: Global Variables393538 -Node: Constant Variables394614 -Node: Local Variables395240 -Node: Void Variables400184 -Node: Defining Variables403695 -Node: Accessing Variables410860 -Node: Setting Variables412286 -Node: Variable Scoping416805 -Node: Scope418404 -Node: Extent419929 -Node: Impl of Scope421408 -Node: Using Scoping423371 -Node: Buffer-Local Variables424893 -Node: Intro to Buffer-Local425729 -Node: Creating Buffer-Local428272 -Node: Default Value433492 -Node: Variable Aliases436636 -Node: Functions438422 -Node: What Is a Function439516 -Node: Lambda Expressions443563 -Node: Lambda Components444473 -Node: Simple Lambda446305 -Node: Argument List447964 -Node: Function Documentation451692 -Node: Function Names453634 -Node: Defining Functions456208 -Node: Calling Functions459250 -Node: Mapping Functions463099 -Node: Anonymous Functions465747 -Node: Function Cells468992 -Node: Inline Functions473802 -Node: Related Topics475612 -Node: Macros476665 -Node: Simple Macro477949 -Node: Expansion478684 -Node: Compiling Macros481658 -Node: Defining Macros483496 -Node: Backquote484814 -Node: Problems with Macros487212 -Node: Argument Evaluation487907 -Node: Surprising Local Vars490808 -Node: Eval During Expansion492876 -Node: Repeated Expansion494570 -Node: Customization496481 -Node: Common Keywords496950 -Node: Group Definitions499795 -Node: Variable Definitions501988 -Node: Customization Types506971 -Node: Simple Types508407 -Node: Composite Types510564 -Node: Splicing into Lists515254 -Node: Type Keywords517089 -Node: Loading520609 -Node: How Programs Do Loading522282 -Node: Autoload531411 -Node: Repeated Loading537491 -Node: Named Features539605 -Node: Unloading546038 -Node: Hooks for Loading548194 -Node: Byte Compilation548911 -Node: Speed of Byte-Code550828 -Node: Compilation Functions552035 -Node: Docs and Compilation558424 -Node: Dynamic Loading561077 -Node: Eval During Compile563441 -Node: Compiled-Function Objects564706 -Node: Disassembly569505 -Node: Debugging576759 -Node: Debugger578171 -Node: Error Debugging579316 -Node: Infinite Loops582069 -Node: Function Debugging583313 -Node: Explicit Debug586103 -Node: Using Debugger586875 -Node: Debugger Commands588739 -Node: Invoking the Debugger593056 -Node: Internals of Debugger596971 -Node: Syntax Errors601848 -Node: Excess Open603096 -Node: Excess Close604971 -Node: Compilation Errors606392 -Node: Edebug607680 -Node: Using Edebug609787 -Node: Instrumenting612484 -Node: Edebug Execution Modes615973 -Node: Jumping619083 -Node: Edebug Misc621426 -Node: Breakpoints622815 -Node: Global Break Condition625621 -Node: Embedded Breakpoints626576 -Node: Trapping Errors627531 -Node: Edebug Views629607 -Node: Edebug Eval631572 -Node: Eval List632749 -Node: Reading in Edebug636134 -Node: Printing in Edebug636933 -Node: Tracing638648 -Node: Coverage Testing640534 -Node: The Outside Context642575 -Node: Checking Whether to Stop643524 -Node: Edebug Display Update644170 -Node: Edebug Recursive Edit646192 -Node: Instrumenting Macro Calls647846 -Node: Specification List650328 -Node: Backtracking659739 -Node: Debugging Backquote661677 -Node: Specification Examples665383 -Node: Edebug Options667450 -Node: Read and Print672787 -Node: Streams Intro673764 -Node: Input Streams675782 -Node: Input Functions680683 -Node: Output Streams682743 -Node: Output Functions686795 -Node: Output Variables691095 -Node: Minibuffers695894 -Node: Intro to Minibuffers697046 -Node: Text from Minibuffer699236 -Node: Object from Minibuffer704113 -Node: Minibuffer History707320 -Node: Completion710299 -Node: Basic Completion712274 -Node: Minibuffer Completion717286 -Node: Completion Commands720853 -Node: High-Level Completion725497 -Node: Reading File Names729521 -Node: Programmed Completion733205 -Node: Yes-or-No Queries735587 -Node: Multiple Queries741283 -Node: Reading a Password745351 -Node: Minibuffer Misc746688 -Node: Command Loop751561 -Node: Command Overview752907 -Node: Defining Commands756191 -Node: Using Interactive756939 -Node: Interactive Codes761713 -Node: Interactive Examples767517 -Node: Interactive Call768831 -Node: Command Loop Info774234 -Node: Events779213 -Node: Event Types780673 -Node: Event Contents782596 -Node: Event Predicates787072 -Node: Accessing Mouse Event Positions788397 -Node: Frame-Level Event Position Info789096 -Node: Window-Level Event Position Info790136 -Node: Event Text Position Info791900 -Node: Event Glyph Position Info794392 -Node: Event Toolbar Position Info795715 -Node: Other Event Position Info796386 -Node: Accessing Other Event Info796795 -Node: Working With Events798415 -Node: Converting Events804343 -Node: Reading Input807296 -Node: Key Sequence Input808298 -Node: Reading One Event810252 -Node: Dispatching an Event813013 -Node: Quoted Character Input813464 -Node: Peeking and Discarding814812 -Node: Waiting818716 -Node: Quitting821024 -Node: Prefix Command Arguments825432 -Node: Recursive Editing830519 -Node: Disabling Commands835316 -Node: Command History837384 -Node: Keyboard Macros839123 -Node: Keymaps841341 -Node: Keymap Terminology842918 -Node: Format of Keymaps845848 -Node: Creating Keymaps846259 -Node: Inheritance and Keymaps848338 -Node: Key Sequences850710 -Node: Prefix Keys855280 -Node: Active Keymaps858865 -Node: Key Lookup868080 -Node: Functions for Key Lookup873244 -Node: Changing Key Bindings878947 -Node: Key Binding Commands885834 -Node: Scanning Keymaps887900 -Node: Other Keymap Functions896412 -Node: Menus897034 -Node: Menu Format897576 -Node: Menubar Format906161 -Node: Menubar906786 -Node: Modifying Menus909900 -Node: Menu Filters914918 -Node: Pop-Up Menus916814 -Node: Menu Accelerators919020 -Node: Creating Menu Accelerators919742 -Node: Keyboard Menu Traversal921060 -Node: Menu Accelerator Functions921787 -Node: Buffers Menu924822 -Node: Dialog Boxes926116 -Node: Dialog Box Format926283 -Node: Dialog Box Functions927653 -Node: Toolbar928051 -Node: Toolbar Intro928376 -Node: Toolbar Descriptor Format930787 -Node: Specifying the Toolbar935281 -Node: Other Toolbar Variables938889 -Node: Scrollbars943316 -Node: Drag and Drop943452 -Node: Supported Protocols944528 -Node: OffiX DND945031 -Node: CDE dt946038 -Node: MSWindows OLE946629 -Node: Loose ends946800 -Node: Drop Interface947192 -Node: Drag Interface948214 -Node: Modes948388 -Node: Major Modes949339 -Node: Major Mode Conventions952255 -Node: Example Major Modes958210 -Node: Auto Major Mode966178 -Node: Mode Help973628 -Node: Derived Modes974729 -Node: Minor Modes976920 -Node: Minor Mode Conventions978222 -Node: Keymaps and Minor Modes981086 -Node: Modeline Format981921 -Node: Modeline Data983690 -Node: Modeline Variables987962 -Node: %-Constructs992678 -Node: Hooks995589 -Node: Documentation1002353 -Node: Documentation Basics1003776 -Node: Accessing Documentation1006828 -Node: Keys in Documentation1013019 -Node: Describing Characters1016482 -Node: Help Functions1018836 -Node: Obsoleteness1025279 -Node: Files1028273 -Node: Visiting Files1030198 -Node: Visiting Functions1031703 -Node: Subroutines of Visiting1036751 -Node: Saving Buffers1038827 -Node: Reading from Files1044920 -Node: Writing to Files1047077 -Node: File Locks1049794 -Node: Information about Files1052847 -Node: Testing Accessibility1053608 -Node: Kinds of Files1057348 -Node: Truenames1059029 -Node: File Attributes1060032 -Node: Changing File Attributes1065172 -Node: File Names1070578 -Node: File Name Components1072187 -Node: Directory Names1075288 -Node: Relative File Names1078741 -Node: File Name Expansion1079819 -Node: Unique File Names1083726 -Node: File Name Completion1085341 -Node: User Name Completion1088002 -Node: Contents of Directories1089342 -Node: Create/Delete Dirs1092655 -Node: Magic File Names1093761 -Node: Partial Files1099391 -Node: Intro to Partial Files1099619 -Node: Creating a Partial File1100859 -Node: Detached Partial Files1101794 -Node: Format Conversion1102916 -Node: Files and MS-DOS1109434 -Node: Backups and Auto-Saving1111498 -Node: Backup Files1112173 -Node: Making Backups1113570 -Node: Rename or Copy1116319 -Node: Numbered Backups1118812 -Node: Backup Names1121057 -Node: Auto-Saving1124340 -Node: Reverting1132482 -Node: Buffers1135640 -Node: Buffer Basics1137055 -Node: Current Buffer1139108 -Node: Buffer Names1143798 -Node: Buffer File Name1147003 -Node: Buffer Modification1151123 -Node: Modification Time1153319 -Node: Read Only Buffers1156694 -Node: The Buffer List1159112 -Node: Creating Buffers1163942 -Node: Killing Buffers1166091 -Node: Indirect Buffers1169822 -Node: Windows1172394 -Node: Basic Windows1173872 -Node: Splitting Windows1176970 -Node: Deleting Windows1183841 -Node: Selecting Windows1186522 -Node: Cyclic Window Ordering1189651 -Node: Buffers and Windows1194275 -Node: Displaying Buffers1196116 -Node: Choosing Window1201294 -Node: Window Point1209010 -Node: Window Start1211056 -Node: Vertical Scrolling1215546 -Node: Horizontal Scrolling1221683 -Node: Size of Window1225192 -Node: Position of Window1229910 -Node: Resizing Windows1232150 -Node: Window Configurations1237579 -Node: Frames1241004 -Node: Creating Frames1242773 -Node: Frame Properties1244114 -Node: Property Access1244930 -Node: Initial Properties1245779 -Node: X Frame Properties1248265 -Node: Size and Position1252899 -Node: Frame Name1254895 -Node: Frame Titles1255809 -Node: Deleting Frames1257633 -Node: Finding All Frames1258233 -Node: Frames and Windows1260227 -Node: Minibuffers and Frames1261932 -Node: Input Focus1262851 -Node: Visibility of Frames1265929 -Node: Raising and Lowering1267848 -Node: Frame Configurations1270225 -Node: Frame Hooks1270819 -Node: Consoles and Devices1272626 -Node: Basic Console Functions1275370 -Node: Basic Device Functions1275793 -Node: Console Types and Device Classes1276509 -Node: Connecting to a Console or Device1278706 -Node: The Selected Console and Device1280869 -Node: Console and Device I/O1281895 -Node: Positions1282659 -Node: Point1283628 -Node: Motion1286721 -Node: Character Motion1287488 -Node: Word Motion1289725 -Node: Buffer End Motion1291226 -Node: Text Lines1292723 -Node: Screen Lines1297318 -Node: List Motion1301381 -Node: Skipping Characters1304789 -Node: Excursions1307008 -Node: Narrowing1310043 -Node: Markers1315370 -Node: Overview of Markers1316272 -Node: Predicates on Markers1320965 -Node: Creating Markers1322211 -Node: Information from Markers1326248 -Node: Changing Markers1327346 -Node: The Mark1328724 -Node: The Region1337218 -Node: Text1342905 -Node: Near Point1345607 -Node: Buffer Contents1349794 -Node: Comparing Text1351200 -Node: Insertion1352608 -Node: Commands for Insertion1356451 -Node: Deletion1359409 -Node: User-Level Deletion1363006 -Node: The Kill Ring1367136 -Node: Kill Ring Concepts1369310 -Node: Kill Functions1370364 -Node: Yank Commands1372269 -Node: Low-Level Kill Ring1374140 -Node: Internals of Kill Ring1376926 -Node: Undo1379706 -Node: Maintaining Undo1384035 -Node: Filling1386655 -Node: Margins1392651 -Node: Auto Filling1396581 -Node: Sorting1397762 -Node: Columns1407063 -Node: Indentation1409579 -Node: Primitive Indent1410358 -Node: Mode-Specific Indent1411602 -Node: Region Indent1414113 -Node: Relative Indent1417061 -Node: Indent Tabs1419443 -Node: Motion by Indent1420765 -Node: Case Changes1421544 -Node: Text Properties1424795 -Node: Examining Properties1426610 -Node: Changing Properties1428477 -Node: Property Search1432072 -Node: Special Properties1436783 -Node: Saving Properties1437064 -Node: Substitution1440206 -Node: Registers1443477 -Node: Transposition1446020 -Node: Change Hooks1446914 -Node: Transformations1448954 -Node: Searching and Matching1453339 -Node: String Search1454470 -Node: Regular Expressions1459194 -Node: Syntax of Regexps1460561 -Node: Regexp Example1474941 -Node: Regexp Search1477111 -Node: POSIX Regexps1483199 -Node: Search and Replace1485034 -Node: Match Data1488399 -Node: Simple Match Data1489529 -Node: Replacing Match1493794 -Node: Entire Match Data1496128 -Node: Saving Match Data1498119 -Node: Searching and Case1499502 -Node: Standard Regexps1501536 -Node: Syntax Tables1503734 -Node: Syntax Basics1504850 -Node: Syntax Descriptors1507825 -Node: Syntax Class Table1509675 -Node: Syntax Flags1515713 -Node: Syntax Table Functions1518930 -Node: Motion and Syntax1522794 -Node: Parsing Expressions1524246 -Node: Standard Syntax Tables1530315 -Node: Syntax Table Internals1531159 -Node: Abbrevs1532186 -Node: Abbrev Mode1533990 -Node: Abbrev Tables1534710 -Node: Defining Abbrevs1536243 -Node: Abbrev Files1538148 -Node: Abbrev Expansion1539922 -Node: Standard Abbrev Tables1544553 -Node: Extents1545712 -Node: Intro to Extents1546955 -Node: Creating and Modifying Extents1550949 -Node: Extent Endpoints1552458 -Node: Finding Extents1555723 -Node: Mapping Over Extents1559474 -Node: Extent Properties1565592 -Node: Detached Extents1575736 -Node: Extent Parents1577595 -Node: Duplicable Extents1579290 -Node: Extents and Events1582513 -Node: Atomic Extents1584421 -Node: Specifiers1584868 -Node: Introduction to Specifiers1586671 -Node: Specifiers In-Depth1588981 -Node: Specifier Instancing1593896 -Node: Specifier Types1597158 -Node: Adding Specifications1602232 -Node: Retrieving Specifications1611595 -Node: Specifier Tag Functions1615330 -Node: Specifier Instancing Functions1618564 -Node: Specifier Example1621971 -Node: Creating Specifiers1625077 -Node: Specifier Validation Functions1627326 -Node: Other Specification Functions1629710 -Node: Faces and Window-System Objects1633529 -Node: Faces1633853 -Node: Merging Faces1635472 -Node: Basic Face Functions1637433 -Node: Face Properties1639532 -Node: Face Convenience Functions1649091 -Node: Other Face Display Functions1652224 -Node: Fonts1653037 -Node: Font Specifiers1653738 -Node: Font Instances1653979 -Node: Font Instance Names1654946 -Node: Font Instance Size1655787 -Node: Font Instance Characteristics1657073 -Node: Font Convenience Functions1658242 -Node: Colors1659532 -Node: Color Specifiers1659972 -Node: Color Instances1660199 -Node: Color Instance Properties1660943 -Node: Color Convenience Functions1661569 -Node: Glyphs1662622 -Node: Glyph Functions1664214 -Node: Creating Glyphs1664621 -Node: Glyph Properties1666208 -Node: Glyph Convenience Functions1675375 -Node: Glyph Dimensions1679322 -Node: Images1680402 -Node: Image Specifiers1680851 -Node: Image Instantiator Conversion1692275 -Node: Image Instances1693640 -Node: Image Instance Types1694391 -Node: Image Instance Functions1697046 -Node: Glyph Types1701616 -Node: Mouse Pointer1703388 -Node: Redisplay Glyphs1706391 -Node: Subwindows1707424 -Node: Annotations1707667 -Node: Annotation Basics1708684 -Node: Annotation Primitives1712622 -Node: Annotation Properties1713951 -Node: Locating Annotations1716991 -Node: Margin Primitives1717828 -Node: Annotation Hooks1719722 -Node: Display1720382 -Node: Refresh Screen1721360 -Node: Truncation1723271 -Node: The Echo Area1725798 -Node: Warnings1732234 -Node: Invisible Text1736670 -Node: Selective Display1739250 -Node: Overlay Arrow1743377 -Node: Temporary Displays1744731 -Node: Blinking1748852 -Node: Usual Display1751036 -Node: Display Tables1753586 -Node: Display Table Format1754390 -Node: Active Display Table1755834 -Node: Character Descriptors1757026 -Node: Beeping1757784 -Node: Hash Tables1762550 -Node: Introduction to Hash Tables1763158 -Node: Working With Hash Tables1769183 -Node: Weak Hash Tables1770300 -Node: Range Tables1772099 -Node: Introduction to Range Tables1772788 -Node: Working With Range Tables1773219 -Node: Databases1774104 -Node: Connecting to a Database1774403 -Node: Working With a Database1775494 -Node: Other Database Functions1776352 -Node: Processes1776926 -Node: Subprocess Creation1779150 -Node: Synchronous Processes1782443 -Node: MS-DOS Subprocesses1789141 -Node: Asynchronous Processes1790215 -Node: Deleting Processes1793919 -Node: Process Information1795790 -Node: Input to Processes1799718 -Node: Signals to Processes1801987 -Node: Output from Processes1806407 -Node: Process Buffers1807219 -Node: Filter Functions1810088 -Node: Accepting Output1815655 -Node: Sentinels1817182 -Node: Process Window Size1820675 -Node: Transaction Queues1821024 -Node: Network1822722 -Node: System Interface1824556 -Node: Starting Up1825826 -Node: Start-up Summary1826420 -Node: Init File1829974 -Node: Terminal-Specific1832358 -Node: Command Line Arguments1835517 -Node: Getting Out1839006 -Node: Killing XEmacs1839575 -Node: Suspending XEmacs1841244 -Node: System Environment1844560 -Node: User Identification1851225 -Node: Time of Day1854755 -Node: Time Conversion1857544 -Node: Timers1862586 -Node: Terminal Input1864759 -Node: Input Modes1865262 -Node: Translating Input1867675 -Node: Recording Input1871840 -Node: Terminal Output1873941 -Node: Flow Control1877564 -Node: Batch Mode1881357 -Node: X-Windows1882739 -Node: X Selections1883551 -Node: X Server1885761 -Node: Resources1886162 -Node: Server Data1891303 -Node: Grabs1892510 -Node: X Miscellaneous1894091 -Node: ToolTalk Support1896476 -Node: XEmacs ToolTalk API Summary1896693 -Node: Sending Messages1897993 -Node: Example of Sending Messages1898244 -Node: Elisp Interface for Sending Messages1899306 -Node: Receiving Messages1905699 -Node: Example of Receiving Messages1905922 -Node: Elisp Interface for Receiving Messages1906758 -Node: LDAP Support1910583 -Node: Building XEmacs with LDAP support1911079 -Node: XEmacs LDAP API1912057 -Node: LDAP Variables1912787 -Node: The High-Level LDAP API1915264 -Node: The Low-Level LDAP API1916377 -Node: The LDAP Lisp Object1916651 -Node: Opening and Closing a LDAP Connection1917204 -Node: Searching on a LDAP Server (Low-level)1918987 -Node: Syntax of Search Filters1920382 -Node: Internationalization1921680 -Node: I18N Levels 1 and 21922017 -Node: I18N Level 31922723 -Node: Level 3 Basics1923004 -Node: Level 3 Primitives1923837 -Node: Dynamic Messaging1925443 -Node: Domain Specification1925906 -Node: Documentation String Extraction1927809 -Node: I18N Level 41928727 -Node: MULE1928919 -Node: Internationalization Terminology1930030 -Node: Charsets1938569 -Node: Charset Properties1939265 -Node: Basic Charset Functions1943951 -Node: Charset Property Functions1946132 -Node: Predefined Charsets1948175 -Node: MULE Characters1951095 -Node: Composite Characters1951942 -Node: ISO 20221953196 -Node: Coding Systems1958918 -Node: Coding System Types1960840 -Node: EOL Conversion1962659 -Node: Coding System Properties1963842 -Node: Basic Coding System Functions1967694 -Node: Coding System Property Functions1969598 -Node: Encoding and Decoding Text1970156 -Node: Detection of Textual Encoding1971292 -Node: Big5 and Shift-JIS Functions1972828 -Node: CCL1973916 -Node: CCL Syntax1977020 -Node: CCL Statements1978608 -Node: CCL Expressions1983256 -Node: Calling CCL1986408 -Node: CCL Examples1989398 -Node: Category Tables1989535 -Node: Tips1991894 -Node: Style Tips1992535 -Node: Compilation Tips2002055 -Node: Documentation Tips2003971 -Node: Comment Tips2009480 -Node: Library Headers2012482 -Node: Building XEmacs and Object Allocation2016454 -Node: Building XEmacs2017337 -Node: Pure Storage2023672 -Node: Garbage Collection2026460 -Node: Standard Errors2037599 -Node: Standard Buffer-Local Variables2041808 -Node: Standard Keymaps2044484 -Node: Standard Hooks2048216 -Node: Index2055716 +Node: Processing of Errors377969 +Node: Handling Errors380249 +Node: Error Symbols387481 +Node: Cleanups391438 +Node: Variables395218 +Node: Global Variables396987 +Node: Constant Variables398063 +Node: Local Variables398689 +Node: Void Variables403633 +Node: Defining Variables407144 +Node: Accessing Variables414309 +Node: Setting Variables415735 +Node: Variable Scoping420254 +Node: Scope421853 +Node: Extent423378 +Node: Impl of Scope424857 +Node: Using Scoping426820 +Node: Buffer-Local Variables428342 +Node: Intro to Buffer-Local429178 +Node: Creating Buffer-Local431721 +Node: Default Value436941 +Node: Variable Aliases440085 +Node: Functions441871 +Node: What Is a Function442965 +Node: Lambda Expressions447012 +Node: Lambda Components447922 +Node: Simple Lambda449754 +Node: Argument List451413 +Node: Function Documentation455141 +Node: Function Names457083 +Node: Defining Functions459657 +Node: Calling Functions462699 +Node: Mapping Functions466548 +Node: Anonymous Functions469196 +Node: Function Cells472441 +Node: Inline Functions477251 +Node: Related Topics479061 +Node: Macros480114 +Node: Simple Macro481398 +Node: Expansion482133 +Node: Compiling Macros485107 +Node: Defining Macros486945 +Node: Backquote488263 +Node: Problems with Macros490661 +Node: Argument Evaluation491356 +Node: Surprising Local Vars494257 +Node: Eval During Expansion496325 +Node: Repeated Expansion498019 +Node: Customization499930 +Node: Common Keywords500399 +Node: Group Definitions503244 +Node: Variable Definitions505437 +Node: Customization Types510420 +Node: Simple Types511856 +Node: Composite Types514013 +Node: Splicing into Lists518703 +Node: Type Keywords520538 +Node: Loading524058 +Node: How Programs Do Loading525731 +Node: Autoload534860 +Node: Repeated Loading540940 +Node: Named Features543054 +Node: Unloading549487 +Node: Hooks for Loading551643 +Node: Byte Compilation552360 +Node: Speed of Byte-Code554277 +Node: Compilation Functions555484 +Node: Docs and Compilation561873 +Node: Dynamic Loading564526 +Node: Eval During Compile566890 +Node: Compiled-Function Objects568155 +Node: Disassembly572954 +Node: Debugging580208 +Node: Debugger581620 +Node: Error Debugging582765 +Node: Infinite Loops585518 +Node: Function Debugging586762 +Node: Explicit Debug589552 +Node: Using Debugger590324 +Node: Debugger Commands592188 +Node: Invoking the Debugger596505 +Node: Internals of Debugger600420 +Node: Syntax Errors605297 +Node: Excess Open606545 +Node: Excess Close608420 +Node: Compilation Errors609841 +Node: Edebug611129 +Node: Using Edebug613236 +Node: Instrumenting615933 +Node: Edebug Execution Modes619422 +Node: Jumping622532 +Node: Edebug Misc624875 +Node: Breakpoints626264 +Node: Global Break Condition629070 +Node: Embedded Breakpoints630025 +Node: Trapping Errors630980 +Node: Edebug Views633056 +Node: Edebug Eval635021 +Node: Eval List636198 +Node: Reading in Edebug639583 +Node: Printing in Edebug640382 +Node: Tracing642097 +Node: Coverage Testing643983 +Node: The Outside Context646024 +Node: Checking Whether to Stop646973 +Node: Edebug Display Update647619 +Node: Edebug Recursive Edit649641 +Node: Instrumenting Macro Calls651295 +Node: Specification List653777 +Node: Backtracking663188 +Node: Debugging Backquote665126 +Node: Specification Examples668832 +Node: Edebug Options670899 +Node: Read and Print676236 +Node: Streams Intro677213 +Node: Input Streams679231 +Node: Input Functions684132 +Node: Output Streams686192 +Node: Output Functions690244 +Node: Output Variables694544 +Node: Minibuffers699343 +Node: Intro to Minibuffers700495 +Node: Text from Minibuffer702685 +Node: Object from Minibuffer707562 +Node: Minibuffer History710769 +Node: Completion713748 +Node: Basic Completion715723 +Node: Minibuffer Completion720735 +Node: Completion Commands724302 +Node: High-Level Completion728946 +Node: Reading File Names732970 +Node: Programmed Completion736654 +Node: Yes-or-No Queries739036 +Node: Multiple Queries744732 +Node: Reading a Password748800 +Node: Minibuffer Misc750137 +Node: Command Loop755010 +Node: Command Overview756356 +Node: Defining Commands759640 +Node: Using Interactive760388 +Node: Interactive Codes765162 +Node: Interactive Examples770966 +Node: Interactive Call772280 +Node: Command Loop Info777683 +Node: Events782662 +Node: Event Types784122 +Node: Event Contents786045 +Node: Event Predicates790521 +Node: Accessing Mouse Event Positions791846 +Node: Frame-Level Event Position Info792545 +Node: Window-Level Event Position Info793585 +Node: Event Text Position Info795349 +Node: Event Glyph Position Info797841 +Node: Event Toolbar Position Info799164 +Node: Other Event Position Info799835 +Node: Accessing Other Event Info800244 +Node: Working With Events801864 +Node: Converting Events807792 +Node: Reading Input810745 +Node: Key Sequence Input811747 +Node: Reading One Event813701 +Node: Dispatching an Event816462 +Node: Quoted Character Input816913 +Node: Peeking and Discarding818261 +Node: Waiting822165 +Node: Quitting824473 +Node: Prefix Command Arguments828881 +Node: Recursive Editing833968 +Node: Disabling Commands838765 +Node: Command History840833 +Node: Keyboard Macros842572 +Node: Keymaps844790 +Node: Keymap Terminology846367 +Node: Format of Keymaps849297 +Node: Creating Keymaps849708 +Node: Inheritance and Keymaps851787 +Node: Key Sequences854159 +Node: Prefix Keys858729 +Node: Active Keymaps862314 +Node: Key Lookup871529 +Node: Functions for Key Lookup876693 +Node: Changing Key Bindings882396 +Node: Key Binding Commands889283 +Node: Scanning Keymaps891349 +Node: Other Keymap Functions899861 +Node: Menus900483 +Node: Menu Format901025 +Node: Menubar Format909610 +Node: Menubar910235 +Node: Modifying Menus913349 +Node: Menu Filters918367 +Node: Pop-Up Menus920263 +Node: Menu Accelerators922469 +Node: Creating Menu Accelerators923191 +Node: Keyboard Menu Traversal924509 +Node: Menu Accelerator Functions925236 +Node: Buffers Menu928271 +Node: Dialog Boxes929565 +Node: Dialog Box Format929732 +Node: Dialog Box Functions931102 +Node: Toolbar931500 +Node: Toolbar Intro931825 +Node: Toolbar Descriptor Format934236 +Node: Specifying the Toolbar938730 +Node: Other Toolbar Variables942338 +Node: Scrollbars946765 +Node: Drag and Drop946901 +Node: Supported Protocols947977 +Node: OffiX DND948480 +Node: CDE dt949487 +Node: MSWindows OLE950078 +Node: Loose ends950249 +Node: Drop Interface950641 +Node: Drag Interface951663 +Node: Modes951837 +Node: Major Modes952788 +Node: Major Mode Conventions955704 +Node: Example Major Modes961659 +Node: Auto Major Mode969627 +Node: Mode Help977077 +Node: Derived Modes978178 +Node: Minor Modes980369 +Node: Minor Mode Conventions981671 +Node: Keymaps and Minor Modes984535 +Node: Modeline Format985370 +Node: Modeline Data987139 +Node: Modeline Variables991411 +Node: %-Constructs996127 +Node: Hooks999038 +Node: Documentation1005802 +Node: Documentation Basics1007225 +Node: Accessing Documentation1010277 +Node: Keys in Documentation1016468 +Node: Describing Characters1019931 +Node: Help Functions1022285 +Node: Obsoleteness1028728 +Node: Files1031722 +Node: Visiting Files1033647 +Node: Visiting Functions1035152 +Node: Subroutines of Visiting1040200 +Node: Saving Buffers1042276 +Node: Reading from Files1048369 +Node: Writing to Files1050526 +Node: File Locks1053243 +Node: Information about Files1056296 +Node: Testing Accessibility1057057 +Node: Kinds of Files1060797 +Node: Truenames1062478 +Node: File Attributes1063481 +Node: Changing File Attributes1068621 +Node: File Names1074027 +Node: File Name Components1075636 +Node: Directory Names1078737 +Node: Relative File Names1082190 +Node: File Name Expansion1083268 +Node: Unique File Names1087175 +Node: File Name Completion1088790 +Node: User Name Completion1091451 +Node: Contents of Directories1092791 +Node: Create/Delete Dirs1096104 +Node: Magic File Names1097210 +Node: Partial Files1102840 +Node: Intro to Partial Files1103068 +Node: Creating a Partial File1104308 +Node: Detached Partial Files1105243 +Node: Format Conversion1106365 +Node: Files and MS-DOS1112883 +Node: Backups and Auto-Saving1114947 +Node: Backup Files1115622 +Node: Making Backups1117019 +Node: Rename or Copy1119768 +Node: Numbered Backups1122261 +Node: Backup Names1124506 +Node: Auto-Saving1127789 +Node: Reverting1135931 +Node: Buffers1139089 +Node: Buffer Basics1140504 +Node: Current Buffer1142557 +Node: Buffer Names1147247 +Node: Buffer File Name1150452 +Node: Buffer Modification1154572 +Node: Modification Time1156768 +Node: Read Only Buffers1160143 +Node: The Buffer List1162561 +Node: Creating Buffers1167391 +Node: Killing Buffers1169540 +Node: Indirect Buffers1173271 +Node: Windows1175843 +Node: Basic Windows1177321 +Node: Splitting Windows1180419 +Node: Deleting Windows1187290 +Node: Selecting Windows1189971 +Node: Cyclic Window Ordering1193100 +Node: Buffers and Windows1197724 +Node: Displaying Buffers1199565 +Node: Choosing Window1204743 +Node: Window Point1212459 +Node: Window Start1214505 +Node: Vertical Scrolling1218995 +Node: Horizontal Scrolling1225132 +Node: Size of Window1228641 +Node: Position of Window1233359 +Node: Resizing Windows1235599 +Node: Window Configurations1241028 +Node: Frames1244453 +Node: Creating Frames1246222 +Node: Frame Properties1247563 +Node: Property Access1248379 +Node: Initial Properties1249228 +Node: X Frame Properties1251714 +Node: Size and Position1256348 +Node: Frame Name1258344 +Node: Frame Titles1259258 +Node: Deleting Frames1261082 +Node: Finding All Frames1261682 +Node: Frames and Windows1263676 +Node: Minibuffers and Frames1265381 +Node: Input Focus1266300 +Node: Visibility of Frames1269378 +Node: Raising and Lowering1271297 +Node: Frame Configurations1273674 +Node: Frame Hooks1274268 +Node: Consoles and Devices1276075 +Node: Basic Console Functions1278819 +Node: Basic Device Functions1279242 +Node: Console Types and Device Classes1279958 +Node: Connecting to a Console or Device1282155 +Node: The Selected Console and Device1284318 +Node: Console and Device I/O1285344 +Node: Positions1286108 +Node: Point1287077 +Node: Motion1290170 +Node: Character Motion1290937 +Node: Word Motion1293174 +Node: Buffer End Motion1294675 +Node: Text Lines1296172 +Node: Screen Lines1300767 +Node: List Motion1304830 +Node: Skipping Characters1308238 +Node: Excursions1310457 +Node: Narrowing1313492 +Node: Markers1318819 +Node: Overview of Markers1319721 +Node: Predicates on Markers1324414 +Node: Creating Markers1325660 +Node: Information from Markers1329697 +Node: Changing Markers1330795 +Node: The Mark1332173 +Node: The Region1340667 +Node: Text1346354 +Node: Near Point1349056 +Node: Buffer Contents1353243 +Node: Comparing Text1354649 +Node: Insertion1356057 +Node: Commands for Insertion1359900 +Node: Deletion1362858 +Node: User-Level Deletion1366455 +Node: The Kill Ring1370585 +Node: Kill Ring Concepts1372759 +Node: Kill Functions1373813 +Node: Yank Commands1375718 +Node: Low-Level Kill Ring1377589 +Node: Internals of Kill Ring1380375 +Node: Undo1383155 +Node: Maintaining Undo1387484 +Node: Filling1390104 +Node: Margins1396100 +Node: Auto Filling1400030 +Node: Sorting1401211 +Node: Columns1410512 +Node: Indentation1413028 +Node: Primitive Indent1413807 +Node: Mode-Specific Indent1415051 +Node: Region Indent1417562 +Node: Relative Indent1420510 +Node: Indent Tabs1422892 +Node: Motion by Indent1424214 +Node: Case Changes1424993 +Node: Text Properties1428244 +Node: Examining Properties1430059 +Node: Changing Properties1431926 +Node: Property Search1435521 +Node: Special Properties1440232 +Node: Saving Properties1440513 +Node: Substitution1443655 +Node: Registers1446926 +Node: Transposition1449469 +Node: Change Hooks1450363 +Node: Transformations1452403 +Node: Searching and Matching1456788 +Node: String Search1457919 +Node: Regular Expressions1462643 +Node: Syntax of Regexps1464010 +Node: Regexp Example1478390 +Node: Regexp Search1480560 +Node: POSIX Regexps1486648 +Node: Search and Replace1488483 +Node: Match Data1491848 +Node: Simple Match Data1492978 +Node: Replacing Match1497243 +Node: Entire Match Data1499577 +Node: Saving Match Data1501568 +Node: Searching and Case1502951 +Node: Standard Regexps1504985 +Node: Syntax Tables1507183 +Node: Syntax Basics1508299 +Node: Syntax Descriptors1511274 +Node: Syntax Class Table1513124 +Node: Syntax Flags1519162 +Node: Syntax Table Functions1522379 +Node: Motion and Syntax1526243 +Node: Parsing Expressions1527695 +Node: Standard Syntax Tables1533764 +Node: Syntax Table Internals1534608 +Node: Abbrevs1535635 +Node: Abbrev Mode1537439 +Node: Abbrev Tables1538159 +Node: Defining Abbrevs1539692 +Node: Abbrev Files1541597 +Node: Abbrev Expansion1543371 +Node: Standard Abbrev Tables1548002 +Node: Extents1549161 +Node: Intro to Extents1550404 +Node: Creating and Modifying Extents1554398 +Node: Extent Endpoints1555907 +Node: Finding Extents1559172 +Node: Mapping Over Extents1562923 +Node: Extent Properties1569041 +Node: Detached Extents1579185 +Node: Extent Parents1581044 +Node: Duplicable Extents1582739 +Node: Extents and Events1585962 +Node: Atomic Extents1587870 +Node: Specifiers1588317 +Node: Introduction to Specifiers1590120 +Node: Specifiers In-Depth1592430 +Node: Specifier Instancing1597345 +Node: Specifier Types1600607 +Node: Adding Specifications1605681 +Node: Retrieving Specifications1615044 +Node: Specifier Tag Functions1618779 +Node: Specifier Instancing Functions1622013 +Node: Specifier Example1625420 +Node: Creating Specifiers1628526 +Node: Specifier Validation Functions1630775 +Node: Other Specification Functions1633159 +Node: Faces and Window-System Objects1636978 +Node: Faces1637302 +Node: Merging Faces1638921 +Node: Basic Face Functions1640882 +Node: Face Properties1642981 +Node: Face Convenience Functions1652540 +Node: Other Face Display Functions1655673 +Node: Fonts1656486 +Node: Font Specifiers1657187 +Node: Font Instances1657428 +Node: Font Instance Names1658395 +Node: Font Instance Size1659236 +Node: Font Instance Characteristics1660522 +Node: Font Convenience Functions1661691 +Node: Colors1662981 +Node: Color Specifiers1663421 +Node: Color Instances1663648 +Node: Color Instance Properties1664392 +Node: Color Convenience Functions1665018 +Node: Glyphs1666071 +Node: Glyph Functions1667663 +Node: Creating Glyphs1668070 +Node: Glyph Properties1669657 +Node: Glyph Convenience Functions1678824 +Node: Glyph Dimensions1682771 +Node: Images1683851 +Node: Image Specifiers1684300 +Node: Image Instantiator Conversion1695724 +Node: Image Instances1697089 +Node: Image Instance Types1697840 +Node: Image Instance Functions1700495 +Node: Glyph Types1705065 +Node: Mouse Pointer1706837 +Node: Redisplay Glyphs1709840 +Node: Subwindows1710873 +Node: Annotations1711116 +Node: Annotation Basics1712133 +Node: Annotation Primitives1716071 +Node: Annotation Properties1717400 +Node: Locating Annotations1720440 +Node: Margin Primitives1721277 +Node: Annotation Hooks1723171 +Node: Display1723831 +Node: Refresh Screen1724809 +Node: Truncation1726720 +Node: The Echo Area1729247 +Node: Warnings1735683 +Node: Invisible Text1740119 +Node: Selective Display1742699 +Node: Overlay Arrow1746826 +Node: Temporary Displays1748180 +Node: Blinking1752301 +Node: Usual Display1754485 +Node: Display Tables1757035 +Node: Display Table Format1757839 +Node: Active Display Table1759283 +Node: Character Descriptors1760475 +Node: Beeping1761233 +Node: Hash Tables1765999 +Node: Introduction to Hash Tables1766607 +Node: Working With Hash Tables1772632 +Node: Weak Hash Tables1773749 +Node: Range Tables1775548 +Node: Introduction to Range Tables1776237 +Node: Working With Range Tables1776668 +Node: Databases1777553 +Node: Connecting to a Database1777852 +Node: Working With a Database1778943 +Node: Other Database Functions1779801 +Node: Processes1780375 +Node: Subprocess Creation1782599 +Node: Synchronous Processes1785892 +Node: MS-DOS Subprocesses1792590 +Node: Asynchronous Processes1793664 +Node: Deleting Processes1797368 +Node: Process Information1799239 +Node: Input to Processes1803167 +Node: Signals to Processes1805436 +Node: Output from Processes1809856 +Node: Process Buffers1810668 +Node: Filter Functions1813537 +Node: Accepting Output1819104 +Node: Sentinels1820631 +Node: Process Window Size1824124 +Node: Transaction Queues1824473 +Node: Network1826171 +Node: System Interface1828005 +Node: Starting Up1829275 +Node: Start-up Summary1829869 +Node: Init File1833423 +Node: Terminal-Specific1835807 +Node: Command Line Arguments1838966 +Node: Getting Out1842455 +Node: Killing XEmacs1843024 +Node: Suspending XEmacs1844693 +Node: System Environment1848009 +Node: User Identification1854674 +Node: Time of Day1858204 +Node: Time Conversion1860993 +Node: Timers1866035 +Node: Terminal Input1868208 +Node: Input Modes1868711 +Node: Translating Input1871124 +Node: Recording Input1875289 +Node: Terminal Output1877390 +Node: Flow Control1881013 +Node: Batch Mode1884806 +Node: X-Windows1886188 +Node: X Selections1887000 +Node: X Server1889210 +Node: Resources1889611 +Node: Server Data1894752 +Node: Grabs1895959 +Node: X Miscellaneous1897540 +Node: ToolTalk Support1899925 +Node: XEmacs ToolTalk API Summary1900142 +Node: Sending Messages1901442 +Node: Example of Sending Messages1901693 +Node: Elisp Interface for Sending Messages1902755 +Node: Receiving Messages1909148 +Node: Example of Receiving Messages1909371 +Node: Elisp Interface for Receiving Messages1910207 +Node: LDAP Support1914032 +Node: Building XEmacs with LDAP support1914528 +Node: XEmacs LDAP API1915506 +Node: LDAP Variables1916236 +Node: The High-Level LDAP API1918713 +Node: The Low-Level LDAP API1919826 +Node: The LDAP Lisp Object1920100 +Node: Opening and Closing a LDAP Connection1920653 +Node: Searching on a LDAP Server (Low-level)1922436 +Node: Syntax of Search Filters1923831 +Node: Internationalization1925129 +Node: I18N Levels 1 and 21925466 +Node: I18N Level 31926172 +Node: Level 3 Basics1926453 +Node: Level 3 Primitives1927286 +Node: Dynamic Messaging1928892 +Node: Domain Specification1929355 +Node: Documentation String Extraction1931258 +Node: I18N Level 41932176 +Node: MULE1932368 +Node: Internationalization Terminology1933479 +Node: Charsets1942018 +Node: Charset Properties1942714 +Node: Basic Charset Functions1947400 +Node: Charset Property Functions1949581 +Node: Predefined Charsets1951624 +Node: MULE Characters1954544 +Node: Composite Characters1955391 +Node: ISO 20221956645 +Node: Coding Systems1962367 +Node: Coding System Types1964289 +Node: EOL Conversion1966108 +Node: Coding System Properties1967291 +Node: Basic Coding System Functions1971143 +Node: Coding System Property Functions1973047 +Node: Encoding and Decoding Text1973605 +Node: Detection of Textual Encoding1974741 +Node: Big5 and Shift-JIS Functions1976277 +Node: CCL1977365 +Node: CCL Syntax1980469 +Node: CCL Statements1982057 +Node: CCL Expressions1986705 +Node: Calling CCL1989857 +Node: CCL Examples1992847 +Node: Category Tables1992984 +Node: Tips1995343 +Node: Style Tips1995984 +Node: Compilation Tips2005504 +Node: Documentation Tips2007420 +Node: Comment Tips2012929 +Node: Library Headers2015931 +Node: Building XEmacs and Object Allocation2019903 +Node: Building XEmacs2020786 +Node: Pure Storage2027121 +Node: Garbage Collection2029909 +Node: Standard Errors2041048 +Node: Standard Buffer-Local Variables2045257 +Node: Standard Keymaps2047933 +Node: Standard Hooks2051665 +Node: Index2059165  End Tag Table diff --git a/info/lispref.info-10 b/info/lispref.info-10 index d90ceeb..ba008df 100644 --- a/info/lispref.info-10 +++ b/info/lispref.info-10 @@ -50,6 +50,89 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +File: lispref.info, Node: Default Value, Prev: Creating Buffer-Local, Up: Buffer-Local Variables + +The Default Value of a Buffer-Local Variable +-------------------------------------------- + + The global value of a variable with buffer-local bindings is also +called the "default" value, because it is the value that is in effect +except when specifically overridden. + + The functions `default-value' and `setq-default' access and change a +variable's default value regardless of whether the current buffer has a +buffer-local binding. For example, you could use `setq-default' to +change the default setting of `paragraph-start' for most buffers; and +this would work even when you are in a C or Lisp mode buffer that has a +buffer-local value for this variable. + + The special forms `defvar' and `defconst' also set the default value +(if they set the variable at all), rather than any local value. + + - Function: default-value SYMBOL + This function returns SYMBOL's default value. This is the value + that is seen in buffers that do not have their own values for this + variable. If SYMBOL is not buffer-local, this is equivalent to + `symbol-value' (*note Accessing Variables::.). + + - Function: default-boundp SYMBOL + The function `default-boundp' tells you whether SYMBOL's default + value is nonvoid. If `(default-boundp 'foo)' returns `nil', then + `(default-value 'foo)' would get an error. + + `default-boundp' is to `default-value' as `boundp' is to + `symbol-value'. + + - Special Form: setq-default SYMBOL VALUE + This sets the default value of SYMBOL to VALUE. It does not + evaluate SYMBOL, but does evaluate VALUE. The value of the + `setq-default' form is VALUE. + + If a SYMBOL is not buffer-local for the current buffer, and is not + marked automatically buffer-local, `setq-default' has the same + effect as `setq'. If SYMBOL is buffer-local for the current + buffer, then this changes the value that other buffers will see + (as long as they don't have a buffer-local value), but not the + value that the current buffer sees. + + ;; In buffer `foo': + (make-local-variable 'local) + => local + (setq local 'value-in-foo) + => value-in-foo + (setq-default local 'new-default) + => new-default + local + => value-in-foo + (default-value 'local) + => new-default + + ;; In (the new) buffer `bar': + local + => new-default + (default-value 'local) + => new-default + (setq local 'another-default) + => another-default + (default-value 'local) + => another-default + + ;; Back in buffer `foo': + local + => value-in-foo + (default-value 'local) + => another-default + + - Function: set-default SYMBOL VALUE + This function is like `setq-default', except that SYMBOL is + evaluated. + + (set-default (car '(a b c)) 23) + => 23 + (default-value 'a) + => 23 + + File: lispref.info, Node: Variable Aliases, Prev: Buffer-Local Variables, Up: Variables Variable Aliases @@ -1160,71 +1243,3 @@ this is unusual. (macroexpand '(inc2 r s)) => (progn (inc r) (inc s)) ; `inc' not expanded here. - -File: lispref.info, Node: Compiling Macros, Next: Defining Macros, Prev: Expansion, Up: Macros - -Macros and Byte Compilation -=========================== - - You might ask why we take the trouble to compute an expansion for a -macro and then evaluate the expansion. Why not have the macro body -produce the desired results directly? The reason has to do with -compilation. - - When a macro call appears in a Lisp program being compiled, the Lisp -compiler calls the macro definition just as the interpreter would, and -receives an expansion. But instead of evaluating this expansion, it -compiles the expansion as if it had appeared directly in the program. -As a result, the compiled code produces the value and side effects -intended for the macro, but executes at full compiled speed. This would -not work if the macro body computed the value and side effects -itself--they would be computed at compile time, which is not useful. - - In order for compilation of macro calls to work, the macros must be -defined in Lisp when the calls to them are compiled. The compiler has a -special feature to help you do this: if a file being compiled contains a -`defmacro' form, the macro is defined temporarily for the rest of the -compilation of that file. To use this feature, you must define the -macro in the same file where it is used and before its first use. - - Byte-compiling a file executes any `require' calls at top-level in -the file. This is in case the file needs the required packages for -proper compilation. One way to ensure that necessary macro definitions -are available during compilation is to require the files that define -them (*note Named Features::.). To avoid loading the macro definition -files when someone *runs* the compiled program, write -`eval-when-compile' around the `require' calls (*note Eval During -Compile::.). - - -File: lispref.info, Node: Defining Macros, Next: Backquote, Prev: Compiling Macros, Up: Macros - -Defining Macros -=============== - - A Lisp macro is a list whose CAR is `macro'. Its CDR should be a -function; expansion of the macro works by applying the function (with -`apply') to the list of unevaluated argument-expressions from the macro -call. - - It is possible to use an anonymous Lisp macro just like an anonymous -function, but this is never done, because it does not make sense to pass -an anonymous macro to functionals such as `mapcar'. In practice, all -Lisp macros have names, and they are usually defined with the special -form `defmacro'. - - - Special Form: defmacro NAME ARGUMENT-LIST BODY-FORMS... - `defmacro' defines the symbol NAME as a macro that looks like this: - - (macro lambda ARGUMENT-LIST . BODY-FORMS) - - This macro object is stored in the function cell of NAME. The - value returned by evaluating the `defmacro' form is NAME, but - usually we ignore this value. - - The shape and meaning of ARGUMENT-LIST is the same as in a - function, and the keywords `&rest' and `&optional' may be used - (*note Argument List::.). Macros may have a documentation string, - but any `interactive' declaration is ignored since macros cannot be - called interactively. - diff --git a/info/lispref.info-11 b/info/lispref.info-11 index 20e1353..023ded4 100644 --- a/info/lispref.info-11 +++ b/info/lispref.info-11 @@ -50,6 +50,74 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +File: lispref.info, Node: Compiling Macros, Next: Defining Macros, Prev: Expansion, Up: Macros + +Macros and Byte Compilation +=========================== + + You might ask why we take the trouble to compute an expansion for a +macro and then evaluate the expansion. Why not have the macro body +produce the desired results directly? The reason has to do with +compilation. + + When a macro call appears in a Lisp program being compiled, the Lisp +compiler calls the macro definition just as the interpreter would, and +receives an expansion. But instead of evaluating this expansion, it +compiles the expansion as if it had appeared directly in the program. +As a result, the compiled code produces the value and side effects +intended for the macro, but executes at full compiled speed. This would +not work if the macro body computed the value and side effects +itself--they would be computed at compile time, which is not useful. + + In order for compilation of macro calls to work, the macros must be +defined in Lisp when the calls to them are compiled. The compiler has a +special feature to help you do this: if a file being compiled contains a +`defmacro' form, the macro is defined temporarily for the rest of the +compilation of that file. To use this feature, you must define the +macro in the same file where it is used and before its first use. + + Byte-compiling a file executes any `require' calls at top-level in +the file. This is in case the file needs the required packages for +proper compilation. One way to ensure that necessary macro definitions +are available during compilation is to require the files that define +them (*note Named Features::.). To avoid loading the macro definition +files when someone *runs* the compiled program, write +`eval-when-compile' around the `require' calls (*note Eval During +Compile::.). + + +File: lispref.info, Node: Defining Macros, Next: Backquote, Prev: Compiling Macros, Up: Macros + +Defining Macros +=============== + + A Lisp macro is a list whose CAR is `macro'. Its CDR should be a +function; expansion of the macro works by applying the function (with +`apply') to the list of unevaluated argument-expressions from the macro +call. + + It is possible to use an anonymous Lisp macro just like an anonymous +function, but this is never done, because it does not make sense to pass +an anonymous macro to functionals such as `mapcar'. In practice, all +Lisp macros have names, and they are usually defined with the special +form `defmacro'. + + - Special Form: defmacro NAME ARGUMENT-LIST BODY-FORMS... + `defmacro' defines the symbol NAME as a macro that looks like this: + + (macro lambda ARGUMENT-LIST . BODY-FORMS) + + This macro object is stored in the function cell of NAME. The + value returned by evaluating the `defmacro' form is NAME, but + usually we ignore this value. + + The shape and meaning of ARGUMENT-LIST is the same as in a + function, and the keywords `&rest' and `&optional' may be used + (*note Argument List::.). Macros may have a documentation string, + but any `interactive' declaration is ignored since macros cannot be + called interactively. + + File: lispref.info, Node: Backquote, Next: Problems with Macros, Prev: Defining Macros, Up: Macros Backquote diff --git a/info/lispref.info-13 b/info/lispref.info-13 index a6e7a58..1448207 100644 --- a/info/lispref.info-13 +++ b/info/lispref.info-13 @@ -80,6 +80,10 @@ debugger, set the variable `debug-on-error' to non-`nil'. happen in process filter functions and sentinels. Therefore, these errors also can invoke the debugger. *Note Processes::. + - User Option: debug-on-signal + This variable is similar to `debug-on-error' but breaks whenever + an error is signalled, regardless of whether it would be handled. + - User Option: debug-ignored-errors This variable specifies certain kinds of errors that should not enter the debugger. Its value is a list of error condition @@ -105,10 +109,6 @@ best way to make `.emacs' set `debug-on-error' permanently is with (add-hook 'after-init-hook '(lambda () (setq debug-on-error t))) - - User Option: debug-on-signal - This variable is similar to `debug-on-error' but breaks whenever - an error is signalled, regardless of whether it would be handled. -  File: lispref.info, Node: Infinite Loops, Next: Function Debugging, Prev: Error Debugging, Up: Debugger diff --git a/info/lispref.info-44 b/info/lispref.info-44 index 194e4fb..16137cc 100644 --- a/info/lispref.info-44 +++ b/info/lispref.info-44 @@ -529,6 +529,7 @@ Index * cdr-safe: List Elements. * ceiling: Numeric Conversions. * centering point: Vertical Scrolling. +* cerror: Signaling Errors. * change hooks: Change Hooks. * change-major-mode-hook: Major Mode Conventions. * changing key bindings: Changing Key Bindings. @@ -580,6 +581,7 @@ Index * charset-registry: Charset Property Functions. * charset-reverse-direction-charset: Basic Charset Functions. * charsetp: Charsets. +* check-argument-type: Signaling Errors. * check-toolbar-button-syntax: Toolbar Descriptor Format. * check-valid-char-table-value: Working With Char Tables. * check-valid-inst-list: Specifier Validation Functions. @@ -593,7 +595,6 @@ Index * CL note---default optional arg: Argument List. * CL note---integers vrs eq: Comparison of Numbers. * CL note---lack union, set: Sets And Lists. -* CL note---no continuable errors: Signaling Errors. * CL note---only throw in Emacs: Catch and Throw. * CL note---rplaca vrs setcar: Modifying Lists. * CL note---set local: Setting Variables. @@ -824,6 +825,7 @@ Index * debug-on-next-call: Internals of Debugger. * debug-on-quit: Infinite Loops. * debug-on-signal: Error Debugging. +* debug-on-signal use: Handling Errors. * debugger <1>: Internals of Debugger. * debugger: Debugger. * debugger command list: Debugger Commands. @@ -879,6 +881,7 @@ Index * define-abbrev: Defining Abbrevs. * define-abbrev-table: Abbrev Tables. * define-derived-mode: Derived Modes. +* define-error: Error Symbols. * define-function: Defining Functions. * define-key: Changing Key Bindings. * define-logical-name: Changing File Attributes. @@ -998,6 +1001,7 @@ Index * display-buffer: Choosing Window. * display-buffer-function: Choosing Window. * display-completion-list: Completion Commands. +* display-error: Processing of Errors. * display-message: The Echo Area. * display-warning: Warnings. * display-warning-minimum-level: Warnings. @@ -1145,6 +1149,7 @@ Index * error name: Error Symbols. * error symbol: Error Symbols. * error-conditions: Error Symbols. +* error-message-string: Processing of Errors. * errors: Errors. * esc-map: Prefix Keys. * ESC-prefix: Prefix Keys. @@ -2302,7 +2307,6 @@ Index * PATH environment variable: Subprocess Creation. * path-separator: System Environment. * pausing: Waiting. -* peculiar error: Error Symbols. * peeking at input: Peeking and Discarding. * percent symbol in modeline: Modeline Data. * perform-replace: Search and Replace. @@ -2809,6 +2813,7 @@ Index * shrink-window-pixels: Resizing Windows. * side effect: Intro Eval. * signal: Signaling Errors. +* signal-error: Signaling Errors. * signal-process: Signals to Processes. * signaling errors: Signaling Errors. * signals: Signals to Processes. diff --git a/info/lispref.info-8 b/info/lispref.info-8 index ea85fa2..72c9b1a 100644 --- a/info/lispref.info-8 +++ b/info/lispref.info-8 @@ -941,8 +941,8 @@ How to Signal an Error Most errors are signaled "automatically" within Lisp primitives which you call for other purposes, such as if you try to take the CAR of an integer or move forward a character at the end of the buffer; you -can also signal errors explicitly with the functions `error' and -`signal'. +can also signal errors explicitly with the functions `error', `signal', +and others. Quitting, which happens when the user types `C-g', is not considered an error, but it is handled almost like an error. *Note Quitting::. @@ -952,6 +952,11 @@ an error, but it is handled almost like an error. *Note Quitting::. applying `format' (*note String Conversion::.) to FORMAT-STRING and ARGS. + This error is not continuable: you cannot continue execution after + the error using the debugger `r' or `c' commands. If you wish the + user to be able to continue execution, use `cerror' or `signal' + instead. + These examples show typical uses of `error': (error "You have committed an error. @@ -964,17 +969,23 @@ an error, but it is handled almost like an error. *Note Quitting::. `error' works by calling `signal' with two arguments: the error symbol `error', and a list containing the string returned by - `format'. + `format'. This is repeated in an endless loop, to ensure that + `error' never returns. If you want to use your own string as an error message verbatim, don't just write `(error STRING)'. If STRING contains `%', it will be interpreted as a format specifier, with undesirable results. Instead, use `(error "%s" STRING)'. + - Function: cerror FORMAT-STRING &rest ARGS + This function behaves like `error', except that the error it + signals is continuable. That means that debugger commands `c' and + `r' can resume execution. + - Function: signal ERROR-SYMBOL DATA - This function signals an error named by ERROR-SYMBOL. The - argument DATA is a list of additional Lisp objects relevant to the - circumstances of the error. + This function signals a continuable error named by ERROR-SYMBOL. + The argument DATA is a list of additional Lisp objects relevant to + the circumstances of the error. The argument ERROR-SYMBOL must be an "error symbol"--a symbol bearing a property `error-conditions' whose value is a list of @@ -982,10 +993,10 @@ an error, but it is handled almost like an error. *Note Quitting::. sorts of errors. The number and significance of the objects in DATA depends on - ERROR-SYMBOL. For example, with a `wrong-type-arg' error, there - are two objects in the list: a predicate that describes the type - that was expected, and the object that failed to fit that type. - *Note Error Symbols::, for a description of error symbols. + ERROR-SYMBOL. For example, with a `wrong-type-argument' error, + there are two objects in the list: a predicate that describes the + type that was expected, and the object that failed to fit that + type. *Note Error Symbols::, for a description of error symbols. Both ERROR-SYMBOL and DATA are available to any error handlers that handle the error: `condition-case' binds a local variable to @@ -993,17 +1004,40 @@ an error, but it is handled almost like an error. *Note Quitting::. Errors::.). If the error is not handled, these two values are used in printing the error message. - The function `signal' never returns (though in older Emacs versions - it could sometimes return). + The function `signal' can return, if the debugger is invoked and + the user invokes the "return from signal" option. If you want the + error not to be continuable, use `signal-error' instead. Note that + in FSF Emacs `signal' never returns. (signal 'wrong-number-of-arguments '(x y)) error--> Wrong number of arguments: x, y - (signal 'no-such-error '("My unknown error condition.")) - error--> peculiar error: "My unknown error condition." + (signal 'no-such-error '("My unknown error condition")) + error--> Peculiar error (no-such-error "My unknown error condition") + + - Function: signal-error ERROR-SYMBOL DATA + This function behaves like `signal', except that the error it + signals is not continuable. + + - Macro: check-argument-type PREDICATE ARGUMENT + This macro checks that ARGUMENT satisfies PREDICATE. If that is + not the case, it signals a continuable `wrong-type-argument' error + until the returned value satisfies PREDICATE, and assigns the + returned value to ARGUMENT. In other words, execution of the + program will not continue until PREDICATE is met. + + ARGUMENT is not evaluated, and should be a symbol. PREDICATE is + evaluated, and should name a function. - Common Lisp note: XEmacs Lisp has nothing like the Common Lisp - concept of continuable errors. + As shown in the following example, `check-argument-type' is useful + in low-level code that attempts to ensure the sanity of its data + before proceeding. + + (defun cache-object-internal (object wlist) + ;; Before doing anything, make sure that WLIST is indeed + ;; a weak list, which is what we expect. + (check-argument-type 'weak-list-p wlist) + ...)  File: lispref.info, Node: Processing of Errors, Next: Handling Errors, Prev: Signaling Errors, Up: Errors @@ -1026,6 +1060,25 @@ the command loop has an implicit handler for all kinds of errors. The command loop's handler uses the error symbol and associated data to print an error message. + Errors in command loop are processed using the `command-error' +function, which takes care of some necessary cleanup, and prints a +formatted error message to the echo area. The functions that do the +formatting are explained below. + + - Function: display-error ERROR-OBJECT STREAM + This function displays ERROR-OBJECT on STREAM. ERROR-OBJECT is a + cons of error type, a symbol, and error arguments, a list. If the + error type symbol of one of its error condition superclasses has + an `display-error' property, that function is invoked for printing + the actual error message. Otherwise, the error is printed as + `Error: arg1, arg2, ...'. + + - Function: error-message-string ERROR-OBJECT + This function converts ERROR-OBJECT to an error message string, + and returns it. The message is equivalent to the one that would be + printed by `display-error', except that it is conveniently returned + in string form. + An error that has no explicit handler may call the Lisp debugger. The debugger is enabled if the variable `debug-on-error' (*note Error Debugging::.) is non-`nil'. Unlike error handlers, the debugger runs @@ -1093,6 +1146,12 @@ such as failure to open a file in a call to `insert-file-contents'. It is also used to trap errors that are totally unpredictable, such as when the program evaluates an expression read from the user. + Even when an error is handled, the debugger may still be called if +the variable `debug-on-signal' (*note Error Debugging::.) is non-`nil'. +Note that this may yield unpredictable results with code that traps +expected errors as normal part of its operation. Do not set +`debug-on-signal' unless you know what you are doing. + Error signaling and handling have some resemblance to `throw' and `catch', but they are entirely separate facilities. An error cannot be caught by a `catch', and a `throw' cannot be handled by an error @@ -1186,82 +1245,3 @@ including those signaled with `error': -| The error was: (error "Rats! The variable baz was 34, not 35") => 2 - -File: lispref.info, Node: Error Symbols, Prev: Handling Errors, Up: Errors - -Error Symbols and Condition Names -................................. - - When you signal an error, you specify an "error symbol" to specify -the kind of error you have in mind. Each error has one and only one -error symbol to categorize it. This is the finest classification of -errors defined by the XEmacs Lisp language. - - These narrow classifications are grouped into a hierarchy of wider -classes called "error conditions", identified by "condition names". -The narrowest such classes belong to the error symbols themselves: each -error symbol is also a condition name. There are also condition names -for more extensive classes, up to the condition name `error' which -takes in all kinds of errors. Thus, each error has one or more -condition names: `error', the error symbol if that is distinct from -`error', and perhaps some intermediate classifications. - - In order for a symbol to be an error symbol, it must have an -`error-conditions' property which gives a list of condition names. -This list defines the conditions that this kind of error belongs to. -(The error symbol itself, and the symbol `error', should always be -members of this list.) Thus, the hierarchy of condition names is -defined by the `error-conditions' properties of the error symbols. - - In addition to the `error-conditions' list, the error symbol should -have an `error-message' property whose value is a string to be printed -when that error is signaled but not handled. If the `error-message' -property exists, but is not a string, the error message `peculiar -error' is used. - - Here is how we define a new error symbol, `new-error': - - (put 'new-error - 'error-conditions - '(error my-own-errors new-error)) - => (error my-own-errors new-error) - (put 'new-error 'error-message "A new error") - => "A new error" - -This error has three condition names: `new-error', the narrowest -classification; `my-own-errors', which we imagine is a wider -classification; and `error', which is the widest of all. - - The error string should start with a capital letter but it should -not end with a period. This is for consistency with the rest of Emacs. - - Naturally, XEmacs will never signal `new-error' on its own; only an -explicit call to `signal' (*note Signaling Errors::.) in your code can -do this: - - (signal 'new-error '(x y)) - error--> A new error: x, y - - This error can be handled through any of the three condition names. -This example handles `new-error' and any other errors in the class -`my-own-errors': - - (condition-case foo - (bar nil t) - (my-own-errors nil)) - - The significant way that errors are classified is by their condition -names--the names used to match errors with handlers. An error symbol -serves only as a convenient way to specify the intended error message -and list of condition names. It would be cumbersome to give `signal' a -list of condition names rather than one error symbol. - - By contrast, using only error symbols without condition names would -seriously decrease the power of `condition-case'. Condition names make -it possible to categorize errors at various levels of generality when -you write an error handler. Using error symbols alone would eliminate -all but the narrowest level of classification. - - *Note Standard Errors::, for a list of all the standard error symbols -and their conditions. - diff --git a/info/lispref.info-9 b/info/lispref.info-9 index 6d2fafc..54604a5 100644 --- a/info/lispref.info-9 +++ b/info/lispref.info-9 @@ -50,6 +50,92 @@ may be included in a translation approved by the Free Software Foundation instead of in the original English.  +File: lispref.info, Node: Error Symbols, Prev: Handling Errors, Up: Errors + +Error Symbols and Condition Names +................................. + + When you signal an error, you specify an "error symbol" to specify +the kind of error you have in mind. Each error has one and only one +error symbol to categorize it. This is the finest classification of +errors defined by the XEmacs Lisp language. + + These narrow classifications are grouped into a hierarchy of wider +classes called "error conditions", identified by "condition names". +The narrowest such classes belong to the error symbols themselves: each +error symbol is also a condition name. There are also condition names +for more extensive classes, up to the condition name `error' which +takes in all kinds of errors. Thus, each error has one or more +condition names: `error', the error symbol if that is distinct from +`error', and perhaps some intermediate classifications. + + In other words, each error condition "inherits" from another error +condition, with `error' sitting at the top of the inheritance hierarchy. + + - Function: define-error ERROR-SYMBOL ERROR-MESSAGE &optional + INHERITS-FROM + This function defines a new error, denoted by ERROR-SYMBOL. + ERROR-MESSAGE is an informative message explaining the error, and + will be printed out when an unhandled error occurs. ERROR-SYMBOL + is a sub-error of INHERITS-FROM (which defaults to `error'). + + `define-error' internally works by putting on ERROR-SYMBOL an + `error-message' property whose value is ERROR-MESSAGE, and an + `error-conditions' property that is a list of ERROR-SYMBOL + followed by each of its super-errors, up to and including `error'. + You will sometimes see code that sets this up directly rather than + calling `define-error', but you should *not* do this yourself, + unless you wish to maintain compatibility with FSF Emacs, which + does not provide `define-error'. + + Here is how we define a new error symbol, `new-error', that belongs +to a range of errors called `my-own-errors': + + (define-error 'my-own-errors "A whole range of errors" 'error) + (define-error 'new-error "A new error" 'my-own-errors) + +`new-error' has three condition names: `new-error', the narrowest +classification; `my-own-errors', which we imagine is a wider +classification; and `error', which is the widest of all. + + Note that it is not legal to try to define an error unless its +super-error is also defined. For instance, attempting to define +`new-error' before `my-own-errors' are defined will signal an error. + + The error string should start with a capital letter but it should +not end with a period. This is for consistency with the rest of Emacs. + + Naturally, XEmacs will never signal `new-error' on its own; only an +explicit call to `signal' (*note Signaling Errors::.) in your code can +do this: + + (signal 'new-error '(x y)) + error--> A new error: x, y + + This error can be handled through any of the three condition names. +This example handles `new-error' and any other errors in the class +`my-own-errors': + + (condition-case foo + (bar nil t) + (my-own-errors nil)) + + The significant way that errors are classified is by their condition +names--the names used to match errors with handlers. An error symbol +serves only as a convenient way to specify the intended error message +and list of condition names. It would be cumbersome to give `signal' a +list of condition names rather than one error symbol. + + By contrast, using only error symbols without condition names would +seriously decrease the power of `condition-case'. Condition names make +it possible to categorize errors at various levels of generality when +you write an error handler. Using error symbols alone would eliminate +all but the narrowest level of classification. + + *Note Standard Errors::, for a list of all the standard error symbols +and their conditions. + + File: lispref.info, Node: Cleanups, Prev: Errors, Up: Nonlocal Exits Cleaning Up from Nonlocal Exits @@ -1131,86 +1217,3 @@ Creating and Deleting Buffer-Local Bindings appropriate for data pertaining to where the file came from or how to save it, rather than with how to edit the contents. - -File: lispref.info, Node: Default Value, Prev: Creating Buffer-Local, Up: Buffer-Local Variables - -The Default Value of a Buffer-Local Variable --------------------------------------------- - - The global value of a variable with buffer-local bindings is also -called the "default" value, because it is the value that is in effect -except when specifically overridden. - - The functions `default-value' and `setq-default' access and change a -variable's default value regardless of whether the current buffer has a -buffer-local binding. For example, you could use `setq-default' to -change the default setting of `paragraph-start' for most buffers; and -this would work even when you are in a C or Lisp mode buffer that has a -buffer-local value for this variable. - - The special forms `defvar' and `defconst' also set the default value -(if they set the variable at all), rather than any local value. - - - Function: default-value SYMBOL - This function returns SYMBOL's default value. This is the value - that is seen in buffers that do not have their own values for this - variable. If SYMBOL is not buffer-local, this is equivalent to - `symbol-value' (*note Accessing Variables::.). - - - Function: default-boundp SYMBOL - The function `default-boundp' tells you whether SYMBOL's default - value is nonvoid. If `(default-boundp 'foo)' returns `nil', then - `(default-value 'foo)' would get an error. - - `default-boundp' is to `default-value' as `boundp' is to - `symbol-value'. - - - Special Form: setq-default SYMBOL VALUE - This sets the default value of SYMBOL to VALUE. It does not - evaluate SYMBOL, but does evaluate VALUE. The value of the - `setq-default' form is VALUE. - - If a SYMBOL is not buffer-local for the current buffer, and is not - marked automatically buffer-local, `setq-default' has the same - effect as `setq'. If SYMBOL is buffer-local for the current - buffer, then this changes the value that other buffers will see - (as long as they don't have a buffer-local value), but not the - value that the current buffer sees. - - ;; In buffer `foo': - (make-local-variable 'local) - => local - (setq local 'value-in-foo) - => value-in-foo - (setq-default local 'new-default) - => new-default - local - => value-in-foo - (default-value 'local) - => new-default - - ;; In (the new) buffer `bar': - local - => new-default - (default-value 'local) - => new-default - (setq local 'another-default) - => another-default - (default-value 'local) - => another-default - - ;; Back in buffer `foo': - local - => value-in-foo - (default-value 'local) - => another-default - - - Function: set-default SYMBOL VALUE - This function is like `setq-default', except that SYMBOL is - evaluated. - - (set-default (car '(a b c)) 23) - => 23 - (default-value 'a) - => 23 - diff --git a/info/new-users-guide.info b/info/new-users-guide.info index 04758b0..3d26462 100644 --- a/info/new-users-guide.info +++ b/info/new-users-guide.info @@ -19,58 +19,58 @@ preserved on all copies.  Indirect: new-users-guide.info-1: 661 -new-users-guide.info-2: 50497 -new-users-guide.info-3: 100000 +new-users-guide.info-2: 50494 +new-users-guide.info-3: 99997  Tag Table: (Indirect) Node: Top661 -Node: Intro4639 -Node: Entering7222 -Node: Enter8736 -Node: Frame9418 -Node: Exiting11087 -Node: Mode Line12287 -Node: Echo Area14434 -Node: Windows and Menus15789 -Node: XEmacs Window16242 -Node: Pull-down Menus19863 -Node: File menu20742 -Node: Edit menu24001 -Node: Options Menu26528 -Node: Buffers Menu31310 -Node: Help menu31696 -Node: Edit32194 -Node: Insert33788 -Node: Cursor Position35116 -Node: Erase37187 -Node: Numeric Argument38341 -Node: Undo39525 -Node: Customization Basics40288 -Node: Customizing key Bindings41517 -Node: Customizing Menus45007 -Node: Help50497 -Node: The Help Menu51185 -Node: Modes56110 -Node: Major Modes57026 -Node: Minor Modes60975 -Node: Files65061 -Node: File Names65783 -Node: Visiting67586 -Node: Saving Files69710 -Node: Other Customizations73088 -Node: Setting Variables75557 -Node: Init File78766 -Node: Select and Move84235 -Node: Selecting Text85189 -Node: Mouse86702 -Node: Region Operation88027 -Node: Moving Text89287 -Node: Accumulating text90527 -Node: Search and Replace92847 -Node: Key Index96711 -Node: Command Index100000 -Node: Variable Index104102 -Node: Concept Index104679 +Node: Intro4636 +Node: Entering7219 +Node: Enter8733 +Node: Frame9415 +Node: Exiting11084 +Node: Mode Line12284 +Node: Echo Area14431 +Node: Windows and Menus15786 +Node: XEmacs Window16239 +Node: Pull-down Menus19860 +Node: File menu20739 +Node: Edit menu23998 +Node: Options Menu26525 +Node: Buffers Menu31307 +Node: Help menu31693 +Node: Edit32191 +Node: Insert33785 +Node: Cursor Position35113 +Node: Erase37184 +Node: Numeric Argument38338 +Node: Undo39522 +Node: Customization Basics40285 +Node: Customizing key Bindings41514 +Node: Customizing Menus45004 +Node: Help50494 +Node: The Help Menu51182 +Node: Modes56107 +Node: Major Modes57023 +Node: Minor Modes60972 +Node: Files65058 +Node: File Names65780 +Node: Visiting67583 +Node: Saving Files69707 +Node: Other Customizations73085 +Node: Setting Variables75554 +Node: Init File78763 +Node: Select and Move84232 +Node: Selecting Text85186 +Node: Mouse86699 +Node: Region Operation88024 +Node: Moving Text89284 +Node: Accumulating text90524 +Node: Search and Replace92844 +Node: Key Index96708 +Node: Command Index99997 +Node: Variable Index104099 +Node: Concept Index104676  End Tag Table diff --git a/info/new-users-guide.info-1 b/info/new-users-guide.info-1 index 4771478..1200652 100644 --- a/info/new-users-guide.info-1 +++ b/info/new-users-guide.info-1 @@ -19,7 +19,8 @@ preserved on all copies.  File: new-users-guide.info, Node: Top, Next: Intro, Prev: (dir), Up: (dir) - The Emacs Editor **************** +The Emacs Editor +**************** Emacs is the extensible, customizable, self-documenting real-time display editor. This Info file will help you get started on using diff --git a/info/standards.info b/info/standards.info index 76887c1..6ecf2d6 100644 --- a/info/standards.info +++ b/info/standards.info @@ -1,5 +1,5 @@ -This is Info file ../info/standards.info, produced by Makeinfo version -1.68 from the input file standards.texi. +This is ../info/standards.info, produced by makeinfo version 4.0 from +standards.texi. START-INFO-DIR-ENTRY * Standards: (standards). GNU coding standards. @@ -24,61 +24,62 @@ translation approved by the Free Software Foundation.  Indirect: -standards.info-1: 1000 -standards.info-2: 48794 -standards.info-3: 97971 +standards.info-1: 974 +standards.info-2: 48769 +standards.info-3: 97946  Tag Table: (Indirect) -Node: Top1000 -Node: Preface1591 -Node: Legal Issues2608 -Node: Reading Non-Free Code2974 -Node: Contributions4697 -Node: Design Advice6827 -Node: Compatibility7335 -Node: Using Extensions8846 -Node: ANSI C10348 -Node: Source Language12471 -Node: Program Behavior13964 -Node: Semantics14673 -Node: Libraries18990 -Node: Errors20225 -Node: User Interfaces22001 -Node: Option Table28879 -Node: Memory Usage43689 -Node: Writing C44683 -Node: Formatting45522 -Node: Comments48794 -Node: Syntactic Conventions52092 -Node: Names55030 -Node: System Portability56964 -Node: CPU Portability58561 -Node: System Functions60818 -Node: Internationalization65922 -Node: Mmap69070 -Node: Documentation69775 -Node: GNU Manuals70410 -Node: Manual Structure Details74658 -Node: License for Manuals75991 -Node: NEWS File76575 -Node: Change Logs77251 -Node: Change Log Concepts77968 -Node: Style of Change Logs79823 -Node: Simple Changes81377 -Node: Conditional Changes82568 -Node: Man Pages83945 -Node: Reading other Manuals85564 -Node: Managing Releases86348 -Node: Configuration87103 -Node: Makefile Conventions94043 -Node: Makefile Basics94802 -Node: Utilities in Makefiles97971 -Node: Command Variables100107 -Node: Directory Variables103608 -Node: Standard Targets114485 -Node: Install Command Categories125025 -Node: Releases129598 -Node: References133681 +Node: Top974 +Node: Preface1565 +Node: Legal Issues2582 +Node: Reading Non-Free Code2948 +Node: Contributions4671 +Node: Design Advice6801 +Node: Compatibility7309 +Node: Using Extensions8820 +Node: ANSI C10322 +Node: Source Language12445 +Node: Program Behavior13938 +Node: Semantics14647 +Node: Libraries18964 +Node: Errors20199 +Node: User Interfaces21975 +Node: Option Table28852 +Node: Memory Usage43662 +Node: Writing C44656 +Node: Formatting45497 +Node: Comments48769 +Node: Syntactic Conventions52067 +Node: Names55005 +Node: System Portability56939 +Node: CPU Portability58536 +Node: System Functions60793 +Node: Internationalization65897 +Node: Mmap69045 +Node: Documentation69750 +Node: GNU Manuals70385 +Node: Manual Structure Details74633 +Node: License for Manuals75966 +Node: NEWS File76550 +Node: Change Logs77226 +Node: Change Log Concepts77943 +Node: Style of Change Logs79798 +Node: Simple Changes81352 +Node: Conditional Changes82543 +Node: Man Pages83920 +Node: Reading other Manuals85539 +Node: Managing Releases86323 +Node: Configuration87078 +Node: Makefile Conventions94018 +Node: Makefile Basics94777 +Node: Utilities in Makefiles97946 +Node: Command Variables100082 +Node: Directory Variables103583 +Node: Standard Targets114460 +Ref: Standard Targets-Footnote-1124899 +Node: Install Command Categories124999 +Node: Releases129572 +Node: References133655  End Tag Table diff --git a/info/standards.info-1 b/info/standards.info-1 index b0b8bcd..0ba5b2e 100644 --- a/info/standards.info-1 +++ b/info/standards.info-1 @@ -1,5 +1,5 @@ -This is Info file ../info/standards.info, produced by Makeinfo version -1.68 from the input file standards.texi. +This is ../info/standards.info, produced by makeinfo version 4.0 from +standards.texi. START-INFO-DIR-ENTRY * Standards: (standards). GNU coding standards. @@ -124,7 +124,7 @@ Accepting Contributions If the program you are working on is copyrighted by the Free Software Foundation, then when someone else sends you a piece of code to add to the program, we need legal papers to use it--just as we asked you to -sign papers initially. *Each* person who makes a nontrivial +sign papers initially. _Each_ person who makes a nontrivial contribution to a program must sign some sort of legal papers in order for us to have clear title to the program; the main author alone is not enough. @@ -366,14 +366,14 @@ File: standards.info, Node: Semantics, Next: Libraries, Up: Program Behavior Writing Robust Programs ======================= - Avoid arbitrary limits on the length or number of *any* data + Avoid arbitrary limits on the length or number of _any_ data structure, including file names, lines, files, and symbols, by allocating all data structures dynamically. In most Unix utilities, "long lines are silently truncated". This is not acceptable in a GNU utility. Utilities reading files should not drop NUL characters, or any other -nonprinting characters *including those with codes above 0177*. The +nonprinting characters _including those with codes above 0177_. The only sensible exceptions would be utilities specifically intended for interface to certain types of terminals or printers that can't handle those characters. Whenever possible, try to make programs work @@ -382,7 +382,7 @@ using encodings such as UTF-8 and others. Check every system call for an error return, unless you know you wish to ignore errors. Include the system error text (from `perror' or -equivalent) in *every* error message resulting from a failing system +equivalent) in _every_ error message resulting from a failing system call, as well as the name of the file if any and the name of the utility. Just "cannot open foo.c" or "stat failed" is not sufficient. @@ -440,7 +440,7 @@ are easy to examine with the debugger, so there is no point moving them elsewhere. Do not use a count of errors as the exit status for a program. -*That does not work*, because exit status values are limited to 8 bits +_That does not work_, because exit status values are limited to 8 bits (0 through 255). A single run of the program might have 256 errors; if you try to return 256 as the exit status, the parent process will see 0 as the status, and it will appear that the program succeeded. @@ -581,7 +581,7 @@ consistent from program to program. For example, users should be able to expect the "verbose" option of any GNU program which has one, to be spelled precisely `--verbose'. To achieve this uniformity, look at the table of common long-option names when you choose the option names for -your program (*note Option Table::.). +your program (*note Option Table::). It is usually a good idea for file names given as ordinary arguments to be input files only; any output files would be specified using @@ -606,7 +606,7 @@ among GNU utilities, and fewer idiosyncracies for users to remember. GNU Emacs 19.30 - The program's name should be a constant string; *don't* compute it + The program's name should be a constant string; _don't_ compute it from `argv[0]'. The idea is to state the standard or canonical name for the program, not its file name. There are other ways to find out the precise file name where a command is found in `PATH'. @@ -1796,7 +1796,7 @@ writing GNU software. * Names:: Naming Variables and Functions * System Portability:: Portability between different operating systems * CPU Portability:: Supporting the range of CPU types -* System Functions:: Portability and "standard" library functions +* System Functions:: Portability and ``standard'' library functions * Internationalization:: Techniques for internationalization * Mmap:: How you can safely use `mmap'. diff --git a/info/standards.info-2 b/info/standards.info-2 index 36b3808..8fd19bd 100644 --- a/info/standards.info-2 +++ b/info/standards.info-2 @@ -1,5 +1,5 @@ -This is Info file ../info/standards.info, produced by Makeinfo version -1.68 from the input file standards.texi. +This is ../info/standards.info, produced by makeinfo version 4.0 from +standards.texi. START-INFO-DIR-ENTRY * Standards: (standards). GNU coding standards. @@ -78,9 +78,9 @@ function itself would be off the bottom of the screen. Every `#endif' should have a comment, except in the case of short conditionals (just a few lines) that are not nested. The comment should -state the condition of the conditional that is ending, *including its -sense*. `#else' should have a comment describing the condition *and -sense* of the code that follows. For example: +state the condition of the conditional that is ending, _including its +sense_. `#else' should have a comment describing the condition _and +sense_ of the code that follows. For example: #ifdef foo ... @@ -331,7 +331,7 @@ that pass their arguments along to `printf' and friends: In practice, this works on all machines, since a pointer is generally the widest possible kind of argument, and it is much simpler than any -"correct" alternative. Be sure *not* to use a prototype for such +"correct" alternative. Be sure _not_ to use a prototype for such functions. However, avoid casting pointers to integers unless you really need @@ -604,7 +604,7 @@ have its own manual. That would be following the structure of the implementation, rather than the structure that helps the user understand. - Instead, each manual should cover a coherent *topic*. For example, + Instead, each manual should cover a coherent _topic_. For example, instead of a manual for `diff' and a manual for `diff3', we have one manual for "comparison of files" which covers both of those programs, as well as `cmp'. By documenting these programs together, we can make @@ -629,8 +629,8 @@ what we mean. logical breakdown of its topic, but order the sections, and write their text, so that reading the chapter straight through makes sense. Do likewise when structuring the book into chapters, and when structuring a -section into paragraphs. The watchword is, *at each point, address the -most fundamental and important issue raised by the preceding text.* +section into paragraphs. The watchword is, _at each point, address the +most fundamental and important issue raised by the preceding text._ If necessary, add extra chapters at the beginning of the manual which are purely tutorial and cover the basics of the subject. These provide @@ -644,7 +644,7 @@ course exceptions.) Also Unix man pages use a particular format which is different from what we use in GNU manuals. Please include an email address in the manual for where to report -bugs *in the manual*. +bugs _in the manual_. Please do not use the term "pathname" that is used in Unix documentation; use "file name" (two words) instead. We use the term @@ -872,7 +872,7 @@ are contained in a `#ifdef HAVE_LIBNCURSES' conditional: * dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent. Here is an entry for a change that takes affect only when a certain -macro is *not* defined: +macro is _not_ defined: (gethostname) [!HAVE_SOCKETS]: Replace with winsock version. @@ -963,12 +963,12 @@ they affect compilation. One way to do this is to make a link from a standard name such as `config.h' to the proper configuration file for the chosen system. If -you use this technique, the distribution should *not* contain a file +you use this technique, the distribution should _not_ contain a file named `config.h'. This is so that people won't be able to build the program without configuring it first. Another thing that `configure' can do is to edit the Makefile. If -you do this, the distribution should *not* contain a file named +you do this, the distribution should _not_ contain a file named `Makefile'. Instead, it should include a file `Makefile.in' which contains the input used for editing. Once again, this is so that people won't be able to build the program without configuring it first. diff --git a/info/standards.info-3 b/info/standards.info-3 index c21b67c..bac2c56 100644 --- a/info/standards.info-3 +++ b/info/standards.info-3 @@ -1,5 +1,5 @@ -This is Info file ../info/standards.info, produced by Makeinfo version -1.68 from the input file standards.texi. +This is ../info/standards.info, produced by makeinfo version 4.0 from +standards.texi. START-INFO-DIR-ENTRY * Standards: (standards). GNU coding standards. @@ -105,7 +105,7 @@ compilation command that runs the preprocessor, and use `LDFLAGS' in any compilation command that does linking as well as in any direct use of `ld'. - If there are C compiler options that *must* be used for proper + If there are C compiler options that _must_ be used for proper compilation of certain files, do not include them in `CFLAGS'. Users expect to be able to specify `CFLAGS' freely themselves. Instead, arrange to pass the necessary options to the C compiler independently @@ -118,7 +118,7 @@ by defining an implicit rule, like this: $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< Do include the `-g' option in `CFLAGS', because that is not -*required* for proper compilation. You can consider it a default that +_required_ for proper compilation. You can consider it a default that is only recommended. If the package is set up so that it is compiled with GCC by default, then you might as well include `-O' in the default value of `CFLAGS' as well. @@ -450,7 +450,7 @@ Makefiles: that don't have the Unix man page documentation system installed. The way to install Info files is to copy them into `$(infodir)' - with `$(INSTALL_DATA)' (*note Command Variables::.), and then run + with `$(INSTALL_DATA)' (*note Command Variables::), and then run the `install-info' program if it is present. `install-info' is a program that edits the Info `dir' file to add or update the menu entry for the given Info file; it is part of the Texinfo package. @@ -685,7 +685,7 @@ variable, plus an optional comment at the end. There are three variables you can use, one for each category; the variable name specifies the category. Category lines are no-ops in ordinary execution because these three Make variables are normally undefined (and you -*should not* define them in the makefile). +_should not_ define them in the makefile). Here are the three possible category lines, each with a comment that explains what it means: @@ -709,7 +709,7 @@ classified as normal. from the Info directory. If the `install' or `uninstall' target has any dependencies which -act as subroutines of installation, then you should start *each* +act as subroutines of installation, then you should start _each_ dependency's commands with a category line, and start the main target's commands with a category line also. This way, you can ensure that each command is placed in the right category regardless of which of the diff --git a/info/texinfo.info b/info/texinfo.info index 2986f92..9f25e17 100644 --- a/info/texinfo.info +++ b/info/texinfo.info @@ -1,5 +1,5 @@ -This is Info file ../info/texinfo.info, produced by Makeinfo version -1.68 from the input file texinfo.texi. +This is ../info/texinfo.info, produced by makeinfo version 4.0 from +texinfo.texi. INFO-DIR-SECTION Texinfo documentation system START-INFO-DIR-ENTRY @@ -34,306 +34,317 @@ translation approved by the Free Software Foundation.  Indirect: -texinfo.info-1: 1510 -texinfo.info-2: 48723 -texinfo.info-3: 96698 -texinfo.info-4: 146082 -texinfo.info-5: 196057 -texinfo.info-6: 245140 -texinfo.info-7: 294058 -texinfo.info-8: 343872 -texinfo.info-9: 393199 -texinfo.info-10: 435577 -texinfo.info-11: 481692 -texinfo.info-12: 519851 +texinfo.info-1: 1484 +texinfo.info-2: 48703 +texinfo.info-3: 96677 +texinfo.info-4: 146069 +texinfo.info-5: 196042 +texinfo.info-6: 245134 +texinfo.info-7: 293729 +texinfo.info-8: 343544 +texinfo.info-9: 392857 +texinfo.info-10: 435235 +texinfo.info-11: 481351 +texinfo.info-12: 519511  Tag Table: (Indirect) -Node: Top1510 -Node: Copying23823 -Node: Overview25828 -Node: Overview-Footnotes27256 -Node: Using Texinfo27792 -Node: Info Files30275 -Node: Info Files-Footnotes34310 -Node: Printed Books34557 -Node: Printed Books-Footnotes37228 -Node: Formatting Commands37512 -Node: Formatting Commands-Footnotes40338 -Node: Conventions41040 -Node: Comments43602 -Node: Minimum45025 -Node: Six Parts47211 -Node: Short Sample48723 -Node: Acknowledgements52858 -Node: Texinfo Mode53693 -Node: Texinfo Mode Overview55065 -Node: Emacs Editing55841 -Node: Inserting57971 -Node: Showing the Structure62252 -Node: Updating Nodes and Menus64779 -Node: Updating Commands65852 -Node: Updating Requirements71913 -Node: Other Updating Commands74210 -Node: Info Formatting77478 -Node: Printing78736 -Node: Texinfo Mode Summary81082 -Node: Beginning a File85836 -Node: Four Parts86727 -Node: Sample Beginning88197 -Node: Header89817 -Node: First Line91169 -Node: Start of Header92158 -Node: setfilename92872 -Node: settitle94808 -Node: setchapternewpage96698 -Node: paragraphindent99459 -Node: End of Header100941 -Node: Info Summary and Permissions101780 -Node: Titlepage & Copyright Page102799 -Node: titlepage104405 -Node: titlepage-Footnotes106686 -Node: titlefont center sp107026 -Node: title subtitle author108252 -Node: Copyright & Permissions110524 -Node: end titlepage112525 -Node: headings on off114231 -Node: The Top Node116276 -Node: Title of Top Node117431 -Node: Master Menu Parts118684 -Node: Software Copying Permissions120921 -Node: Ending a File122089 -Node: Printing Indices & Menus122937 -Node: Contents125239 -Node: File End127579 -Node: Structuring128252 -Node: Tree Structuring129910 -Node: Structuring Command Types131353 -Node: makeinfo top133679 -Node: chapter134212 -Node: unnumbered & appendix135236 -Node: majorheading & chapheading136075 -Node: section136896 -Node: unnumberedsec appendixsec heading137660 -Node: subsection138649 -Node: unnumberedsubsec appendixsubsec subheading139221 -Node: subsubsection140174 -Node: Raise/lower sections141724 -Node: Nodes143859 -Node: Two Paths144796 -Node: Node Menu Illustration146082 -Node: node149777 -Node: Node Names152473 -Node: Writing a Node153549 -Node: Node Line Tips155567 -Node: Node Line Requirements156361 -Node: First Node157962 -Node: makeinfo top command159408 -Node: Top Node Summary160587 -Node: makeinfo Pointer Creation162037 -Node: Menus163284 -Node: Menus-Footnotes164222 -Node: Menu Location164573 -Node: Writing a Menu166250 -Node: Menu Parts167216 -Node: Less Cluttered Menu Entry168374 -Node: Menu Example168999 -Node: Other Info Files170520 -Node: Cross References172376 -Node: References173333 -Node: Cross Reference Commands175080 -Node: Cross Reference Parts176139 -Node: xref178975 -Node: Reference Syntax179774 -Node: One Argument181429 -Node: Two Arguments182441 -Node: Three Arguments183556 -Node: Four and Five Arguments185947 -Node: Top Node Naming188359 -Node: ref189369 -Node: pxref190759 -Node: inforef193141 -Node: uref194434 -Node: Marking Text195433 -Node: Indicating196057 -Node: Useful Highlighting197962 -Node: code199351 -Node: kbd202389 -Node: key204259 -Node: samp205592 -Node: var207179 -Node: file208972 -Node: dfn209579 -Node: cite210489 -Node: url210943 -Node: email211507 -Node: Emphasis212319 -Node: emph & strong213219 -Node: Smallcaps214205 -Node: Fonts215532 -Node: Customized Highlighting216620 -Node: Customized Highlighting-Footnotes219434 -Node: Quotations and Examples219654 -Node: Block Enclosing Commands221276 -Node: quotation223301 -Node: example224391 -Node: noindent226446 -Node: Lisp Example227911 -Node: Lisp Example-Footnotes228612 -Node: smallexample & smalllisp228802 -Node: display230827 -Node: format231459 -Node: exdent231920 -Node: flushleft & flushright233000 -Node: cartouche234266 -Node: Lists and Tables235033 -Node: Introducing Lists235709 -Node: itemize237371 -Node: enumerate239518 -Node: Two-column Tables242017 -Node: table242706 -Node: ftable vtable245140 -Node: itemx246241 -Node: Multi-column Tables247252 -Node: Multitable Column Widths247923 -Node: Multitable Rows249377 -Node: Indices251250 -Node: Index Entries252401 -Node: Predefined Indices253534 -Node: Indexing Commands254531 -Node: Combining Indices259072 -Node: syncodeindex260435 -Node: synindex262097 -Node: New Indices262622 -Node: Insertions264448 -Node: Braces Atsigns265632 -Node: Inserting An Atsign266184 -Node: Inserting Braces266458 -Node: Inserting Space266821 -Node: Not Ending a Sentence267325 -Node: Ending a Sentence268679 -Node: Multiple Spaces269808 -Node: dmn271028 -Node: Inserting Accents272236 -Node: Dots Bullets274212 -Node: dots275035 -Node: bullet275559 -Node: TeX and copyright275956 -Node: tex276523 -Node: copyright symbol276939 -Node: pounds277199 -Node: minus277563 -Node: math278485 -Node: Glyphs279214 -Node: Glyphs Summary280327 -Node: result280955 -Node: expansion281440 -Node: Print Glyph282396 -Node: Error Glyph283273 -Node: Equivalence284106 -Node: Point Glyph284794 -Node: Images286351 -Node: Breaks288018 -Node: Break Commands289449 -Node: Line Breaks290290 -Node: - and hyphenation291308 -Node: w292559 -Node: sp293272 -Node: page293681 -Node: group294058 -Node: need295801 -Node: Definition Commands296531 -Node: Def Cmd Template298102 -Node: Optional Arguments301099 -Node: deffnx302687 -Node: Def Cmds in Detail303642 -Node: Functions Commands304752 -Node: Variables Commands307757 -Node: Typed Functions309843 -Node: Typed Variables313385 -Node: Abstract Objects315368 -Node: Data Types320593 -Node: Def Cmd Conventions321848 -Node: Sample Function Definition322411 -Node: Footnotes325295 -Node: Footnotes-Footnotes325682 -Node: Footnote Commands326028 -Node: Footnote Commands-Footnotes327524 -Node: Footnote Styles327642 -Node: Conditionals330228 -Node: Conditional Commands331039 -Node: Conditional Not Commands332532 -Node: Raw Formatter Commands333277 -Node: set clear value335107 -Node: ifset ifclear335908 -Node: value339087 -Node: value Example340499 -Node: Macros342077 -Node: Defining Macros342783 -Node: Invoking Macros343872 -Node: Format/Print Hardcopy344978 -Node: Use TeX346815 -Node: Format with tex/texindex347443 -Node: Format with texi2dvi351086 -Node: Print with lpr351677 -Node: Within Emacs352531 -Node: Texinfo Mode Printing353450 -Node: Compile-Command356860 -Node: Requirements Summary357748 -Node: Preparing for TeX359061 -Node: Overfull hboxes361850 -Node: smallbook363409 -Node: A4 Paper364929 -Node: Cropmarks and Magnification366155 -Node: Create an Info File368097 -Node: makeinfo advantages369400 -Node: Invoking makeinfo370316 -Node: makeinfo options371004 -Node: Pointer Validation376493 -Node: makeinfo in Emacs377837 -Node: texinfo-format commands380395 -Node: Batch Formatting381667 -Node: Tag and Split Files382883 -Node: Install an Info File386237 -Node: Directory file387055 -Node: New Info File388923 -Node: Other Info Directories389984 -Node: Installing Dir Entries393199 -Node: Invoking install-info395192 -Node: Command List397607 -Node: Tips435577 -Node: Sample Texinfo File446987 -Node: Sample Permissions449105 -Node: Inserting Permissions450148 -Node: ifinfo Permissions452454 -Node: Titlepage Permissions454075 -Node: Include Files455337 -Node: Using Include Files456424 -Node: texinfo-multiple-files-update458379 -Node: Include File Requirements460740 -Node: Sample Include File461985 -Node: Include Files Evolution463504 -Node: Headings465475 -Node: Headings Introduced466112 -Node: Heading Format468000 -Node: Heading Choice470452 -Node: Custom Headings471824 -Node: Catching Mistakes476152 -Node: makeinfo Preferred477441 -Node: Debugging with Info478346 -Node: Debugging with TeX481692 -Node: Using texinfo-show-structure485973 -Node: Using occur489072 -Node: Running Info-Validate490609 -Node: Using Info-validate491670 -Node: Unsplit493512 -Node: Tagifying494558 -Node: Splitting495410 -Node: Refilling Paragraphs497026 -Node: Refilling Paragraphs-Footnotes498679 -Node: Command Syntax498930 -Node: Obtaining TeX501887 -Node: Command and Variable Index503999 -Node: Concept Index519851 +Node: Top1484 +Node: Copying23799 +Node: Overview25804 +Node: Overview-Footnotes27233 +Ref: Overview-Footnote-127297 +Node: Using Texinfo27769 +Node: Info Files30252 +Node: Info Files-Footnotes34288 +Ref: Info Files-Footnote-134356 +Node: Printed Books34535 +Node: Printed Books-Footnotes37207 +Ref: Printed Books-Footnote-137281 +Node: Formatting Commands37491 +Node: Formatting Commands-Footnotes40318 +Ref: Formatting Commands-Footnote-140404 +Node: Conventions41020 +Node: Comments43582 +Node: Minimum45005 +Node: Six Parts47191 +Node: Short Sample48703 +Node: Acknowledgements52839 +Node: Texinfo Mode53674 +Node: Texinfo Mode Overview55046 +Node: Emacs Editing55822 +Node: Inserting57952 +Node: Showing the Structure62233 +Node: Updating Nodes and Menus64760 +Node: Updating Commands65833 +Node: Updating Requirements71894 +Node: Other Updating Commands74191 +Node: Info Formatting77459 +Node: Printing78717 +Node: Texinfo Mode Summary81062 +Node: Beginning a File85816 +Node: Four Parts86707 +Node: Sample Beginning88177 +Node: Header89797 +Node: First Line91149 +Node: Start of Header92138 +Node: setfilename92851 +Node: settitle94787 +Node: setchapternewpage96677 +Node: paragraphindent99438 +Node: End of Header100920 +Node: Info Summary and Permissions101759 +Node: Titlepage & Copyright Page102778 +Node: titlepage104384 +Node: titlepage-Footnotes106666 +Ref: titlepage-Footnote-1106732 +Node: titlefont center sp107006 +Node: title subtitle author108232 +Node: Copyright & Permissions110504 +Node: end titlepage112505 +Node: headings on off114211 +Node: The Top Node116256 +Node: Title of Top Node117411 +Node: Master Menu Parts118664 +Node: Software Copying Permissions120901 +Node: Ending a File122069 +Node: Printing Indices & Menus122917 +Node: Contents125226 +Node: File End127566 +Node: Structuring128239 +Node: Tree Structuring129896 +Node: Structuring Command Types131339 +Node: makeinfo top133666 +Node: chapter134199 +Node: unnumbered & appendix135223 +Node: majorheading & chapheading136062 +Node: section136883 +Node: unnumberedsec appendixsec heading137647 +Node: subsection138636 +Node: unnumberedsubsec appendixsubsec subheading139208 +Node: subsubsection140161 +Node: Raise/lower sections141711 +Node: Nodes143846 +Node: Two Paths144783 +Node: Node Menu Illustration146069 +Node: node149764 +Node: Node Names152460 +Node: Writing a Node153536 +Node: Node Line Tips155554 +Node: Node Line Requirements156348 +Node: First Node157949 +Node: makeinfo top command159393 +Node: Top Node Summary160572 +Node: makeinfo Pointer Creation162022 +Node: Menus163269 +Node: Menus-Footnotes164208 +Ref: Menus-Footnote-1164266 +Node: Menu Location164559 +Node: Writing a Menu166236 +Node: Menu Parts167202 +Node: Less Cluttered Menu Entry168360 +Node: Menu Example168985 +Node: Other Info Files170506 +Node: Cross References172362 +Node: References173319 +Node: Cross Reference Commands175066 +Node: Cross Reference Parts176125 +Node: xref178961 +Node: Reference Syntax179760 +Node: One Argument181414 +Node: Two Arguments182426 +Node: Three Arguments183541 +Node: Four and Five Arguments185932 +Node: Top Node Naming188344 +Node: ref189354 +Node: pxref190744 +Node: inforef193126 +Node: uref194419 +Node: Marking Text195418 +Node: Indicating196042 +Node: Useful Highlighting197947 +Node: code199336 +Node: kbd202374 +Node: key204244 +Node: samp205577 +Node: var207164 +Node: file208957 +Node: dfn209564 +Node: cite210474 +Node: url210928 +Node: email211492 +Node: Emphasis212304 +Node: emph & strong213204 +Node: Smallcaps214190 +Node: Fonts215517 +Node: Customized Highlighting216605 +Node: Customized Highlighting-Footnotes219420 +Ref: Customized Highlighting-Footnote-1219514 +Node: Quotations and Examples219640 +Node: Block Enclosing Commands221262 +Node: quotation223287 +Node: example224377 +Node: noindent226432 +Node: Lisp Example227896 +Node: Lisp Example-Footnotes228598 +Ref: Lisp Example-Footnote-1228670 +Node: smallexample & smalllisp228788 +Node: display230813 +Node: format231445 +Node: exdent231906 +Node: flushleft & flushright232986 +Node: cartouche234252 +Node: Lists and Tables235019 +Node: Introducing Lists235695 +Node: itemize237360 +Node: enumerate239507 +Node: Two-column Tables242012 +Node: table242701 +Node: ftable vtable245134 +Node: itemx246235 +Node: Multi-column Tables247246 +Node: Multitable Column Widths247917 +Node: Multitable Rows249371 +Node: Indices251148 +Node: Index Entries252298 +Node: Predefined Indices253431 +Node: Indexing Commands254428 +Node: Combining Indices258968 +Node: syncodeindex260331 +Node: synindex261993 +Node: New Indices262518 +Node: Insertions264343 +Node: Braces Atsigns265527 +Node: Inserting An Atsign266079 +Node: Inserting Braces266353 +Node: Inserting Space266716 +Node: Not Ending a Sentence267220 +Node: Ending a Sentence268574 +Node: Multiple Spaces269703 +Node: dmn270922 +Node: Inserting Accents272129 +Node: Dots Bullets273886 +Node: dots274708 +Node: bullet275232 +Node: TeX and copyright275629 +Node: tex276196 +Node: copyright symbol276612 +Node: pounds276872 +Node: minus277236 +Node: math278158 +Node: Glyphs278886 +Node: Glyphs Summary279999 +Node: result280627 +Node: expansion281112 +Node: Print Glyph282068 +Node: Error Glyph282945 +Node: Equivalence283778 +Node: Point Glyph284466 +Node: Images286023 +Node: Breaks287690 +Node: Break Commands289121 +Node: Line Breaks289962 +Node: - and hyphenation290980 +Node: w292230 +Node: sp292943 +Node: page293352 +Node: group293729 +Node: need295472 +Node: Definition Commands296202 +Node: Def Cmd Template297773 +Node: Optional Arguments300770 +Node: deffnx302358 +Node: Def Cmds in Detail303313 +Node: Functions Commands304423 +Node: Variables Commands307428 +Node: Typed Functions309514 +Node: Typed Variables313056 +Node: Abstract Objects315039 +Node: Data Types320264 +Node: Def Cmd Conventions321519 +Node: Sample Function Definition322082 +Node: Footnotes324966 +Node: Footnotes-Footnotes325354 +Ref: Footnotes-Footnote-1325420 +Node: Footnote Commands325700 +Node: Footnote Commands-Footnotes327197 +Ref: Footnote Commands-Footnote-1327279 +Node: Footnote Styles327315 +Node: Conditionals329901 +Node: Conditional Commands330712 +Node: Conditional Not Commands332205 +Node: Raw Formatter Commands332950 +Node: set clear value334780 +Node: ifset ifclear335581 +Node: value338760 +Node: value Example340172 +Node: Macros341750 +Node: Defining Macros342455 +Node: Invoking Macros343544 +Node: Format/Print Hardcopy344650 +Node: Use TeX346487 +Node: Format with tex/texindex347115 +Node: Format with texi2dvi350756 +Node: Print with lpr351347 +Node: Within Emacs352201 +Node: Texinfo Mode Printing353120 +Node: Compile-Command356530 +Node: Requirements Summary357418 +Node: Preparing for TeX358731 +Node: Overfull hboxes361518 +Node: smallbook363077 +Node: A4 Paper364595 +Node: Cropmarks and Magnification365820 +Node: Create an Info File367761 +Node: makeinfo advantages369064 +Node: Invoking makeinfo369980 +Node: makeinfo options370668 +Node: Pointer Validation376152 +Node: makeinfo in Emacs377496 +Node: texinfo-format commands380054 +Node: Batch Formatting381325 +Node: Tag and Split Files382541 +Node: Install an Info File385895 +Node: Directory file386713 +Node: New Info File388581 +Node: Other Info Directories389642 +Node: Installing Dir Entries392857 +Node: Invoking install-info394850 +Node: Command List397265 +Node: Tips435235 +Node: Sample Texinfo File446645 +Node: Sample Permissions448764 +Node: Inserting Permissions449807 +Node: ifinfo Permissions452113 +Node: Titlepage Permissions453734 +Node: Include Files454996 +Node: Using Include Files456083 +Node: texinfo-multiple-files-update458038 +Node: Include File Requirements460399 +Node: Sample Include File461644 +Node: Include Files Evolution463163 +Node: Headings465134 +Node: Headings Introduced465771 +Node: Heading Format467659 +Node: Heading Choice470111 +Node: Custom Headings471483 +Node: Catching Mistakes475811 +Node: makeinfo Preferred477100 +Node: Debugging with Info478005 +Node: Debugging with TeX481351 +Node: Using texinfo-show-structure485631 +Node: Using occur488730 +Node: Running Info-Validate490267 +Node: Using Info-validate491328 +Node: Unsplit493170 +Node: Tagifying494216 +Node: Splitting495068 +Node: Refilling Paragraphs496684 +Node: Refilling Paragraphs-Footnotes498338 +Ref: Refilling Paragraphs-Footnote-1498426 +Node: Command Syntax498589 +Node: Obtaining TeX501546 +Node: Command and Variable Index503659 +Node: Concept Index519511  End Tag Table diff --git a/info/texinfo.info-1 b/info/texinfo.info-1 index bc542dc..f31fc03 100644 --- a/info/texinfo.info-1 +++ b/info/texinfo.info-1 @@ -1,5 +1,5 @@ -This is Info file ../info/texinfo.info, produced by Makeinfo version -1.68 from the input file texinfo.texi. +This is ../info/texinfo.info, produced by makeinfo version 4.0 from +texinfo.texi. INFO-DIR-SECTION Texinfo documentation system START-INFO-DIR-ENTRY @@ -91,7 +91,7 @@ menu lists all the lower level nodes in the document. * Concept Index:: A menu covering many topics. - -- The Detailed Node Listing -- + --- The Detailed Node Listing --- Overview of Texinfo @@ -556,7 +556,7 @@ File: texinfo.info, Node: Overview, Next: Texinfo Mode, Prev: Copying, Up: T Overview of Texinfo ******************* - "Texinfo"(1) (*note Overview-Footnotes::) is a documentation system + "Texinfo"(1) (*note Overview-Footnote-1::) is a documentation system that uses a single source file to produce both on-line information and printed output. This means that instead of writing two different documents, one for the on-line help or other on-line information and @@ -679,7 +679,7 @@ Normally the order in this chain is the same as the order of the children in the parent's menu. Each child node records the parent node name as its `Up' pointer. The last child has no `Next' pointer, and the first child has the parent both as its `Previous' and as its `Up' -pointer.(1) (*note Info Files-Footnotes::) +pointer.(1) (*note Info Files-Footnote-1::) The book-like structuring of an Info file into nodes that correspond to chapters, sections, and the like is a matter of convention, not a @@ -735,7 +735,7 @@ Printed Books A Texinfo file can be formatted and typeset as a printed book or manual. To do this, you need TeX, a powerful, sophisticated typesetting -program written by Donald Knuth.(1) (*note Printed Books-Footnotes::) +program written by Donald Knuth.(1) (*note Printed Books-Footnote-1::) A Texinfo-based book is similar to any other typeset, printed work: it can have a title page, copyright page, table of contents, and preface, @@ -812,7 +812,7 @@ characters. Similarly, you can print the output generated by TeX on a wide variety of printers. Depending on what they do or what arguments(1) (*note Formatting -Commands-Footnotes::) they take, you need to write @-commands on lines +Commands-Footnote-1::) they take, you need to write @-commands on lines of their own or as part of sentences: * Write a command such as `@noindent' at the beginning of a line as diff --git a/info/texinfo.info-10 b/info/texinfo.info-10 index 7b4fbcc..aea9a20 100644 --- a/info/texinfo.info-10 +++ b/info/texinfo.info-10 @@ -1,5 +1,5 @@ -This is Info file ../info/texinfo.info, produced by Makeinfo version -1.68 from the input file texinfo.texi. +This is ../info/texinfo.info, produced by makeinfo version 4.0 from +texinfo.texi. INFO-DIR-SECTION Texinfo documentation system START-INFO-DIR-ENTRY @@ -247,7 +247,7 @@ In this case, the text should be formatted with `@table', `@item', and Periods Outside of Quotes ......................... - Place periods and other punctuation marks *outside* of quotations, + Place periods and other punctuation marks _outside_ of quotations, unless the punctuation is part of the quotation. This practice goes against publishing conventions in the United States, but enables the reader to distinguish between the contents of the quotation and the @@ -258,7 +258,7 @@ outside the end quotation marks: Evidently, `au' is an abbreviation for ``author''. -since `au' does *not* serve as an abbreviation for `author.' (with a +since `au' does _not_ serve as an abbreviation for `author.' (with a period following the word). Introducing New Terms @@ -372,6 +372,7 @@ A Sample Texinfo File You can see this file, with comments, in the first chapter. *Note A Short Sample Texinfo File: Short Sample. + \input texinfo @c -*-texinfo-*- @c %**start of header @setfilename sample.info @@ -724,8 +725,8 @@ hierarchical level in the file structure. Usually, each is an each included file contains one, and only one, chapter or equivalent-level node. - The outer file should contain only *one* node, the `Top' node. It -should *not* contain any nodes besides the single `Top' node. The + The outer file should contain only _one_ node, the `Top' node. It +should _not_ contain any nodes besides the single `Top' node. The `texinfo-multiple-files-update' command will not process them.  @@ -1064,7 +1065,7 @@ and `@end iftex' commands. For `@include' files only: expands to the name of the current `@include' file. If the current Texinfo source file is not an `@include' file, this command has no effect. This command does - *not* provide the name of the current Texinfo source file unless + _not_ provide the name of the current Texinfo source file unless it is an `@include' file. (*Note Include Files::, for more information about `@include' files.) diff --git a/info/texinfo.info-11 b/info/texinfo.info-11 index 79b8377..43fe115 100644 --- a/info/texinfo.info-11 +++ b/info/texinfo.info-11 @@ -1,5 +1,5 @@ -This is Info file ../info/texinfo.info, produced by Makeinfo version -1.68 from the input file texinfo.texi. +This is ../info/texinfo.info, produced by makeinfo version 4.0 from +texinfo.texi. INFO-DIR-SECTION Texinfo documentation system START-INFO-DIR-ENTRY @@ -103,7 +103,7 @@ three things. prompt. Please note that if you are running TeX inside Emacs, you need to -switch to the shell buffer and line at which TeX offers the `?' prompt. +switch to the shell buffer and line at which TeX offers the `?' prompt. Sometimes TeX will format a file without producing error messages even though there is a problem. This usually occurs if a command is not @@ -417,7 +417,7 @@ Refilling Paragraphs ******************** The `@refill' command refills and, optionally, indents the first line -of a paragraph.(1) (*note Refilling Paragraphs-Footnotes::) The +of a paragraph.(1) (*note Refilling Paragraphs-Footnote-1::) The `@refill' command is no longer important, but we describe it here because you once needed it. You will see it in many old Texinfo files. @@ -432,7 +432,7 @@ automatically.) Now, all the Info formatters automatically fill and indent those paragraphs that need to be filled and indented. The `@refill' command causes `texinfo-format-region' and -`texinfo-format-buffer' to refill a paragraph in the Info file *after* +`texinfo-format-buffer' to refill a paragraph in the Info file _after_ all the other processing has been done. For this reason, you can not use `@refill' with a paragraph containing either `@*' or `@w{ ... }' since the refilling action will override those two commands. @@ -503,7 +503,7 @@ uses the rest of the line as its argument. Emacs paragraph and filling commands work properly. There is only one exception to this rule: the command `@refill', which is always used at the end of a paragraph immediately following the final period or other -punctuation character. `@refill' takes no argument and does *not* +punctuation character. `@refill' takes no argument and does _not_ require braces. `@refill' never confuses the Emacs paragraph commands because it cannot appear at the beginning of a line. @@ -562,6 +562,7 @@ the TeX Users Group co-sponsors a complete CD-ROM TeX distribution. sites: please add to the base cost, if desired, $20.00 for shipment via air parcel post, or $30.00 for shipment via courier. + Many other TeX distributions are available; see `http://tug.org/'.  diff --git a/info/texinfo.info-12 b/info/texinfo.info-12 index 1e064ab..de69019 100644 --- a/info/texinfo.info-12 +++ b/info/texinfo.info-12 @@ -1,5 +1,5 @@ -This is Info file ../info/texinfo.info, produced by Makeinfo version -1.68 from the input file texinfo.texi. +This is ../info/texinfo.info, produced by makeinfo version 4.0 from +texinfo.texi. INFO-DIR-SECTION Texinfo documentation system START-INFO-DIR-ENTRY @@ -42,39 +42,43 @@ Concept Index * !: Inserting Accents. * (dir) as Up node of Top node: First Node. +* --delete: Invoking install-info. +* --dir-file=NAME: Invoking install-info. +* --entry=TEXT: Invoking install-info. +* --error-limit=LIMIT: makeinfo options. +* --fill-column=WIDTH: makeinfo options. +* --footnote-style=STYLE: makeinfo options. +* --force: makeinfo options. +* --help <1>: Invoking install-info. +* --help: makeinfo options. +* --info-dir=DIR: Invoking install-info. +* --info-file=FILE: Invoking install-info. +* --item=TEXT: Invoking install-info. +* --no-headers: makeinfo options. +* --no-number-footnotes: makeinfo options. +* --no-pointer-validate: makeinfo options. +* --no-split: makeinfo options. +* --no-validate: makeinfo options. +* --no-warn: makeinfo options. +* --output=FILE: makeinfo options. +* --paragraph-indent=INDENT: makeinfo options. +* --quiet: Invoking install-info. +* --reference-limit=LIMIT: makeinfo options. +* --remove: Invoking install-info. +* --section=SEC: Invoking install-info. +* --verbose: makeinfo options. +* --version <1>: Invoking install-info. +* --version: makeinfo options. * -D VAR: makeinfo options. -* -delete: Invoking install-info. -* -dir-file=NAME: Invoking install-info. -* -entry=TEXT: Invoking install-info. -* -error-limit=LIMIT: makeinfo options. -* -fill-column=WIDTH: makeinfo options. -* -footnote-style=STYLE: makeinfo options. -* -force: makeinfo options. -* -help <1>: Invoking install-info. -* -help: makeinfo options. * -I DIR: makeinfo options. -* -info-dir=DIR: Invoking install-info. -* -info-file=FILE: Invoking install-info. -* -item=TEXT: Invoking install-info. -* -no-headers: makeinfo options. -* -no-number-footnotes: makeinfo options. -* -no-pointer-validate: makeinfo options. -* -no-split: makeinfo options. -* -no-validate: makeinfo options. -* -no-warn: makeinfo options. * -o FILE: makeinfo options. -* -output=FILE: makeinfo options. * -P DIR: makeinfo options. -* -paragraph-indent=INDENT: makeinfo options. -* -quiet: Invoking install-info. -* -reference-limit=LIMIT: makeinfo options. -* -remove: Invoking install-info. -* -section=SEC: Invoking install-info. -* -verbose: makeinfo options. -* -version <1>: Invoking install-info. -* -version: makeinfo options. * .cshrc initialization file: Preparing for TeX. * .profile initialization file: Preparing for TeX. +* /L: Inserting Accents. +* /l: Inserting Accents. +* /O: Inserting Accents. +* /o: Inserting Accents. * ?: Inserting Accents. * @-command in nodename: Node Line Requirements. * @-command list: Command List. @@ -182,7 +186,7 @@ Concept Index * Definition template: Def Cmd Template. * Definitions grouped together: deffnx. * Description for menu, start: Inserting. -* Did^ot points: Images. +* Dido^t points: Images. * Different cross reference commands: Cross Reference Commands. * Dimension formatting: dmn. * Dimensions and image sizes: Images. @@ -344,8 +348,6 @@ Concept Index * keyboard input: kbd. * Keys, recommended names: key. * Knuth, Donald: Printed Books. -* L/: Inserting Accents. -* l/: Inserting Accents. * Larger or smaller pages: Cropmarks and Magnification. * Less cluttered menu entry: Less Cluttered Menu Entry. * License agreement: Software Copying Permissions. @@ -424,8 +426,6 @@ Concept Index * Nodes, catching mistakes: Catching Mistakes. * Nodes, checking for badly referenced: Running Info-Validate. * Not ending a sentence: Not Ending a Sentence. -* O/: Inserting Accents. -* o/: Inserting Accents. * Obtaining TeX: Obtaining TeX. * Occurrences, listing with @occur: Using occur. * OE: Inserting Accents. diff --git a/info/texinfo.info-2 b/info/texinfo.info-2 index 1697d67..fc54512 100644 --- a/info/texinfo.info-2 +++ b/info/texinfo.info-2 @@ -1,5 +1,5 @@ -This is Info file ../info/texinfo.info, produced by Makeinfo version -1.68 from the input file texinfo.texi. +This is ../info/texinfo.info, produced by makeinfo version 4.0 from +texinfo.texi. INFO-DIR-SECTION Texinfo documentation system START-INFO-DIR-ENTRY @@ -44,7 +44,7 @@ titlepage', look more intimidating than they are. Most of the material is standard boilerplate; when you write a manual, simply insert the names for your own manual in this segment. (*Note Beginning a File::.) -In the following, the sample text is *indented*; comments on it are +In the following, the sample text is _indented_; comments on it are not. The complete file, without any comments, is shown in *Note Sample Texinfo File::. @@ -160,6 +160,7 @@ The Results Here is what the contents of the first chapter of the sample look like: + This is the contents of the first chapter. Here is a numbered list. @@ -371,7 +372,7 @@ first letter of the @-command: however, more mnemonic; hence the two keybindings. (Also, you can move out from between braces by typing `C-f'.) - To put a command such as `@code{...}' around an *existing* word, + To put a command such as `@code{...}' around an _existing_ word, position the cursor in front of the word and type `C-u 1 C-c C-c c'. This makes it easy to edit existing plain text. The value of the prefix argument tells Emacs how many words following point to include @@ -519,7 +520,7 @@ or an `@ifinfo' line. followed by a node with an `@chapter' or equivalent-level command. Note that the menu updating commands will not create a main or master menu for a Texinfo file that has only `@chapter'-level nodes! The menu -updating commands only create menus *within* nodes for lower level +updating commands only create menus _within_ nodes for lower level nodes. To create a menu of chapters, you must provide a `Top' node. The menu updating commands remove menu entries that refer to other @@ -785,7 +786,7 @@ an Info file: or M-x makeinfo-buffer - For TeX or the Info formatting commands to work, the file *must* + For TeX or the Info formatting commands to work, the file _must_ include a line that has `@setfilename' in its header. *Note Create an Info File::, for details about Info formatting. @@ -802,7 +803,7 @@ print the file. Optionally, you may also create indices. To do this, you must run the `texindex' command after first running the `tex' typesetting command; and then you must run the `tex' command again. Or else run the `texi2dvi' command which automatically creates indices as -needed (*note Format with texi2dvi::.). +needed (*note Format with texi2dvi::). Often, when you are writing a document, you want to typeset and print only part of a file to see what it will look like. You can use the @@ -836,7 +837,7 @@ only part of a file to see what it will look like. You can use the `texinfo-tex-buffer' or `texinfo-tex-region'. For `texinfo-tex-region' or `texinfo-tex-buffer' to work, the file -*must* start with a `\input texinfo' line and must include an +_must_ start with a `\input texinfo' line and must include an `@settitle' line. The file must end with `@bye' on a line by itself. (When you use `texinfo-tex-region', you must surround the `@settitle' line with start-of-header and end-of-header lines.) @@ -1181,7 +1182,7 @@ Start of Header Follow the start-of-header line with `@setfilename' and `@settitle' lines and, optionally, with other command lines, such as `@smallbook' or `@footnotestyle'; and then by an end-of-header line (*note End of -Header::.). +Header::). With these lines, you can format part of a Texinfo file for Info or typeset part for printing. diff --git a/info/texinfo.info-3 b/info/texinfo.info-3 index e95f8a8..5eab100 100644 --- a/info/texinfo.info-3 +++ b/info/texinfo.info-3 @@ -1,5 +1,5 @@ -This is Info file ../info/texinfo.info, produced by Makeinfo version -1.68 from the input file texinfo.texi. +This is ../info/texinfo.info, produced by makeinfo version 4.0 from +texinfo.texi. INFO-DIR-SECTION Texinfo documentation system START-INFO-DIR-ENTRY @@ -181,8 +181,8 @@ and be put on a line by itself. appendix to this manual; see *Note `ifinfo' Copying Permissions: ifinfo Permissions, for the complete text. - The permissions text appears in an Info file *before* the first node. -This mean that a reader does *not* see this text when reading the file + The permissions text appears in an Info file _before_ the first node. +This mean that a reader does _not_ see this text when reading the file using Info, except when using the advanced Info command `g *'.  @@ -245,7 +245,7 @@ command, but that would have been rather long!) version of the program to which the manual applies on the title page. If the manual changes more frequently than the program or is independent of it, you should also include an edition number(1) (*note -titlepage-Footnotes::) for the manual. This helps readers keep track +titlepage-Footnote-1::) for the manual. This helps readers keep track of which manual is for which version of the program. (The `Top' node should also contain this information; see *Note `@top': makeinfo top.) @@ -727,16 +727,16 @@ those just cause the raw data for the index to be accumulated. To generate an index, you must include the `@printindex' command at the place in the document where you want the index to appear. Also, as part of the process of creating a printed manual, you must run a -program called `texindex' (*note Format/Print Hardcopy::.) to sort the +program called `texindex' (*note Format/Print Hardcopy::) to sort the raw data to produce a sorted index file. The sorted index file is what is actually used to print the index. Texinfo offers six different types of predefined index: the concept index, the function index, the variables index, the keystroke index, the -program index, and the data type index (*note Predefined Indices::.). +program index, and the data type index (*note Predefined Indices::). Each index type has a two-letter name: `cp', `fn', `vr', `ky', `pg', and `tp'. You may merge indices, or put them into separate sections -(*note Combining Indices::.); or you may define your own indices (*note +(*note Combining Indices::); or you may define your own indices (*note Defining New Indices: New Indices.). The `@printindex' command takes a two-letter index name, reads the @@ -756,13 +756,13 @@ Precede the `@unnumbered' command with an `@node' line. @unnumbered Variable Index @printindex vr - + @node Concept Index, , Variable Index, Top @comment node-name, next, previous, up @unnumbered Concept Index @printindex cp - + @summarycontents @contents @bye @@ -799,7 +799,7 @@ actual table to appear in the manual. To do this, you must use the table of contents in addition to the full table of contents. Write the `@shortcontents' command on a line by itself right - *before* the `@contents' command. + _before_ the `@contents' command. The table of contents commands automatically generate a chapter-like heading at the top of the first table of contents page. Write the table @@ -857,7 +857,7 @@ Contents.). The chapter structuring commands do not create an Info node structure, so normally you should put an `@node' command immediately before each -chapter structuring command (*note Nodes::.). The only time you are +chapter structuring command (*note Nodes::). The only time you are likely to use the chapter structuring commands without using the node structuring commands is if you are writing a document that contains no cross references and will never be transformed into Info format. @@ -959,6 +959,7 @@ that are listed in the table of contents of a printed book or manual. Here are the four groups of chapter structuring commands: + No new pages Numbered Unnumbered Lettered and numbered Unnumbered In contents In contents In contents Not in contents diff --git a/info/texinfo.info-4 b/info/texinfo.info-4 index 04bcd4c..8d30a06 100644 --- a/info/texinfo.info-4 +++ b/info/texinfo.info-4 @@ -1,5 +1,5 @@ -This is Info file ../info/texinfo.info, produced by Makeinfo version -1.68 from the input file texinfo.texi. +This is ../info/texinfo.info, produced by makeinfo version 4.0 from +texinfo.texi. INFO-DIR-SECTION Texinfo documentation system START-INFO-DIR-ENTRY @@ -73,7 +73,7 @@ is "Chapter 1", and the name of the `Up' node is "Top". may be at a lower level--a section-level node may follow a chapter-level node, and a subsection-level node may follow a section-level node. `Next' and `Previous' refer to nodes at the - *same* hierarchical level. (The `Top' node contains the exception + _same_ hierarchical level. (The `Top' node contains the exception to this rule. Since the `Top' node is the only node at that level, `Next' refers to the first following node, which is almost always a chapter or chapter-level node.) @@ -316,9 +316,9 @@ The First Node -------------- The first node of a Texinfo file is the "Top" node, except in an -included file (*note Include Files::.). The Top node contains the main +included file (*note Include Files::). The Top node contains the main or master menu for the document, and a short summary of the document -(*note Top Node Summary::.). +(*note Top Node Summary::). The Top node (which must be named `top' or `Top') should have as its `Up' node the name of a node in another file, where there is a menu @@ -433,13 +433,13 @@ Menus ***** "Menus" contain pointers to subordinate nodes.(1) (*note -Menus-Footnotes::) In Info, you use menus to go to such nodes. Menus +Menus-Footnote-1::) In Info, you use menus to go to such nodes. Menus have no effect in printed manuals and do not appear in them. By convention, a menu is put at the end of a node since a reader who uses the menu may not see text that follows it. - A node that has a menu should *not* contain much text. If you have a + A node that has a menu should _not_ contain much text. If you have a lot of text and a menu, move most of the text into a new subnode--all but a few lines. @@ -902,7 +902,7 @@ differently. *Note `@pxref': pxref.) file and in the printed manual. `@xref' must refer to an Info node by name. Use `@node' to define -the node (*note Writing a Node::.). +the node (*note Writing a Node::). `@xref' is followed by several arguments inside braces, separated by commas. Whitespace before and after these commas is ignored. @@ -1215,7 +1215,7 @@ in a printed document, and the following in Info: Sea surges are described in *Note Hurricanes::. - *Caution:* You *must* write a period or comma immediately after an + *Caution:* You _must_ write a period or comma immediately after an `@ref' command with two or more arguments. Otherwise, Info will not find the end of the cross reference entry and its attempt to follow the cross reference will fail. As a general rule, you @@ -1229,7 +1229,7 @@ File: texinfo.info, Node: pxref, Next: inforef, Prev: ref, Up: Cross Referen ======== The parenthetical reference command, `@pxref', is nearly the same as -`@xref', but you use it *only* inside parentheses and you do *not* type +`@xref', but you use it _only_ inside parentheses and you do _not_ type a comma or period after the command's closing brace. The command differs from `@xref' in two ways: @@ -1240,7 +1240,7 @@ differs from `@xref' in two ways: closing colon or period. Because one type of formatting automatically inserts closing -punctuation and the other does not, you should use `@pxref' *only* +punctuation and the other does not, you should use `@pxref' _only_ inside parentheses as part of another sentence. Also, you yourself should not insert punctuation after the reference, as you do with `@xref'. diff --git a/info/texinfo.info-5 b/info/texinfo.info-5 index e7fea89..f285171 100644 --- a/info/texinfo.info-5 +++ b/info/texinfo.info-5 @@ -1,5 +1,5 @@ -This is Info file ../info/texinfo.info, produced by Makeinfo version -1.68 from the input file texinfo.texi. +This is ../info/texinfo.info, produced by makeinfo version 4.0 from +texinfo.texi. INFO-DIR-SECTION Texinfo documentation system START-INFO-DIR-ENTRY @@ -43,7 +43,7 @@ of text refers to. For example, metasyntactic variables are marked by `@var', and code by `@code'. Since the pieces of text are labelled by commands that tell what kind of object they are, it is easy to change the way the Texinfo formatters prepare such text. (Texinfo is an -*intentional* formatting language rather than a *typesetting* +_intentional_ formatting language rather than a _typesetting_ formatting language.) For example, in a printed manual, code is usually illustrated in a @@ -523,7 +523,7 @@ File: texinfo.info, Node: emph & strong, Next: Smallcaps, Prev: Emphasis, Up --------------------------------- The `@emph' and `@strong' commands are for emphasis; `@strong' is -stronger. In printed output, `@emph' produces *italics* and `@strong' +stronger. In printed output, `@emph' produces _italics_ and `@strong' produces *bold*. For example, @@ -631,7 +631,7 @@ work only with TeX. `@end ifinfo' to define commands for Info with the same names as new commands for TeX. `@definfoenclose' creates new commands for Info that mark text by enclosing it in strings that precede and follow the text. -(1) (*note Customized Highlighting-Footnotes::) +(1) (*note Customized Highlighting-Footnote-1::) Here is how to create a new @-command called `@phoo' that causes TeX to typeset its argument in italics and causes Info to display the @@ -920,7 +920,7 @@ line, and neither does the `@end example' line. Do not put braces after an `@noindent' command; they are not necessary, since `@noindent' is a command used outside of paragraphs -(*note Command Syntax::.). +(*note Command Syntax::).  File: texinfo.info, Node: Lisp Example, Next: smallexample & smalllisp, Prev: noindent, Up: Quotations and Examples @@ -938,7 +938,7 @@ File: texinfo.info, Node: Lisp Example, Next: smallexample & smalllisp, Prev: the nature of the example. This is useful, for example, if you write a function that evaluates only and all the Lisp code in a Texinfo file. Then you can use the Texinfo file as a Lisp library.(1) (*note Lisp -Example-Footnotes::) +Example-Footnote-1::) Mark the end of `@lisp' with `@end lisp' on a line by itself. @@ -1165,6 +1165,7 @@ itemize' command. Precede each element of a list with an `@item' or `@itemx' command. + Here is an itemized list of the different kinds of table and lists: * Itemized lists with and without bullets. @@ -1173,6 +1174,7 @@ Here is an itemized list of the different kinds of table and lists: * Two-column tables with highlighting. + Here is an enumerated list with the same items: 1. Itemized lists with and without bullets. @@ -1181,6 +1183,7 @@ Here is an enumerated list with the same items: 3. Two-column tables with highlighting. + And here is a two-column table with the same items and their @-commands: `@itemize' @@ -1313,8 +1316,11 @@ This produces: 2. Proximate causes. + + Here is an example with an argument of `3': + @enumerate 3 @item Predisposing causes. @@ -1334,9 +1340,12 @@ This produces: 5. Perpetuating causes. + + Here is a brief summary of the alternatives. The summary is constructed using `@enumerate' with an argument of `a'. + a. `@enumerate' Without an argument, produce a numbered list, starting with the @@ -1389,7 +1398,7 @@ Using the `@table' Command Write the `@table' command at the beginning of a line and follow it on the same line with an argument that is a Texinfo "indicating" command such as `@code', `@samp', `@var', or `@kbd' (*note -Indicating::.). Although these commands are usually followed by +Indicating::). Although these commands are usually followed by arguments in braces, in this case you use the command name without an argument because `@item' will supply the argument. This command will be applied to the text that goes into the first column of each item and diff --git a/info/texinfo.info-6 b/info/texinfo.info-6 index 5b8991a..4bcdc71 100644 --- a/info/texinfo.info-6 +++ b/info/texinfo.info-6 @@ -1,5 +1,5 @@ -This is Info file ../info/texinfo.info, produced by Makeinfo version -1.68 from the input file texinfo.texi. +This is ../info/texinfo.info, produced by makeinfo version 4.0 from +texinfo.texi. INFO-DIR-SECTION Texinfo documentation system START-INFO-DIR-ENTRY @@ -179,16 +179,16 @@ your source file as necessary. produces: -Key Command Description -C-x 2 `split-window-vertically' Split the selected window - into two windows, with one - above the other. -C-x 3 `split-window-horizontally' Split the selected window - into two windows positioned - side by side. -C-Mouse-2 In the mode line or scroll - bar of a window, split that - window. +Key Command Description +C-x 2 `split-window-vertically' Split the selected window + into two windows, with one + above the other. +C-x 3 `split-window-horizontally' Split the selected window + into two windows positioned + side by side. +C-Mouse-2 In the mode line or scroll + bar of a window, split that + window.  File: texinfo.info, Node: Indices, Next: Insertions, Prev: Lists and Tables, Up: Top @@ -224,8 +224,8 @@ Making Index Entries ==================== When you are making index entries, it is good practice to think of the -different ways people may look for something. Different people *do -not* think of the same words when they look something up. A helpful +different ways people may look for something. Different people _do +not_ think of the same words when they look something up. A helpful index will have items indexed under all the different words that people may use. For example, one reader may think it obvious that the two-letter names for indices should be listed under "Indices, @@ -322,7 +322,7 @@ case-sensitive, so use upper and lower case as required for them. font and entries for the other indices are printed in a small `@code' font. You may change the way part of an entry is printed with the usual Texinfo commands, such as `@file' for file names and `@emph' for -emphasis (*note Marking Text::.). +emphasis (*note Marking Text::). The six indexing commands for predefined indices are: @@ -525,7 +525,7 @@ roman font. Thus, it parallels the `@findex' command rather than the You should define new indices within or right after the end-of-header line of a Texinfo file, before any `@synindex' or `@syncodeindex' -commands (*note Header::.). +commands (*note Header::).  File: texinfo.info, Node: Insertions, Next: Breaks, Prev: Indices, Up: Top @@ -704,7 +704,7 @@ produces Spacey example. Other possible uses of `@SPACE' have been subsumed by `@multitable' -(*note Multi-column Tables::.). +(*note Multi-column Tables::). Do not follow any of these commands with braces. @@ -734,7 +734,7 @@ produces Not everyone uses this style. Some people prefer `8.27 in.@:' or `8.27 inches' to `8.27@dmn{in}' in the Texinfo file. In these cases, however, the formatters may insert a line break between the number and -the dimension, so use `@w' (*note w::.). Also, if you write a period +the dimension, so use `@w' (*note w::). Also, if you write a period after an abbreviation within a sentence, you should write `@:' after the period to prevent TeX from inserting extra whitespace, as shown here. *Note Inserting Space::. @@ -748,40 +748,40 @@ Inserting Accents Here is a table with the commands Texinfo provides for inserting floating accents. The commands with non-alphabetic names do not take braces around their argument (which is taken to be the next character). -(Exception: `@,' *does* take braces around its argument.) This is so +(Exception: `@,' _does_ take braces around its argument.) This is so as to make the source as convenient to type and read as possible, since accented characters are very common in some languages. -Command Output What -@"o "o umlaut accent -@'o 'o acute accent -@,{c} c, cedilla accent -@=o =o macron/overbar accent -@^o ^o circumflex accent -@`o `o grave accent -@~o ~o tilde accent -@dotaccent{o} .o overdot accent -@H{o} ''o long Hungarian umlaut -@ringaccent{o} *o ring accent -@tieaccent{oo} [oo tie-after accent -@u{o} (o breve accent -@ubaraccent{o} o_ underbar accent -@udotaccent{o} o-. underdot accent -@v{o} '. *Note `@result': result. `@ringaccent{C}' - Generate a ring accent over the next character, as in *o. *Note + Generate a ring accent over the next character, as in o*. *Note Inserting Accents::. `@samp{TEXT}' @@ -1020,7 +1021,7 @@ indicates repeated text. `@tieaccent{CC}' Generate a tie-after accent over the next two characters CC, as in - `[oo'. *Note Inserting Accents::. + `oo['. *Note Inserting Accents::. `@tindex ENTRY' Add ENTRY to the index of data types. *Note Defining the Entries @@ -1063,7 +1064,7 @@ indicates repeated text. `@ubaraccent{C}' `@udotaccent{C}' Generate a breve, underbar, or underdot accent, respectively, over - or under the character C, as in (o, o_, o-.. *Note Inserting + or under the character C, as in o(, o_, .o. *Note Inserting Accents::. `@unnumbered TITLE' @@ -1101,7 +1102,7 @@ indicates repeated text. Web. *Note `@url': url. `@v{C}' - Generate check accent over the character C, as in is working on it.  File: xemacs-faq.info, Node: Q1.0.14, Next: Q1.1.1, Prev: Q1.0.13, Up: Introduction @@ -776,14 +769,20 @@ crash some time ago. * Curtis.N.Bingham + * Georges Brun-Cottan + * Richard Caley * Richard Cognot + * Mark Daku + * William G. Dubuque * Eric Eide + * Alain Fauconnet + * Chris Flatters * Evelyn Ginsparg @@ -1133,7 +1132,7 @@ Q1.4.5: And how do I bind it to a key? Or interactively, `M-x global-set-key' and follow the prompts.  -File: xemacs-faq.info, Node: Q1.4.6, Next: Q1.4.7, Prev: Q1.4.5, Up: Introduction +File: xemacs-faq.info, Node: Q1.4.6, Prev: Q1.4.5, Up: Introduction Q1.4.6: What's the difference between a macro and a function? ------------------------------------------------------------- @@ -1156,32 +1155,79 @@ another matter, entirely. A keyboard macro is a key bound to several other keys. Refer to manual for details.  -File: xemacs-faq.info, Node: Q1.4.7, Prev: Q1.4.6, Up: Introduction - -Q1.4.7: How come options saved with 19.13 don't work with 19.14 or later? -------------------------------------------------------------------------- - - There's a problem with options of the form: - - (add-spec-list-to-specifier (face-property 'searchm-field 'font) - '((global (nil)))) - - saved by a 19.13 XEmacs that causes a 19.14 XEmacs grief. You must -delete these options. XEmacs 19.14 and later no longer write the -options directly to `.emacs' which should allow us to deal with version -incompatibilities better in the future. - - Options saved under XEmacs 19.13 are protected by code that -specifically requires a version 19 XEmacs. This won't be a problem -unless you're using XEmacs v20. You should consider changing the code -to read: - - (cond - ((and (string-match "XEmacs" emacs-version) - (boundp 'emacs-major-version) - (or (and (= emacs-major-version 19) - (>= emacs-minor-version 12)) - (>= emacs-major-version 20))) - ... - )) +File: xemacs-faq.info, Node: Installation, Next: Customization, Prev: Introduction, Up: Top + +2 Installation and Trouble Shooting +*********************************** + + This is part 2 of the XEmacs Frequently Asked Questions list. This +section is devoted to Installation, Maintenance and Trouble Shooting. + +* Menu: + +Installation: +* Q2.0.1:: Running XEmacs without installing. +* Q2.0.2:: XEmacs is too big. +* Q2.0.3:: Compiling XEmacs with Netaudio. +* Q2.0.4:: Problems with Linux and ncurses. +* Q2.0.5:: Do I need X11 to run XEmacs? +* Q2.0.6:: I'm having strange crashes. What do I do? +* Q2.0.7:: Libraries in non-standard locations. +* Q2.0.8:: can't resolve symbol _h_errno +* Q2.0.9:: Where do I find external libraries? +* Q2.0.10:: After I run configure I find a coredump, is something wrong? +* Q2.0.11:: XEmacs can't resolve host names. +* Q2.0.12:: Why can't I strip XEmacs? + +Trouble Shooting: +* Q2.1.1:: XEmacs just crashed on me! +* Q2.1.2:: Cryptic Minibuffer messages. +* Q2.1.3:: Translation Table Syntax messages at Startup. +* Q2.1.4:: Startup warnings about deducing proper fonts? +* Q2.1.5:: XEmacs cannot connect to my X Terminal. +* Q2.1.6:: XEmacs just locked up my Linux X server. +* Q2.1.7:: HP Alt key as Meta. +* Q2.1.8:: got (wrong-type-argument color-instance-p nil)! +* Q2.1.9:: XEmacs causes my OpenWindows 3.0 server to crash. +* Q2.1.10:: Warnings from incorrect key modifiers. +* Q2.1.11:: Can't instantiate image error... in toolbar +* Q2.1.12:: Regular Expression Problems on DEC OSF1. +* Q2.1.13:: HP/UX 10.10 and `create_process' failure +* Q2.1.14:: `C-g' doesn't work for me. Is it broken? +* Q2.1.15:: How to debug an XEmacs problem with a debugger. +* Q2.1.16:: XEmacs crashes in `strcat' on HP/UX 10. +* Q2.1.17:: `Marker does not point anywhere'. +* Q2.1.18:: [This question intentionally left blank] +* Q2.1.19:: XEmacs does not follow the local timezone. +* Q2.1.20:: `Symbol's function definition is void: hkey-help-show.' +* Q2.1.21:: [This question intentionally left blank] +* Q2.1.22:: XEmacs seems to take a really long time to do some things. +* Q2.1.23:: Movemail on Linux does not work for XEmacs 19.15 and later. +* Q2.1.24:: XEmacs won't start without network. (NEW) + + +File: xemacs-faq.info, Node: Q2.0.1, Next: Q2.0.2, Prev: Installation, Up: Installation + +2.0: Installation +================= + +Q2.0.1: Running XEmacs without installing +----------------------------------------- + + The `INSTALL' file says that up to 108 MB of space is needed +temporarily during installation! How can I just try it out? + + XEmacs will run in place without requiring installation and copying +of the Lisp directories, and without having to specify a special +build-time flag. It's the copying of the Lisp directories that +requires so much space. XEmacs is largely written in Lisp. + + A good method is to make a shell alias for xemacs: + + alias xemacs=/i/xemacs-20.2/src/xemacs + + (You will obviously use whatever directory you downloaded the source +tree to instead of `/i/xemacs-20.2'). + + This will let you run XEmacs without massive copying. diff --git a/info/xemacs-faq.info-2 b/info/xemacs-faq.info-2 index f1e71fc..e58bb3d 100644 --- a/info/xemacs-faq.info-2 +++ b/info/xemacs-faq.info-2 @@ -7,85 +7,6 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY  -File: xemacs-faq.info, Node: Installation, Next: Customization, Prev: Introduction, Up: Top - -2 Installation and Trouble Shooting -*********************************** - - This is part 2 of the XEmacs Frequently Asked Questions list. This -section is devoted to Installation, Maintenance and Trouble Shooting. - -* Menu: - -Installation: -* Q2.0.1:: Running XEmacs without installing. -* Q2.0.2:: XEmacs is too big. -* Q2.0.3:: Compiling XEmacs with Netaudio. -* Q2.0.4:: Problems with Linux and ncurses. -* Q2.0.5:: Do I need X11 to run XEmacs? -* Q2.0.6:: I'm having strange crashes. What do I do? -* Q2.0.7:: Libraries in non-standard locations. -* Q2.0.8:: can't resolve symbol _h_errno -* Q2.0.9:: Where do I find external libraries? -* Q2.0.10:: After I run configure I find a coredump, is something wrong? -* Q2.0.11:: XEmacs can't resolve host names. -* Q2.0.12:: Why can't I strip XEmacs? -* Q2.0.13:: Can't link XEmacs on Solaris with Gcc. -* Q2.0.14:: Make on HP/UX 9 fails after linking temacs - -Trouble Shooting: -* Q2.1.1:: XEmacs just crashed on me! -* Q2.1.2:: Cryptic Minibuffer messages. -* Q2.1.3:: Translation Table Syntax messages at Startup. -* Q2.1.4:: Startup warnings about deducing proper fonts? -* Q2.1.5:: XEmacs cannot connect to my X Terminal. -* Q2.1.6:: XEmacs just locked up my Linux X server. -* Q2.1.7:: HP Alt key as Meta. -* Q2.1.8:: got (wrong-type-argument color-instance-p nil)! -* Q2.1.9:: XEmacs causes my OpenWindows 3.0 server to crash. -* Q2.1.10:: Warnings from incorrect key modifiers. -* Q2.1.11:: Can't instantiate image error... in toolbar -* Q2.1.12:: Regular Expression Problems on DEC OSF1. -* Q2.1.13:: HP/UX 10.10 and `create_process' failure -* Q2.1.14:: `C-g' doesn't work for me. Is it broken? -* Q2.1.15:: How to debug an XEmacs problem with a debugger. -* Q2.1.16:: XEmacs crashes in `strcat' on HP/UX 10. -* Q2.1.17:: `Marker does not point anywhere'. -* Q2.1.18:: 19.14 hangs on HP/UX 10.10. -* Q2.1.19:: XEmacs does not follow the local timezone. -* Q2.1.20:: `Symbol's function definition is void: hkey-help-show.' -* Q2.1.21:: Every so often the XEmacs frame freezes. -* Q2.1.22:: XEmacs seems to take a really long time to do some things. -* Q2.1.23:: Movemail on Linux does not work for XEmacs 19.15 and later. -* Q2.1.24:: XEmacs won't start without network. (NEW) - - -File: xemacs-faq.info, Node: Q2.0.1, Next: Q2.0.2, Prev: Installation, Up: Installation - -2.0: Installation -================= - -Q2.0.1: Running XEmacs without installing ------------------------------------------ - - The `INSTALL' file says that up to 108 MB of space is needed -temporarily during installation! How can I just try it out? - - XEmacs will run in place without requiring installation and copying -of the Lisp directories, and without having to specify a special -build-time flag. It's the copying of the Lisp directories that -requires so much space. XEmacs is largely written in Lisp. - - A good method is to make a shell alias for xemacs: - - alias xemacs=/i/xemacs-20.2/src/xemacs - - (You will obviously use whatever directory you downloaded the source -tree to instead of `/i/xemacs-20.2'). - - This will let you run XEmacs without massive copying. - - File: xemacs-faq.info, Node: Q2.0.2, Next: Q2.0.3, Prev: Q2.0.1, Up: Installation Q2.0.2: XEmacs is too big @@ -464,7 +385,7 @@ that stock SunOS systems do not ship with DNS resolver code in libc. then proceed to link against the DNS resolver library code.  -File: xemacs-faq.info, Node: Q2.0.12, Next: Q2.0.13, Prev: Q2.0.11, Up: Installation +File: xemacs-faq.info, Node: Q2.0.12, Next: Q2.1.1, Prev: Q2.0.11, Up: Installation Q2.0.12: Why can't I strip XEmacs? ---------------------------------- @@ -507,44 +428,7 @@ Q2.0.12: Why can't I strip XEmacs? /usr/local/lib/xemacs-19.16/i586-unknown-linuxaout  -File: xemacs-faq.info, Node: Q2.0.13, Next: Q2.0.14, Prev: Q2.0.12, Up: Installation - -Q2.0.13: Problems linking with Gcc on Solaris ---------------------------------------------- - - There are known difficulties linking with Gnu ld on Solaris. A -typical error message might look like: - - unexec(): dlopen(../dynodump/dynodump.so): ld.so.1: ./temacs: - fatal: relocation error: - symbol not found: main: referenced in ../dynodump/dynodump.so - - Martin Buchholz writes: - - You need to specify `-fno-gnu-linker' as part of your flags to pass - to ld. Future releases of XEmacs will try to do this - automatically. - - -File: xemacs-faq.info, Node: Q2.0.14, Next: Q2.1.1, Prev: Q2.0.13, Up: Installation - -Q2.0.14: Make on HP/UX 9 fails after linking temacs ---------------------------------------------------- - - Problem when building xemacs-19.16 on hpux 9: - - Richard Cognot writes: - - make on hpux fails after linking temacs with a message: - - "make: don't know how to make .y." - - Solution: This is a problem with HP make revision 70.X. Either - use GNU make, or install PHCO_6552, which will bring make to - revision 72.24.1.17. - - -File: xemacs-faq.info, Node: Q2.1.1, Next: Q2.1.2, Prev: Q2.0.14, Up: Installation +File: xemacs-faq.info, Node: Q2.1.1, Next: Q2.1.2, Prev: Q2.0.12, Up: Installation 2.1: Trouble Shooting ===================== @@ -971,17 +855,55 @@ debugger. Here are some hints: you've got is a core dump, all is not lost. If you're using GDB, there are some macros in the file - `src/gdbinit' in the XEmacs source distribution that should make it - easier for you to decode Lisp objects. Copy this file to - `~/.gdbinit', or `source' it from `~/.gdbinit', and use the macros - defined therein. In particular, use the `pobj' macro to print the - internal C representation of a lisp object. This will work with a - core file or not-yet-run executable. The aliases `ldp' and `lbt' - are provided for conveniently calling `debug_print' and - `debug_backtrace'. + `src/.gdbinit' in the XEmacs source distribution that should make + it easier for you to decode Lisp objects. This file is + automatically read by gdb if gdb is run in the directory where + xemacs was built, and contains these useful macros to inspect the + state of xemacs: + + `pobj' + Usage: pobj lisp_object + Print the internal C representation of a lisp object. + + `xtype' + Usage: xtype lisp_object + Print the Lisp type of a lisp object. + + `lbt' + Usage: lbt + Print the current Lisp stack trace. Requires a running + xemacs process. + + `ldp' + Usage: ldp lisp_object + Print a Lisp Object value using the Lisp printer. Requires a + running xemacs process. + + `run-temacs' + Usage: run-temacs + Run temacs interactively, like xemacs. Use this with + debugging tools (like purify) that cannot deal with dumping, + or when temacs builds successfully, but xemacs does not. + + `dump-temacs' + Usage: dump-temacs + Run the dumping part of the build procedure. Use when + debugging temacs, not xemacs! Use this when temacs builds + successfully, but xemacs does not. + + `check-xemacs' + Usage: check-xemacs + Run the test suite. Equivalent to 'make check'. + + `check-temacs' + Usage: check-temacs + Run the test suite on temacs. Equivalent to 'make + check-temacs'. Use this with debugging tools (like purify) + that cannot deal with dumping, or when temacs builds + successfully, but xemacs does not. If you are using Sun's `dbx' debugger, there is an equivalent file - `src/dbxrc' to copy to or source from `~/.dbxrc'. + `src/.dbxrc', which defines the same commands for dbx. * If you're using a debugger to get a C stack backtrace and you're seeing stack traces with some of the innermost frames mangled, it @@ -1026,13 +948,12 @@ debugger. Here are some hints: * If you compile with the newer gcc variants gcc-2.8 or egcs, you - will also need gdb 4.17. Earlier releases of gdb can't handle the - debug information generated by the newer compilers. + will also need gdb 4.17 or above. Earlier releases of gdb can't + handle the debug information generated by the newer compilers. - * The above information on using `src/gdbinit' works for XEmacs-21.0 - and above. For older versions of XEmacs, there are different - `gdbinit' files provided in the `src' directory. Use the one - corresponding to the configure options used when building XEmacs. + * In versions of XEmacs before 21.2.27, `src/.gdbinit' was named + `src/gdbinit'. This had the disadvantage of not being sourced + automatically by gdb, so you had to set that up yourself.  File: xemacs-faq.info, Node: Q2.1.16, Next: Q2.1.17, Prev: Q2.1.15, Up: Installation @@ -1078,44 +999,8 @@ reported (and fixed).  File: xemacs-faq.info, Node: Q2.1.18, Next: Q2.1.19, Prev: Q2.1.17, Up: Installation -Q2.1.18: 19.14 hangs on HP/UX 10.10. ------------------------------------- - - Richard Cognot writes: - - For the record, compiling on hpux 10.10 leads to a hang in Gnus - when compiled with optimization on. - - I've just discovered that my hpux 10.01 binary was working less - well than expected. In fact, on a 10.10 system, `(while t)' was not - interrupted by `C-g'. I defined `BROKEN_SIGIO' and recompiled on - 10.10, and... the hang is now gone. - - As far as configure goes, this will be a bit tricky: `BROKEN_SIGIO' - is needed on 10.10, but *not* on 10.01: if I run my 10.01 binary - on a 10.01 machine, without `BROKEN_SIGIO' being defined, `C-g' - works as expected. - - Richard Cognot adds: - - Apparently somebody has found the reason why there is this `poll: - interrupted...' message for each event. For some reason, libcurses - reimplements a `select()' system call, in a highly broken fashion. - The fix is to add a -lc to the link line *before* the -lxcurses. - XEmacs will then use the right version of `select()'. - - Alain Fauconnet writes: - - The *real* solution is to *not* link -lcurses in! I just changed - -lcurses to -ltermcap in the Makefile and it fixed: - - 1. The `poll: interrupted system call' message. - - 2. A more serious problem I had discovered in the meantime, that - is the fact that subprocess handling was seriously broken: - subprocesses e.g. started by AUC TeX for TeX compilation of a - buffer would *hang*. Actually they would wait forever for - emacs to read the socket which connects stdout... +Q2.1.18: removed +----------------  File: xemacs-faq.info, Node: Q2.1.19, Next: Q2.1.20, Prev: Q2.1.18, Up: Installation @@ -1147,11 +1032,8 @@ Q2.1.20: `Symbol's function definition is void: hkey-help-show.'  File: xemacs-faq.info, Node: Q2.1.21, Next: Q2.1.22, Prev: Q2.1.20, Up: Installation -Q2.1.21: Every so often the XEmacs frame freezes ------------------------------------------------- - - This problem has been fixed in 19.15, and was due to a not easily -reproducible race condition. +Q2.1.21: [This question intentionally left blank] +-------------------------------------------------  File: xemacs-faq.info, Node: Q2.1.22, Next: Q2.1.23, Prev: Q2.1.21, Up: Installation @@ -1222,3 +1104,173 @@ not on the network, you may be missing a "localhost" entry in your Add that line, and XEmacs will be happy. + +File: xemacs-faq.info, Node: Customization, Next: Subsystems, Prev: Installation, Up: Top + +3 Customization and Options +*************************** + + This is part 3 of the XEmacs Frequently Asked Questions list. This +section is devoted to Customization and screen settings. + +* Menu: + +Customization--Emacs Lisp and `.emacs': +* Q3.0.1:: What version of Emacs am I running? +* Q3.0.2:: How do I evaluate Elisp expressions? +* Q3.0.3:: `(setq tab-width 6)' behaves oddly. +* Q3.0.4:: How can I add directories to the `load-path'? +* Q3.0.5:: How to check if a lisp function is defined? +* Q3.0.6:: Can I force the output of `(face-list)' to a buffer? +* Q3.0.7:: Font selections don't get saved after `Save Options'. +* Q3.0.8:: How do I make a single minibuffer frame? +* Q3.0.9:: What is `Customize'? + +X Window System & Resources: +* Q3.1.1:: Where is a list of X resources? +* Q3.1.2:: How can I detect a color display? +* Q3.1.3:: [This question intentionally left blank] +* Q3.1.4:: [This question intentionally left blank] +* Q3.1.5:: How can I get the icon to just say `XEmacs'? +* Q3.1.6:: How can I have the window title area display the full path? +* Q3.1.7:: `xemacs -name junk' doesn't work? +* Q3.1.8:: `-iconic' doesn't work. + +Textual Fonts & Colors: +* Q3.2.1:: How can I set color options from `.emacs'? +* Q3.2.2:: How do I set the text, menu and modeline fonts? +* Q3.2.3:: How can I set the colors when highlighting a region? +* Q3.2.4:: How can I limit color map usage? +* Q3.2.5:: My tty supports color, but XEmacs doesn't use them. +* Q3.2.6:: Can I have pixmap backgrounds in XEmacs? + +The Modeline: +* Q3.3.1:: How can I make the modeline go away? +* Q3.3.2:: How do you have XEmacs display the line number in the modeline? +* Q3.3.3:: How do I get XEmacs to put the time of day on the modeline? +* Q3.3.4:: How do I turn off current chapter from AUC TeX modeline? +* Q3.3.5:: How can one change the modeline color based on the mode used? + +3.4 Multiple Device Support: +* Q3.4.1:: How do I open a frame on another screen of my multi-headed display? +* Q3.4.2:: Can I really connect to a running XEmacs after calling up over a modem? How? + +3.5 The Keyboard: +* Q3.5.1:: How can I bind complex functions (or macros) to keys? +* Q3.5.2:: How can I stop down-arrow from adding empty lines to the bottom of my buffers? +* Q3.5.3:: How do I bind C-. and C-; to scroll one line up and down? +* Q3.5.4:: Globally binding `Delete'? +* Q3.5.5:: Scrolling one line at a time. +* Q3.5.6:: How to map `Help' key alone on Sun type4 keyboard? +* Q3.5.7:: How can you type in special characters in XEmacs? +* Q3.5.8:: Why does `(global-set-key [delete-forward] 'delete-char)' complain? +* Q3.5.9:: How do I make the Delete key delete forward? +* Q3.5.10:: Can I turn on "sticky" modifier keys? +* Q3.5.11:: How do I map the arrow keys? + +The Cursor: +* Q3.6.1:: Is there a way to make the bar cursor thicker? +* Q3.6.2:: Is there a way to get back the old block cursor where the cursor covers the character in front of the point? +* Q3.6.3:: Can I make the cursor blink? + +The Mouse and Highlighting: +* Q3.7.1:: How can I turn off Mouse pasting? +* Q3.7.2:: How do I set control/meta/etc modifiers on mouse buttons? +* Q3.7.3:: Clicking the left button does not do anything in buffer list. +* Q3.7.4:: How can I get a list of buffers when I hit mouse button 3? +* Q3.7.5:: Why does cut-and-paste not work between XEmacs and a cmdtool? +* Q3.7.6:: How I can set XEmacs up so that it pastes where the text cursor is? +* Q3.7.7:: How do I select a rectangular region? +* Q3.7.8:: Why does `M-w' take so long? + +The Menubar and Toolbar: +* Q3.8.1:: How do I get rid of the menu (or menubar)? +* Q3.8.2:: Can I customize the basic menubar? +* Q3.8.3:: How do I control how many buffers are listed in the menu `Buffers' list? +* Q3.8.4:: Resources like `Emacs*menubar*font' are not working? +* Q3.8.5:: How can I bind a key to a function to toggle the toolbar? + +Scrollbars: +* Q3.9.1:: How can I disable the scrollbar? +* Q3.9.2:: How can one use resources to change scrollbar colors? +* Q3.9.3:: Moving the scrollbar can move the point; can I disable this? +* Q3.9.4:: How can I get automatic horizontal scrolling? + +Text Selections: +* Q3.10.1:: How can I turn off or change highlighted selections? +* Q3.10.2:: How do I get that typing on an active region removes it? +* Q3.10.3:: Can I turn off the highlight during isearch? +* Q3.10.4:: How do I turn off highlighting after `C-x C-p' (mark-page)? +* Q3.10.5:: The region disappears when I hit the end of buffer while scrolling. + + +File: xemacs-faq.info, Node: Q3.0.1, Next: Q3.0.2, Prev: Customization, Up: Customization + +3.0: Customization - Emacs Lisp and .emacs +========================================== + +Q3.0.1: What version of Emacs am I running? +------------------------------------------- + + How can `.emacs' determine which of the family of Emacsen I am using? + + To determine if you are currently running GNU Emacs 18, GNU Emacs 19, +XEmacs 19, XEmacs 20, or Epoch, and use appropriate code, check out the +example given in `etc/sample.emacs'. There are other nifty things in +there as well! + + For all new code, all you really need to do is: + + (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)) + + +File: xemacs-faq.info, Node: Q3.0.2, Next: Q3.0.3, Prev: Q3.0.1, Up: Customization + +Q3.0.2: How can I evaluate Emacs-Lisp expressions? +-------------------------------------------------- + + I know I can evaluate Elisp expressions from `*scratch*' buffer with +`C-j' after the expression. How do I do it from another buffer? + + Press `M-:' (the default binding of `eval-expression'), and enter +the expression to the minibuffer. In XEmacs prior to 19.15 +`eval-expression' used to be a disabled command by default. If this is +the case, upgrade your XEmacs. + + +File: xemacs-faq.info, Node: Q3.0.3, Next: Q3.0.4, Prev: Q3.0.2, Up: Customization + +Q3.0.3: `(setq tab-width 6)' behaves oddly. +------------------------------------------- + + If you put `(setq tab-width 6)' in your `.emacs' file it does not +work! Is there a reason for this? If you do it at the EVAL prompt it +works fine!! How strange. + + Use `setq-default' instead, since `tab-width' is all-buffer-local. + + +File: xemacs-faq.info, Node: Q3.0.4, Next: Q3.0.5, Prev: Q3.0.3, Up: Customization + +Q3.0.4: How can I add directories to the `load-path'? +----------------------------------------------------- + + Here are two ways to do that, one that puts your directories at the +front of the load-path, the other at the end: + + ;;; Add things at the beginning of the load-path, do not add + ;;; duplicate directories: + (pushnew "bar" load-path :test 'equal) + + (pushnew "foo" load-path :test 'equal) + + ;;; Add things at the end, unconditionally + (setq load-path (nconc load-path '("foo" "bar"))) + + keith (k.p.) hanlan writes: + + To add directories using Unix shell metacharacters use + `expand-file-name' like this: + + (push (expand-file-name "~keithh/.emacsdir") load-path) + diff --git a/info/xemacs-faq.info-3 b/info/xemacs-faq.info-3 index d6ddac2..1a4f35f 100644 --- a/info/xemacs-faq.info-3 +++ b/info/xemacs-faq.info-3 @@ -7,176 +7,6 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY  -File: xemacs-faq.info, Node: Customization, Next: Subsystems, Prev: Installation, Up: Top - -3 Customization and Options -*************************** - - This is part 3 of the XEmacs Frequently Asked Questions list. This -section is devoted to Customization and screen settings. - -* Menu: - -Customization--Emacs Lisp and `.emacs': -* Q3.0.1:: What version of Emacs am I running? -* Q3.0.2:: How do I evaluate Elisp expressions? -* Q3.0.3:: `(setq tab-width 6)' behaves oddly. -* Q3.0.4:: How can I add directories to the `load-path'? -* Q3.0.5:: How to check if a lisp function is defined? -* Q3.0.6:: Can I force the output of `(face-list)' to a buffer? -* Q3.0.7:: Font selections don't get saved after `Save Options'. -* Q3.0.8:: How do I make a single minibuffer frame? -* Q3.0.9:: What is `Customize'? - -X Window System & Resources: -* Q3.1.1:: Where is a list of X resources? -* Q3.1.2:: How can I detect a color display? -* Q3.1.3:: `(set-screen-width)' worked in 19.6, but not in 19.13? -* Q3.1.4:: Specifying `Emacs*EmacsScreen.geometry' in `.emacs' does not work in 19.15? -* Q3.1.5:: How can I get the icon to just say `XEmacs'? -* Q3.1.6:: How can I have the window title area display the full path? -* Q3.1.7:: `xemacs -name junk' doesn't work? -* Q3.1.8:: `-iconic' doesn't work. - -Textual Fonts & Colors: -* Q3.2.1:: How can I set color options from `.emacs'? -* Q3.2.2:: How do I set the text, menu and modeline fonts? -* Q3.2.3:: How can I set the colors when highlighting a region? -* Q3.2.4:: How can I limit color map usage? -* Q3.2.5:: My tty supports color, but XEmacs doesn't use them. -* Q3.2.6:: Can I have pixmap backgrounds in XEmacs? - -The Modeline: -* Q3.3.1:: How can I make the modeline go away? -* Q3.3.2:: How do you have XEmacs display the line number in the modeline? -* Q3.3.3:: How do I get XEmacs to put the time of day on the modeline? -* Q3.3.4:: How do I turn off current chapter from AUC TeX modeline? -* Q3.3.5:: How can one change the modeline color based on the mode used? - -3.4 Multiple Device Support: -* Q3.4.1:: How do I open a frame on another screen of my multi-headed display? -* Q3.4.2:: Can I really connect to a running XEmacs after calling up over a modem? How? - -3.5 The Keyboard: -* Q3.5.1:: How can I bind complex functions (or macros) to keys? -* Q3.5.2:: How can I stop down-arrow from adding empty lines to the bottom of my buffers? -* Q3.5.3:: How do I bind C-. and C-; to scroll one line up and down? -* Q3.5.4:: Globally binding `Delete'? -* Q3.5.5:: Scrolling one line at a time. -* Q3.5.6:: How to map `Help' key alone on Sun type4 keyboard? -* Q3.5.7:: How can you type in special characters in XEmacs? -* Q3.5.8:: Why does `(global-set-key [delete-forward] 'delete-char)' complain? -* Q3.5.9:: How do I make the Delete key delete forward? -* Q3.5.10:: Can I turn on "sticky" modifier keys? -* Q3.5.11:: How do I map the arrow keys? - -The Cursor: -* Q3.6.1:: Is there a way to make the bar cursor thicker? -* Q3.6.2:: Is there a way to get back the old block cursor where the cursor covers the character in front of the point? -* Q3.6.3:: Can I make the cursor blink? - -The Mouse and Highlighting: -* Q3.7.1:: How can I turn off Mouse pasting? -* Q3.7.2:: How do I set control/meta/etc modifiers on mouse buttons? -* Q3.7.3:: Clicking the left button does not do anything in buffer list. -* Q3.7.4:: How can I get a list of buffers when I hit mouse button 3? -* Q3.7.5:: Why does cut-and-paste not work between XEmacs and a cmdtool? -* Q3.7.6:: How I can set XEmacs up so that it pastes where the text cursor is? -* Q3.7.7:: How do I select a rectangular region? -* Q3.7.8:: Why does `M-w' take so long? - -The Menubar and Toolbar: -* Q3.8.1:: How do I get rid of the menu (or menubar)? -* Q3.8.2:: Can I customize the basic menubar? -* Q3.8.3:: How do I control how many buffers are listed in the menu `Buffers' list? -* Q3.8.4:: Resources like `Emacs*menubar*font' are not working? -* Q3.8.5:: How can I bind a key to a function to toggle the toolbar? - -Scrollbars: -* Q3.9.1:: How can I disable the scrollbar? -* Q3.9.2:: How can one use resources to change scrollbar colors? -* Q3.9.3:: Moving the scrollbar can move the point; can I disable this? -* Q3.9.4:: How can I get automatic horizontal scrolling? - -Text Selections: -* Q3.10.1:: How can I turn off or change highlighted selections? -* Q3.10.2:: How do I get that typing on an active region removes it? -* Q3.10.3:: Can I turn off the highlight during isearch? -* Q3.10.4:: How do I turn off highlighting after `C-x C-p' (mark-page)? -* Q3.10.5:: The region disappears when I hit the end of buffer while scrolling. - - -File: xemacs-faq.info, Node: Q3.0.1, Next: Q3.0.2, Prev: Customization, Up: Customization - -3.0: Customization - Emacs Lisp and .emacs -========================================== - -Q3.0.1: What version of Emacs am I running? -------------------------------------------- - - How can `.emacs' determine which of the family of Emacsen I am using? - - To determine if you are currently running GNU Emacs 18, GNU Emacs 19, -XEmacs 19, XEmacs 20, or Epoch, and use appropriate code, check out the -example given in `etc/sample.emacs'. There are other nifty things in -there as well! - - For all new code, all you really need to do is: - - (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)) - - -File: xemacs-faq.info, Node: Q3.0.2, Next: Q3.0.3, Prev: Q3.0.1, Up: Customization - -Q3.0.2: How can I evaluate Emacs-Lisp expressions? --------------------------------------------------- - - I know I can evaluate Elisp expressions from `*scratch*' buffer with -`C-j' after the expression. How do I do it from another buffer? - - Press `M-:' (the default binding of `eval-expression'), and enter -the expression to the minibuffer. In XEmacs prior to 19.15 -`eval-expression' used to be a disabled command by default. If this is -the case, upgrade your XEmacs. - - -File: xemacs-faq.info, Node: Q3.0.3, Next: Q3.0.4, Prev: Q3.0.2, Up: Customization - -Q3.0.3: `(setq tab-width 6)' behaves oddly. -------------------------------------------- - - If you put `(setq tab-width 6)' in your `.emacs' file it does not -work! Is there a reason for this? If you do it at the EVAL prompt it -works fine!! How strange. - - Use `setq-default' instead, since `tab-width' is all-buffer-local. - - -File: xemacs-faq.info, Node: Q3.0.4, Next: Q3.0.5, Prev: Q3.0.3, Up: Customization - -Q3.0.4: How can I add directories to the `load-path'? ------------------------------------------------------ - - Here are two ways to do that, one that puts your directories at the -front of the load-path, the other at the end: - - ;;; Add things at the beginning of the load-path, do not add - ;;; duplicate directories: - (pushnew "bar" load-path :test 'equal) - - (pushnew "foo" load-path :test 'equal) - - ;;; Add things at the end, unconditionally - (setq load-path (nconc load-path '("foo" "bar"))) - - keith (k.p.) hanlan writes: - - To add directories using Unix shell metacharacters use - `expand-file-name' like this: - - (push (expand-file-name "~keithh/.emacsdir") load-path) - - File: xemacs-faq.info, Node: Q3.0.5, Next: Q3.0.6, Prev: Q3.0.4, Up: Customization Q3.0.5: How to check if a lisp function is defined? @@ -317,34 +147,14 @@ in:  File: xemacs-faq.info, Node: Q3.1.3, Next: Q3.1.4, Prev: Q3.1.2, Up: Customization -Q3.1.3: `(set-screen-width)' worked in 19.6, but not in 19.13? --------------------------------------------------------------- - - In Lucid Emacs 19.6 I did `(set-screen-width CHARACTERS)' and -`(set-screen-height LINES)' in my `.emacs' instead of specifying -`Emacs*EmacsScreen.geometry' in my `.Xdefaults' but this does not work -in XEmacs 19.13. - - These two functions now take frame arguments: - - (set-frame-width (selected-frame) CHARACTERS) - (set-frame-height (selected-frame) LINES) +Q3.1.3: [This question intentionally left blank] +------------------------------------------------  File: xemacs-faq.info, Node: Q3.1.4, Next: Q3.1.5, Prev: Q3.1.3, Up: Customization -Q3.1.4: Specifying `Emacs*EmacsScreen.geometry' in `.emacs' does not work in 19.15? ------------------------------------------------------------------------------------ - - In XEmacs 19.11 I specified `Emacs*EmacsScreen.geometry' in my -`.emacs' but this does not work in XEmacs 19.15. - - We have switched from using the term "screen" to using the term -"frame". - - The correct entry for your `.Xdefaults' is now: - - Emacs*EmacsFrame.geometry +Q3.1.4: [This question intentionally left blank] +------------------------------------------------  File: xemacs-faq.info, Node: Q3.1.5, Next: Q3.1.6, Prev: Q3.1.4, Up: Customization @@ -1394,3 +1204,237 @@ unless the package specifically asked for them. Automatic horizontal scrolling is now standard, starting with 19.14. + +File: xemacs-faq.info, Node: Q3.10.1, Next: Q3.10.2, Prev: Q3.9.4, Up: Customization + +3.10: Text Selections +===================== + +Q3.10.1: How can I turn off or change highlighted selections? +------------------------------------------------------------- + + The `zmacs' mode allows for what some might call gratuitous +highlighting for selected regions (either by setting mark or by using +the mouse). This is the default behavior. To turn off, add the +following line to your `.emacs' file: + + (setq zmacs-regions nil) + + Starting with XEmacs-20.2 you can also change this with Customize. +Select from the `Options' menu `Customize->Emacs->Editing->Basics->Zmacs +Regions' or type `M-x customize editing-basics '. + + To change the face for selection, look at `Options->Customize' on +the menubar. + + +File: xemacs-faq.info, Node: Q3.10.2, Next: Q3.10.3, Prev: Q3.10.1, Up: Customization + +Q3.10.2: How do I get that typing on an active region removes it? +----------------------------------------------------------------- + + I want to change things so that if I select some text and start +typing, the typed text replaces the selected text, similar to Motif. + + You want to use something called "pending delete". Pending delete +is what happens when you select a region (with the mouse or keyboard) +and you press a key to replace the selected region by the key you typed. +Usually backspace kills the selected region. + + To get this behavior, add the following lines to your `.emacs': + + (cond + ((fboundp 'turn-on-pending-delete) + (turn-on-pending-delete)) + ((fboundp 'pending-delete-on) + (pending-delete-on t))) + + Note that this will work with both Backspace and Delete. This code +is a tad more complicated than it has to be for XEmacs in order to make +it more portable. + + +File: xemacs-faq.info, Node: Q3.10.3, Next: Q3.10.4, Prev: Q3.10.2, Up: Customization + +Q3.10.3: Can I turn off the highlight during isearch? +----------------------------------------------------- + + I do not like my text highlighted while I am doing isearch as I am +not able to see what's underneath. How do I turn it off? + + Put the following in your `.emacs': + + (setq isearch-highlight nil) + + Starting with XEmacs-20.2 you can also change this with Customize. +Type `M-x customize-variable isearch-highlight '. + + Note also that isearch-highlight affects query-replace and ispell. +Instead of disabling isearch-highlight you may find that a better +solution consists of customizing the `isearch' face. + + +File: xemacs-faq.info, Node: Q3.10.4, Next: Q3.10.5, Prev: Q3.10.3, Up: Customization + +Q3.10.4: How do I turn off highlighting after `C-x C-p' (mark-page)? +-------------------------------------------------------------------- + + Put this in your `.emacs': + + (setq zmacs-regions nil) + + *Warning: This command turns off all region highlighting.* + + Also *Note Q3.10.1::. + + +File: xemacs-faq.info, Node: Q3.10.5, Prev: Q3.10.4, Up: Customization + +Q3.10.5: The region disappears when I hit the end of buffer while scrolling. +---------------------------------------------------------------------------- + + This has been fixed by default starting with XEmacs-20.3. + + With older versions you can turn this feature (if it indeed is a +feature) off like this: + + (defadvice scroll-up (around scroll-up freeze) + (interactive "_P") + (let ((zmacs-region-stays t)) + (if (interactive-p) + (condition-case nil + ad-do-it + (end-of-buffer (goto-char (point-max)))) + ad-do-it))) + + (defadvice scroll-down (around scroll-down freeze) + (interactive "_P") + (let ((zmacs-region-stays t)) + (if (interactive-p) + (condition-case nil + ad-do-it + (beginning-of-buffer (goto-char (point-min)))) + ad-do-it))) + + Thanks to T. V. Raman for assistance in deriving +this answer. + + +File: xemacs-faq.info, Node: Subsystems, Next: Miscellaneous, Prev: Customization, Up: Top + +4 Major Subsystems +****************** + + This is part 4 of the XEmacs Frequently Asked Questions list. This +section is devoted to major XEmacs subsystems. + +* Menu: + +Reading Mail with VM: +* Q4.0.1:: How do I set up VM to retrieve remote mail using POP? +* Q4.0.2:: How do I get VM to filter mail for me? +* Q4.0.3:: How can I get VM to automatically check for new mail? +* Q4.0.4:: [This question intentionally left blank] +* Q4.0.5:: How do I get my outgoing mail archived? +* Q4.0.6:: I have various addresses at which I receive mail. How can I tell VM to ignore them when doing a "reply-all"? +* Q4.0.7:: Is there a mailing list or FAQ for VM? +* Q4.0.8:: Remote mail reading with VM. +* Q4.0.9:: rmail or VM gets an error incorporating new mail. +* Q4.0.10:: How do I make VM stay in a single frame? +* Q4.0.11:: How do I make VM or mh-e display graphical smilies? +* Q4.0.12:: Customization of VM not covered in the manual or here. + +Web browsing with W3: +* Q4.1.1:: What is W3? +* Q4.1.2:: How do I run W3 from behind a firewall? +* Q4.1.3:: Is it true that W3 supports style sheets and tables? + +Reading Netnews and Mail with Gnus: +* Q4.2.1:: GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus,argh! +* Q4.2.2:: [This question intentionally left blank] +* Q4.2.3:: How do I make Gnus stay within a single frame? +* Q4.2.4:: How do I customize the From: line? + +Other Mail & News: +* Q4.3.1:: How can I read and/or compose MIME messages? +* Q4.3.2:: What is TM and where do I get it? +* Q4.3.3:: Why isn't this `movemail' program working? +* Q4.3.4:: Movemail is also distributed by Netscape? Can that cause problems? +* Q4.3.5:: Where do I find pstogif (required by tm)? + +Sparcworks, EOS, and WorkShop: +* Q4.4.1:: What is SPARCworks, EOS, and WorkShop +* Q4.4.2:: How do I start the Sun Workshop support in XEmacs 21? + +Energize: +* Q4.5.1:: What is/was Energize? + +Infodock: +* Q4.6.1:: What is Infodock? + +Other Unbundled Packages: +* Q4.7.1:: What is AUC TeX? Where do you get it? +* Q4.7.2:: Are there any Emacs Lisp Spreadsheets? +* Q4.7.3:: [This question intentionally left blank] +* Q4.7.4:: Problems installing AUC TeX +* Q4.7.5:: Is there a reason for an Emacs package not to be included in XEmacs? +* Q4.7.6:: Is there a MatLab mode? + + +File: xemacs-faq.info, Node: Q4.0.1, Next: Q4.0.2, Prev: Subsystems, Up: Subsystems + +4.0: Reading Mail with VM +========================= + +Q4.0.1: How do I set up VM to retrieve mail from a remote site using POP? +------------------------------------------------------------------------- + + Use `vm-spool-files', like this for example: + + (setq vm-spool-files '("/var/spool/mail/wing" + "netcom23.netcom.com:110:pass:wing:MYPASS")) + + Of course substitute your actual password for MYPASS. + + +File: xemacs-faq.info, Node: Q4.0.2, Next: Q4.0.3, Prev: Q4.0.1, Up: Subsystems + +Q4.0.2: How do I get VM to filter mail for me? +---------------------------------------------- + + One possibility is to use procmail to split your mail before it gets +to VM. I prefer this personally, since there are many strange and +wonderful things one can do with procmail. Procmail may be found at +`ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/'. + + Also see the Mail Filtering FAQ at: +`ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/filtering-faq'. + + +File: xemacs-faq.info, Node: Q4.0.3, Next: Q4.0.4, Prev: Q4.0.2, Up: Subsystems + +Q4.0.3: How can I get VM to automatically check for new mail? +------------------------------------------------------------- + + John Turner writes: + + Use the following: + + (setq vm-auto-get-new-mail 60) + + +File: xemacs-faq.info, Node: Q4.0.4, Next: Q4.0.5, Prev: Q4.0.3, Up: Subsystems + +Q4.0.4: [This question intentionally left blank] +------------------------------------------------ + + Obsolete question, left blank to avoid renumbering. + + +File: xemacs-faq.info, Node: Q4.0.5, Next: Q4.0.6, Prev: Q4.0.4, Up: Subsystems + +Q4.0.5: How do I get my outgoing mail archived? +----------------------------------------------- + + (setq mail-archive-file-name "~/outbox") + diff --git a/info/xemacs-faq.info-4 b/info/xemacs-faq.info-4 index ee917b4..7c5211c 100644 --- a/info/xemacs-faq.info-4 +++ b/info/xemacs-faq.info-4 @@ -7,234 +7,6 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY  -File: xemacs-faq.info, Node: Q3.10.1, Next: Q3.10.2, Prev: Q3.9.4, Up: Customization - -3.10: Text Selections -===================== - -Q3.10.1: How can I turn off or change highlighted selections? -------------------------------------------------------------- - - The `zmacs' mode allows for what some might call gratuitous -highlighting for selected regions (either by setting mark or by using -the mouse). This is the default behavior. To turn off, add the -following line to your `.emacs' file: - - (setq zmacs-regions nil) - - Starting with XEmacs-20.2 you can also change this with Customize. -Select from the `Options' menu `Customize->Emacs->Editing->Basics->Zmacs -Regions' or type `M-x customize editing-basics '. - - To change the face for selection, look at `Options->Customize' on -the menubar. - - -File: xemacs-faq.info, Node: Q3.10.2, Next: Q3.10.3, Prev: Q3.10.1, Up: Customization - -Q3.10.2: How do I get that typing on an active region removes it? ------------------------------------------------------------------ - - I want to change things so that if I select some text and start -typing, the typed text replaces the selected text, similar to Motif. - - You want to use something called "pending delete". Pending delete -is what happens when you select a region (with the mouse or keyboard) -and you press a key to replace the selected region by the key you typed. -Usually backspace kills the selected region. - - To get this behavior, add the following line to your `.emacs': - - (turn-on-pending-delete) - - Note that this will work with both Backspace and Delete. - - -File: xemacs-faq.info, Node: Q3.10.3, Next: Q3.10.4, Prev: Q3.10.2, Up: Customization - -Q3.10.3: Can I turn off the highlight during isearch? ------------------------------------------------------ - - I do not like my text highlighted while I am doing isearch as I am -not able to see what's underneath. How do I turn it off? - - Put the following in your `.emacs': - - (setq isearch-highlight nil) - - Starting with XEmacs-20.2 you can also change this with Customize. -Type `M-x customize-variable isearch-highlight '. - - Note also that isearch-highlight affects query-replace and ispell. -Instead of disabling isearch-highlight you may find that a better -solution consists of customizing the `isearch' face. - - -File: xemacs-faq.info, Node: Q3.10.4, Next: Q3.10.5, Prev: Q3.10.3, Up: Customization - -Q3.10.4: How do I turn off highlighting after `C-x C-p' (mark-page)? --------------------------------------------------------------------- - - Put this in your `.emacs': - - (setq zmacs-regions nil) - - *Warning: This command turns off all region highlighting.* - - Also *Note Q3.10.1::. - - -File: xemacs-faq.info, Node: Q3.10.5, Prev: Q3.10.4, Up: Customization - -Q3.10.5: The region disappears when I hit the end of buffer while scrolling. ----------------------------------------------------------------------------- - - This has been fixed by default starting with XEmacs-20.3. - - With older versions you can turn this feature (if it indeed is a -feature) off like this: - - (defadvice scroll-up (around scroll-up freeze) - (interactive "_P") - (let ((zmacs-region-stays t)) - (if (interactive-p) - (condition-case nil - ad-do-it - (end-of-buffer (goto-char (point-max)))) - ad-do-it))) - - (defadvice scroll-down (around scroll-down freeze) - (interactive "_P") - (let ((zmacs-region-stays t)) - (if (interactive-p) - (condition-case nil - ad-do-it - (beginning-of-buffer (goto-char (point-min)))) - ad-do-it))) - - Thanks to T. V. Raman for assistance in deriving -this answer. - - -File: xemacs-faq.info, Node: Subsystems, Next: Miscellaneous, Prev: Customization, Up: Top - -4 Major Subsystems -****************** - - This is part 4 of the XEmacs Frequently Asked Questions list. This -section is devoted to major XEmacs subsystems. - -* Menu: - -Reading Mail with VM: -* Q4.0.1:: How do I set up VM to retrieve remote mail using POP? -* Q4.0.2:: How do I get VM to filter mail for me? -* Q4.0.3:: How can I get VM to automatically check for new mail? -* Q4.0.4:: [This question intentionally left blank] -* Q4.0.5:: How do I get my outgoing mail archived? -* Q4.0.6:: I have various addresses at which I receive mail. How can I tell VM to ignore them when doing a "reply-all"? -* Q4.0.7:: Is there a mailing list or FAQ for VM? -* Q4.0.8:: Remote mail reading with VM. -* Q4.0.9:: rmail or VM gets an error incorporating new mail. -* Q4.0.10:: How do I make VM stay in a single frame? -* Q4.0.11:: How do I make VM or mh-e display graphical smilies? -* Q4.0.12:: Customization of VM not covered in the manual or here. - -Web browsing with W3: -* Q4.1.1:: What is W3? -* Q4.1.2:: How do I run W3 from behind a firewall? -* Q4.1.3:: Is it true that W3 supports style sheets and tables? - -Reading Netnews and Mail with Gnus: -* Q4.2.1:: GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus,argh! -* Q4.2.2:: [This question intentionally left blank] -* Q4.2.3:: How do I make Gnus stay within a single frame? -* Q4.2.4:: How do I customize the From: line? - -Other Mail & News: -* Q4.3.1:: How can I read and/or compose MIME messages? -* Q4.3.2:: What is TM and where do I get it? -* Q4.3.3:: Why isn't this `movemail' program working? -* Q4.3.4:: Movemail is also distributed by Netscape? Can that cause problems? -* Q4.3.5:: Where do I find pstogif (required by tm)? - -Sparcworks, EOS, and WorkShop: -* Q4.4.1:: What is SPARCworks, EOS, and WorkShop -* Q4.4.2:: How do I start the Sun Workshop support in XEmacs 21? - -Energize: -* Q4.5.1:: What is/was Energize? - -Infodock: -* Q4.6.1:: What is Infodock? - -Other Unbundled Packages: -* Q4.7.1:: What is AUC TeX? Where do you get it? -* Q4.7.2:: Are there any Emacs Lisp Spreadsheets? -* Q4.7.3:: Byte compiling AUC TeX on XEmacs 19.14 -* Q4.7.4:: Problems installing AUC TeX -* Q4.7.5:: Is there a reason for an Emacs package not to be included in XEmacs? -* Q4.7.6:: Is there a MatLab mode? - - -File: xemacs-faq.info, Node: Q4.0.1, Next: Q4.0.2, Prev: Subsystems, Up: Subsystems - -4.0: Reading Mail with VM -========================= - -Q4.0.1: How do I set up VM to retrieve mail from a remote site using POP? -------------------------------------------------------------------------- - - Use `vm-spool-files', like this for example: - - (setq vm-spool-files '("/var/spool/mail/wing" - "netcom23.netcom.com:110:pass:wing:MYPASS")) - - Of course substitute your actual password for MYPASS. - - -File: xemacs-faq.info, Node: Q4.0.2, Next: Q4.0.3, Prev: Q4.0.1, Up: Subsystems - -Q4.0.2: How do I get VM to filter mail for me? ----------------------------------------------- - - One possibility is to use procmail to split your mail before it gets -to VM. I prefer this personally, since there are many strange and -wonderful things one can do with procmail. Procmail may be found at -`ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/'. - - Also see the Mail Filtering FAQ at: -`ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/filtering-faq'. - - -File: xemacs-faq.info, Node: Q4.0.3, Next: Q4.0.4, Prev: Q4.0.2, Up: Subsystems - -Q4.0.3: How can I get VM to automatically check for new mail? -------------------------------------------------------------- - - John Turner writes: - - Use the following: - - (setq vm-auto-get-new-mail 60) - - -File: xemacs-faq.info, Node: Q4.0.4, Next: Q4.0.5, Prev: Q4.0.3, Up: Subsystems - -Q4.0.4: [This question intentionally left blank] ------------------------------------------------- - - Obsolete question, left blank to avoid renumbering. - - -File: xemacs-faq.info, Node: Q4.0.5, Next: Q4.0.6, Prev: Q4.0.4, Up: Subsystems - -Q4.0.5: How do I get my outgoing mail archived? ------------------------------------------------ - - (setq mail-archive-file-name "~/outbox") - - File: xemacs-faq.info, Node: Q4.0.6, Next: Q4.0.7, Prev: Q4.0.5, Up: Subsystems Q4.0.6: I have various addresses at which I receive mail. How can I tell VM to ignore them when doing a "reply-all"? @@ -880,14 +652,8 @@ Q4.7.2: Are there any Emacs Lisp Spreadsheets?  File: xemacs-faq.info, Node: Q4.7.3, Next: Q4.7.4, Prev: Q4.7.2, Up: Subsystems -Q4.7.3: Byte compiling AUC TeX on XEmacs 19.14. ------------------------------------------------ - - Georges Brun-Cottan writes: - - When byte compiling auctex-9.4g, you must use the command: - - xemacs -batch -l lpath.el +Q4.7.3: [This question intentionally left blank] +------------------------------------------------  File: xemacs-faq.info, Node: Q4.7.4, Next: Q4.7.5, Prev: Q4.7.3, Up: Subsystems @@ -982,14 +748,14 @@ Major & Minor Modes: * Q5.0.8:: Why does edt emulation not work? * Q5.0.9:: How can I emulate VI and use it as my default mode? * Q5.0.10:: [This question intentionally left blank] -* Q5.0.11:: Filladapt doesn't work in 19.15? +* Q5.0.11:: How do I turn on filladapt for all buffers? * Q5.0.12:: How do I disable gnuserv from opening a new frame? * Q5.0.13:: How do I start gnuserv so that each subsequent XEmacs is a client? * Q5.0.14:: Strange things are happening in Shell Mode. * Q5.0.15:: Where do I get the latest CC Mode? * Q5.0.16:: I find auto-show-mode disconcerting. How do I turn it off? * Q5.0.17:: How can I get two instances of info? -* Q5.0.18:: I upgraded to XEmacs 19.14 and gnuserv stopped working +* Q5.0.18:: [This question intentionally left blank] * Q5.0.19:: Is there something better than LaTeX mode? * Q5.0.20:: Is there a way to start a new XEmacs if there's no gnuserv running, and otherwise use gnuclient? @@ -1242,12 +1008,12 @@ Q5.0.10: [This question intentionally left blank]  File: xemacs-faq.info, Node: Q5.0.11, Next: Q5.0.12, Prev: Q5.0.10, Up: Miscellaneous -Q5.0.11: Filladapt doesn't work in 19.15 ----------------------------------------- +Q5.0.11: How do I turn on filladapt for all buffers? +---------------------------------------------------- - Filladapt 2.x is included in 19.15. In it filladapt is now a minor -mode and minor modes are traditionally off by default. The following -added to your `.emacs' will turn it on for all buffers: + Filladapt is a minor mode and minor modes are traditionally off by +default. The following added to your `.emacs' will turn it on for all +buffers: (setq-default filladapt-mode t) @@ -1353,3 +1119,196 @@ Q5.0.17: How can I get two instances of info? You can't. The `info' package does not provide for multiple info buffers. + +File: xemacs-faq.info, Node: Q5.0.18, Next: Q5.0.19, Prev: Q5.0.17, Up: Miscellaneous + +Q5.0.18: [This question intentionally left blank] +------------------------------------------------- + + +File: xemacs-faq.info, Node: Q5.0.19, Next: Q5.0.20, Prev: Q5.0.18, Up: Miscellaneous + +Q5.0.19: Is there something better than LaTeX mode? +--------------------------------------------------- + + David Kastrup writes: + + The standard TeX modes leave much to be desired, and are somewhat + leniently maintained. Serious TeX users use AUC TeX (*note + Q4.7.1::.). + + +File: xemacs-faq.info, Node: Q5.0.20, Next: Q5.1.1, Prev: Q5.0.19, Up: Miscellaneous + +Q5.0.20: Is there a way to start a new XEmacs if there's no gnuserv running, and otherwise use gnuclient? +--------------------------------------------------------------------------------------------------------- + + Jan Vroonhof writes: + Here is one of the solutions, we have this in a script called + `etc/editclient.sh'. + #!/bin/sh + if gnuclient -batch -eval t >/dev/null 2>&1 + then + exec gnuclient ${1+"$@"} + else + xemacs -unmapped -f gnuserv-start & + until gnuclient -batch -eval t >/dev/null 2>&1 + do + sleep 1 + done + exec gnuclient ${1+"$@"} + fi + + Note that there is a known problem when running XEmacs and + 'gnuclient -nw' on the same TTY. + + +File: xemacs-faq.info, Node: Q5.1.1, Next: Q5.1.2, Prev: Q5.0.20, Up: Miscellaneous + +5.1: Emacs Lisp Programming Techniques +====================================== + +Q5.1.1: What is the difference in key sequences between XEmacs and GNU Emacs? +----------------------------------------------------------------------------- + + Erik Naggum writes; + + Emacs has a legacy of keyboards that produced characters with + modifier bits, and therefore map a variety of input systems into + this scheme even today. XEmacs is instead optimized for X events. + This causes an incompatibility in the way key sequences are + specified, but both Emacs and XEmacs will accept a key sequence as + a vector of lists of modifiers that ends with a key, e.g., to bind + `M-C-a', you would say `[(meta control a)]' in both Emacsen. + XEmacs has an abbreviated form for a single key, just (meta + control a). Emacs has an abbreviated form for the Control and the + Meta modifiers to string-characters (the ASCII characters), as in + `\M-\C-a'. XEmacs users need to be aware that the abbreviated + form works only for one-character key sequences, while Emacs users + need to be aware that the string-character is rather limited. + Specifically, the string-character can accommodate only 256 + different values, 128 of which have the Meta modifier and 128 of + which have not. In each of these blocks, only 32 characters have + the Control modifier. Whereas `[(meta control A)]' differs from + `[(meta control a)]' because the case differs, `\M-\C-a' and + `\M-\C-A' do not. Programmers are advised to use the full common + form, both because it is more readable and less error-prone, and + because it is supported by both Emacsen. + + Another (even safer) way to be sure of the key-sequences is to use +the `read-kbd-macro' function, which takes a string like `C-c ', +and converts it to the internal key representation of the Emacs you +use. The function is available both on XEmacs and GNU Emacs. + + +File: xemacs-faq.info, Node: Q5.1.2, Next: Q5.1.3, Prev: Q5.1.1, Up: Miscellaneous + +Q5.1.2: Can I generate "fake" keyboard events? +---------------------------------------------- + + I wonder if there is an interactive function that can generate +"fake" keyboard events. This way, I could simply map them inside +XEmacs. + + This seems to work: + + (defun cg--generate-char-event (ch) + "Generate an event, as if ch has been typed" + (dispatch-event (character-to-event ch))) + + ;; Backspace and Delete stuff + (global-set-key [backspace] + (lambda () (interactive) (cg--generate-char-event 127))) + (global-set-key [unknown_keysym_0x4] + (lambda () (interactive) (cg--generate-char-event 4))) + + +File: xemacs-faq.info, Node: Q5.1.3, Next: Q5.1.4, Prev: Q5.1.2, Up: Miscellaneous + +Q5.1.3: Could you explain `read-kbd-macro' in more detail? +---------------------------------------------------------- + + The `read-kbd-macro' function returns the internal Emacs +representation of a human-readable string (which is its argument). +Thus: + + (read-kbd-macro "C-c C-a") + => [(control ?c) (control ?a)] + + (read-kbd-macro "C-c C-. ") + => [(control ?c) (control ?.) up] + + In GNU Emacs the same forms will be evaluated to what GNU Emacs +understands internally--the sequences `"\C-x\C-c"' and `[3 67108910 +up]', respectively. + + The exact "human-readable" syntax is defined in the docstring of +`edmacro-mode'. I'll repeat it here, for completeness. + + Format of keyboard macros during editing: + + Text is divided into "words" separated by whitespace. Except for + the words described below, the characters of each word go directly + as characters of the macro. The whitespace that separates words is + ignored. Whitespace in the macro must be written explicitly, as in + `foo bar '. + + * The special words `RET', `SPC', `TAB', `DEL', `LFD', `ESC', + and `NUL' represent special control characters. The words + must be written in uppercase. + + * A word in angle brackets, e.g., `', `', or + `', represents a function key. (Note that in the standard + configuration, the function key `' and the control key + are synonymous.) You can use angle brackets on the + words , , etc., but they are not required there. + + * Keys can be written by their ASCII code, using a backslash + followed by up to six octal digits. This is the only way to + represent keys with codes above \377. + + * One or more prefixes `M-' (meta), `C-' (control), `S-' + (shift), `A-' (alt), `H-' (hyper), and `s-' (super) may + precede a character or key notation. For function keys, the + prefixes may go inside or outside of the brackets: `C-' + == `'. The prefixes may be written in any order: + `M-C-x' == `C-M-x'. + + Prefixes are not allowed on multi-key words, e.g., `C-abc', + except that the Meta prefix is allowed on a sequence of + digits and optional minus sign: `M--123' == `M-- M-1 M-2 M-3'. + + * The `^' notation for control characters also works: `^M' == + `C-m'. + + * Double angle brackets enclose command names: `<>' + is shorthand for `M-x next-line '. + + * Finally, `REM' or `;;' causes the rest of the line to be + ignored as a comment. + + Any word may be prefixed by a multiplier in the form of a decimal + number and `*': `3*' == ` ', and + `10*foo' == `foofoofoofoofoofoofoofoofoofoo'. + + Multiple text keys can normally be strung together to form a word, + but you may need to add whitespace if the word would look like one + of the above notations: `; ; ;' is a keyboard macro with three + semicolons, but `;;;' is a comment. Likewise, `\ 1 2 3' is four + keys but `\123' is a single key written in octal, and `< right >' + is seven keys but `' is a single function key. When in + doubt, use whitespace. + + +File: xemacs-faq.info, Node: Q5.1.4, Next: Q5.1.5, Prev: Q5.1.3, Up: Miscellaneous + +Q5.1.4: What is the performance hit of `let'? +--------------------------------------------- + + In most cases, not noticeable. Besides, there's no avoiding +`let'--you have to bind your local variables, after all. Some pose a +question whether to nest `let's, or use one `let' per function. I +think because of clarity and maintenance (and possible future +implementation), `let'-s should be used (nested) in a way to provide +the clearest code. + diff --git a/info/xemacs-faq.info-5 b/info/xemacs-faq.info-5 index 5bfab0e..aee6168 100644 --- a/info/xemacs-faq.info-5 +++ b/info/xemacs-faq.info-5 @@ -7,206 +7,6 @@ START-INFO-DIR-ENTRY END-INFO-DIR-ENTRY  -File: xemacs-faq.info, Node: Q5.0.18, Next: Q5.0.19, Prev: Q5.0.17, Up: Miscellaneous - -Q5.0.18: I upgraded to XEmacs 19.14 and gnuserv stopped working. ----------------------------------------------------------------- - - Mark Daku writes: - - It turns out I was using an older version of gnuserv. The - installation didn't put the binary into the public bin directory. - It put it in `lib/xemacs-19.14/hppa1.1-hp-hpux9.05/gnuserv'. - Shouldn't it have been put in `bin/hppa1.1-hp-hpux9.0'? - - -File: xemacs-faq.info, Node: Q5.0.19, Next: Q5.0.20, Prev: Q5.0.18, Up: Miscellaneous - -Q5.0.19: Is there something better than LaTeX mode? ---------------------------------------------------- - - David Kastrup writes: - - The standard TeX modes leave much to be desired, and are somewhat - leniently maintained. Serious TeX users use AUC TeX (*note - Q4.7.1::.). - - -File: xemacs-faq.info, Node: Q5.0.20, Next: Q5.1.1, Prev: Q5.0.19, Up: Miscellaneous - -Q5.0.20: Is there a way to start a new XEmacs if there's no gnuserv running, and otherwise use gnuclient? ---------------------------------------------------------------------------------------------------------- - - Jan Vroonhof writes: - Here is one of the solutions, we have this in a script called - `etc/editclient.sh'. - #!/bin/sh - if gnuclient -batch -eval t >/dev/null 2>&1 - then - exec gnuclient ${1+"$@"} - else - xemacs -unmapped -f gnuserv-start & - until gnuclient -batch -eval t >/dev/null 2>&1 - do - sleep 1 - done - exec gnuclient ${1+"$@"} - fi - - Note that there is a known problem when running XEmacs and - 'gnuclient -nw' on the same TTY. - - -File: xemacs-faq.info, Node: Q5.1.1, Next: Q5.1.2, Prev: Q5.0.20, Up: Miscellaneous - -5.1: Emacs Lisp Programming Techniques -====================================== - -Q5.1.1: What is the difference in key sequences between XEmacs and GNU Emacs? ------------------------------------------------------------------------------ - - Erik Naggum writes; - - Emacs has a legacy of keyboards that produced characters with - modifier bits, and therefore map a variety of input systems into - this scheme even today. XEmacs is instead optimized for X events. - This causes an incompatibility in the way key sequences are - specified, but both Emacs and XEmacs will accept a key sequence as - a vector of lists of modifiers that ends with a key, e.g., to bind - `M-C-a', you would say `[(meta control a)]' in both Emacsen. - XEmacs has an abbreviated form for a single key, just (meta - control a). Emacs has an abbreviated form for the Control and the - Meta modifiers to string-characters (the ASCII characters), as in - `\M-\C-a'. XEmacs users need to be aware that the abbreviated - form works only for one-character key sequences, while Emacs users - need to be aware that the string-character is rather limited. - Specifically, the string-character can accommodate only 256 - different values, 128 of which have the Meta modifier and 128 of - which have not. In each of these blocks, only 32 characters have - the Control modifier. Whereas `[(meta control A)]' differs from - `[(meta control a)]' because the case differs, `\M-\C-a' and - `\M-\C-A' do not. Programmers are advised to use the full common - form, both because it is more readable and less error-prone, and - because it is supported by both Emacsen. - - Another (even safer) way to be sure of the key-sequences is to use -the `read-kbd-macro' function, which takes a string like `C-c ', -and converts it to the internal key representation of the Emacs you -use. The function is available both on XEmacs and GNU Emacs. - - -File: xemacs-faq.info, Node: Q5.1.2, Next: Q5.1.3, Prev: Q5.1.1, Up: Miscellaneous - -Q5.1.2: Can I generate "fake" keyboard events? ----------------------------------------------- - - I wonder if there is an interactive function that can generate -"fake" keyboard events. This way, I could simply map them inside -XEmacs. - - This seems to work: - - (defun cg--generate-char-event (ch) - "Generate an event, as if ch has been typed" - (dispatch-event (character-to-event ch))) - - ;; Backspace and Delete stuff - (global-set-key [backspace] - (lambda () (interactive) (cg--generate-char-event 127))) - (global-set-key [unknown_keysym_0x4] - (lambda () (interactive) (cg--generate-char-event 4))) - - -File: xemacs-faq.info, Node: Q5.1.3, Next: Q5.1.4, Prev: Q5.1.2, Up: Miscellaneous - -Q5.1.3: Could you explain `read-kbd-macro' in more detail? ----------------------------------------------------------- - - The `read-kbd-macro' function returns the internal Emacs -representation of a human-readable string (which is its argument). -Thus: - - (read-kbd-macro "C-c C-a") - => [(control ?c) (control ?a)] - - (read-kbd-macro "C-c C-. ") - => [(control ?c) (control ?.) up] - - In GNU Emacs the same forms will be evaluated to what GNU Emacs -understands internally--the sequences `"\C-x\C-c"' and `[3 67108910 -up]', respectively. - - The exact "human-readable" syntax is defined in the docstring of -`edmacro-mode'. I'll repeat it here, for completeness. - - Format of keyboard macros during editing: - - Text is divided into "words" separated by whitespace. Except for - the words described below, the characters of each word go directly - as characters of the macro. The whitespace that separates words is - ignored. Whitespace in the macro must be written explicitly, as in - `foo bar '. - - * The special words `RET', `SPC', `TAB', `DEL', `LFD', `ESC', - and `NUL' represent special control characters. The words - must be written in uppercase. - - * A word in angle brackets, e.g., `', `', or - `', represents a function key. (Note that in the standard - configuration, the function key `' and the control key - are synonymous.) You can use angle brackets on the - words , , etc., but they are not required there. - - * Keys can be written by their ASCII code, using a backslash - followed by up to six octal digits. This is the only way to - represent keys with codes above \377. - - * One or more prefixes `M-' (meta), `C-' (control), `S-' - (shift), `A-' (alt), `H-' (hyper), and `s-' (super) may - precede a character or key notation. For function keys, the - prefixes may go inside or outside of the brackets: `C-' - == `'. The prefixes may be written in any order: - `M-C-x' == `C-M-x'. - - Prefixes are not allowed on multi-key words, e.g., `C-abc', - except that the Meta prefix is allowed on a sequence of - digits and optional minus sign: `M--123' == `M-- M-1 M-2 M-3'. - - * The `^' notation for control characters also works: `^M' == - `C-m'. - - * Double angle brackets enclose command names: `<>' - is shorthand for `M-x next-line '. - - * Finally, `REM' or `;;' causes the rest of the line to be - ignored as a comment. - - Any word may be prefixed by a multiplier in the form of a decimal - number and `*': `3*' == ` ', and - `10*foo' == `foofoofoofoofoofoofoofoofoofoo'. - - Multiple text keys can normally be strung together to form a word, - but you may need to add whitespace if the word would look like one - of the above notations: `; ; ;' is a keyboard macro with three - semicolons, but `;;;' is a comment. Likewise, `\ 1 2 3' is four - keys but `\123' is a single key written in octal, and `< right >' - is seven keys but `' is a single function key. When in - doubt, use whitespace. - - -File: xemacs-faq.info, Node: Q5.1.4, Next: Q5.1.5, Prev: Q5.1.3, Up: Miscellaneous - -Q5.1.4: What is the performance hit of `let'? ---------------------------------------------- - - In most cases, not noticeable. Besides, there's no avoiding -`let'--you have to bind your local variables, after all. Some pose a -question whether to nest `let's, or use one `let' per function. I -think because of clarity and maintenance (and possible future -implementation), `let'-s should be used (nested) in a way to provide -the clearest code. - - File: xemacs-faq.info, Node: Q5.1.5, Next: Q5.1.6, Prev: Q5.1.4, Up: Miscellaneous Q5.1.5: What is the recommended use of `setq'? diff --git a/info/xemacs.info b/info/xemacs.info index 30b2eb9..025a499 100644 --- a/info/xemacs.info +++ b/info/xemacs.info @@ -32,367 +32,376 @@ translation approved by the author instead of in the original English.  Indirect: xemacs.info-1: 1376 -xemacs.info-2: 47962 -xemacs.info-3: 95922 -xemacs.info-4: 144039 -xemacs.info-5: 192257 -xemacs.info-6: 241624 -xemacs.info-7: 290451 -xemacs.info-8: 340004 -xemacs.info-9: 385299 -xemacs.info-10: 433131 -xemacs.info-11: 482312 -xemacs.info-12: 531469 -xemacs.info-13: 580295 -xemacs.info-14: 628442 -xemacs.info-15: 677205 -xemacs.info-16: 726733 -xemacs.info-17: 775300 -xemacs.info-18: 819223 -xemacs.info-19: 860399 -xemacs.info-20: 908395 -xemacs.info-21: 949115 +xemacs.info-2: 47959 +xemacs.info-3: 95919 +xemacs.info-4: 144458 +xemacs.info-5: 189739 +xemacs.info-6: 237817 +xemacs.info-7: 286851 +xemacs.info-8: 336203 +xemacs.info-9: 383958 +xemacs.info-10: 433277 +xemacs.info-11: 483121 +xemacs.info-12: 532985 +xemacs.info-13: 582101 +xemacs.info-14: 631467 +xemacs.info-15: 681294 +xemacs.info-16: 729790 +xemacs.info-17: 778447 +xemacs.info-18: 828082 +xemacs.info-19: 872453 +xemacs.info-20: 921124 +xemacs.info-21: 963031  Tag Table: (Indirect) Node: Top1376 -Node: License22528 -Node: Distrib35810 -Node: Intro37474 -Node: Frame40345 -Node: Point43617 -Node: Echo Area45584 -Node: Mode Line47962 -Node: XEmacs under X52393 -Node: Keystrokes55571 -Node: Intro to Keystrokes56415 -Node: Representing Keystrokes58518 -Node: Key Sequences59875 -Node: String Key Sequences63215 -Node: Meta Key63598 -Node: Super and Hyper Keys65071 -Node: Character Representation71295 -Node: Commands72315 -Node: Pull-down Menus75164 -Node: File Menu78513 -Node: Edit Menu82335 -Node: Apps Menu84720 -Node: Options Menu85210 -Node: Buffers Menu89190 -Node: Tools Menu89497 -Node: Help Menu89988 -Node: Menu Customization90389 -Node: Entering Emacs94619 -Node: Exiting95922 -Node: Command Switches99014 -Node: Startup Paths108203 -Node: Basic115784 -Node: Blank Lines125267 -Node: Continuation Lines126693 -Node: Position Info128127 -Node: Arguments131261 -Node: Undo134398 -Node: Minibuffer137345 -Node: Minibuffer File139829 -Node: Minibuffer Edit141466 -Node: Completion144039 -Node: Repetition150914 -Node: M-x153706 -Node: Help158800 -Node: Mark168722 -Node: Setting Mark170576 -Node: Using Region173698 -Node: Marking Objects174443 -Node: Mark Ring176284 -Node: Mouse Selection178000 -Node: Additional Mouse Operations180008 -Node: Killing184212 -Node: Yanking189852 -Node: Kill Ring190655 -Node: Appending Kills192257 -Node: Earlier Kills194294 -Node: Using X Selections196907 -Node: X Clipboard Selection198157 -Node: X Selection Commands200334 -Node: X Cut Buffers201420 -Node: Active Regions202779 -Node: Accumulating Text207359 -Node: Rectangles210432 -Node: Registers213951 -Node: RegPos214986 -Node: RegText215889 -Node: RegRect216973 -Node: Display217713 -Node: Scrolling219208 -Node: Horizontal Scrolling223351 -Node: Selective Display224547 -Node: Display Vars225766 -Node: Search228444 -Node: Incremental Search229637 -Node: Non-Incremental Search238564 -Node: Word Search240006 -Node: Regexp Search241624 -Node: Regexps243160 -Node: Search Case253461 -Node: Replace254242 -Node: Unconditional Replace255190 -Node: Regexp Replace256326 -Node: Replacement and Case257261 -Node: Query Replace258241 -Node: Other Repeating Search261474 -Node: Fixit262729 -Node: Kill Errors263309 -Node: Transpose264642 -Node: Fixing Case267047 -Node: Spelling267693 -Node: Files269154 -Node: File Names270462 -Node: Visiting274800 -Node: Saving281490 -Node: Backup286413 -Node: Backup Names287809 -Node: Backup Deletion289292 -Node: Backup Copying290451 -Node: Interlocking292158 -Node: Reverting296286 -Node: Auto Save298199 -Node: Auto Save Files299166 -Node: Auto Save Control301007 -Node: Recover302846 -Node: Version Control304001 -Node: Concepts of VC306039 -Node: Editing with VC307649 -Node: Variables for Check-in/out312905 -Node: Log Entries314804 -Node: Change Logs and VC315984 -Node: Old Versions319252 -Node: VC Status321256 -Node: Renaming and VC322970 -Node: Snapshots323651 -Node: Making Snapshots324152 -Node: Snapshot Caveats325446 -Node: Version Headers327255 -Node: ListDir329954 -Node: Comparing Files332003 -Node: Dired333536 -Node: Dired Enter334207 -Node: Dired Edit335032 -Node: Dired Deletion336779 -Node: Dired Immed340004 -Node: Misc File Ops341280 -Node: Buffers343769 -Node: Select Buffer345929 -Node: List Buffers347726 -Node: Misc Buffer349472 -Node: Kill Buffer351116 -Node: Several Buffers352246 -Node: Windows356112 -Node: Basic Window356823 -Node: Split Window358542 -Node: Other Window360675 -Node: Pop Up Window363105 -Node: Change Window364612 -Node: Mule367520 -Node: Mule Intro368783 -Node: Language Environments369799 -Node: Input Methods371907 -Node: Select Input Method375627 -Node: Coding Systems377782 -Node: Recognize Coding381970 -Node: Specify Coding385299 -Node: Major Modes390230 -Node: Choosing Modes392452 -Node: Indentation394842 -Node: Indentation Commands396937 -Node: Tab Stops399666 -Node: Just Spaces401515 -Node: Text402330 -Node: Text Mode404313 -Node: Nroff Mode406394 -Node: TeX Mode408038 -Node: TeX Editing410290 -Node: TeX Print413725 -Node: Outline Mode416945 -Node: Outline Format418426 -Node: Outline Motion421226 -Node: Outline Visibility422779 -Node: Words425700 -Node: Sentences428647 -Node: Paragraphs430843 -Node: Pages433131 -Node: Filling435731 -Node: Auto Fill436302 -Node: Fill Commands438450 -Node: Fill Prefix440616 -Node: Case442804 -Node: Programs444832 -Node: Program Modes447390 -Node: Lists449622 -Node: Defuns455462 -Node: Grinding458115 -Node: Basic Indent458743 -Node: Multi-line Indent460764 -Node: Lisp Indent462380 -Node: C Indent465830 -Node: Matching471070 -Node: Comments472592 -Node: Balanced Editing479044 -Node: Lisp Completion480058 -Node: Documentation481073 -Node: Change Log482312 -Node: Tags484890 -Node: Tag Syntax486539 -Node: Create Tags Table490484 -Node: Etags Regexps494545 -Node: Select Tags Table499203 -Node: Find Tag502941 -Node: Tags Search505905 -Node: List Tags509362 -Node: Fortran510391 -Node: Fortran Motion511467 -Node: Fortran Indent512287 -Node: ForIndent Commands512972 -Node: ForIndent Num514117 -Node: ForIndent Conv515391 -Node: ForIndent Vars516167 -Node: Fortran Comments517335 -Node: Fortran Columns520934 -Node: Fortran Abbrev522357 -Node: Asm Mode523267 -Node: Running523819 -Node: Compilation524789 -Node: Lisp Modes529640 -Node: Lisp Libraries530914 -Node: Loading531469 -Node: Compiling Libraries535929 -Node: Mocklisp538820 -Node: Lisp Eval539497 -Node: Lisp Debug543137 -Node: Lisp Interaction548563 -Node: External Lisp549918 -Node: Packages551993 -Node: Package Terminology552734 -Node: Using Packages554092 -Node: Building Packages562881 -Node: Abbrevs565403 -Node: Defining Abbrevs567603 -Node: Expanding Abbrevs570050 -Node: Editing Abbrevs572752 -Node: Saving Abbrevs574620 -Node: Dynamic Abbrevs576560 -Node: Picture577862 -Node: Basic Picture580295 -Node: Insert in Picture582582 -Node: Tabs in Picture584004 -Node: Rectangles in Picture585525 -Node: Sending Mail587434 -Node: Mail Format589145 -Node: Mail Headers590495 -Node: Mail Mode596905 -Node: Reading Mail600518 -Node: Calendar/Diary602093 -Node: Calendar Motion603765 -Node: Calendar Unit Motion604648 -Node: Move to Beginning or End606971 -Node: Specified Dates608104 -Node: Scroll Calendar608993 -Node: Mark and Region610784 -Node: General Calendar612691 -Node: LaTeX Calendar614299 -Node: Holidays616313 -Node: Sunrise/Sunset619416 -Node: Lunar Phases622459 -Node: Other Calendars623844 -Node: Calendar Systems625331 -Node: To Other Calendar628442 -Node: From Other Calendar630433 -Node: Mayan Calendar632739 -Node: Diary635935 -Node: Diary Commands637685 -Node: Format of Diary File640994 -Node: Date Formats643864 -Node: Adding to Diary646438 -Node: Special Diary Entries648069 -Node: Calendar Customization653409 -Node: Calendar Customizing654271 -Node: Holiday Customizing657491 -Node: Date Display Format663959 -Node: Time Display Format664917 -Node: Daylight Savings666055 -Node: Diary Customizing669243 -Node: Hebrew/Islamic Entries673865 -Node: Fancy Diary Display677205 -Node: Included Diary Files679102 -Node: Sexp Diary Entries680083 -Node: Appt Customizing685173 -Node: Sorting686219 -Node: Shell691025 -Node: Single Shell692318 -Node: Interactive Shell693917 -Node: Shell Mode697682 -Node: Terminal emulator700173 -Node: Term Mode702483 -Node: Paging in Term703397 -Node: Narrowing704195 -Node: Hardcopy706145 -Node: Recursive Edit707117 -Node: Dissociated Press710104 -Node: CONX712667 -Node: Amusements713691 -Node: Emulation714171 -Node: Customization716015 -Node: Minor Modes717739 -Node: Variables719371 -Node: Examining721329 -Node: Easy Customization722790 -Node: Customization Groups723804 -Node: Changing an Option726733 -Node: Face Customization732989 -Node: Specific Customization734754 -Node: Edit Options737361 -Node: Locals738945 -Node: File Variables742124 -Node: Keyboard Macros746651 -Node: Basic Kbd Macro748822 -Node: Save Kbd Macro750754 -Node: Kbd Macro Query752426 -Node: Key Bindings754368 -Node: Keymaps755242 -Node: Rebinding759092 -Node: Interactive Rebinding759788 -Node: Programmatic Rebinding761980 -Node: Key Bindings Using Strings764787 -Node: Disabling766393 -Node: Syntax768165 -Node: Syntax Entry769046 -Node: Syntax Change773130 -Node: Init File775300 -Node: Init Syntax776808 -Node: Init Examples779161 -Node: Terminal Init783352 -Node: Audible Bell785062 -Node: Faces788493 -Node: X Resources793330 -Node: Geometry Resources794951 -Node: Iconic Resources797399 -Node: Resource List797871 -Node: Face Resources804378 -Node: Widgets808055 -Node: Menubar Resources808994 -Node: Quitting809927 -Node: Lossage812906 -Node: Stuck Recursive813549 -Node: Screen Garbled814255 -Node: Text Garbled815389 -Node: Unasked-for Search816028 -Node: Emergency Escape816813 -Node: Total Frustration818592 -Node: Bugs819223 -Node: Glossary828758 -Node: Manifesto860399 -Node: Key Index883875 -Node: Command Index908395 -Node: Variable Index949115 -Node: Concept Index965066 +Node: License22525 +Node: Distrib35807 +Node: Intro37471 +Node: Frame40342 +Node: Point43614 +Node: Echo Area45581 +Node: Mode Line47959 +Node: XEmacs under X52390 +Node: Keystrokes55568 +Node: Intro to Keystrokes56412 +Node: Representing Keystrokes58515 +Node: Key Sequences59872 +Node: String Key Sequences63212 +Node: Meta Key63595 +Node: Super and Hyper Keys65068 +Node: Character Representation71292 +Node: Commands72312 +Node: Pull-down Menus75161 +Node: File Menu78510 +Node: Edit Menu82332 +Node: Apps Menu84717 +Node: Options Menu85207 +Node: Buffers Menu89187 +Node: Tools Menu89494 +Node: Help Menu89985 +Node: Menu Customization90386 +Node: Entering Emacs94616 +Node: Exiting95919 +Node: Command Switches99011 +Node: Startup Paths108200 +Node: Basic115781 +Node: Blank Lines125264 +Node: Continuation Lines126690 +Node: Position Info128124 +Node: Arguments131258 +Node: Undo134395 +Node: Minibuffer137342 +Node: Minibuffer File139952 +Node: Minibuffer Edit141758 +Node: Completion144458 +Node: Completion Example146389 +Node: Completion Commands147483 +Node: Strict Completion150139 +Node: Completion Options151921 +Node: Minibuffer History153215 +Node: Repetition156400 +Node: M-x159233 +Node: Help164327 +Node: Mark174249 +Node: Setting Mark176103 +Node: Using Region179225 +Node: Marking Objects179970 +Node: Mark Ring181811 +Node: Mouse Selection183527 +Node: Additional Mouse Operations185535 +Node: Killing189739 +Node: Yanking195379 +Node: Kill Ring196182 +Node: Appending Kills197784 +Node: Earlier Kills199821 +Node: Using X Selections202434 +Node: X Clipboard Selection203684 +Node: X Selection Commands205861 +Node: X Cut Buffers206947 +Node: Active Regions208306 +Node: Accumulating Text212886 +Node: Rectangles215959 +Node: Registers219478 +Node: RegPos220933 +Node: RegText222089 +Node: RegRect223195 +Node: RegConfig224074 +Node: RegNumbers225014 +Node: RegFiles225733 +Node: Bookmarks226391 +Node: Display229764 +Node: Scrolling231259 +Node: Horizontal Scrolling235402 +Node: Selective Display236598 +Node: Display Vars237817 +Node: Search240495 +Node: Incremental Search241688 +Node: Non-Incremental Search250615 +Node: Word Search252057 +Node: Regexp Search253675 +Node: Regexps255211 +Node: Search Case265512 +Node: Replace266293 +Node: Unconditional Replace267241 +Node: Regexp Replace268377 +Node: Replacement and Case269312 +Node: Query Replace270292 +Node: Other Repeating Search273525 +Node: Fixit274780 +Node: Kill Errors275360 +Node: Transpose276693 +Node: Fixing Case279098 +Node: Spelling279744 +Node: Files281205 +Node: File Names282513 +Node: Visiting286851 +Node: Saving293541 +Node: Backup298464 +Node: Backup Names299860 +Node: Backup Deletion301343 +Node: Backup Copying302502 +Node: Interlocking304209 +Node: Reverting308337 +Node: Auto Save310250 +Node: Auto Save Files311217 +Node: Auto Save Control313058 +Node: Recover314897 +Node: Version Control316052 +Node: Concepts of VC318090 +Node: Editing with VC319700 +Node: Variables for Check-in/out324956 +Node: Log Entries326855 +Node: Change Logs and VC328035 +Node: Old Versions331303 +Node: VC Status333307 +Node: Renaming and VC335021 +Node: Snapshots335702 +Node: Making Snapshots336203 +Node: Snapshot Caveats337497 +Node: Version Headers339306 +Node: ListDir342005 +Node: Comparing Files344054 +Node: Dired345587 +Node: Dired Enter346258 +Node: Dired Edit347083 +Node: Dired Deletion348830 +Node: Dired Immed352055 +Node: Misc File Ops353331 +Node: Buffers355820 +Node: Select Buffer357980 +Node: List Buffers359777 +Node: Misc Buffer361523 +Node: Kill Buffer363167 +Node: Several Buffers364297 +Node: Windows368163 +Node: Basic Window368874 +Node: Split Window370593 +Node: Other Window372726 +Node: Pop Up Window375156 +Node: Change Window376663 +Node: Mule379571 +Node: Mule Intro380834 +Node: Language Environments381850 +Node: Input Methods383958 +Node: Select Input Method387678 +Node: Coding Systems389833 +Node: Recognize Coding394021 +Node: Specify Coding397350 +Node: Major Modes402281 +Node: Choosing Modes404503 +Node: Indentation406893 +Node: Indentation Commands408988 +Node: Tab Stops411717 +Node: Just Spaces413566 +Node: Text414381 +Node: Text Mode416364 +Node: Nroff Mode418445 +Node: TeX Mode420089 +Node: TeX Editing422341 +Node: TeX Print425776 +Node: Outline Mode428996 +Node: Outline Format430477 +Node: Outline Motion433277 +Node: Outline Visibility434830 +Node: Words437751 +Node: Sentences440698 +Node: Paragraphs442894 +Node: Pages445182 +Node: Filling447782 +Node: Auto Fill448353 +Node: Fill Commands450501 +Node: Fill Prefix452667 +Node: Case454855 +Node: Programs456883 +Node: Program Modes459441 +Node: Lists461673 +Node: Defuns467513 +Node: Grinding470166 +Node: Basic Indent470794 +Node: Multi-line Indent472815 +Node: Lisp Indent474431 +Node: C Indent477881 +Node: Matching483121 +Node: Comments484643 +Node: Balanced Editing491095 +Node: Lisp Completion492109 +Node: Documentation493124 +Node: Change Log494363 +Node: Tags496941 +Node: Tag Syntax498590 +Node: Create Tags Table502535 +Node: Etags Regexps506596 +Node: Select Tags Table511254 +Node: Find Tag514992 +Node: Tags Search517956 +Node: List Tags521413 +Node: Fortran522442 +Node: Fortran Motion523518 +Node: Fortran Indent524338 +Node: ForIndent Commands525023 +Node: ForIndent Num526168 +Node: ForIndent Conv527442 +Node: ForIndent Vars528218 +Node: Fortran Comments529386 +Node: Fortran Columns532985 +Node: Fortran Abbrev534408 +Node: Asm Mode535318 +Node: Running535870 +Node: Compilation536840 +Node: Lisp Modes541691 +Node: Lisp Libraries542965 +Node: Loading543520 +Node: Compiling Libraries547980 +Node: Mocklisp550871 +Node: Lisp Eval551548 +Node: Lisp Debug555188 +Node: Lisp Interaction560614 +Node: External Lisp561969 +Node: Packages564044 +Node: Package Terminology564785 +Node: Using Packages566143 +Node: Building Packages574932 +Node: Abbrevs577454 +Node: Defining Abbrevs579654 +Node: Expanding Abbrevs582101 +Node: Editing Abbrevs584803 +Node: Saving Abbrevs586671 +Node: Dynamic Abbrevs588611 +Node: Picture589913 +Node: Basic Picture592346 +Node: Insert in Picture594633 +Node: Tabs in Picture596055 +Node: Rectangles in Picture597576 +Node: Sending Mail599485 +Node: Mail Format601196 +Node: Mail Headers602546 +Node: Mail Mode608956 +Node: Reading Mail612569 +Node: Calendar/Diary614144 +Node: Calendar Motion615816 +Node: Calendar Unit Motion616699 +Node: Move to Beginning or End619022 +Node: Specified Dates620155 +Node: Scroll Calendar621044 +Node: Mark and Region622835 +Node: General Calendar624742 +Node: LaTeX Calendar626350 +Node: Holidays628364 +Node: Sunrise/Sunset631467 +Node: Lunar Phases634510 +Node: Other Calendars635895 +Node: Calendar Systems637382 +Node: To Other Calendar640493 +Node: From Other Calendar642484 +Node: Mayan Calendar644790 +Node: Diary647986 +Node: Diary Commands649736 +Node: Format of Diary File653045 +Node: Date Formats655915 +Node: Adding to Diary658489 +Node: Special Diary Entries660120 +Node: Calendar Customization665460 +Node: Calendar Customizing666322 +Node: Holiday Customizing669542 +Node: Date Display Format676010 +Node: Time Display Format676968 +Node: Daylight Savings678106 +Node: Diary Customizing681294 +Node: Hebrew/Islamic Entries685916 +Node: Fancy Diary Display689256 +Node: Included Diary Files691153 +Node: Sexp Diary Entries692134 +Node: Appt Customizing697224 +Node: Sorting698270 +Node: Shell703076 +Node: Single Shell704369 +Node: Interactive Shell705968 +Node: Shell Mode709733 +Node: Terminal emulator712224 +Node: Term Mode714534 +Node: Paging in Term715448 +Node: Narrowing716246 +Node: Hardcopy718196 +Node: Recursive Edit719168 +Node: Dissociated Press722155 +Node: CONX724718 +Node: Amusements725742 +Node: Emulation726222 +Node: Customization728066 +Node: Minor Modes729790 +Node: Variables731422 +Node: Examining733380 +Node: Easy Customization734841 +Node: Customization Groups735855 +Node: Changing an Option738784 +Node: Face Customization745040 +Node: Specific Customization746805 +Node: Edit Options749412 +Node: Locals750996 +Node: File Variables754175 +Node: Keyboard Macros758702 +Node: Basic Kbd Macro760873 +Node: Save Kbd Macro762805 +Node: Kbd Macro Query764477 +Node: Key Bindings766419 +Node: Keymaps767293 +Node: Rebinding771143 +Node: Interactive Rebinding771842 +Node: Programmatic Rebinding774034 +Node: Key Bindings Using Strings776841 +Node: Disabling778447 +Node: Syntax780219 +Node: Syntax Entry781100 +Node: Syntax Change785184 +Node: Init File787354 +Node: Init Syntax788862 +Node: Init Examples791215 +Node: Terminal Init795406 +Node: Audible Bell797116 +Node: Faces800547 +Node: X Resources805384 +Node: Geometry Resources807005 +Node: Iconic Resources809453 +Node: Resource List809925 +Node: Face Resources816432 +Node: Widgets820109 +Node: Menubar Resources821048 +Node: Quitting821981 +Node: Lossage824960 +Node: Stuck Recursive825603 +Node: Screen Garbled826309 +Node: Text Garbled827443 +Node: Unasked-for Search828082 +Node: Emergency Escape828867 +Node: Total Frustration830646 +Node: Bugs831277 +Node: Glossary840812 +Node: Manifesto872453 +Node: Key Index895929 +Node: Command Index921124 +Node: Variable Index963031 +Node: Concept Index979168  End Tag Table diff --git a/info/xemacs.info-1 b/info/xemacs.info-1 index e202e16..7d341f0 100644 --- a/info/xemacs.info-1 +++ b/info/xemacs.info-1 @@ -32,7 +32,8 @@ translation approved by the author instead of in the original English.  File: xemacs.info, Node: Top, Next: License, Up: (dir) - The XEmacs Editor ***************** +The XEmacs Editor +***************** XEmacs is the extensible, customizable, self-documenting real-time display editor. This Info file describes how to edit with Emacs and diff --git a/info/xemacs.info-10 b/info/xemacs.info-10 index 9d7ffc3..9545802 100644 --- a/info/xemacs.info-10 +++ b/info/xemacs.info-10 @@ -30,6 +30,307 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Outline Motion, Next: Outline Visibility, Prev: Outline Format, Up: Outline Mode + +Outline Motion Commands +....................... + + Some special commands in Outline mode move backward and forward to +heading lines. + +`C-c C-n' + Move point to the next visible heading line + (`outline-next-visible-heading'). + +`C-c C-p' + Move point to the previous visible heading line + (`outline-previous-visible-heading'). + +`C-c C-f' + Move point to the next visible heading line at the same level as + the one point is on (`outline-forward-same-level'). + +`C-c C-b' + Move point to the previous visible heading line at the same level + (`outline-backward-same-level'). + +`C-c C-u' + Move point up to a lower-level (more inclusive) visible heading + line (`outline-up-heading'). + + `C-c C-n' (`next-visible-heading') moves down to the next heading +line. `C-c C-p' (`previous-visible-heading') moves similarly backward. +Both accept numeric arguments as repeat counts. The names emphasize +that invisible headings are skipped, but this is not really a special +feature. All editing commands that look for lines ignore the invisible +lines automatically. + + More advanced motion commands understand the levels of headings. +The commands `C-c C-f' (`outline-forward-same-level') and `C-c C-b' +(`outline-backward-same-level') move from one heading line to another +visible heading at the same depth in the outline. `C-c C-u' +(`outline-up-heading') moves backward to another heading that is less +deeply nested. + + +File: xemacs.info, Node: Outline Visibility, Prev: Outline Motion, Up: Outline Mode + +Outline Visibility Commands +........................... + + The other special commands of outline mode are used to make lines +visible or invisible. Their names all start with `hide' or `show'. +Most of them exist as pairs of opposites. They are not undoable; +instead, you can undo right past them. Making lines visible or +invisible is simply not recorded by the undo mechanism. + +`M-x hide-body' + Make all body lines in the buffer invisible. + +`M-x show-all' + Make all lines in the buffer visible. + +`C-c C-d' + Make everything under this heading invisible, not including this + heading itself (`hide-subtree'). + +`C-c C-s' + Make everything under this heading visible, including body, + subheadings, and their bodies (`show-subtree'). + +`M-x hide-leaves' + Make the body of this heading line, and of all its subheadings, + invisible. + +`M-x show-branches' + Make all subheadings of this heading line, at all levels, visible. + +`C-c C-i' + Make immediate subheadings (one level down) of this heading line + visible (`show-children'). + +`M-x hide-entry' + Make this heading line's body invisible. + +`M-x show-entry' + Make this heading line's body visible. + + Two commands that are exact opposites are `M-x hide-entry' and `M-x +show-entry'. They are used with point on a heading line, and apply +only to the body lines of that heading. The subtopics and their bodies +are not affected. + + Two more powerful opposites are `C-c C-h' (`hide-subtree') and `C-c +C-s' (`show-subtree'). Both should be used when point is on a heading +line, and both apply to all the lines of that heading's "subtree": its +body, all its subheadings, both direct and indirect, and all of their +bodies. In other words, the subtree contains everything following this +heading line, up to and not including the next heading of the same or +higher rank. + + Intermediate between a visible subtree and an invisible one is having +all the subheadings visible but none of the body. There are two +commands for doing this, one that hides the bodies and one that makes +the subheadings visible. They are `M-x hide-leaves' and `M-x +show-branches'. + + A little weaker than `show-branches' is `C-c C-i' (`show-children'). +It makes just the direct subheadings visible--those one level down. +Deeper subheadings remain invisible. + + Two commands have a blanket effect on the whole file. `M-x +hide-body' makes all body lines invisible, so that you see just the +outline structure. `M-x show-all' makes all lines visible. You can +think of these commands as a pair of opposites even though `M-x +show-all' applies to more than just body lines. + + You can turn off the use of ellipses at the ends of visible lines by +setting `selective-display-ellipses' to `nil'. The result is no +visible indication of the presence of invisible lines. + + +File: xemacs.info, Node: Words, Next: Sentences, Prev: Text Mode, Up: Text + +Words +===== + + Emacs has commands for moving over or operating on words. By +convention, the keys for them are all `Meta-' characters. + +`M-f' + Move forward over a word (`forward-word'). + +`M-b' + Move backward over a word (`backward-word'). + +`M-d' + Kill up to the end of a word (`kill-word'). + +`M-' + Kill back to the beginning of a word (`backward-kill-word'). + +`M-@' + Mark the end of the next word (`mark-word'). + +`M-t' + Transpose two words; drag a word forward or backward across other + words (`transpose-words'). + + Notice how these keys form a series that parallels the +character-based `C-f', `C-b', `C-d', `C-t' and . `M-@' is related +to `C-@', which is an alias for `C-'. + + The commands `Meta-f' (`forward-word') and `Meta-b' +(`backward-word') move forward and backward over words. They are +analogous to `Control-f' and `Control-b', which move over single +characters. Like their `Control-' analogues, `Meta-f' and `Meta-b' +move several words if given an argument. `Meta-f' with a negative +argument moves backward, and `Meta-b' with a negative argument moves +forward. Forward motion stops after the last letter of the word, while +backward motion stops before the first letter. + + `Meta-d' (`kill-word') kills the word after point. To be precise, +it kills everything from point to the place `Meta-f' would move to. +Thus, if point is in the middle of a word, `Meta-d' kills just the part +after point. If some punctuation comes between point and the next +word, it is killed along with the word. (To kill only the next word +but not the punctuation before it, simply type `Meta-f' to get to the +end and kill the word backwards with `Meta-'.) `Meta-d' takes +arguments just like `Meta-f'. + + `Meta-' (`backward-kill-word') kills the word before point. It +kills everything from point back to where `Meta-b' would move to. If +point is after the space in `FOO, BAR', then `FOO, ' is killed. To +kill just `FOO', type `Meta-b Meta-d' instead of `Meta-'. + + `Meta-t' (`transpose-words') exchanges the word before or containing +point with the following word. The delimiter characters between the +words do not move. For example, transposing `FOO, BAR' results in +`BAR, FOO' rather than `BAR FOO,'. *Note Transpose::, for more on +transposition and on arguments to transposition commands. + + To operate on the next N words with an operation which applies +between point and mark, you can either set the mark at point and then +move over the words, or you can use the command `Meta-@' (`mark-word') +which does not move point but sets the mark where `Meta-f' would move +to. It can be given arguments just like `Meta-f'. + + The word commands' understanding of syntax is completely controlled +by the syntax table. For example, any character can be declared to be +a word delimiter. *Note Syntax::. + + +File: xemacs.info, Node: Sentences, Next: Paragraphs, Prev: Words, Up: Text + +Sentences +========= + + The Emacs commands for manipulating sentences and paragraphs are +mostly on `Meta-' keys, and therefore are like the word-handling +commands. + +`M-a' + Move back to the beginning of the sentence (`backward-sentence'). + +`M-e' + Move forward to the end of the sentence (`forward-sentence'). + +`M-k' + Kill forward to the end of the sentence (`kill-sentence'). + +`C-x ' + Kill back to the beginning of the sentence + (`backward-kill-sentence'). + + The commands `Meta-a' and `Meta-e' (`backward-sentence' and +`forward-sentence') move to the beginning and end of the current +sentence, respectively. They resemble `Control-a' and `Control-e', +which move to the beginning and end of a line. Unlike their +counterparts, `Meta-a' and `Meta-e' move over successive sentences if +repeated or given numeric arguments. Emacs assumes the typist's +convention is followed, and thus considers a sentence to end wherever +there is a `.', `?', or `!' followed by the end of a line or two +spaces, with any number of `)', `]', `'', or `"' characters allowed in +between. A sentence also begins or ends wherever a paragraph begins or +ends. + + Neither `M-a' nor `M-e' moves past the newline or spaces beyond the +sentence edge at which it is stopping. + + `M-a' and `M-e' have a corresponding kill command, just like `C-a' +and `C-e' have `C-k'. The command is `M-k' (`kill-sentence') which +kills from point to the end of the sentence. With minus one as an +argument it kills back to the beginning of the sentence. Larger +arguments serve as repeat counts. + + There is a special command, `C-x ' (`backward-kill-sentence'), +for killing back to the beginning of a sentence, which is useful when +you change your mind in the middle of composing text. + + The variable `sentence-end' controls recognition of the end of a +sentence. It is a regexp that matches the last few characters of a +sentence, together with the whitespace following the sentence. Its +normal value is: + + "[.?!][]\"')]*\\($\\|\t\\| \\)[ \t\n]*" + +This example is explained in the section on regexps. *Note Regexps::. + + +File: xemacs.info, Node: Paragraphs, Next: Pages, Prev: Sentences, Up: Text + +Paragraphs +========== + + The Emacs commands for manipulating paragraphs are also `Meta-' keys. + +`M-[' + Move back to previous paragraph beginning + (`backward-paragraph'). + +`M-]' + Move forward to next paragraph end (`forward-paragraph'). + +`M-h' + Put point and mark around this or next paragraph + (`mark-paragraph'). + + `Meta-[' moves to the beginning of the current or previous paragraph, +while `Meta-]' moves to the end of the current or next paragraph. +Blank lines and text formatter command lines separate paragraphs and are +not part of any paragraph. An indented line starts a new paragraph. + + In major modes for programs (as opposed to Text mode), paragraphs +begin and end only at blank lines. As a result, the paragraph commands +continue to be useful even though there are no paragraphs per se. + + When there is a fill prefix, paragraphs are delimited by all lines +which don't start with the fill prefix. *Note Filling::. + + To operate on a paragraph, you can use the command `Meta-h' +(`mark-paragraph') to set the region around it. This command puts +point at the beginning and mark at the end of the paragraph point was +in. If point is between paragraphs (in a run of blank lines or at a +boundary), the paragraph following point is surrounded by point and +mark. If there are blank lines preceding the first line of the +paragraph, one of the blank lines is included in the region. Thus, for +example, `M-h C-w' kills the paragraph around or after point. + + The precise definition of a paragraph boundary is controlled by the +variables `paragraph-separate' and `paragraph-start'. The value of +`paragraph-start' is a regexp that matches any line that either starts +or separates paragraphs. The value of `paragraph-separate' is another +regexp that matches only lines that separate paragraphs without being +part of any paragraph. Lines that start a new paragraph and are +contained in it must match both regexps. For example, normally +`paragraph-start' is `"^[ \t\n\f]"' and `paragraph-separate' is `"^[ +\t\f]*$"'. + + Normally it is desirable for page boundaries to separate paragraphs. +The default values of these variables recognize the usual separator for +pages. + + File: xemacs.info, Node: Pages, Next: Filling, Prev: Paragraphs, Up: Text Pages @@ -933,242 +1234,3 @@ variables just discussed and putting open braces on separate lines produces clear and readable files. For an example, look at any of the C source files of XEmacs. - -File: xemacs.info, Node: Matching, Next: Comments, Prev: Grinding, Up: Programs - -Automatic Display of Matching Parentheses -========================================= - - The Emacs parenthesis-matching feature shows you automatically how -parentheses match in the text. Whenever a self-inserting character that -is a closing delimiter is typed, the cursor moves momentarily to the -location of the matching opening delimiter, provided that is visible on -the screen. If it is not on the screen, some text starting with that -opening delimiter is displayed in the echo area. Either way, you see -the grouping you are closing off. - - In Lisp, automatic matching applies only to parentheses. In C, it -also applies to braces and brackets. Emacs knows which characters to -regard as matching delimiters based on the syntax table set by the major -mode. *Note Syntax::. - - If the opening delimiter and closing delimiter are mismatched--as in -`[x)'--the echo area displays a warning message. The correct matches -are specified in the syntax table. - - Two variables control parenthesis matching displays. -`blink-matching-paren' turns the feature on or off. The default is `t' -(match display is on); `nil' turns it off. -`blink-matching-paren-distance' specifies how many characters back -Emacs searches to find a matching opening delimiter. If the match is -not found in the specified region, scanning stops, and nothing is -displayed. This prevents wasting lots of time scanning when there is no -match. The default is 4000. - - -File: xemacs.info, Node: Comments, Next: Balanced Editing, Prev: Matching, Up: Programs - -Manipulating Comments -===================== - - The comment commands insert, kill and align comments. - -`M-;' - Insert or align comment (`indent-for-comment'). - -`C-x ;' - Set comment column (`set-comment-column'). - -`C-u - C-x ;' - Kill comment on current line (`kill-comment'). - -`M-' - Like followed by inserting and aligning a comment - (`indent-new-comment-line'). - - The command that creates a comment is `Meta-;' -(`indent-for-comment'). If there is no comment already on the line, a -new comment is created and aligned at a specific column called the -"comment column". Emacs creates the comment by inserting the string at -the value of `comment-start'; see below. Point is left after that -string. If the text of the line extends past the comment column, -indentation is done to a suitable boundary (usually, at least one space -is inserted). If the major mode has specified a string to terminate -comments, that string is inserted after point, to keep the syntax valid. - - You can also use `Meta-;' to align an existing comment. If a line -already contains the string that starts comments, `M-;' just moves -point after it and re-indents it to the conventional place. Exception: -comments starting in column 0 are not moved. - - Some major modes have special rules for indenting certain kinds of -comments in certain contexts. For example, in Lisp code, comments which -start with two semicolons are indented as if they were lines of code, -instead of at the comment column. Comments which start with three -semicolons are supposed to start at the left margin. Emacs understands -these conventions by indenting a double-semicolon comment using -and by not changing the indentation of a triple-semicolon comment at -all. - - ;; This function is just an example. - ;;; Here either two or three semicolons are appropriate. - (defun foo (x) - ;;; And now, the first part of the function: - ;; The following line adds one. - (1+ x)) ; This line adds one. - - In C code, a comment preceded on its line by nothing but whitespace -is indented like a line of code. - - Even when an existing comment is properly aligned, `M-;' is still -useful for moving directly to the start of the comment. - - `C-u - C-x ;' (`kill-comment') kills the comment on the current -line, if there is one. The indentation before the start of the comment -is killed as well. If there does not appear to be a comment in the -line, nothing happens. To reinsert the comment on another line, move -to the end of that line, type first `C-y', and then `M-;' to realign -the comment. Note that `C-u - C-x ;' is not a distinct key; it is `C-x -;' (`set-comment-column') with a negative argument. That command is -programmed to call `kill-comment' when called with a negative argument. -However, `kill-comment' is a valid command which you could bind -directly to a key if you wanted to. - -Multiple Lines of Comments --------------------------- - - If you are typing a comment and want to continue it on another line, -use the command `Meta-' (`indent-new-comment-line'), which -terminates the comment you are typing, creates a new blank line -afterward, and begins a new comment indented under the old one. If -Auto Fill mode is on and you go past the fill column while typing, the -comment is continued in just this fashion. If point is not at the end -of the line when you type `M-', the text on the rest of the line -becomes part of the new comment line. - -Options Controlling Comments ----------------------------- - - The comment column is stored in the variable `comment-column'. You -can explicitly set it to a number. Alternatively, the command `C-x ;' -(`set-comment-column') sets the comment column to the column point is -at. `C-u C-x ;' sets the comment column to match the last comment -before point in the buffer, and then calls `Meta-;' to align the -current line's comment under the previous one. Note that `C-u - C-x ;' -runs the function `kill-comment' as described above. - - `comment-column' is a per-buffer variable; altering the variable -affects only the current buffer. You can also change the default value. -*Note Locals::. Many major modes initialize this variable for the -current buffer. - - The comment commands recognize comments based on the regular -expression that is the value of the variable `comment-start-skip'. -This regexp should not match the null string. It may match more than -the comment starting delimiter in the strictest sense of the word; for -example, in C mode the value of the variable is `"/\\*+ *"', which -matches extra stars and spaces after the `/*' itself. (Note that `\\' -is needed in Lisp syntax to include a `\' in the string, which is needed -to deny the first star its special meaning in regexp syntax. *Note -Regexps::.) - - When a comment command makes a new comment, it inserts the value of -`comment-start' to begin it. The value of `comment-end' is inserted -after point and will follow the text you will insert into the comment. -In C mode, `comment-start' has the value `"/* "' and `comment-end' has -the value `" */"'. - - `comment-multi-line' controls how `M-' -(`indent-new-comment-line') behaves when used inside a comment. If -`comment-multi-line' is `nil', as it normally is, then `M-' -terminates the comment on the starting line and starts a new comment on -the new following line. If `comment-multi-line' is not `nil', then -`M-' sets up the new following line as part of the same comment -that was found on the starting line. This is done by not inserting a -terminator on the old line and not inserting a starter on the new line. -In languages where multi-line comments are legal, the value you choose -for this variable is a matter of taste. - - The variable `comment-indent-hook' should contain a function that is -called to compute the indentation for a newly inserted comment or for -aligning an existing comment. Major modes set this variable -differently. The function is called with no arguments, but with point -at the beginning of the comment, or at the end of a line if a new -comment is to be inserted. The function should return the column in -which the comment ought to start. For example, in Lisp mode, the -indent hook function bases its decision on the number of semicolons -that begin an existing comment and on the code in the preceding lines. - - -File: xemacs.info, Node: Balanced Editing, Next: Lisp Completion, Prev: Comments, Up: Programs - -Editing Without Unbalanced Parentheses -====================================== - -`M-(' - Put parentheses around next sexp(s) (`insert-parentheses'). - -`M-)' - Move past next close parenthesis and re-indent - (`move-over-close-and-reindent'). - - The commands `M-(' (`insert-parentheses') and `M-)' -(`move-over-close-and-reindent') are designed to facilitate a style of -editing which keeps parentheses balanced at all times. `M-(' inserts a -pair of parentheses, either together as in `()', or, if given an -argument, around the next several sexps, and leaves point after the open -parenthesis. Instead of typing `( F O O )', you can type `M-( F O O', -which has the same effect except for leaving the cursor before the -close parenthesis. You can then type `M-)', which moves past the close -parenthesis, deletes any indentation preceding it (in this example -there is none), and indents with after it. - - -File: xemacs.info, Node: Lisp Completion, Next: Documentation, Prev: Balanced Editing, Up: Programs - -Completion for Lisp Symbols -=========================== - - Completion usually happens in the minibuffer. An exception is -completion for Lisp symbol names, which is available in all buffers. - - The command `M-' (`lisp-complete-symbol') takes the partial -Lisp symbol before point to be an abbreviation, and compares it against -all non-trivial Lisp symbols currently known to Emacs. Any additional -characters that they all have in common are inserted at point. -Non-trivial symbols are those that have function definitions, values, or -properties. - - If there is an open-parenthesis immediately before the beginning of -the partial symbol, only symbols with function definitions are -considered as completions. - - If the partial name in the buffer has more than one possible -completion and they have no additional characters in common, a list of -all possible completions is displayed in another window. - - -File: xemacs.info, Node: Documentation, Next: Change Log, Prev: Lisp Completion, Up: Programs - -Documentation Commands -====================== - - As you edit Lisp code to be run in Emacs, you can use the commands -`C-h f' (`describe-function') and `C-h v' (`describe-variable') to -print documentation of functions and variables you want to call. These -commands use the minibuffer to read the name of a function or variable -to document, and display the documentation in a window. - - For extra convenience, these commands provide default arguments -based on the code in the neighborhood of point. `C-h f' sets the -default to the function called in the innermost list containing point. -`C-h v' uses the symbol name around or adjacent to point as its default. - - The `M-x manual-entry' command gives you access to documentation on -Unix commands, system calls, and libraries. The command reads a topic -as an argument, and displays the Unix manual page for that topic. -`manual-entry' always searches all 8 sections of the manual and -concatenates all the entries it finds. For example, the topic -`termcap' finds the description of the termcap library from section 3, -followed by the description of the termcap data base from section 5. - diff --git a/info/xemacs.info-11 b/info/xemacs.info-11 index 1a93484..e114931 100644 --- a/info/xemacs.info-11 +++ b/info/xemacs.info-11 @@ -30,6 +30,245 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Matching, Next: Comments, Prev: Grinding, Up: Programs + +Automatic Display of Matching Parentheses +========================================= + + The Emacs parenthesis-matching feature shows you automatically how +parentheses match in the text. Whenever a self-inserting character that +is a closing delimiter is typed, the cursor moves momentarily to the +location of the matching opening delimiter, provided that is visible on +the screen. If it is not on the screen, some text starting with that +opening delimiter is displayed in the echo area. Either way, you see +the grouping you are closing off. + + In Lisp, automatic matching applies only to parentheses. In C, it +also applies to braces and brackets. Emacs knows which characters to +regard as matching delimiters based on the syntax table set by the major +mode. *Note Syntax::. + + If the opening delimiter and closing delimiter are mismatched--as in +`[x)'--the echo area displays a warning message. The correct matches +are specified in the syntax table. + + Two variables control parenthesis matching displays. +`blink-matching-paren' turns the feature on or off. The default is `t' +(match display is on); `nil' turns it off. +`blink-matching-paren-distance' specifies how many characters back +Emacs searches to find a matching opening delimiter. If the match is +not found in the specified region, scanning stops, and nothing is +displayed. This prevents wasting lots of time scanning when there is no +match. The default is 4000. + + +File: xemacs.info, Node: Comments, Next: Balanced Editing, Prev: Matching, Up: Programs + +Manipulating Comments +===================== + + The comment commands insert, kill and align comments. + +`M-;' + Insert or align comment (`indent-for-comment'). + +`C-x ;' + Set comment column (`set-comment-column'). + +`C-u - C-x ;' + Kill comment on current line (`kill-comment'). + +`M-' + Like followed by inserting and aligning a comment + (`indent-new-comment-line'). + + The command that creates a comment is `Meta-;' +(`indent-for-comment'). If there is no comment already on the line, a +new comment is created and aligned at a specific column called the +"comment column". Emacs creates the comment by inserting the string at +the value of `comment-start'; see below. Point is left after that +string. If the text of the line extends past the comment column, +indentation is done to a suitable boundary (usually, at least one space +is inserted). If the major mode has specified a string to terminate +comments, that string is inserted after point, to keep the syntax valid. + + You can also use `Meta-;' to align an existing comment. If a line +already contains the string that starts comments, `M-;' just moves +point after it and re-indents it to the conventional place. Exception: +comments starting in column 0 are not moved. + + Some major modes have special rules for indenting certain kinds of +comments in certain contexts. For example, in Lisp code, comments which +start with two semicolons are indented as if they were lines of code, +instead of at the comment column. Comments which start with three +semicolons are supposed to start at the left margin. Emacs understands +these conventions by indenting a double-semicolon comment using +and by not changing the indentation of a triple-semicolon comment at +all. + + ;; This function is just an example. + ;;; Here either two or three semicolons are appropriate. + (defun foo (x) + ;;; And now, the first part of the function: + ;; The following line adds one. + (1+ x)) ; This line adds one. + + In C code, a comment preceded on its line by nothing but whitespace +is indented like a line of code. + + Even when an existing comment is properly aligned, `M-;' is still +useful for moving directly to the start of the comment. + + `C-u - C-x ;' (`kill-comment') kills the comment on the current +line, if there is one. The indentation before the start of the comment +is killed as well. If there does not appear to be a comment in the +line, nothing happens. To reinsert the comment on another line, move +to the end of that line, type first `C-y', and then `M-;' to realign +the comment. Note that `C-u - C-x ;' is not a distinct key; it is `C-x +;' (`set-comment-column') with a negative argument. That command is +programmed to call `kill-comment' when called with a negative argument. +However, `kill-comment' is a valid command which you could bind +directly to a key if you wanted to. + +Multiple Lines of Comments +-------------------------- + + If you are typing a comment and want to continue it on another line, +use the command `Meta-' (`indent-new-comment-line'), which +terminates the comment you are typing, creates a new blank line +afterward, and begins a new comment indented under the old one. If +Auto Fill mode is on and you go past the fill column while typing, the +comment is continued in just this fashion. If point is not at the end +of the line when you type `M-', the text on the rest of the line +becomes part of the new comment line. + +Options Controlling Comments +---------------------------- + + The comment column is stored in the variable `comment-column'. You +can explicitly set it to a number. Alternatively, the command `C-x ;' +(`set-comment-column') sets the comment column to the column point is +at. `C-u C-x ;' sets the comment column to match the last comment +before point in the buffer, and then calls `Meta-;' to align the +current line's comment under the previous one. Note that `C-u - C-x ;' +runs the function `kill-comment' as described above. + + `comment-column' is a per-buffer variable; altering the variable +affects only the current buffer. You can also change the default value. +*Note Locals::. Many major modes initialize this variable for the +current buffer. + + The comment commands recognize comments based on the regular +expression that is the value of the variable `comment-start-skip'. +This regexp should not match the null string. It may match more than +the comment starting delimiter in the strictest sense of the word; for +example, in C mode the value of the variable is `"/\\*+ *"', which +matches extra stars and spaces after the `/*' itself. (Note that `\\' +is needed in Lisp syntax to include a `\' in the string, which is needed +to deny the first star its special meaning in regexp syntax. *Note +Regexps::.) + + When a comment command makes a new comment, it inserts the value of +`comment-start' to begin it. The value of `comment-end' is inserted +after point and will follow the text you will insert into the comment. +In C mode, `comment-start' has the value `"/* "' and `comment-end' has +the value `" */"'. + + `comment-multi-line' controls how `M-' +(`indent-new-comment-line') behaves when used inside a comment. If +`comment-multi-line' is `nil', as it normally is, then `M-' +terminates the comment on the starting line and starts a new comment on +the new following line. If `comment-multi-line' is not `nil', then +`M-' sets up the new following line as part of the same comment +that was found on the starting line. This is done by not inserting a +terminator on the old line and not inserting a starter on the new line. +In languages where multi-line comments are legal, the value you choose +for this variable is a matter of taste. + + The variable `comment-indent-hook' should contain a function that is +called to compute the indentation for a newly inserted comment or for +aligning an existing comment. Major modes set this variable +differently. The function is called with no arguments, but with point +at the beginning of the comment, or at the end of a line if a new +comment is to be inserted. The function should return the column in +which the comment ought to start. For example, in Lisp mode, the +indent hook function bases its decision on the number of semicolons +that begin an existing comment and on the code in the preceding lines. + + +File: xemacs.info, Node: Balanced Editing, Next: Lisp Completion, Prev: Comments, Up: Programs + +Editing Without Unbalanced Parentheses +====================================== + +`M-(' + Put parentheses around next sexp(s) (`insert-parentheses'). + +`M-)' + Move past next close parenthesis and re-indent + (`move-over-close-and-reindent'). + + The commands `M-(' (`insert-parentheses') and `M-)' +(`move-over-close-and-reindent') are designed to facilitate a style of +editing which keeps parentheses balanced at all times. `M-(' inserts a +pair of parentheses, either together as in `()', or, if given an +argument, around the next several sexps, and leaves point after the open +parenthesis. Instead of typing `( F O O )', you can type `M-( F O O', +which has the same effect except for leaving the cursor before the +close parenthesis. You can then type `M-)', which moves past the close +parenthesis, deletes any indentation preceding it (in this example +there is none), and indents with after it. + + +File: xemacs.info, Node: Lisp Completion, Next: Documentation, Prev: Balanced Editing, Up: Programs + +Completion for Lisp Symbols +=========================== + + Completion usually happens in the minibuffer. An exception is +completion for Lisp symbol names, which is available in all buffers. + + The command `M-' (`lisp-complete-symbol') takes the partial +Lisp symbol before point to be an abbreviation, and compares it against +all non-trivial Lisp symbols currently known to Emacs. Any additional +characters that they all have in common are inserted at point. +Non-trivial symbols are those that have function definitions, values, or +properties. + + If there is an open-parenthesis immediately before the beginning of +the partial symbol, only symbols with function definitions are +considered as completions. + + If the partial name in the buffer has more than one possible +completion and they have no additional characters in common, a list of +all possible completions is displayed in another window. + + +File: xemacs.info, Node: Documentation, Next: Change Log, Prev: Lisp Completion, Up: Programs + +Documentation Commands +====================== + + As you edit Lisp code to be run in Emacs, you can use the commands +`C-h f' (`describe-function') and `C-h v' (`describe-variable') to +print documentation of functions and variables you want to call. These +commands use the minibuffer to read the name of a function or variable +to document, and display the documentation in a window. + + For extra convenience, these commands provide default arguments +based on the code in the neighborhood of point. `C-h f' sets the +default to the function called in the innermost list containing point. +`C-h v' uses the symbol name around or adjacent to point as its default. + + The `M-x manual-entry' command gives you access to documentation on +Unix commands, system calls, and libraries. The command reads a topic +as an argument, and displays the Unix manual page for that topic. +`manual-entry' always searches all 8 sections of the manual and +concatenates all the entries it finds. For example, the topic +`termcap' finds the description of the termcap library from section 3, +followed by the description of the termcap data base from section 5. + + File: xemacs.info, Node: Change Log, Next: Tags, Prev: Documentation, Up: Programs Change Logs @@ -942,262 +1181,3 @@ command and a variable with the same name; the two uses of the name never conflict because in Lisp and in Emacs it is always clear from the context which one is referred to. - -File: xemacs.info, Node: Fortran Columns, Next: Fortran Abbrev, Prev: Fortran Comments, Up: Fortran - -Columns -------- - -`C-c C-r' - Displays a "column ruler" momentarily above the current line - (`fortran-column-ruler'). - -`C-c C-w' - Splits the current window horizontally so that it is 72 columns - wide. This may help you avoid going over that limit - (`fortran-window-create'). - - The command `C-c C-r' (`fortran-column-ruler') shows a column ruler -above the current line. The comment ruler consists of two lines of -text that show you the locations of columns with special significance -in Fortran programs. Square brackets show the limits of the columns for -line numbers, and curly brackets show the limits of the columns for the -statement body. Column numbers appear above them. - - Note that the column numbers count from zero, as always in XEmacs. -As a result, the numbers may not be those you are familiar with; but the -actual positions in the line are standard Fortran. - - The text used to display the column ruler is the value of the -variable `fortran-comment-ruler'. By changing this variable, you can -change the display. - - For even more help, use `C-c C-w' (`fortran-window-create'), a -command which splits the current window horizontally, resulting in a -window 72 columns wide. When you edit in this window, you can -immediately see when a line gets too wide to be correct Fortran. - - -File: xemacs.info, Node: Fortran Abbrev, Prev: Fortran Columns, Up: Fortran - -Fortran Keyword Abbrevs ------------------------ - - Fortran mode provides many built-in abbrevs for common keywords and -declarations. These are the same sort of abbrevs that you can define -yourself. To use them, you must turn on Abbrev mode. *note Abbrevs::.. - - The built-in abbrevs are unusual in one way: they all start with a -semicolon. You cannot normally use semicolon in an abbrev, but Fortran -mode makes this possible by changing the syntax of semicolon to "word -constituent". - - For example, one built-in Fortran abbrev is `;c' for `continue'. If -you insert `;c' and then insert a punctuation character such as a space -or a newline, the `;c' changes automatically to `continue', provided -Abbrev mode is enabled. - - Type `;?' or `;C-h' to display a list of all built-in Fortran -abbrevs and what they stand for. - - -File: xemacs.info, Node: Asm Mode, Prev: Fortran, Up: Programs - -Asm Mode -======== - - Asm mode is a major mode for editing files of assembler code. It -defines these commands: - -`' - `tab-to-tab-stop'. - -`' - Insert a newline and then indent using `tab-to-tab-stop'. - -`:' - Insert a colon and then remove the indentation from before the - label preceding colon. Then do `tab-to-tab-stop'. - -`;' - Insert or align a comment. - - The variable `asm-comment-char' specifies which character starts -comments in assembler syntax. - - -File: xemacs.info, Node: Running, Next: Packages, Prev: Programs, Up: Top - -Compiling and Testing Programs -****************************** - - The previous chapter discusses the Emacs commands that are useful for -making changes in programs. This chapter deals with commands that -assist in the larger process of developing and maintaining programs. - -* Menu: - -* Compilation:: Compiling programs in languages other than Lisp - (C, Pascal, etc.) -* Modes: Lisp Modes. Various modes for editing Lisp programs, with - different facilities for running the Lisp programs. -* Libraries: Lisp Libraries. Creating Lisp programs to run in Emacs. -* Eval: Lisp Eval. Executing a single Lisp expression in Emacs. -* Debug: Lisp Debug. Debugging Lisp programs running in Emacs. -* Interaction: Lisp Interaction. Executing Lisp in an Emacs buffer. -* External Lisp:: Communicating through Emacs with a separate Lisp. - - -File: xemacs.info, Node: Compilation, Next: Lisp Modes, Prev: Running, Up: Running - -Running "make", or Compilers Generally -====================================== - - Emacs can run compilers for non-interactive languages like C and -Fortran as inferior processes, feeding the error log into an Emacs -buffer. It can also parse the error messages and visit the files in -which errors are found, moving point to the line where the error -occurred. - -`M-x compile' - Run a compiler asynchronously under Emacs, with error messages to - `*compilation*' buffer. - -`M-x grep' - Run `grep' asynchronously under Emacs, with matching lines listed - in the buffer named `*compilation*'. - -`M-x kill-compilation' - Kill the process made by the `M-x compile' command. - -`M-x kill-grep' - Kill the running compilation or `grep' subprocess. - -`C-x `' - Visit the next compiler error message or `grep' match. - - To run `make' or another compiler, type `M-x compile'. This command -reads a shell command line using the minibuffer, then executes the -specified command line in an inferior shell with output going to the -buffer named `*compilation*'. By default, the current buffer's default -directory is used as the working directory for the execution of the -command; therefore, the makefile comes from this directory. - - When the shell command line is read, the minibuffer appears -containing a default command line (the command you used the last time -you typed `M-x compile'). If you type just , the same command -line is used again. The first `M-x compile' provides `make -k' as the -default. The default is taken from the variable `compile-command'; if -the appropriate compilation command for a file is something other than -`make -k', it can be useful to have the file specify a local value for -`compile-command' (*note File Variables::.). - - When you start a compilation, the buffer `*compilation*' is -displayed in another window but not selected. Its mode line displays -the word `run' or `exit' in the parentheses to tell you whether -compilation is finished. You do not have to keep this buffer visible; -compilation continues in any case. - - To kill the compilation process, type `M-x-kill-compilation'. The -mode line of the `*compilation*' buffer changes to say `signal' instead -of `run'. Starting a new compilation also kills any running -compilation, as only one can occur at any time. Starting a new -compilation prompts for confirmation before actually killing a -compilation that is running. - - To parse the compiler error messages, type `C-x `' (`next-error'). -The character following `C-x' is the grave accent, not the single -quote. The command displays the buffer `*compilation*' in one window -and the buffer in which the next error occurred in another window. -Point in that buffer is moved to the line where the error was found. -The corresponding error message is scrolled to the top of the window in -which `*compilation*' is displayed. - - The first time you use `C-x `' after the start of a compilation, it -parses all the error messages, visits all the files that have error -messages, and creates markers pointing at the lines the error messages -refer to. It then moves to the first error message location. -Subsequent uses of `C-x `' advance down the data set up by the first -use. When the preparsed error messages are exhausted, the next `C-x `' -checks for any more error messages that have come in; this is useful if -you start editing compiler errors while compilation is still going on. -If no additional error messages have come in, `C-x `' reports an error. - - `C-u C-x `' discards the preparsed error message data and parses the -`*compilation*' buffer again, then displays the first error. This way, -you can process the same set of errors again. - - Instead of running a compiler, you can run `grep' and see the lines -on which matches were found. To do this, type `M-x grep' with an -argument line that contains the same arguments you would give to -`grep': a `grep'-style regexp (usually in single quotes to quote the -shell's special characters) followed by filenames, which may use -wildcard characters. The output from `grep' goes in the -`*compilation*' buffer. You can use `C-x `' to find the lines that -match as if they were compilation errors. - - Note: a shell is used to run the compile command, but the shell is -not run in interactive mode. In particular, this means that the shell -starts up with no prompt. If you find your usual shell prompt making an -unsightly appearance in the `*compilation*' buffer, it means you have -made a mistake in your shell's initialization file (`.cshrc' or `.shrc' -or ...) by setting the prompt unconditionally. The shell -initialization file should set the prompt only if there already is a -prompt. Here's how to do it in `csh': - - if ($?prompt) set prompt = ... - - -File: xemacs.info, Node: Lisp Modes, Next: Lisp Libraries, Prev: Compilation, Up: Running - -Major Modes for Lisp -==================== - - Emacs has four different major modes for Lisp. They are the same in -terms of editing commands, but differ in the commands for executing Lisp -expressions. - -Emacs-Lisp mode - The mode for editing source files of programs to run in Emacs Lisp. - This mode defines `C-M-x' to evaluate the current defun. *Note - Lisp Libraries::. - -Lisp Interaction mode - The mode for an interactive session with Emacs Lisp. It defines - to evaluate the sexp before point and insert its value in the - buffer. *Note Lisp Interaction::. - -Lisp mode - The mode for editing source files of programs that run in other - dialects of Lisp than Emacs Lisp. This mode defines `C-M-x' to - send the current defun to an inferior Lisp process. *Note - External Lisp::. - -Inferior Lisp mode - The mode for an interactive session with an inferior Lisp process. - This mode combines the special features of Lisp mode and Shell mode - (*note Shell Mode::.). - -Scheme mode - Like Lisp mode but for Scheme programs. - -Inferior Scheme mode - The mode for an interactive session with an inferior Scheme - process. - - -File: xemacs.info, Node: Lisp Libraries, Next: Lisp Eval, Prev: Lisp Modes, Up: Running - -Libraries of Lisp Code for Emacs -================================ - - Lisp code for Emacs editing commands is stored in files whose names -conventionally end in `.el'. This ending tells Emacs to edit them in -Emacs-Lisp mode (*note Lisp Modes::.). - -* Menu: - -* Loading:: Loading libraries of Lisp code into Emacs for use. -* Compiling Libraries:: Compiling a library makes it load and run faster. -* Mocklisp:: Converting Mocklisp to Lisp so XEmacs can run it. - diff --git a/info/xemacs.info-12 b/info/xemacs.info-12 index f306cd4..b821c35 100644 --- a/info/xemacs.info-12 +++ b/info/xemacs.info-12 @@ -30,6 +30,265 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Fortran Columns, Next: Fortran Abbrev, Prev: Fortran Comments, Up: Fortran + +Columns +------- + +`C-c C-r' + Displays a "column ruler" momentarily above the current line + (`fortran-column-ruler'). + +`C-c C-w' + Splits the current window horizontally so that it is 72 columns + wide. This may help you avoid going over that limit + (`fortran-window-create'). + + The command `C-c C-r' (`fortran-column-ruler') shows a column ruler +above the current line. The comment ruler consists of two lines of +text that show you the locations of columns with special significance +in Fortran programs. Square brackets show the limits of the columns for +line numbers, and curly brackets show the limits of the columns for the +statement body. Column numbers appear above them. + + Note that the column numbers count from zero, as always in XEmacs. +As a result, the numbers may not be those you are familiar with; but the +actual positions in the line are standard Fortran. + + The text used to display the column ruler is the value of the +variable `fortran-comment-ruler'. By changing this variable, you can +change the display. + + For even more help, use `C-c C-w' (`fortran-window-create'), a +command which splits the current window horizontally, resulting in a +window 72 columns wide. When you edit in this window, you can +immediately see when a line gets too wide to be correct Fortran. + + +File: xemacs.info, Node: Fortran Abbrev, Prev: Fortran Columns, Up: Fortran + +Fortran Keyword Abbrevs +----------------------- + + Fortran mode provides many built-in abbrevs for common keywords and +declarations. These are the same sort of abbrevs that you can define +yourself. To use them, you must turn on Abbrev mode. *note Abbrevs::.. + + The built-in abbrevs are unusual in one way: they all start with a +semicolon. You cannot normally use semicolon in an abbrev, but Fortran +mode makes this possible by changing the syntax of semicolon to "word +constituent". + + For example, one built-in Fortran abbrev is `;c' for `continue'. If +you insert `;c' and then insert a punctuation character such as a space +or a newline, the `;c' changes automatically to `continue', provided +Abbrev mode is enabled. + + Type `;?' or `;C-h' to display a list of all built-in Fortran +abbrevs and what they stand for. + + +File: xemacs.info, Node: Asm Mode, Prev: Fortran, Up: Programs + +Asm Mode +======== + + Asm mode is a major mode for editing files of assembler code. It +defines these commands: + +`' + `tab-to-tab-stop'. + +`' + Insert a newline and then indent using `tab-to-tab-stop'. + +`:' + Insert a colon and then remove the indentation from before the + label preceding colon. Then do `tab-to-tab-stop'. + +`;' + Insert or align a comment. + + The variable `asm-comment-char' specifies which character starts +comments in assembler syntax. + + +File: xemacs.info, Node: Running, Next: Packages, Prev: Programs, Up: Top + +Compiling and Testing Programs +****************************** + + The previous chapter discusses the Emacs commands that are useful for +making changes in programs. This chapter deals with commands that +assist in the larger process of developing and maintaining programs. + +* Menu: + +* Compilation:: Compiling programs in languages other than Lisp + (C, Pascal, etc.) +* Modes: Lisp Modes. Various modes for editing Lisp programs, with + different facilities for running the Lisp programs. +* Libraries: Lisp Libraries. Creating Lisp programs to run in Emacs. +* Eval: Lisp Eval. Executing a single Lisp expression in Emacs. +* Debug: Lisp Debug. Debugging Lisp programs running in Emacs. +* Interaction: Lisp Interaction. Executing Lisp in an Emacs buffer. +* External Lisp:: Communicating through Emacs with a separate Lisp. + + +File: xemacs.info, Node: Compilation, Next: Lisp Modes, Prev: Running, Up: Running + +Running "make", or Compilers Generally +====================================== + + Emacs can run compilers for non-interactive languages like C and +Fortran as inferior processes, feeding the error log into an Emacs +buffer. It can also parse the error messages and visit the files in +which errors are found, moving point to the line where the error +occurred. + +`M-x compile' + Run a compiler asynchronously under Emacs, with error messages to + `*compilation*' buffer. + +`M-x grep' + Run `grep' asynchronously under Emacs, with matching lines listed + in the buffer named `*compilation*'. + +`M-x kill-compilation' + Kill the process made by the `M-x compile' command. + +`M-x kill-grep' + Kill the running compilation or `grep' subprocess. + +`C-x `' + Visit the next compiler error message or `grep' match. + + To run `make' or another compiler, type `M-x compile'. This command +reads a shell command line using the minibuffer, then executes the +specified command line in an inferior shell with output going to the +buffer named `*compilation*'. By default, the current buffer's default +directory is used as the working directory for the execution of the +command; therefore, the makefile comes from this directory. + + When the shell command line is read, the minibuffer appears +containing a default command line (the command you used the last time +you typed `M-x compile'). If you type just , the same command +line is used again. The first `M-x compile' provides `make -k' as the +default. The default is taken from the variable `compile-command'; if +the appropriate compilation command for a file is something other than +`make -k', it can be useful to have the file specify a local value for +`compile-command' (*note File Variables::.). + + When you start a compilation, the buffer `*compilation*' is +displayed in another window but not selected. Its mode line displays +the word `run' or `exit' in the parentheses to tell you whether +compilation is finished. You do not have to keep this buffer visible; +compilation continues in any case. + + To kill the compilation process, type `M-x-kill-compilation'. The +mode line of the `*compilation*' buffer changes to say `signal' instead +of `run'. Starting a new compilation also kills any running +compilation, as only one can occur at any time. Starting a new +compilation prompts for confirmation before actually killing a +compilation that is running. + + To parse the compiler error messages, type `C-x `' (`next-error'). +The character following `C-x' is the grave accent, not the single +quote. The command displays the buffer `*compilation*' in one window +and the buffer in which the next error occurred in another window. +Point in that buffer is moved to the line where the error was found. +The corresponding error message is scrolled to the top of the window in +which `*compilation*' is displayed. + + The first time you use `C-x `' after the start of a compilation, it +parses all the error messages, visits all the files that have error +messages, and creates markers pointing at the lines the error messages +refer to. It then moves to the first error message location. +Subsequent uses of `C-x `' advance down the data set up by the first +use. When the preparsed error messages are exhausted, the next `C-x `' +checks for any more error messages that have come in; this is useful if +you start editing compiler errors while compilation is still going on. +If no additional error messages have come in, `C-x `' reports an error. + + `C-u C-x `' discards the preparsed error message data and parses the +`*compilation*' buffer again, then displays the first error. This way, +you can process the same set of errors again. + + Instead of running a compiler, you can run `grep' and see the lines +on which matches were found. To do this, type `M-x grep' with an +argument line that contains the same arguments you would give to +`grep': a `grep'-style regexp (usually in single quotes to quote the +shell's special characters) followed by filenames, which may use +wildcard characters. The output from `grep' goes in the +`*compilation*' buffer. You can use `C-x `' to find the lines that +match as if they were compilation errors. + + Note: a shell is used to run the compile command, but the shell is +not run in interactive mode. In particular, this means that the shell +starts up with no prompt. If you find your usual shell prompt making an +unsightly appearance in the `*compilation*' buffer, it means you have +made a mistake in your shell's initialization file (`.cshrc' or `.shrc' +or ...) by setting the prompt unconditionally. The shell +initialization file should set the prompt only if there already is a +prompt. Here's how to do it in `csh': + + if ($?prompt) set prompt = ... + + +File: xemacs.info, Node: Lisp Modes, Next: Lisp Libraries, Prev: Compilation, Up: Running + +Major Modes for Lisp +==================== + + Emacs has four different major modes for Lisp. They are the same in +terms of editing commands, but differ in the commands for executing Lisp +expressions. + +Emacs-Lisp mode + The mode for editing source files of programs to run in Emacs Lisp. + This mode defines `C-M-x' to evaluate the current defun. *Note + Lisp Libraries::. + +Lisp Interaction mode + The mode for an interactive session with Emacs Lisp. It defines + to evaluate the sexp before point and insert its value in the + buffer. *Note Lisp Interaction::. + +Lisp mode + The mode for editing source files of programs that run in other + dialects of Lisp than Emacs Lisp. This mode defines `C-M-x' to + send the current defun to an inferior Lisp process. *Note + External Lisp::. + +Inferior Lisp mode + The mode for an interactive session with an inferior Lisp process. + This mode combines the special features of Lisp mode and Shell mode + (*note Shell Mode::.). + +Scheme mode + Like Lisp mode but for Scheme programs. + +Inferior Scheme mode + The mode for an interactive session with an inferior Scheme + process. + + +File: xemacs.info, Node: Lisp Libraries, Next: Lisp Eval, Prev: Lisp Modes, Up: Running + +Libraries of Lisp Code for Emacs +================================ + + Lisp code for Emacs editing commands is stored in files whose names +conventionally end in `.el'. This ending tells Emacs to edit them in +Emacs-Lisp mode (*note Lisp Modes::.). + +* Menu: + +* Loading:: Loading libraries of Lisp code into Emacs for use. +* Compiling Libraries:: Compiling a library makes it load and run faster. +* Mocklisp:: Converting Mocklisp to Lisp so XEmacs can run it. + + File: xemacs.info, Node: Loading, Next: Compiling Libraries, Prev: Lisp Libraries, Up: Lisp Libraries Loading Libraries @@ -931,242 +1190,3 @@ since those two definitions are independent for one abbrev. `M-x kill-all-abbrevs' removes all existing abbrev definitions. - -File: xemacs.info, Node: Expanding Abbrevs, Next: Editing Abbrevs, Prev: Defining Abbrevs, Up: Abbrevs - -Controlling Abbrev Expansion -============================ - - An abbrev expands whenever it is in a buffer just before point and -you type a self-inserting punctuation character (, comma, etc.). -Most often an abbrev is used by inserting the abbrev followed by -punctuation. - - Abbrev expansion preserves case; thus, `foo' expands into `find -outer otter', `Foo' into `Find outer otter', and `FOO' into `FIND OUTER -OTTER' or `Find Outer Otter' according to the variable -`abbrev-all-caps' (a non-`nil' value chooses the first of the two -expansions). - - Two commands are available to control abbrev expansion: - -`M-'' - Separate a prefix from a following abbrev to be expanded - (`abbrev-prefix-mark'). - -`C-x a e' - Expand the abbrev before point (`expand-abbrev'). This is - effective even when Abbrev mode is not enabled. - -`M-x unexpand-abbrev' - Undo last abbrev expansion. - -`M-x expand-region-abbrevs' - Expand some or all abbrevs found in the region. - - You may wish to expand an abbrev with a prefix attached. For -example, if `cnst' expands into `construction', you may want to use it -to enter `reconstruction'. It does not work to type `recnst', because -that is not necessarily a defined abbrev. Instead, you can use the -command `M-'' (`abbrev-prefix-mark') between the prefix `re' and the -abbrev `cnst'. First, insert `re'. Then type `M-''; this inserts a -minus sign in the buffer to indicate that it has done its work. Then -insert the abbrev `cnst'. The buffer now contains `re-cnst'. Now -insert a punctuation character to expand the abbrev `cnst' into -`construction'. The minus sign is deleted at this point by `M-''. The -resulting text is the desired `reconstruction'. - - If you actually want the text of the abbrev in the buffer, rather -than its expansion, insert the following punctuation with `C-q'. Thus, -`foo C-q -' leaves `foo-' in the buffer. - - If you expand an abbrev by mistake, you can undo the expansion -(replace the expansion by the original abbrev text) with `M-x -unexpand-abbrev'. You can also use `C-_' (`undo') to undo the -expansion; but that will first undo the insertion of the punctuation -character. - - `M-x expand-region-abbrevs' searches through the region for defined -abbrevs, and offers to replace each one it finds with its expansion. -This command is useful if you have typed text using abbrevs but forgot -to turn on Abbrev mode first. It may also be useful together with a -special set of abbrev definitions for making several global -replacements at once. The command is effective even if Abbrev mode is -not enabled. - - -File: xemacs.info, Node: Editing Abbrevs, Next: Saving Abbrevs, Prev: Expanding Abbrevs, Up: Abbrevs - -Examining and Editing Abbrevs -============================= - -`M-x list-abbrevs' - Print a list of all abbrev definitions. - -`M-x edit-abbrevs' - Edit a list of abbrevs; you can add, alter, or remove definitions. - - The output from `M-x list-abbrevs' looks like this: - - (lisp-mode-abbrev-table) - "dk" 0 "define-key" - (global-abbrev-table) - "dfn" 0 "definition" - -(Some blank lines of no semantic significance, and some other abbrev -tables, have been omitted.) - - A line containing a name in parentheses is the header for abbrevs in -a particular abbrev table; `global-abbrev-table' contains all the global -abbrevs, and the other abbrev tables that are named after major modes -contain the mode-specific abbrevs. - - Within each abbrev table, each non-blank line defines one abbrev. -The word at the beginning is the abbrev. The number that appears is -the number of times the abbrev has been expanded. Emacs keeps track of -this to help you see which abbrevs you actually use, in case you want -to eliminate those that you don't use often. The string at the end of -the line is the expansion. - - `M-x edit-abbrevs' allows you to add, change or kill abbrev -definitions by editing a list of them in an Emacs buffer. The list has -the format described above. The buffer of abbrevs is called -`*Abbrevs*', and is in Edit-Abbrevs mode. This mode redefines the key -`C-c C-c' to install the abbrev definitions as specified in the buffer. -The `edit-abbrevs-redefine' command does this. Any abbrevs not -described in the buffer are eliminated when this is done. - - `edit-abbrevs' is actually the same as `list-abbrevs', except that -it selects the buffer `*Abbrevs*' whereas `list-abbrevs' merely -displays it in another window. - - -File: xemacs.info, Node: Saving Abbrevs, Next: Dynamic Abbrevs, Prev: Editing Abbrevs, Up: Abbrevs - -Saving Abbrevs -============== - - These commands allow you to keep abbrev definitions between editing -sessions. - -`M-x write-abbrev-file' - Write a file describing all defined abbrevs. - -`M-x read-abbrev-file' - Read such an abbrev file and define abbrevs as specified there. - -`M-x quietly-read-abbrev-file' - Similar, but do not display a message about what is going on. - -`M-x define-abbrevs' - Define abbrevs from buffer. - -`M-x insert-abbrevs' - Insert all abbrevs and their expansions into the buffer. - - Use `M-x write-abbrev-file' to save abbrev definitions for use in a -later session. The command reads a file name using the minibuffer and -writes a description of all current abbrev definitions into the -specified file. The text stored in the file looks like the output of -`M-x list-abbrevs'. - - `M-x read-abbrev-file' prompts for a file name using the minibuffer -and reads the specified file, defining abbrevs according to its -contents. `M-x quietly-read-abbrev-file' is the same but does not -display a message in the echo area; it is actually useful primarily in -the `.emacs' file. If you give an empty argument to either of these -functions, the file name Emacs uses is the value of the variable -`abbrev-file-name', which is by default `"~/.abbrev_defs"'. - - Emacs offers to save abbrevs automatically if you have changed any of -them, whenever it offers to save all files (for `C-x s' or `C-x C-c'). -Set the variable `save-abbrevs' to `nil' to inhibit this feature. - - The commands `M-x insert-abbrevs' and `M-x define-abbrevs' are -similar to the previous commands but work on text in an Emacs buffer. -`M-x insert-abbrevs' inserts text into the current buffer before point, -describing all current abbrev definitions; `M-x define-abbrevs' parses -the entire current buffer and defines abbrevs accordingly. - - -File: xemacs.info, Node: Dynamic Abbrevs, Prev: Saving Abbrevs, Up: Abbrevs - -Dynamic Abbrev Expansion -======================== - - The abbrev facility described above operates automatically as you -insert text, but all abbrevs must be defined explicitly. By contrast, -"dynamic abbrevs" allow the meanings of abbrevs to be determined -automatically from the contents of the buffer, but dynamic abbrev -expansion happens only when you request it explicitly. - -`M-/' - Expand the word in the buffer before point as a "dynamic abbrev", - by searching in the buffer for words starting with that - abbreviation (`dabbrev-expand'). - - For example, if the buffer contains `does this follow ' and you type -`f o M-/', the effect is to insert `follow' because that is the last -word in the buffer that starts with `fo'. A numeric argument to `M-/' -says to take the second, third, etc. distinct expansion found looking -backward from point. Repeating `M-/' searches for an alternative -expansion by looking farther back. After the entire buffer before -point has been considered, the buffer after point is searched. - - Dynamic abbrev expansion is completely independent of Abbrev mode; -the expansion of a word with `M-/' is completely independent of whether -it has a definition as an ordinary abbrev. - - -File: xemacs.info, Node: Picture, Next: Sending Mail, Prev: Abbrevs, Up: Top - -Editing Pictures -**************** - - If you want to create a picture made out of text characters (for -example, a picture of the division of a register into fields, as a -comment in a program), use the command `edit-picture' to enter Picture -mode. - - In Picture mode, editing is based on the "quarter-plane" model of -text. In this model, the text characters lie studded on an area that -stretches infinitely far to the right and downward. The concept of the -end of a line does not exist in this model; the most you can say is -where the last non-blank character on the line is found. - - Of course, Emacs really always considers text as a sequence of -characters, and lines really do have ends. But in Picture mode most -frequently-used keys are rebound to commands that simulate the -quarter-plane model of text. They do this by inserting spaces or by -converting tabs to spaces. - - Most of the basic editing commands of Emacs are redefined by Picture -mode to do essentially the same thing but in a quarter-plane way. In -addition, Picture mode defines various keys starting with the `C-c' -prefix to run special picture editing commands. - - One of these keys, `C-c C-c', is pretty important. Often a picture -is part of a larger file that is usually edited in some other major -mode. `M-x edit-picture' records the name of the previous major mode. -You can then use the `C-c C-c' command (`picture-mode-exit') to restore -that mode. `C-c C-c' also deletes spaces from the ends of lines, -unless you give it a numeric argument. - - The commands used in Picture mode all work in other modes (provided -the `picture' library is loaded), but are only bound to keys in -Picture mode. Note that the descriptions below talk of moving "one -column" and so on, but all the picture mode commands handle numeric -arguments as their normal equivalents do. - - Turning on Picture mode calls the value of the variable -`picture-mode-hook' as a function, with no arguments, if that value -exists and is non-`nil'. - -* Menu: - -* Basic Picture:: Basic concepts and simple commands of Picture Mode. -* Insert in Picture:: Controlling direction of cursor motion - after "self-inserting" characters. -* Tabs in Picture:: Various features for tab stops and indentation. -* Rectangles in Picture:: Clearing and superimposing rectangles. - diff --git a/info/xemacs.info-13 b/info/xemacs.info-13 index 33e4f4c..9af04b9 100644 --- a/info/xemacs.info-13 +++ b/info/xemacs.info-13 @@ -30,6 +30,245 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Expanding Abbrevs, Next: Editing Abbrevs, Prev: Defining Abbrevs, Up: Abbrevs + +Controlling Abbrev Expansion +============================ + + An abbrev expands whenever it is in a buffer just before point and +you type a self-inserting punctuation character (, comma, etc.). +Most often an abbrev is used by inserting the abbrev followed by +punctuation. + + Abbrev expansion preserves case; thus, `foo' expands into `find +outer otter', `Foo' into `Find outer otter', and `FOO' into `FIND OUTER +OTTER' or `Find Outer Otter' according to the variable +`abbrev-all-caps' (a non-`nil' value chooses the first of the two +expansions). + + Two commands are available to control abbrev expansion: + +`M-'' + Separate a prefix from a following abbrev to be expanded + (`abbrev-prefix-mark'). + +`C-x a e' + Expand the abbrev before point (`expand-abbrev'). This is + effective even when Abbrev mode is not enabled. + +`M-x unexpand-abbrev' + Undo last abbrev expansion. + +`M-x expand-region-abbrevs' + Expand some or all abbrevs found in the region. + + You may wish to expand an abbrev with a prefix attached. For +example, if `cnst' expands into `construction', you may want to use it +to enter `reconstruction'. It does not work to type `recnst', because +that is not necessarily a defined abbrev. Instead, you can use the +command `M-'' (`abbrev-prefix-mark') between the prefix `re' and the +abbrev `cnst'. First, insert `re'. Then type `M-''; this inserts a +minus sign in the buffer to indicate that it has done its work. Then +insert the abbrev `cnst'. The buffer now contains `re-cnst'. Now +insert a punctuation character to expand the abbrev `cnst' into +`construction'. The minus sign is deleted at this point by `M-''. The +resulting text is the desired `reconstruction'. + + If you actually want the text of the abbrev in the buffer, rather +than its expansion, insert the following punctuation with `C-q'. Thus, +`foo C-q -' leaves `foo-' in the buffer. + + If you expand an abbrev by mistake, you can undo the expansion +(replace the expansion by the original abbrev text) with `M-x +unexpand-abbrev'. You can also use `C-_' (`undo') to undo the +expansion; but that will first undo the insertion of the punctuation +character. + + `M-x expand-region-abbrevs' searches through the region for defined +abbrevs, and offers to replace each one it finds with its expansion. +This command is useful if you have typed text using abbrevs but forgot +to turn on Abbrev mode first. It may also be useful together with a +special set of abbrev definitions for making several global +replacements at once. The command is effective even if Abbrev mode is +not enabled. + + +File: xemacs.info, Node: Editing Abbrevs, Next: Saving Abbrevs, Prev: Expanding Abbrevs, Up: Abbrevs + +Examining and Editing Abbrevs +============================= + +`M-x list-abbrevs' + Print a list of all abbrev definitions. + +`M-x edit-abbrevs' + Edit a list of abbrevs; you can add, alter, or remove definitions. + + The output from `M-x list-abbrevs' looks like this: + + (lisp-mode-abbrev-table) + "dk" 0 "define-key" + (global-abbrev-table) + "dfn" 0 "definition" + +(Some blank lines of no semantic significance, and some other abbrev +tables, have been omitted.) + + A line containing a name in parentheses is the header for abbrevs in +a particular abbrev table; `global-abbrev-table' contains all the global +abbrevs, and the other abbrev tables that are named after major modes +contain the mode-specific abbrevs. + + Within each abbrev table, each non-blank line defines one abbrev. +The word at the beginning is the abbrev. The number that appears is +the number of times the abbrev has been expanded. Emacs keeps track of +this to help you see which abbrevs you actually use, in case you want +to eliminate those that you don't use often. The string at the end of +the line is the expansion. + + `M-x edit-abbrevs' allows you to add, change or kill abbrev +definitions by editing a list of them in an Emacs buffer. The list has +the format described above. The buffer of abbrevs is called +`*Abbrevs*', and is in Edit-Abbrevs mode. This mode redefines the key +`C-c C-c' to install the abbrev definitions as specified in the buffer. +The `edit-abbrevs-redefine' command does this. Any abbrevs not +described in the buffer are eliminated when this is done. + + `edit-abbrevs' is actually the same as `list-abbrevs', except that +it selects the buffer `*Abbrevs*' whereas `list-abbrevs' merely +displays it in another window. + + +File: xemacs.info, Node: Saving Abbrevs, Next: Dynamic Abbrevs, Prev: Editing Abbrevs, Up: Abbrevs + +Saving Abbrevs +============== + + These commands allow you to keep abbrev definitions between editing +sessions. + +`M-x write-abbrev-file' + Write a file describing all defined abbrevs. + +`M-x read-abbrev-file' + Read such an abbrev file and define abbrevs as specified there. + +`M-x quietly-read-abbrev-file' + Similar, but do not display a message about what is going on. + +`M-x define-abbrevs' + Define abbrevs from buffer. + +`M-x insert-abbrevs' + Insert all abbrevs and their expansions into the buffer. + + Use `M-x write-abbrev-file' to save abbrev definitions for use in a +later session. The command reads a file name using the minibuffer and +writes a description of all current abbrev definitions into the +specified file. The text stored in the file looks like the output of +`M-x list-abbrevs'. + + `M-x read-abbrev-file' prompts for a file name using the minibuffer +and reads the specified file, defining abbrevs according to its +contents. `M-x quietly-read-abbrev-file' is the same but does not +display a message in the echo area; it is actually useful primarily in +the `.emacs' file. If you give an empty argument to either of these +functions, the file name Emacs uses is the value of the variable +`abbrev-file-name', which is by default `"~/.abbrev_defs"'. + + Emacs offers to save abbrevs automatically if you have changed any of +them, whenever it offers to save all files (for `C-x s' or `C-x C-c'). +Set the variable `save-abbrevs' to `nil' to inhibit this feature. + + The commands `M-x insert-abbrevs' and `M-x define-abbrevs' are +similar to the previous commands but work on text in an Emacs buffer. +`M-x insert-abbrevs' inserts text into the current buffer before point, +describing all current abbrev definitions; `M-x define-abbrevs' parses +the entire current buffer and defines abbrevs accordingly. + + +File: xemacs.info, Node: Dynamic Abbrevs, Prev: Saving Abbrevs, Up: Abbrevs + +Dynamic Abbrev Expansion +======================== + + The abbrev facility described above operates automatically as you +insert text, but all abbrevs must be defined explicitly. By contrast, +"dynamic abbrevs" allow the meanings of abbrevs to be determined +automatically from the contents of the buffer, but dynamic abbrev +expansion happens only when you request it explicitly. + +`M-/' + Expand the word in the buffer before point as a "dynamic abbrev", + by searching in the buffer for words starting with that + abbreviation (`dabbrev-expand'). + + For example, if the buffer contains `does this follow ' and you type +`f o M-/', the effect is to insert `follow' because that is the last +word in the buffer that starts with `fo'. A numeric argument to `M-/' +says to take the second, third, etc. distinct expansion found looking +backward from point. Repeating `M-/' searches for an alternative +expansion by looking farther back. After the entire buffer before +point has been considered, the buffer after point is searched. + + Dynamic abbrev expansion is completely independent of Abbrev mode; +the expansion of a word with `M-/' is completely independent of whether +it has a definition as an ordinary abbrev. + + +File: xemacs.info, Node: Picture, Next: Sending Mail, Prev: Abbrevs, Up: Top + +Editing Pictures +**************** + + If you want to create a picture made out of text characters (for +example, a picture of the division of a register into fields, as a +comment in a program), use the command `edit-picture' to enter Picture +mode. + + In Picture mode, editing is based on the "quarter-plane" model of +text. In this model, the text characters lie studded on an area that +stretches infinitely far to the right and downward. The concept of the +end of a line does not exist in this model; the most you can say is +where the last non-blank character on the line is found. + + Of course, Emacs really always considers text as a sequence of +characters, and lines really do have ends. But in Picture mode most +frequently-used keys are rebound to commands that simulate the +quarter-plane model of text. They do this by inserting spaces or by +converting tabs to spaces. + + Most of the basic editing commands of Emacs are redefined by Picture +mode to do essentially the same thing but in a quarter-plane way. In +addition, Picture mode defines various keys starting with the `C-c' +prefix to run special picture editing commands. + + One of these keys, `C-c C-c', is pretty important. Often a picture +is part of a larger file that is usually edited in some other major +mode. `M-x edit-picture' records the name of the previous major mode. +You can then use the `C-c C-c' command (`picture-mode-exit') to restore +that mode. `C-c C-c' also deletes spaces from the ends of lines, +unless you give it a numeric argument. + + The commands used in Picture mode all work in other modes (provided +the `picture' library is loaded), but are only bound to keys in +Picture mode. Note that the descriptions below talk of moving "one +column" and so on, but all the picture mode commands handle numeric +arguments as their normal equivalents do. + + Turning on Picture mode calls the value of the variable +`picture-mode-hook' as a function, with no arguments, if that value +exists and is non-`nil'. + +* Menu: + +* Basic Picture:: Basic concepts and simple commands of Picture Mode. +* Insert in Picture:: Controlling direction of cursor motion + after "self-inserting" characters. +* Tabs in Picture:: Various features for tab stops and indentation. +* Rectangles in Picture:: Clearing and superimposing rectangles. + + File: xemacs.info, Node: Basic Picture, Next: Insert in Picture, Prev: Picture, Up: Picture Basic Editing in Picture Mode @@ -1006,201 +1245,3 @@ begins on the first Sunday in April. When the daylight savings rules are set up for the United States, Emacs always uses the present definition, even though it is wrong for some prior years. - -File: xemacs.info, Node: Sunrise/Sunset, Next: Lunar Phases, Prev: Holidays, Up: Calendar/Diary - -Times of Sunrise and Sunset ---------------------------- - - Special calendar commands can tell you, to within a minute or two, -the times of sunrise and sunset for any date. - -`S' - Display times of sunrise and sunset for the selected date - (`calendar-sunrise-sunset'). - -`Button2 Sunrise/Sunset' - Display times of sunrise and sunset for the date you click on. - -`M-x sunrise-sunset' - Display times of sunrise and sunset for today's date. - -`C-u M-x sunrise-sunset' - Display times of sunrise and sunset for a specified date. - - Within the calendar, to display the *local times* of sunrise and -sunset in the echo area, move point to the date you want, and type `S'. -Alternatively, click `Button2' on the date, then choose -`Sunrise/Sunset' from the menu that appears. The command `M-x -sunrise-sunset' is available outside the calendar to display this -information for today's date or a specified date. To specify a date -other than today, use `C-u M-x sunrise-sunset', which prompts for the -year, month, and day. - - You can display the times of sunrise and sunset for any location and -any date with `C-u C-u M-x sunrise-sunset'. This asks you for a -longitude, latitude, number of minutes difference from Coordinated -Universal Time, and date, and then tells you the times of sunrise and -sunset for that location on that date. - - Because the times of sunrise and sunset depend on the location on -earth, you need to tell Emacs your latitude, longitude, and location -name before using these commands. Here is an example of what to set: - - (setq calendar-latitude 40.1) - (setq calendar-longitude -88.2) - (setq calendar-location-name "Urbana, IL") - -Use one decimal place in the values of `calendar-latitude' and -`calendar-longitude'. - - Your time zone also affects the local time of sunrise and sunset. -Emacs usually gets time zone information from the operating system, but -if these values are not what you want (or if the operating system does -not supply them), you must set them yourself. Here is an example: - - (setq calendar-time-zone -360) - (setq calendar-standard-time-zone-name "CST") - (setq calendar-daylight-time-zone-name "CDT") - -The value of `calendar-time-zone' is the number of minutes difference -between your local standard time and Coordinated Universal Time -(Greenwich time). The values of `calendar-standard-time-zone-name' and -`calendar-daylight-time-zone-name' are the abbreviations used in your -time zone. Emacs displays the times of sunrise and sunset *corrected -for daylight savings time*. *Note Daylight Savings::, for how daylight -savings time is determined. - - As a user, you might find it convenient to set the calendar location -variables for your usual physical location in your `.emacs' file. And -when you install Emacs on a machine, you can create a `default.el' file -which sets them properly for the typical location of most users of that -machine. *Note Init File::. - - -File: xemacs.info, Node: Lunar Phases, Next: Other Calendars, Prev: Sunrise/Sunset, Up: Calendar/Diary - -Phases of the Moon ------------------- - - These calendar commands display the dates and times of the phases of -the moon (new moon, first quarter, full moon, last quarter). This -feature is useful for debugging problems that "depend on the phase of -the moon." - -`M' - Display the dates and times for all the quarters of the moon for - the three-month period shown (`calendar-phases-of-moon'). - -`M-x phases-of-moon' - Display dates and times of the quarters of the moon for three - months around today's date. - - Within the calendar, use the `M' command to display a separate -buffer of the phases of the moon for the current three-month range. The -dates and times listed are accurate to within a few minutes. - - Outside the calendar, use the command `M-x phases-of-moon' to -display the list of the phases of the moon for the current month and the -preceding and succeeding months. For information about a different -month, use `C-u M-x phases-of-moon', which prompts for the month and -year. - - The dates and times given for the phases of the moon are given in -local time (corrected for daylight savings, when appropriate); but if -the variable `calendar-time-zone' is void, Coordinated Universal Time -(the Greenwich time zone) is used. *Note Daylight Savings::. - - -File: xemacs.info, Node: Other Calendars, Next: Calendar Systems, Prev: Lunar Phases, Up: Calendar/Diary - -Conversion To and From Other Calendars --------------------------------------- - - The Emacs calendar displayed is *always* the Gregorian calendar, -sometimes called the "new style" calendar, which is used in most of the -world today. However, this calendar did not exist before the sixteenth -century and was not widely used before the eighteenth century; it did -not fully displace the Julian calendar and gain universal acceptance -until the early twentieth century. The Emacs calendar can display any -month since January, year 1 of the current era, but the calendar -displayed is the Gregorian, even for a date at which the Gregorian -calendar did not exist. - - While Emacs cannot display other calendars, it can convert dates to -and from several other calendars. - -* Menu: - -* Calendar Systems:: The calendars Emacs understands - (aside from Gregorian). -* To Other Calendar:: Converting the selected date to various calendars. -* From Other Calendar:: Moving to a date specified in another calendar. -* Mayan Calendar:: Moving to a date specified in a Mayan calendar. - - If you are interested in these calendars, you can convert dates one -at a time. Put point on the desired date of the Gregorian calendar and -press the appropriate keys. The `p' is a mnemonic for "print" since -Emacs "prints' the equivalent date in the echo area. - - -File: xemacs.info, Node: Calendar Systems, Next: To Other Calendar, Prev: Other Calendars, Up: Other Calendars - -Supported Calendar Systems -========================== - - The ISO commercial calendar is used largely in Europe. - - The Julian calendar, named after Julius Caesar, was the one used in -Europe throughout medieval times, and in many countries up until the -nineteenth century. - - Astronomers use a simple counting of days elapsed since noon, Monday, -January 1, 4713 B.C. on the Julian calendar. The number of days elapsed -is called the *Julian day number* or the *Astronomical day number*. - - The Hebrew calendar is used by tradition in the Jewish religion. The -Emacs calendar program uses the Hebrew calendar to determine the dates -of Jewish holidays. Hebrew calendar dates begin and end at sunset. - - The Islamic calendar is used in many predominantly Islamic countries. -Emacs uses it to determine the dates of Islamic holidays. There is no -universal agreement in the Islamic world about the calendar; Emacs uses -a widely accepted version, but the precise dates of Islamic holidays -often depend on proclamation by religious authorities, not on -calculations. As a consequence, the actual dates of observance can vary -slightly from the dates computed by Emacs. Islamic calendar dates begin -and end at sunset. - - The French Revolutionary calendar was created by the Jacobins after -the 1789 revolution, to represent a more secular and nature-based view -of the annual cycle, and to install a 10-day week in a rationalization -measure similar to the metric system. The French government officially -abandoned this calendar at the end of 1805. - - The Maya of Central America used three separate, overlapping calendar -systems, the *long count*, the *tzolkin*, and the *haab*. Emacs knows -about all three of these calendars. Experts dispute the exact -correlation between the Mayan calendar and our calendar; Emacs uses the -Goodman-Martinez-Thompson correlation in its calculations. - - The Copts use a calendar based on the ancient Egyptian solar -calendar. Their calendar consists of twelve 30-day months followed by -an extra five-day period. Once every fourth year they add a leap day -to this extra period to make it six days. The Ethiopic calendar is -identical in structure, but has different year numbers and month names. - - The Persians use a solar calendar based on a design of Omar Khayyam. -Their calendar consists of twelve months of which the first six have 31 -days, the next five have 30 days, and the last has 29 in ordinary years -and 30 in leap years. Leap years occur in a complicated pattern every -four or five years. - - The Chinese calendar is a complicated system of lunar months arranged -into solar years. The years go in cycles of sixty, each year containing -either twelve months in an ordinary year or thirteen months in a leap -year; each month has either 29 or 30 days. Years, ordinary months, and -days are named by combining one of ten "celestial stems" with one of -twelve "terrestrial branches" for a total of sixty names that are -repeated in a cycle of sixty. - diff --git a/info/xemacs.info-14 b/info/xemacs.info-14 index 72a3771..301442d 100644 --- a/info/xemacs.info-14 +++ b/info/xemacs.info-14 @@ -30,6 +30,204 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Sunrise/Sunset, Next: Lunar Phases, Prev: Holidays, Up: Calendar/Diary + +Times of Sunrise and Sunset +--------------------------- + + Special calendar commands can tell you, to within a minute or two, +the times of sunrise and sunset for any date. + +`S' + Display times of sunrise and sunset for the selected date + (`calendar-sunrise-sunset'). + +`Button2 Sunrise/Sunset' + Display times of sunrise and sunset for the date you click on. + +`M-x sunrise-sunset' + Display times of sunrise and sunset for today's date. + +`C-u M-x sunrise-sunset' + Display times of sunrise and sunset for a specified date. + + Within the calendar, to display the *local times* of sunrise and +sunset in the echo area, move point to the date you want, and type `S'. +Alternatively, click `Button2' on the date, then choose +`Sunrise/Sunset' from the menu that appears. The command `M-x +sunrise-sunset' is available outside the calendar to display this +information for today's date or a specified date. To specify a date +other than today, use `C-u M-x sunrise-sunset', which prompts for the +year, month, and day. + + You can display the times of sunrise and sunset for any location and +any date with `C-u C-u M-x sunrise-sunset'. This asks you for a +longitude, latitude, number of minutes difference from Coordinated +Universal Time, and date, and then tells you the times of sunrise and +sunset for that location on that date. + + Because the times of sunrise and sunset depend on the location on +earth, you need to tell Emacs your latitude, longitude, and location +name before using these commands. Here is an example of what to set: + + (setq calendar-latitude 40.1) + (setq calendar-longitude -88.2) + (setq calendar-location-name "Urbana, IL") + +Use one decimal place in the values of `calendar-latitude' and +`calendar-longitude'. + + Your time zone also affects the local time of sunrise and sunset. +Emacs usually gets time zone information from the operating system, but +if these values are not what you want (or if the operating system does +not supply them), you must set them yourself. Here is an example: + + (setq calendar-time-zone -360) + (setq calendar-standard-time-zone-name "CST") + (setq calendar-daylight-time-zone-name "CDT") + +The value of `calendar-time-zone' is the number of minutes difference +between your local standard time and Coordinated Universal Time +(Greenwich time). The values of `calendar-standard-time-zone-name' and +`calendar-daylight-time-zone-name' are the abbreviations used in your +time zone. Emacs displays the times of sunrise and sunset *corrected +for daylight savings time*. *Note Daylight Savings::, for how daylight +savings time is determined. + + As a user, you might find it convenient to set the calendar location +variables for your usual physical location in your `.emacs' file. And +when you install Emacs on a machine, you can create a `default.el' file +which sets them properly for the typical location of most users of that +machine. *Note Init File::. + + +File: xemacs.info, Node: Lunar Phases, Next: Other Calendars, Prev: Sunrise/Sunset, Up: Calendar/Diary + +Phases of the Moon +------------------ + + These calendar commands display the dates and times of the phases of +the moon (new moon, first quarter, full moon, last quarter). This +feature is useful for debugging problems that "depend on the phase of +the moon." + +`M' + Display the dates and times for all the quarters of the moon for + the three-month period shown (`calendar-phases-of-moon'). + +`M-x phases-of-moon' + Display dates and times of the quarters of the moon for three + months around today's date. + + Within the calendar, use the `M' command to display a separate +buffer of the phases of the moon for the current three-month range. The +dates and times listed are accurate to within a few minutes. + + Outside the calendar, use the command `M-x phases-of-moon' to +display the list of the phases of the moon for the current month and the +preceding and succeeding months. For information about a different +month, use `C-u M-x phases-of-moon', which prompts for the month and +year. + + The dates and times given for the phases of the moon are given in +local time (corrected for daylight savings, when appropriate); but if +the variable `calendar-time-zone' is void, Coordinated Universal Time +(the Greenwich time zone) is used. *Note Daylight Savings::. + + +File: xemacs.info, Node: Other Calendars, Next: Calendar Systems, Prev: Lunar Phases, Up: Calendar/Diary + +Conversion To and From Other Calendars +-------------------------------------- + + The Emacs calendar displayed is *always* the Gregorian calendar, +sometimes called the "new style" calendar, which is used in most of the +world today. However, this calendar did not exist before the sixteenth +century and was not widely used before the eighteenth century; it did +not fully displace the Julian calendar and gain universal acceptance +until the early twentieth century. The Emacs calendar can display any +month since January, year 1 of the current era, but the calendar +displayed is the Gregorian, even for a date at which the Gregorian +calendar did not exist. + + While Emacs cannot display other calendars, it can convert dates to +and from several other calendars. + +* Menu: + +* Calendar Systems:: The calendars Emacs understands + (aside from Gregorian). +* To Other Calendar:: Converting the selected date to various calendars. +* From Other Calendar:: Moving to a date specified in another calendar. +* Mayan Calendar:: Moving to a date specified in a Mayan calendar. + + If you are interested in these calendars, you can convert dates one +at a time. Put point on the desired date of the Gregorian calendar and +press the appropriate keys. The `p' is a mnemonic for "print" since +Emacs "prints' the equivalent date in the echo area. + + +File: xemacs.info, Node: Calendar Systems, Next: To Other Calendar, Prev: Other Calendars, Up: Other Calendars + +Supported Calendar Systems +========================== + + The ISO commercial calendar is used largely in Europe. + + The Julian calendar, named after Julius Caesar, was the one used in +Europe throughout medieval times, and in many countries up until the +nineteenth century. + + Astronomers use a simple counting of days elapsed since noon, Monday, +January 1, 4713 B.C. on the Julian calendar. The number of days elapsed +is called the *Julian day number* or the *Astronomical day number*. + + The Hebrew calendar is used by tradition in the Jewish religion. The +Emacs calendar program uses the Hebrew calendar to determine the dates +of Jewish holidays. Hebrew calendar dates begin and end at sunset. + + The Islamic calendar is used in many predominantly Islamic countries. +Emacs uses it to determine the dates of Islamic holidays. There is no +universal agreement in the Islamic world about the calendar; Emacs uses +a widely accepted version, but the precise dates of Islamic holidays +often depend on proclamation by religious authorities, not on +calculations. As a consequence, the actual dates of observance can vary +slightly from the dates computed by Emacs. Islamic calendar dates begin +and end at sunset. + + The French Revolutionary calendar was created by the Jacobins after +the 1789 revolution, to represent a more secular and nature-based view +of the annual cycle, and to install a 10-day week in a rationalization +measure similar to the metric system. The French government officially +abandoned this calendar at the end of 1805. + + The Maya of Central America used three separate, overlapping calendar +systems, the *long count*, the *tzolkin*, and the *haab*. Emacs knows +about all three of these calendars. Experts dispute the exact +correlation between the Mayan calendar and our calendar; Emacs uses the +Goodman-Martinez-Thompson correlation in its calculations. + + The Copts use a calendar based on the ancient Egyptian solar +calendar. Their calendar consists of twelve 30-day months followed by +an extra five-day period. Once every fourth year they add a leap day +to this extra period to make it six days. The Ethiopic calendar is +identical in structure, but has different year numbers and month names. + + The Persians use a solar calendar based on a design of Omar Khayyam. +Their calendar consists of twelve months of which the first six have 31 +days, the next five have 30 days, and the last has 29 in ordinary years +and 30 in leap years. Leap years occur in a complicated pattern every +four or five years. + + The Chinese calendar is a complicated system of lunar months arranged +into solar years. The years go in cycles of sixty, each year containing +either twelve months in an ordinary year or thirteen months in a leap +year; each month has either 29 or 30 days. Years, ordinary months, and +days are named by combining one of ten "celestial stems" with one of +twelve "terrestrial branches" for a total of sixty names that are +repeated in a cycle of sixty. + + File: xemacs.info, Node: To Other Calendar, Next: From Other Calendar, Prev: Calendar Systems, Up: Other Calendars Converting To Other Calendars @@ -1011,176 +1209,3 @@ after midnight local time when the transition to and from daylight savings time should occur. For Cambridge, Massachusetts both variables' values are 120. - -File: xemacs.info, Node: Diary Customizing, Next: Hebrew/Islamic Entries, Prev: Daylight Savings, Up: Calendar Customization - -Customizing the Diary -..................... - - Ordinarily, the mode line of the diary buffer window indicates any -holidays that fall on the date of the diary entries. The process of -checking for holidays can take several seconds, so including holiday -information delays the display of the diary buffer noticeably. If you'd -prefer to have a faster display of the diary buffer but without the -holiday information, set the variable `holidays-in-diary-buffer' to -`nil'. - - The variable `number-of-diary-entries' controls the number of days -of diary entries to be displayed at one time. It affects the initial -display when `view-diary-entries-initially' is `t', as well as the -command `M-x diary'. For example, the default value is 1, which says -to display only the current day's diary entries. If the value is 2, -both the current day's and the next day's entries are displayed. The -value can also be a vector of seven elements: for example, if the value -is `[0 2 2 2 2 4 1]' then no diary entries appear on Sunday, the -current date's and the next day's diary entries appear Monday through -Thursday, Friday through Monday's entries appear on Friday, while on -Saturday only that day's entries appear. - - The variable `print-diary-entries-hook' is a normal hook run after -preparation of a temporary buffer containing just the diary entries -currently visible in the diary buffer. (The other, irrelevant diary -entries are really absent from the temporary buffer; in the diary -buffer, they are merely hidden.) The default value of this hook does -the printing with the command `lpr-buffer'. If you want to use a -different command to do the printing, just change the value of this -hook. Other uses might include, for example, rearranging the lines into -order by day and time. - - You can customize the form of dates in your diary file, if neither -the standard American nor European styles suits your needs, by setting -the variable `diary-date-forms'. This variable is a list of patterns -for recognizing a date. Each date pattern is a list whose elements may -be regular expressions (*note Regexps::.) or the symbols `month', -`day', `year', `monthname', and `dayname'. All these elements serve as -patterns that match certain kinds of text in the diary file. In order -for the date pattern, as a whole, to match, all of its elements must -match consecutively. - - A regular expression in a date pattern matches in its usual fashion, -using the standard syntax table altered so that `*' is a word -constituent. - - The symbols `month', `day', `year', `monthname', and `dayname' match -the month number, day number, year number, month name, and day name of -the date being considered. The symbols that match numbers allow -leading zeros; those that match names allow three-letter abbreviations -and capitalization. All the symbols can match `*'; since `*' in a -diary entry means "any day", "any month", and so on, it should match -regardless of the date being considered. - - The default value of `diary-date-forms' in the American style is -this: - - ((month "/" day "[^/0-9]") - (month "/" day "/" year "[^0-9]") - (monthname " *" day "[^,0-9]") - (monthname " *" day ", *" year "[^0-9]") - (dayname "\\W")) - -Emacs matches of the diary entries with the date forms is done with the -standard syntax table from Fundamental mode (*note Syntax Tables: -(lispref)Syntax Tables.), but with the `*' changed so that it is a word -constituent. - - The date patterns in the list must be *mutually exclusive* and must -not match any portion of the diary entry itself, just the date and one -character of whitespace. If, to be mutually exclusive, the pattern -must match a portion of the diary entry text--beyond the whitespace -that ends the date--then the first element of the date pattern *must* -be `backup'. This causes the date recognizer to back up to the -beginning of the current word of the diary entry, after finishing the -match. Even if you use `backup', the date pattern must absolutely not -match more than a portion of the first word of the diary entry. The -default value of `diary-date-forms' in the European style is this list: - - ((day "/" month "[^/0-9]") - (day "/" month "/" year "[^0-9]") - (backup day " *" monthname "\\W+\\<[^*0-9]") - (day " *" monthname " *" year "[^0-9]") - (dayname "\\W")) - -Notice the use of `backup' in the third pattern, because it needs to -match part of a word beyond the date itself to distinguish it from the -fourth pattern. - - -File: xemacs.info, Node: Hebrew/Islamic Entries, Next: Fancy Diary Display, Prev: Diary Customizing, Up: Calendar Customization - -Hebrew- and Islamic-Date Diary Entries -...................................... - - Your diary file can have entries based on Hebrew or Islamic dates, as -well as entries based on the world-standard Gregorian calendar. -However, because recognition of such entries is time-consuming and most -people don't use them, you must explicitly enable their use. If you -want the diary to recognize Hebrew-date diary entries, for example, you -must do this: - - (add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries) - (add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries) - -If you want Islamic-date entries, do this: - - (add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries) - (add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries) - - Hebrew- and Islamic-date diary entries have the same formats as -Gregorian-date diary entries, except that `H' precedes a Hebrew date -and `I' precedes an Islamic date. Moreover, because the Hebrew and -Islamic month names are not uniquely specified by the first three -letters, you may not abbreviate them. For example, a diary entry for -the Hebrew date Heshvan 25 could look like this: - - HHeshvan 25 Happy Hebrew birthday! - -and would appear in the diary for any date that corresponds to Heshvan -25 on the Hebrew calendar. And here is Islamic-date diary entry that -matches Dhu al-Qada 25: - - IDhu al-Qada 25 Happy Islamic birthday! - -and would appear in the diary for any date that corresponds to Dhu -al-Qada 25 on the Islamic calendar. - - As with Gregorian-date diary entries, Hebrew- and Islamic-date -entries are nonmarking if they are preceded with an ampersand (`&'). - - Here is a table of commands used in the calendar to create diary -entries that match the selected date and other dates that are similar -in the Hebrew or Islamic calendar: - -`i h d' - Add a diary entry for the Hebrew date corresponding to the - selected date (`insert-hebrew-diary-entry'). - -`i h m' - Add a diary entry for the day of the Hebrew month corresponding to - the selected date (`insert-monthly-hebrew-diary-entry'). This - diary entry matches any date that has the same Hebrew - day-within-month as the selected date. - -`i h y' - Add a diary entry for the day of the Hebrew year corresponding to - the selected date (`insert-yearly-hebrew-diary-entry'). This diary - entry matches any date which has the same Hebrew month and - day-within-month as the selected date. - -`i i d' - Add a diary entry for the Islamic date corresponding to the - selected date (`insert-islamic-diary-entry'). - -`i i m' - Add a diary entry for the day of the Islamic month corresponding - to the selected date (`insert-monthly-islamic-diary-entry'). - -`i i y' - Add a diary entry for the day of the Islamic year corresponding to - the selected date (`insert-yearly-islamic-diary-entry'). - - These commands work much like the corresponding commands for ordinary -diary entries: they apply to the date that point is on in the calendar -window, and what they do is insert just the date portion of a diary -entry at the end of your diary file. You must then insert the rest of -the diary entry. - diff --git a/info/xemacs.info-15 b/info/xemacs.info-15 index acd0168..ffe69e8 100644 --- a/info/xemacs.info-15 +++ b/info/xemacs.info-15 @@ -30,6 +30,179 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Diary Customizing, Next: Hebrew/Islamic Entries, Prev: Daylight Savings, Up: Calendar Customization + +Customizing the Diary +..................... + + Ordinarily, the mode line of the diary buffer window indicates any +holidays that fall on the date of the diary entries. The process of +checking for holidays can take several seconds, so including holiday +information delays the display of the diary buffer noticeably. If you'd +prefer to have a faster display of the diary buffer but without the +holiday information, set the variable `holidays-in-diary-buffer' to +`nil'. + + The variable `number-of-diary-entries' controls the number of days +of diary entries to be displayed at one time. It affects the initial +display when `view-diary-entries-initially' is `t', as well as the +command `M-x diary'. For example, the default value is 1, which says +to display only the current day's diary entries. If the value is 2, +both the current day's and the next day's entries are displayed. The +value can also be a vector of seven elements: for example, if the value +is `[0 2 2 2 2 4 1]' then no diary entries appear on Sunday, the +current date's and the next day's diary entries appear Monday through +Thursday, Friday through Monday's entries appear on Friday, while on +Saturday only that day's entries appear. + + The variable `print-diary-entries-hook' is a normal hook run after +preparation of a temporary buffer containing just the diary entries +currently visible in the diary buffer. (The other, irrelevant diary +entries are really absent from the temporary buffer; in the diary +buffer, they are merely hidden.) The default value of this hook does +the printing with the command `lpr-buffer'. If you want to use a +different command to do the printing, just change the value of this +hook. Other uses might include, for example, rearranging the lines into +order by day and time. + + You can customize the form of dates in your diary file, if neither +the standard American nor European styles suits your needs, by setting +the variable `diary-date-forms'. This variable is a list of patterns +for recognizing a date. Each date pattern is a list whose elements may +be regular expressions (*note Regexps::.) or the symbols `month', +`day', `year', `monthname', and `dayname'. All these elements serve as +patterns that match certain kinds of text in the diary file. In order +for the date pattern, as a whole, to match, all of its elements must +match consecutively. + + A regular expression in a date pattern matches in its usual fashion, +using the standard syntax table altered so that `*' is a word +constituent. + + The symbols `month', `day', `year', `monthname', and `dayname' match +the month number, day number, year number, month name, and day name of +the date being considered. The symbols that match numbers allow +leading zeros; those that match names allow three-letter abbreviations +and capitalization. All the symbols can match `*'; since `*' in a +diary entry means "any day", "any month", and so on, it should match +regardless of the date being considered. + + The default value of `diary-date-forms' in the American style is +this: + + ((month "/" day "[^/0-9]") + (month "/" day "/" year "[^0-9]") + (monthname " *" day "[^,0-9]") + (monthname " *" day ", *" year "[^0-9]") + (dayname "\\W")) + +Emacs matches of the diary entries with the date forms is done with the +standard syntax table from Fundamental mode (*note Syntax Tables: +(lispref)Syntax Tables.), but with the `*' changed so that it is a word +constituent. + + The date patterns in the list must be *mutually exclusive* and must +not match any portion of the diary entry itself, just the date and one +character of whitespace. If, to be mutually exclusive, the pattern +must match a portion of the diary entry text--beyond the whitespace +that ends the date--then the first element of the date pattern *must* +be `backup'. This causes the date recognizer to back up to the +beginning of the current word of the diary entry, after finishing the +match. Even if you use `backup', the date pattern must absolutely not +match more than a portion of the first word of the diary entry. The +default value of `diary-date-forms' in the European style is this list: + + ((day "/" month "[^/0-9]") + (day "/" month "/" year "[^0-9]") + (backup day " *" monthname "\\W+\\<[^*0-9]") + (day " *" monthname " *" year "[^0-9]") + (dayname "\\W")) + +Notice the use of `backup' in the third pattern, because it needs to +match part of a word beyond the date itself to distinguish it from the +fourth pattern. + + +File: xemacs.info, Node: Hebrew/Islamic Entries, Next: Fancy Diary Display, Prev: Diary Customizing, Up: Calendar Customization + +Hebrew- and Islamic-Date Diary Entries +...................................... + + Your diary file can have entries based on Hebrew or Islamic dates, as +well as entries based on the world-standard Gregorian calendar. +However, because recognition of such entries is time-consuming and most +people don't use them, you must explicitly enable their use. If you +want the diary to recognize Hebrew-date diary entries, for example, you +must do this: + + (add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries) + (add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries) + +If you want Islamic-date entries, do this: + + (add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries) + (add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries) + + Hebrew- and Islamic-date diary entries have the same formats as +Gregorian-date diary entries, except that `H' precedes a Hebrew date +and `I' precedes an Islamic date. Moreover, because the Hebrew and +Islamic month names are not uniquely specified by the first three +letters, you may not abbreviate them. For example, a diary entry for +the Hebrew date Heshvan 25 could look like this: + + HHeshvan 25 Happy Hebrew birthday! + +and would appear in the diary for any date that corresponds to Heshvan +25 on the Hebrew calendar. And here is Islamic-date diary entry that +matches Dhu al-Qada 25: + + IDhu al-Qada 25 Happy Islamic birthday! + +and would appear in the diary for any date that corresponds to Dhu +al-Qada 25 on the Islamic calendar. + + As with Gregorian-date diary entries, Hebrew- and Islamic-date +entries are nonmarking if they are preceded with an ampersand (`&'). + + Here is a table of commands used in the calendar to create diary +entries that match the selected date and other dates that are similar +in the Hebrew or Islamic calendar: + +`i h d' + Add a diary entry for the Hebrew date corresponding to the + selected date (`insert-hebrew-diary-entry'). + +`i h m' + Add a diary entry for the day of the Hebrew month corresponding to + the selected date (`insert-monthly-hebrew-diary-entry'). This + diary entry matches any date that has the same Hebrew + day-within-month as the selected date. + +`i h y' + Add a diary entry for the day of the Hebrew year corresponding to + the selected date (`insert-yearly-hebrew-diary-entry'). This diary + entry matches any date which has the same Hebrew month and + day-within-month as the selected date. + +`i i d' + Add a diary entry for the Islamic date corresponding to the + selected date (`insert-islamic-diary-entry'). + +`i i m' + Add a diary entry for the day of the Islamic month corresponding + to the selected date (`insert-monthly-islamic-diary-entry'). + +`i i y' + Add a diary entry for the day of the Islamic year corresponding to + the selected date (`insert-yearly-islamic-diary-entry'). + + These commands work much like the corresponding commands for ordinary +diary entries: they apply to the date that point is on in the calendar +window, and what they do is insert just the date portion of a diary +entry at the end of your diary file. You must then insert the rest of +the diary entry. + + File: xemacs.info, Node: Fancy Diary Display, Next: Included Diary Files, Prev: Hebrew/Islamic Entries, Up: Calendar Customization Fancy Diary Display @@ -1000,215 +1173,3 @@ File::. * X Resources:: X resources controlling various aspects of the behavior of XEmacs. - -File: xemacs.info, Node: Minor Modes, Next: Variables, Up: Customization - -Minor Modes -=========== - - Minor modes are options which you can use or not. For example, Auto -Fill mode is a minor mode in which breaks lines between words as -you type. All the minor modes are independent of each other and of the -selected major mode. Most minor modes inform you in the mode line when -they are on; for example, `Fill' in the mode line means that Auto Fill -mode is on. - - Append `-mode' to the name of a minor mode to get the name of a -command function that turns the mode on or off. Thus, the command to -enable or disable Auto Fill mode is called `M-x auto-fill-mode'. These -commands are usually invoked with `M-x', but you can bind keys to them -if you wish. With no argument, the function turns the mode on if it was -off and off if it was on. This is known as "toggling". A positive -argument always turns the mode on, and an explicit zero argument or a -negative argument always turns it off. - - Auto Fill mode allows you to enter filled text without breaking lines -explicitly. Emacs inserts newlines as necessary to prevent lines from -becoming too long. *Note Filling::. - - Overwrite mode causes ordinary printing characters to replace -existing text instead of moving it to the right. For example, if point -is in front of the `B' in `FOOBAR', and you type a `G' in Overwrite -mode, it changes to `FOOGAR', instead of `FOOGBAR'. - - Abbrev mode allows you to define abbreviations that automatically -expand as you type them. For example, `amd' might expand to `abbrev -mode'. *Note Abbrevs::, for full information. - - -File: xemacs.info, Node: Variables, Next: Keyboard Macros, Prev: Minor Modes, Up: Customization - -Variables -========= - - A "variable" is a Lisp symbol which has a value. Variable names can -contain any characters, but by convention they are words separated by -hyphens. A variable can also have a documentation string, which -describes what kind of value it should have and how the value will be -used. - - Lisp allows any variable to have any kind of value, but most -variables that Emacs uses require a value of a certain type. Often the -value has to be a string or a number. Sometimes we say that a certain -feature is turned on if a variable is "non-`nil'," meaning that if the -variable's value is `nil', the feature is off, but the feature is on -for any other value. The conventional value to turn on the -feature--since you have to pick one particular value when you set the -variable--is `t'. - - Emacs uses many Lisp variables for internal recordkeeping, as any -Lisp program must, but the most interesting variables for you are the -ones that exist for the sake of customization. Emacs does not -(usually) change the values of these variables; instead, you set the -values, and thereby alter and control the behavior of certain Emacs -commands. These variables are called "options". Most options are -documented in this manual and appear in the Variable Index (*note -Variable Index::.). - - One example of a variable which is an option is `fill-column', which -specifies the position of the right margin (as a number of characters -from the left margin) to be used by the fill commands (*note -Filling::.). - -* Menu: - -* Examining:: Examining or setting one variable's value. -* Easy Customization:: Convenient and easy customization of variables. -* Edit Options:: Examining or editing list of all variables' values. -* Locals:: Per-buffer values of variables. -* File Variables:: How files can specify variable values. - - -File: xemacs.info, Node: Examining, Next: Easy Customization, Up: Variables - -Examining and Setting Variables -------------------------------- - -`C-h v' -`M-x describe-variable' - Print the value and documentation of a variable. - -`M-x set-variable' - Change the value of a variable. - - To examine the value of a single variable, use `C-h v' -(`describe-variable'), which reads a variable name using the -minibuffer, with completion. It prints both the value and the -documentation of the variable. - - C-h v fill-column - -prints something like: - - fill-column's value is 75 - - Documentation: - *Column beyond which automatic line-wrapping should happen. - Automatically becomes local when set in any fashion. - -The star at the beginning of the documentation indicates that this -variable is an option. `C-h v' is not restricted to options; it allows -any variable name. - - If you know which option you want to set, you can use `M-x -set-variable' to set it. This prompts for the variable name in the -minibuffer (with completion), and then prompts for a Lisp expression -for the new value using the minibuffer a second time. For example, - - M-x set-variable fill-column 75 - -sets `fill-column' to 75, as if you had executed the Lisp expression -`(setq fill-column 75)'. - - Setting variables in this way, like all means of customizing Emacs -except where explicitly stated, affects only the current Emacs session. - - -File: xemacs.info, Node: Easy Customization, Next: Edit Options, Prev: Examining, Up: Variables - -Easy Customization Interface ----------------------------- - - A convenient way to find the user option variables that you want to -change, and then change them, is with `M-x customize'. This command -creates a "customization buffer" with which you can browse through the -Emacs user options in a logically organized structure, then edit and -set their values. You can also use the customization buffer to save -settings permanently. (Not all Emacs user options are included in this -structure as of yet, but we are adding the rest.) - -* Menu: - -* Groups: Customization Groups. - How options are classified in a structure. -* Changing an Option:: How to edit a value and set an option. -* Face Customization:: How to edit the attributes of a face. -* Specific Customization:: Making a customization buffer for specific - options, faces, or groups. - - -File: xemacs.info, Node: Customization Groups, Next: Changing an Option, Up: Easy Customization - -Customization Groups -.................... - - For customization purposes, user options are organized into "groups" -to help you find them. Groups are collected into bigger groups, all -the way up to a master group called `Emacs'. - - `M-x customize' creates a customization buffer that shows the -top-level `Emacs' group and the second-level groups immediately under -it. It looks like this, in part: - - /- Emacs group: ---------------------------------------------------\ - [State]: visible group members are all at standard settings. - Customization of the One True Editor. - See also [Manual]. - - [Open] Editing group - Basic text editing facilities. - - [Open] External group - Interfacing to external utilities. - - MORE SECOND-LEVEL GROUPS - - \- Emacs group end ------------------------------------------------/ - -This says that the buffer displays the contents of the `Emacs' group. -The other groups are listed because they are its contents. But they -are listed differently, without indentation and dashes, because *their* -contents are not included. Each group has a single-line documentation -string; the `Emacs' group also has a `[State]' line. - - Most of the text in the customization buffer is read-only, but it -typically includes some "editable fields" that you can edit. There are -also "active fields"; this means a field that does something when you -"invoke" it. To invoke an active field, either click on it with -`Mouse-1', or move point to it and type . - - For example, the phrase `[Open]' that appears in a second-level -group is an active field. Invoking the `[Open]' field for a group -opens up a new customization buffer, which shows that group and its -contents. This field is a kind of hypertext link to another group. - - The `Emacs' group does not include any user options itself, but -other groups do. By examining various groups, you will eventually find -the options and faces that belong to the feature you are interested in -customizing. Then you can use the customization buffer to set them. - - You can view the structure of customization groups on a larger scale -with `M-x customize-browse'. This command creates a special kind of -customization buffer which shows only the names of the groups (and -options and faces), and their structure. - - In this buffer, you can show the contents of a group by invoking -`[+]'. When the group contents are visible, this button changes to -`[-]'; invoking that hides the group contents. - - Each group, option or face name in this buffer has an active field -which says `[Group]', `[Option]' or `[Face]'. Invoking that active -field creates an ordinary customization buffer showing just that group -and its contents, just that option, or just that face. This is the way -to set values in it. - diff --git a/info/xemacs.info-16 b/info/xemacs.info-16 index f5aabf3..361eb03 100644 --- a/info/xemacs.info-16 +++ b/info/xemacs.info-16 @@ -30,6 +30,218 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Minor Modes, Next: Variables, Up: Customization + +Minor Modes +=========== + + Minor modes are options which you can use or not. For example, Auto +Fill mode is a minor mode in which breaks lines between words as +you type. All the minor modes are independent of each other and of the +selected major mode. Most minor modes inform you in the mode line when +they are on; for example, `Fill' in the mode line means that Auto Fill +mode is on. + + Append `-mode' to the name of a minor mode to get the name of a +command function that turns the mode on or off. Thus, the command to +enable or disable Auto Fill mode is called `M-x auto-fill-mode'. These +commands are usually invoked with `M-x', but you can bind keys to them +if you wish. With no argument, the function turns the mode on if it was +off and off if it was on. This is known as "toggling". A positive +argument always turns the mode on, and an explicit zero argument or a +negative argument always turns it off. + + Auto Fill mode allows you to enter filled text without breaking lines +explicitly. Emacs inserts newlines as necessary to prevent lines from +becoming too long. *Note Filling::. + + Overwrite mode causes ordinary printing characters to replace +existing text instead of moving it to the right. For example, if point +is in front of the `B' in `FOOBAR', and you type a `G' in Overwrite +mode, it changes to `FOOGAR', instead of `FOOGBAR'. + + Abbrev mode allows you to define abbreviations that automatically +expand as you type them. For example, `amd' might expand to `abbrev +mode'. *Note Abbrevs::, for full information. + + +File: xemacs.info, Node: Variables, Next: Keyboard Macros, Prev: Minor Modes, Up: Customization + +Variables +========= + + A "variable" is a Lisp symbol which has a value. Variable names can +contain any characters, but by convention they are words separated by +hyphens. A variable can also have a documentation string, which +describes what kind of value it should have and how the value will be +used. + + Lisp allows any variable to have any kind of value, but most +variables that Emacs uses require a value of a certain type. Often the +value has to be a string or a number. Sometimes we say that a certain +feature is turned on if a variable is "non-`nil'," meaning that if the +variable's value is `nil', the feature is off, but the feature is on +for any other value. The conventional value to turn on the +feature--since you have to pick one particular value when you set the +variable--is `t'. + + Emacs uses many Lisp variables for internal recordkeeping, as any +Lisp program must, but the most interesting variables for you are the +ones that exist for the sake of customization. Emacs does not +(usually) change the values of these variables; instead, you set the +values, and thereby alter and control the behavior of certain Emacs +commands. These variables are called "options". Most options are +documented in this manual and appear in the Variable Index (*note +Variable Index::.). + + One example of a variable which is an option is `fill-column', which +specifies the position of the right margin (as a number of characters +from the left margin) to be used by the fill commands (*note +Filling::.). + +* Menu: + +* Examining:: Examining or setting one variable's value. +* Easy Customization:: Convenient and easy customization of variables. +* Edit Options:: Examining or editing list of all variables' values. +* Locals:: Per-buffer values of variables. +* File Variables:: How files can specify variable values. + + +File: xemacs.info, Node: Examining, Next: Easy Customization, Up: Variables + +Examining and Setting Variables +------------------------------- + +`C-h v' +`M-x describe-variable' + Print the value and documentation of a variable. + +`M-x set-variable' + Change the value of a variable. + + To examine the value of a single variable, use `C-h v' +(`describe-variable'), which reads a variable name using the +minibuffer, with completion. It prints both the value and the +documentation of the variable. + + C-h v fill-column + +prints something like: + + fill-column's value is 75 + + Documentation: + *Column beyond which automatic line-wrapping should happen. + Automatically becomes local when set in any fashion. + +The star at the beginning of the documentation indicates that this +variable is an option. `C-h v' is not restricted to options; it allows +any variable name. + + If you know which option you want to set, you can use `M-x +set-variable' to set it. This prompts for the variable name in the +minibuffer (with completion), and then prompts for a Lisp expression +for the new value using the minibuffer a second time. For example, + + M-x set-variable fill-column 75 + +sets `fill-column' to 75, as if you had executed the Lisp expression +`(setq fill-column 75)'. + + Setting variables in this way, like all means of customizing Emacs +except where explicitly stated, affects only the current Emacs session. + + +File: xemacs.info, Node: Easy Customization, Next: Edit Options, Prev: Examining, Up: Variables + +Easy Customization Interface +---------------------------- + + A convenient way to find the user option variables that you want to +change, and then change them, is with `M-x customize'. This command +creates a "customization buffer" with which you can browse through the +Emacs user options in a logically organized structure, then edit and +set their values. You can also use the customization buffer to save +settings permanently. (Not all Emacs user options are included in this +structure as of yet, but we are adding the rest.) + +* Menu: + +* Groups: Customization Groups. + How options are classified in a structure. +* Changing an Option:: How to edit a value and set an option. +* Face Customization:: How to edit the attributes of a face. +* Specific Customization:: Making a customization buffer for specific + options, faces, or groups. + + +File: xemacs.info, Node: Customization Groups, Next: Changing an Option, Up: Easy Customization + +Customization Groups +.................... + + For customization purposes, user options are organized into "groups" +to help you find them. Groups are collected into bigger groups, all +the way up to a master group called `Emacs'. + + `M-x customize' creates a customization buffer that shows the +top-level `Emacs' group and the second-level groups immediately under +it. It looks like this, in part: + + /- Emacs group: ---------------------------------------------------\ + [State]: visible group members are all at standard settings. + Customization of the One True Editor. + See also [Manual]. + + [Open] Editing group + Basic text editing facilities. + + [Open] External group + Interfacing to external utilities. + + MORE SECOND-LEVEL GROUPS + + \- Emacs group end ------------------------------------------------/ + +This says that the buffer displays the contents of the `Emacs' group. +The other groups are listed because they are its contents. But they +are listed differently, without indentation and dashes, because *their* +contents are not included. Each group has a single-line documentation +string; the `Emacs' group also has a `[State]' line. + + Most of the text in the customization buffer is read-only, but it +typically includes some "editable fields" that you can edit. There are +also "active fields"; this means a field that does something when you +"invoke" it. To invoke an active field, either click on it with +`Mouse-1', or move point to it and type . + + For example, the phrase `[Open]' that appears in a second-level +group is an active field. Invoking the `[Open]' field for a group +opens up a new customization buffer, which shows that group and its +contents. This field is a kind of hypertext link to another group. + + The `Emacs' group does not include any user options itself, but +other groups do. By examining various groups, you will eventually find +the options and faces that belong to the feature you are interested in +customizing. Then you can use the customization buffer to set them. + + You can view the structure of customization groups on a larger scale +with `M-x customize-browse'. This command creates a special kind of +customization buffer which shows only the names of the groups (and +options and faces), and their structure. + + In this buffer, you can show the contents of a group by invoking +`[+]'. When the group contents are visible, this button changes to +`[-]'; invoking that hides the group contents. + + Each group, option or face name in this buffer has an active field +which says `[Group]', `[Option]' or `[Face]'. Invoking that active +field creates an ordinary customization buffer showing just that group +and its contents, just that option, or just that face. This is the way +to set values in it. + + File: xemacs.info, Node: Changing an Option, Next: Face Customization, Prev: Customization Groups, Up: Easy Customization Changing an Option @@ -783,9 +995,9 @@ local map, which affects all buffers using the same major mode. * Menu: -* Interactive Rebinding:: Changing Key Bindings Interactively -* Programmatic Rebinding:: Changing Key Bindings Programmatically -* Key Bindings Using Strings::Using Strings for Changing Key Bindings +* Interactive Rebinding:: Changing Key Bindings Interactively +* Programmatic Rebinding:: Changing Key Bindings Programmatically +* Key Bindings Using Strings:: Using Strings for Changing Key Bindings  File: xemacs.info, Node: Interactive Rebinding, Next: Programmatic Rebinding, Up: Rebinding @@ -968,226 +1180,3 @@ fashion: control [ escape control @ control space - -File: xemacs.info, Node: Disabling, Prev: Rebinding, Up: Key Bindings - -Disabling Commands ------------------- - - Disabling a command marks it as requiring confirmation before it can -be executed. The purpose of disabling a command is to prevent -beginning users from executing it by accident and being confused. - - The direct mechanism for disabling a command is to have a non-`nil' -`disabled' property on the Lisp symbol for the command. These -properties are normally set by the user's `.emacs' file with Lisp -expressions such as: - - (put 'delete-region 'disabled t) - - If the value of the `disabled' property is a string, that string is -included in the message printed when the command is used: - - (put 'delete-region 'disabled - "Text deleted this way cannot be yanked back!\n") - - You can disable a command either by editing the `.emacs' file -directly or with the command `M-x disable-command', which edits the -`.emacs' file for you. *Note Init File::. - - When you attempt to invoke a disabled command interactively in Emacs, -a window is displayed containing the command's name, its documentation, -and some instructions on what to do next; then Emacs asks for input -saying whether to execute the command as requested, enable it and -execute, or cancel it. If you decide to enable the command, you are -asked whether to do this permanently or just for the current session. -Enabling permanently works by automatically editing your `.emacs' file. -You can use `M-x enable-command' at any time to enable any command -permanently. - - Whether a command is disabled is independent of what key is used to -invoke it; it also applies if the command is invoked using `M-x'. -Disabling a command has no effect on calling it as a function from Lisp -programs. - - -File: xemacs.info, Node: Syntax, Next: Init File, Prev: Key Bindings, Up: Customization - -The Syntax Table -================ - - All the Emacs commands which parse words or balance parentheses are -controlled by the "syntax table". The syntax table specifies which -characters are opening delimiters, which are parts of words, which are -string quotes, and so on. Actually, each major mode has its own syntax -table (though sometimes related major modes use the same one) which it -installs in each buffer that uses that major mode. The syntax table -installed in the current buffer is the one that all commands use, so we -call it "the" syntax table. A syntax table is a Lisp object, a vector -of length 256 whose elements are numbers. - -* Menu: - -* Entry: Syntax Entry. What the syntax table records for each character. -* Change: Syntax Change. How to change the information. - - -File: xemacs.info, Node: Syntax Entry, Next: Syntax Change, Up: Syntax - -Information About Each Character --------------------------------- - - The syntax table entry for a character is a number that encodes six -pieces of information: - - * The syntactic class of the character, represented as a small - integer - - * The matching delimiter, for delimiter characters only (the - matching delimiter of `(' is `)', and vice versa) - - * A flag saying whether the character is the first character of a - two-character comment starting sequence - - * A flag saying whether the character is the second character of a - two-character comment starting sequence - - * A flag saying whether the character is the first character of a - two-character comment ending sequence - - * A flag saying whether the character is the second character of a - two-character comment ending sequence - - The syntactic classes are stored internally as small integers, but -are usually described to or by the user with characters. For example, -`(' is used to specify the syntactic class of opening delimiters. Here -is a table of syntactic classes, with the characters that specify them. - -` ' - The class of whitespace characters. - -`w' - The class of word-constituent characters. - -`_' - The class of characters that are part of symbol names but not - words. This class is represented by `_' because the character `_' - has this class in both C and Lisp. - -`.' - The class of punctuation characters that do not fit into any other - special class. - -`(' - The class of opening delimiters. - -`)' - The class of closing delimiters. - -`'' - The class of expression-adhering characters. These characters are - part of a symbol if found within or adjacent to one, and are part - of a following expression if immediately preceding one, but are - like whitespace if surrounded by whitespace. - -`"' - The class of string-quote characters. They match each other in - pairs, and the characters within the pair all lose their syntactic - significance except for the `\' and `/' classes of escape - characters, which can be used to include a string-quote inside the - string. - -`$' - The class of self-matching delimiters. This is intended for TeX's - `$', which is used both to enter and leave math mode. Thus, a - pair of matching `$' characters surround each piece of math mode - TeX input. A pair of adjacent `$' characters act like a single - one for purposes of matching. - -`/' - The class of escape characters that always just deny the following - character its special syntactic significance. The character after - one of these escapes is always treated as alphabetic. - -`\' - The class of C-style escape characters. In practice, these are - treated just like `/'-class characters, because the extra - possibilities for C escapes (such as being followed by digits) - have no effect on where the containing expression ends. - -`<' - The class of comment-starting characters. Only single-character - comment starters (such as `;' in Lisp mode) are represented this - way. - -`>' - The class of comment-ending characters. Newline has this syntax in - Lisp mode. - - The characters flagged as part of two-character comment delimiters -can have other syntactic functions most of the time. For example, `/' -and `*' in C code, when found separately, have nothing to do with -comments. The comment-delimiter significance overrides when the pair of -characters occur together in the proper order. Only the list and sexp -commands use the syntax table to find comments; the commands -specifically for comments have other variables that tell them where to -find comments. Moreover, the list and sexp commands notice comments -only if `parse-sexp-ignore-comments' is non-`nil'. This variable is set -to `nil' in modes where comment-terminator sequences are liable to -appear where there is no comment, for example, in Lisp mode where the -comment terminator is a newline but not every newline ends a comment. - - -File: xemacs.info, Node: Syntax Change, Prev: Syntax Entry, Up: Syntax - -Altering Syntax Information ---------------------------- - - It is possible to alter a character's syntax table entry by storing -a new number in the appropriate element of the syntax table, but it -would be hard to determine what number to use. Emacs therefore -provides a command that allows you to specify the syntactic properties -of a character in a convenient way. - - `M-x modify-syntax-entry' is the command to change a character's -syntax. It can be used interactively and is also used by major modes -to initialize their own syntax tables. Its first argument is the -character to change. The second argument is a string that specifies the -new syntax. When called from Lisp code, there is a third, optional -argument, which specifies the syntax table in which to make the change. -If not supplied, or if this command is called interactively, the third -argument defaults to the current buffer's syntax table. - - 1. The first character in the string specifies the syntactic class. - It is one of the characters in the previous table (*note Syntax - Entry::.). - - 2. The second character is the matching delimiter. For a character - that is not an opening or closing delimiter, this should be a - space, and may be omitted if no following characters are needed. - - 3. The remaining characters are flags. The flag characters allowed - are: - - `1' - Flag this character as the first of a two-character comment - starting sequence. - - `2' - Flag this character as the second of a two-character comment - starting sequence. - - `3' - Flag this character as the first of a two-character comment - ending sequence. - - `4' - Flag this character as the second of a two-character comment - ending sequence. - - Use `C-h s' (`describe-syntax') to display a description of the -contents of the current syntax table. The description of each -character includes both the string you have to pass to -`modify-syntax-entry' to set up that character's current syntax, and -some English to explain that string if necessary. - diff --git a/info/xemacs.info-17 b/info/xemacs.info-17 index 34260d2..2280739 100644 --- a/info/xemacs.info-17 +++ b/info/xemacs.info-17 @@ -30,6 +30,229 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Disabling, Prev: Rebinding, Up: Key Bindings + +Disabling Commands +------------------ + + Disabling a command marks it as requiring confirmation before it can +be executed. The purpose of disabling a command is to prevent +beginning users from executing it by accident and being confused. + + The direct mechanism for disabling a command is to have a non-`nil' +`disabled' property on the Lisp symbol for the command. These +properties are normally set by the user's `.emacs' file with Lisp +expressions such as: + + (put 'delete-region 'disabled t) + + If the value of the `disabled' property is a string, that string is +included in the message printed when the command is used: + + (put 'delete-region 'disabled + "Text deleted this way cannot be yanked back!\n") + + You can disable a command either by editing the `.emacs' file +directly or with the command `M-x disable-command', which edits the +`.emacs' file for you. *Note Init File::. + + When you attempt to invoke a disabled command interactively in Emacs, +a window is displayed containing the command's name, its documentation, +and some instructions on what to do next; then Emacs asks for input +saying whether to execute the command as requested, enable it and +execute, or cancel it. If you decide to enable the command, you are +asked whether to do this permanently or just for the current session. +Enabling permanently works by automatically editing your `.emacs' file. +You can use `M-x enable-command' at any time to enable any command +permanently. + + Whether a command is disabled is independent of what key is used to +invoke it; it also applies if the command is invoked using `M-x'. +Disabling a command has no effect on calling it as a function from Lisp +programs. + + +File: xemacs.info, Node: Syntax, Next: Init File, Prev: Key Bindings, Up: Customization + +The Syntax Table +================ + + All the Emacs commands which parse words or balance parentheses are +controlled by the "syntax table". The syntax table specifies which +characters are opening delimiters, which are parts of words, which are +string quotes, and so on. Actually, each major mode has its own syntax +table (though sometimes related major modes use the same one) which it +installs in each buffer that uses that major mode. The syntax table +installed in the current buffer is the one that all commands use, so we +call it "the" syntax table. A syntax table is a Lisp object, a vector +of length 256 whose elements are numbers. + +* Menu: + +* Entry: Syntax Entry. What the syntax table records for each character. +* Change: Syntax Change. How to change the information. + + +File: xemacs.info, Node: Syntax Entry, Next: Syntax Change, Up: Syntax + +Information About Each Character +-------------------------------- + + The syntax table entry for a character is a number that encodes six +pieces of information: + + * The syntactic class of the character, represented as a small + integer + + * The matching delimiter, for delimiter characters only (the + matching delimiter of `(' is `)', and vice versa) + + * A flag saying whether the character is the first character of a + two-character comment starting sequence + + * A flag saying whether the character is the second character of a + two-character comment starting sequence + + * A flag saying whether the character is the first character of a + two-character comment ending sequence + + * A flag saying whether the character is the second character of a + two-character comment ending sequence + + The syntactic classes are stored internally as small integers, but +are usually described to or by the user with characters. For example, +`(' is used to specify the syntactic class of opening delimiters. Here +is a table of syntactic classes, with the characters that specify them. + +` ' + The class of whitespace characters. + +`w' + The class of word-constituent characters. + +`_' + The class of characters that are part of symbol names but not + words. This class is represented by `_' because the character `_' + has this class in both C and Lisp. + +`.' + The class of punctuation characters that do not fit into any other + special class. + +`(' + The class of opening delimiters. + +`)' + The class of closing delimiters. + +`'' + The class of expression-adhering characters. These characters are + part of a symbol if found within or adjacent to one, and are part + of a following expression if immediately preceding one, but are + like whitespace if surrounded by whitespace. + +`"' + The class of string-quote characters. They match each other in + pairs, and the characters within the pair all lose their syntactic + significance except for the `\' and `/' classes of escape + characters, which can be used to include a string-quote inside the + string. + +`$' + The class of self-matching delimiters. This is intended for TeX's + `$', which is used both to enter and leave math mode. Thus, a + pair of matching `$' characters surround each piece of math mode + TeX input. A pair of adjacent `$' characters act like a single + one for purposes of matching. + +`/' + The class of escape characters that always just deny the following + character its special syntactic significance. The character after + one of these escapes is always treated as alphabetic. + +`\' + The class of C-style escape characters. In practice, these are + treated just like `/'-class characters, because the extra + possibilities for C escapes (such as being followed by digits) + have no effect on where the containing expression ends. + +`<' + The class of comment-starting characters. Only single-character + comment starters (such as `;' in Lisp mode) are represented this + way. + +`>' + The class of comment-ending characters. Newline has this syntax in + Lisp mode. + + The characters flagged as part of two-character comment delimiters +can have other syntactic functions most of the time. For example, `/' +and `*' in C code, when found separately, have nothing to do with +comments. The comment-delimiter significance overrides when the pair of +characters occur together in the proper order. Only the list and sexp +commands use the syntax table to find comments; the commands +specifically for comments have other variables that tell them where to +find comments. Moreover, the list and sexp commands notice comments +only if `parse-sexp-ignore-comments' is non-`nil'. This variable is set +to `nil' in modes where comment-terminator sequences are liable to +appear where there is no comment, for example, in Lisp mode where the +comment terminator is a newline but not every newline ends a comment. + + +File: xemacs.info, Node: Syntax Change, Prev: Syntax Entry, Up: Syntax + +Altering Syntax Information +--------------------------- + + It is possible to alter a character's syntax table entry by storing +a new number in the appropriate element of the syntax table, but it +would be hard to determine what number to use. Emacs therefore +provides a command that allows you to specify the syntactic properties +of a character in a convenient way. + + `M-x modify-syntax-entry' is the command to change a character's +syntax. It can be used interactively and is also used by major modes +to initialize their own syntax tables. Its first argument is the +character to change. The second argument is a string that specifies the +new syntax. When called from Lisp code, there is a third, optional +argument, which specifies the syntax table in which to make the change. +If not supplied, or if this command is called interactively, the third +argument defaults to the current buffer's syntax table. + + 1. The first character in the string specifies the syntactic class. + It is one of the characters in the previous table (*note Syntax + Entry::.). + + 2. The second character is the matching delimiter. For a character + that is not an opening or closing delimiter, this should be a + space, and may be omitted if no following characters are needed. + + 3. The remaining characters are flags. The flag characters allowed + are: + + `1' + Flag this character as the first of a two-character comment + starting sequence. + + `2' + Flag this character as the second of a two-character comment + starting sequence. + + `3' + Flag this character as the first of a two-character comment + ending sequence. + + `4' + Flag this character as the second of a two-character comment + ending sequence. + + Use `C-h s' (`describe-syntax') to display a description of the +contents of the current syntax table. The description of each +character includes both the string you have to pass to +`modify-syntax-entry' to set up that character's current syntax, and +some English to explain that string if necessary. + + File: xemacs.info, Node: Init File, Next: Audible Bell, Prev: Syntax, Up: Customization The Init File, .emacs @@ -1060,79 +1283,3 @@ end of the buffer, check for the word `Narrow' in the mode line. If it appears, the text is still present, but marked off-limits. To make it visible again, type `C-x n w'. *Note Narrowing::. - -File: xemacs.info, Node: Unasked-for Search, Next: Emergency Escape, Prev: Text Garbled, Up: Lossage - -Spontaneous Entry to Incremental Search ---------------------------------------- - - If Emacs spontaneously displays `I-search:' at the bottom of the -screen, it means that the terminal is sending `C-s' and `C-q' according -to the poorly designed xon/xoff "flow control" protocol. You should -try to prevent this by putting the terminal in a mode where it will not -use flow control, or by giving it enough padding that it will never -send a `C-s'. If that cannot be done, you must tell Emacs to expect -flow control to be used, until you can get a properly designed terminal. - - Information on how to do these things can be found in the file -`INSTALL' in the Emacs distribution. - - -File: xemacs.info, Node: Emergency Escape, Next: Total Frustration, Prev: Unasked-for Search, Up: Lossage - -Emergency Escape ----------------- - - Because at times there have been bugs causing Emacs to loop without -checking `quit-flag', a special feature causes Emacs to be suspended -immediately if you type a second `C-g' while the flag is already set, -so you can always get out of XEmacs. Normally Emacs recognizes and -clears `quit-flag' (and quits!) quickly enough to prevent this from -happening. - - When you resume Emacs after a suspension caused by multiple `C-g', it -asks two questions before going back to what it had been doing: - - Auto-save? (y or n) - Abort (and dump core)? (y or n) - -Answer each one with `y' or `n' followed by . - - Saying `y' to `Auto-save?' causes immediate auto-saving of all -modified buffers in which auto-saving is enabled. - - Saying `y' to `Abort (and dump core)?' causes an illegal instruction -to be executed, dumping core. This is to enable a wizard to figure out -why Emacs was failing to quit in the first place. Execution does not -continue after a core dump. If you answer `n', execution does -continue. With luck, Emacs will ultimately check `quit-flag' and quit -normally. If not, and you type another `C-g', it is suspended again. - - If Emacs is not really hung, but is just being slow, you may invoke -the double `C-g' feature without really meaning to. In that case, -simply resume and answer `n' to both questions, and you will arrive at -your former state. Presumably the quit you requested will happen soon. - - The double-`C-g' feature may be turned off when Emacs is running -under a window system, since the window system always enables you to -kill Emacs or to create another window and run another program. - - -File: xemacs.info, Node: Total Frustration, Prev: Emergency Escape, Up: Lossage - -Help for Total Frustration --------------------------- - - If using Emacs (or something else) becomes terribly frustrating and -none of the techniques described above solve the problem, Emacs can -still help you. - - First, if the Emacs you are using is not responding to commands, type -`C-g C-g' to get out of it and then start a new one. - - Second, type `M-x doctor '. - - The doctor will make you feel better. Each time you say something to -the doctor, you must end it by typing . This lets the -doctor know you are finished. - diff --git a/info/xemacs.info-18 b/info/xemacs.info-18 index 0a17cb9..e92b69c 100644 --- a/info/xemacs.info-18 +++ b/info/xemacs.info-18 @@ -30,6 +30,82 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Unasked-for Search, Next: Emergency Escape, Prev: Text Garbled, Up: Lossage + +Spontaneous Entry to Incremental Search +--------------------------------------- + + If Emacs spontaneously displays `I-search:' at the bottom of the +screen, it means that the terminal is sending `C-s' and `C-q' according +to the poorly designed xon/xoff "flow control" protocol. You should +try to prevent this by putting the terminal in a mode where it will not +use flow control, or by giving it enough padding that it will never +send a `C-s'. If that cannot be done, you must tell Emacs to expect +flow control to be used, until you can get a properly designed terminal. + + Information on how to do these things can be found in the file +`INSTALL' in the Emacs distribution. + + +File: xemacs.info, Node: Emergency Escape, Next: Total Frustration, Prev: Unasked-for Search, Up: Lossage + +Emergency Escape +---------------- + + Because at times there have been bugs causing Emacs to loop without +checking `quit-flag', a special feature causes Emacs to be suspended +immediately if you type a second `C-g' while the flag is already set, +so you can always get out of XEmacs. Normally Emacs recognizes and +clears `quit-flag' (and quits!) quickly enough to prevent this from +happening. + + When you resume Emacs after a suspension caused by multiple `C-g', it +asks two questions before going back to what it had been doing: + + Auto-save? (y or n) + Abort (and dump core)? (y or n) + +Answer each one with `y' or `n' followed by . + + Saying `y' to `Auto-save?' causes immediate auto-saving of all +modified buffers in which auto-saving is enabled. + + Saying `y' to `Abort (and dump core)?' causes an illegal instruction +to be executed, dumping core. This is to enable a wizard to figure out +why Emacs was failing to quit in the first place. Execution does not +continue after a core dump. If you answer `n', execution does +continue. With luck, Emacs will ultimately check `quit-flag' and quit +normally. If not, and you type another `C-g', it is suspended again. + + If Emacs is not really hung, but is just being slow, you may invoke +the double `C-g' feature without really meaning to. In that case, +simply resume and answer `n' to both questions, and you will arrive at +your former state. Presumably the quit you requested will happen soon. + + The double-`C-g' feature may be turned off when Emacs is running +under a window system, since the window system always enables you to +kill Emacs or to create another window and run another program. + + +File: xemacs.info, Node: Total Frustration, Prev: Emergency Escape, Up: Lossage + +Help for Total Frustration +-------------------------- + + If using Emacs (or something else) becomes terribly frustrating and +none of the techniques described above solve the problem, Emacs can +still help you. + + First, if the Emacs you are using is not responding to commands, type +`C-g C-g' to get out of it and then start a new one. + + Second, type `M-x doctor '. + + The doctor will make you feel better. Each time you say something to +the doctor, you must end it by typing . This lets the +doctor know you are finished. + + File: xemacs.info, Node: Bugs, Prev: Lossage, Up: Top Reporting Bugs diff --git a/info/xemacs.info-19 b/info/xemacs.info-19 index 6b02c95..6ee9d4f 100644 --- a/info/xemacs.info-19 +++ b/info/xemacs.info-19 @@ -761,7 +761,7 @@ Key (Character) Index * C-x DEL <2>: Kill Errors. * C-x DEL: Killing. * C-x e: Basic Kbd Macro. -* C-x ESC: Repetition. +* C-x ESC ESC: Repetition. * C-x f: Fill Commands. * C-x h: Marking Objects. * C-x k: Kill Buffer. @@ -771,10 +771,18 @@ Key (Character) Index * C-x n w: Narrowing. * C-x o: Other Window. * C-x q: Kbd Macro Query. +* C-x r +: RegNumbers. +* C-x r b: Bookmarks. * C-x r g: RegText. +* C-x r i: RegText. * C-x r j: RegPos. +* C-x r l: Bookmarks. +* C-x r m: Bookmarks. +* C-x r n: RegNumbers. +* C-x r r: RegRect. * C-x r s: RegText. * C-x r SPC: RegPos. +* C-x r w: RegConfig. * C-x RET: Mule Intro. * C-x RET c: Specify Coding. * C-x RET C-\: Select Input Method. @@ -893,14 +901,18 @@ Key (Character) Index * M-n <1>: Nroff Mode. * M-n: Repetition. * M-n (isearch-mode): Incremental Search. +* M-n (minibuffer history): Minibuffer History. * M-n (Shell mode): Shell Mode. * M-p <1>: Nroff Mode. * M-p: Repetition. * M-p (isearch-mode): Incremental Search. +* M-p (minibuffer history): Minibuffer History. * M-p (Shell mode): Shell Mode. * M-q: Fill Commands. * M-r: Basic. +* M-r (minibuffer history): Minibuffer History. * M-s: Fill Commands. +* M-s (minibuffer history): Minibuffer History. * M-SPC: Killing. * M-t <1>: Words. * M-t: Transpose. @@ -940,7 +952,7 @@ Key (Character) Index * S (Calendar mode): Sunrise/Sunset. * S-TAB (customization buffer): Changing an Option. * shift key: Intro to Keystrokes. -* SPC: Completion. +* SPC: Completion Commands. * SPC (Calendar mode): General Calendar. * SPC (query-replace): Query Replace. * super key <1>: Super and Hyper Keys. @@ -951,7 +963,7 @@ Key (Character) Index * TAB <2>: Text Mode. * TAB <3>: Indentation. * TAB <4>: Major Modes. -* TAB <5>: Completion. +* TAB <5>: Completion Example. * TAB: String Key Sequences. * TAB (customization buffer): Changing an Option. * TAB (Shell mode): Shell Mode. diff --git a/info/xemacs.info-20 b/info/xemacs.info-20 index 0b844bd..14d8650 100644 --- a/info/xemacs.info-20 +++ b/info/xemacs.info-20 @@ -80,6 +80,14 @@ Command and Function Index * beginning-of-defun: Defuns. * beginning-of-fortran-subprogram: Fortran Motion. * beginning-of-line: Basic. +* bookmark-delete: Bookmarks. +* bookmark-insert: Bookmarks. +* bookmark-insert-location: Bookmarks. +* bookmark-jump: Bookmarks. +* bookmark-load: Bookmarks. +* bookmark-save: Bookmarks. +* bookmark-set: Bookmarks. +* bookmark-write: Bookmarks. * buffer-menu: Several Buffers. * byte-compile-and-load-file: Compiling Libraries. * byte-compile-buffer: Compiling Libraries. @@ -146,6 +154,7 @@ Command and Function Index * capitalize-word <1>: Case. * capitalize-word: Fixing Case. * center-line: Fill Commands. +* choose-completion: Completion Commands. * clear-rectangle: Rectangles. * comint-delchar-or-maybe-eof: Shell Mode. * comint-dynamic-complete: Shell Mode. @@ -165,8 +174,8 @@ Command and Function Index * conx-save: CONX. * copy-file: Misc File Ops. * copy-last-shell-input: Shell Mode. +* copy-rectangle-to-register: RegRect. * copy-region-as-kill: Kill Ring. -* copy-region-to-rectangle: RegRect. * copy-to-buffer: Accumulating Text. * copy-to-register: RegText. * count-lines-page: Pages. @@ -329,6 +338,7 @@ Command and Function Index * forward-sexp: Lists. * forward-text-line: Nroff Mode. * forward-word: Words. +* frame-configuration-to-register: RegConfig. * global-set-key <1>: Programmatic Rebinding. * global-set-key: Interactive Rebinding. * goto-char: Basic. @@ -342,6 +352,7 @@ Command and Function Index * hide-subtree: Outline Visibility. * holidays: Holidays. * include-other-diary-files: Included Diary Files. +* increment-register: RegNumbers. * indent-c-exp: Multi-line Indent. * indent-for-comment: Comments. * indent-new-comment-line: Comments. @@ -390,7 +401,8 @@ Command and Function Index * isearch-ring-retreat: Incremental Search. * isearch-yank-line: Incremental Search. * isearch-yank-word: Incremental Search. -* jump-to-register: Split Window. +* jump-to-register <1>: Split Window. +* jump-to-register: RegPos. * just-one-space: Killing. * kbd-macro-query: Kbd Macro Query. * kill-all-abbrevs: Defining Abbrevs. @@ -417,6 +429,7 @@ Command and Function Index * lisp-mode: External Lisp. * lisp-send-defun: External Lisp. * list-abbrevs: Editing Abbrevs. +* list-bookmarks: Bookmarks. * list-buffers: List Buffers. * list-calendar-holidays: Holidays. * list-coding-systems: Coding Systems. @@ -486,9 +499,10 @@ Command and Function Index * mark-whole-buffer: Marking Objects. * mark-word <1>: Words. * mark-word: Marking Objects. -* minibuffer-complete: Completion. -* minibuffer-complete-word: Completion. +* minibuffer-complete: Completion Example. +* minibuffer-complete-word: Completion Commands. * modify-syntax-entry: Syntax Change. +* mouse-choose-completion: Completion Commands. * mouse-del-char: Additional Mouse Operations. * mouse-delete-window: Additional Mouse Operations. * mouse-keep-one-window: Additional Mouse Operations. @@ -512,9 +526,13 @@ Command and Function Index * newline-and-indent: Basic Indent. * next-complex-command: Repetition. * next-error: Compilation. +* next-history-element: Minibuffer History. * next-line: Basic. +* next-list-mode-item: Completion Commands. +* next-matching-history-element: Minibuffer History. * not-modified: Saving. * nroff-mode: Nroff Mode. +* number-to-register: RegNumbers. * occur: Other Repeating Search. * open-dribble-file: Bugs. * open-line: Blank Lines. @@ -562,7 +580,10 @@ Command and Function Index * prefer-coding-system: Recognize Coding. * prepend-to-buffer: Accumulating Text. * previous-complex-command: Repetition. +* previous-history-element: Minibuffer History. * previous-line: Basic. +* previous-list-mode-item: Completion Commands. +* previous-matching-history-element: Minibuffer History. * print-buffer: Hardcopy. * print-diary-entries <1>: Diary Customizing. * print-diary-entries: Diary Commands. @@ -581,7 +602,6 @@ Command and Function Index * recenter: Basic. * recover-file: Recover. * redraw-calendar: General Calendar. -* register-to-point: RegPos. * relabel-menu-item: Menu Customization. * remove-directory: File Names. * rename-buffer: Misc Buffer. @@ -741,7 +761,8 @@ Command and Function Index * widget-backward: Changing an Option. * widget-complete: Changing an Option. * widget-forward: Changing an Option. -* window-configuration-to-register: Split Window. +* window-configuration-to-register <1>: Split Window. +* window-configuration-to-register: RegConfig. * word-search-backward: Word Search. * word-search-forward: Word Search. * write-abbrev-file: Saving Abbrevs. diff --git a/info/xemacs.info-21 b/info/xemacs.info-21 index 24632e9..8d9f042 100644 --- a/info/xemacs.info-21 +++ b/info/xemacs.info-21 @@ -65,6 +65,8 @@ Variable Index * bell-volume: Audible Bell. * blink-matching-paren: Matching. * blink-matching-paren-distance: Matching. +* bookmark-save-flag: Bookmarks. +* bookmark-search-size: Bookmarks. * buffer-file-coding-system: Recognize Coding. * buffer-file-name: Visiting. * buffer-file-truename: Visiting. @@ -114,8 +116,8 @@ Variable Index * comment-start-skip: Comments. * compare-ignore-case: Comparing Files. * compile-command: Compilation. -* completion-auto-help: Completion. -* completion-ignored-extensions: Completion. +* completion-auto-help: Completion Options. +* completion-ignored-extensions: Completion Options. * create-frame-hook: XEmacs under X. * ctl-arrow: Display Vars. * ctl-x-map: Keymaps. @@ -232,7 +234,8 @@ Variable Index * mark-ring: Mark Ring. * mark-ring-max: Mark Ring. * meta-flag: Meta Key. -* minibuffer-confirm-incomplete: Completion. +* minibuffer-confirm-incomplete <1>: Completion Options. +* minibuffer-confirm-incomplete: Minibuffer Edit. * minibuffer-local-completion-map: Keymaps. * minibuffer-local-map: Keymaps. * minibuffer-local-must-match-map: Keymaps. @@ -328,6 +331,7 @@ Concept Index * Menu: * .mailrc file: Mail Headers. +* // in file name: Minibuffer File. * Abbrev mode: Minor Modes. * abbrevs: Abbrevs. * aborting: Quitting. @@ -361,6 +365,7 @@ Concept Index * blank lines: Blank Lines. * body lines (Outline mode): Outline Format. * bold font: Face Customization. +* bookmarks: Bookmarks. * boredom: Amusements. * buffer: Frame. * buffer menu: Several Buffers. @@ -451,6 +456,7 @@ Concept Index * disabling menu items: Menu Customization. * Distribution: License. * doctor: Total Frustration. +* double slash in file name: Minibuffer File. * drastic changes: Reverting. * dribble file: Bugs. * early package hierarchies: Startup Paths. @@ -515,6 +521,7 @@ Concept Index * Help menu: Pull-down Menus. * hierarchies: Startup Paths. * history of commands: Repetition. +* history of minibuffer input: Minibuffer History. * holiday forms: Holiday Customizing. * holidays: Holidays. * horizontal scrolling: Horizontal Scrolling. @@ -592,6 +599,7 @@ Concept Index * minibuffer <1>: Keymaps. * minibuffer <2>: M-x. * minibuffer: Minibuffer. +* minibuffer history: Minibuffer History. * minor modes: Minor Modes. * mistakes, correcting <1>: Fixit. * mistakes, correcting: Undo. @@ -716,6 +724,7 @@ Concept Index * single-file packages: Package Terminology. * site-specific directories: Startup Paths. * Size menu item: Options Menu. +* slashes repeated in file name: Minibuffer File. * snapshots and version control: Snapshots. * sorting: Sorting. * sorting diary entries: Fancy Diary Display. diff --git a/info/xemacs.info-3 b/info/xemacs.info-3 index 56cfe9c..1b28053 100644 --- a/info/xemacs.info-3 +++ b/info/xemacs.info-3 @@ -1058,18 +1058,18 @@ File: xemacs.info, Node: Minibuffer, Next: M-x, Prev: Undo, Up: Top The Minibuffer ************** - Emacs commands use the "minibuffer" to read arguments more -complicated than a single number. Minibuffer arguments can be file -names, buffer names, Lisp function names, Emacs command names, Lisp -expressions, and many other things, depending on the command reading the -argument. To edit the argument in the minibuffer, you can use Emacs -editing commands. + The "minibuffer" is the facility used by XEmacs commands to read +arguments more complicated than a single number. Minibuffer arguments +can be file names, buffer names, Lisp function names, XEmacs command +names, Lisp expressions, and many other things, depending on the command +reading the argument. You can use the usual XEmacs editing commands in +the minibuffer to edit the argument text. When the minibuffer is in use, it appears in the echo area, and the cursor moves there. The beginning of the minibuffer line displays a -"prompt" indicating what kind of input you should supply and how it -will be used. The prompt is often derived from the name of the command -the argument is for. The prompt normally ends with a colon. +"prompt" which says what kind of input you should supply and how it +will be used. Often this prompt is derived from the name of the command +that the argument is for. The prompt normally ends with a colon. Sometimes a "default argument" appears in parentheses after the colon; it, too, is part of the prompt. The default is used as the @@ -1078,13 +1078,14 @@ argument value if you enter an empty argument (e.g., by just typing default, which is the name of the buffer that will be used if you type just . - The simplest way to give a minibuffer argument is to type the text -you want, terminated by to exit the minibuffer. To get out of -the minibuffer and cancel the command that it was for, type `C-g'. + The simplest way to enter a minibuffer argument is to type the text +you want, terminated by which exits the minibuffer. You can +cancel the command that wants the argument, and get out of the +minibuffer, by typing `C-g'. Since the minibuffer uses the screen space of the echo area, it can -conflict with other ways Emacs customarily uses the echo area. Here is -how Emacs handles such conflicts: +conflict with other ways XEmacs customarily uses the echo area. Here is +how XEmacs handles such conflicts: * If a command gets an error while you are in the minibuffer, this does not cancel the minibuffer. However, the echo area is needed @@ -1092,10 +1093,10 @@ how Emacs handles such conflicts: hidden for a while. It comes back after a few seconds, or as soon as you type anything. - * If you use a command in the minibuffer whose purpose is to print a - message in the echo area (for example `C-x =') the message is - displayed normally, and the minibuffer is hidden for a while. It - comes back after a few seconds, or as soon as you type anything. + * If in the minibuffer you use a command whose purpose is to print a + message in the echo area, such as `C-x =', the message is printed + normally, and the minibuffer is hidden for a while. It comes back + after a few seconds, or as soon as you type anything. * Echoing of keystrokes does not take place while the minibuffer is in use. @@ -1105,6 +1106,7 @@ how Emacs handles such conflicts: * File: Minibuffer File. Entering file names with the minibuffer. * Edit: Minibuffer Edit. How to edit in the minibuffer. * Completion:: An abbreviation facility for minibuffer input. +* Minibuffer History:: Reusing recent minibuffer arguments. * Repetition:: Re-executing commands that used the minibuffer.  @@ -1115,30 +1117,32 @@ Minibuffers for File Names Sometimes the minibuffer starts out with text in it. For example, when you are supposed to give a file name, the minibuffer starts out -containing the "default directory", which ends with a slash. This -informs you in which directory the file will be looked for if you do -not specify a different one. For example, the minibuffer might start -out with: +containing the "default directory", which ends with a slash. This is +to inform you which directory the file will be found in if you do not +specify a directory. + + For example, the minibuffer might start out with these contents: Find File: /u2/emacs/src/ -where `Find File: ' is the prompt. Typing `buffer.c' specifies the file -`/u2/emacs/src/buffer.c'. To find files in nearby directories, use -`..'; thus, if you type `../lisp/simple.el', the file that you visit -will be the one named -`/u2/emacs/lisp/simple.el'. Alternatively, you can use `M-' to -kill directory names you don't want (*note Words::.). +where `Find File: ' is the prompt. Typing `buffer.c' specifies the +file `/u2/emacs/src/buffer.c'. To find files in nearby directories, +use `..'; thus, if you type `../lisp/simple.el', you will get the file +named `/u2/emacs/lisp/simple.el'. Alternatively, you can kill with +`M-' the directory names you don't want (*note Words::.). - You can also type an absolute file name, one starting with a slash -or a tilde, ignoring the default directory. For example, to find the -file `/etc/termcap', just type the name, giving: + If you don't want any of the default, you can kill it with `C-a +C-k'. But you don't need to kill the default; you can simply ignore it. +Insert an absolute file name, one starting with a slash or a tilde, +after the default directory. For example, to specify the file +`/etc/termcap', just insert that name, giving these minibuffer contents: Find File: /u2/emacs/src//etc/termcap -Two slashes in a row are not normally meaningful in Unix file names, but -they are allowed in XEmacs. They mean, "ignore everything before the -second slash in the pair." Thus, `/u2/emacs/src/' is ignored, and you -get the file `/etc/termcap'. +XEmacs gives a special meaning to a double slash (which is not normally +a useful thing to write): it means, "ignore everything before the +second slash in the pair." Thus, `/u2/emacs/src/' is ignored in the +example above, and you get the file `/etc/termcap'. If you set `insert-default-directory' to `nil', the default directory is not inserted in the minibuffer. This way, the minibuffer @@ -1151,50 +1155,53 @@ File: xemacs.info, Node: Minibuffer Edit, Next: Completion, Prev: Minibuffer Editing in the Minibuffer ========================= - The minibuffer is an Emacs buffer (albeit a peculiar one), and the -usual Emacs commands are available for editing the text of an argument + The minibuffer is an XEmacs buffer (albeit a peculiar one), and the +usual XEmacs commands are available for editing the text of an argument you are entering. Since in the minibuffer is defined to exit the minibuffer, you -must use `C-o' or `C-q ' to insert a newline into the minibuffer. -(Recall that a newline is really the character.) +can't use it to insert a newline in the minibuffer. To do that, type +`C-o' or `C-q C-j'. (Recall that a newline is really the character +control-J.) - The minibuffer has its own window, which always has space on the + The minibuffer has its own window which always has space on the screen but acts as if it were not there when the minibuffer is not in -use. The minibuffer window is just like the others; you can switch to -another window with `C-x o', edit text in other windows, and perhaps -even visit more files before returning to the minibuffer to submit the -argument. You can kill text in another window, return to the minibuffer -window, and then yank the text to use it in the argument. *Note -Windows::. - - There are, however, some restrictions on the use of the minibuffer -window. You cannot switch buffers in it--the minibuffer and its window -are permanently attached. You also cannot split or kill the minibuffer -window, but you can make it taller with `C-x ^'. - - If you are in the minibuffer and issue a command that displays help -text in another window, that window will be scrolled if you type -`M-C-v' while in the minibuffer until you exit the minibuffer. This -feature is helpful if a completing minibuffer gives you a long list of -possible completions. +use. When the minibuffer is in use, its window is just like the +others; you can switch to another window with `C-x o', edit text in +other windows and perhaps even visit more files, before returning to the +minibuffer to submit the argument. You can kill text in another window, +return to the minibuffer window, and then yank the text to use it in the +argument. *Note Windows::. + + There are some restrictions on the use of the minibuffer window, +however. You cannot switch buffers in it--the minibuffer and its +window are permanently attached. Also, you cannot split or kill the +minibuffer window. But you can make it taller in the normal fashion with +`C-x ^'. + + If while in the minibuffer you issue a command that displays help +text of any sort in another window, you can use the `C-M-v' command +while in the minibuffer to scroll the help text. This lasts until you +exit the minibuffer. This feature is especially useful if a completing +minibuffer gives you a list of possible completions. *Note Other +Window::. If the variable `minibuffer-confirm-incomplete' is `t', you are asked for confirmation if there is no known completion for the text you typed. For example, if you attempted to visit a non-existent file, the minibuffer might read: - Find File:chocolate_bar.c [no completions, confirm] + Find File: chocolate_bar.c [no completions, confirm] If you press `Return' again, that confirms the filename. Otherwise, you can continue editing it. - Emacs supports recursive use of the minibuffer. However, it is easy -to do this by accident (because of autorepeating keyboards, for -example) and get confused. Therefore, most Emacs commands that use the + XEmacs supports recursive use of the minibuffer. However, it is easy +to do this by accident (because of autorepeating keyboards, for example) +and get confused. Therefore, most XEmacs commands that use the minibuffer refuse to operate if the minibuffer window is selected. If the minibuffer is active but you have switched to a different window, recursive use of the minibuffer is allowed--if you know enough to try to do this, you probably will not get confused. - If you set the variable `enable-recursive-minibuffers' to be + If you set the variable `enable-recursive-minibuffers' to a non-`nil', recursive use of the minibuffer is always allowed. diff --git a/info/xemacs.info-4 b/info/xemacs.info-4 index c4a0459..176992d 100644 --- a/info/xemacs.info-4 +++ b/info/xemacs.info-4 @@ -30,34 +30,36 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  -File: xemacs.info, Node: Completion, Next: Repetition, Prev: Minibuffer Edit, Up: Minibuffer +File: xemacs.info, Node: Completion, Next: Minibuffer History, Prev: Minibuffer Edit, Up: Minibuffer Completion ========== - When appropriate, the minibuffer provides a "completion" facility. -You type the beginning of an argument and one of the completion keys, -and Emacs visibly fills in the rest, depending on what you have already -typed. + For certain kinds of arguments, you can use "completion" to enter +the argument value. Completion means that you type part of the +argument, then XEmacs visibly fills in the rest, or as much as can be +determined from the part you have typed. When completion is available, certain keys--, , and ---are redefined to complete an abbreviation present in the -minibuffer into a longer string that it stands for, by matching it -against a set of "completion alternatives" provided by the command -reading the argument. `?' is defined to display a list of possible -completions of what you have inserted. - - For example, when the minibuffer is being used by `Meta-x' to read -the name of a command, it is given a list of all available Emacs command -names to complete against. The completion keys match the text in the -minibuffer against all the command names, find any additional -characters of the name that are implied by the ones already present in -the minibuffer, and add those characters to the ones you have given. +--are rebound to complete the text present in the minibuffer into +a longer string that it stands for, by matching it against a set of +"completion alternatives" provided by the command reading the argument. +`?' is defined to display a list of possible completions of what you +have inserted. + + For example, when `M-x' uses the minibuffer to read the name of a +command, it provides a list of all available XEmacs command names to +complete against. The completion keys match the text in the minibuffer +against all the command names, find any additional name characters +implied by the ones already present in the minibuffer, and add those +characters to the ones you have given. This is what makes it possible +to type `M-x inse b ' instead of `M-x insert-buffer ' +(for example). Case is normally significant in completion because it is significant -in most of the names that you can complete (buffer names, file names, -and command names). Thus, `fo' will not complete to `Foo'. When you -are completing a name in which case does not matter, case may be ignored +in most of the names that you can complete (buffer names, file names and +command names). Thus, `fo' does not complete to `Foo'. When you are +completing a name in which case does not matter, case may be ignored for completion's sake if specified by program. When a completion list is displayed, the completions will highlight @@ -65,40 +67,53 @@ as you move the mouse over them. Clicking the middle mouse button on any highlighted completion will "select" it just as if you had typed it in and hit . -A Completion Example --------------------- +* Menu: + +* Example: Completion Example. +* Commands: Completion Commands. +* Strict Completion:: +* Options: Completion Options. + + +File: xemacs.info, Node: Completion Example, Next: Completion Commands, Prev: Completion, Up: Completion - Consider the following example. If you type `Meta-x au ', +Completion Example +------------------ + + A concrete example may help here. If you type `M-x au ', the looks for alternatives (in this case, command names) that start -with `au'. There are only two commands: `auto-fill-mode' and -`auto-save-mode'. They are the same as far as `auto-', so the `au' in -the minibuffer changes to `auto-'. +with `au'. There are several, including `auto-fill-mode' and +`auto-save-mode'--but they are all the same as far as `auto', so the +`au' in the minibuffer changes to `auto'. - If you type again immediately, there are multiple possibilities -for the very next character--it could be `s' or `f'--so no more -characters are added; but a list of all possible completions is -displayed in another window. + If you type again immediately, there are multiple +possibilities for the very next character--it could be any of `c-'--so +no more characters are added; instead, displays a list of all +possible completions in another window. If you go on to type `f ', this sees `auto-f'. The only -command name starting this way is `auto-fill-mode', so completion -inserts the rest of that command. You now have `auto-fill-mode' in the -minibuffer after typing just `au f '. Note that has -this effect because in the minibuffer it is bound to the function -`minibuffer-complete' when completion is supposed to be done. +command name starting this way is `auto-fill-mode', so completion fills +in the rest of that. You now have `auto-fill-mode' in the minibuffer +after typing just `au f '. Note that has this effect +because in the minibuffer it is bound to the command +`minibuffer-complete' when completion is available. + + +File: xemacs.info, Node: Completion Commands, Next: Strict Completion, Prev: Completion Example, Up: Completion Completion Commands ------------------- - Here is a list of all the completion commands defined in the -minibuffer when completion is available. + Here is a list of the completion commands defined in the minibuffer +when completion is available. `' Complete the text in the minibuffer as much as possible (`minibuffer-complete'). `' - Complete the text in the minibuffer but don't add or fill out more - than one word (`minibuffer-complete-word'). + Complete the minibuffer text, but don't go beyond one word + (`minibuffer-complete-word'). `' Submit the text in the minibuffer as the argument, possibly @@ -117,13 +132,48 @@ minibuffer when completion is available. Clicking will select the highlighted completion and exit the minibuffer. (`minibuf-select-highlighted-completion'). - completes in a way that is similar to , but it never goes -beyond the next hyphen or space. If you have `auto-f' in the -minibuffer and type , it finds that the completion is -`auto-fill-mode', but it stops completing after `fill-'. The result is -`auto-fill-'. Another at this point completes all the way to -`auto-fill-mode'. in the minibuffer runs the function -`minibuffer-complete-word' when completion is available. + completes much like , but never goes beyond the next +hyphen or space. If you have `auto-f' in the minibuffer and type +, it finds that the completion is `auto-fill-mode', but it stops +completing after `fill-'. This gives `auto-fill-'. Another at +this point completes all the way to `auto-fill-mode'. in the +minibuffer when completion is available runs the command +`minibuffer-complete-word'. + + Here are some commands you can use to choose a completion from a +window that displays a list of completions: + +`button2up' + Clicking mouse button 2 on a completion in the list of possible + completions chooses that completion (`mouse-choose-completion'). + You normally use this command while point is in the minibuffer; + but you must click in the list of completions, not in the + minibuffer itself. + +`' + Typing *in the completion list buffer* chooses the + completion that point is in or next to (`choose-completion'). To + use this command, you must first switch windows to the window that + shows the list of completions. + +`' +`' +`C-f' + Typing the right-arrow key , or `C-f' *in the + completion list buffer* moves point to the following completion + (`next-list-mode-item'). + +`' +`C-b' + Typing the left-arrow key or `C-b' *in the completion list + buffer* moves point toward the beginning of the buffer, to the + previous completion (`previous-list-mode-item'). + + +File: xemacs.info, Node: Strict Completion, Next: Completion Options, Prev: Completion Commands, Up: Completion + +Strict Completion +----------------- There are three different ways that can work in completing minibuffers, depending on how the argument will be used. @@ -144,27 +194,35 @@ minibuffers, depending on how the argument will be used. Cautious completion is used for reading file names for files that must already exist. - * "Permissive" completion is used when any string is meaningful, and - the list of completion alternatives is just a guide. For example, - when `C-x C-f' reads the name of a file to visit, any file name is - allowed, in case you want to create a file. In permissive - completion, takes the text in the minibuffer exactly as - given, without completing it. + * "Permissive" completion is used when any string whatever is + meaningful, and the list of completion alternatives is just a + guide. For example, when `C-x C-f' reads the name of a file to + visit, any file name is allowed, in case you want to create a + file. In permissive completion, takes the text in the + minibuffer exactly as given, without completing it. + + The completion commands display a list of all possible completions in +a window whenever there is more than one possibility for the very next +character. Also, typing `?' explicitly requests such a list. If the +list of completions is long, you can scroll it with `C-M-v' (*note +Other Window::.). + + +File: xemacs.info, Node: Completion Options, Prev: Strict Completion, Up: Completion - The completion commands display a list of all possible completions -in a window whenever there is more than one possibility for the very -next character. Typing `?' explicitly requests such a list. The list -of completions counts as help text, so `C-M-v' typed in the minibuffer -scrolls the list. +Completion Options +------------------ When completion is done on file names, certain file names are usually ignored. The variable `completion-ignored-extensions' contains a list of strings; a file whose name ends in any of those strings is ignored as a possible completion. The standard value of this variable has several elements including `".o"', `".elc"', `".dvi"' and `"~"'. The -effect is that, for example, `foo' completes to `foo.c' even though -`foo.o' exists as well. If the only possible completions are files -that end in "ignored" strings, they are not ignored. +effect is that, for example, `foo' can complete to `foo.c' even though +`foo.o' exists as well. However, if *all* the possible completions end +in "ignored" strings, then they are not ignored. Ignored extensions do +not apply to lists of completions--those always mention all possible +completions. If a completion command finds the next character is undetermined, it automatically displays a list of all possible completions. If the @@ -177,20 +235,89 @@ completions, an extra must be typed to confirm the response. This is helpful for catching typos.  -File: xemacs.info, Node: Repetition, Prev: Completion, Up: Minibuffer +File: xemacs.info, Node: Minibuffer History, Next: Repetition, Prev: Completion, Up: Minibuffer + +Minibuffer History +================== + + Every argument that you enter with the minibuffer is saved on a +"minibuffer history list" so that you can use it again later in another +argument. Special commands load the text of an earlier argument in the +minibuffer. They discard the old minibuffer contents, so you can think +of them as moving through the history of previous arguments. + +`' +`M-p' + Move to the next earlier argument string saved in the minibuffer + history (`previous-history-element'). + +`' +`M-n' + Move to the next later argument string saved in the minibuffer + history (`next-history-element'). + +`M-r REGEXP ' + Move to an earlier saved argument in the minibuffer history that + has a match for REGEXP (`previous-matching-history-element'). + +`M-s REGEXP ' + Move to a later saved argument in the minibuffer history that has a + match for REGEXP (`next-matching-history-element'). + + The simplest way to reuse the saved arguments in the history list is +to move through the history list one element at a time. While in the +minibuffer, use `M-p' or up-arrow (`previous-history-element') to "move +to" the next earlier minibuffer input, and use `M-n' or down-arrow +(`next-history-element') to "move to" the next later input. + + The previous input that you fetch from the history entirely replaces +the contents of the minibuffer. To use it as the argument, exit the +minibuffer as usual with . You can also edit the text before you +reuse it; this does not change the history element that you "moved" to, +but your new argument does go at the end of the history list in its own +right. + + For many minibuffer arguments there is a "default" value. In some +cases, the minibuffer history commands know the default value. Then you +can insert the default value into the minibuffer as text by using `M-n' +to move "into the future" in the history. + + There are also commands to search forward or backward through the +history; they search for history elements that match a regular +expression that you specify with the minibuffer. `M-r' +(`previous-matching-history-element') searches older elements in the +history, while `M-s' (`next-matching-history-element') searches newer +elements. By special dispensation, these commands can use the +minibuffer to read their arguments even though you are already in the +minibuffer when you issue them. As with incremental searching, an +uppercase letter in the regular expression makes the search +case-sensitive (*note Search Case::.). + + All uses of the minibuffer record your input on a history list, but +there are separate history lists for different kinds of arguments. For +example, there is a list for file names, used by all the commands that +read file names. + + There are several other very specific history lists, including one +for command names read by `M-x', one for buffer names, one for arguments +of commands like `query-replace', and one for compilation commands read +by `compile'. Finally, there is one "miscellaneous" history list that +most minibuffer arguments use. + + +File: xemacs.info, Node: Repetition, Prev: Minibuffer History, Up: Minibuffer Repeating Minibuffer Commands ============================= Every command that uses the minibuffer at least once is recorded on a -special history list, together with the values of the minibuffer -arguments, so that you can repeat the command easily. In particular, -every use of `Meta-x' is recorded, since `M-x' uses the minibuffer to -read the command name. +special history list, together with the values of its arguments, so that +you can repeat the entire command. In particular, every use of `M-x' +is recorded there, since `M-x' uses the minibuffer to read the command +name. -`C-x ' - Re-execute a recent minibuffer command - (`repeat-complex-command'). +`C-x ' + Re-execute a recent minibuffer command (`repeat-complex-command'). `M-p' Within `C-x ', move to previous recorded command @@ -202,36 +329,37 @@ read the command name. `M-x list-command-history' Display the entire command history, showing all the commands `C-x - ' can repeat, most recent first. + ' can repeat, most recent first. - `C-x ' is used to re-execute a recent command that used the -minibuffer. With no argument, it repeats the last command. A numeric -argument specifies which command to repeat; 1 means the last one, and -larger numbers specify earlier commands. + `C-x ' is used to re-execute a recent minibuffer-using +command. With no argument, it repeats the last such command. A +numeric argument specifies which command to repeat; one means the last +one, and larger numbers specify earlier ones. - `C-x ' works by turning the previous command into a Lisp + `C-x ' works by turning the previous command into a Lisp expression and then entering a minibuffer initialized with the text for that expression. If you type just , the command is repeated as -before. You can also change the command by editing the Lisp expression. -The expression you finally submit will be executed. The repeated -command is added to the front of the command history unless it is -identical to the most recently executed command already there. +before. You can also change the command by editing the Lisp +expression. Whatever expression you finally submit is what will be +executed. The repeated command is added to the front of the command +history unless it is identical to the most recently executed command +already there. Even if you don't understand Lisp syntax, it will probably be obvious which command is displayed for repetition. If you do not change the text, you can be sure the command will repeat exactly as before. - If you are in the minibuffer for `C-x ' and the command shown -to you is not the one you want to repeat, you can move around the list -of previous commands using `M-n' and `M-p'. `M-p' replaces the + If you are in the minibuffer for `C-x ' and the command +shown to you is not the one you want to repeat, you can move around the +list of previous commands using `M-n' and `M-p'. `M-p' replaces the contents of the minibuffer with the next earlier recorded command, and `M-n' replaces it with the next later command. After finding the desired previous command, you can edit its expression and then resubmit it by typing . Any editing you have done on the command to be repeated is lost if you use `M-n' or `M-p'. - `M-n' and `M-p' are specially defined within `C-x ' to run the -commands `previous-history-element' and `next-history-element'. + `M-n' and `M-p' are specially defined within `C-x ' to +run the commands `previous-history-element' and `next-history-element'. The list of previous commands using the minibuffer is stored as a Lisp list in the variable `command-history'. Each element of the list @@ -1012,209 +1140,3 @@ and the text of the selection is deleted. selected text is immediately inserted after being selected; and the selection is immediately disowned afterwards. - -File: xemacs.info, Node: Killing, Next: Yanking, Prev: Additional Mouse Operations, Up: Top - -Deletion and Killing -==================== - - Most commands that erase text from the buffer save it. You can get -the text back if you change your mind, or you can move or copy it to -other parts of the buffer. Commands which erase text and save it in the -kill ring are known as "kill" commands. Some other commands erase text -but do not save it; they are known as "delete" commands. (This -distinction is made only for erasing text in the buffer.) - - The commands' names and individual descriptions use the words `kill' -and `delete' to indicate what they do. If you perform a kill or delete -command by mistake, use the `C-x u' (`undo') command to undo it (*note -Undo::.). The delete commands include `C-d' (`delete-char') and -(`delete-backward-char'), which delete only one character at a time, -and those commands that delete only spaces or newlines. Commands that -can destroy significant amounts of nontrivial data usually kill. - -Deletion --------- - -`C-d' - Delete next character (`delete-char'). - -`' - Delete previous character (`delete-backward-char'). - -`M-\' - Delete spaces and tabs around point (`delete-horizontal-space'). - -`M-' - Delete spaces and tabs around point, leaving one space - (`just-one-space'). - -`C-x C-o' - Delete blank lines around the current line (`delete-blank-lines'). - -`M-^' - Join two lines by deleting the intervening newline, and any - indentation following it (`delete-indentation'). - - The most basic delete commands are `C-d' (`delete-char') and -(`delete-backward-char'). `C-d' deletes the character after point, the -one the cursor is "on top of". Point doesn't move. deletes the -character before the cursor, and moves point back. You can delete -newlines like any other characters in the buffer; deleting a newline -joins two lines. Actually, `C-d' and aren't always delete -commands; if you give them an argument, they kill instead, since they -can erase more than one character this way. - - The other delete commands delete only formatting characters: spaces, -tabs and newlines. `M-\' (`delete-horizontal-space') deletes all -spaces and tab characters before and after point. `M-' -(`just-one-space') does the same but leaves a single space after point, -regardless of the number of spaces that existed previously (even zero). - - `C-x C-o' (`delete-blank-lines') deletes all blank lines after the -current line. If the current line is blank, it deletes all blank lines -preceding the current line as well as leaving one blank line, the -current line. `M-^' (`delete-indentation') joins the current line and -the previous line, or, if given an argument, joins the current line and -the next line by deleting a newline and all surrounding spaces, possibly -leaving a single space. *Note M-^: Indentation. - -Killing by Lines ----------------- - -`C-k' - Kill rest of line or one or more lines (`kill-line'). - - The simplest kill command is `C-k'. If given at the beginning of a -line, it kills all the text on the line, leaving the line blank. If -given on a blank line, the blank line disappears. As a consequence, a -line disappears completely if you go to the front of a non-blank line -and type `C-k' twice. - - More generally, `C-k' kills from point up to the end of the line, -unless it is at the end of a line. In that case, it kills the newline -following the line, thus merging the next line into the current one. -Emacs ignores invisible spaces and tabs at the end of the line when -deciding which case applies: if point appears to be at the end of the -line, you can be sure the newline will be killed. - - If you give `C-k' a positive argument, it kills that many lines and -the newlines that follow them (however, text on the current line before -point is not killed). With a negative argument, `C-k' kills back to a -number of line beginnings. An argument of -2 means kill back to the -second line beginning. If point is at the beginning of a line, that -line beginning doesn't count, so `C-u - 2 C-k' with point at the front -of a line kills the two previous lines. - - `C-k' with an argument of zero kills all the text before point on the -current line. - -Other Kill Commands -------------------- - -`C-w' - Kill region (from point to the mark) (`kill-region'). *Note - Words::. - -`M-d' - Kill word (`kill-word'). - -`M-' - Kill word backwards (`backward-kill-word'). - -`C-x ' - Kill back to beginning of sentence (`backward-kill-sentence'). - *Note Sentences::. - -`M-k' - Kill to end of sentence (`kill-sentence'). - -`C-M-k' - Kill sexp (`kill-sexp'). *Note Lists::. - -`M-z CHAR' - Kill up to next occurrence of CHAR (`zap-to-char'). - - `C-w' (`kill-region') is a very general kill command; it kills -everything between point and the mark. You can use this command to kill -any contiguous sequence of characters by first setting the mark at one -end of a sequence of characters, then going to the other end and typing -`C-w'. - - A convenient way of killing is combined with searching: `M-z' -(`zap-to-char') reads a character and kills from point up to (but not -including) the next occurrence of that character in the buffer. If -there is no next occurrence, killing goes to the end of the buffer. A -numeric argument acts as a repeat count. A negative argument means to -search backward and kill text before point. - - Other syntactic units can be killed: words, with `M-' and `M-d' -(*note Words::.); sexps, with `C-M-k' (*note Lists::.); and sentences, -with `C-x ' and `M-k' (*note Sentences::.). - - -File: xemacs.info, Node: Yanking, Next: Using X Selections, Prev: Killing, Up: Top - -Yanking -======= - - "Yanking" means getting back text which was killed. Some systems -call this "pasting". The usual way to move or copy text is to kill it -and then yank it one or more times. - -`C-y' - Yank last killed text (`yank'). - -`M-y' - Replace re-inserted killed text with the previously killed text - (`yank-pop'). - -`M-w' - Save region as last killed text without actually killing it - (`copy-region-as-kill'). - -`C-M-w' - Append next kill to last batch of killed text (`append-next-kill'). - -* Menu: - -* Kill Ring:: Where killed text is stored. Basic yanking. -* Appending Kills:: Several kills in a row all yank together. -* Earlier Kills:: Yanking something killed some time ago. - - -File: xemacs.info, Node: Kill Ring, Next: Appending Kills, Prev: Yanking, Up: Yanking - -The Kill Ring -------------- - - All killed text is recorded in the "kill ring", a list of blocks of -text that have been killed. There is only one kill ring, used in all -buffers, so you can kill text in one buffer and yank it in another -buffer. This is the usual way to move text from one file to another. -(*Note Accumulating Text::, for some other ways.) - - If you have two separate Emacs processes, you cannot use the kill -ring to move text. If you are using XEmacs under X, however, you can -use the X selection mechanism to move text from one to another. - - If you are using XEmacs under X and have one Emacs process with -multiple frames, they do share the same kill ring. You can kill or -copy text in one Emacs frame, then yank it in the other frame belonging -to the same process. - - The command `C-y' (`yank') reinserts the text of the most recent -kill. It leaves the cursor at the end of the text and sets the mark at -the beginning of the text. *Note Mark::. - - `C-u C-y' yanks the text, leaves the cursor in front of the text, -and sets the mark after it, if the argument is with just a `C-u'. Any -other argument, including `C-u' and digits, has different results, -described below, under "Yanking Earlier Kills". - - To copy a block of text, you can also use `M-w' -(`copy-region-as-kill'), which copies the region into the kill ring -without removing it from the buffer. `M-w' is similar to `C-w' followed -by `C-y' but does not mark the buffer as "modified" and does not -actually cut anything. - diff --git a/info/xemacs.info-5 b/info/xemacs.info-5 index 2c5aa3e..6f80cb7 100644 --- a/info/xemacs.info-5 +++ b/info/xemacs.info-5 @@ -30,6 +30,212 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Killing, Next: Yanking, Prev: Additional Mouse Operations, Up: Top + +Deletion and Killing +==================== + + Most commands that erase text from the buffer save it. You can get +the text back if you change your mind, or you can move or copy it to +other parts of the buffer. Commands which erase text and save it in the +kill ring are known as "kill" commands. Some other commands erase text +but do not save it; they are known as "delete" commands. (This +distinction is made only for erasing text in the buffer.) + + The commands' names and individual descriptions use the words `kill' +and `delete' to indicate what they do. If you perform a kill or delete +command by mistake, use the `C-x u' (`undo') command to undo it (*note +Undo::.). The delete commands include `C-d' (`delete-char') and +(`delete-backward-char'), which delete only one character at a time, +and those commands that delete only spaces or newlines. Commands that +can destroy significant amounts of nontrivial data usually kill. + +Deletion +-------- + +`C-d' + Delete next character (`delete-char'). + +`' + Delete previous character (`delete-backward-char'). + +`M-\' + Delete spaces and tabs around point (`delete-horizontal-space'). + +`M-' + Delete spaces and tabs around point, leaving one space + (`just-one-space'). + +`C-x C-o' + Delete blank lines around the current line (`delete-blank-lines'). + +`M-^' + Join two lines by deleting the intervening newline, and any + indentation following it (`delete-indentation'). + + The most basic delete commands are `C-d' (`delete-char') and +(`delete-backward-char'). `C-d' deletes the character after point, the +one the cursor is "on top of". Point doesn't move. deletes the +character before the cursor, and moves point back. You can delete +newlines like any other characters in the buffer; deleting a newline +joins two lines. Actually, `C-d' and aren't always delete +commands; if you give them an argument, they kill instead, since they +can erase more than one character this way. + + The other delete commands delete only formatting characters: spaces, +tabs and newlines. `M-\' (`delete-horizontal-space') deletes all +spaces and tab characters before and after point. `M-' +(`just-one-space') does the same but leaves a single space after point, +regardless of the number of spaces that existed previously (even zero). + + `C-x C-o' (`delete-blank-lines') deletes all blank lines after the +current line. If the current line is blank, it deletes all blank lines +preceding the current line as well as leaving one blank line, the +current line. `M-^' (`delete-indentation') joins the current line and +the previous line, or, if given an argument, joins the current line and +the next line by deleting a newline and all surrounding spaces, possibly +leaving a single space. *Note M-^: Indentation. + +Killing by Lines +---------------- + +`C-k' + Kill rest of line or one or more lines (`kill-line'). + + The simplest kill command is `C-k'. If given at the beginning of a +line, it kills all the text on the line, leaving the line blank. If +given on a blank line, the blank line disappears. As a consequence, a +line disappears completely if you go to the front of a non-blank line +and type `C-k' twice. + + More generally, `C-k' kills from point up to the end of the line, +unless it is at the end of a line. In that case, it kills the newline +following the line, thus merging the next line into the current one. +Emacs ignores invisible spaces and tabs at the end of the line when +deciding which case applies: if point appears to be at the end of the +line, you can be sure the newline will be killed. + + If you give `C-k' a positive argument, it kills that many lines and +the newlines that follow them (however, text on the current line before +point is not killed). With a negative argument, `C-k' kills back to a +number of line beginnings. An argument of -2 means kill back to the +second line beginning. If point is at the beginning of a line, that +line beginning doesn't count, so `C-u - 2 C-k' with point at the front +of a line kills the two previous lines. + + `C-k' with an argument of zero kills all the text before point on the +current line. + +Other Kill Commands +------------------- + +`C-w' + Kill region (from point to the mark) (`kill-region'). *Note + Words::. + +`M-d' + Kill word (`kill-word'). + +`M-' + Kill word backwards (`backward-kill-word'). + +`C-x ' + Kill back to beginning of sentence (`backward-kill-sentence'). + *Note Sentences::. + +`M-k' + Kill to end of sentence (`kill-sentence'). + +`C-M-k' + Kill sexp (`kill-sexp'). *Note Lists::. + +`M-z CHAR' + Kill up to next occurrence of CHAR (`zap-to-char'). + + `C-w' (`kill-region') is a very general kill command; it kills +everything between point and the mark. You can use this command to kill +any contiguous sequence of characters by first setting the mark at one +end of a sequence of characters, then going to the other end and typing +`C-w'. + + A convenient way of killing is combined with searching: `M-z' +(`zap-to-char') reads a character and kills from point up to (but not +including) the next occurrence of that character in the buffer. If +there is no next occurrence, killing goes to the end of the buffer. A +numeric argument acts as a repeat count. A negative argument means to +search backward and kill text before point. + + Other syntactic units can be killed: words, with `M-' and `M-d' +(*note Words::.); sexps, with `C-M-k' (*note Lists::.); and sentences, +with `C-x ' and `M-k' (*note Sentences::.). + + +File: xemacs.info, Node: Yanking, Next: Using X Selections, Prev: Killing, Up: Top + +Yanking +======= + + "Yanking" means getting back text which was killed. Some systems +call this "pasting". The usual way to move or copy text is to kill it +and then yank it one or more times. + +`C-y' + Yank last killed text (`yank'). + +`M-y' + Replace re-inserted killed text with the previously killed text + (`yank-pop'). + +`M-w' + Save region as last killed text without actually killing it + (`copy-region-as-kill'). + +`C-M-w' + Append next kill to last batch of killed text (`append-next-kill'). + +* Menu: + +* Kill Ring:: Where killed text is stored. Basic yanking. +* Appending Kills:: Several kills in a row all yank together. +* Earlier Kills:: Yanking something killed some time ago. + + +File: xemacs.info, Node: Kill Ring, Next: Appending Kills, Prev: Yanking, Up: Yanking + +The Kill Ring +------------- + + All killed text is recorded in the "kill ring", a list of blocks of +text that have been killed. There is only one kill ring, used in all +buffers, so you can kill text in one buffer and yank it in another +buffer. This is the usual way to move text from one file to another. +(*Note Accumulating Text::, for some other ways.) + + If you have two separate Emacs processes, you cannot use the kill +ring to move text. If you are using XEmacs under X, however, you can +use the X selection mechanism to move text from one to another. + + If you are using XEmacs under X and have one Emacs process with +multiple frames, they do share the same kill ring. You can kill or +copy text in one Emacs frame, then yank it in the other frame belonging +to the same process. + + The command `C-y' (`yank') reinserts the text of the most recent +kill. It leaves the cursor at the end of the text and sets the mark at +the beginning of the text. *Note Mark::. + + `C-u C-y' yanks the text, leaves the cursor in front of the text, +and sets the mark after it, if the argument is with just a `C-u'. Any +other argument, including `C-u' and digits, has different results, +described below, under "Yanking Earlier Kills". + + To copy a block of text, you can also use `M-w' +(`copy-region-as-kill'), which copies the region into the kill ring +without removing it from the buffer. `M-w' is similar to `C-w' followed +by `C-y' but does not mark the buffer as "modified" and does not +actually cut anything. + + File: xemacs.info, Node: Appending Kills, Next: Earlier Kills, Prev: Kill Ring, Up: Yanking Appending Kills @@ -513,22 +719,18 @@ File: xemacs.info, Node: Registers, Next: Display, Prev: Rectangles, Up: Top Registers ********* - Emacs "registers" are places in which you can save text or positions -for later use. Text saved in a register can be copied into the buffer -once or many times; a position saved in a register is used by moving -point to that position. Rectangles can also be copied into and out of -registers (*note Rectangles::.). + XEmacs "registers" are places in which you can save text or +positions for later use. Once you save text or a rectangle in a +register, you can copy it into the buffer once or many times; a position +saved in a register is used by moving point to that position. +Rectangles can also be copied into and out of registers (*note +Rectangles::.). - Each register has a name, which is a single character. A register -can store either a piece of text, a position, or a rectangle, but only -one thing at any given time. Whatever you store in a register remains -there until you store something else in that register. - -* Menu: - -* RegPos:: Saving positions in registers. -* RegText:: Saving text in registers. -* RegRect:: Saving rectangles in registers. + Each register has a name which is a single character. A register can +store a piece of text, a rectangle, a position, a window configuration, +or a file name, but only one thing at any given time. Whatever you +store in a register remains there until you store something else in that +register. To see what a register R contains, use `M-x view-register'. `M-x view-register R' Display a description of what register R contains. @@ -536,31 +738,46 @@ there until you store something else in that register. `M-x view-register' reads a register name as an argument and then displays the contents of the specified register. +* Menu: + +* Position: RegPos. Saving positions in registers. +* Text: RegText. Saving text in registers. +* Rectangle: RegRect. Saving rectangles in registers. +* Configurations: RegConfig. Saving window configurations in registers. +* Files: RegFiles. File names in registers. +* Numbers: RegNumbers. Numbers in registers. +* Bookmarks:: Bookmarks are like registers, but persistent. +  File: xemacs.info, Node: RegPos, Next: RegText, Prev: Registers, Up: Registers Saving Positions in Registers ============================= - Saving a position records a spot in a buffer so you can move back -there later. Moving to a saved position re-selects the buffer and -moves point to the spot. + Saving a position records a place in a buffer so that you can move +back there later. Moving to a saved position switches to that buffer +and moves point to that place in it. -`C-x r SPC R' - Save the location of point in register R (`point-to-register'). +`C-x r R' + Save position of point in register R (`point-to-register'). `C-x r j R' - Jump to the location saved in register R (`register-to-point'). + Jump to the position saved in register R (`jump-to-register'). - To save the current location of point in a register, choose a name R -and type `C-x r SPC R'. The register R retains the location thus saved -until you store something else in that register. + To save the current position of point in a register, choose a name R +and type `C-x r R'. The register R retains the position thus +saved until you store something else in that register. - The command `C-x r j R' moves point to the location recorded in + The command `C-x r j R' moves point to the position recorded in register R. The register is not affected; it continues to record the same location. You can jump to the same position using the same register as often as you want. + If you use `C-x r j' to go to a saved position, but the buffer it +was saved from has been killed, `C-x r j' tries to create the buffer +again by visiting the same file. Of course, this works only for buffers +that were visiting files. +  File: xemacs.info, Node: RegText, Next: RegRect, Prev: RegPos, Up: Registers @@ -572,26 +789,27 @@ it can be impractical to use the kill ring, since each subsequent kill moves the piece of text further down on the ring. It becomes hard to keep track of the argument needed to retrieve the same text with `C-y'. An alternative is to store the text in a register with `C-x r s' -(`copy-to-register') and then retrieve it with `C-x r g' +(`copy-to-register') and then retrieve it with `C-x r i' (`insert-register'). `C-x r s R' Copy region into register R (`copy-to-register'). `C-x r g R' +`C-x r i R' Insert text contents of register R (`insert-register'). `C-x r s R' stores a copy of the text of the region into the -register named R. Given a numeric argument, `C-x r s' deletes the text -from the buffer as well. +register named R. Given a numeric argument, `C-x r s R' deletes the +text from the buffer as well. - `C-x r g R' inserts the text from register R in the buffer. By + `C-x r i R' inserts the text from register R in the buffer. By default it leaves point before the text and places the mark after it. -With a numeric argument, it puts point after the text and the mark -before it. +With a numeric argument (`C-u'), it puts point after the text and the +mark before it.  -File: xemacs.info, Node: RegRect, Prev: RegText, Up: Registers +File: xemacs.info, Node: RegRect, Next: RegConfig, Prev: RegText, Up: Registers Saving Rectangles in Registers ============================== @@ -602,16 +820,173 @@ basic information on rectangles and how to specify rectangles in a buffer. `C-x r r R' - Copy the region-rectangle into register - R(`copy-rectangle-to-register'). With a numeric argument, delete - it as well. + Copy the region-rectangle into register R + (`copy-rectangle-to-register'). With a numeric argument, delete it + as well. `C-x r g R' +`C-x r i R' Insert the rectangle stored in register R (if it contains a rectangle) (`insert-register'). - The `C-x r g' command inserts linear text if the register contains -that, or inserts a rectangle if the register contains one. + The `C-x r i R' command inserts linear text if the register +contains that, or inserts a rectangle if the register contains one. + + See also the command `sort-columns', which you can think of as +sorting a rectangle. *Note Sorting::. + + +File: xemacs.info, Node: RegConfig, Next: RegNumbers, Prev: RegRect, Up: Registers + +Saving Window Configurations in Registers +========================================= + + You can save the window configuration of the selected frame in a +register, or even the configuration of all windows in all frames, and +restore the configuration later. + +`C-x r w R' + Save the state of the selected frame's windows in register R + (`window-configuration-to-register'). + +`M-x frame-configuration-to-register R' + Save the state of all frames, including all their windows, in + register R (`frame-configuration-to-register'). + + Use `C-x r j R' to restore a window or frame configuration. This is +the same command used to restore a cursor position. When you restore a +frame configuration, any existing frames not included in the +configuration become invisible. If you wish to delete these frames +instead, use `C-u C-x r j R'. + + +File: xemacs.info, Node: RegNumbers, Next: RegFiles, Prev: RegConfig, Up: Registers + +Keeping Numbers in Registers +============================ + + There are commands to store a number in a register, to insert the +number in the buffer in decimal, and to increment it. These commands +can be useful in keyboard macros (*note Keyboard Macros::.). + +`C-u NUMBER C-x r n REG' + Store NUMBER into register REG (`number-to-register'). + +`C-u NUMBER C-x r + REG' + Increment the number in register REG by NUMBER + (`increment-register'). + +`C-x r g REG' + Insert the number from register REG into the buffer. + + `C-x r g' is the same command used to insert any other sort of +register contents into the buffer. + + +File: xemacs.info, Node: RegFiles, Next: Bookmarks, Prev: RegNumbers, Up: Registers + +Keeping File Names in Registers +=============================== + + If you visit certain file names frequently, you can visit them more +conveniently if you put their names in registers. Here's the Lisp code +used to put a file name in a register: + + (set-register ?R '(file . NAME)) + +For example, + + (set-register ?z '(file . "/usr/src/xemacs/src/ChangeLog")) + +puts the file name shown in register `z'. + + To visit the file whose name is in register R, type `C-x r j R'. +(This is the same command used to jump to a position or restore a frame +configuration.) + + +File: xemacs.info, Node: Bookmarks, Prev: RegFiles, Up: Registers + +Bookmarks +========= + + "Bookmarks" are somewhat like registers in that they record +positions you can jump to. Unlike registers, they have long names, and +they persist automatically from one Emacs session to the next. The +prototypical use of bookmarks is to record "where you were reading" in +various files. + + Note: bookmark.el is distributed in edit-utils package. You need to +install that to use bookmark facility (*note Packages::.). + +`C-x r m ' + Set the bookmark for the visited file, at point. + +`C-x r m BOOKMARK ' + Set the bookmark named BOOKMARK at point (`bookmark-set'). + +`C-x r b BOOKMARK ' + Jump to the bookmark named BOOKMARK (`bookmark-jump'). + +`C-x r l' + List all bookmarks (`list-bookmarks'). + +`M-x bookmark-save' + Save all the current bookmark values in the default bookmark file. + + The prototypical use for bookmarks is to record one current position +in each of several files. So the command `C-x r m', which sets a +bookmark, uses the visited file name as the default for the bookmark +name. If you name each bookmark after the file it points to, then you +can conveniently revisit any of those files with `C-x r b', and move to +the position of the bookmark at the same time. + + To display a list of all your bookmarks in a separate buffer, type +`C-x r l' (`list-bookmarks'). If you switch to that buffer, you can +use it to edit your bookmark definitions or annotate the bookmarks. +Type `C-h m' in that buffer for more information about its special +editing commands. + + When you kill XEmacs, XEmacs offers to save your bookmark values in +your default bookmark file, `~/.emacs.bmk', if you have changed any +bookmark values. You can also save the bookmarks at any time with the +`M-x bookmark-save' command. The bookmark commands load your default +bookmark file automatically. This saving and loading is how bookmarks +persist from one XEmacs session to the next. + + If you set the variable `bookmark-save-flag' to 1, then each command +that sets a bookmark will also save your bookmarks; this way, you don't +lose any bookmark values even if XEmacs crashes. (The value, if a +number, says how many bookmark modifications should go by between +saving.) + + Bookmark position values are saved with surrounding context, so that +`bookmark-jump' can find the proper position even if the file is +modified slightly. The variable `bookmark-search-size' says how many +characters of context to record, on each side of the bookmark's +position. + + Here are some additional commands for working with bookmarks: + +`M-x bookmark-load FILENAME ' + Load a file named FILENAME that contains a list of bookmark + values. You can use this command, as well as `bookmark-write', to + work with other files of bookmark values in addition to your + default bookmark file. + +`M-x bookmark-write FILENAME ' + Save all the current bookmark values in the file FILENAME. + +`M-x bookmark-delete BOOKMARK ' + Delete the bookmark named BOOKMARK. + +`M-x bookmark-insert-location BOOKMARK ' + Insert in the buffer the name of the file that bookmark BOOKMARK + points to. + +`M-x bookmark-insert BOOKMARK ' + Insert in the buffer the *contents* of the file that bookmark + BOOKMARK points to.  File: xemacs.info, Node: Display, Next: Search, Prev: Registers, Up: Top @@ -813,360 +1188,3 @@ they were not there. To make everything visible again, type `C-x $' with no argument. - -File: xemacs.info, Node: Display Vars, Prev: Selective Display, Up: Display - -Variables Controlling Display -============================= - - This section contains information for customization only. Beginning -users should skip it. - - When you reenter XEmacs after suspending, XEmacs normally clears the -screen and redraws the entire display. On some terminals with more than -one page of memory, it is possible to arrange the termcap entry so that -the `ti' and `te' strings (output to the terminal when XEmacs is -entered and exited, respectively) switch between pages of memory so as -to use one page for XEmacs and another page for other output. In that -case, you might want to set the variable `no-redraw-on-reenter' to -non-`nil' so that XEmacs will assume, when resumed, that the screen -page it is using still contains what XEmacs last wrote there. - - The variable `echo-keystrokes' controls the echoing of -multi-character keys; its value is the number of seconds of pause -required to cause echoing to start, or zero, meaning don't echo at all. -*Note Echo Area::. - - If the variable `ctl-arrow' is `nil', control characters in the -buffer are displayed with octal escape sequences, all except newline and -tab. If its value is `t', then control characters will be printed with -an up-arrow, for example `^A'. - - If its value is not `t' and not `nil', then characters whose code is -greater than 160 (that is, the space character (32) with its high bit -set) will be assumed to be printable, and will be displayed without -alteration. This is the default when running under X Windows, since -XEmacs assumes an ISO/8859-1 character set (also known as "Latin1"). -The `ctl-arrow' variable may also be set to an integer, in which case -all characters whose codes are greater than or equal to that value will -be assumed to be printable. - - Altering the value of `ctl-arrow' makes it local to the current -buffer; until that time, the default value is in effect. *Note -Locals::. - - Normally, a tab character in the buffer is displayed as whitespace -which extends to the next display tab stop position, and display tab -stops come at intervals equal to eight spaces. The number of spaces -per tab is controlled by the variable `tab-width', which is made local -by changing it, just like `ctl-arrow'. Note that how the tab character -in the buffer is displayed has nothing to do with the definition of - as a command. - - If you set the variable `selective-display-ellipses' to `nil', the -three dots at the end of a line that precedes invisible lines do not -appear. There is no visible indication of the invisible lines. This -variable becomes local automatically when set. - - -File: xemacs.info, Node: Search, Next: Fixit, Prev: Display, Up: Top - -Searching and Replacement -************************* - - Like other editors, Emacs has commands for searching for occurrences -of a string. The principal search command is unusual in that it is -"incremental": it begins to search before you have finished typing the -search string. There are also non-incremental search commands more like -those of other editors. - - Besides the usual `replace-string' command that finds all -occurrences of one string and replaces them with another, Emacs has a -fancy replacement command called `query-replace' which asks -interactively which occurrences to replace. - -* Menu: - -* Incremental Search:: Search happens as you type the string. -* Non-Incremental Search:: Specify entire string and then search. -* Word Search:: Search for sequence of words. -* Regexp Search:: Search for match for a regexp. -* Regexps:: Syntax of regular expressions. -* Search Case:: To ignore case while searching, or not. -* Replace:: Search, and replace some or all matches. -* Other Repeating Search:: Operating on all matches for some regexp. - - -File: xemacs.info, Node: Incremental Search, Next: Non-Incremental Search, Prev: Search, Up: Search - -Incremental Search -================== - - An incremental search begins searching as soon as you type the first -character of the search string. As you type in the search string, Emacs -shows you where the string (as you have typed it so far) is found. -When you have typed enough characters to identify the place you want, -you can stop. Depending on what you do next, you may or may not need to -terminate the search explicitly with a . - -`C-s' - Incremental search forward (`isearch-forward'). - -`C-r' - Incremental search backward (`isearch-backward'). - - `C-s' starts an incremental search. `C-s' reads characters from the -keyboard and positions the cursor at the first occurrence of the -characters that you have typed. If you type `C-s' and then `F', the -cursor moves right after the first `F'. Type an `O', and see the -cursor move to after the first `FO'. After another `O', the cursor is -after the first `FOO' after the place where you started the search. -Meanwhile, the search string `FOO' has been echoed in the echo area. - - The echo area display ends with three dots when actual searching is -going on. When search is waiting for more input, the three dots are -removed. (On slow terminals, the three dots are not displayed.) - - If you make a mistake in typing the search string, you can erase -characters with . Each cancels the last character of the -search string. This does not happen until Emacs is ready to read -another input character; first it must either find, or fail to find, -the character you want to erase. If you do not want to wait for this -to happen, use `C-g' as described below. - - When you are satisfied with the place you have reached, you can type - (or ), which stops searching, leaving the cursor where the -search brought it. Any command not specially meaningful in searches -also stops the search and is then executed. Thus, typing `C-a' exits -the search and then moves to the beginning of the line. is -necessary only if the next command you want to type is a printing -character, , , or another control character that is special -within searches (`C-q', `C-w', `C-r', `C-s', or `C-y'). - - Sometimes you search for `FOO' and find it, but were actually -looking for a different occurance of it. To move to the next occurrence -of the search string, type another `C-s'. Do this as often as -necessary. If you overshoot, you can cancel some `C-s' characters with -. - - After you exit a search, you can search for the same string again by -typing just `C-s C-s': the first `C-s' is the key that invokes -incremental search, and the second `C-s' means "search again". - - If the specified string is not found at all, the echo area displays -the text `Failing I-Search'. The cursor is after the place where Emacs -found as much of your string as it could. Thus, if you search for -`FOOT', and there is no `FOOT', the cursor may be after the `FOO' in -`FOOL'. At this point there are several things you can do. If you -mistyped the search string, correct it. If you like the place you have -found, you can type or some other Emacs command to "accept what -the search offered". Or you can type `C-g', which removes from the -search string the characters that could not be found (the `T' in -`FOOT'), leaving those that were found (the `FOO' in `FOOT'). A second -`C-g' at that point cancels the search entirely, returning point to -where it was when the search started. - - If a search is failing and you ask to repeat it by typing another -`C-s', it starts again from the beginning of the buffer. Repeating a -failing backward search with `C-r' starts again from the end. This is -called "wrapping around". `Wrapped' appears in the search prompt once -this has happened. - - The `C-g' "quit" character does special things during searches; just -what it does depends on the status of the search. If the search has -found what you specified and is waiting for input, `C-g' cancels the -entire search. The cursor moves back to where you started the search. -If `C-g' is typed when there are characters in the search string that -have not been found--because Emacs is still searching for them, or -because it has failed to find them--then the search string characters -which have not been found are discarded from the search string. The -search is now successful and waiting for more input, so a second `C-g' -cancels the entire search. - - To search for a control character such as `C-s' or or , -you must quote it by typing `C-q' first. This function of `C-q' is -analogous to its meaning as an Emacs command: it causes the following -character to be treated the way a graphic character would normally be -treated in the same context. - - To search backwards, you can use `C-r' instead of `C-s' to start the -search; `C-r' is the key that runs the command (`isearch-backward') to -search backward. You can also use `C-r' to change from searching -forward to searching backwards. Do this if a search fails because the -place you started was too far down in the file. Repeated `C-r' keeps -looking for more occurrences backwards. `C-s' starts going forward -again. You can cancel `C-r' in a search with . - - The characters `C-y' and `C-w' can be used in incremental search to -grab text from the buffer into the search string. This makes it -convenient to search for another occurrence of text at point. `C-w' -copies the word after point as part of the search string, advancing -point over that word. Another `C-s' to repeat the search will then -search for a string including that word. `C-y' is similar to `C-w' but -copies the rest of the current line into the search string. - - The characters `M-p' and `M-n' can be used in an incremental search -to recall things which you have searched for in the past. A list of -the last 16 things you have searched for is retained, and `M-p' and -`M-n' let you cycle through that ring. - - The character `M-' does completion on the elements in the -search history ring. For example, if you know that you have recently -searched for the string `POTATOE', you could type `C-s P O M-'. -If you had searched for other strings beginning with `PO' then you -would be shown a list of them, and would need to type more to select -one. - - You can change any of the special characters in incremental search -via the normal keybinding mechanism: simply add a binding to the -`isearch-mode-map'. For example, to make the character `C-b' mean -"search backwards" while in isearch-mode, do this: - - (define-key isearch-mode-map "\C-b" 'isearch-repeat-backward) - - These are the default bindings of isearch-mode: - -`DEL' - Delete a character from the incremental search string - (`isearch-delete-char'). - -`RET' - Exit incremental search (`isearch-exit'). - -`C-q' - Quote special characters for incremental search - (`isearch-quote-char'). - -`C-s' - Repeat incremental search forward (`isearch-repeat-forward'). - -`C-r' - Repeat incremental search backward (`isearch-repeat-backward'). - -`C-y' - Pull rest of line from buffer into search string - (`isearch-yank-line'). - -`C-w' - Pull next word from buffer into search string - (`isearch-yank-word'). - -`C-g' - Cancels input back to what has been found successfully, or aborts - the isearch (`isearch-abort'). - -`M-p' - Recall the previous element in the isearch history ring - (`isearch-ring-retreat'). - -`M-n' - Recall the next element in the isearch history ring - (`isearch-ring-advance'). - -`M-' - Do completion on the elements in the isearch history ring - (`isearch-complete'). - - Any other character which is normally inserted into a buffer when -typed is automatically added to the search string in isearch-mode. - -Slow Terminal Incremental Search --------------------------------- - - Incremental search on a slow terminal uses a modified style of -display that is designed to take less time. Instead of redisplaying -the buffer at each place the search gets to, it creates a new -single-line window and uses that to display the line the search has -found. The single-line window appears as soon as point gets outside of -the text that is already on the screen. - - When the search is terminated, the single-line window is removed. -Only at this time the window in which the search was done is -redisplayed to show its new value of point. - - The three dots at the end of the search string, normally used to -indicate that searching is going on, are not displayed in slow style -display. - - The slow terminal style of display is used when the terminal baud -rate is less than or equal to the value of the variable -`search-slow-speed', initially 1200. - - The number of lines to use in slow terminal search display is -controlled by the variable `search-slow-window-lines'. Its normal -value is 1. - - -File: xemacs.info, Node: Non-Incremental Search, Next: Word Search, Prev: Incremental Search, Up: Search - -Non-Incremental Search -====================== - - Emacs also has conventional non-incremental search commands, which -require you type the entire search string before searching begins. - -`C-s STRING ' - Search for STRING. - -`C-r STRING ' - Search backward for STRING. - - To do a non-incremental search, first type `C-s ' (or `C-s -C-m'). This enters the minibuffer to read the search string. -Terminate the string with to start the search. If the string is -not found, the search command gets an error. - - By default, `C-s' invokes incremental search, but if you give it an -empty argument, which would otherwise be useless, it invokes -non-incremental search. Therefore, `C-s ' invokes non-incremental -search. `C-r ' also works this way. - - Forward and backward non-incremental searches are implemented by the -commands `search-forward' and `search-backward'. You can bind these -commands to keys. The reason that incremental search is programmed to -invoke them as well is that `C-s ' is the traditional sequence of -characters used in Emacs to invoke non-incremental search. - - Non-incremental searches performed using `C-s ' do not call -`search-forward' right away. They first check if the next character is -`C-w', which requests a word search. *Note Word Search::. - - -File: xemacs.info, Node: Word Search, Next: Regexp Search, Prev: Non-Incremental Search, Up: Search - -Word Search -=========== - - Word search looks for a sequence of words without regard to how the -words are separated. More precisely, you type a string of many words, -using single spaces to separate them, and the string is found even if -there are multiple spaces, newlines or other punctuation between the -words. - - Word search is useful in editing documents formatted by text -formatters. If you edit while looking at the printed, formatted -version, you can't tell where the line breaks are in the source file. -Word search, allows you to search without having to know the line -breaks. - -`C-s C-w WORDS ' - Search for WORDS, ignoring differences in punctuation. - -`C-r C-w WORDS ' - Search backward for WORDS, ignoring differences in punctuation. - - Word search is a special case of non-incremental search. It is -invoked with `C-s C-w' followed by the search string, which must -always be terminated with another . Being non-incremental, this -search does not start until the argument is terminated. It works by -constructing a regular expression and searching for that. *Note Regexp -Search::. - - You can do a backward word search with `C-r C-w'. - - Forward and backward word searches are implemented by the commands -`word-search-forward' and `word-search-backward'. You can bind these -commands to keys. The reason that incremental search is programmed to -invoke them as well is that `C-s C-w' is the traditional Emacs -sequence of keys for word search. - diff --git a/info/xemacs.info-6 b/info/xemacs.info-6 index a295967..39d4f90 100644 --- a/info/xemacs.info-6 +++ b/info/xemacs.info-6 @@ -30,6 +30,363 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Display Vars, Prev: Selective Display, Up: Display + +Variables Controlling Display +============================= + + This section contains information for customization only. Beginning +users should skip it. + + When you reenter XEmacs after suspending, XEmacs normally clears the +screen and redraws the entire display. On some terminals with more than +one page of memory, it is possible to arrange the termcap entry so that +the `ti' and `te' strings (output to the terminal when XEmacs is +entered and exited, respectively) switch between pages of memory so as +to use one page for XEmacs and another page for other output. In that +case, you might want to set the variable `no-redraw-on-reenter' to +non-`nil' so that XEmacs will assume, when resumed, that the screen +page it is using still contains what XEmacs last wrote there. + + The variable `echo-keystrokes' controls the echoing of +multi-character keys; its value is the number of seconds of pause +required to cause echoing to start, or zero, meaning don't echo at all. +*Note Echo Area::. + + If the variable `ctl-arrow' is `nil', control characters in the +buffer are displayed with octal escape sequences, all except newline and +tab. If its value is `t', then control characters will be printed with +an up-arrow, for example `^A'. + + If its value is not `t' and not `nil', then characters whose code is +greater than 160 (that is, the space character (32) with its high bit +set) will be assumed to be printable, and will be displayed without +alteration. This is the default when running under X Windows, since +XEmacs assumes an ISO/8859-1 character set (also known as "Latin1"). +The `ctl-arrow' variable may also be set to an integer, in which case +all characters whose codes are greater than or equal to that value will +be assumed to be printable. + + Altering the value of `ctl-arrow' makes it local to the current +buffer; until that time, the default value is in effect. *Note +Locals::. + + Normally, a tab character in the buffer is displayed as whitespace +which extends to the next display tab stop position, and display tab +stops come at intervals equal to eight spaces. The number of spaces +per tab is controlled by the variable `tab-width', which is made local +by changing it, just like `ctl-arrow'. Note that how the tab character +in the buffer is displayed has nothing to do with the definition of + as a command. + + If you set the variable `selective-display-ellipses' to `nil', the +three dots at the end of a line that precedes invisible lines do not +appear. There is no visible indication of the invisible lines. This +variable becomes local automatically when set. + + +File: xemacs.info, Node: Search, Next: Fixit, Prev: Display, Up: Top + +Searching and Replacement +************************* + + Like other editors, Emacs has commands for searching for occurrences +of a string. The principal search command is unusual in that it is +"incremental": it begins to search before you have finished typing the +search string. There are also non-incremental search commands more like +those of other editors. + + Besides the usual `replace-string' command that finds all +occurrences of one string and replaces them with another, Emacs has a +fancy replacement command called `query-replace' which asks +interactively which occurrences to replace. + +* Menu: + +* Incremental Search:: Search happens as you type the string. +* Non-Incremental Search:: Specify entire string and then search. +* Word Search:: Search for sequence of words. +* Regexp Search:: Search for match for a regexp. +* Regexps:: Syntax of regular expressions. +* Search Case:: To ignore case while searching, or not. +* Replace:: Search, and replace some or all matches. +* Other Repeating Search:: Operating on all matches for some regexp. + + +File: xemacs.info, Node: Incremental Search, Next: Non-Incremental Search, Prev: Search, Up: Search + +Incremental Search +================== + + An incremental search begins searching as soon as you type the first +character of the search string. As you type in the search string, Emacs +shows you where the string (as you have typed it so far) is found. +When you have typed enough characters to identify the place you want, +you can stop. Depending on what you do next, you may or may not need to +terminate the search explicitly with a . + +`C-s' + Incremental search forward (`isearch-forward'). + +`C-r' + Incremental search backward (`isearch-backward'). + + `C-s' starts an incremental search. `C-s' reads characters from the +keyboard and positions the cursor at the first occurrence of the +characters that you have typed. If you type `C-s' and then `F', the +cursor moves right after the first `F'. Type an `O', and see the +cursor move to after the first `FO'. After another `O', the cursor is +after the first `FOO' after the place where you started the search. +Meanwhile, the search string `FOO' has been echoed in the echo area. + + The echo area display ends with three dots when actual searching is +going on. When search is waiting for more input, the three dots are +removed. (On slow terminals, the three dots are not displayed.) + + If you make a mistake in typing the search string, you can erase +characters with . Each cancels the last character of the +search string. This does not happen until Emacs is ready to read +another input character; first it must either find, or fail to find, +the character you want to erase. If you do not want to wait for this +to happen, use `C-g' as described below. + + When you are satisfied with the place you have reached, you can type + (or ), which stops searching, leaving the cursor where the +search brought it. Any command not specially meaningful in searches +also stops the search and is then executed. Thus, typing `C-a' exits +the search and then moves to the beginning of the line. is +necessary only if the next command you want to type is a printing +character, , , or another control character that is special +within searches (`C-q', `C-w', `C-r', `C-s', or `C-y'). + + Sometimes you search for `FOO' and find it, but were actually +looking for a different occurance of it. To move to the next occurrence +of the search string, type another `C-s'. Do this as often as +necessary. If you overshoot, you can cancel some `C-s' characters with +. + + After you exit a search, you can search for the same string again by +typing just `C-s C-s': the first `C-s' is the key that invokes +incremental search, and the second `C-s' means "search again". + + If the specified string is not found at all, the echo area displays +the text `Failing I-Search'. The cursor is after the place where Emacs +found as much of your string as it could. Thus, if you search for +`FOOT', and there is no `FOOT', the cursor may be after the `FOO' in +`FOOL'. At this point there are several things you can do. If you +mistyped the search string, correct it. If you like the place you have +found, you can type or some other Emacs command to "accept what +the search offered". Or you can type `C-g', which removes from the +search string the characters that could not be found (the `T' in +`FOOT'), leaving those that were found (the `FOO' in `FOOT'). A second +`C-g' at that point cancels the search entirely, returning point to +where it was when the search started. + + If a search is failing and you ask to repeat it by typing another +`C-s', it starts again from the beginning of the buffer. Repeating a +failing backward search with `C-r' starts again from the end. This is +called "wrapping around". `Wrapped' appears in the search prompt once +this has happened. + + The `C-g' "quit" character does special things during searches; just +what it does depends on the status of the search. If the search has +found what you specified and is waiting for input, `C-g' cancels the +entire search. The cursor moves back to where you started the search. +If `C-g' is typed when there are characters in the search string that +have not been found--because Emacs is still searching for them, or +because it has failed to find them--then the search string characters +which have not been found are discarded from the search string. The +search is now successful and waiting for more input, so a second `C-g' +cancels the entire search. + + To search for a control character such as `C-s' or or , +you must quote it by typing `C-q' first. This function of `C-q' is +analogous to its meaning as an Emacs command: it causes the following +character to be treated the way a graphic character would normally be +treated in the same context. + + To search backwards, you can use `C-r' instead of `C-s' to start the +search; `C-r' is the key that runs the command (`isearch-backward') to +search backward. You can also use `C-r' to change from searching +forward to searching backwards. Do this if a search fails because the +place you started was too far down in the file. Repeated `C-r' keeps +looking for more occurrences backwards. `C-s' starts going forward +again. You can cancel `C-r' in a search with . + + The characters `C-y' and `C-w' can be used in incremental search to +grab text from the buffer into the search string. This makes it +convenient to search for another occurrence of text at point. `C-w' +copies the word after point as part of the search string, advancing +point over that word. Another `C-s' to repeat the search will then +search for a string including that word. `C-y' is similar to `C-w' but +copies the rest of the current line into the search string. + + The characters `M-p' and `M-n' can be used in an incremental search +to recall things which you have searched for in the past. A list of +the last 16 things you have searched for is retained, and `M-p' and +`M-n' let you cycle through that ring. + + The character `M-' does completion on the elements in the +search history ring. For example, if you know that you have recently +searched for the string `POTATOE', you could type `C-s P O M-'. +If you had searched for other strings beginning with `PO' then you +would be shown a list of them, and would need to type more to select +one. + + You can change any of the special characters in incremental search +via the normal keybinding mechanism: simply add a binding to the +`isearch-mode-map'. For example, to make the character `C-b' mean +"search backwards" while in isearch-mode, do this: + + (define-key isearch-mode-map "\C-b" 'isearch-repeat-backward) + + These are the default bindings of isearch-mode: + +`DEL' + Delete a character from the incremental search string + (`isearch-delete-char'). + +`RET' + Exit incremental search (`isearch-exit'). + +`C-q' + Quote special characters for incremental search + (`isearch-quote-char'). + +`C-s' + Repeat incremental search forward (`isearch-repeat-forward'). + +`C-r' + Repeat incremental search backward (`isearch-repeat-backward'). + +`C-y' + Pull rest of line from buffer into search string + (`isearch-yank-line'). + +`C-w' + Pull next word from buffer into search string + (`isearch-yank-word'). + +`C-g' + Cancels input back to what has been found successfully, or aborts + the isearch (`isearch-abort'). + +`M-p' + Recall the previous element in the isearch history ring + (`isearch-ring-retreat'). + +`M-n' + Recall the next element in the isearch history ring + (`isearch-ring-advance'). + +`M-' + Do completion on the elements in the isearch history ring + (`isearch-complete'). + + Any other character which is normally inserted into a buffer when +typed is automatically added to the search string in isearch-mode. + +Slow Terminal Incremental Search +-------------------------------- + + Incremental search on a slow terminal uses a modified style of +display that is designed to take less time. Instead of redisplaying +the buffer at each place the search gets to, it creates a new +single-line window and uses that to display the line the search has +found. The single-line window appears as soon as point gets outside of +the text that is already on the screen. + + When the search is terminated, the single-line window is removed. +Only at this time the window in which the search was done is +redisplayed to show its new value of point. + + The three dots at the end of the search string, normally used to +indicate that searching is going on, are not displayed in slow style +display. + + The slow terminal style of display is used when the terminal baud +rate is less than or equal to the value of the variable +`search-slow-speed', initially 1200. + + The number of lines to use in slow terminal search display is +controlled by the variable `search-slow-window-lines'. Its normal +value is 1. + + +File: xemacs.info, Node: Non-Incremental Search, Next: Word Search, Prev: Incremental Search, Up: Search + +Non-Incremental Search +====================== + + Emacs also has conventional non-incremental search commands, which +require you type the entire search string before searching begins. + +`C-s STRING ' + Search for STRING. + +`C-r STRING ' + Search backward for STRING. + + To do a non-incremental search, first type `C-s ' (or `C-s +C-m'). This enters the minibuffer to read the search string. +Terminate the string with to start the search. If the string is +not found, the search command gets an error. + + By default, `C-s' invokes incremental search, but if you give it an +empty argument, which would otherwise be useless, it invokes +non-incremental search. Therefore, `C-s ' invokes non-incremental +search. `C-r ' also works this way. + + Forward and backward non-incremental searches are implemented by the +commands `search-forward' and `search-backward'. You can bind these +commands to keys. The reason that incremental search is programmed to +invoke them as well is that `C-s ' is the traditional sequence of +characters used in Emacs to invoke non-incremental search. + + Non-incremental searches performed using `C-s ' do not call +`search-forward' right away. They first check if the next character is +`C-w', which requests a word search. *Note Word Search::. + + +File: xemacs.info, Node: Word Search, Next: Regexp Search, Prev: Non-Incremental Search, Up: Search + +Word Search +=========== + + Word search looks for a sequence of words without regard to how the +words are separated. More precisely, you type a string of many words, +using single spaces to separate them, and the string is found even if +there are multiple spaces, newlines or other punctuation between the +words. + + Word search is useful in editing documents formatted by text +formatters. If you edit while looking at the printed, formatted +version, you can't tell where the line breaks are in the source file. +Word search, allows you to search without having to know the line +breaks. + +`C-s C-w WORDS ' + Search for WORDS, ignoring differences in punctuation. + +`C-r C-w WORDS ' + Search backward for WORDS, ignoring differences in punctuation. + + Word search is a special case of non-incremental search. It is +invoked with `C-s C-w' followed by the search string, which must +always be terminated with another . Being non-incremental, this +search does not start until the argument is terminated. It works by +constructing a regular expression and searching for that. *Note Regexp +Search::. + + You can do a backward word search with `C-r C-w'. + + Forward and backward word searches are implemented by the commands +`word-search-forward' and `word-search-backward'. You can bind these +commands to keys. The reason that incremental search is programmed to +invoke them as well is that `C-s C-w' is the traditional Emacs +sequence of keys for word search. + + File: xemacs.info, Node: Regexp Search, Next: Regexps, Prev: Word Search, Up: Search Regular Expression Search @@ -816,343 +1173,3 @@ performed for single `$'. The Lisp function that performs the substitution is called `substitute-in-file-name'. The substitution is performed only on filenames read as such using the minibuffer. - -File: xemacs.info, Node: Visiting, Next: Saving, Prev: File Names, Up: Files - -Visiting Files -============== - -`C-x C-f' - Visit a file (`find-file'). - -`C-x C-v' - Visit a different file instead of the one visited last - (`find-alternate-file'). - -`C-x 4 C-f' - Visit a file, in another window (`find-file-other-window'). Don't - change this window. - -`C-x 5 C-f' - Visit a file, in another frame (`find-file-other-frame'). Don't - change this window or frame. - - "Visiting" a file means copying its contents into an Emacs buffer so -you can edit it. Emacs creates a new buffer for each file you visit. -We say that the buffer is visiting the file that it was created to -hold. Emacs constructs the buffer name from the file name by throwing -away the directory and keeping just the file name. For example, a file -named `/usr/rms/emacs.tex' is displayed in a buffer named `emacs.tex'. -If a buffer with that name exists, a unique name is constructed by -appending `<2>', `<3>',and so on, using the lowest number that makes a -name that is not already in use. - - Each window's mode line shows the name of the buffer that is being -displayed in that window, so you can always tell what buffer you are -editing. - - The changes you make with Emacs are made in the Emacs buffer. They -do not take effect in the file that you visit, or any other permanent -place, until you "save" the buffer. Saving the buffer means that Emacs -writes the current contents of the buffer into its visited file. *Note -Saving::. - - If a buffer contains changes that have not been saved, the buffer is -said to be "modified". This is important because it implies that some -changes will be lost if the buffer is not saved. The mode line displays -two stars near the left margin if the buffer is modified. - - To visit a file, use the command `C-x C-f' (`find-file'). Follow -the command with the name of the file you wish to visit, terminated by a -. If you are using XEmacs under X, you can also use the Open... -command from the File menu bar item. - - The file name is read using the minibuffer (*note Minibuffer::.), -with defaulting and completion in the standard manner (*note File -Names::.). While in the minibuffer, you can abort `C-x C-f' by typing -`C-g'. - - `C-x C-f' has completed successfully when text appears on the screen -and a new buffer name appears in the mode line. If the specified file -does not exist and could not be created or cannot be read, an error -results. The error message is printed in the echo area, and includes -the name of the file that Emacs was trying to visit. - - If you visit a file that is already in Emacs, `C-x C-f' does not make -another copy. It selects the existing buffer containing that file. -However, before doing so, it checks that the file itself has not changed -since you visited or saved it last. If the file has changed, Emacs -prints a warning message. *Note Simultaneous Editing: Interlocking. - - You can switch to a specific file called out in the current buffer by -calling the function `find-this-file'. By providing a prefix argument, -this function calls `filename-at-point' and switches to a buffer -visiting the file FILENAME. It creates one if none already exists. You -can use this function to edit the file mentioned in the buffer you are -working in or to test if the file exists. You can do that by using the -minibuffer completion after snatching the all or part of the filename. - - If the variable `find-file-use-truenames''s value is non-`nil', a -buffer's visited filename will always be traced back to the real file. -The filename will never be a symbolic link, and there will never be a -symbolic link anywhere in its directory path. In other words, the -`buffer-file-name' and `buffer-file-truename' will be equal. - - If the variable `find-file-compare-truenames' value is non-`nil', -the `find-file' command will check the `buffer-file-truename' of all -visited files when deciding whether a given file is already in a -buffer, instead of just `buffer-file-name'. If you attempt to visit -another file which is a hard-link or symbolic-link to a file that is -already in a buffer, the existing buffer will be found instead of a -newly created one. - - If you want to create a file, just visit it. Emacs prints `(New -File)' in the echo area, but in other respects behaves as if you had -visited an existing empty file. If you make any changes and save them, -the file is created. - - If you visit a nonexistent file unintentionally (because you typed -the wrong file name), use the `C-x C-v' (`find-alternate-file') command -to visit the file you wanted. `C-x C-v' is similar to `C-x C-f', but -it kills the current buffer (after first offering to save it if it is -modified). `C-x C-v' is allowed even if the current buffer is not -visiting a file. - - If the file you specify is actually a directory, Dired is called on -that directory (*note Dired::.). To inhibit this, set the variable -`find-file-run-dired' to `nil'; then it is an error to try to visit a -directory. - - `C-x 4 f' (`find-file-other-window') is like `C-x C-f' except that -the buffer containing the specified file is selected in another window. -The window that was selected before `C-x 4 f' continues to show the -same buffer it was already showing. If you use this command when only -one window is being displayed, that window is split in two, with one -window showing the same buffer as before, and the other one showing the -newly requested file. *Note Windows::. - - `C-x 5 C-f' (`find-file-other-frame') is like `C-x C-f' except that -it creates a new frame in which the file is displayed. - - Use the function `find-this-file-other-window' to edit a file -mentioned in the buffer you are editing or to test if that file exists. -To do this, use the minibuffer completion after snatching the part or -all of the filename. By providing a prefix argument, the function calls -`filename-at-point' and switches you to a buffer visiting the file -FILENAME in another window. The function creates a buffer if none -already exists. This function is similar to `find-file-other-window'. - - There are two hook variables that allow extensions to modify the -operation of visiting files. Visiting a file that does not exist runs -the functions in the list `find-file-not-found-hooks'; the value of this -variable is expected to be a list of functions which are called one by -one until one of them returns non-`nil'. Any visiting of a file, -whether extant or not, expects `find-file-hooks' to contain list of -functions and calls them all, one by one. In both cases the functions -receive no arguments. Visiting a nonexistent file runs the -`find-file-not-found-hooks' first. - - -File: xemacs.info, Node: Saving, Next: Reverting, Prev: Visiting, Up: Files - -Saving Files -============ - - "Saving" a buffer in Emacs means writing its contents back into the -file that was visited in the buffer. - -`C-x C-s' - Save the current buffer in its visited file (`save-buffer'). - -`C-x s' - Save any or all buffers in their visited files - (`save-some-buffers'). - -`M-~' - Forget that the current buffer has been changed (`not-modified'). - -`C-x C-w' - Save the current buffer in a specified file, and record that file - as the one visited in the buffer (`write-file'). - -`M-x set-visited-file-name' - Change file the name under which the current buffer will be saved. - - To save a file and make your changes permanent, type `C-x C-s' -(`save-buffer'). After saving is finished, `C-x C-s' prints a message -such as: - - Wrote /u/rms/gnu/gnu.tasks - -If the selected buffer is not modified (no changes have been made in it -since the buffer was created or last saved), Emacs does not save it -because it would have no effect. Instead, `C-x C-s' prints a message -in the echo area saying: - - (No changes need to be saved) - - The command `C-x s' (`save-some-buffers') can save any or all -modified buffers. First it asks, for each modified buffer, whether to -save it. The questions should be answered with `y' or `n'. `C-x C-c', -the key that kills Emacs, invokes `save-some-buffers' and therefore -asks the same questions. - - If you have changed a buffer and do not want the changes to be saved, -you should take some action to prevent it. Otherwise, you are liable to -save it by mistake each time you use `save-some-buffers' or a related -command. One thing you can do is type `M-~' (`not-modified'), which -removes the indication that the buffer is modified. If you do this, -none of the save commands will believe that the buffer needs to be -saved. (`~' is often used as a mathematical symbol for `not'; thus -`Meta-~' is `not', metafied.) You could also use -`set-visited-file-name' (see below) to mark the buffer as visiting a -different file name, not in use for anything important. - - You can also undo all the changes made since the file was visited or -saved, by reading the text from the file again. This is called -"reverting". *Note Reverting::. Alternatively, you can undo all the -changes by repeating the undo command `C-x u'; but this only works if -you have not made more changes than the undo mechanism can remember. - - `M-x set-visited-file-name' alters the name of the file that the -current buffer is visiting. It prompts you for the new file name in the -minibuffer. You can also use `set-visited-file-name' on a buffer that -is not visiting a file. The buffer's name is changed to correspond to -the file it is now visiting unless the new name is already used by a -different buffer; in that case, the buffer name is not changed. -`set-visited-file-name' does not save the buffer in the newly visited -file; it just alters the records inside Emacs so that it will save the -buffer in that file. It also marks the buffer as "modified" so that -`C-x C-s' will save. - - If you wish to mark a buffer as visiting a different file and save it -right away, use `C-x C-w' (`write-file'). It is precisely equivalent -to `set-visited-file-name' followed by `C-x C-s'. `C-x C-s' used on a -buffer that is not visiting a file has the same effect as `C-x C-w'; -that is, it reads a file name, marks the buffer as visiting that file, -and saves it there. The default file name in a buffer that is not -visiting a file is made by combining the buffer name with the buffer's -default directory. - - If Emacs is about to save a file and sees that the date of the latest -version on disk does not match what Emacs last read or wrote, Emacs -notifies you of this fact, because it probably indicates a problem -caused by simultaneous editing and requires your immediate attention. -*Note Simultaneous Editing: Interlocking. - - If the variable `require-final-newline' is non-`nil', Emacs puts a -newline at the end of any file that doesn't already end in one, every -time a file is saved or written. - - Use the hook variable `write-file-hooks' to implement other ways to -write files, and specify things to be done before files are written. -The value of this variable should be a list of Lisp functions. When a -file is to be written, the functions in the list are called, one by -one, with no arguments. If one of them returns a non-`nil' value, Emacs -takes this to mean that the file has been written in some suitable -fashion; the rest of the functions are not called, and normal writing is -not done. Use the hook variable `after-save-hook' to list all the -functions to be called after writing out a buffer to a file. - -* Menu: - -* Backup:: How Emacs saves the old version of your file. -* Interlocking:: How Emacs protects against simultaneous editing - of one file by two users. - - -File: xemacs.info, Node: Backup, Next: Interlocking, Prev: Saving, Up: Saving - -Backup Files ------------- - - Because Unix does not provide version numbers in file names, -rewriting a file in Unix automatically destroys all record of what the -file used to contain. Thus, saving a file from Emacs throws away the -old contents of the file--or it would, except that Emacs carefully -copies the old contents to another file, called the "backup" file, -before actually saving. (Make sure that the variable -`make-backup-files' is non-`nil'. Backup files are not written if this -variable is `nil'). - - At your option, Emacs can keep either a single backup file or a -series of numbered backup files for each file you edit. - - Emacs makes a backup for a file only the first time a file is saved -from one buffer. No matter how many times you save a file, its backup -file continues to contain the contents from before the file was visited. -Normally this means that the backup file contains the contents from -before the current editing session; however, if you kill the buffer and -then visit the file again, a new backup file is made by the next save. - -* Menu: - -* Names: Backup Names. How backup files are named; - Choosing single or numbered backup files. -* Deletion: Backup Deletion. Emacs deletes excess numbered backups. -* Copying: Backup Copying. Backups can be made by copying or renaming. - - -File: xemacs.info, Node: Backup Names, Next: Backup Deletion, Prev: Backup, Up: Backup - -Single or Numbered Backups -.......................... - - If you choose to have a single backup file (the default), the backup -file's name is constructed by appending `~' to the file name being -edited; thus, the backup file for `eval.c' is `eval.c~'. - - If you choose to have a series of numbered backup files, backup file -names are made by appending `.~', the number, and another `~' to the -original file name. Thus, the backup files of `eval.c' would be called -`eval.c.~1~', `eval.c.~2~', and so on, through names like -`eval.c.~259~' and beyond. - - If protection stops you from writing backup files under the usual -names, the backup file is written as `%backup%~' in your home directory. -Only one such file can exist, so only the most recently made backup is -available. - - The choice of single backup or numbered backups is controlled by the -variable `version-control'. Its possible values are: - -`t' - Make numbered backups. - -`nil' - Make numbered backups for files that have numbered backups already. - Otherwise, make single backups. - -`never' - Never make numbered backups; always make single backups. - -`version-control' may be set locally in an individual buffer to control -the making of backups for that buffer's file. For example, Rmail mode -locally sets `version-control' to `never' to make sure that there is -only one backup for an Rmail file. *Note Locals::. - - -File: xemacs.info, Node: Backup Deletion, Next: Backup Copying, Prev: Backup Names, Up: Backup - -Automatic Deletion of Backups -............................. - - To prevent unlimited consumption of disk space, Emacs can delete -numbered backup versions automatically. Generally Emacs keeps the -first few backups and the latest few backups, deleting any in between. -This happens every time a new backup is made. The two variables that -control the deletion are `kept-old-versions' and `kept-new-versions'. -Their values are, respectively the number of oldest (lowest-numbered) -backups to keep and the number of newest (highest-numbered) ones to -keep, each time a new backup is made. The values are used just after a -new backup version is made; that newly made backup is included in the -count in `kept-new-versions'. By default, both variables are 2. - - If `trim-versions-without-asking' is non-`nil', excess middle -versions are deleted without notification. If it is `nil', the -default, you are asked whether the excess middle versions should really -be deleted. - - You can also use Dired's `.' (Period) command to delete old versions. -*Note Dired::. - diff --git a/info/xemacs.info-7 b/info/xemacs.info-7 index b04611c..c6c017a 100644 --- a/info/xemacs.info-7 +++ b/info/xemacs.info-7 @@ -30,6 +30,346 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Visiting, Next: Saving, Prev: File Names, Up: Files + +Visiting Files +============== + +`C-x C-f' + Visit a file (`find-file'). + +`C-x C-v' + Visit a different file instead of the one visited last + (`find-alternate-file'). + +`C-x 4 C-f' + Visit a file, in another window (`find-file-other-window'). Don't + change this window. + +`C-x 5 C-f' + Visit a file, in another frame (`find-file-other-frame'). Don't + change this window or frame. + + "Visiting" a file means copying its contents into an Emacs buffer so +you can edit it. Emacs creates a new buffer for each file you visit. +We say that the buffer is visiting the file that it was created to +hold. Emacs constructs the buffer name from the file name by throwing +away the directory and keeping just the file name. For example, a file +named `/usr/rms/emacs.tex' is displayed in a buffer named `emacs.tex'. +If a buffer with that name exists, a unique name is constructed by +appending `<2>', `<3>',and so on, using the lowest number that makes a +name that is not already in use. + + Each window's mode line shows the name of the buffer that is being +displayed in that window, so you can always tell what buffer you are +editing. + + The changes you make with Emacs are made in the Emacs buffer. They +do not take effect in the file that you visit, or any other permanent +place, until you "save" the buffer. Saving the buffer means that Emacs +writes the current contents of the buffer into its visited file. *Note +Saving::. + + If a buffer contains changes that have not been saved, the buffer is +said to be "modified". This is important because it implies that some +changes will be lost if the buffer is not saved. The mode line displays +two stars near the left margin if the buffer is modified. + + To visit a file, use the command `C-x C-f' (`find-file'). Follow +the command with the name of the file you wish to visit, terminated by a +. If you are using XEmacs under X, you can also use the Open... +command from the File menu bar item. + + The file name is read using the minibuffer (*note Minibuffer::.), +with defaulting and completion in the standard manner (*note File +Names::.). While in the minibuffer, you can abort `C-x C-f' by typing +`C-g'. + + `C-x C-f' has completed successfully when text appears on the screen +and a new buffer name appears in the mode line. If the specified file +does not exist and could not be created or cannot be read, an error +results. The error message is printed in the echo area, and includes +the name of the file that Emacs was trying to visit. + + If you visit a file that is already in Emacs, `C-x C-f' does not make +another copy. It selects the existing buffer containing that file. +However, before doing so, it checks that the file itself has not changed +since you visited or saved it last. If the file has changed, Emacs +prints a warning message. *Note Simultaneous Editing: Interlocking. + + You can switch to a specific file called out in the current buffer by +calling the function `find-this-file'. By providing a prefix argument, +this function calls `filename-at-point' and switches to a buffer +visiting the file FILENAME. It creates one if none already exists. You +can use this function to edit the file mentioned in the buffer you are +working in or to test if the file exists. You can do that by using the +minibuffer completion after snatching the all or part of the filename. + + If the variable `find-file-use-truenames''s value is non-`nil', a +buffer's visited filename will always be traced back to the real file. +The filename will never be a symbolic link, and there will never be a +symbolic link anywhere in its directory path. In other words, the +`buffer-file-name' and `buffer-file-truename' will be equal. + + If the variable `find-file-compare-truenames' value is non-`nil', +the `find-file' command will check the `buffer-file-truename' of all +visited files when deciding whether a given file is already in a +buffer, instead of just `buffer-file-name'. If you attempt to visit +another file which is a hard-link or symbolic-link to a file that is +already in a buffer, the existing buffer will be found instead of a +newly created one. + + If you want to create a file, just visit it. Emacs prints `(New +File)' in the echo area, but in other respects behaves as if you had +visited an existing empty file. If you make any changes and save them, +the file is created. + + If you visit a nonexistent file unintentionally (because you typed +the wrong file name), use the `C-x C-v' (`find-alternate-file') command +to visit the file you wanted. `C-x C-v' is similar to `C-x C-f', but +it kills the current buffer (after first offering to save it if it is +modified). `C-x C-v' is allowed even if the current buffer is not +visiting a file. + + If the file you specify is actually a directory, Dired is called on +that directory (*note Dired::.). To inhibit this, set the variable +`find-file-run-dired' to `nil'; then it is an error to try to visit a +directory. + + `C-x 4 f' (`find-file-other-window') is like `C-x C-f' except that +the buffer containing the specified file is selected in another window. +The window that was selected before `C-x 4 f' continues to show the +same buffer it was already showing. If you use this command when only +one window is being displayed, that window is split in two, with one +window showing the same buffer as before, and the other one showing the +newly requested file. *Note Windows::. + + `C-x 5 C-f' (`find-file-other-frame') is like `C-x C-f' except that +it creates a new frame in which the file is displayed. + + Use the function `find-this-file-other-window' to edit a file +mentioned in the buffer you are editing or to test if that file exists. +To do this, use the minibuffer completion after snatching the part or +all of the filename. By providing a prefix argument, the function calls +`filename-at-point' and switches you to a buffer visiting the file +FILENAME in another window. The function creates a buffer if none +already exists. This function is similar to `find-file-other-window'. + + There are two hook variables that allow extensions to modify the +operation of visiting files. Visiting a file that does not exist runs +the functions in the list `find-file-not-found-hooks'; the value of this +variable is expected to be a list of functions which are called one by +one until one of them returns non-`nil'. Any visiting of a file, +whether extant or not, expects `find-file-hooks' to contain list of +functions and calls them all, one by one. In both cases the functions +receive no arguments. Visiting a nonexistent file runs the +`find-file-not-found-hooks' first. + + +File: xemacs.info, Node: Saving, Next: Reverting, Prev: Visiting, Up: Files + +Saving Files +============ + + "Saving" a buffer in Emacs means writing its contents back into the +file that was visited in the buffer. + +`C-x C-s' + Save the current buffer in its visited file (`save-buffer'). + +`C-x s' + Save any or all buffers in their visited files + (`save-some-buffers'). + +`M-~' + Forget that the current buffer has been changed (`not-modified'). + +`C-x C-w' + Save the current buffer in a specified file, and record that file + as the one visited in the buffer (`write-file'). + +`M-x set-visited-file-name' + Change file the name under which the current buffer will be saved. + + To save a file and make your changes permanent, type `C-x C-s' +(`save-buffer'). After saving is finished, `C-x C-s' prints a message +such as: + + Wrote /u/rms/gnu/gnu.tasks + +If the selected buffer is not modified (no changes have been made in it +since the buffer was created or last saved), Emacs does not save it +because it would have no effect. Instead, `C-x C-s' prints a message +in the echo area saying: + + (No changes need to be saved) + + The command `C-x s' (`save-some-buffers') can save any or all +modified buffers. First it asks, for each modified buffer, whether to +save it. The questions should be answered with `y' or `n'. `C-x C-c', +the key that kills Emacs, invokes `save-some-buffers' and therefore +asks the same questions. + + If you have changed a buffer and do not want the changes to be saved, +you should take some action to prevent it. Otherwise, you are liable to +save it by mistake each time you use `save-some-buffers' or a related +command. One thing you can do is type `M-~' (`not-modified'), which +removes the indication that the buffer is modified. If you do this, +none of the save commands will believe that the buffer needs to be +saved. (`~' is often used as a mathematical symbol for `not'; thus +`Meta-~' is `not', metafied.) You could also use +`set-visited-file-name' (see below) to mark the buffer as visiting a +different file name, not in use for anything important. + + You can also undo all the changes made since the file was visited or +saved, by reading the text from the file again. This is called +"reverting". *Note Reverting::. Alternatively, you can undo all the +changes by repeating the undo command `C-x u'; but this only works if +you have not made more changes than the undo mechanism can remember. + + `M-x set-visited-file-name' alters the name of the file that the +current buffer is visiting. It prompts you for the new file name in the +minibuffer. You can also use `set-visited-file-name' on a buffer that +is not visiting a file. The buffer's name is changed to correspond to +the file it is now visiting unless the new name is already used by a +different buffer; in that case, the buffer name is not changed. +`set-visited-file-name' does not save the buffer in the newly visited +file; it just alters the records inside Emacs so that it will save the +buffer in that file. It also marks the buffer as "modified" so that +`C-x C-s' will save. + + If you wish to mark a buffer as visiting a different file and save it +right away, use `C-x C-w' (`write-file'). It is precisely equivalent +to `set-visited-file-name' followed by `C-x C-s'. `C-x C-s' used on a +buffer that is not visiting a file has the same effect as `C-x C-w'; +that is, it reads a file name, marks the buffer as visiting that file, +and saves it there. The default file name in a buffer that is not +visiting a file is made by combining the buffer name with the buffer's +default directory. + + If Emacs is about to save a file and sees that the date of the latest +version on disk does not match what Emacs last read or wrote, Emacs +notifies you of this fact, because it probably indicates a problem +caused by simultaneous editing and requires your immediate attention. +*Note Simultaneous Editing: Interlocking. + + If the variable `require-final-newline' is non-`nil', Emacs puts a +newline at the end of any file that doesn't already end in one, every +time a file is saved or written. + + Use the hook variable `write-file-hooks' to implement other ways to +write files, and specify things to be done before files are written. +The value of this variable should be a list of Lisp functions. When a +file is to be written, the functions in the list are called, one by +one, with no arguments. If one of them returns a non-`nil' value, Emacs +takes this to mean that the file has been written in some suitable +fashion; the rest of the functions are not called, and normal writing is +not done. Use the hook variable `after-save-hook' to list all the +functions to be called after writing out a buffer to a file. + +* Menu: + +* Backup:: How Emacs saves the old version of your file. +* Interlocking:: How Emacs protects against simultaneous editing + of one file by two users. + + +File: xemacs.info, Node: Backup, Next: Interlocking, Prev: Saving, Up: Saving + +Backup Files +------------ + + Because Unix does not provide version numbers in file names, +rewriting a file in Unix automatically destroys all record of what the +file used to contain. Thus, saving a file from Emacs throws away the +old contents of the file--or it would, except that Emacs carefully +copies the old contents to another file, called the "backup" file, +before actually saving. (Make sure that the variable +`make-backup-files' is non-`nil'. Backup files are not written if this +variable is `nil'). + + At your option, Emacs can keep either a single backup file or a +series of numbered backup files for each file you edit. + + Emacs makes a backup for a file only the first time a file is saved +from one buffer. No matter how many times you save a file, its backup +file continues to contain the contents from before the file was visited. +Normally this means that the backup file contains the contents from +before the current editing session; however, if you kill the buffer and +then visit the file again, a new backup file is made by the next save. + +* Menu: + +* Names: Backup Names. How backup files are named; + Choosing single or numbered backup files. +* Deletion: Backup Deletion. Emacs deletes excess numbered backups. +* Copying: Backup Copying. Backups can be made by copying or renaming. + + +File: xemacs.info, Node: Backup Names, Next: Backup Deletion, Prev: Backup, Up: Backup + +Single or Numbered Backups +.......................... + + If you choose to have a single backup file (the default), the backup +file's name is constructed by appending `~' to the file name being +edited; thus, the backup file for `eval.c' is `eval.c~'. + + If you choose to have a series of numbered backup files, backup file +names are made by appending `.~', the number, and another `~' to the +original file name. Thus, the backup files of `eval.c' would be called +`eval.c.~1~', `eval.c.~2~', and so on, through names like +`eval.c.~259~' and beyond. + + If protection stops you from writing backup files under the usual +names, the backup file is written as `%backup%~' in your home directory. +Only one such file can exist, so only the most recently made backup is +available. + + The choice of single backup or numbered backups is controlled by the +variable `version-control'. Its possible values are: + +`t' + Make numbered backups. + +`nil' + Make numbered backups for files that have numbered backups already. + Otherwise, make single backups. + +`never' + Never make numbered backups; always make single backups. + +`version-control' may be set locally in an individual buffer to control +the making of backups for that buffer's file. For example, Rmail mode +locally sets `version-control' to `never' to make sure that there is +only one backup for an Rmail file. *Note Locals::. + + +File: xemacs.info, Node: Backup Deletion, Next: Backup Copying, Prev: Backup Names, Up: Backup + +Automatic Deletion of Backups +............................. + + To prevent unlimited consumption of disk space, Emacs can delete +numbered backup versions automatically. Generally Emacs keeps the +first few backups and the latest few backups, deleting any in between. +This happens every time a new backup is made. The two variables that +control the deletion are `kept-old-versions' and `kept-new-versions'. +Their values are, respectively the number of oldest (lowest-numbered) +backups to keep and the number of newest (highest-numbered) ones to +keep, each time a new backup is made. The values are used just after a +new backup version is made; that newly made backup is included in the +count in `kept-new-versions'. By default, both variables are 2. + + If `trim-versions-without-asking' is non-`nil', excess middle +versions are deleted without notification. If it is `nil', the +default, you are asked whether the excess middle versions should really +be deleted. + + You can also use Dired's `.' (Period) command to delete old versions. +*Note Dired::. + + File: xemacs.info, Node: Backup Copying, Prev: Backup Deletion, Up: Backup Copying vs. Renaming @@ -768,371 +1108,3 @@ that is ready for distribution to users. * Making Snapshots:: The snapshot facilities. * Snapshot Caveats:: Things to be careful of when using snapshots. - -File: xemacs.info, Node: Making Snapshots, Next: Snapshot Caveats, Prev: Snapshots, Up: Snapshots - -Making and Using Snapshots -.......................... - - There are two basic commands for snapshots; one makes a snapshot -with a given name, the other retrieves a named snapshot. - -`C-x v s NAME ' - Define the last saved versions of every registered file in or - under the current directory as a snapshot named NAME - (`vc-create-snapshot'). - -`C-x v r NAME ' - Check out all registered files at or below the current directory - level using whatever versions correspond to the snapshot NAME - (`vc-retrieve-snapshot'). - - This command reports an error if any files are locked at or below - the current directory, without changing anything; this is to avoid - overwriting work in progress. - - A snapshot uses a very small amount of resources--just enough to -record the list of file names and which version belongs to the -snapshot. Thus, you need not hesitate to create snapshots whenever -they are useful. - - You can give a snapshot name as an argument to `C-x v =' or `C-x v -~' (*note Old Versions::.). Thus, you can use it to compare a snapshot -against the current files, or two snapshots against each other, or a -snapshot against a named version. - - -File: xemacs.info, Node: Snapshot Caveats, Prev: Making Snapshots, Up: Snapshots - -Snapshot Caveats -................ - - VC's snapshot facilities are modeled on RCS's named-configuration -support. They use RCS's native facilities for this, so under VC -snapshots made using RCS are visible even when you bypass VC. - - For SCCS, VC implements snapshots itself. The files it uses contain -name/file/version-number triples. These snapshots are visible only -through VC. - - A snapshot is a set of checked-in versions. So make sure that all -the files are checked in and not locked when you make a snapshot. - - File renaming and deletion can create some difficulties with -snapshots. This is not a VC-specific problem, but a general design -issue in version control systems that no one has solved very well yet. - - If you rename a registered file, you need to rename its master along -with it (the command `vc-rename-file' does this automatically). If you -are using SCCS, you must also update the records of the snapshot, to -mention the file by its new name (`vc-rename-file' does this, too). An -old snapshot that refers to a master file that no longer exists under -the recorded name is invalid; VC can no longer retrieve it. It would -be beyond the scope of this manual to explain enough about RCS and SCCS -to explain how to update the snapshots by hand. - - Using `vc-rename-file' makes the snapshot remain valid for -retrieval, but it does not solve all problems. For example, some of the -files in the program probably refer to others by name. At the very -least, the makefile probably mentions the file that you renamed. If you -retrieve an old snapshot, the renamed file is retrieved under its new -name, which is not the name that the makefile expects. So the program -won't really work as retrieved. - - -File: xemacs.info, Node: Version Headers, Prev: Snapshots, Up: Version Control - -Inserting Version Control Headers ---------------------------------- - - Sometimes it is convenient to put version identification strings -directly into working files. Certain special strings called "version -headers" are replaced in each successive version by the number of that -version. - - You can use the `C-x v h' command (`vc-insert-headers') to insert a -suitable header string. - -`C-x v h' - Insert headers in a file for use with your version-control system. - - The default header string is `\$Id\$' for RCS and `\%W\%' for SCCS. -(The actual strings inserted do not have the backslashes in them. They -were placed in the Info source file so that the strings don't get -interpreted as version-control headers when the Info source files are -maintained under version control.) You can specify other headers to -insert by setting the variable `vc-header-alist'. Its value is a list -of elements of the form `(PROGRAM . STRING)' where PROGRAM is `RCS' or -`SCCS' and STRING is the string to use. - - Instead of a single string, you can specify a list of strings; then -each string in the list is inserted as a separate header on a line of -its own. - - It is often necessary to use "superfluous" backslashes when writing -the strings that you put in this variable. This is to prevent the -string in the constant from being interpreted as a header itself if the -Emacs Lisp file containing it is maintained with version control. - - Each header is inserted surrounded by tabs, inside comment -delimiters, on a new line at the start of the buffer. Normally the -ordinary comment start and comment end strings of the current mode are -used, but for certain modes, there are special comment delimiters for -this purpose; the variable `vc-comment-alist' specifies them. Each -element of this list has the form `(MODE STARTER ENDER)'. - - The variable `vc-static-header-alist' specifies further strings to -add based on the name of the buffer. Its value should be a list of -elements of the form `(REGEXP . FORMAT)'. Whenever REGEXP matches the -buffer name, FORMAT is inserted as part of the header. A header line -is inserted for each element that matches the buffer name, and for each -string specified by `vc-header-alist'. The header line is made by -processing the string from `vc-header-alist' with the format taken from -the element. The default value for `vc-static-header-alist' is: - - (("\\.c$" . - "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\ - #endif /* lint */\n")) - -which specifies insertion of a string of this form: - - - #ifndef lint - static char vcid[] = "STRING"; - #endif /* lint */ - - -File: xemacs.info, Node: ListDir, Next: Comparing Files, Prev: Version Control, Up: Files - -Listing a File Directory -======================== - - Files are organized by Unix into "directories". A "directory -listing" is a list of all the files in a directory. Emacs provides -directory listings in brief format (file names only) and verbose format -(sizes, dates, and authors included). - -`C-x C-d DIR-OR-PATTERN' - Print a brief directory listing (`list-directory'). - -`C-u C-x C-d DIR-OR-PATTERN' - Print a verbose directory listing. - - To print a directory listing, use `C-x C-d' (`list-directory'). -This command prompts in the minibuffer for a file name which is either -a directory to be listed or pattern containing wildcards for the files -to be listed. For example, - - C-x C-d /u2/emacs/etc - -lists all the files in directory `/u2/emacs/etc'. An example of -specifying a file name pattern is: - - C-x C-d /u2/emacs/src/*.c - - Normally, `C-x C-d' prints a brief directory listing containing just -file names. A numeric argument (regardless of value) tells it to print -a verbose listing (like `ls -l'). - - Emacs obtains the text of a directory listing by running `ls' in an -inferior process. Two Emacs variables control the switches passed to -`ls': `list-directory-brief-switches' is a string giving the switches -to use in brief listings (`"-CF"' by default). -`list-directory-verbose-switches' is a string giving the switches to -use in a verbose listing (`"-l"' by default). - - The variable `directory-abbrev-alist' is an alist of abbreviations -for file directories. The list consists of elements of the form `(FROM -. TO)', each meaning to replace `FROM' with `TO' when it appears in a -directory name. This replacement is done when setting up the default -directory of a newly visited file. Every `FROM' string should start -with ``^''. - - Use this feature when you have directories which you normally refer -to via absolute symbolic links. Make `TO' the name of the link, and -`FROM' the name it is linked to. - - -File: xemacs.info, Node: Comparing Files, Next: Dired, Prev: ListDir, Up: Files - -Comparing Files -=============== - - The command `M-x diff' compares two files, displaying the -differences in an Emacs buffer named `*Diff*'. It works by running the -`diff' program, using options taken from the variable `diff-switches', -whose value should be a string. - - The buffer `*Diff*' has Compilation mode as its major mode, so you -can use `C-x `' to visit successive changed locations in the two source -files. You can also move to a particular hunk of changes and type `C-c -C-c' to find the corresponding source location. You can also use the -other special commands of Compilation mode: and for -scrolling, and `M-p' and `M-n' for cursor motion. *Note Compilation::. - - The command `M-x diff-backup' compares a specified file with its most -recent backup. If you specify the name of a backup file, `diff-backup' -compares it with the source file that it is a backup of. - - The command `M-x compare-windows' compares the text in the current -window with that in the next window. Comparison starts at point in each -window. Point moves forward in each window, a character at a time in -each window, until the next characters in the two windows are -different. Then the command is finished. For more information about -windows in Emacs, *Note Windows::. - - With a numeric argument, `compare-windows' ignores changes in -whitespace. If the variable `compare-ignore-case' is non-`nil', it -ignores differences in case as well. - - -File: xemacs.info, Node: Dired, Next: Misc File Ops, Prev: Comparing Files, Up: Files - -Dired, the Directory Editor -=========================== - - Dired makes it easy to delete or visit many of the files in a single -directory at once. It creates an Emacs buffer containing a listing of -the directory. You can use the normal Emacs commands to move around in -this buffer and special Dired commands to operate on the files. - -* Menu: - -* Enter: Dired Enter. How to invoke Dired. -* Edit: Dired Edit. Editing the Dired buffer. -* Deletion: Dired Deletion. Deleting files with Dired. -* Immed: Dired Immed. Other file operations through Dired. - - -File: xemacs.info, Node: Dired Enter, Next: Dired Edit, Prev: Dired, Up: Dired - -Entering Dired --------------- - - To invoke dired, type `C-x d' or `M-x dired'. The command reads a -directory name or wildcard file name pattern as a minibuffer argument -just like the `list-directory' command, `C-x C-d'. Where `dired' -differs from `list-directory' is in naming the buffer after the -directory name or the wildcard pattern used for the listing, and putting -the buffer into Dired mode so that the special commands of Dired are -available in it. The variable `dired-listing-switches' is a string -used as an argument to `ls' in making the directory; this string must -contain `-l'. - - To display the Dired buffer in another window rather than in the -selected window, use `C-x 4 d' (`dired-other-window)' instead of `C-x -d'. - - -File: xemacs.info, Node: Dired Edit, Next: Dired Deletion, Prev: Dired Enter, Up: Dired - -Editing in Dired ----------------- - - Once the Dired buffer exists, you can switch freely between it and -other Emacs buffers. Whenever the Dired buffer is selected, certain -special commands are provided that operate on files that are listed. -The Dired buffer is "read-only", and inserting text in it is not -useful, so ordinary printing characters such as `d' and `x' are used -for Dired commands. Most Dired commands operate on the file described -by the line that point is on. Some commands perform operations -immediately; others "flag" a file to be operated on later. - - Most Dired commands that operate on the current line's file also -treat a numeric argument as a repeat count, meaning to act on the files -of the next few lines. A negative argument means to operate on the -files of the preceding lines, and leave point on the first of those -lines. - - All the usual Emacs cursor motion commands are available in Dired -buffers. Some special purpose commands are also provided. The keys -`C-n' and `C-p' are redefined so that they try to position the cursor -at the beginning of the filename on the line, rather than at the -beginning of the line. - - For extra convenience, and `n' in Dired are equivalent to -`C-n'. `p' is equivalent to `C-p'. Moving by lines is done so often -in Dired that it deserves to be easy to type. (move up and -unflag) is often useful simply for moving up. - - The `g' command in Dired runs `revert-buffer' to reinitialize the -buffer from the actual disk directory and show any changes made in the -directory by programs other than Dired. All deletion flags in the Dired -buffer are lost when this is done. - - -File: xemacs.info, Node: Dired Deletion, Next: Dired Immed, Prev: Dired Edit, Up: Dired - -Deleting Files With Dired -------------------------- - - The primary use of Dired is to flag files for deletion and then -delete them. - -`d' - Flag this file for deletion. - -`u' - Remove deletion-flag on this line. - -`' - Remove deletion-flag on previous line, moving point to that line. - -`x' - Delete the files that are flagged for deletion. - -`#' - Flag all auto-save files (files whose names start and end with `#') - for deletion (*note Auto Save::.). - -`~' - Flag all backup files (files whose names end with `~') for deletion - (*note Backup::.). - -`. (Period)' - Flag excess numeric backup files for deletion. The oldest and - newest few backup files of any one file are exempt; the middle - ones are flagged. - - You can flag a file for deletion by moving to the line describing the -file and typing `d' or `C-d'. The deletion flag is visible as a `D' at -the beginning of the line. Point is moved to the beginning of the next -line, so that repeated `d' commands flag successive files. - - The files are flagged for deletion rather than deleted immediately to -avoid the danger of deleting a file accidentally. Until you direct -Dired to delete the flagged files, you can remove deletion flags using -the commands `u' and . `u' works just like `d', but removes flags -rather than making flags. moves upward, removing flags; it is -like `u' with numeric argument automatically negated. - - To delete the flagged files, type `x'. This command first displays a -list of all the file names flagged for deletion, and requests -confirmation with `yes'. Once you confirm, all the flagged files are -deleted, and their lines are deleted from the text of the Dired buffer. -The shortened Dired buffer remains selected. If you answer `no' or -quit with `C-g', you return immediately to Dired, with the deletion -flags still present and no files actually deleted. - - The `#', `~', and `.' commands flag many files for deletion, based -on their names. These commands are useful precisely because they do -not actually delete any files; you can remove the deletion flags from -any flagged files that you really wish to keep. - - `#' flags for deletion all files that appear to have been made by -auto-saving (that is, files whose names begin and end with `#'). `~' -flags for deletion all files that appear to have been made as backups -for files that were edited (that is, files whose names end with `~'). - - `.' (Period) flags just some of the backup files for deletion: only -numeric backups that are not among the oldest few nor the newest few -backups of any one file. Normally `dired-kept-versions' (not -`kept-new-versions'; that applies only when saving) specifies the -number of newest versions of each file to keep, and `kept-old-versions' -specifies the number of oldest versions to keep. Period with a -positive numeric argument, as in `C-u 3 .', specifies the number of -newest versions to keep, overriding `dired-kept-versions'. A negative -numeric argument overrides `kept-old-versions', using minus the value -of the argument to specify the number of oldest versions of each file -to keep. - diff --git a/info/xemacs.info-8 b/info/xemacs.info-8 index 55cfa43..d0c6fcf 100644 --- a/info/xemacs.info-8 +++ b/info/xemacs.info-8 @@ -30,6 +30,374 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Making Snapshots, Next: Snapshot Caveats, Prev: Snapshots, Up: Snapshots + +Making and Using Snapshots +.......................... + + There are two basic commands for snapshots; one makes a snapshot +with a given name, the other retrieves a named snapshot. + +`C-x v s NAME ' + Define the last saved versions of every registered file in or + under the current directory as a snapshot named NAME + (`vc-create-snapshot'). + +`C-x v r NAME ' + Check out all registered files at or below the current directory + level using whatever versions correspond to the snapshot NAME + (`vc-retrieve-snapshot'). + + This command reports an error if any files are locked at or below + the current directory, without changing anything; this is to avoid + overwriting work in progress. + + A snapshot uses a very small amount of resources--just enough to +record the list of file names and which version belongs to the +snapshot. Thus, you need not hesitate to create snapshots whenever +they are useful. + + You can give a snapshot name as an argument to `C-x v =' or `C-x v +~' (*note Old Versions::.). Thus, you can use it to compare a snapshot +against the current files, or two snapshots against each other, or a +snapshot against a named version. + + +File: xemacs.info, Node: Snapshot Caveats, Prev: Making Snapshots, Up: Snapshots + +Snapshot Caveats +................ + + VC's snapshot facilities are modeled on RCS's named-configuration +support. They use RCS's native facilities for this, so under VC +snapshots made using RCS are visible even when you bypass VC. + + For SCCS, VC implements snapshots itself. The files it uses contain +name/file/version-number triples. These snapshots are visible only +through VC. + + A snapshot is a set of checked-in versions. So make sure that all +the files are checked in and not locked when you make a snapshot. + + File renaming and deletion can create some difficulties with +snapshots. This is not a VC-specific problem, but a general design +issue in version control systems that no one has solved very well yet. + + If you rename a registered file, you need to rename its master along +with it (the command `vc-rename-file' does this automatically). If you +are using SCCS, you must also update the records of the snapshot, to +mention the file by its new name (`vc-rename-file' does this, too). An +old snapshot that refers to a master file that no longer exists under +the recorded name is invalid; VC can no longer retrieve it. It would +be beyond the scope of this manual to explain enough about RCS and SCCS +to explain how to update the snapshots by hand. + + Using `vc-rename-file' makes the snapshot remain valid for +retrieval, but it does not solve all problems. For example, some of the +files in the program probably refer to others by name. At the very +least, the makefile probably mentions the file that you renamed. If you +retrieve an old snapshot, the renamed file is retrieved under its new +name, which is not the name that the makefile expects. So the program +won't really work as retrieved. + + +File: xemacs.info, Node: Version Headers, Prev: Snapshots, Up: Version Control + +Inserting Version Control Headers +--------------------------------- + + Sometimes it is convenient to put version identification strings +directly into working files. Certain special strings called "version +headers" are replaced in each successive version by the number of that +version. + + You can use the `C-x v h' command (`vc-insert-headers') to insert a +suitable header string. + +`C-x v h' + Insert headers in a file for use with your version-control system. + + The default header string is `\$Id\$' for RCS and `\%W\%' for SCCS. +(The actual strings inserted do not have the backslashes in them. They +were placed in the Info source file so that the strings don't get +interpreted as version-control headers when the Info source files are +maintained under version control.) You can specify other headers to +insert by setting the variable `vc-header-alist'. Its value is a list +of elements of the form `(PROGRAM . STRING)' where PROGRAM is `RCS' or +`SCCS' and STRING is the string to use. + + Instead of a single string, you can specify a list of strings; then +each string in the list is inserted as a separate header on a line of +its own. + + It is often necessary to use "superfluous" backslashes when writing +the strings that you put in this variable. This is to prevent the +string in the constant from being interpreted as a header itself if the +Emacs Lisp file containing it is maintained with version control. + + Each header is inserted surrounded by tabs, inside comment +delimiters, on a new line at the start of the buffer. Normally the +ordinary comment start and comment end strings of the current mode are +used, but for certain modes, there are special comment delimiters for +this purpose; the variable `vc-comment-alist' specifies them. Each +element of this list has the form `(MODE STARTER ENDER)'. + + The variable `vc-static-header-alist' specifies further strings to +add based on the name of the buffer. Its value should be a list of +elements of the form `(REGEXP . FORMAT)'. Whenever REGEXP matches the +buffer name, FORMAT is inserted as part of the header. A header line +is inserted for each element that matches the buffer name, and for each +string specified by `vc-header-alist'. The header line is made by +processing the string from `vc-header-alist' with the format taken from +the element. The default value for `vc-static-header-alist' is: + + (("\\.c$" . + "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\ + #endif /* lint */\n")) + +which specifies insertion of a string of this form: + + + #ifndef lint + static char vcid[] = "STRING"; + #endif /* lint */ + + +File: xemacs.info, Node: ListDir, Next: Comparing Files, Prev: Version Control, Up: Files + +Listing a File Directory +======================== + + Files are organized by Unix into "directories". A "directory +listing" is a list of all the files in a directory. Emacs provides +directory listings in brief format (file names only) and verbose format +(sizes, dates, and authors included). + +`C-x C-d DIR-OR-PATTERN' + Print a brief directory listing (`list-directory'). + +`C-u C-x C-d DIR-OR-PATTERN' + Print a verbose directory listing. + + To print a directory listing, use `C-x C-d' (`list-directory'). +This command prompts in the minibuffer for a file name which is either +a directory to be listed or pattern containing wildcards for the files +to be listed. For example, + + C-x C-d /u2/emacs/etc + +lists all the files in directory `/u2/emacs/etc'. An example of +specifying a file name pattern is: + + C-x C-d /u2/emacs/src/*.c + + Normally, `C-x C-d' prints a brief directory listing containing just +file names. A numeric argument (regardless of value) tells it to print +a verbose listing (like `ls -l'). + + Emacs obtains the text of a directory listing by running `ls' in an +inferior process. Two Emacs variables control the switches passed to +`ls': `list-directory-brief-switches' is a string giving the switches +to use in brief listings (`"-CF"' by default). +`list-directory-verbose-switches' is a string giving the switches to +use in a verbose listing (`"-l"' by default). + + The variable `directory-abbrev-alist' is an alist of abbreviations +for file directories. The list consists of elements of the form `(FROM +. TO)', each meaning to replace `FROM' with `TO' when it appears in a +directory name. This replacement is done when setting up the default +directory of a newly visited file. Every `FROM' string should start +with ``^''. + + Use this feature when you have directories which you normally refer +to via absolute symbolic links. Make `TO' the name of the link, and +`FROM' the name it is linked to. + + +File: xemacs.info, Node: Comparing Files, Next: Dired, Prev: ListDir, Up: Files + +Comparing Files +=============== + + The command `M-x diff' compares two files, displaying the +differences in an Emacs buffer named `*Diff*'. It works by running the +`diff' program, using options taken from the variable `diff-switches', +whose value should be a string. + + The buffer `*Diff*' has Compilation mode as its major mode, so you +can use `C-x `' to visit successive changed locations in the two source +files. You can also move to a particular hunk of changes and type `C-c +C-c' to find the corresponding source location. You can also use the +other special commands of Compilation mode: and for +scrolling, and `M-p' and `M-n' for cursor motion. *Note Compilation::. + + The command `M-x diff-backup' compares a specified file with its most +recent backup. If you specify the name of a backup file, `diff-backup' +compares it with the source file that it is a backup of. + + The command `M-x compare-windows' compares the text in the current +window with that in the next window. Comparison starts at point in each +window. Point moves forward in each window, a character at a time in +each window, until the next characters in the two windows are +different. Then the command is finished. For more information about +windows in Emacs, *Note Windows::. + + With a numeric argument, `compare-windows' ignores changes in +whitespace. If the variable `compare-ignore-case' is non-`nil', it +ignores differences in case as well. + + +File: xemacs.info, Node: Dired, Next: Misc File Ops, Prev: Comparing Files, Up: Files + +Dired, the Directory Editor +=========================== + + Dired makes it easy to delete or visit many of the files in a single +directory at once. It creates an Emacs buffer containing a listing of +the directory. You can use the normal Emacs commands to move around in +this buffer and special Dired commands to operate on the files. + +* Menu: + +* Enter: Dired Enter. How to invoke Dired. +* Edit: Dired Edit. Editing the Dired buffer. +* Deletion: Dired Deletion. Deleting files with Dired. +* Immed: Dired Immed. Other file operations through Dired. + + +File: xemacs.info, Node: Dired Enter, Next: Dired Edit, Prev: Dired, Up: Dired + +Entering Dired +-------------- + + To invoke dired, type `C-x d' or `M-x dired'. The command reads a +directory name or wildcard file name pattern as a minibuffer argument +just like the `list-directory' command, `C-x C-d'. Where `dired' +differs from `list-directory' is in naming the buffer after the +directory name or the wildcard pattern used for the listing, and putting +the buffer into Dired mode so that the special commands of Dired are +available in it. The variable `dired-listing-switches' is a string +used as an argument to `ls' in making the directory; this string must +contain `-l'. + + To display the Dired buffer in another window rather than in the +selected window, use `C-x 4 d' (`dired-other-window)' instead of `C-x +d'. + + +File: xemacs.info, Node: Dired Edit, Next: Dired Deletion, Prev: Dired Enter, Up: Dired + +Editing in Dired +---------------- + + Once the Dired buffer exists, you can switch freely between it and +other Emacs buffers. Whenever the Dired buffer is selected, certain +special commands are provided that operate on files that are listed. +The Dired buffer is "read-only", and inserting text in it is not +useful, so ordinary printing characters such as `d' and `x' are used +for Dired commands. Most Dired commands operate on the file described +by the line that point is on. Some commands perform operations +immediately; others "flag" a file to be operated on later. + + Most Dired commands that operate on the current line's file also +treat a numeric argument as a repeat count, meaning to act on the files +of the next few lines. A negative argument means to operate on the +files of the preceding lines, and leave point on the first of those +lines. + + All the usual Emacs cursor motion commands are available in Dired +buffers. Some special purpose commands are also provided. The keys +`C-n' and `C-p' are redefined so that they try to position the cursor +at the beginning of the filename on the line, rather than at the +beginning of the line. + + For extra convenience, and `n' in Dired are equivalent to +`C-n'. `p' is equivalent to `C-p'. Moving by lines is done so often +in Dired that it deserves to be easy to type. (move up and +unflag) is often useful simply for moving up. + + The `g' command in Dired runs `revert-buffer' to reinitialize the +buffer from the actual disk directory and show any changes made in the +directory by programs other than Dired. All deletion flags in the Dired +buffer are lost when this is done. + + +File: xemacs.info, Node: Dired Deletion, Next: Dired Immed, Prev: Dired Edit, Up: Dired + +Deleting Files With Dired +------------------------- + + The primary use of Dired is to flag files for deletion and then +delete them. + +`d' + Flag this file for deletion. + +`u' + Remove deletion-flag on this line. + +`' + Remove deletion-flag on previous line, moving point to that line. + +`x' + Delete the files that are flagged for deletion. + +`#' + Flag all auto-save files (files whose names start and end with `#') + for deletion (*note Auto Save::.). + +`~' + Flag all backup files (files whose names end with `~') for deletion + (*note Backup::.). + +`. (Period)' + Flag excess numeric backup files for deletion. The oldest and + newest few backup files of any one file are exempt; the middle + ones are flagged. + + You can flag a file for deletion by moving to the line describing the +file and typing `d' or `C-d'. The deletion flag is visible as a `D' at +the beginning of the line. Point is moved to the beginning of the next +line, so that repeated `d' commands flag successive files. + + The files are flagged for deletion rather than deleted immediately to +avoid the danger of deleting a file accidentally. Until you direct +Dired to delete the flagged files, you can remove deletion flags using +the commands `u' and . `u' works just like `d', but removes flags +rather than making flags. moves upward, removing flags; it is +like `u' with numeric argument automatically negated. + + To delete the flagged files, type `x'. This command first displays a +list of all the file names flagged for deletion, and requests +confirmation with `yes'. Once you confirm, all the flagged files are +deleted, and their lines are deleted from the text of the Dired buffer. +The shortened Dired buffer remains selected. If you answer `no' or +quit with `C-g', you return immediately to Dired, with the deletion +flags still present and no files actually deleted. + + The `#', `~', and `.' commands flag many files for deletion, based +on their names. These commands are useful precisely because they do +not actually delete any files; you can remove the deletion flags from +any flagged files that you really wish to keep. + + `#' flags for deletion all files that appear to have been made by +auto-saving (that is, files whose names begin and end with `#'). `~' +flags for deletion all files that appear to have been made as backups +for files that were edited (that is, files whose names end with `~'). + + `.' (Period) flags just some of the backup files for deletion: only +numeric backups that are not among the oldest few nor the newest few +backups of any one file. Normally `dired-kept-versions' (not +`kept-new-versions'; that applies only when saving) specifies the +number of newest versions of each file to keep, and `kept-old-versions' +specifies the number of oldest versions to keep. Period with a +positive numeric argument, as in `C-u 3 .', specifies the number of +newest versions to keep, overriding `dired-kept-versions'. A negative +numeric argument overrides `kept-old-versions', using minus the value +of the argument to specify the number of oldest versions of each file +to keep. + + File: xemacs.info, Node: Dired Immed, Prev: Dired Deletion, Up: Dired Immediate File Operations in Dired @@ -784,285 +1152,3 @@ coding systems, and input methods that go with it. It also shows some sample text to illustrate scripts used in this language environment. By default, this command describes the chosen language environment. - -File: xemacs.info, Node: Input Methods, Next: Select Input Method, Prev: Language Environments, Up: Mule - -Input Methods -============= - - An "input method" is a kind of character conversion designed -specifically for interactive input. In XEmacs, typically each language -has its own input method; sometimes several languages which use the same -characters can share one input method. A few languages support several -input methods. - - The simplest kind of input method works by mapping ASCII letters into -another alphabet. This is how the Greek and Russian input methods work. - - A more powerful technique is composition: converting sequences of -characters into one letter. Many European input methods use composition -to produce a single non-ASCII letter from a sequence that consists of a -letter followed by accent characters. For example, some methods convert -the sequence `'a' into a single accented letter. - - The input methods for syllabic scripts typically use mapping followed -by composition. The input methods for Thai and Korean work this way. -First, letters are mapped into symbols for particular sounds or tone -marks; then, sequences of these which make up a whole syllable are -mapped into one syllable sign. - - Chinese and Japanese require more complex methods. In Chinese input -methods, first you enter the phonetic spelling of a Chinese word (in -input method `chinese-py', among others), or a sequence of portions of -the character (input methods `chinese-4corner' and `chinese-sw', and -others). Since one phonetic spelling typically corresponds to many -different Chinese characters, you must select one of the alternatives -using special XEmacs commands. Keys such as `C-f', `C-b', `C-n', -`C-p', and digits have special definitions in this situation, used for -selecting among the alternatives. displays a buffer showing all -the possibilities. - - In Japanese input methods, first you input a whole word using -phonetic spelling; then, after the word is in the buffer, XEmacs -converts it into one or more characters using a large dictionary. One -phonetic spelling corresponds to many differently written Japanese -words, so you must select one of them; use `C-n' and `C-p' to cycle -through the alternatives. - - Sometimes it is useful to cut off input method processing so that the -characters you have just entered will not combine with subsequent -characters. For example, in input method `latin-1-postfix', the -sequence `e '' combines to form an `e' with an accent. What if you -want to enter them as separate characters? - - One way is to type the accent twice; that is a special feature for -entering the separate letter and accent. For example, `e ' '' gives -you the two characters `e''. Another way is to type another letter -after the `e'--something that won't combine with that--and immediately -delete it. For example, you could type `e e '' to get separate -`e' and `''. - - Another method, more general but not quite as easy to type, is to use -`C-\ C-\' between two characters to stop them from combining. This is -the command `C-\' (`toggle-input-method') used twice. *Note Select -Input Method::. - - `C-\ C-\' is especially useful inside an incremental search, because -stops waiting for more characters to combine, and starts searching for -what you have already entered. - - The variables `input-method-highlight-flag' and -`input-method-verbose-flag' control how input methods explain what is -happening. If `input-method-highlight-flag' is non-`nil', the partial -sequence is highlighted in the buffer. If `input-method-verbose-flag' -is non-`nil', the list of possible characters to type next is displayed -in the echo area (but not when you are in the minibuffer). - - -File: xemacs.info, Node: Select Input Method, Next: Coding Systems, Prev: Input Methods, Up: Mule - -Selecting an Input Method -========================= - -`C-\' - Enable or disable use of the selected input method. - -`C-x C-\ METHOD ' - Select a new input method for the current buffer. - -`C-h I METHOD ' -`C-h C-\ METHOD ' - Describe the input method METHOD (`describe-input-method'). By - default, it describes the current input method (if any). - -`M-x list-input-methods' - Display a list of all the supported input methods. - - To choose an input method for the current buffer, use `C-x -C-\' (`select-input-method'). This command reads the input method name -with the minibuffer; the name normally starts with the language -environment that it is meant to be used with. The variable -`current-input-method' records which input method is selected. - - Input methods use various sequences of ASCII characters to stand for -non-ASCII characters. Sometimes it is useful to turn off the input -method temporarily. To do this, type `C-\' (`toggle-input-method'). -To reenable the input method, type `C-\' again. - - If you type `C-\' and you have not yet selected an input method, it -prompts for you to specify one. This has the same effect as using `C-x - C-\' to specify an input method. - - Selecting a language environment specifies a default input method for -use in various buffers. When you have a default input method, you can -select it in the current buffer by typing `C-\'. The variable -`default-input-method' specifies the default input method (`nil' means -there is none). - - Some input methods for alphabetic scripts work by (in effect) -remapping the keyboard to emulate various keyboard layouts commonly used -for those scripts. How to do this remapping properly depends on your -actual keyboard layout. To specify which layout your keyboard has, use -the command `M-x quail-set-keyboard-layout'. - - To display a list of all the supported input methods, type `M-x -list-input-methods'. The list gives information about each input -method, including the string that stands for it in the mode line. - - -File: xemacs.info, Node: Coding Systems, Next: Recognize Coding, Prev: Select Input Method, Up: Mule - -Coding Systems -============== - - Users of various languages have established many more-or-less -standard coding systems for representing them. XEmacs does not use -these coding systems internally; instead, it converts from various -coding systems to its own system when reading data, and converts the -internal coding system to other coding systems when writing data. -Conversion is possible in reading or writing files, in sending or -receiving from the terminal, and in exchanging data with subprocesses. - - XEmacs assigns a name to each coding system. Most coding systems are -used for one language, and the name of the coding system starts with the -language name. Some coding systems are used for several languages; -their names usually start with `iso'. There are also special coding -systems `binary' and `no-conversion' which do not convert printing -characters at all. - - In addition to converting various representations of non-ASCII -characters, a coding system can perform end-of-line conversion. XEmacs -handles three different conventions for how to separate lines in a file: -newline, carriage-return linefeed, and just carriage-return. - -`C-h C CODING ' - Describe coding system CODING. - -`C-h C ' - Describe the coding systems currently in use. - -`M-x list-coding-systems' - Display a list of all the supported coding systems. - - The command `C-h C' (`describe-coding-system') displays information -about particular coding systems. You can specify a coding system name -as argument; alternatively, with an empty argument, it describes the -coding systems currently selected for various purposes, both in the -current buffer and as the defaults, and the priority list for -recognizing coding systems (*note Recognize Coding::.). - - To display a list of all the supported coding systems, type `M-x -list-coding-systems'. The list gives information about each coding -system, including the letter that stands for it in the mode line (*note -Mode Line::.). - - Each of the coding systems that appear in this list--except for -`binary', which means no conversion of any kind--specifies how and -whether to convert printing characters, but leaves the choice of -end-of-line conversion to be decided based on the contents of each file. -For example, if the file appears to use carriage-return linefeed between -lines, that end-of-line conversion will be used. - - Each of the listed coding systems has three variants which specify -exactly what to do for end-of-line conversion: - -`...-unix' - Don't do any end-of-line conversion; assume the file uses newline - to separate lines. (This is the convention normally used on Unix - and GNU systems.) - -`...-dos' - Assume the file uses carriage-return linefeed to separate lines, - and do the appropriate conversion. (This is the convention - normally used on Microsoft systems.) - -`...-mac' - Assume the file uses carriage-return to separate lines, and do the - appropriate conversion. (This is the convention normally used on - the Macintosh system.) - - These variant coding systems are omitted from the -`list-coding-systems' display for brevity, since they are entirely -predictable. For example, the coding system `iso-8859-1' has variants -`iso-8859-1-unix', `iso-8859-1-dos' and `iso-8859-1-mac'. - - In contrast, the coding system `binary' specifies no character code -conversion at all--none for non-Latin-1 byte values and none for end of -line. This is useful for reading or writing binary files, tar files, -and other files that must be examined verbatim. - - The easiest way to edit a file with no conversion of any kind is with -the `M-x find-file-literally' command. This uses `binary', and also -suppresses other XEmacs features that might convert the file contents -before you see them. *Note Visiting::. - - The coding system `no-conversion' means that the file contains -non-Latin-1 characters stored with the internal XEmacs encoding. It -handles end-of-line conversion based on the data encountered, and has -the usual three variants to specify the kind of end-of-line conversion. - - -File: xemacs.info, Node: Recognize Coding, Next: Specify Coding, Prev: Coding Systems, Up: Mule - -Recognizing Coding Systems -========================== - - Most of the time, XEmacs can recognize which coding system to use for -any given file-once you have specified your preferences. - - Some coding systems can be recognized or distinguished by which byte -sequences appear in the data. However, there are coding systems that -cannot be distinguished, not even potentially. For example, there is no -way to distinguish between Latin-1 and Latin-2; they use the same byte -values with different meanings. - - XEmacs handles this situation by means of a priority list of coding -systems. Whenever XEmacs reads a file, if you do not specify the coding -system to use, XEmacs checks the data against each coding system, -starting with the first in priority and working down the list, until it -finds a coding system that fits the data. Then it converts the file -contents assuming that they are represented in this coding system. - - The priority list of coding systems depends on the selected language -environment (*note Language Environments::.). For example, if you use -French, you probably want XEmacs to prefer Latin-1 to Latin-2; if you -use Czech, you probably want Latin-2 to be preferred. This is one of -the reasons to specify a language environment. - - However, you can alter the priority list in detail with the command -`M-x prefer-coding-system'. This command reads the name of a coding -system from the minibuffer, and adds it to the front of the priority -list, so that it is preferred to all others. If you use this command -several times, each use adds one element to the front of the priority -list. - - Sometimes a file name indicates which coding system to use for the -file. The variable `file-coding-system-alist' specifies this -correspondence. There is a special function -`modify-coding-system-alist' for adding elements to this list. For -example, to read and write all `.txt' using the coding system -`china-iso-8bit', you can execute this Lisp expression: - - (modify-coding-system-alist 'file "\\.txt\\'" 'china-iso-8bit) - -The first argument should be `file', the second argument should be a -regular expression that determines which files this applies to, and the -third argument says which coding system to use for these files. - - You can specify the coding system for a particular file using the -`-*-...-*-' construct at the beginning of a file, or a local variables -list at the end (*note File Variables::.). You do this by defining a -value for the "variable" named `coding'. XEmacs does not really have a -variable `coding'; instead of setting a variable, it uses the specified -coding system for the file. For example, `-*-mode: C; coding: -iso-8859-1;-*-' specifies use of the iso-8859-1 coding system, as well -as C mode. - - Once XEmacs has chosen a coding system for a buffer, it stores that -coding system in `buffer-file-coding-system' and uses that coding -system, by default, for operations that write from this buffer into a -file. This includes the commands `save-buffer' and `write-region'. If -you want to write files from this buffer using a different coding -system, you can specify a different coding system for the buffer using -`set-buffer-file-coding-system' (*note Specify Coding::.). - diff --git a/info/xemacs.info-9 b/info/xemacs.info-9 index dc22b94..b788f97 100644 --- a/info/xemacs.info-9 +++ b/info/xemacs.info-9 @@ -30,6 +30,288 @@ versions, except that the sections entitled "The GNU Manifesto", translation approved by the author instead of in the original English.  +File: xemacs.info, Node: Input Methods, Next: Select Input Method, Prev: Language Environments, Up: Mule + +Input Methods +============= + + An "input method" is a kind of character conversion designed +specifically for interactive input. In XEmacs, typically each language +has its own input method; sometimes several languages which use the same +characters can share one input method. A few languages support several +input methods. + + The simplest kind of input method works by mapping ASCII letters into +another alphabet. This is how the Greek and Russian input methods work. + + A more powerful technique is composition: converting sequences of +characters into one letter. Many European input methods use composition +to produce a single non-ASCII letter from a sequence that consists of a +letter followed by accent characters. For example, some methods convert +the sequence `'a' into a single accented letter. + + The input methods for syllabic scripts typically use mapping followed +by composition. The input methods for Thai and Korean work this way. +First, letters are mapped into symbols for particular sounds or tone +marks; then, sequences of these which make up a whole syllable are +mapped into one syllable sign. + + Chinese and Japanese require more complex methods. In Chinese input +methods, first you enter the phonetic spelling of a Chinese word (in +input method `chinese-py', among others), or a sequence of portions of +the character (input methods `chinese-4corner' and `chinese-sw', and +others). Since one phonetic spelling typically corresponds to many +different Chinese characters, you must select one of the alternatives +using special XEmacs commands. Keys such as `C-f', `C-b', `C-n', +`C-p', and digits have special definitions in this situation, used for +selecting among the alternatives. displays a buffer showing all +the possibilities. + + In Japanese input methods, first you input a whole word using +phonetic spelling; then, after the word is in the buffer, XEmacs +converts it into one or more characters using a large dictionary. One +phonetic spelling corresponds to many differently written Japanese +words, so you must select one of them; use `C-n' and `C-p' to cycle +through the alternatives. + + Sometimes it is useful to cut off input method processing so that the +characters you have just entered will not combine with subsequent +characters. For example, in input method `latin-1-postfix', the +sequence `e '' combines to form an `e' with an accent. What if you +want to enter them as separate characters? + + One way is to type the accent twice; that is a special feature for +entering the separate letter and accent. For example, `e ' '' gives +you the two characters `e''. Another way is to type another letter +after the `e'--something that won't combine with that--and immediately +delete it. For example, you could type `e e '' to get separate +`e' and `''. + + Another method, more general but not quite as easy to type, is to use +`C-\ C-\' between two characters to stop them from combining. This is +the command `C-\' (`toggle-input-method') used twice. *Note Select +Input Method::. + + `C-\ C-\' is especially useful inside an incremental search, because +stops waiting for more characters to combine, and starts searching for +what you have already entered. + + The variables `input-method-highlight-flag' and +`input-method-verbose-flag' control how input methods explain what is +happening. If `input-method-highlight-flag' is non-`nil', the partial +sequence is highlighted in the buffer. If `input-method-verbose-flag' +is non-`nil', the list of possible characters to type next is displayed +in the echo area (but not when you are in the minibuffer). + + +File: xemacs.info, Node: Select Input Method, Next: Coding Systems, Prev: Input Methods, Up: Mule + +Selecting an Input Method +========================= + +`C-\' + Enable or disable use of the selected input method. + +`C-x C-\ METHOD ' + Select a new input method for the current buffer. + +`C-h I METHOD ' +`C-h C-\ METHOD ' + Describe the input method METHOD (`describe-input-method'). By + default, it describes the current input method (if any). + +`M-x list-input-methods' + Display a list of all the supported input methods. + + To choose an input method for the current buffer, use `C-x +C-\' (`select-input-method'). This command reads the input method name +with the minibuffer; the name normally starts with the language +environment that it is meant to be used with. The variable +`current-input-method' records which input method is selected. + + Input methods use various sequences of ASCII characters to stand for +non-ASCII characters. Sometimes it is useful to turn off the input +method temporarily. To do this, type `C-\' (`toggle-input-method'). +To reenable the input method, type `C-\' again. + + If you type `C-\' and you have not yet selected an input method, it +prompts for you to specify one. This has the same effect as using `C-x + C-\' to specify an input method. + + Selecting a language environment specifies a default input method for +use in various buffers. When you have a default input method, you can +select it in the current buffer by typing `C-\'. The variable +`default-input-method' specifies the default input method (`nil' means +there is none). + + Some input methods for alphabetic scripts work by (in effect) +remapping the keyboard to emulate various keyboard layouts commonly used +for those scripts. How to do this remapping properly depends on your +actual keyboard layout. To specify which layout your keyboard has, use +the command `M-x quail-set-keyboard-layout'. + + To display a list of all the supported input methods, type `M-x +list-input-methods'. The list gives information about each input +method, including the string that stands for it in the mode line. + + +File: xemacs.info, Node: Coding Systems, Next: Recognize Coding, Prev: Select Input Method, Up: Mule + +Coding Systems +============== + + Users of various languages have established many more-or-less +standard coding systems for representing them. XEmacs does not use +these coding systems internally; instead, it converts from various +coding systems to its own system when reading data, and converts the +internal coding system to other coding systems when writing data. +Conversion is possible in reading or writing files, in sending or +receiving from the terminal, and in exchanging data with subprocesses. + + XEmacs assigns a name to each coding system. Most coding systems are +used for one language, and the name of the coding system starts with the +language name. Some coding systems are used for several languages; +their names usually start with `iso'. There are also special coding +systems `binary' and `no-conversion' which do not convert printing +characters at all. + + In addition to converting various representations of non-ASCII +characters, a coding system can perform end-of-line conversion. XEmacs +handles three different conventions for how to separate lines in a file: +newline, carriage-return linefeed, and just carriage-return. + +`C-h C CODING ' + Describe coding system CODING. + +`C-h C ' + Describe the coding systems currently in use. + +`M-x list-coding-systems' + Display a list of all the supported coding systems. + + The command `C-h C' (`describe-coding-system') displays information +about particular coding systems. You can specify a coding system name +as argument; alternatively, with an empty argument, it describes the +coding systems currently selected for various purposes, both in the +current buffer and as the defaults, and the priority list for +recognizing coding systems (*note Recognize Coding::.). + + To display a list of all the supported coding systems, type `M-x +list-coding-systems'. The list gives information about each coding +system, including the letter that stands for it in the mode line (*note +Mode Line::.). + + Each of the coding systems that appear in this list--except for +`binary', which means no conversion of any kind--specifies how and +whether to convert printing characters, but leaves the choice of +end-of-line conversion to be decided based on the contents of each file. +For example, if the file appears to use carriage-return linefeed between +lines, that end-of-line conversion will be used. + + Each of the listed coding systems has three variants which specify +exactly what to do for end-of-line conversion: + +`...-unix' + Don't do any end-of-line conversion; assume the file uses newline + to separate lines. (This is the convention normally used on Unix + and GNU systems.) + +`...-dos' + Assume the file uses carriage-return linefeed to separate lines, + and do the appropriate conversion. (This is the convention + normally used on Microsoft systems.) + +`...-mac' + Assume the file uses carriage-return to separate lines, and do the + appropriate conversion. (This is the convention normally used on + the Macintosh system.) + + These variant coding systems are omitted from the +`list-coding-systems' display for brevity, since they are entirely +predictable. For example, the coding system `iso-8859-1' has variants +`iso-8859-1-unix', `iso-8859-1-dos' and `iso-8859-1-mac'. + + In contrast, the coding system `binary' specifies no character code +conversion at all--none for non-Latin-1 byte values and none for end of +line. This is useful for reading or writing binary files, tar files, +and other files that must be examined verbatim. + + The easiest way to edit a file with no conversion of any kind is with +the `M-x find-file-literally' command. This uses `binary', and also +suppresses other XEmacs features that might convert the file contents +before you see them. *Note Visiting::. + + The coding system `no-conversion' means that the file contains +non-Latin-1 characters stored with the internal XEmacs encoding. It +handles end-of-line conversion based on the data encountered, and has +the usual three variants to specify the kind of end-of-line conversion. + + +File: xemacs.info, Node: Recognize Coding, Next: Specify Coding, Prev: Coding Systems, Up: Mule + +Recognizing Coding Systems +========================== + + Most of the time, XEmacs can recognize which coding system to use for +any given file-once you have specified your preferences. + + Some coding systems can be recognized or distinguished by which byte +sequences appear in the data. However, there are coding systems that +cannot be distinguished, not even potentially. For example, there is no +way to distinguish between Latin-1 and Latin-2; they use the same byte +values with different meanings. + + XEmacs handles this situation by means of a priority list of coding +systems. Whenever XEmacs reads a file, if you do not specify the coding +system to use, XEmacs checks the data against each coding system, +starting with the first in priority and working down the list, until it +finds a coding system that fits the data. Then it converts the file +contents assuming that they are represented in this coding system. + + The priority list of coding systems depends on the selected language +environment (*note Language Environments::.). For example, if you use +French, you probably want XEmacs to prefer Latin-1 to Latin-2; if you +use Czech, you probably want Latin-2 to be preferred. This is one of +the reasons to specify a language environment. + + However, you can alter the priority list in detail with the command +`M-x prefer-coding-system'. This command reads the name of a coding +system from the minibuffer, and adds it to the front of the priority +list, so that it is preferred to all others. If you use this command +several times, each use adds one element to the front of the priority +list. + + Sometimes a file name indicates which coding system to use for the +file. The variable `file-coding-system-alist' specifies this +correspondence. There is a special function +`modify-coding-system-alist' for adding elements to this list. For +example, to read and write all `.txt' using the coding system +`china-iso-8bit', you can execute this Lisp expression: + + (modify-coding-system-alist 'file "\\.txt\\'" 'china-iso-8bit) + +The first argument should be `file', the second argument should be a +regular expression that determines which files this applies to, and the +third argument says which coding system to use for these files. + + You can specify the coding system for a particular file using the +`-*-...-*-' construct at the beginning of a file, or a local variables +list at the end (*note File Variables::.). You do this by defining a +value for the "variable" named `coding'. XEmacs does not really have a +variable `coding'; instead of setting a variable, it uses the specified +coding system for the file. For example, `-*-mode: C; coding: +iso-8859-1;-*-' specifies use of the iso-8859-1 coding system, as well +as C mode. + + Once XEmacs has chosen a coding system for a buffer, it stores that +coding system in `buffer-file-coding-system' and uses that coding +system, by default, for operations that write from this buffer into a +file. This includes the commands `save-buffer' and `write-region'. If +you want to write files from this buffer using a different coding +system, you can specify a different coding system for the buffer using +`set-buffer-file-coding-system' (*note Specify Coding::.). + + File: xemacs.info, Node: Specify Coding, Prev: Recognize Coding, Up: Mule Specifying a Coding System @@ -856,304 +1138,3 @@ characters are saved as newlines, so the invisible lines become ordinary lines in the file. Saving does not change the visibility status of a line inside Emacs. - -File: xemacs.info, Node: Outline Motion, Next: Outline Visibility, Prev: Outline Format, Up: Outline Mode - -Outline Motion Commands -....................... - - Some special commands in Outline mode move backward and forward to -heading lines. - -`C-c C-n' - Move point to the next visible heading line - (`outline-next-visible-heading'). - -`C-c C-p' - Move point to the previous visible heading line - (`outline-previous-visible-heading'). - -`C-c C-f' - Move point to the next visible heading line at the same level as - the one point is on (`outline-forward-same-level'). - -`C-c C-b' - Move point to the previous visible heading line at the same level - (`outline-backward-same-level'). - -`C-c C-u' - Move point up to a lower-level (more inclusive) visible heading - line (`outline-up-heading'). - - `C-c C-n' (`next-visible-heading') moves down to the next heading -line. `C-c C-p' (`previous-visible-heading') moves similarly backward. -Both accept numeric arguments as repeat counts. The names emphasize -that invisible headings are skipped, but this is not really a special -feature. All editing commands that look for lines ignore the invisible -lines automatically. - - More advanced motion commands understand the levels of headings. -The commands `C-c C-f' (`outline-forward-same-level') and `C-c C-b' -(`outline-backward-same-level') move from one heading line to another -visible heading at the same depth in the outline. `C-c C-u' -(`outline-up-heading') moves backward to another heading that is less -deeply nested. - - -File: xemacs.info, Node: Outline Visibility, Prev: Outline Motion, Up: Outline Mode - -Outline Visibility Commands -........................... - - The other special commands of outline mode are used to make lines -visible or invisible. Their names all start with `hide' or `show'. -Most of them exist as pairs of opposites. They are not undoable; -instead, you can undo right past them. Making lines visible or -invisible is simply not recorded by the undo mechanism. - -`M-x hide-body' - Make all body lines in the buffer invisible. - -`M-x show-all' - Make all lines in the buffer visible. - -`C-c C-d' - Make everything under this heading invisible, not including this - heading itself (`hide-subtree'). - -`C-c C-s' - Make everything under this heading visible, including body, - subheadings, and their bodies (`show-subtree'). - -`M-x hide-leaves' - Make the body of this heading line, and of all its subheadings, - invisible. - -`M-x show-branches' - Make all subheadings of this heading line, at all levels, visible. - -`C-c C-i' - Make immediate subheadings (one level down) of this heading line - visible (`show-children'). - -`M-x hide-entry' - Make this heading line's body invisible. - -`M-x show-entry' - Make this heading line's body visible. - - Two commands that are exact opposites are `M-x hide-entry' and `M-x -show-entry'. They are used with point on a heading line, and apply -only to the body lines of that heading. The subtopics and their bodies -are not affected. - - Two more powerful opposites are `C-c C-h' (`hide-subtree') and `C-c -C-s' (`show-subtree'). Both should be used when point is on a heading -line, and both apply to all the lines of that heading's "subtree": its -body, all its subheadings, both direct and indirect, and all of their -bodies. In other words, the subtree contains everything following this -heading line, up to and not including the next heading of the same or -higher rank. - - Intermediate between a visible subtree and an invisible one is having -all the subheadings visible but none of the body. There are two -commands for doing this, one that hides the bodies and one that makes -the subheadings visible. They are `M-x hide-leaves' and `M-x -show-branches'. - - A little weaker than `show-branches' is `C-c C-i' (`show-children'). -It makes just the direct subheadings visible--those one level down. -Deeper subheadings remain invisible. - - Two commands have a blanket effect on the whole file. `M-x -hide-body' makes all body lines invisible, so that you see just the -outline structure. `M-x show-all' makes all lines visible. You can -think of these commands as a pair of opposites even though `M-x -show-all' applies to more than just body lines. - - You can turn off the use of ellipses at the ends of visible lines by -setting `selective-display-ellipses' to `nil'. The result is no -visible indication of the presence of invisible lines. - - -File: xemacs.info, Node: Words, Next: Sentences, Prev: Text Mode, Up: Text - -Words -===== - - Emacs has commands for moving over or operating on words. By -convention, the keys for them are all `Meta-' characters. - -`M-f' - Move forward over a word (`forward-word'). - -`M-b' - Move backward over a word (`backward-word'). - -`M-d' - Kill up to the end of a word (`kill-word'). - -`M-' - Kill back to the beginning of a word (`backward-kill-word'). - -`M-@' - Mark the end of the next word (`mark-word'). - -`M-t' - Transpose two words; drag a word forward or backward across other - words (`transpose-words'). - - Notice how these keys form a series that parallels the -character-based `C-f', `C-b', `C-d', `C-t' and . `M-@' is related -to `C-@', which is an alias for `C-'. - - The commands `Meta-f' (`forward-word') and `Meta-b' -(`backward-word') move forward and backward over words. They are -analogous to `Control-f' and `Control-b', which move over single -characters. Like their `Control-' analogues, `Meta-f' and `Meta-b' -move several words if given an argument. `Meta-f' with a negative -argument moves backward, and `Meta-b' with a negative argument moves -forward. Forward motion stops after the last letter of the word, while -backward motion stops before the first letter. - - `Meta-d' (`kill-word') kills the word after point. To be precise, -it kills everything from point to the place `Meta-f' would move to. -Thus, if point is in the middle of a word, `Meta-d' kills just the part -after point. If some punctuation comes between point and the next -word, it is killed along with the word. (To kill only the next word -but not the punctuation before it, simply type `Meta-f' to get to the -end and kill the word backwards with `Meta-'.) `Meta-d' takes -arguments just like `Meta-f'. - - `Meta-' (`backward-kill-word') kills the word before point. It -kills everything from point back to where `Meta-b' would move to. If -point is after the space in `FOO, BAR', then `FOO, ' is killed. To -kill just `FOO', type `Meta-b Meta-d' instead of `Meta-'. - - `Meta-t' (`transpose-words') exchanges the word before or containing -point with the following word. The delimiter characters between the -words do not move. For example, transposing `FOO, BAR' results in -`BAR, FOO' rather than `BAR FOO,'. *Note Transpose::, for more on -transposition and on arguments to transposition commands. - - To operate on the next N words with an operation which applies -between point and mark, you can either set the mark at point and then -move over the words, or you can use the command `Meta-@' (`mark-word') -which does not move point but sets the mark where `Meta-f' would move -to. It can be given arguments just like `Meta-f'. - - The word commands' understanding of syntax is completely controlled -by the syntax table. For example, any character can be declared to be -a word delimiter. *Note Syntax::. - - -File: xemacs.info, Node: Sentences, Next: Paragraphs, Prev: Words, Up: Text - -Sentences -========= - - The Emacs commands for manipulating sentences and paragraphs are -mostly on `Meta-' keys, and therefore are like the word-handling -commands. - -`M-a' - Move back to the beginning of the sentence (`backward-sentence'). - -`M-e' - Move forward to the end of the sentence (`forward-sentence'). - -`M-k' - Kill forward to the end of the sentence (`kill-sentence'). - -`C-x ' - Kill back to the beginning of the sentence - (`backward-kill-sentence'). - - The commands `Meta-a' and `Meta-e' (`backward-sentence' and -`forward-sentence') move to the beginning and end of the current -sentence, respectively. They resemble `Control-a' and `Control-e', -which move to the beginning and end of a line. Unlike their -counterparts, `Meta-a' and `Meta-e' move over successive sentences if -repeated or given numeric arguments. Emacs assumes the typist's -convention is followed, and thus considers a sentence to end wherever -there is a `.', `?', or `!' followed by the end of a line or two -spaces, with any number of `)', `]', `'', or `"' characters allowed in -between. A sentence also begins or ends wherever a paragraph begins or -ends. - - Neither `M-a' nor `M-e' moves past the newline or spaces beyond the -sentence edge at which it is stopping. - - `M-a' and `M-e' have a corresponding kill command, just like `C-a' -and `C-e' have `C-k'. The command is `M-k' (`kill-sentence') which -kills from point to the end of the sentence. With minus one as an -argument it kills back to the beginning of the sentence. Larger -arguments serve as repeat counts. - - There is a special command, `C-x ' (`backward-kill-sentence'), -for killing back to the beginning of a sentence, which is useful when -you change your mind in the middle of composing text. - - The variable `sentence-end' controls recognition of the end of a -sentence. It is a regexp that matches the last few characters of a -sentence, together with the whitespace following the sentence. Its -normal value is: - - "[.?!][]\"')]*\\($\\|\t\\| \\)[ \t\n]*" - -This example is explained in the section on regexps. *Note Regexps::. - - -File: xemacs.info, Node: Paragraphs, Next: Pages, Prev: Sentences, Up: Text - -Paragraphs -========== - - The Emacs commands for manipulating paragraphs are also `Meta-' keys. - -`M-[' - Move back to previous paragraph beginning - (`backward-paragraph'). - -`M-]' - Move forward to next paragraph end (`forward-paragraph'). - -`M-h' - Put point and mark around this or next paragraph - (`mark-paragraph'). - - `Meta-[' moves to the beginning of the current or previous paragraph, -while `Meta-]' moves to the end of the current or next paragraph. -Blank lines and text formatter command lines separate paragraphs and are -not part of any paragraph. An indented line starts a new paragraph. - - In major modes for programs (as opposed to Text mode), paragraphs -begin and end only at blank lines. As a result, the paragraph commands -continue to be useful even though there are no paragraphs per se. - - When there is a fill prefix, paragraphs are delimited by all lines -which don't start with the fill prefix. *Note Filling::. - - To operate on a paragraph, you can use the command `Meta-h' -(`mark-paragraph') to set the region around it. This command puts -point at the beginning and mark at the end of the paragraph point was -in. If point is between paragraphs (in a run of blank lines or at a -boundary), the paragraph following point is surrounded by point and -mark. If there are blank lines preceding the first line of the -paragraph, one of the blank lines is included in the region. Thus, for -example, `M-h C-w' kills the paragraph around or after point. - - The precise definition of a paragraph boundary is controlled by the -variables `paragraph-separate' and `paragraph-start'. The value of -`paragraph-start' is a regexp that matches any line that either starts -or separates paragraphs. The value of `paragraph-separate' is another -regexp that matches only lines that separate paragraphs without being -part of any paragraph. Lines that start a new paragraph and are -contained in it must match both regexps. For example, normally -`paragraph-start' is `"^[ \t\n\f]"' and `paragraph-separate' is `"^[ -\t\f]*$"'. - - Normally it is desirable for page boundaries to separate paragraphs. -The default values of these variables recognize the usual separator for -pages. - diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 781b26c..722a0df 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -7,6 +7,50 @@ * update-elc.sh (ignore_dirs): Ignore lisp/utf-2000 subdirectory. +2000-01-18 Martin Buchholz + + * XEmacs 21.2.27 is released. + +2000-01-18 Martin Buchholz + + * ootags.c: Ansify. + * etags.c: + * getopt.c: + * cvtmail.c: + Remove declarations of ANSI errno, getenv(), malloc(). + +2000-01-13 Martin Buchholz + + * movemail.c (main): + * make-docfile.c (write_c_args): + Simple compiler warning fixes. + +2000-01-09 Martin Buchholz + + * *.[ch]: Change <../src/config.h> to + * ellcc.c: Always use <...> to #include files not in `.' + * Makefile.in.in: Use safer -I paths. + Use $(top_srcdir) instead of $(srcdir)/../src + Add warning comment. + +2000-01-08 Martin Buchholz + + * movemail.c: Warning removal. + +2000-01-06 Norbert Koch + + * movemail.c: Typo fix. + +2000-01-03 Michael Sperber [Mr. Preprocessor] + + * movemail.c: Overhaul of the locking code. + +2000-01-03 Martin Buchholz + + * etags.c (etags_strrchr): Ansify. + (etags_strchr): Ansify. + (get_compressor_from_suffix): Remove warning, make code cleaner. + 1999-12-31 Martin Buchholz * XEmacs 21.2.26 is released. diff --git a/lib-src/Makefile.in.in b/lib-src/Makefile.in.in index 7730260..d926072 100644 --- a/lib-src/Makefile.in.in +++ b/lib-src/Makefile.in.in @@ -91,7 +91,7 @@ INSTALLABLES = $(INSTALLABLES_BASE) ellcc #ifdef HAVE_MS_WINDOWS INSTALLABLES = $(INSTALLABLES_BASE) runxemacs rungnuclient #else -INSTALLABLES = $(INSTALLABLES_BASE) +INSTALLABLES = $(INSTALLABLES_BASE) #endif #endif @@ -162,7 +162,13 @@ ld_libs_general=@ld_libs_general@ ## We need to #define emacs to get the right versions of some files. -cppflags = -Demacs -I$(top_srcdir)/src -I../src $(CPPFLAGS) +## To understand the order of -I flags, consider what happens if you run +## ./configure in the source tree, and then run +## $(srcdir).2.26/configure in some other build tree. +## Where will the generated files like config.h be included from? +## This is also why you _must_ use <...> instead of "..." +## when #include'ing generated files. +cppflags = -Demacs -I. -I../src -I$(srcdir) -I$(top_srcdir)/src $(CPPFLAGS) cflags = $(CFLAGS) $(cppflags) $(c_switch_general) ldflags = $(LDFLAGS) $(ld_switch_general) $(ld_libs_general) @@ -279,32 +285,29 @@ getopt.o: ${srcdir}/getopt.c ${srcdir}/getopt.h ${CC} -c $(cflags) ${srcdir}/getopt.c getopt1.o: ${srcdir}/getopt1.c ${srcdir}/getopt.h ${CC} -c $(cflags) ${srcdir}/getopt1.c -alloca.o: ${srcdir}/../src/alloca.c +alloca.o: ${top_srcdir}/src/alloca.c ${CC} -c $(cflags) ${srcdir}/../src/alloca.c -regex.o: ${srcdir}/../src/regex.c ${srcdir}/../src/regex.h +regex.o: ${srcdir}/../src/regex.c ${top_srcdir}/src/regex.h $(CC) -c `echo $(cflags) | sed 's/-Demacs/ /'` \ - -DINHIBIT_STRING_HEADER ${srcdir}/../src/regex.c + -DINHIBIT_STRING_HEADER ${top_srcdir}/src/regex.c -etags_args = -I. $(cflags) -I${srcdir} -I${srcdir}/../src \ - -DVERSION='"${version}"' ${srcdir}/etags.c \ +etags_args = $(cflags) -DVERSION='"${version}"' ${srcdir}/etags.c \ $(GETOPTOBJS) regex.o $(ldflags) -etags_deps = ${srcdir}/etags.c $(GETOPTDEPS) regex.o ../src/config.h +etags_deps = ${srcdir}/etags.c $(GETOPTDEPS) regex.o ../src/config.h etags: ${etags_deps} $(CC) ${etags_args} -o $@ -ellcc_args = -I. $(cflags) -I${srcdir} -I${srcdir}/../src \ - ${srcdir}/ellcc.c $(ldflags) +ellcc_args = $(cflags) ${srcdir}/ellcc.c $(ldflags) ellcc_deps = ${srcdir}/ellcc.c ellcc.h ../src/config.h ellcc: ${ellcc_deps} $(CC) ${ellcc_args} -o $@ -run_args = -I. $(cflags) -I${srcdir} -I${srcdir}/../src \ - -DVERSION='"${version}"' ${srcdir}/run.c \ +run_args = $(cflags) -DVERSION='"${version}"' ${srcdir}/run.c \ $(ldflags) -Wl,--subsystem,windows -e _mainCRTStartup -run_deps = ${srcdir}/run.c ${srcdir}/run.h ${srcdir}/run.rc \ +run_deps = ${srcdir}/run.c ${srcdir}/run.h ${srcdir}/run.rc \ ${srcdir}/../nt/xemacs.ico ${srcdir}/../nt/file.ico \ ${srcdir}/../nt/lisp.ico @@ -319,10 +322,9 @@ runxemacs: run rungnuclient: run cp run.exe $@.exe -ootags_args = -I. $(cflags) -I${srcdir} -I${srcdir}/../src \ - -DVERSION='"${version}"' ${srcdir}/ootags.c \ +ootags_args = $(cflags) -DVERSION='"${version}"' ${srcdir}/ootags.c \ $(GETOPTOBJS) regex.o $(ldflags) -ootags_deps = ${srcdir}/ootags.c $(GETOPTDEPS) regex.o ../src/config.h +ootags_deps = ${srcdir}/ootags.c $(GETOPTDEPS) regex.o ../src/config.h ootags: ${ootags_deps} $(CC) ${ootags_args} -o $@ diff --git a/lib-src/b2m.c b/lib-src/b2m.c index dda077d..d92ea5a 100644 --- a/lib-src/b2m.c +++ b/lib-src/b2m.c @@ -19,7 +19,7 @@ by Francesco Potorti` . */ #ifdef HAVE_CONFIG_H -#include <../src/config.h> +#include /* On some systems, Emacs defines static as nothing for the sake of unexec. We don't want that here since we don't use unexec. */ #undef static diff --git a/lib-src/cvtmail.c b/lib-src/cvtmail.c index 768bcee..6bdcaf1 100644 --- a/lib-src/cvtmail.c +++ b/lib-src/cvtmail.c @@ -35,17 +35,12 @@ Boston, MA 02111-1307, USA. */ */ -#include <../src/config.h> +#include #include #include +#include -#if __STDC__ || defined(STDC_HEADERS) -# include -#else -char *malloc (); -char *getenv (); -#endif static void *xmalloc (unsigned int); static void *xrealloc (char *ptr, unsigned int); static void skip_to_lf (FILE *stream); @@ -68,7 +63,7 @@ main (int argc, char *argv[]) char name[14]; int c; - hd = (char *) getenv ("HOME"); + hd = getenv ("HOME"); md = (char *) xmalloc (strlen (hd) + 10); strcpy (md, hd); diff --git a/lib-src/digest-doc.c b/lib-src/digest-doc.c index a39ddc6..1fc540c 100644 --- a/lib-src/digest-doc.c +++ b/lib-src/digest-doc.c @@ -6,7 +6,7 @@ but in texinfo format and sorted by function/variable name. */ #ifdef emacs -#include <../src/config.h> +#include #endif #include diff --git a/lib-src/ellcc.c b/lib-src/ellcc.c index a116c9d..5168a11 100644 --- a/lib-src/ellcc.c +++ b/lib-src/ellcc.c @@ -58,7 +58,7 @@ the lines of: See the samples for more details. */ -#include <../src/config.h> +#include #include #include #include @@ -71,8 +71,9 @@ See the samples for more details. #endif /* HAVE_UNISTD_H */ #define EMODULES_GATHER_VERSION -#include "emodules.h" -#include "ellcc.h" + +#include +#include /* Generated files must be included using <...> */ #define DEBUG diff --git a/lib-src/etags.c b/lib-src/etags.c index 35a161e..12bdc61 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -96,9 +96,6 @@ char pot_etags_version[] = "@(#) pot revision number is 13.33"; #include #include #include -#ifndef errno - extern int errno; -#endif #include #include @@ -194,8 +191,6 @@ typedef struct char **interpreters; } language; -extern char *getenv (); - typedef struct node_st { /* sorting structure */ char *name; /* function or type name */ @@ -282,8 +277,8 @@ char *skip_spaces (char *cp); char *skip_non_spaces (char *cp); char *savenstr (char *cp, int len); char *savestr (char *cp); -char *etags_strchr (char *sp, char c); -char *etags_strrchr (char *sp, char c); +char *etags_strchr (const char *sp, int c); +char *etags_strrchr (const char *sp, int c); char *etags_getcwd (void); char *relative_filename (char *file, char *dir); char *absolute_filename (char *file, char *dir); @@ -1208,17 +1203,21 @@ get_compressor_from_suffix (file, extptr) /* Let those poor souls who live with DOS 8+3 file name limits get some solace by treating foo.cgz as if it were foo.c.gz, etc. Only the first do loop is run if not MSDOS */ +#ifdef MSDOS do { for (compr = compressors; compr->suffix != NULL; compr++) if (streq (compr->suffix, suffix)) return compr; -#ifndef MSDOS - break; -#endif if (extptr != NULL) *extptr = ++suffix; } while (*suffix != '\0'); +#else + for (compr = compressors; compr->suffix != NULL; compr++) + if (streq (compr->suffix, suffix)) + return compr; +#endif + return NULL; } @@ -5112,14 +5111,13 @@ savenstr (cp, len) /* * Return the ptr in sp at which the character c last * appears; NULL if not found - * - * Identical to System V strrchr, included for portability. */ char * etags_strrchr (sp, c) - register char *sp, c; + const char *sp; + int c; { - register char *r; + register const char *r; r = NULL; do @@ -5127,24 +5125,23 @@ etags_strrchr (sp, c) if (*sp == c) r = sp; } while (*sp++); - return r; + return (char *) r; } /* * Return the ptr in sp at which the character c first * appears; NULL if not found - * - * Identical to System V strchr, included for portability. */ char * etags_strchr (sp, c) - register char *sp, c; + const char *sp; + int c; { do { if (*sp == c) - return sp; + return (char *) sp; } while (*sp++); return NULL; } diff --git a/lib-src/fakemail.c b/lib-src/fakemail.c index d3e4786..63ac5d5 100644 --- a/lib-src/fakemail.c +++ b/lib-src/fakemail.c @@ -21,7 +21,7 @@ Boston, MA 02111-1307, USA. */ /* Synched up with: FSF 19.28. */ #define NO_SHORTNAMES -#include <../src/config.h> +#include #if defined (BSD) && !defined (BSD4_1) && !defined (USE_FAKEMAIL) /* This program is not used in BSD, so just avoid loader complaints. */ @@ -638,10 +638,6 @@ main (int argc, char *argv[]) register int size; FILE *the_pipe; -#if !(__STDC__ || defined(STDC_HEADERS)) - extern char *getenv (); -#endif - mail_program_name = getenv ("FAKEMAILER"); if (!(mail_program_name && *mail_program_name)) mail_program_name = (char *) MAIL_PROGRAM_NAME; diff --git a/lib-src/getopt.c b/lib-src/getopt.c index dd5cc71..21231de 100644 --- a/lib-src/getopt.c +++ b/lib-src/getopt.c @@ -31,7 +31,7 @@ USA. */ #endif #ifdef HAVE_CONFIG_H -#include <../src/config.h> +#include #endif #include @@ -202,11 +202,6 @@ static char *posixly_correct; #define my_index strchr #else -/* Avoid depending on library functions or files - whose names are inconsistent. */ - -char *getenv (); - static char * my_index (const char *str, int chr) { diff --git a/lib-src/getopt1.c b/lib-src/getopt1.c index 1492066..de15d66 100644 --- a/lib-src/getopt1.c +++ b/lib-src/getopt1.c @@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H -#include <../src/config.h> +#include #endif #include "getopt.h" diff --git a/lib-src/gnuserv.h b/lib-src/gnuserv.h index 9fb3edd..4e2ac5a 100644 --- a/lib-src/gnuserv.h +++ b/lib-src/gnuserv.h @@ -43,7 +43,7 @@ static char header_rcsid [] = "!Header: gnuserv.h,v 2.4 95/02/16 11:58:11 arup a #define NO_SHORTNAMES /* gnuserv should not be compiled using SOCKS */ #define DO_NOT_SOCKSIFY -#include <../src/config.h> +#include #undef read #undef write #undef open diff --git a/lib-src/hexl.c b/lib-src/hexl.c index 0a88b00..8d7f308 100644 --- a/lib-src/hexl.c +++ b/lib-src/hexl.c @@ -1,6 +1,6 @@ /* Synched up with: FSF 19.28. */ -#include <../src/config.h> +#include #include #include diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c index e28e38e..930990e 100644 --- a/lib-src/make-docfile.c +++ b/lib-src/make-docfile.c @@ -40,7 +40,7 @@ Boston, MA 02111-1307, USA. */ */ #define NO_SHORTNAMES /* Tell config not to load remap.h */ -#include <../src/config.h> +#include #include #include @@ -429,10 +429,10 @@ write_c_args (FILE *out, CONST char *func, char *buff, int minargs, static char lo[] = "Lisp_Object"; if ((C_IDENTIFIER_CHAR_P (c) != in_ident) && !in_ident && (strncmp (p, lo, sizeof (lo) - 1) == 0) && - isspace(*(p + sizeof (lo) - 1))) + isspace((unsigned char) (* (p + sizeof (lo) - 1)))) { p += (sizeof (lo) - 1); - while (isspace (*p)) + while (isspace ((unsigned char) (*p))) p++; c = *p; } diff --git a/lib-src/make-path.c b/lib-src/make-path.c index a8093e8..d27ba27 100644 --- a/lib-src/make-path.c +++ b/lib-src/make-path.c @@ -27,7 +27,7 @@ Boston, MA 02111-1307, USA. */ that option. */ #ifdef emacs -#include <../src/config.h> +#include #endif #include diff --git a/lib-src/movemail.c b/lib-src/movemail.c index 9a1a3c6..12f180a 100644 --- a/lib-src/movemail.c +++ b/lib-src/movemail.c @@ -1,35 +1,41 @@ /* movemail foo bar -- move file foo to file bar, - locking file foo the way /bin/mail respects. + locking file foo. Copyright (C) 1986, 1992, 1993, 1994, 1996 Free Software Foundation, Inc. -This file is part of GNU Emacs. +This file is part of XEmacs. -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. +XEmacs 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. +XEmacs 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 +along with XEmacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +Boston, MA 02111-1307, USA. -/* Important notice: defining MAIL_USE_FLOCK or MAIL_USE_LOCKF *will - cause loss of mail* if you do it on a system that does not normally - use flock as its way of interlocking access to inbox files. The - setting of MAIL_USE_FLOCK and MAIL_USE_LOCKF *must agree* with the - system's own conventions. It is not a choice that is up to you. + Please mail bugs and suggestions to the XEmacs maintainer. +*/ - So, if your system uses lock files rather than flock, then the only way - you can get proper operation is to enable movemail to write lockfiles there. - This means you must either give that directory access modes - that permit everyone to write lockfiles in it, or you must make movemail - a setuid or setgid program. */ +/* Important notice: + * + * You *must* coordinate the locking method used by movemail with that + * used by your mail delivery agent, as well as that of the other mail + * user agents on your system. movemail allows you to do this at run + * time via the -m flag. Moreover, it uses a default determined by + * the MAIL_LOCK_DOT, MAIL_LOCK_LOCKF, MAIL_LOCK_FLOCK, + * MAIL_LOCK_LOCKING, and MAIL_LOCK_MMDF preprocessor settings. + */ + +/* + * Mike Sperber reorganized + * everything that has to with locking in December 1999. + */ /* * Modified January, 1986 by Michael R. Gretzinger (Project Athena) @@ -56,7 +62,7 @@ Boston, MA 02111-1307, USA. */ #define NO_SHORTNAMES /* Tell config not to load remap.h */ #define DONT_ENCAPSULATE -#include <../src/config.h> +#include #include #include #include @@ -106,7 +112,7 @@ char * strerror (int errnum); #include #endif /* WINDOWSNT */ -#if defined (HAVE_UNISTD_H) || defined (USG) +#if defined (HAVE_UNISTD_H) #include #endif /* unistd.h */ #ifndef F_OK @@ -116,23 +122,15 @@ char * strerror (int errnum); #define R_OK 4 #endif /* No F_OK */ -#if defined (HAVE_FCNTL_H) || defined (USG) +#if defined (HAVE_FCNTL_H) #include #endif /* fcntl.h */ -#if defined (XENIX) || defined (WINDOWSNT) +#ifdef HAVE_LOCKING #include #endif -#ifdef MAIL_USE_LOCKF -#define MAIL_USE_SYSTEM_LOCK -#endif - -#ifdef MAIL_USE_FLOCK -#define MAIL_USE_SYSTEM_LOCK -#endif - -#ifdef MAIL_USE_MMDF +#ifdef HAVE_MMDF extern int lk_open (), lk_close (); #endif @@ -144,6 +142,7 @@ extern int lk_open (), lk_close (); static void fatal (char *, char*); static void error (char *, char *, char *); +static void usage(int); static void pfatal_with_name (char *); static void pfatal_and_delete (char *); static char *concat (char *, char *, char *); @@ -160,9 +159,6 @@ static int pop_search_top (popserver server, int msgno, int lines, struct re_pattern_buffer* regexp); #endif -/* Nonzero means this is name of a lock file to delete on fatal error. */ -char *delete_lockname; - int verbose=0; #ifdef MAIL_USE_POP int reverse=0; @@ -184,10 +180,35 @@ struct option longopts[] = { "regex", required_argument, NULL, 'r' }, { "match-lines", required_argument, NULL, 'l' }, #endif + { "lock-method", required_argument, NULL, 'm' }, + { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { 0 } }; +#define DOTLOCKING 0 +#define FLOCKING 1 +#define LOCKFING 2 +#define MMDF 3 +#define LOCKING 4 + +#if defined(MAIL_LOCK_FLOCK) && defined(HAVE_FLOCK) +#define DEFAULT_LOCKING FLOCKING +#elif defined(MAIL_LOCK_LOCKF) && defined(HAVE_LOCKF) +#define DEFAULT_LOCKING LOCKFING +#elif defined(MAIL_LOCK_MMDF) && defined(HAVE_MMDF) +#define DEFAULT_LOCKING MMDF +#elif defined(MAIL_LOCK_LOCKING) && defined(HAVE_LOCKING) +#define DEFAULT_LOCKING LOCKING +#else +#define DEFAULT_LOCKING DOTLOCKING +#endif + +static void lock_dot(char *); +static void unlock_dot(char *); +static int parse_lock_method(char *); +static char *unparse_lock_method(int); + int main (int argc, char *argv[]) { @@ -198,23 +219,23 @@ main (int argc, char *argv[]) int status; #endif -#ifndef MAIL_USE_SYSTEM_LOCK - struct stat st; - long now; - int tem; - char *lockname, *p; - char *tempname; - int desc; -#endif /* not MAIL_USE_SYSTEM_LOCK */ + int lock_method = DEFAULT_LOCKING; + + char *maybe_lock_env; - delete_lockname = 0; + maybe_lock_env = getenv("EMACSLOCKMETHOD"); + if (maybe_lock_env) + { + printf("maybe-lock_env: %s\n", maybe_lock_env); + lock_method = parse_lock_method(maybe_lock_env); + } - while (1) + for (;;) { #ifdef MAIL_USE_POP - char* optstring = "i:o:p:l:r:xvk"; + char* optstring = "i:o:m:p:l:r:xvhk"; #else - char* optstring = "i:o:v"; + char* optstring = "i:o:m:vh"; #endif int opt = getopt_long (argc, argv, optstring, longopts, 0); @@ -255,7 +276,16 @@ main (int argc, char *argv[]) regexp_pattern = compile_regex (optarg); break; #endif - case 'v': verbose = 1; break; + + case 'm': + lock_method = parse_lock_method(optarg); + break; + case 'h': + usage(lock_method); + exit(0); + case 'v': + verbose = 1; + break; } } @@ -272,17 +302,19 @@ main (int argc, char *argv[]) if (!inname || !outname) { - fprintf (stderr, "Usage: movemail [-rvxk] [-l lines ] [-i] inbox [-o] destfile [[-p] POP-password]\n"); + usage(lock_method); exit(1); } -#ifdef MAIL_USE_MMDF - mmdf_init (argv[0]); +#ifdef HAVE_MMDF + if (lock_method == MMDF) + mmdf_init (argv[0]); #endif if (*outname == 0) fatal ("Destination file name is empty", 0); + VERBOSE(("checking access to output file\n")); /* Check access to output file. */ if (access (outname, F_OK) == 0 && access (outname, W_OK) != 0) pfatal_with_name (outname); @@ -320,121 +352,83 @@ main (int argc, char *argv[]) if (access (inname, R_OK | W_OK) != 0) pfatal_with_name (inname); -#ifndef MAIL_USE_MMDF -#ifndef MAIL_USE_SYSTEM_LOCK - /* Use a lock file named after our first argument with .lock appended: - If it exists, the mail file is locked. */ - /* Note: this locking mechanism is *required* by the mailer - (on systems which use it) to prevent loss of mail. - - On systems that use a lock file, extracting the mail without locking - WILL occasionally cause loss of mail due to timing errors! - - So, if creation of the lock file fails - due to access permission on the mail spool directory, - you simply MUST change the permission - and/or make movemail a setgid program - so it can create lock files properly. - - You might also wish to verify that your system is one - which uses lock files for this purpose. Some systems use other methods. - - If your system uses the `flock' system call for mail locking, - define MAIL_USE_SYSTEM_LOCK in config.h or the s-*.h file - and recompile movemail. If the s- file for your system - should define MAIL_USE_SYSTEM_LOCK but does not, send a bug report - to bug-gnu-emacs@prep.ai.mit.edu so we can fix it. */ - - lockname = concat (inname, ".lock", ""); - tempname = (char *) xmalloc (strlen (inname) + strlen ("EXXXXXX") + 1); - strcpy (tempname, inname); - p = tempname + strlen (tempname); - while (p != tempname && !IS_DIRECTORY_SEP (p[-1])) - p--; - *p = 0; - strcpy (p, "EXXXXXX"); - mktemp (tempname); - unlink (tempname); - while (1) + if (fork () == 0) { - /* Create the lock file, but not under the lock file name. */ - /* Give up if cannot do that. */ - desc = open (tempname, O_WRONLY | O_CREAT | O_EXCL, 0666); - if (desc < 0) - { - char *message = (char *) xmalloc (strlen (tempname) + 50); - sprintf (message, "%s--see source file lib-src/movemail.c", - tempname); - pfatal_with_name (message); - } - close (desc); + setuid (getuid ()); - tem = link (tempname, lockname); - unlink (tempname); - if (tem >= 0) - break; - sleep (1); + VERBOSE(("opening input file\n")); - /* If lock file is five minutes old, unlock it. - Five minutes should be good enough to cope with crashes - and wedgitude, and long enough to avoid being fooled - by time differences between machines. */ - if (stat (lockname, &st) >= 0) + switch (lock_method) { - now = time (0); - if (st.st_ctime < now - 300) - unlink (lockname); + case DOTLOCKING: + indesc = open (inname, O_RDONLY); + break; +#ifdef HAVE_LOCKF + case LOCKFING: + indesc = open (inname, O_RDWR); + break; +#endif +#ifdef HAVE_FLOCK + case FLOCKING: + indesc = open (inname, O_RDWR); + break; +#endif +#ifdef HAVE_LOCKING + case LOCKING: + indesc = open (inname, O_RDWR); + break; +#endif +#ifdef HAVE_MMDF + case MMDF: + indesc = lk_open (inname, O_RDONLY, 0, 0, 10); + break; +#endif + default: abort(); } - } - - delete_lockname = lockname; -#endif /* not MAIL_USE_SYSTEM_LOCK */ -#endif /* not MAIL_USE_MMDF */ - - if (fork () == 0) - { - setuid (getuid ()); - -#ifndef MAIL_USE_MMDF -#ifdef MAIL_USE_SYSTEM_LOCK - indesc = open (inname, O_RDWR); -#else /* if not MAIL_USE_SYSTEM_LOCK */ - indesc = open (inname, O_RDONLY); -#endif /* not MAIL_USE_SYSTEM_LOCK */ -#else /* MAIL_USE_MMDF */ - indesc = lk_open (inname, O_RDONLY, 0, 0, 10); -#endif /* MAIL_USE_MMDF */ if (indesc < 0) pfatal_with_name (inname); -#if defined (BSD) || defined (XENIX) +#ifdef HAVE_UMASK /* In case movemail is setuid to root, make sure the user can read the output file. */ - /* This is desirable for all systems - but I don't want to assume all have the umask system call */ umask (umask (0) & 0333); -#endif /* BSD or Xenix */ +#endif + outdesc = open (outname, O_WRONLY | O_CREAT | O_EXCL, 0666); if (outdesc < 0) pfatal_with_name (outname); -#ifdef MAIL_USE_SYSTEM_LOCK -#ifdef MAIL_USE_LOCKF - if (lockf (indesc, F_LOCK, 0) < 0) pfatal_with_name (inname); -#else /* not MAIL_USE_LOCKF */ -#ifdef XENIX - if (locking (indesc, LK_RLCK, 0L) < 0) pfatal_with_name (inname); -#else -#ifdef WINDOWSNT - if (locking (indesc, LK_RLCK, -1L) < 0) pfatal_with_name (inname); -#else - if (flock (indesc, LOCK_EX) < 0) pfatal_with_name (inname); + + VERBOSE(("locking input file\n")); + + switch (lock_method) + { +#ifdef HAVE_LOCKF + case LOCKFING: + if (lockf (indesc, F_LOCK, 0) < 0) + pfatal_with_name (inname); + break; +#endif +#ifdef HAVE_FLOCK + case FLOCKING: + if (flock (indesc, LOCK_EX) < 0) + pfatal_with_name (inname); + break; #endif +#ifdef HAVE_LOCKING + case LOCKING: + if (locking (indesc, LK_RLCK, -1L) < 0) + pfatal_with_name (inname); + break; #endif -#endif /* not MAIL_USE_LOCKF */ -#endif /* MAIL_USE_SYSTEM_LOCK */ + case DOTLOCKING: + lock_dot(inname); + break; + } + VERBOSE(("copying input file to output file\n")); + { char buf[1024]; @@ -453,7 +447,7 @@ main (int argc, char *argv[]) } } -#ifdef BSD +#ifdef HAVE_FSYNC if (fsync (outdesc) < 0) pfatal_and_delete (outname); #endif @@ -462,31 +456,29 @@ main (int argc, char *argv[]) if (close (outdesc) != 0) pfatal_and_delete (outname); -#ifdef MAIL_USE_SYSTEM_LOCK -#if defined (STRIDE) || defined (XENIX) || defined (WINDOWSNT) - /* Stride, xenix have file locking, but no ftruncate. This mess will do. */ - close (open (inname, O_CREAT | O_TRUNC | O_RDWR, 0666)); -#else - ftruncate (indesc, 0L); -#endif /* STRIDE or XENIX */ -#endif /* MAIL_USE_SYSTEM_LOCK */ + VERBOSE(("deleting or truncating input file\n")); -#ifdef MAIL_USE_MMDF - lk_close (indesc, 0, 0, 0); + switch (lock_method) + { + case LOCKFING: + case FLOCKING: + case LOCKING: +#ifdef HAVE_FTRUNCATE + ftruncate (indesc, 0L); #else - close (indesc); + close (open (inname, O_CREAT | O_TRUNC | O_RDWR, 0666)); #endif - -#ifndef MAIL_USE_SYSTEM_LOCK - /* Delete the input file; if we can't, at least get rid of its - contents. */ -#ifdef MAIL_UNLINK_SPOOL - /* This is generally bad to do, because it destroys the permissions - that were set on the file. Better to just empty the file. */ - if (unlink (inname) < 0 && errno != ENOENT) -#endif /* MAIL_UNLINK_SPOOL */ - creat (inname, 0600); -#endif /* not MAIL_USE_SYSTEM_LOCK */ + close (indesc); + break; +#ifdef HAVE_MMDF + case MMDF: + lk_close (indesc, 0, 0, 0); + break; +#endif + case DOTLOCKING: + creat (inname, 0600); + break; + } exit (0); } @@ -497,22 +489,162 @@ main (int argc, char *argv[]) else if (WEXITSTATUS (status) != 0) exit (WEXITSTATUS (status)); -#if !defined (MAIL_USE_MMDF) && !defined (MAIL_USE_SYSTEM_LOCK) - unlink (lockname); -#endif /* not MAIL_USE_MMDF and not MAIL_USE_SYSTEM_LOCK */ + if (lock_method == DOTLOCKING) + unlock_dot(inname); -#endif /* ! DISABLE_DIRECT_ACCESS */ +#endif /* not DISABLE_DIRECT_ACCESS */ return 0; } - + +static void +usage(int lock_method) +{ + printf ("Usage: movemail [-rvxkh] [-l lines ] [-m method ] [-i] inbox [-o] destfile [[-p] POP-password]\n"); + printf("where method is one of: dot"); +#ifdef HAVE_LOCKF + printf(", lockf"); +#endif +#ifdef HAVE_FLOCK + printf(", flock"); +#endif +#ifdef HAVE_MMDF + printf(", mmdf"); +#endif +#ifdef HAVE_LOCKING + printf(", locking"); +#endif + printf("\nDefault is: %s\n", unparse_lock_method(lock_method)); + +} + +static char * +unparse_lock_method(int lock_method) +{ + switch (lock_method) + { + case DOTLOCKING: return "dot"; + case FLOCKING: return "flock"; + case LOCKFING: return "lockf"; + case LOCKING: return "locking"; + case MMDF: return "mmdf"; + default: abort();return 0; + } +} + +static int +parse_lock_method(char *method_name) +{ + if (!strcmp("dot", method_name) || !strcmp("file", method_name)) + return DOTLOCKING; +#ifdef HAVE_LOCKF + else if (!strcmp("lockf", method_name)) + return LOCKFING; +#endif +#ifdef HAVE_FLOCK + else if (!strcmp("flock", method_name)) + return FLOCKING; +#endif +#ifdef HAVE_MMDF + else if (!strcmp("mmdf", method_name)) + return MMDF; +#endif +#ifdef HAVE_LOCKING + else if (!strcmp("locking", method_name)) + return LOCKING; +#endif + else + fatal("invalid lock method: %s", method_name); + return 0; /* unreached */ +} + +static char * +dot_filename(char *filename) +{ + return concat (filename, ".lock", ""); +} + +static char *dotlock_filename = NULL; + +static void +lock_dot(char *filename) +{ + struct stat st; + long now; + int tem; + char *lockname, *p; + char *tempname; + int desc; + + dotlock_filename = (char *) xmalloc(strlen(filename) + 1); + + /* Use a lock file named after our first argument with .lock appended: + If it exists, the mail file is locked. */ + + lockname = dot_filename(filename); + tempname = (char *) xmalloc (strlen (filename) + strlen ("EXXXXXX") + 1); + strcpy (tempname, filename); + p = tempname + strlen (tempname); + while (p != tempname && !IS_DIRECTORY_SEP (p[-1])) + p--; + *p = 0; + strcpy (p, "EXXXXXX"); + mktemp (tempname); + unlink (tempname); + + for (;;) + { + /* Create the lock file, but not under the lock file name. */ + /* Give up if cannot do that. */ + desc = open (tempname, O_WRONLY | O_CREAT | O_EXCL, 0666); + if (desc < 0) + { + char *message = (char *) xmalloc (strlen (tempname) + 50); + sprintf (message, "%s--see source file lib-src/movemail.c", + tempname); + pfatal_with_name (message); + } + close (desc); + + tem = link (tempname, lockname); + unlink (tempname); + if (tem >= 0) + break; + sleep (1); + + /* If lock file is five minutes old, unlock it. + Five minutes should be good enough to cope with crashes + and wedgitude, and long enough to avoid being fooled + by time differences between machines. */ + if (stat (lockname, &st) >= 0) + { + now = time (0); + if (st.st_ctime < now - 300) + unlink (lockname); + } + } + strcpy(dotlock_filename, filename); +} + +static void +unlock_dot(char *filename) +{ + unlink(dot_filename(filename)); +} + +static void +maybe_unlock_dot(void) +{ + if (dotlock_filename) + unlock_dot(dotlock_filename); +} + /* Print error message and exit. */ static void fatal (char *s1, char *s2) { - if (delete_lockname) - unlink (delete_lockname); + maybe_unlock_dot(); error (s1, s2, NULL); exit (1); } @@ -568,7 +700,7 @@ xmalloc (unsigned int size) fatal ("virtual memory exhausted", 0); return result; } - + /* This is the guts of the interface to the Post Office Protocol. */ #ifdef MAIL_USE_POP @@ -605,7 +737,7 @@ popmail (char *user, char *outfile, char *password) FILE *mbf; popserver server; - VERBOSE(("opening server\r")); + VERBOSE(("opening server\n")); server = pop_open (0, user, password, POP_NO_GETPASS); if (! server) { @@ -613,7 +745,7 @@ popmail (char *user, char *outfile, char *password) return (1); } - VERBOSE(("stat'ing messages\r")); + VERBOSE(("stat'ing messages\n")); if (pop_stat (server, &nmsgs, &nbytes)) { error (pop_error, NULL, NULL); @@ -654,13 +786,13 @@ popmail (char *user, char *outfile, char *password) for (idx = 0; idx < nmsgs; idx++) { i = reverse ? nmsgs - idx : idx + 1; - VERBOSE(("checking message %d \r", i)); + VERBOSE(("checking message %d \n", i)); if (!regexp_pattern || pop_search_top (server, i, match_lines, regexp_pattern) == POP_RETRIEVED) { - VERBOSE(("retrieving message %d \r", i)); + VERBOSE(("retrieving message %d \n", i)); mbx_delimit_begin (mbf); if (pop_retr (server, i, mbx_write, mbf) != POP_RETRIEVED) { @@ -689,7 +821,7 @@ popmail (char *user, char *outfile, char *password) * directories have lost mail when over quota because these checks were * not made in previous versions of movemail. */ -#ifdef BSD +#ifdef HAVE_FSYNC if (fsync (mbfi) < 0) { error ("Error in fsync: %s", strerror (errno), NULL); @@ -709,7 +841,7 @@ popmail (char *user, char *outfile, char *password) { if (retrieved_list[i] == 1) { - VERBOSE(("deleting message %d \r", i)); + VERBOSE(("deleting message %d \n", i)); if (pop_delete (server, i)) { error (pop_error, NULL, NULL); @@ -877,7 +1009,7 @@ compile_regex (char* pattern) #endif /* MAIL_USE_POP */ - + #ifndef HAVE_STRERROR char * strerror (int errnum) diff --git a/lib-src/ootags.c b/lib-src/ootags.c index 8a9d0c3..80b4cd0 100644 --- a/lib-src/ootags.c +++ b/lib-src/ootags.c @@ -104,9 +104,6 @@ char pot_etags_version[] = "@(#) pot revision number is 12.28"; #include #include #include -#ifndef errno - extern int errno; -#endif #include #include @@ -176,9 +173,9 @@ char pot_etags_version[] = "@(#) pot revision number is 12.28"; #ifdef OO_BROWSER #define set_construct(construct) \ if (!oo_browser_construct) oo_browser_construct = construct -void oo_browser_clear_all_globals(); -void oo_browser_clear_some_globals(); -void oo_browser_check_and_clear_structtype(); +void oo_browser_clear_all_globals(void); +void oo_browser_clear_some_globals(void); +void oo_browser_check_and_clear_structtype(void); #endif /* @@ -200,7 +197,7 @@ void oo_browser_check_and_clear_structtype(); typedef int bool; -typedef void Lang_function (); +typedef void Lang_function (FILE *); typedef struct { @@ -860,9 +857,7 @@ char *massage_name (s) int -main (argc, argv) - int argc; - char *argv[]; +main (int argc, char *argv[]) { int i; unsigned int nincluded_files; @@ -1654,8 +1649,7 @@ static char oo_browser_prefix; #endif void -put_entries (np) - register node *np; +put_entries (node *np) { register char *sp; @@ -1889,9 +1883,7 @@ struct C_stab_entry { char *name; int c_ext; enum sym_type type; }; /* maximum key range = 117, duplicates = 0 */ static unsigned int -hash (str, len) - register char *str; - register int unsigned len; +hash (char *str, unsigned int len) { static unsigned char asso_values[] = { @@ -1909,13 +1901,13 @@ hash (str, len) 10, 62, 59, 130, 28, 27, 50, 19, 3, 130, 130, 130, 130, 130, 130, 130, 130, 130, }; - return len + asso_values[str[2]] + asso_values[str[0]]; + return len + + asso_values[(unsigned char) str[2]] + + asso_values[(unsigned char) str[0]]; } -struct C_stab_entry * -in_word_set (str, len) - register char *str; - register unsigned int len; +static struct C_stab_entry * +in_word_set (char *str, unsigned int len) { static struct C_stab_entry wordlist[] = { @@ -2077,7 +2069,7 @@ enum sym_type structtype; #ifdef OO_BROWSER void -oo_browser_check_and_clear_structtype() +oo_browser_check_and_clear_structtype(void) { /* Allow for multiple enum_label tags. */ if (structtype != st_C_enum) @@ -2156,7 +2148,7 @@ int methodlen; #ifdef OO_BROWSER void -oo_browser_clear_all_globals() +oo_browser_clear_all_globals(void) { /* Initialize globals so there is no carry over between files. */ oo_browser_construct = C_NULL; @@ -2167,7 +2159,7 @@ oo_browser_clear_all_globals() } void -oo_browser_clear_some_globals() +oo_browser_clear_some_globals(void) { oo_browser_construct = C_NULL; structtype = st_none; @@ -3638,8 +3630,7 @@ Fortran_functions (inf) * look for '^[a-zA-Z_.$][a-zA_Z0-9_.$]*[: ^I^J]' */ void -Asm_labels (inf) - FILE *inf; +Asm_labels (FILE *inf) { register char *cp; diff --git a/lib-src/pop.c b/lib-src/pop.c index c50fc14..0c12cbe 100644 --- a/lib-src/pop.c +++ b/lib-src/pop.c @@ -21,7 +21,7 @@ Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #define NO_SHORTNAMES /* Tell config not to load remap.h */ -#include <../src/config.h> +#include #else #define MAIL_USE_POP #endif diff --git a/lib-src/profile.c b/lib-src/profile.c index ec62ebb..b0ab560 100644 --- a/lib-src/profile.c +++ b/lib-src/profile.c @@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */ ** abstraction : a stopwatch ** operations: reset_watch, get_time */ -#include <../src/config.h> +#include #include #include #include "../src/systime.h" diff --git a/lib-src/sorted-doc.c b/lib-src/sorted-doc.c index b7c3baa..4b82143 100644 --- a/lib-src/sorted-doc.c +++ b/lib-src/sorted-doc.c @@ -7,7 +7,7 @@ /* Synched up with: FSF 19.28. */ -#include <../src/config.h> +#include #include #include diff --git a/lib-src/wakeup.c b/lib-src/wakeup.c index 979bd82..618938e 100644 --- a/lib-src/wakeup.c +++ b/lib-src/wakeup.c @@ -1,6 +1,6 @@ /* Program to produce output at regular intervals. */ -#include <../src/config.h> +#include #if __STDC__ || defined(STDC_HEADERS) #include diff --git a/lib-src/yow.c b/lib-src/yow.c index 6a76772..79d4635 100644 --- a/lib-src/yow.c +++ b/lib-src/yow.c @@ -10,7 +10,7 @@ /* Synched up with: FSF 19.28. */ #define DONT_ENCAPSULATE -#include <../src/config.h> +#include #include #include diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0abaae8..4f68f8a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1207,6 +1207,151 @@ * files.el (insert-file-contents-literally): Treat file as binary; call file-name-handlers. [sync with Emacs 20.3.10] +2000-01-18 Martin Buchholz + + * XEmacs 21.2.27 is released. + +2000-01-18 Martin Buchholz + + * process.el (shell-command-to-string): Use the FSF docstring. + Make shell-command-to-string the standard function, and + exec-to-string the (deprecated) alias. + + * startup.el: typo fix. + +2000-01-16 Martin Buchholz + + * mule/mule-misc.el (char-octet): Move back into mule-charset.c. + +2000-01-14 Yoshiki Hayashi + + * menubar-items.el (sort-buffers-menu-alphabetically): Put invisible + buffers after visible buffers. + (sort-buffers-menu-by-mode-then-alphabetically): Ditto. + +2000-01-17 Yoshiki Hayashi + + * info.el (Info-extract-menu-node-name): Stop at a dot + followed by whitespace or right parenthesis. + +2000-01-15 Hrvoje Niksic + + * info.el (Info-directory-list): Warn against using Customize with + Info-directory-list. + +2000-01-15 Adrian Aichner + + * minibuf.el (read-file-name): doc fix. + + * autoload.el (update-file-autoloads): doc fix. + + * about.el (about-hackers): Change my E-mail address. + +2000-01-13 Martin Buchholz + + * info.el (Info-visit-file): Just use the `f' interactive spec to + read a filename in the standard way. + +2000-01-13 Andy Piper + + * gutter-items.el (gutter-buffers-tab-orientation): new variable. + (gutter-buffers-tab-extent): new variable. + (update-tab-in-gutter): call add-tab-to-gutter again if the + orientation has changed. + (add-tab-to-gutter): cope with different orientations. + +2000-01-11 Didier Verna + + * info.el (Info-following-node-name): backward-skip dots as well + as spaces (dots at the end of a node name aren't part of it). + (Info-extract-menu-node-name): don't skip dots. There could be + some in the node name. + (Info-index): allow dots to be part of a node name. + +2000-01-12 Andreas Jaeger + + * files.el (auto-mode-alist): Added idlwave-mode. + Patch by Carsten Dominik . + +1999-12-22 Yoshiki Hayashi + + * info.el (Info-search): Show default value. + +1999-12-20 Yoshiki Hayashi + + * info.el (Info-read-node-completion-table): New variable. + (Info-read-node-name-1): New function. + (Info-read-node-name): Use it. + (Info-follow-reference): Use DEFAULT argument of completing-read. + (Info-menu): Ditto. + +1999-12-27 Yoshiki Hayashi + + * hyper-apropos.el (hyper-describe-key-briefly): Save + window configuration. + (hyper-describe-face): Use DEFAULT of completing-read. + (hyper-apropos-read-variable-symbol): Ditto. + (hyper-apropos-read-function-symbol): Ditto. + +1999-12-27 Yoshiki Hayashi + + * mule/mule-cmds.el (set-default-coding-system): Set + comint-exec-hook to use coding-system-for-read and + coding-system-for-write so that C-x RET c works. + +1999-12-27 Yoshiki Hayashi + + * minibuf.el (minibuffer-confirm-incomplete): Customize. + (previous-matching-history-element): Increment + minibuffer-max-depth by 1. + (next-matching-history-element): Ditto. + +2000-01-11 Andy Piper + + * gutter-items.el (buffers-tab): Create a new face for the buffers + tab. + (buffers-tab-face): use it. + +2000-01-10 Didier Verna + + * modeline.el (modeline-scrolling-method): change modeline X + cursor appearance according to the value. + +2000-01-07 Andreas Jaeger + + * about.el (about-hackers): Moved my entry to contributor list. + (xemacs-hackers): Added myself. + (about-maintainer-info): Added description of myself. + + +2000-01-07 Didier Verna + + * modeline.el (modeline-scrolling-method): new variable. + (mouse-drag-modeline): add reference to it in the docstring. + (mouse-drag-modeline): handle it. + +2000-01-08 Andy Piper + + * gutter-items.el (update-tab-in-gutter): remove resize-subwindow + calls. + (remove-buffer-from-gutter-tab): ditto. + +2000-01-06 Per Abrahamsen + + * cus-edit.el (custom-hook-convert-widget): Fix comment. + (custom-face-edit): Fix grammatical error in help message. + +2000-01-03 Michael Sperber [Mr. Preprocessor] + + * movemail.el: Added. + + * dumped-lisp.el (preloaded-file-list): Added movemail.el. + +2000-01-03 Didier Verna + + * modeline.el (mouse-drag-modeline): remove the code related to + the modeline horizontal scrolling facility. + 1999-12-31 Martin Buchholz * XEmacs 21.2.26 is released. @@ -1242,7 +1387,7 @@ 1999-12-21 Martin Buchholz - * byte-optimize.el (byte-optimize-plus): + * byte-optimize.el (byte-optimize-plus): Optimize (+ 1) to 1 instead of (1+ nil). * files.el (basic-save-buffer): Rewrite for clarity. Use (char-before). @@ -1273,7 +1418,7 @@ 1999-12-13 Charles G Waldman - * gnuserv.el (gnuserv-process-filter): don't call + * gnuserv.el (gnuserv-process-filter): don't call gnuserv-write-to-client when gnuserv-current-client is nil 1999-12-14 Martin Buchholz @@ -1475,7 +1620,7 @@ 1999-10-06 Andy Piper - * files.el (recover-file): Don't use ls under windows for revert buffer. + * files.el (recover-file): Don't use ls under windows for revert buffer. 1999-09-25 Adrian Aichner @@ -1494,8 +1639,8 @@ 1999-09-27 Martin Buchholz - * modeline.el (modeline-format): - Only purecopy the strings. Else + * modeline.el (modeline-format): + Only purecopy the strings. Else (nsublis '(("%p" . "%P")) (default-value 'modeline-format) :test 'equal) barfs. @@ -1560,13 +1705,13 @@ 1999-08-30 Michael Sperber [Mr. Preprocessor] - * obsolete.el (init-file-user): - * startup.el: - * packages.el (packages-compute-package-locations): - * package-get.el (package-get-user-index-filename): - * menubar-items.el (maybe-add-init-button): - * info.el (Info-annotations-path): - * dump-paths.el: + * obsolete.el (init-file-user): + * startup.el: + * packages.el (packages-compute-package-locations): + * package-get.el (package-get-user-index-filename): + * menubar-items.el (maybe-add-init-button): + * info.el (Info-annotations-path): + * dump-paths.el: Change `user-init-directory' to be an absolute path. Use `user-init-directory' where appropriate. Zap `init-file-user' and its uses. @@ -1629,7 +1774,7 @@ 1999-09-03 Hrvoje Niksic - * obsolete.el (isearch-yank-x-clipboard): Define it as an obsolete + * obsolete.el (isearch-yank-x-clipboard): Define it as an obsolete alias. * isearch-mode.el (isearch-top-state): Restore isearch-word. @@ -1703,7 +1848,7 @@ (isearch-update-ring): New function. (isearch-done): Call it. (isearch-done): New argument EDIT. - (isearch-repeat): If search string is empty, look up at the car of + (isearch-repeat): If search string is empty, look up at the car of the search ring; ignore the yank pointer. (isearch-abort): Call isearch-done with NOPUSH. (isearch-cancel): New function. @@ -1733,7 +1878,7 @@ need to check isearch-fixed-case. (isearch-toggle-case-fold): Update highlighting of all matches before the pause. - (isearch-edit-string): + (isearch-edit-string): 1999-09-01 Hrvoje Niksic @@ -1817,7 +1962,7 @@ * faces.el (isearch-secondary): Create face here. - * isearch-mode.el: Rewrote the "lazy highlighting" code not to use + * isearch-mode.el: Rewrote the "lazy highlighting" code not to use timers. 1999-08-27 Hrvoje Niksic diff --git a/lisp/about.el b/lisp/about.el index 4448a0d..fa41b5e 100644 --- a/lisp/about.el +++ b/lisp/about.el @@ -56,6 +56,7 @@ ;; `about-maintainer-info' (and maybe `about-hackers'. (defvar xemacs-hackers '((ajc "Andrew Cosgriff" "ajc@bing.wattle.id.au") + (aj "Andreas Jaeger" "aj@suse.de") (baw "Barry Warsaw" "bwarsaw@python.org") (bw "Bob Weiner" "weiner@beopen.com") (chr "Christian Nybø" "chr@mediascience.no") @@ -987,6 +988,14 @@ internet startup called New Media Science, doing scripting and violation of HTML DTD's. After graduation, spring 1999, he'll be looking for a job involving lisp programming, French and Russian.") (widget-insert ".\n")) + (aj + (widget-insert "\ +In the XEmacs team I'm responsible for the packages which means mainly +applying patches and packaging the packages. + +I'm a software developer working for the SuSE Labs of the Linux +distributor SuSE. My main task is to improve the GNU C library.") + (widget-insert ".\n")) )) ;; Setup the buffer for a maintainer. @@ -1197,6 +1206,9 @@ Originator and maintainer of the gnus.org domain.\n") Beta tester and last hacker of calendar.\n") (about-show-linked-info 'chr "\ Maintainer of the XEmacs FAQ and proud author of `zap-up-to-char'.\n") + (about-show-linked-info 'aj "\ +`Package Patch Tender', beta tester and GNU libc developer.\n") + (flet ((print-short (name addr &optional shortinfo) (concat (about-with-face name 'italic) (about-tabs name) @@ -1263,7 +1275,7 @@ above. We couldn't have done it without them.\n\n" (print-short "Per Abrahamsen" "abraham@dina.kvl.dk") (print-short "Gary Adams" "gra@zeppo.East.Sun.COM") (print-short "Gennady Agranov" "agranov@csa.CS.Technion.Ac.IL") - (print-short "Adrian Aichner" "aichner@ecf.teradyne.com") + (print-short "Adrian Aichner" "adrian@xemacs.org") (print-short "Mark Allender" "allender@vnet.IBM.COM") (print-short "Stephen R. Anderson" "sra@bloch.ling.yale.edu") (print-short "Butch Anton" "butch@zaphod.uchicago.edu") @@ -1360,7 +1372,6 @@ above. We couldn't have done it without them.\n\n" (print-short "Tudor Hulubei" "tudor@cs.unh.edu") (print-short "Tatsuya Ichikawa" "ichikawa@hv.epson.co.jp") (print-short "Andrew Innes" "andrewi@harlequin.co.uk") - (print-short "Andreas Jaeger" "aj@arthur.rhein-neckar.de") (print-short "Markku Jarvinen" "Markku.Jarvinen@simpukka.funet.fi") (print-short "Robin Jeffries" "robin.jeffries@sun.com") (print-short "Philip Johnson" "johnson@uhics.ics.Hawaii.Edu") diff --git a/lisp/autoload.el b/lisp/autoload.el index ec70873..2862234 100644 --- a/lisp/autoload.el +++ b/lisp/autoload.el @@ -359,7 +359,7 @@ Unless you are an XEmacs maintainr, it is probably unwise to change this.") (defun update-file-autoloads (file) "Update the autoloads for FILE in `generated-autoload-file' \(which FILE might bind in its local variables). -This functions refuses to update autoloads files." +This function refuses to update autoloads files." (interactive "fUpdate autoloads for file: ") (setq file (expand-file-name file)) (when (and (file-newer-than-file-p file generated-autoload-file) diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el index 983bace..734725f 100644 --- a/lisp/cus-edit.el +++ b/lisp/cus-edit.el @@ -1,6 +1,6 @@ ;;; cus-edit.el --- Tools for customizating Emacs and Lisp packages. ;; -;; Copyright (C) 1996, 1997 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc. ;; ;; Author: Per Abrahamsen ;; Maintainer: Hrvoje Niksic @@ -2272,7 +2272,7 @@ Optional EVENT is the location for the menu." :format "%t: %v" :tag "Attributes" :extra-offset 12 - :button-args '(:help-echo "Control whether this attribute have any effect") + :button-args '(:help-echo "Control whether this attribute has any effect") :args (mapcar (lambda (att) (list 'group :inline t @@ -2756,7 +2756,7 @@ Optional EVENT is the location for the menu." :tag "Hook") (defun custom-hook-convert-widget (widget) - ;; Handle `:custom-options'. + ;; Handle `:options'. (let* ((options (widget-get widget :options)) (other `(editable-list :inline t :entry-format "%i %d%v" diff --git a/lisp/dumped-lisp.el b/lisp/dumped-lisp.el index ead38e0..b960080 100644 --- a/lisp/dumped-lisp.el +++ b/lisp/dumped-lisp.el @@ -80,7 +80,7 @@ "text-mode" "fill" "auto-save" ; Added for 20.4 - + "movemail" ; Added for 21.2 (when-feature windows-nt "winnt") (when-feature lisp-float-type "float-sup") "itimer" ; for vars auto-save-timeout and diff --git a/lisp/files.el b/lisp/files.el index 19ae8b1..9821e01 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -1160,6 +1160,7 @@ run `normal-mode' explicitly." ("\\.m\\(?:[mes]\\|an\\)\\'" . nroff-mode) ("\\.icn\\'" . icon-mode) ("\\.\\(?:[ckz]?sh\\|shar\\)\\'" . sh-mode) + ("\\.pro\\'" . idlwave-mode) ;; #### Unix-specific! ("/\\.\\(?:bash_\\|z\\)?\\(profile\\|login\\|logout\\)\\'" . sh-mode) ("/\\.\\(?:[ckz]sh\\|bash\\|tcsh\\|es\\|xinit\\|startx\\)rc\\'" . sh-mode) diff --git a/lisp/gutter-items.el b/lisp/gutter-items.el index 6b0b8f0..46b137f 100644 --- a/lisp/gutter-items.el +++ b/lisp/gutter-items.el @@ -40,6 +40,11 @@ customized through the options menu." (set-specifier default-gutter-visible-p val) (setq gutter-visible-p val))) +(defvar gutter-buffers-tab nil + "A tab widget in the gutter for displaying buffers. +Do not set this. Use `glyph-image-instance' and +`set-image-instance-property' to change the properties of the tab.") + (defcustom default-gutter-position (default-gutter-position) "The location of the default gutter. It can be 'top, 'bottom, 'left or @@ -51,7 +56,8 @@ customized through the options menu." (const :tag "right" 'right)) :set #'(lambda (var val) (set-default-gutter-position val) - (setq default-gutter-position val))) + (setq default-gutter-position val) + (when gutter-buffers-tab (update-tab-in-gutter)))) ;;; The Buffers tab @@ -59,10 +65,10 @@ customized through the options menu." "Customization of `Buffers' tab." :group 'gutter) -(defvar gutter-buffers-tab nil - "A tab widget in the gutter for displaying buffers. -Do not set this. Use `glyph-image-instance' and -`set-image-instance-property' to change the properties of the tab.") +(defvar gutter-buffers-tab-orientation 'top + "Where the buffers tab currently is. Do not set this.") + +(defvar gutter-buffers-tab-extent nil) (defcustom buffers-tab-max-size 6 "*Maximum number of entries which may appear on the \"Buffers\" tab. @@ -102,7 +108,10 @@ by `buffers-tab-grouping-regexp'." function) :group 'buffers-tab) -(defcustom buffers-tab-face 'default +(make-face 'buffers-tab "Face for displaying the buffers tab.") +(set-face-parent 'buffers-tab 'default) + +(defcustom buffers-tab-face 'buffers-tab "*Face to use for displaying the buffers tab." :type 'face :group 'buffers-tab) @@ -227,25 +236,51 @@ items by redefining the function `format-buffers-menu-line'." (defun add-tab-to-gutter () "Put a tab control in the gutter area to hold the most recent buffers." + (setq gutter-buffers-tab-orientation (default-gutter-position)) (let ((gutter-string "")) + (unless gutter-buffers-tab-extent + (setq gutter-buffers-tab-extent (make-extent 0 0 gutter-string))) (set-extent-begin-glyph - (make-extent 0 0 gutter-string) + gutter-buffers-tab-extent (setq gutter-buffers-tab (make-glyph (vector 'tab-control :descriptor "Buffers" :face buffers-tab-face + :orientation gutter-buffers-tab-orientation :properties (list :items (buffers-tab-items)))))) ;; This looks better than a 3d border (mapcar '(lambda (x) (when (valid-image-instantiator-format-p 'tab-control x) (set-specifier default-gutter-border-width 0 'global x) - (set-specifier default-gutter gutter-string 'global x))) + (set-specifier top-gutter nil 'global x) + (set-specifier bottom-gutter nil 'global x) + (set-specifier left-gutter nil 'global x) + (set-specifier right-gutter nil 'global x) + (set-specifier left-gutter-width 0 'global x) + (set-specifier right-gutter-width 0 'global x) + (cond ((eq gutter-buffers-tab-orientation 'top) + (set-specifier top-gutter gutter-string 'global x)) + ((eq gutter-buffers-tab-orientation 'bottom) + (set-specifier bottom-gutter gutter-string 'global x)) + ((eq gutter-buffers-tab-orientation 'left) + (set-specifier left-gutter gutter-string 'global x) + (set-specifier left-gutter-width + (glyph-width gutter-buffers-tab) + 'global x)) + ((eq gutter-buffers-tab-orientation 'right) + (set-specifier right-gutter gutter-string 'global x) + (set-specifier right-gutter-width + (glyph-width gutter-buffers-tab) + 'global x)) + ))) (console-type-list)))) (defun update-tab-in-gutter (&optional frame-or-buffer) "Update the tab control in the gutter area." (let ((locale (if (framep frame-or-buffer) frame-or-buffer))) (when (specifier-instance default-gutter-visible-p locale) - (unless gutter-buffers-tab + (unless (and gutter-buffers-tab + (eq (default-gutter-position) + gutter-buffers-tab-orientation)) (add-tab-to-gutter)) (when (valid-image-instantiator-format-p 'tab-control) (let ((inst (glyph-image-instance @@ -254,9 +289,7 @@ items by redefining the function `format-buffers-menu-line'." (last-nonminibuf-window frame-or-buffer))))) (set-image-instance-property inst :items (buffers-tab-items - nil locale)) - (resize-subwindow inst (gutter-pixel-width) nil)) - )))) + nil locale))))))) (defun remove-buffer-from-gutter-tab () "Remove the current buffer from the tab control in the gutter area." @@ -268,9 +301,7 @@ items by redefining the function `format-buffers-menu-line'." (setq buffers (build-buffers-tab-internal (list (get-buffer-create "*scratch*"))))) - (set-image-instance-property inst :items buffers) - (resize-subwindow inst (gutter-pixel-width) nil) - ))) + (set-image-instance-property inst :items buffers)))) (add-hook 'kill-buffer-hook 'remove-buffer-from-gutter-tab) (add-hook 'create-frame-hook 'update-tab-in-gutter) diff --git a/lisp/hyper-apropos.el b/lisp/hyper-apropos.el index dd3397a..a9c4d34 100644 --- a/lisp/hyper-apropos.el +++ b/lisp/hyper-apropos.el @@ -438,7 +438,9 @@ General Commands: (if (and (or (symbolp defn) (symbolp (setq defn (car-safe defn)))) defn show) - (hyper-apropos-get-doc defn t)))))) + (hyper-apropos-get-doc defn t)) + (or (memq major-mode '(hyper-apropos-mode hyper-apropos-help-mode)) + (setq hyper-apropos-prev-wconfig (current-window-configuration))))))) ;;;###autoload (defun hyper-describe-face (symbol &optional this-ref-buffer) @@ -460,10 +462,9 @@ See also `hyper-apropos' and `hyper-describe-function'." ": ")) (mapcar #'(lambda (x) (list (symbol-name x))) (face-list)) - nil t nil 'hyper-apropos-face-history))) - (list (if (string= val "") - (progn (push (symbol-name v) hyper-apropos-face-history) v) - (intern-soft val)) + nil t nil 'hyper-apropos-face-history + (and v (symbol-name v))))) + (list (intern-soft val) current-prefix-arg))) (if (null symbol) (message "Sorry, nothing to describe.") @@ -530,10 +531,10 @@ See also `hyper-apropos' and `hyper-describe-function'." (if v (format " (default %s): " v) ": ")) - obarray predicate t nil 'variable-history))) - (if (string= val "") - (progn (push (symbol-name v) variable-history) v) - (intern-soft val)))) + obarray predicate t nil 'variable-history + (and v (symbol-name v))))) + (intern-soft val))) + ;;;###autoload (define-obsolete-function-alias 'hypropos-read-variable-symbol 'hyper-apropos-read-variable-symbol) @@ -549,10 +550,9 @@ See also `hyper-apropos' and `hyper-describe-function'." (format "%s (default %s): " prompt fn) (format "%s: " prompt)) obarray 'fboundp t nil - 'function-history))) - (if (equal val "") - (progn (push (symbol-name fn) function-history) fn) - (intern-soft val)))) + 'function-history + (and fn (symbol-name fn))))) + (intern-soft val))) (defun hyper-apropos-last-help (arg) "Go back to the last symbol documented in the *Hyper Help* buffer." diff --git a/lisp/info.el b/lisp/info.el index d96c5ba..d90df95 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -437,9 +437,15 @@ nil or `never', the default, auto-generated info directory "List of directories to search for Info documentation files. The first directory in this list, the \"dir\" file there will become -the (dir)Top node of the Info documentation tree. If you wish to -modify the info search path, use `M-x customize-variable, -Info-directory-list' to do so.") +the (dir)Top node of the Info documentation tree. + +Note: DO NOT use the `customize' interface to change the value of this +variable. Its value is created dynamically on each startup, depending +on XEmacs packages installed on the system. If you want to change the +search path, make the needed modifications on the variable's value +from .emacs. For instance: + + (setq Info-directory-list (cons \"~/info\" Info-directory-list))") (defcustom Info-localdir-heading-regexp "^Locally installed XEmacs Packages:?" @@ -1489,12 +1495,10 @@ annotation for any node of any file. (See `a' and `x' commands.)" (or (equal tag "") (Info-find-node nil (format "<<%s>>" tag))))) ;;;###autoload -(defun Info-visit-file () +(defun Info-visit-file (file) "Directly visit an info file." - (interactive) - (let* ((insert-default-directory nil) - (file (read-file-name "Goto Info file: " "" ""))) - (or (equal file "") (Info-find-node (expand-file-name file) "Top")))) + (interactive "fVisit Info file: ") + (Info-find-node (expand-file-name file) "Top")) (defun Info-restore-point (&optional always) "Restore point to same location it had last time we were in this node." @@ -1513,13 +1517,33 @@ annotation for any node of any file. (See `a' and `x' commands.)" (set-window-start (get-buffer-window (current-buffer)) (+ (nth 2 entry) (point-min))))) +(defvar Info-read-node-completion-table) + +;; This function is used as the "completion table" while reading a node name. +;; It does completion using the alist in Info-read-node-completion-table +;; unless STRING starts with an open-paren. +(defun Info-read-node-name-1 (string predicate code) + (let ((no-completion (and (> (length string) 0) (eq (aref string 0) ?\()))) + (cond ((eq code nil) + (if no-completion + string + (try-completion string Info-read-node-completion-table predicate))) + ((eq code t) + (if no-completion + nil + (all-completions string Info-read-node-completion-table predicate))) + ((eq code 'lambda) + (if no-completion + t + (assoc string Info-read-node-completion-table)))))) + (defun Info-read-node-name (prompt &optional default) (Info-setup-initial) (let* ((completion-ignore-case t) - (nodename (completing-read prompt - (Info-build-node-completions) - nil nil nil - 'Info-minibuffer-history))) + (Info-read-node-completion-table (Info-build-node-completions)) + (nodename (completing-read prompt 'Info-read-node-name-1 + nil t nil 'Info-minibuffer-history + default))) (if (equal nodename "") (or default (Info-read-node-name prompt)) @@ -1576,10 +1600,14 @@ annotation for any node of any file. (See `a' and `x' commands.)" ;;;###autoload (defun Info-search (regexp) "Search for REGEXP, starting from point, and select node it's found in." - (interactive "sSearch (regexp): ") - (if (equal regexp "") - (setq regexp Info-last-search) - (setq Info-last-search regexp)) + (interactive (list + (read-from-minibuffer + (if Info-last-search + (format "Search (regexp, default %s): " + Info-last-search) + "Search (regexp): ") + nil nil nil nil nil Info-last-search))) + (setq Info-last-search regexp) (with-search-caps-disable-folding regexp t (let ((found ()) (onode Info-current-node) @@ -1666,7 +1694,7 @@ annotation for any node of any file. (See `a' and `x' commands.)" (skip-chars-forward (concat (or allowedchars "^,\t\n") "(")) (if (looking-at "(") (skip-chars-forward "^)"))) - (skip-chars-backward " ") + (skip-chars-backward " .") (point)))) (defun Info-next (&optional n) @@ -1761,7 +1789,8 @@ NAME may be an abbreviation of the reference name." default ") ") "Follow reference named: ") completions nil t nil - 'Info-minibuffer-history))) + 'Info-minibuffer-history + default))) (if (and (string= item "") default) (list default) (list item))) @@ -1845,7 +1874,19 @@ NAME may be an abbreviation of the reference name." (if (looking-at ":") (buffer-substring beg (1- (point))) (skip-chars-forward " \t\n") - (Info-following-node-name (if multi-line "^.,\t" "^.,\t\n")))) + ;; Kludge. + ;; Allow dots in node name not followed by whitespace. + (re-search-forward + (concat "\\(([^)]+)[^." + (if multi-line "" "\n") + "]*\\|\\([^.,\t" + (if multi-line "" "\n") + ;; We consider dots followed by newline as + ;; end of nodename even if multil-line. + ;; Also stops at .). It is generated by @pxref. + ;; Skips sequential dots. + "]\\|\\.+[^ \t\n)]\\)+\\)")) + (match-string 1))) (while (setq i (string-match "\n" str i)) (aset str i ?\ )) str)) @@ -1888,7 +1929,8 @@ Completion is allowed, and the menu item point is on is the default." default) "Menu item: ") completions nil t nil - 'Info-minibuffer-history))) + 'Info-minibuffer-history + default))) ;; we rely on the fact that completing-read accepts an input ;; of "" even when the require-match argument is true and "" ;; is not a valid possibility @@ -2095,7 +2137,7 @@ Give a blank topic name to go to the Index node itself." (interactive "sIndex topic: ") (let ((pattern (format "\n\\* \\([^\n:]*%s[^\n:]*\\):[ \t]*%s" (regexp-quote topic) - "\\([^.\n]*\\)\\.[ t]*\\([0-9]*\\)")) + "\\(.*\\)\\.[ t]*\\([0-9]*\\)$")) node) (message "Searching index for `%s'..." topic) (Info-goto-node "Top") diff --git a/lisp/menubar-items.el b/lisp/menubar-items.el index 0750bc8..4439044 100644 --- a/lisp/menubar-items.el +++ b/lisp/menubar-items.el @@ -93,17 +93,17 @@ (or buffer-undo-list pending-undo-list)) :suffix (if (or (eq last-command 'undo) (eq last-command 'advertised-undo)) - "More" "")] + "More" "")] ["Redo" redo :included (fboundp 'redo) :active (not (or (eq buffer-undo-list t) - (eq last-buffer-undo-list nil) - (not (or (eq last-buffer-undo-list buffer-undo-list) - (and (null (car-safe buffer-undo-list)) - (eq last-buffer-undo-list - (cdr-safe buffer-undo-list))))) - (or (eq buffer-undo-list pending-undo-list) - (eq (cdr buffer-undo-list) pending-undo-list)))) + (eq last-buffer-undo-list nil) + (not (or (eq last-buffer-undo-list buffer-undo-list) + (and (null (car-safe buffer-undo-list)) + (eq last-buffer-undo-list + (cdr-safe buffer-undo-list))))) + (or (eq buffer-undo-list pending-undo-list) + (eq (cdr buffer-undo-list) pending-undo-list)))) :suffix (if (eq last-command 'redo) "More" "")] ["Cut" kill-primary-selection :active (selection-owner-p)] @@ -634,24 +634,24 @@ (force-cursor-redisplay)) :style radio :selected (eq bar-cursor t)] - ["Bar cursor (2 pixels)" - (progn - (customize-set-variable 'bar-cursor 2) - (force-cursor-redisplay)) - :style radio - :selected (and bar-cursor (not (eq bar-cursor t)))] - "------" - ["Line Numbers" - (progn - (customize-set-variable 'line-number-mode (not line-number-mode)) - (redraw-modeline)) - :style toggle :selected line-number-mode] - ["Column Numbers" - (progn - (customize-set-variable 'column-number-mode - (not column-number-mode)) - (redraw-modeline)) - :style toggle :selected column-number-mode] + ["Bar cursor (2 pixels)" + (progn + (customize-set-variable 'bar-cursor 2) + (force-cursor-redisplay)) + :style radio + :selected (and bar-cursor (not (eq bar-cursor t)))] + "------" + ["Line Numbers" + (progn + (customize-set-variable 'line-number-mode (not line-number-mode)) + (redraw-modeline)) + :style toggle :selected line-number-mode] + ["Column Numbers" + (progn + (customize-set-variable 'column-number-mode + (not column-number-mode)) + (redraw-modeline)) + :style toggle :selected column-number-mode] ) ("Menubar Appearance" ["Buffers Menu Length..." @@ -1142,11 +1142,16 @@ Sorts the buffers in alphabetical order by name, but puts buffers beginning with a star at the end of the list." (let* ((nam1 (buffer-name buf1)) (nam2 (buffer-name buf2)) + (inv1p (not (null (string-match "\\` " nam1)))) + (inv2p (not (null (string-match "\\` " nam2)))) (star1p (not (null (string-match "\\`*" nam1)))) (star2p (not (null (string-match "\\`*" nam2))))) - (if (not (eq star1p star2p)) - (not star1p) - (string-lessp nam1 nam2)))) + (cond ((not (eq inv1p inv2p)) + (not inv1p)) + ((not (eq star1p star2p)) + (not star1p)) + (t + (string-lessp nam1 nam2))))) (defun sort-buffers-menu-by-mode-then-alphabetically (buf1 buf2) "For use as a value of `buffers-menu-sort-function'. @@ -1154,15 +1159,23 @@ Sorts first by major mode and then alphabetically by name, but puts buffers beginning with a star at the end of the list." (let* ((nam1 (buffer-name buf1)) (nam2 (buffer-name buf2)) + (inv1p (not (null (string-match "\\` " nam1)))) + (inv2p (not (null (string-match "\\` " nam2)))) (star1p (not (null (string-match "\\`*" nam1)))) (star2p (not (null (string-match "\\`*" nam2)))) (mode1 (symbol-value-in-buffer 'major-mode buf1)) (mode2 (symbol-value-in-buffer 'major-mode buf2))) - (cond ((not (eq star1p star2p)) (not star1p)) + (cond ((not (eq inv1p inv2p)) + (not inv1p)) + ((not (eq star1p star2p)) + (not star1p)) ((and star1p star2p (string-lessp nam1 nam2))) - ((string-lessp mode1 mode2) t) - ((string-lessp mode2 mode1) nil) - (t (string-lessp nam1 nam2))))) + ((string-lessp mode1 mode2) + t) + ((string-lessp mode2 mode1) + nil) + (t + (string-lessp nam1 nam2))))) ;; this version is too slow on some machines. (defun slow-format-buffers-menu-line (buffer) @@ -1544,4 +1557,4 @@ The menu is computed by combining `global-popup-menu' and `mode-popup-menu'." (provide 'x-menubar) (provide 'menubar-items) -;;; x-menubar.el ends here. +;;; menubar-items.el ends here. diff --git a/lisp/minibuf.el b/lisp/minibuf.el index 9f26bc5..af83e9c 100644 --- a/lisp/minibuf.el +++ b/lisp/minibuf.el @@ -77,10 +77,12 @@ t means to return a list of all possible completions of STRING. (defvar minibuffer-completion-confirm nil "Non-nil => demand confirmation of completion before exiting minibuffer.") -(defvar minibuffer-confirm-incomplete nil +(defcustom minibuffer-confirm-incomplete nil "If true, then in contexts where completing-read allows answers which are not valid completions, an extra RET must be typed to confirm the -response. This is helpful for catching typos, etc.") +response. This is helpful for catching typos, etc." + :type 'boolean + :group 'minibuffer) (defcustom completion-auto-help t "*Non-nil means automatically provide help for invalid completion input." @@ -1248,7 +1250,9 @@ With prefix argument N, search for Nth previous match. If N is negative, find the next or Nth next match." (interactive (let ((enable-recursive-minibuffers t) - (minibuffer-history-sexp-flag nil)) + (minibuffer-history-sexp-flag nil) + (minibuffer-max-depth (and minibuffer-max-depth + (1+ minibuffer-max-depth)))) (if (eq 't (symbol-value minibuffer-history-variable)) (error "History is not being recorded in this context")) (list (read-from-minibuffer "Previous element matching (regexp): " @@ -1296,7 +1300,9 @@ With prefix argument N, search for Nth next match. If N is negative, find the previous or Nth previous match." (interactive (let ((enable-recursive-minibuffers t) - (minibuffer-history-sexp-flag nil)) + (minibuffer-history-sexp-flag nil) + (minibuffer-max-depth (and minibuffer-max-depth + (1+ minibuffer-max-depth)))) (if (eq t (symbol-value minibuffer-history-variable)) (error "History is not being recorded in this context")) (list (read-from-minibuffer "Next element matching (regexp): " @@ -1646,7 +1652,7 @@ only existing buffer names are allowed." This will prompt with a dialog box if appropriate, according to `should-use-dialog-box-p'. Value is not expanded---you must call `expand-file-name' yourself. -Value is subject to interpreted by substitute-in-file-name however. +Value is subject to interpretation by `substitute-in-file-name' however. Default name to DEFAULT if user enters a null string. (If DEFAULT is omitted, the visited file name is used, except that if INITIAL-CONTENTS is specified, that combined with DIR is diff --git a/lisp/modeline.el b/lisp/modeline.el index ea16c56..778d2c9 100644 --- a/lisp/modeline.el +++ b/lisp/modeline.el @@ -19,7 +19,7 @@ ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with XEmacs; see the file COPYING. If not, write to the +;; along with XEmacs; see the file COPYING. If not, write to the ;; Free Software Foundation, 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. @@ -59,11 +59,36 @@ buffer list and clicking on the right half cycles backward." :type 'boolean :group 'modeline) +(defcustom modeline-scrolling-method nil + "*If non-nil, dragging the modeline with the mouse may also scroll its +text horizontally (vertical motion controls window resizing and horizontal +motion controls modeline scrolling). + +With a value of t, the modeline text is scrolled in the same direction as +the mouse motion. With a value of 'scrollbar, the modeline is considered as +a scrollbar for its own text, which then moves in the opposite direction." + :type '(choice (const :tag "none" nil) + (const :tag "text" t) + (const :tag "scrollbar" scrollbar)) + :set (lambda (sym val) + (set-default sym val) + (when (featurep 'x) + (cond ((eq val t) + (set-glyph-image modeline-pointer-glyph "hand2" 'global 'x)) + ((eq val 'scrollbar) + (set-glyph-image modeline-pointer-glyph "fleur" 'global 'x)) + (t + (set-glyph-image modeline-pointer-glyph "sb_v_double_arrow" + 'global 'x))))) + :group 'modeline) + (defun mouse-drag-modeline (event) "Resize a window by dragging its modeline. This command should be bound to a button-press event in modeline-map. Holding down a mouse button and moving the mouse up and down will -make the clicked-on window taller or shorter." +make the clicked-on window taller or shorter. + +See also the variable `modeline-scrolling-method'." (interactive "e") (or (button-press-event-p event) (error "%s must be invoked by a mouse-press" this-command)) @@ -79,9 +104,9 @@ make the clicked-on window taller or shorter." (start-event-frame (event-frame event)) (start-event-window (event-window event)) (start-nwindows (count-windows t)) -;; (hscroll-delta (face-width 'modeline)) -;; (start-hscroll (modeline-hscroll (event-window event))) -; (start-x-pixel (event-x-pixel event)) + (hscroll-delta (face-width 'modeline)) + (start-hscroll (modeline-hscroll (event-window event))) + (start-x-pixel (event-x-pixel event)) (last-timestamp 0) default-line-height modeline-height @@ -141,7 +166,9 @@ make the clicked-on window taller or shorter." ;; scroll) nore Y pos (modeline drag) have changed. (and modeline-click-swaps-buffers (= depress-line (event-y event)) -;; (= start-hscroll (modeline-hscroll start-event-window)) + (or (not modeline-scrolling-method) + (= start-hscroll + (modeline-hscroll start-event-window))) (modeline-swap-buffers event))) ((button-event-p event) (setq done t)) @@ -153,11 +180,14 @@ make the clicked-on window taller or shorter." drag-divider-event-lag) nil) (t -;; (set-modeline-hscroll start-event-window -;; (+ (/ (- (event-x-pixel event) -;; start-x-pixel) -;; hscroll-delta) -;; start-hscroll)) + (when modeline-scrolling-method + (let ((delta (/ (- (event-x-pixel event) start-x-pixel) + hscroll-delta))) + (set-modeline-hscroll start-event-window + (if (eq modeline-scrolling-method t) + (- start-hscroll delta) + (+ start-hscroll delta))) + )) (setq last-timestamp (event-timestamp event) y (event-y-pixel event) edges (window-pixel-edges start-event-window) @@ -263,7 +293,7 @@ the buffer of the window whose modeline was clicked upon.") (make-face 'modeline-mousable "Face for mousable portions of the modeline.") (set-face-parent 'modeline-mousable 'modeline nil '(default)) (when (featurep 'window-system) - (set-face-foreground 'modeline-mousable + (set-face-foreground 'modeline-mousable '(((default color x) . "firebrick") ((default color mswindows) . "firebrick")) 'global)) @@ -307,7 +337,7 @@ in the list takes precedence.") '(((default color x) . "green4") ((default color x) . "forestgreen") ((default color mswindows) . "green4") - ((default color mswindows) . "forestgreen")) + ((default color mswindows) . "forestgreen")) 'global)) (defvar modeline-mousable-minor-mode-extent (make-extent nil nil) @@ -391,7 +421,7 @@ Example: (add-minor-mode 'view-minor-mode \" View\" view-mode-map)" name))) (if (setq el (assq toggle minor-mode-alist)) (setcdr el (list hacked-name)) - (funcall add-elt + (funcall add-elt (list toggle hacked-name) 'minor-mode-alist)))) (when keymap @@ -508,7 +538,7 @@ parentheses on the modeline." "Face for the buffer ID string in the modeline.") (set-face-parent 'modeline-buffer-id 'modeline nil '(default)) (when (featurep 'window-system) - (set-face-foreground 'modeline-buffer-id + (set-face-foreground 'modeline-buffer-id '(((default color x) . "blue4") ((default color mswindows) . "blue4")) 'global)) @@ -521,7 +551,7 @@ parentheses on the modeline." (defvar modeline-buffer-id-extent (make-extent nil nil) "Extent covering the whole of the buffer-id string.") (set-extent-face modeline-buffer-id-extent 'modeline-buffer-id) - + (defvar modeline-buffer-id-left-extent (make-extent nil nil) "Extent covering the left half of the buffer-id string.") (set-extent-keymap modeline-buffer-id-left-extent diff --git a/lisp/mule/mule-cmds.el b/lisp/mule/mule-cmds.el index ea10c61..07261fd 100644 --- a/lisp/mule/mule-cmds.el +++ b/lisp/mule/mule-cmds.el @@ -168,11 +168,15 @@ This sets the following coding systems: ;;(setq default-keyboard-coding-system coding-system) (setq keyboard-coding-system coding-system) ;;(setq default-process-coding-system (cons coding-system coding-system)) + ;; Refer to coding-system-for-read and coding-system-for-write + ;; so that C-x RET c works. (add-hook 'comint-exec-hook `(lambda () (let ((proc (get-buffer-process (current-buffer)))) - (set-process-input-coding-system proc ',coding-system) - (set-process-output-coding-system proc ',coding-system))) + (set-process-input-coding-system + proc (or coding-system-for-read ',coding-system)) + (set-process-output-coding-system + proc (or coding-system-for-write ',coding-system)))) 'append) (setq file-name-coding-system coding-system)) diff --git a/lisp/mule/mule-misc.el b/lisp/mule/mule-misc.el index 9b4906e..2a411dd 100644 --- a/lisp/mule/mule-misc.el +++ b/lisp/mule/mule-misc.el @@ -163,8 +163,8 @@ If each element of LIST is not a string, it is converted to string (defalias 'sref 'aref) (defalias 'map-char-concat 'mapcar) (defun char-bytes (character) - "Return number of length a CHARACTER occupies in a string or buffer. -It returns only 1 in XEmacs. It is for compatibility with MULE 2.3." + "Return number of bytes a CHARACTER occupies in a string or buffer. +It always returns 1 in XEmacs. It is for compatibility with MULE 2.3." 1) (defalias 'char-length 'char-bytes) @@ -208,19 +208,6 @@ because its `find-charset-string' ignores ASCII charset." ; (cons charset dest) ; )))) -(defun char-octet (ch &optional n) - "Return the octet numbered N (should be 0 or 1) of char CH. -N defaults to 0 if omitted." - (let ((split (split-char ch))) - (setq n (or n 0)) - (cond ((eq n 0) - (nth 1 split)) - ((eq n 1) - (nth 2 split)) - (t (error "n must be 0 or 1"))))) -;; Made obsolete June 15, 1999. Delete ASAP. -(make-obsolete 'char-octet "Use split-char") - ;(defun split-char-or-char-int (char) ; "Return list of charset and one or two position-codes of CHAR. ;CHAR must be character or integer." diff --git a/lisp/process.el b/lisp/process.el index 0e3d478..db05e32 100644 --- a/lisp/process.el +++ b/lisp/process.el @@ -321,7 +321,7 @@ Ouput via `process-send-string' and input via buffer or filter (see `set-process-filter') are stream-oriented. That means UDP datagrams are not guaranteed to be sent and received in discrete packets. (But small datagrams around 500 bytes that are not truncated by `process-send-string' -are usually fine.) Note further that UDP protocol does not guard against +are usually fine.) Note further that UDP protocol does not guard against lost packets." (open-network-stream-internal name buffer host service protocol)) @@ -342,13 +342,11 @@ lost packets." start (1+ end))) (concat result (substring argument start)))))) -(defun exec-to-string (command) - "Execute COMMAND as an external process and return the output of that -process as a string" - ;; by "William G. Dubuque" +(defun shell-command-to-string (command) + "Execute shell command COMMAND and return its output as a string." (with-output-to-string (call-process shell-file-name nil t nil shell-command-switch command))) -(defalias 'shell-command-to-string 'exec-to-string) +(defalias 'exec-to-string 'shell-command-to-string) ;;; process.el ends here diff --git a/lisp/startup.el b/lisp/startup.el index 68ce03a..54d0902 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -30,7 +30,7 @@ ;; This file is dumped with XEmacs. -;; -batch, -t, and -nw are processed by main() in emacs.c and are +;; -batch, -t, and -nw are processed by main() in emacs.c and are ;; never seen by lisp code. ;; -version and -help are special-cased as well: they imply -batch, @@ -395,11 +395,11 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n") (setq emacs-roots (paths-find-emacs-roots invocation-directory invocation-name)) - + (if debug-paths (princ (format "emacs-roots:\n%S\n" emacs-roots) 'external-debugging-output)) - + (if (null emacs-roots) (startup-find-roots-warning) (startup-setup-paths emacs-roots @@ -418,7 +418,7 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n") (file-name-sans-extension autoload-file-name) (expand-file-name "utf-2000" lisp-directory)) nil t))) - + (if (not inhibit-autoloads) (progn (if (not inhibit-early-packages) @@ -500,7 +500,7 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n") ;; (and (not (equal string "")) string))))) ;; (and ctype ;; (string-match iso-8859-1-locale-regexp ctype))) - ;; (progn + ;; (progn ;; (standard-display-european t) ;; (require 'iso-syntax))) @@ -602,7 +602,7 @@ If this is nil, no message will be displayed.") ;;; Load init files. (load-init-file) - + (with-current-buffer (get-buffer "*scratch*") (erase-buffer) ;; (insert initial-scratch-message) @@ -627,7 +627,7 @@ If this is nil, no message will be displayed.") ;; If -batch, terminate after processing the command options. (when (noninteractive) (kill-emacs t)))) -(defun load-terminal-library () +(defun load-terminal-library () (when term-file-prefix (let ((term (getenv "TERM")) hyphend) @@ -790,7 +790,7 @@ a new format, when variables have changed, etc." (setq end-of-options t)) (t (setq file-p t))) - + (when file-p (setq file-p nil) (incf file-count) @@ -828,7 +828,7 @@ a new format, when variables have changed, etc." (setq e (read-key-sequence (let ((p (keymap-prompt map t))) (cond ((symbolp map) - (if p + (if p (format "%s %s " map p) (format "%s " map))) (p) @@ -907,7 +907,7 @@ a new format, when variables have changed, etc." (defun startup-center-spaces (glyph) ;; Return the number of spaces to insert in order to center ;; the given glyph (may be a string or a pixmap). - ;; Assume spaces are as wide as avg-pixwidth. + ;; Assume spaces are as wide as avg-pixwidth. ;; Won't be quite right for proportional fonts, but it's the best we can do. ;; Maybe the new redisplay will export something a glyph-width function. ;;; #### Yes, there is a glyph-width function but it isn't quite what @@ -918,7 +918,7 @@ a new format, when variables have changed, etc." ;; This function is used in about.el too. (let* ((avg-pixwidth (round (/ (frame-pixel-width) (frame-width)))) (fill-area-width (* avg-pixwidth (- fill-column left-margin))) - (glyph-pixwidth (cond ((stringp glyph) + (glyph-pixwidth (cond ((stringp glyph) (* avg-pixwidth (length glyph))) ;; #### the pixmap option should be removed ;;((pixmapp glyph) @@ -938,12 +938,12 @@ a new format, when variables have changed, etc." `( "\ Sun provides support for the WorkShop/XEmacs integration package only. All other XEmacs packages are provided to you \"AS IS\".\n" - ,@(let ((lang (or (getenv "LC_ALL") (getenv "LC_MESSAGES") + ,@(let ((lang (or (getenv "LC_ALL") (getenv "LC_MESSAGES") (getenv "LANG")))) (if (and (not (featurep 'mule)) ;; Already got mule? ;; No Mule support on tty's yet - (not (eq 'tty (console-type))) + (not (eq 'tty (console-type))) lang ;; Non-English locale? (not (string= lang "C")) (not (string-match "^en" lang)) @@ -955,7 +955,7 @@ To handle other languages you need to run a Multi-lingual (`Mule') version of XEmacs, by either running the command `xemacs-mule', or by using the X resource `ESERVE*defaultXEmacsPath: xemacs-mule' when starting XEmacs from Sun WorkShop. \n"))))) - ((key describe-no-warranty) + ((key describe-no-warranty) ": "(face (red bold) "XEmacs comes with ABSOLUTELY NO WARRANTY\n")) ((key describe-copying) ": conditions to give out copies of XEmacs\n") @@ -964,16 +964,17 @@ XEmacs, by either running the command `xemacs-mule', or by using the X resource "\n--\n" (face italic "\ Copyright (C) 1985-1999 Free Software Foundation, Inc. -Copyright (C) 1995-1999 Electrotechnical Laboratory, JAPAN. Copyright (C) 1990-1994 Lucid, Inc. Copyright (C) 1993-1997 Sun Microsystems, Inc. All Rights Reserved. Copyright (C) 1994-1996 Board of Trustees, University of Illinois -Copyright (C) 1995-1996 Ben Wing\n")) +Copyright (C) 1995-1996 Ben Wing +Copyright (C) 1996-2000 MORIOKA Tomohiko +")) ((face (blue bold underline) "\nInformation, on-line help:\n\n") "XEmacs comes with plenty of documentation...\n\n" ,@(if (string-match "beta" emacs-version) - `((key describe-beta) + `((key describe-beta) ": " (face (red bold) "This is an Experimental version of XEmacs.\n")) `( "\n")) @@ -1002,7 +1003,7 @@ Copyright (C) 1995-1996 Ben Wing\n")) ; "If non-nil, function called to provide the startup logo. ;This function should return an initialized glyph if it is used.") -;; This will hopefully go away when gettext is functionnal. +;; This will hopefully go away when gettext is functional. (defconst splash-frame-static-body `(,(emacs-version) "\n\n" (face italic "`C-' means the control key,`M-' means the meta key\n\n"))) @@ -1134,7 +1135,7 @@ It's idempotent, so call this as often as you like!" (paths-construct-info-path roots early-packages late-packages last-packages)) - + (if debug-paths (princ (format "Info-directory-list:\n%S\n" Info-directory-list) 'external-debugging-output)) @@ -1143,7 +1144,7 @@ It's idempotent, so call this as often as you like!" (progn (setq lock-directory (paths-find-lock-directory roots)) (setq superlock-file (paths-find-superlock-file lock-directory)) - + (if debug-paths (progn (princ (format "lock-directory:\n%S\n" lock-directory) @@ -1164,7 +1165,7 @@ It's idempotent, so call this as often as you like!" (if debug-paths (princ (format "exec-path:\n%S\n" exec-path) 'external-debugging-output)) - + (setq doc-directory (paths-find-doc-directory roots)) (if debug-paths diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog index 655f241..8e6ab44 100644 --- a/lwlib/ChangeLog +++ b/lwlib/ChangeLog @@ -1,3 +1,27 @@ +2000-01-18 Martin Buchholz + + * XEmacs 21.2.27 is released. + +2000-01-15 Andy Piper + + * lwlib-Xlw.c (lw_update_one_widget): make sure global + properties gets set. + +2000-01-07 Martin Buchholz + + * config.h.in (ATHENA_INCLUDE): CPP trickery to make old cpps happy. + This extends support for gcc 2.6 (e.g. on BSD/OS 2.0) + + * lwlib.c: Fix up memset calls. + + * lwlib-Xm.c (xm_update_text): Warning suppression. + (xm_update_text_field): Warning suppression. + +2000-01-03 Martin Buchholz + + * lwlib-Xaw.c (xaw_update_one_widget): Emergency fix for this crash: + (yes-or-no-p-dialog-box "Yes or No") + 1999-12-31 Martin Buchholz * XEmacs 21.2.26 is released. diff --git a/lwlib/config.h.in b/lwlib/config.h.in index d94cb09..de51ba5 100644 --- a/lwlib/config.h.in +++ b/lwlib/config.h.in @@ -32,9 +32,12 @@ Boston, MA 02111-1307, USA. */ /* The path to the Athena widgets - the usual value is `X11/Xaw' */ #undef ATHENA_H_PATH -/* For use in #include statements. This extra level of macro indirection - is necessary because you can't use macros directly within <> or "" */ -#define ATHENA_INCLUDE(header_file) +/* For use in #include statements. + You can't use macros directly within the <> of a #include statement. + The multiply nested macros are necessary to make old gcc's happy. */ +#define INCLUDE_GLUE_2(dirname,basename) <##dirname##/##basename##> +#define INCLUDE_GLUE_1(dirname,basename) INCLUDE_GLUE_2(dirname,basename) +#define ATHENA_INCLUDE(header_file) INCLUDE_GLUE_1(ATHENA_H_PATH,header_file) #endif /* _LWLIB_CONFIG_H_ */ diff --git a/lwlib/lwlib-Xaw.c b/lwlib/lwlib-Xaw.c index 77aeb48..5329976 100644 --- a/lwlib/lwlib-Xaw.c +++ b/lwlib/lwlib-Xaw.c @@ -146,7 +146,7 @@ xaw_update_one_widget (widget_instance *instance, Widget widget, } #endif /* LWLIB_DIALOGS_ATHENA */ #ifdef LWLIB_WIDGETS_ATHENA - else if (XtIsSubclass (widget, labelWidgetClass)) + else if (XtClass (widget) == labelWidgetClass) { Arg al [1]; XtSetArg (al [0], XtNlabel, val->value); diff --git a/lwlib/lwlib-Xlw.c b/lwlib/lwlib-Xlw.c index 8063c7c..e4e91d6 100644 --- a/lwlib/lwlib-Xlw.c +++ b/lwlib/lwlib-Xlw.c @@ -536,6 +536,9 @@ xlw_update_one_widget (widget_instance* instance, Widget widget, widget_value* val, Boolean deep_p) { WidgetClass class = XtClass (widget); + /* Update up global arg values. */ + if (val->args && val->args->nargs) + XtSetValues (widget, val->args->args, val->args->nargs); if (0) ; diff --git a/lwlib/lwlib-Xm.c b/lwlib/lwlib-Xm.c index 85db133..99db011 100644 --- a/lwlib/lwlib-Xm.c +++ b/lwlib/lwlib-Xm.c @@ -680,7 +680,7 @@ xm_update_menu (widget_instance* instance, Widget widget, widget_value* val, static void xm_update_text (widget_instance* instance, Widget widget, widget_value* val) { - XmTextSetString (widget, val->value ? val->value : ""); + XmTextSetString (widget, val->value ? val->value : (char *) ""); XtRemoveAllCallbacks (widget, XmNactivateCallback); XtAddCallback (widget, XmNactivateCallback, xm_generic_callback, instance); XtRemoveAllCallbacks (widget, XmNvalueChangedCallback); @@ -692,7 +692,7 @@ static void xm_update_text_field (widget_instance* instance, Widget widget, widget_value* val) { - XmTextFieldSetString (widget, val->value ? val->value : ""); + XmTextFieldSetString (widget, val->value ? val->value : (char *) ""); XtRemoveAllCallbacks (widget, XmNactivateCallback); XtAddCallback (widget, XmNactivateCallback, xm_generic_callback, instance); XtRemoveAllCallbacks (widget, XmNvalueChangedCallback); diff --git a/lwlib/lwlib.c b/lwlib/lwlib.c index f55f092..1ecef08 100644 --- a/lwlib/lwlib.c +++ b/lwlib/lwlib.c @@ -111,7 +111,7 @@ malloc_widget_value (void) } if (wv) { - memset (wv, 0, sizeof (widget_value)); + memset (wv, '\0', sizeof (widget_value)); } return wv; } @@ -188,7 +188,7 @@ copy_scrollbar_values (widget_value *val, widget_value *copy) if (val->scrollbar_data) *copy->scrollbar_data = *val->scrollbar_data; else - memset (copy->scrollbar_data, 0, sizeof (scrollbar_values)); + memset (copy->scrollbar_data, '\0', sizeof (scrollbar_values)); } /* @@ -358,7 +358,7 @@ free_widget_info (widget_info *info) safe_free_str (info->type); safe_free_str (info->name); free_widget_value_tree (info->val); - memset ((void*)info, 0xDEADBEEF, sizeof (widget_info)); + memset (info, '\0', sizeof (widget_info)); free (info); } @@ -393,7 +393,7 @@ allocate_widget_instance (widget_info *info, Widget parent, Boolean pop_up_p) static void free_widget_instance (widget_instance *instance) { - memset ((void *) instance, 0xDEADBEEF, sizeof (widget_instance)); + memset (instance, '\0', sizeof (widget_instance)); free (instance); } @@ -1368,11 +1368,11 @@ void lw_add_widget_value_arg (widget_value* wv, String name, XtArgVal value) if (!wv->args) { wv->args = (widget_args *) malloc (sizeof (widget_args)); - memset (wv->args, 0, sizeof (widget_args)); + memset (wv->args, '\0', sizeof (widget_args)); wv->args->ref_count = 1; wv->args->nargs = 0; wv->args->args = (ArgList) malloc (sizeof (Arg) * 10); - memset (wv->args->args, 0, sizeof (Arg) * 10); + memset (wv->args->args, '\0', sizeof (Arg) * 10); } if (wv->args->nargs > 10) diff --git a/man/ChangeLog b/man/ChangeLog index a163690..cefb9e8 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,78 @@ +2000-01-18 Martin Buchholz + + * XEmacs 21.2.27 is released. + +2000-01-17 Yoshiki Hayashi + + * xemacs/regs.texi: Synch with FSF 20.5. + +2000-01-14 Yoshiki Hayashi + + * info.texi: Change cross reference from emacs to xemacs. + +2000-01-14 Yoshiki Hayashi + + * xemacs/mini.texi: Synch with FSF 20.5. Update. + +2000-01-16 Martin Buchholz + + * xemacs-faq.texi (Q2.1.15): Fix up @table formatting. + +2000-01-14 Martin Buchholz + + * xemacs-faq.texi (Q2.1.15): Update dbx/gdb debugging info. + +2000-01-14 Sandra Wambold + + * xemacs-faq.texi: removed out-of-date XEmacs 19 questions. + +2000-01-14 Sandra Wambold + + * xemacs-faq.texi: Updated Macintosh information, + updated OS/2 info, changed turn-on-pending-delete answer. + +2000-01-08 Martin Buchholz + + * xemacs-faq.texi (Q2.1.15): Make debugging info current. + +2000-01-08 Hrvoje Niksic + + * lispref/control.texi (Signaling Errors): Document that `signal' + is continuable. + (Signaling Errors): Document `cerror', `signal-error', and + `check-argument-type'. + (Handling Errors): Mention `debug-on-signal'. + (Error Symbols): Document `define-error'. + (Processing of Errors): Document `display-error' and + `error-message-string'. + +2000-01-05 Yoshiki Hayashi + + * internals/internals.texi: Remove latin-1 char. + +2000-01-05 Didier Verna + + * xemacs/custom.texi (Key bindings using strings): add missing + whitespace. + + * xemacs/xemacs.texi (Top): + * new-users-guide/new-users-guide.texi (Top): add missing `@top' + node. + +1999-12-24 Yoshiki Hayashi + + * lispref/minibuf.texi (Reading a Password): New section. + +1999-12-21 Yoshiki Hayashi + + * lispref/minibuf.texi: Remove documentation about + minibuffer-local-ns-map, read-no-blanks-input. + +1999-12-21 Yoshiki Hayashi + + * lispref/minibuf.texi: Partial Synch with FSF manual. + Add description about DEFAULT argument of reading functions. + 1999-12-31 Martin Buchholz * XEmacs 21.2.26 is released. diff --git a/man/info.texi b/man/info.texi index e9eab51..bd827ee 100644 --- a/man/info.texi +++ b/man/info.texi @@ -3,7 +3,7 @@ @setfilename ../info/info.info @settitle Info @comment %**end of header -@comment $Id: info.texi,v 1.4.2.3 1999/12/05 19:02:24 martinb Exp $ +@comment $Id: info.texi,v 1.4.2.4 2000/01/18 07:27:42 yoshiki Exp $ @dircategory Texinfo documentation system @direntry @@ -855,9 +855,10 @@ node of the file with Emacs Info mode. 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 @file{~/.emacs} init file. @xref{Examining, Examining and Setting -Variables, Examining and Setting Variables, emacs, The GNU Emacs -Manual}. +in your @file{~/.emacs} init file. @xref{Examining, Examining and +Setting Variables, Examining and Setting Variables, xemacs, XEmacs +User's Manual}. + @vtable @code @item Info-enable-edit diff --git a/man/internals/internals.texi b/man/internals/internals.texi index f738f74..81b32d4 100644 --- a/man/internals/internals.texi +++ b/man/internals/internals.texi @@ -2650,8 +2650,8 @@ Unfortunately, Emacs Lisp is slow, and is going to stay slow. Function calls in elisp are especially expensive. Iterating over a long list is going to be 30 times faster implemented in C than in Elisp. -To get started debugging XEmacs, take a look at the @file{gdbinit} and -@file{dbxrc} files in the @file{src} directory. +To get started debugging XEmacs, take a look at the @file{.gdbinit} and +@file{.dbxrc} files in the @file{src} directory. @xref{Q2.1.15 - How to Debug an XEmacs problem with a debugger,,, xemacs-faq, XEmacs FAQ}. @@ -4993,7 +4993,7 @@ The first thing that is checked while marking an object is whether the object is a real Lisp object @code{Lisp_Type_Record} or just an integer or a character. Integers and characters are the only two types that are stored directly - without another level of indirection, and therefore they -don´t have to be marked and collected. +don't have to be marked and collected. @xref{How Lisp Objects Are Represented in C}. The second case is the one we have to handle. It is the one when we are @@ -5033,7 +5033,7 @@ bulkier objects are allocated and handled using that scheme of @code{lcrecords}. Each object is @code{malloc}ed separately instead of placing it in one of the contiguous frob blocks. All types that are currently stored -using @code{lcrecords}´s @code{alloc_lcrecord} and +using @code{lcrecords}'s @code{alloc_lcrecord} and @code{make_lcrecord_list} are the types: vectors, buffers, char-table, char-table-entry, console, weak-list, database, device, ldap, hash-table, command-builder, extent-auxiliary, extent-info, face, diff --git a/man/lispref/control.texi b/man/lispref/control.texi index 5ea470f..4588d48 100644 --- a/man/lispref/control.texi +++ b/man/lispref/control.texi @@ -662,7 +662,7 @@ instead. @xref{Catch and Throw}. which you call for other purposes, such as if you try to take the @sc{car} of an integer or move forward a character at the end of the buffer; you can also signal errors explicitly with the functions -@code{error} and @code{signal}. +@code{error}, @code{signal}, and others. Quitting, which happens when the user types @kbd{C-g}, is not considered an error, but it is handled almost like an error. @@ -673,6 +673,11 @@ This function signals an error with an error message constructed by applying @code{format} (@pxref{String Conversion}) to @var{format-string} and @var{args}. +This error is not continuable: you cannot continue execution after the +error using the debugger @kbd{r} or @kbd{c} commands. If you wish the +user to be able to continue execution, use @code{cerror} or +@code{signal} instead. + These examples show typical uses of @code{error}: @example @@ -691,7 +696,8 @@ These examples show typical uses of @code{error}: @code{error} works by calling @code{signal} with two arguments: the error symbol @code{error}, and a list containing the string returned by -@code{format}. +@code{format}. This is repeated in an endless loop, to ensure that +@code{error} never returns. If you want to use your own string as an error message verbatim, don't just write @code{(error @var{string})}. If @var{string} contains @@ -699,10 +705,16 @@ just write @code{(error @var{string})}. If @var{string} contains results. Instead, use @code{(error "%s" @var{string})}. @end defun +@defun cerror format-string &rest args +This function behaves like @code{error}, except that the error it +signals is continuable. That means that debugger commands @kbd{c} and +@kbd{r} can resume execution. +@end defun + @defun signal error-symbol data -This function signals an error named by @var{error-symbol}. The -argument @var{data} is a list of additional Lisp objects relevant to the -circumstances of the error. +This function signals a continuable error named by @var{error-symbol}. +The argument @var{data} is a list of additional Lisp objects relevant to +the circumstances of the error. The argument @var{error-symbol} must be an @dfn{error symbol}---a symbol bearing a property @code{error-conditions} whose value is a list of @@ -710,9 +722,9 @@ condition names. This is how XEmacs Lisp classifies different sorts of errors. The number and significance of the objects in @var{data} depends on -@var{error-symbol}. For example, with a @code{wrong-type-arg} error, -there are two objects in the list: a predicate that describes the type -that was expected, and the object that failed to fit that type. +@var{error-symbol}. For example, with a @code{wrong-type-argument} +error, there are two objects in the list: a predicate that describes the +type that was expected, and the object that failed to fit that type. @xref{Error Symbols}, for a description of error symbols. Both @var{error-symbol} and @var{data} are available to any error @@ -721,8 +733,10 @@ variable to a list of the form @code{(@var{error-symbol} .@: @var{data})} (@pxref{Handling Errors}). If the error is not handled, these two values are used in printing the error message. -The function @code{signal} never returns (though in older Emacs versions -it could sometimes return). +The function @code{signal} can return, if the debugger is invoked and +the user invokes the ``return from signal'' option. If you want the +error not to be continuable, use @code{signal-error} instead. Note that +in FSF Emacs @code{signal} never returns. @smallexample @group @@ -731,17 +745,42 @@ it could sometimes return). @end group @group -(signal 'no-such-error '("My unknown error condition.")) - @error{} peculiar error: "My unknown error condition." +(signal 'no-such-error '("My unknown error condition")) + @error{} Peculiar error (no-such-error "My unknown error condition") @end group @end smallexample @end defun -@cindex CL note---no continuable errors -@quotation -@b{Common Lisp note:} XEmacs Lisp has nothing like the Common Lisp -concept of continuable errors. -@end quotation +@defun signal-error error-symbol data +This function behaves like @code{signal}, except that the error it +signals is not continuable. +@end defun + +@defmac check-argument-type predicate argument +This macro checks that @var{argument} satisfies @var{predicate}. If +that is not the case, it signals a continuable +@code{wrong-type-argument} error until the returned value satisfies +@var{predicate}, and assigns the returned value to @var{argument}. In +other words, execution of the program will not continue until +@var{predicate} is met. + +@var{argument} is not evaluated, and should be a symbol. +@var{predicate} is evaluated, and should name a function. + +As shown in the following example, @code{check-argument-type} is useful +in low-level code that attempts to ensure the sanity of its data before +proceeding. + +@example +@group +(defun cache-object-internal (object wlist) + ;; @r{Before doing anything, make sure that @var{wlist} is indeed} + ;; @r{a weak list, which is what we expect.} + (check-argument-type 'weak-list-p wlist) + @dots{}) +@end group +@end example +@end defmac @node Processing of Errors @subsubsection How XEmacs Processes Errors @@ -761,6 +800,27 @@ command loop has an implicit handler for all kinds of errors. The command loop's handler uses the error symbol and associated data to print an error message. +Errors in command loop are processed using the @code{command-error} +function, which takes care of some necessary cleanup, and prints a +formatted error message to the echo area. The functions that do the +formatting are explained below. + +@defun display-error error-object stream +This function displays @var{error-object} on @var{stream}. +@var{error-object} is a cons of error type, a symbol, and error +arguments, a list. If the error type symbol of one of its error +condition superclasses has an @code{display-error} property, that +function is invoked for printing the actual error message. Otherwise, +the error is printed as @samp{Error: arg1, arg2, ...}. +@end defun + +@defun error-message-string error-object +This function converts @var{error-object} to an error message string, +and returns it. The message is equivalent to the one that would be +printed by @code{display-error}, except that it is conveniently returned +in string form. +@end defun + @cindex @code{debug-on-error} use An error that has no explicit handler may call the Lisp debugger. The debugger is enabled if the variable @code{debug-on-error} (@pxref{Error @@ -834,6 +894,13 @@ predictable, such as failure to open a file in a call to totally unpredictable, such as when the program evaluates an expression read from the user. +@cindex @code{debug-on-signal} use + Even when an error is handled, the debugger may still be called if the +variable @code{debug-on-signal} (@pxref{Error Debugging}) is +non-@code{nil}. Note that this may yield unpredictable results with +code that traps expected errors as normal part of its operation. Do not +set @code{debug-on-signal} unless you know what you are doing. + Error signaling and handling have some resemblance to @code{throw} and @code{catch}, but they are entirely separate facilities. An error cannot be caught by a @code{catch}, and a @code{throw} cannot be handled @@ -917,7 +984,9 @@ message and returns a very large number. @end smallexample @noindent -The handler specifies condition name @code{arith-error} so that it will handle only division-by-zero errors. Other kinds of errors will not be handled, at least not by this @code{condition-case}. Thus, +The handler specifies condition name @code{arith-error} so that it will +handle only division-by-zero errors. Other kinds of errors will not be +handled, at least not by this @code{condition-case}. Thus, @smallexample @group @@ -972,43 +1041,49 @@ one or more condition names: @code{error}, the error symbol if that is distinct from @code{error}, and perhaps some intermediate classifications. - In order for a symbol to be an error symbol, it must have an -@code{error-conditions} property which gives a list of condition names. -This list defines the conditions that this kind of error belongs to. -(The error symbol itself, and the symbol @code{error}, should always be -members of this list.) Thus, the hierarchy of condition names is -defined by the @code{error-conditions} properties of the error symbols. - - In addition to the @code{error-conditions} list, the error symbol -should have an @code{error-message} property whose value is a string to -be printed when that error is signaled but not handled. If the -@code{error-message} property exists, but is not a string, the error -message @samp{peculiar error} is used. -@cindex peculiar error + In other words, each error condition @dfn{inherits} from another error +condition, with @code{error} sitting at the top of the inheritance +hierarchy. + +@defun define-error error-symbol error-message &optional inherits-from + This function defines a new error, denoted by @var{error-symbol}. +@var{error-message} is an informative message explaining the error, and +will be printed out when an unhandled error occurs. @var{error-symbol} +is a sub-error of @var{inherits-from} (which defaults to @code{error}). + + @code{define-error} internally works by putting on @var{error-symbol} +an @code{error-message} property whose value is @var{error-message}, and +an @code{error-conditions} property that is a list of @var{error-symbol} +followed by each of its super-errors, up to and including @code{error}. +You will sometimes see code that sets this up directly rather than +calling @code{define-error}, but you should @emph{not} do this yourself, +unless you wish to maintain compatibility with FSF Emacs, which does not +provide @code{define-error}. +@end defun - Here is how we define a new error symbol, @code{new-error}: + Here is how we define a new error symbol, @code{new-error}, that +belongs to a range of errors called @code{my-own-errors}: @example @group -(put 'new-error - 'error-conditions - '(error my-own-errors new-error)) -@result{} (error my-own-errors new-error) -@end group -@group -(put 'new-error 'error-message "A new error") -@result{} "A new error" +(define-error 'my-own-errors "A whole range of errors" 'error) +(define-error 'new-error "A new error" 'my-own-errors) @end group @end example @noindent -This error has three condition names: @code{new-error}, the narrowest -classification; @code{my-own-errors}, which we imagine is a wider -classification; and @code{error}, which is the widest of all. +@code{new-error} has three condition names: @code{new-error}, the +narrowest classification; @code{my-own-errors}, which we imagine is a +wider classification; and @code{error}, which is the widest of all. + + Note that it is not legal to try to define an error unless its +super-error is also defined. For instance, attempting to define +@code{new-error} before @code{my-own-errors} are defined will signal an +error. The error string should start with a capital letter but it should not end with a period. This is for consistency with the rest of Emacs. - + Naturally, XEmacs will never signal @code{new-error} on its own; only an explicit call to @code{signal} (@pxref{Signaling Errors}) in your code can do this: @@ -1044,6 +1119,8 @@ make it possible to categorize errors at various levels of generality when you write an error handler. Using error symbols alone would eliminate all but the narrowest level of classification. + + @xref{Standard Errors}, for a list of all the standard error symbols and their conditions. diff --git a/man/lispref/debugging.texi b/man/lispref/debugging.texi index 72dd9eb..698d0ed 100644 --- a/man/lispref/debugging.texi +++ b/man/lispref/debugging.texi @@ -95,6 +95,12 @@ happen in process filter functions and sentinels. Therefore, these errors also can invoke the debugger. @xref{Processes}. @end defopt +@defopt debug-on-signal +This variable is similar to @code{debug-on-error} but breaks +whenever an error is signalled, regardless of whether it would be +handled. +@end defopt + @defopt debug-ignored-errors This variable specifies certain kinds of errors that should not enter the debugger. Its value is a list of error condition symbols and/or @@ -124,12 +130,6 @@ this: '(lambda () (setq debug-on-error t))) @end example -@defopt debug-on-signal -This variable is similar to @code{debug-on-error} but breaks -whenever an error is signalled, regardless of whether it would be -handled. -@end defopt - @node Infinite Loops @subsection Debugging Infinite Loops @cindex infinite loops diff --git a/man/new-users-guide/new-users-guide.texi b/man/new-users-guide/new-users-guide.texi index 3bed4da..2826aef 100644 --- a/man/new-users-guide/new-users-guide.texi +++ b/man/new-users-guide/new-users-guide.texi @@ -60,9 +60,8 @@ are preserved on all copies. @page @ifinfo @node Top, Intro, (dir), (dir) +@top The Emacs Editor -The Emacs Editor -**************** Emacs is the extensible, customizable, self-documenting real-time display editor. This Info file will help you get started on using diff --git a/man/xemacs-faq.texi b/man/xemacs-faq.texi index 65ef9d5..96e935b 100644 --- a/man/xemacs-faq.texi +++ b/man/xemacs-faq.texi @@ -7,7 +7,7 @@ @finalout @titlepage @title XEmacs FAQ -@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 1999/12/23 01:50:47 $ +@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2000/01/16 13:41:45 $ @sp 1 @author Tony Rossini @author Ben Wing @@ -139,7 +139,6 @@ Getting Started: * Q1.4.4:: May I see an example of a useful XEmacs Lisp function? * Q1.4.5:: And how do I bind it to a key? * Q1.4.6:: What's the difference between a macro and a function? -* Q1.4.7:: Why options saved with 19.13 don't work with 19.14 or later? Installation and Trouble Shooting @@ -155,8 +154,6 @@ Installation and Trouble Shooting * Q2.0.10:: After I run configure I find a coredump, is something wrong? * Q2.0.11:: XEmacs can't resolve host names. * Q2.0.12:: Why can't I strip XEmacs? -* Q2.0.13:: Can't link XEmacs on Solaris with Gcc. -* Q2.0.14:: Make on HP/UX 9 fails after linking temacs Trouble Shooting: * Q2.1.1:: XEmacs just crashed on me! @@ -176,10 +173,10 @@ Trouble Shooting: * Q2.1.15:: How to debug an XEmacs problem with a debugger. * Q2.1.16:: XEmacs crashes in @code{strcat} on HP/UX 10. * Q2.1.17:: @samp{Marker does not point anywhere}. -* Q2.1.18:: 19.14 hangs on HP/UX 10.10. +* Q2.1.18:: [This question intentionally left blank] * Q2.1.19:: XEmacs does not follow the local timezone. * Q2.1.20:: @samp{Symbol's function definition is void: hkey-help-show.} -* Q2.1.21:: Every so often the XEmacs frame freezes. +* Q2.1.21:: [This question intentionally left blank] * Q2.1.22:: XEmacs seems to take a really long time to do some things. * Q2.1.23:: Movemail on Linux does not work for XEmacs 19.15 and later. * Q2.1.24:: XEmacs won't start without network. (NEW) @@ -199,8 +196,8 @@ Customization and Options X Window System & Resources: * Q3.1.1:: Where is a list of X resources? * Q3.1.2:: How can I detect a color display? -* Q3.1.3:: @code{(set-screen-width)} worked in 19.6, but not in 19.13? -* Q3.1.4:: Specifying @code{Emacs*EmacsScreen.geometry} in @file{.emacs} does not work in 19.15? +* Q3.1.3:: [This question intentionally left blank] +* Q3.1.4:: [This question intentionally left blank] * Q3.1.5:: How can I get the icon to just say @samp{XEmacs}? * Q3.1.6:: How can I have the window title area display the full path? * Q3.1.7:: @samp{xemacs -name junk} doesn't work? @@ -319,7 +316,7 @@ Infodock: Other Unbundled Packages: * Q4.7.1:: What is AUC TeX? Where do you get it? * Q4.7.2:: Are there any Emacs Lisp Spreadsheets? -* Q4.7.3:: Byte compiling AUC TeX on XEmacs 19.14 +* Q4.7.3:: [This question intentionally left blank] * Q4.7.4:: Problems installing AUC TeX * Q4.7.5:: Is there a reason for an Emacs package not to be included in XEmacs? * Q4.7.6:: Is there a MatLab mode? @@ -336,14 +333,14 @@ The Miscellaneous Stuff * Q5.0.8:: Why does edt emulation not work? * Q5.0.9:: How can I emulate VI and use it as my default mode? * Q5.0.10:: [This question intentionally left blank] -* Q5.0.11:: Filladapt doesn't work in 19.15? +* Q5.0.11:: How do I turn on filladapt for all buffers? * Q5.0.12:: How do I disable gnuserv from opening a new frame? * Q5.0.13:: How do I start gnuserv so that each subsequent XEmacs is a client? * Q5.0.14:: Strange things are happening in Shell Mode. * Q5.0.15:: Where do I get the latest CC Mode? * Q5.0.16:: I find auto-show-mode disconcerting. How do I turn it off? * Q5.0.17:: How can I get two instances of info? -* Q5.0.18:: I upgraded to XEmacs 19.14 and gnuserv stopped working +* Q5.0.18:: [This question intentionally left blank] * Q5.0.19:: Is there something better than LaTeX mode? * Q5.0.20:: Is there a way to start a new XEmacs if there's no gnuserv running, and otherwise use gnuclient? @@ -487,7 +484,6 @@ Getting Started: * Q1.4.4:: May I see an example of a useful XEmacs Lisp function? * Q1.4.5:: And how do I bind it to a key? * Q1.4.6:: What's the difference between a macro and a function? -* Q1.4.7:: Why options saved with 19.13 don't work with 19.14 or later? @end menu @node Q1.0.1, Q1.0.2, Introduction, Introduction @@ -660,30 +656,30 @@ Yes, @xref{MS Windows}. @comment (NT and 95). The current betas require having an X server to run @comment XEmacs; however, a native NT/95 port is in alpha, thanks to @comment @email{jhar@@tardis.ed.ac.uk, Jonathan Harris}. -@comment +@comment @comment Although some features are still unimplemented, XEmacs 21.0 will support @comment MS-Windows. -@comment +@comment @comment The NT development is now coordinated by a mailing list at @comment @email{xemacs-nt@@xemacs.org}. -@comment +@comment @comment If you are willing to contribute or want to follow the progress, mail to @comment @iftex @comment @* @comment @end iftex @comment @email{xemacs-nt-request@@xemacs.org} to subscribe. -@comment +@comment @comment Furthermore, Altrasoft is seeking corporate and government sponsors to @comment help fund a fully native port of XEmacs to Windows 95 and NT using @comment full-time, senior-level staff working under a professionally managed @comment project structure. See @uref{http://www.altrasoft.com/, the Altrasoft @comment web site} for more details @comment or contact Altrasoft directly at 1-888-ALTSOFT. -@comment -@comment +@comment +@comment @comment The closest existing port is @dfn{Win-Emacs}, which is based on Lucid @comment Emacs 19.6. Available from @uref{http://www.pearlsoft.com/}. -@comment +@comment @comment There's a port of GNU Emacs (not XEmacs) at @comment @example @comment @uref{http://www.cs.washington.edu/homes/voelker/ntemacs.html}. @@ -693,12 +689,17 @@ Yes, @xref{MS Windows}. @unnumberedsubsec Q1.0.11: Is there a port of XEmacs to the Macintosh? @c changed -There has been a port to the MachTen environment of XEmacs 19.13, but no -patches have been submitted to the maintainers to get this in the -mainstream distribution. +@c There has been a port to the MachTen environment of XEmacs 19.13, but no +@c patches have been submitted to the maintainers to get this in the +@c mainstream distribution. +@c +@c For the MacOS, there is a port of +@c @uref{ftp://ftp.cs.cornell.edu/pub/parmet/, Emacs 18.59}. -For the MacOS, there is a port of -@uref{ftp://ftp.cs.cornell.edu/pub/parmet/, Emacs 18.59}. +Yes, there is a port of XEmacs 19.14, tested on MacOS 7.6.1 and MacOS +8.5.1 by @uref{pjarvis@@ispchannel.com,Pitts Jarvis}. It's available +at @uref{http://my.ispchannel.com/~pjarvis/xemacs.html, +http://my.ispchannel.com/~pjarvis/xemacs.html}. @node Q1.0.12, Q1.0.13, Q1.0.11, Introduction @unnumberedsubsec Q1.0.12: Is there a port of XEmacs to NextStep? @@ -710,12 +711,12 @@ XEmacs port, but never went any farther. @node Q1.0.13, Q1.0.14, Q1.0.12, Introduction @unnumberedsubsec Q1.0.13: Is there a port of XEmacs to OS/2? -No, and there is no news of anyone working on it. +No, but Alexander Nikolaev is working on it. @node Q1.0.14, Q1.1.1, Q1.0.13, Introduction @unnumberedsubsec Q1.0.14: Where can I obtain a printed copy of the XEmacs users manual? -Pre-printed manuals are not available. If you are familiar with +Pre-printed manuals are not available. If you are familiar with TeX, you can generate your own manual from the XEmacs sources. HTML and Postscript versions of XEmacs manuals may be available from the @@ -871,14 +872,20 @@ crash some time ago. @itemize @bullet @item @email{binge@@aloft.att.com, Curtis.N.Bingham} +@item @email{bruncott@@dormeur.inria.fr, Georges Brun-Cottan} + @item @email{rjc@@cogsci.ed.ac.uk, Richard Caley} @item @email{cognot@@ensg.u-nancy.fr, Richard Cognot} +@item @email{daku@@nortel.ca, Mark Daku} + @item @email{wgd@@martigny.ai.mit.edu, William G. Dubuque} @item @email{eeide@@cs.utah.edu, Eric Eide} +@item @email{af@@biomath.jussieu.fr, Alain Fauconnet} + @item @email{cflatter@@nrao.edu, Chris Flatters} @item @email{ginsparg@@adra.com, Evelyn Ginsparg} @@ -977,7 +984,7 @@ characters. @node Q1.3.2, Q1.3.3, Q1.3.1, Introduction @unnumberedsubsec Q1.3.2: What is the status of Asian-language support, aka MULE? -MULE support is now available for UNIX versions of XEmacs. +MULE support is now available for UNIX versions of XEmacs. If you would like to help, you may want to join the @email{xemacs-mule@@xemacs.org} mailing list. Especially needed are @@ -1177,11 +1184,11 @@ it's available in a non-english language, type @kbd{C-u C-h t TAB}, type the first letters of your preferred language, then type @key{RET}. @comment There's an Emacs Lisp tutorial at -@comment +@comment @comment @example @comment @uref{ftp://prep.ai.mit.edu/pub/gnu/emacs-lisp-intro-1.04.tar.gz}. @comment @end example -@comment +@comment @comment @email{erik@@petaxp.rug.ac.be, Erik Sundermann} has made a tutorial web @comment page at @comment @iftex @@ -1235,7 +1242,7 @@ To bind to a key do: Or interactively, @kbd{M-x global-set-key} and follow the prompts. -@node Q1.4.6, Q1.4.7, Q1.4.5, Introduction +@node Q1.4.6, , Q1.4.5, Introduction @unnumberedsubsec Q1.4.6: What's the difference between a macro and a function? Quoting from the Lisp Reference (a.k.a @dfn{Lispref}) Manual: @@ -1255,36 +1262,6 @@ Do not confuse the two terms with @dfn{keyboard macros}, which are another matter, entirely. A keyboard macro is a key bound to several other keys. Refer to manual for details. -@node Q1.4.7, , Q1.4.6, Introduction -@unnumberedsubsec Q1.4.7: How come options saved with 19.13 don't work with 19.14 or later? - -There's a problem with options of the form: - -@lisp -(add-spec-list-to-specifier (face-property 'searchm-field 'font) - '((global (nil)))) -@end lisp - -saved by a 19.13 XEmacs that causes a 19.14 XEmacs grief. You must -delete these options. XEmacs 19.14 and later no longer write the -options directly to @file{.emacs} which should allow us to deal with -version incompatibilities better in the future. - -Options saved under XEmacs 19.13 are protected by code that specifically -requires a version 19 XEmacs. This won't be a problem unless you're -using XEmacs v20. You should consider changing the code to read: - -@lisp -(cond - ((and (string-match "XEmacs" emacs-version) - (boundp 'emacs-major-version) - (or (and (= emacs-major-version 19) - (>= emacs-minor-version 12)) - (>= emacs-major-version 20))) - ... - )) -@end lisp - @node Installation, Customization, Introduction, Top @unnumbered 2 Installation and Trouble Shooting @@ -1305,8 +1282,6 @@ Installation: * Q2.0.10:: After I run configure I find a coredump, is something wrong? * Q2.0.11:: XEmacs can't resolve host names. * Q2.0.12:: Why can't I strip XEmacs? -* Q2.0.13:: Can't link XEmacs on Solaris with Gcc. -* Q2.0.14:: Make on HP/UX 9 fails after linking temacs Trouble Shooting: * Q2.1.1:: XEmacs just crashed on me! @@ -1326,10 +1301,10 @@ Trouble Shooting: * Q2.1.15:: How to debug an XEmacs problem with a debugger. * Q2.1.16:: XEmacs crashes in @code{strcat} on HP/UX 10. * Q2.1.17:: @samp{Marker does not point anywhere}. -* Q2.1.18:: 19.14 hangs on HP/UX 10.10. +* Q2.1.18:: [This question intentionally left blank] * Q2.1.19:: XEmacs does not follow the local timezone. * Q2.1.20:: @samp{Symbol's function definition is void: hkey-help-show.} -* Q2.1.21:: Every so often the XEmacs frame freezes. +* Q2.1.21:: [This question intentionally left blank] * Q2.1.22:: XEmacs seems to take a really long time to do some things. * Q2.1.23:: Movemail on Linux does not work for XEmacs 19.15 and later. * Q2.1.24:: XEmacs won't start without network. (NEW) @@ -1758,7 +1733,7 @@ check to see if you've put DNS in the shared libc and will then proceed to link against the DNS resolver library code. @end quotation -@node Q2.0.12, Q2.0.13, Q2.0.11, Installation +@node Q2.0.12, Q2.1.1, Q2.0.11, Installation @unnumberedsubsec Q2.0.12: Why can't I strip XEmacs? @email{cognot@@fronsac.ensg.u-nancy.fr, Richard Cognot} writes: @@ -1813,46 +1788,7 @@ cp lib-src/DOC-19.16-XEmacs @end enumerate @end quotation -@node Q2.0.13, Q2.0.14, Q2.0.12, Installation -@unnumberedsubsec Q2.0.13: Problems linking with Gcc on Solaris - -There are known difficulties linking with Gnu ld on Solaris. A typical -error message might look like: - -@example -unexec(): dlopen(../dynodump/dynodump.so): ld.so.1: ./temacs: -fatal: relocation error: -symbol not found: main: referenced in ../dynodump/dynodump.so -@end example - -@email{martin@@xemacs.org, Martin Buchholz} writes: - -@quotation -You need to specify @samp{-fno-gnu-linker} as part of your flags to pass -to ld. Future releases of XEmacs will try to do this automatically. -@end quotation - -@node Q2.0.14, Q2.1.1, Q2.0.13, Installation -@unnumberedsubsec Q2.0.14: Make on HP/UX 9 fails after linking temacs - -Problem when building xemacs-19.16 on hpux 9: - -@email{cognot@@ensg.u-nancy.fr, Richard Cognot} writes: - -@quotation -make on hpux fails after linking temacs with a message: - -@example -"make: don't know how to make .y." -@end example - -Solution: This is a problem with HP make revision 70.X. Either use GNU -make, or install PHCO_6552, which will bring make to revision -72.24.1.17. -@end quotation - - -@node Q2.1.1, Q2.1.2, Q2.0.14, Installation +@node Q2.1.1, Q2.1.2, Q2.0.12, Installation @unnumberedsec 2.1: Trouble Shooting @unnumberedsubsec Q2.1.1: Help! XEmacs just crashed on me! @@ -2316,17 +2252,55 @@ it cannot display the internal C structure of a Lisp Object. Even if all you've got is a core dump, all is not lost. If you're using GDB, there are some macros in the file -@file{src/gdbinit} in the XEmacs source distribution that should make it -easier for you to decode Lisp objects. Copy this file to -@file{~/.gdbinit}, or @code{source} it from @file{~/.gdbinit}, and use -the macros defined therein. In particular, use the @code{pobj} macro to -print the internal C representation of a lisp object. This will work -with a core file or not-yet-run executable. The aliases @code{ldp} and -@code{lbt} are provided for conveniently calling @code{debug_print} and -@code{debug_backtrace}. +@file{src/.gdbinit} in the XEmacs source distribution that should make +it easier for you to decode Lisp objects. This file is automatically +read by gdb if gdb is run in the directory where xemacs was built, and +contains these useful macros to inspect the state of xemacs: + +@table @code +@item pobj +Usage: pobj lisp_object @* +Print the internal C representation of a lisp object. + +@item xtype +Usage: xtype lisp_object @* +Print the Lisp type of a lisp object. + +@item lbt +Usage: lbt @* +Print the current Lisp stack trace. +Requires a running xemacs process. + +@item ldp +Usage: ldp lisp_object @* +Print a Lisp Object value using the Lisp printer. +Requires a running xemacs process. + +@item run-temacs +Usage: run-temacs @* +Run temacs interactively, like xemacs. +Use this with debugging tools (like purify) that cannot deal with dumping, +or when temacs builds successfully, but xemacs does not. + +@item dump-temacs +Usage: dump-temacs @* +Run the dumping part of the build procedure. +Use when debugging temacs, not xemacs! +Use this when temacs builds successfully, but xemacs does not. + +@item check-xemacs +Usage: check-xemacs @* +Run the test suite. Equivalent to 'make check'. + +@item check-temacs +Usage: check-temacs @* +Run the test suite on temacs. Equivalent to 'make check-temacs'. +Use this with debugging tools (like purify) that cannot deal with dumping, +or when temacs builds successfully, but xemacs does not. +@end table If you are using Sun's @file{dbx} debugger, there is an equivalent file -@file{src/dbxrc} to copy to or source from @file{~/.dbxrc}. +@file{src/.dbxrc}, which defines the same commands for dbx. @item If you're using a debugger to get a C stack backtrace and you're seeing @@ -2377,14 +2351,13 @@ you'll have something useful. @item If you compile with the newer gcc variants gcc-2.8 or egcs, you will -also need gdb 4.17. Earlier releases of gdb can't handle the debug -information generated by the newer compilers. +also need gdb 4.17 or above. Earlier releases of gdb can't handle the +debug information generated by the newer compilers. @item -The above information on using @file{src/gdbinit} works for XEmacs-21.0 -and above. For older versions of XEmacs, there are different -@file{gdbinit} files provided in the @file{src} directory. Use the one -corresponding to the configure options used when building XEmacs. +In versions of XEmacs before 21.2.27, @file{src/.gdbinit} was named +@file{src/gdbinit}. This had the disadvantage of not being sourced +automatically by gdb, so you had to set that up yourself. @end itemize @@ -2430,58 +2403,7 @@ Upgrade your Gnus. @end enumerate @node Q2.1.18, Q2.1.19, Q2.1.17, Installation -@unnumberedsubsec Q2.1.18: 19.14 hangs on HP/UX 10.10. - -@email{cognot@@ensg.u-nancy.fr, Richard Cognot} writes: - -@quotation -For the record, compiling on hpux 10.10 leads to a hang in Gnus when -compiled with optimization on. - -I've just discovered that my hpux 10.01 binary was working less well -than expected. In fact, on a 10.10 system, @code{(while t)} was not -interrupted by @kbd{C-g}. I defined @code{BROKEN_SIGIO} and recompiled on -10.10, and... the hang is now gone. - -As far as configure goes, this will be a bit tricky: @code{BROKEN_SIGIO} -is needed on 10.10, but @strong{not} on 10.01: if I run my 10.01 binary -on a 10.01 machine, without @code{BROKEN_SIGIO} being defined, @kbd{C-g} -works as expected. -@end quotation - -@email{cognot@@ensg.u-nancy.fr, Richard Cognot} adds: - -@quotation -Apparently somebody has found the reason why there is this -@iftex -@* -@end iftex -@samp{poll: -interrupted...} message for each event. For some reason, libcurses -reimplements a @code{select()} system call, in a highly broken fashion. -The fix is to add a -lc to the link line @emph{before} the --lxcurses. XEmacs will then use the right version of @code{select()}. -@end quotation - - -@email{af@@biomath.jussieu.fr, Alain Fauconnet} writes: - -@quotation -The @emph{real} solution is to @emph{not} link -lcurses in! I just -changed -lcurses to -ltermcap in the Makefile and it fixed: - -@enumerate -@item -The @samp{poll: interrupted system call} message. - -@item -A more serious problem I had discovered in the meantime, that is the -fact that subprocess handling was seriously broken: subprocesses -e.g. started by AUC TeX for TeX compilation of a buffer would -@emph{hang}. Actually they would wait forever for emacs to read the -socket which connects stdout... -@end enumerate -@end quotation +@unnumberedsubsec Q2.1.18: removed @node Q2.1.19, Q2.1.20, Q2.1.18, Installation @unnumberedsubsec Q2.1.19: XEmacs does not follow the local timezone. @@ -2509,10 +2431,7 @@ This is a problem with a partially loaded hyperbole. Try adding: where you load hyperbole and the problem should go away. @node Q2.1.21, Q2.1.22, Q2.1.20, Installation -@unnumberedsubsec Q2.1.21: Every so often the XEmacs frame freezes - -This problem has been fixed in 19.15, and was due to a not easily -reproducible race condition. +@unnumberedsubsec Q2.1.21: [This question intentionally left blank] @node Q2.1.22, Q2.1.23, Q2.1.21, Installation @unnumberedsubsec Q2.1.22: XEmacs seems to take a really long time to do some things @@ -2603,8 +2522,8 @@ Customization---Emacs Lisp and @file{.emacs}: X Window System & Resources: * Q3.1.1:: Where is a list of X resources? * Q3.1.2:: How can I detect a color display? -* Q3.1.3:: @code{(set-screen-width)} worked in 19.6, but not in 19.13? -* Q3.1.4:: Specifying @code{Emacs*EmacsScreen.geometry} in @file{.emacs} does not work in 19.15? +* Q3.1.3:: [This question intentionally left blank] +* Q3.1.4:: [This question intentionally left blank] * Q3.1.5:: How can I get the icon to just say @samp{XEmacs}? * Q3.1.6:: How can I have the window title area display the full path? * Q3.1.7:: @samp{xemacs -name junk} doesn't work? @@ -2876,38 +2795,10 @@ in: @end lisp @node Q3.1.3, Q3.1.4, Q3.1.2, Customization -@unnumberedsubsec Q3.1.3: @code{(set-screen-width)} worked in 19.6, but not in 19.13? - -In Lucid Emacs 19.6 I did @code{(set-screen-width @var{characters})} and -@code{(set-screen-height @var{lines})} in my @file{.emacs} instead of -specifying @code{Emacs*EmacsScreen.geometry} in my -@iftex -@* -@end iftex -@file{.Xdefaults} but -this does not work in XEmacs 19.13. - -These two functions now take frame arguments: - -@lisp -(set-frame-width (selected-frame) @var{characters}) -(set-frame-height (selected-frame) @var{lines}) -@end lisp +@unnumberedsubsec Q3.1.3: [This question intentionally left blank] @node Q3.1.4, Q3.1.5, Q3.1.3, Customization -@unnumberedsubsec Q3.1.4: Specifying @code{Emacs*EmacsScreen.geometry} in @file{.emacs} does not work in 19.15? - -In XEmacs 19.11 I specified @code{Emacs*EmacsScreen.geometry} in -my @file{.emacs} but this does not work in XEmacs 19.15. - -We have switched from using the term @dfn{screen} to using the term -@dfn{frame}. - -The correct entry for your @file{.Xdefaults} is now: - -@example -Emacs*EmacsFrame.geometry -@end example +@unnumberedsubsec Q3.1.4: [This question intentionally left blank] @node Q3.1.5, Q3.1.6, Q3.1.4, Customization @unnumberedsubsec Q3.1.5: How can I get the icon to just say @samp{XEmacs}? @@ -3999,13 +3890,19 @@ is what happens when you select a region (with the mouse or keyboard) and you press a key to replace the selected region by the key you typed. Usually backspace kills the selected region. -To get this behavior, add the following line to your @file{.emacs}: +To get this behavior, add the following lines to your @file{.emacs}: @lisp -(turn-on-pending-delete) +(cond + ((fboundp 'turn-on-pending-delete) + (turn-on-pending-delete)) + ((fboundp 'pending-delete-on) + (pending-delete-on t))) @end lisp -Note that this will work with both Backspace and Delete. +Note that this will work with both Backspace and Delete. This code is a +tad more complicated than it has to be for XEmacs in order to make it +more portable. @node Q3.10.3, Q3.10.4, Q3.10.2, Customization @unnumberedsubsec Q3.10.3: Can I turn off the highlight during isearch? @@ -4122,7 +4019,7 @@ Infodock: Other Unbundled Packages: * Q4.7.1:: What is AUC TeX? Where do you get it? * Q4.7.2:: Are there any Emacs Lisp Spreadsheets? -* Q4.7.3:: Byte compiling AUC TeX on XEmacs 19.14 +* Q4.7.3:: [This question intentionally left blank] * Q4.7.4:: Problems installing AUC TeX * Q4.7.5:: Is there a reason for an Emacs package not to be included in XEmacs? * Q4.7.6:: Is there a MatLab mode? @@ -4637,12 +4534,12 @@ following patch: @@@@ -42,7 +42,7 @@@@ (defvar running-xemacs nil "t if we're running XEmacs") (defvar running-emacs nil "t if we're running GNU Emacs 19") - + -(if (string-match "^\\(19\\|20\\)\..*\\(XEmacs\\|Lucid\\)" emacs-version) +(if (string-match "\\(XEmacs\\|Lucid\\)" emacs-version) (setq running-xemacs t) (setq running-emacs t)) -@end format +@end format @@ -4859,17 +4756,7 @@ Yes. Check out @dfn{dismal} (which stands for Dis' Mode Ain't Lotus) at @uref{ftp://cs.nyu.edu/pub/local/fox/dismal/}. @node Q4.7.3, Q4.7.4, Q4.7.2, Subsystems -@unnumberedsubsec Q4.7.3: Byte compiling AUC TeX on XEmacs 19.14. - -@email{bruncott@@dormeur.inria.fr, Georges Brun-Cottan} writes: - -@quotation -When byte compiling auctex-9.4g, you must use the command: - -@example -xemacs -batch -l lpath.el -@end example -@end quotation +@unnumberedsubsec Q4.7.3: [This question intentionally left blank] @node Q4.7.4, Q4.7.5, Q4.7.3, Subsystems @unnumberedsubsec Q4.7.4: Problems installing AUC TeX. @@ -4965,14 +4852,14 @@ Major & Minor Modes: * Q5.0.8:: Why does edt emulation not work? * Q5.0.9:: How can I emulate VI and use it as my default mode? * Q5.0.10:: [This question intentionally left blank] -* Q5.0.11:: Filladapt doesn't work in 19.15? +* Q5.0.11:: How do I turn on filladapt for all buffers? * Q5.0.12:: How do I disable gnuserv from opening a new frame? * Q5.0.13:: How do I start gnuserv so that each subsequent XEmacs is a client? * Q5.0.14:: Strange things are happening in Shell Mode. * Q5.0.15:: Where do I get the latest CC Mode? * Q5.0.16:: I find auto-show-mode disconcerting. How do I turn it off? * Q5.0.17:: How can I get two instances of info? -* Q5.0.18:: I upgraded to XEmacs 19.14 and gnuserv stopped working +* Q5.0.18:: [This question intentionally left blank] * Q5.0.19:: Is there something better than LaTeX mode? * Q5.0.20:: Is there a way to start a new XEmacs if there's no gnuserv running, and otherwise use gnuclient? @@ -5165,7 +5052,7 @@ rename-uniquely} to rename the @code{*shell*} buffer instead of @kbd{M-x rename-buffer}. Alternately, you can set the variable @code{shell-multiple-shells}. -If the value of this variable is non-nil, each time shell mode is invoked, +If the value of this variable is non-nil, each time shell mode is invoked, a new shell is made @node Q5.0.7, Q5.0.8, Q5.0.6, Miscellaneous @@ -5221,11 +5108,11 @@ it, otherwise some minor modes may not get viper-ized. Obsolete question, left blank to avoid renumbering @node Q5.0.11, Q5.0.12, Q5.0.10, Miscellaneous -@unnumberedsubsec Q5.0.11: Filladapt doesn't work in 19.15 +@unnumberedsubsec Q5.0.11: How do I turn on filladapt for all buffers? -Filladapt 2.x is included in 19.15. In it filladapt is now a minor -mode and minor modes are traditionally off by default. The following -added to your @file{.emacs} will turn it on for all buffers: +Filladapt is a minor mode and minor modes are traditionally off by +default. The following added to your @file{.emacs} will turn it on for +all buffers: @lisp (setq-default filladapt-mode t) @@ -5333,19 +5220,7 @@ enabled by default. To turn it off, put the following in your You can't. The @code{info} package does not provide for multiple info buffers. @node Q5.0.18, Q5.0.19, Q5.0.17, Miscellaneous -@unnumberedsubsec Q5.0.18: I upgraded to XEmacs 19.14 and gnuserv stopped working. - -@email{daku@@nortel.ca, Mark Daku} writes: - -@quotation -It turns out I was using an older version of gnuserv. The installation -didn't put the binary into the public bin directory. It put it in -@iftex -@* -@end iftex -@file{lib/xemacs-19.14/hppa1.1-hp-hpux9.05/gnuserv}. Shouldn't it have -been put in @file{bin/hppa1.1-hp-hpux9.0}? -@end quotation +@unnumberedsubsec Q5.0.18: [This question intentionally left blank] @node Q5.0.19, Q5.0.20, Q5.0.18, Miscellaneous @unnumberedsubsec Q5.0.19: Is there something better than LaTeX mode? @@ -6206,7 +6081,7 @@ port of XEmacs. General Info * Q6.0.1:: What is the status of the XEmacs port to Windows? -* Q6.0.2:: What flavors of MS Windows are supported? +* Q6.0.2:: What flavors of MS Windows are supported? * Q6.0.3:: Where are the XEmacs on MS Windows binaries? * Q6.0.4:: Does XEmacs on MS Windows require an X server to run? @@ -6317,7 +6192,7 @@ Pointers to X servers can be found at @iftex @* @end iftex -@uref{http://dao.gsfc.nasa.gov/software/grads/win32/X11R6.3/}; +@uref{http://dao.gsfc.nasa.gov/software/grads/win32/X11R6.3/}; look for "Where to get an X server". Also note that, although the above page talks about Cygnus gnu-win32 (Cygwin), the information on X servers @@ -6403,7 +6278,7 @@ well as pre-built ncurses and graphic libraries, from: @unnumberedsec 6.2: Customization and User Interface @unnumberedsubsec Q6.2.1: How will the port cope with differences in the Windows user interface? -XEmacs (and Emacs in general) UI is pretty +XEmacs (and Emacs in general) UI is pretty different from what is expected of a typical MS Windows program. How will the MS Windows port cope with it? @@ -6468,7 +6343,7 @@ Here is a recount of various Emacs versions running on MS Windows: @itemize @bullet -@item +@item Win-Emacs @itemize @minus @@ -6484,7 +6359,7 @@ Pearlsoft, but not anymore, since Pearlsoft went out of business. @item GNU Emacs for DOS -@itemize @minus +@itemize @minus @item GNU Emacs features support for MS-DOS and DJGPP (D.J. Delorie's DOS @@ -6496,7 +6371,7 @@ is far too big compared to typical DOS editors. @item GNU Emacs compiled with Win32 -@itemize @minus +@itemize @minus @item Starting with version 19.30, it has been possible to compile GNU Emacs @@ -6509,7 +6384,7 @@ flavor of XEmacs on MS Windows. @item NT Emacs -@itemize @minus +@itemize @minus @item NT Emacs is a version of GNU Emacs modified to compile and run under @@ -6518,7 +6393,7 @@ in spirit to the XEmacs "native" port. @item NT Emacs has been written by Geoff Voelker, and more information can be -found at +found at @iftex @* @end iftex @@ -6529,7 +6404,7 @@ found at @item XEmacs -@itemize @minus +@itemize @minus @item Beginning with XEmacs 19.12, XEmacs' architecture has been redesigned diff --git a/man/xemacs/custom.texi b/man/xemacs/custom.texi index d37a926..bcb9764 100644 --- a/man/xemacs/custom.texi +++ b/man/xemacs/custom.texi @@ -1093,9 +1093,9 @@ definitions for the same key. Or you can change the current buffer's local map, which affects all buffers using the same major mode. @menu -* Interactive Rebinding:: Changing Key Bindings Interactively -* Programmatic Rebinding:: Changing Key Bindings Programmatically -* Key Bindings Using Strings::Using Strings for Changing Key Bindings +* Interactive Rebinding:: Changing Key Bindings Interactively +* Programmatic Rebinding:: Changing Key Bindings Programmatically +* Key Bindings Using Strings:: Using Strings for Changing Key Bindings @end menu @node Interactive Rebinding diff --git a/man/xemacs/mini.texi b/man/xemacs/mini.texi index c46ce59..3d75b35 100644 --- a/man/xemacs/mini.texi +++ b/man/xemacs/mini.texi @@ -3,20 +3,19 @@ @chapter The Minibuffer @cindex minibuffer - Emacs commands use the @dfn{minibuffer} to read arguments more -complicated than a single number. Minibuffer arguments can be file -names, buffer names, Lisp function names, Emacs command names, Lisp -expressions, and many other things, depending on the command reading the -argument. To edit the argument in the minibuffer, you can use Emacs -editing commands. - + The @dfn{minibuffer} is the facility used by XEmacs commands to read +arguments more complicated than a single number. Minibuffer arguments +can be file names, buffer names, Lisp function names, XEmacs command +names, Lisp expressions, and many other things, depending on the command +reading the argument. You can use the usual XEmacs editing commands in +the minibuffer to edit the argument text. @cindex prompt When the minibuffer is in use, it appears in the echo area, and the cursor moves there. The beginning of the minibuffer line displays a -@dfn{prompt} indicating what kind of input you should supply and how it -will be used. The prompt is often derived from the name of the command -the argument is for. The prompt normally ends with a colon. +@dfn{prompt} which says what kind of input you should supply and how it +will be used. Often this prompt is derived from the name of the command +that the argument is for. The prompt normally ends with a colon. @cindex default argument Sometimes a @dfn{default argument} appears in parentheses after the @@ -26,14 +25,14 @@ For example, commands that read buffer names always show a default, which is the name of the buffer that will be used if you type just @key{RET}. @kindex C-g - The simplest way to give a minibuffer argument is to type the text you -want, terminated by @key{RET} to exit the minibuffer. To get out -of the minibuffer and cancel the command that it was for, type -@kbd{C-g}. + The simplest way to enter a minibuffer argument is to type the text +you want, terminated by @key{RET} which exits the minibuffer. You can +cancel the command that wants the argument, and get out of the +minibuffer, by typing @kbd{C-g}. Since the minibuffer uses the screen space of the echo area, it can -conflict with other ways Emacs customarily uses the echo area. Here is how -Emacs handles such conflicts: +conflict with other ways XEmacs customarily uses the echo area. Here is +how XEmacs handles such conflicts: @itemize @bullet @item @@ -44,9 +43,9 @@ while. It comes back after a few seconds, or as soon as you type anything. @item -If you use a command in the minibuffer whose purpose is to print a -message in the echo area (for example @kbd{C-x =}) the message is -displayed normally, and the minibuffer is hidden for a while. It comes back +If in the minibuffer you use a command whose purpose is to print a +message in the echo area, such as @kbd{C-x =}, the message is printed +normally, and the minibuffer is hidden for a while. It comes back after a few seconds, or as soon as you type anything. @item @@ -58,6 +57,7 @@ use. * File: Minibuffer File. Entering file names with the minibuffer. * Edit: Minibuffer Edit. How to edit in the minibuffer. * Completion:: An abbreviation facility for minibuffer input. +* Minibuffer History:: Reusing recent minibuffer arguments. * Repetition:: Re-executing commands that used the minibuffer. @end menu @@ -66,37 +66,43 @@ use. Sometimes the minibuffer starts out with text in it. For example, when you are supposed to give a file name, the minibuffer starts out containing -the @dfn{default directory}, which ends with a slash. This informs -you in which directory the file will be looked for if you do not specify -a different one. For example, the minibuffer might start out with: +the @dfn{default directory}, which ends with a slash. This is to inform +you which directory the file will be found in if you do not specify a +directory. + + For example, the minibuffer might start out with these contents: @example Find File: /u2/emacs/src/ @end example @noindent -where @samp{Find File:@: } is the prompt. Typing @kbd{buffer.c} specifies -the file -@*@file{/u2/emacs/src/buffer.c}. To find files in nearby -directories, use @samp{..}; thus, if you type @kbd{../lisp/simple.el}, the -file that you visit will be the one named -@*@file{/u2/emacs/lisp/simple.el}. -Alternatively, you can use @kbd{M-@key{DEL}} to kill directory names you -don't want (@pxref{Words}).@refill - - You can also type an absolute file name, one starting with a slash or a -tilde, ignoring the default directory. For example, to find the file -@file{/etc/termcap}, just type the name, giving: +where @samp{Find File:@: } is the prompt. Typing @kbd{buffer.c} +specifies the file @file{/u2/emacs/src/buffer.c}. To find files in +nearby directories, use @kbd{..}; thus, if you type +@kbd{../lisp/simple.el}, you will get the file named +@file{/u2/emacs/lisp/simple.el}. Alternatively, you can kill with +@kbd{M-@key{DEL}} the directory names you don't want (@pxref{Words}). + + If you don't want any of the default, you can kill it with @kbd{C-a +C-k}. But you don't need to kill the default; you can simply ignore it. +Insert an absolute file name, one starting with a slash or a tilde, +after the default directory. For example, to specify the file +@file{/etc/termcap}, just insert that name, giving these minibuffer +contents: @example Find File: /u2/emacs/src//etc/termcap @end example @noindent -Two slashes in a row are not normally meaningful in Unix file names, but -they are allowed in XEmacs. They mean, ``ignore everything before the -second slash in the pair.'' Thus, @samp{/u2/emacs/src/} is ignored, and -you get the file @file{/etc/termcap}. +@cindex // in file name +@cindex double slash in file name +@cindex slashes repeated in file name +XEmacs gives a special meaning to a double slash (which is not normally +a useful thing to write): it means, ``ignore everything before the +second slash in the pair.'' Thus, @samp{/u2/emacs/src/} is ignored in +the example above, and you get the file @file{/etc/termcap}. @vindex insert-default-directory If you set @code{insert-default-directory} to @code{nil}, the default @@ -107,126 +113,141 @@ interpreted with respect to the same default directory. @node Minibuffer Edit, Completion, Minibuffer File, Minibuffer @section Editing in the Minibuffer - The minibuffer is an Emacs buffer (albeit a peculiar one), and the usual -Emacs commands are available for editing the text of an argument you are -entering. + The minibuffer is an XEmacs buffer (albeit a peculiar one), and the +usual XEmacs commands are available for editing the text of an argument +you are entering. Since @key{RET} in the minibuffer is defined to exit the minibuffer, -you must use @kbd{C-o} or @kbd{C-q @key{LFD}} to insert a newline into -the minibuffer. (Recall that a newline is really the @key{LFD} -character.) - - The minibuffer has its own window, which always has space on the screen -but acts as if it were not there when the minibuffer is not in use. The -minibuffer window is just like the others; you can switch to another -window with @kbd{C-x o}, edit text in other windows, and perhaps even -visit more files before returning to the minibuffer to submit the -argument. You can kill text in another window, return to the minibuffer -window, and then yank the text to use it in the argument. @xref{Windows}. - - There are, however, some restrictions on the use of the minibuffer window. -You cannot switch buffers in it---the minibuffer and its window are -permanently attached. You also cannot split or kill the minibuffer -window, but you can make it taller with @kbd{C-x ^}. +you can't use it to insert a newline in the minibuffer. To do that, +type @kbd{C-o} or @kbd{C-q C-j}. (Recall that a newline is really the +character control-J.) + + The minibuffer has its own window which always has space on the screen +but acts as if it were not there when the minibuffer is not in use. +When the minibuffer is in use, its window is just like the others; you +can switch to another window with @kbd{C-x o}, edit text in other +windows and perhaps even visit more files, before returning to the +minibuffer to submit the argument. You can kill text in another window, +return to the minibuffer window, and then yank the text to use it in the +argument. @xref{Windows}. + + There are some restrictions on the use of the minibuffer window, +however. You cannot switch buffers in it---the minibuffer and its +window are permanently attached. Also, you cannot split or kill the +minibuffer window. But you can make it taller in the normal fashion with +@kbd{C-x ^}. @kindex C-M-v - If you are in the minibuffer and issue a command that displays help -text in another window, that window will be scrolled if you type -@kbd{M-C-v} while in the minibuffer until you exit the minibuffer. This -feature is helpful if a completing minibuffer gives you a long list of -possible completions. + If while in the minibuffer you issue a command that displays help text +of any sort in another window, you can use the @kbd{C-M-v} command while +in the minibuffer to scroll the help text. This lasts until you exit +the minibuffer. This feature is especially useful if a completing +minibuffer gives you a list of possible completions. @xref{Other Window}. +@vindex minibuffer-confirm-incomplete If the variable @code{minibuffer-confirm-incomplete} is @code{t}, you are asked for confirmation if there is no known completion for the text you typed. For example, if you attempted to visit a non-existent file, the minibuffer might read: @example - Find File:chocolate_bar.c [no completions, confirm] + Find File: chocolate_bar.c [no completions, confirm] @end example If you press @kbd{Return} again, that confirms the filename. Otherwise, you can continue editing it. - Emacs supports recursive use of the minibuffer. However, it is -easy to do this by accident (because of autorepeating keyboards, for -example) and get confused. Therefore, most Emacs commands that use the -minibuffer refuse to operate if the minibuffer window is selected. If the -minibuffer is active but you have switched to a different window, recursive -use of the minibuffer is allowed---if you know enough to try to do this, -you probably will not get confused. + XEmacs supports recursive use of the minibuffer. However, it is easy +to do this by accident (because of autorepeating keyboards, for example) +and get confused. Therefore, most XEmacs commands that use the +minibuffer refuse to operate if the minibuffer window is selected. If +the minibuffer is active but you have switched to a different window, +recursive use of the minibuffer is allowed---if you know enough to try +to do this, you probably will not get confused. @vindex enable-recursive-minibuffers - If you set the variable @code{enable-recursive-minibuffers} to be + If you set the variable @code{enable-recursive-minibuffers} to a non-@code{nil}, recursive use of the minibuffer is always allowed. -@node Completion, Repetition, Minibuffer Edit, Minibuffer +@node Completion, Minibuffer History, Minibuffer Edit, Minibuffer @section Completion @cindex completion - When appropriate, the minibuffer provides a @dfn{completion} facility. -You type the beginning of an argument and one of the completion keys, -and Emacs visibly fills in the rest, depending on what you have already -typed. + For certain kinds of arguments, you can use @dfn{completion} to enter +the argument value. Completion means that you type part of the +argument, then XEmacs visibly fills in the rest, or as much as +can be determined from the part you have typed. When completion is available, certain keys---@key{TAB}, @key{RET}, and -@key{SPC}---are redefined to complete an abbreviation present in the +@key{SPC}---are rebound to complete the text present in the minibuffer into a longer string that it stands for, by matching it against a set of @dfn{completion alternatives} provided by the command reading the argument. @kbd{?} is defined to display a list of possible completions of what you have inserted. - For example, when the minibuffer is being used by @kbd{Meta-x} to read -the name of a command, it is given a list of all available Emacs command -names to complete against. The completion keys match the text in the -minibuffer against all the command names, find any additional characters of -the name that are implied by the ones already present in the minibuffer, -and add those characters to the ones you have given. - - Case is normally significant in completion because it is significant in -most of the names that you can complete (buffer names, file names, and -command names). Thus, @samp{fo} will not complete to @samp{Foo}. When you -are completing a name in which case does not matter, case may be ignored -for completion's sake if specified by program. + For example, when @kbd{M-x} uses the minibuffer to read the name of a +command, it provides a list of all available XEmacs command names to +complete against. The completion keys match the text in the minibuffer +against all the command names, find any additional name characters +implied by the ones already present in the minibuffer, and add those +characters to the ones you have given. This is what makes it possible +to type @kbd{M-x inse @key{SPC} b @key{RET}} instead of @kbd{M-x +insert-buffer @key{RET}} (for example). + + Case is normally significant in completion because it is significant +in most of the names that you can complete (buffer names, file names and +command names). Thus, @samp{fo} does not complete to @samp{Foo}. When +you are completing a name in which case does not matter, case may be +ignored for completion's sake if specified by program. When a completion list is displayed, the completions will highlight as you move the mouse over them. Clicking the middle mouse button on any highlighted completion will ``select'' it just as if you had typed it in and hit @key{RET}. -@subsection A Completion Example +@menu +* Example: Completion Example. +* Commands: Completion Commands. +* Strict Completion:: +* Options: Completion Options. +@end menu + +@node Completion Example, Completion Commands, Completion, Completion +@subsection Completion Example @kindex TAB @findex minibuffer-complete - Consider the following example. If you type @kbd{Meta-x au @key{TAB}}, -@key{TAB} looks for alternatives (in this case, command names) that -start with @samp{au}. There are only two commands: @code{auto-fill-mode} and -@code{auto-save-mode}. They are the same as far as @code{auto-}, so the -@samp{au} in the minibuffer changes to @samp{auto-}.@refill - - If you type @key{TAB} again immediately, there are multiple possibilities -for the very next character---it could be @samp{s} or @samp{f}---so no more -characters are added; but a list of all possible completions is displayed -in another window. + A concrete example may help here. If you type @kbd{M-x au @key{TAB}}, +the @key{TAB} looks for alternatives (in this case, command names) that +start with @samp{au}. There are several, including +@code{auto-fill-mode} and @code{auto-save-mode}---but they are all the +same as far as @code{auto}, so the @samp{au} in the minibuffer changes +to @samp{auto}. + + If you type @key{TAB} again immediately, there are multiple +possibilities for the very next character---it could be any of +@samp{c-}---so no more characters are added; instead, @key{TAB} +displays a list of all possible completions in another window. If you go on to type @kbd{f @key{TAB}}, this @key{TAB} sees @samp{auto-f}. The only command name starting this way is -@code{auto-fill-mode}, so completion inserts the rest of that command. You -now have @samp{auto-fill-mode} in the minibuffer after typing just @kbd{au -@key{TAB} f @key{TAB}}. Note that @key{TAB} has this effect because in the -minibuffer it is bound to the function @code{minibuffer-complete} when -completion is supposed to be done.@refill +@code{auto-fill-mode}, so completion fills in the rest of that. You now +have @samp{auto-fill-mode} in the minibuffer after typing just @kbd{au +@key{TAB} f @key{TAB}}. Note that @key{TAB} has this effect because in +the minibuffer it is bound to the command @code{minibuffer-complete} +when completion is available. +@node Completion Commands, Strict Completion, Completion Example, Completion @subsection Completion Commands - Here is a list of all the completion commands defined in the minibuffer + Here is a list of the completion commands defined in the minibuffer when completion is available. @table @kbd @item @key{TAB} -Complete the text in the minibuffer as much as possible @* +Complete the text in the minibuffer as much as possible (@code{minibuffer-complete}). @item @key{SPC} -Complete the text in the minibuffer but don't add or fill out more -than one word (@code{minibuffer-complete-word}). +Complete the minibuffer text, but don't go beyond one word +(@code{minibuffer-complete-word}). @item @key{RET} Submit the text in the minibuffer as the argument, possibly completing first as described below (@code{minibuffer-complete-and-exit}). @@ -244,14 +265,51 @@ highlighted completion and exit the minibuffer. @kindex SPC @findex minibuffer-complete-word -@key{SPC} completes in a way that is similar to @key{TAB}, but it never -goes beyond the next hyphen or space. If you have @samp{auto-f} in the -minibuffer and type @key{SPC}, it finds that the completion is - @samp{auto-fill-mode}, but it stops completing after @samp{fill-}. -The result is @samp{auto-fill-}. Another @key{SPC} at this point -completes all the way to @samp{auto-fill-mode}. @key{SPC} in the -minibuffer runs the function @code{minibuffer-complete-word} when -completion is available.@refill + @key{SPC} completes much like @key{TAB}, but never goes beyond the +next hyphen or space. If you have @samp{auto-f} in the minibuffer and +type @key{SPC}, it finds that the completion is @samp{auto-fill-mode}, +but it stops completing after @samp{fill-}. This gives +@samp{auto-fill-}. Another @key{SPC} at this point completes all the +way to @samp{auto-fill-mode}. @key{SPC} in the minibuffer when +completion is available runs the command +@code{minibuffer-complete-word}. + + Here are some commands you can use to choose a completion from a +window that displays a list of completions: + +@table @kbd +@findex mouse-choose-completion +@item button2up +Clicking mouse button 2 on a completion in the list of possible +completions chooses that completion (@code{mouse-choose-completion}). +You normally use this command while point is in the minibuffer; but you +must click in the list of completions, not in the minibuffer itself. + +@findex choose-completion +@item @key{RET} +Typing @key{RET} @emph{in the completion list buffer} chooses the +completion that point is in or next to (@code{choose-completion}). To +use this command, you must first switch windows to the window that shows +the list of completions. + +@findex next-list-mode-item +@item @key{RIGHT} +@itemx @key{TAB} +@itemx C-f +Typing the right-arrow key @key{RIGHT}, @key{TAB} or @kbd{C-f} @emph{in +the completion list buffer} moves point to the following completion +(@code{next-list-mode-item}). + +@findex previous-list-mode-item +@item @key{LEFT} +@itemx C-b +Typing the left-arrow key @key{LEFT} or @kbd{C-b} @emph{in the +completion list buffer} moves point toward the beginning of the buffer, +to the previous completion (@code{previous-list-mode-item}). +@end table + +@node Strict Completion, Completion Options, Completion Commands, Completion +@subsection Strict Completion There are three different ways that @key{RET} can work in completing minibuffers, depending on how the argument will be used. @@ -276,7 +334,7 @@ Cautious completion is used for reading file names for files that must already exist. @item -@dfn{Permissive} completion is used when any string is +@dfn{Permissive} completion is used when any string whatever is meaningful, and the list of completion alternatives is just a guide. For example, when @kbd{C-x C-f} reads the name of a file to visit, any file name is allowed, in case you want to create a file. In @@ -284,21 +342,26 @@ permissive completion, @key{RET} takes the text in the minibuffer exactly as given, without completing it. @end itemize - The completion commands display a list of all possible completions in a -window whenever there is more than one possibility for the very next -character. Typing @kbd{?} explicitly requests such a list. The -list of completions counts as help text, so @kbd{C-M-v} typed in the -minibuffer scrolls the list. + The completion commands display a list of all possible completions in +a window whenever there is more than one possibility for the very next +character. Also, typing @kbd{?} explicitly requests such a list. If +the list of completions is long, you can scroll it with @kbd{C-M-v} +(@pxref{Other Window}). + +@node Completion Options, , Strict Completion, Completion +@subsection Completion Options @vindex completion-ignored-extensions When completion is done on file names, certain file names are usually -ignored. The variable @code{completion-ignored-extensions} contains a list -of strings; a file whose name ends in any of those strings is ignored as a -possible completion. The standard value of this variable has several -elements including @code{".o"}, @code{".elc"}, @code{".dvi"} and @code{"~"}. -The effect is that, for example, @samp{foo} completes to @samp{foo.c} -even though @samp{foo.o} exists as well. If the only possible completions -are files that end in ``ignored'' strings, they are not ignored.@refill +ignored. The variable @code{completion-ignored-extensions} contains a +list of strings; a file whose name ends in any of those strings is +ignored as a possible completion. The standard value of this variable +has several elements including @code{".o"}, @code{".elc"}, @code{".dvi"} +and @code{"~"}. The effect is that, for example, @samp{foo} can +complete to @samp{foo.c} even though @samp{foo.o} exists as well. +However, if @emph{all} the possible completions end in ``ignored'' +strings, then they are not ignored. Ignored extensions do not apply to +lists of completions---those always mention all possible completions. @vindex completion-auto-help If a completion command finds the next character is undetermined, it @@ -312,47 +375,135 @@ then in contexts where @code{completing-read} allows answers that are not valid completions, an extra @key{RET} must be typed to confirm the response. This is helpful for catching typos. -@node Repetition,, Completion, Minibuffer +@node Minibuffer History, Repetition, Completion, Minibuffer +@section Minibuffer History +@cindex minibuffer history +@cindex history of minibuffer input + + Every argument that you enter with the minibuffer is saved on a +@dfn{minibuffer history list} so that you can use it again later in +another argument. Special commands load the text of an earlier argument +in the minibuffer. They discard the old minibuffer contents, so you can +think of them as moving through the history of previous arguments. + +@table @kbd +@item @key{UP} +@itemx M-p +Move to the next earlier argument string saved in the minibuffer history +(@code{previous-history-element}). +@item @key{DOWN} +@itemx M-n +Move to the next later argument string saved in the minibuffer history +(@code{next-history-element}). +@item M-r @var{regexp} @key{RET} +Move to an earlier saved argument in the minibuffer history that has a +match for @var{regexp} (@code{previous-matching-history-element}). +@item M-s @var{regexp} @key{RET} +Move to a later saved argument in the minibuffer history that has a +match for @var{regexp} (@code{next-matching-history-element}). +@end table + +@kindex M-p @r{(minibuffer history)} +@kindex M-n @r{(minibuffer history)} +@findex next-history-element +@findex previous-history-element + The simplest way to reuse the saved arguments in the history list is +to move through the history list one element at a time. While in the +minibuffer, use @kbd{M-p} or up-arrow (@code{previous-history-element}) +to ``move to'' the next earlier minibuffer input, and use @kbd{M-n} or +down-arrow (@code{next-history-element}) to ``move to'' the next later +input. + + The previous input that you fetch from the history entirely replaces +the contents of the minibuffer. To use it as the argument, exit the +minibuffer as usual with @key{RET}. You can also edit the text before +you reuse it; this does not change the history element that you +``moved'' to, but your new argument does go at the end of the history +list in its own right. + + For many minibuffer arguments there is a ``default'' value. In some +cases, the minibuffer history commands know the default value. Then you +can insert the default value into the minibuffer as text by using +@kbd{M-n} to move ``into the future'' in the history. + +@findex previous-matching-history-element +@findex next-matching-history-element +@kindex M-r @r{(minibuffer history)} +@kindex M-s @r{(minibuffer history)} + There are also commands to search forward or backward through the +history; they search for history elements that match a regular +expression that you specify with the minibuffer. @kbd{M-r} +(@code{previous-matching-history-element}) searches older elements in +the history, while @kbd{M-s} (@code{next-matching-history-element}) +searches newer elements. By special dispensation, these commands can +use the minibuffer to read their arguments even though you are already +in the minibuffer when you issue them. As with incremental searching, +an uppercase letter in the regular expression makes the search +case-sensitive (@pxref{Search Case}). + + All uses of the minibuffer record your input on a history list, but +there are separate history lists for different kinds of arguments. For +example, there is a list for file names, used by all the commands that +read file names. + + There are several other very specific history lists, including one for +command names read by @kbd{M-x}, one for buffer names, one for arguments +of commands like @code{query-replace}, and one for compilation commands +read by @code{compile}. Finally, there is one ``miscellaneous'' history +list that most minibuffer arguments use. + +@c Do wee need this? +@ignore +@vindex history-length + The variable @code{history-length} specifies the maximum length of a +minibuffer history list; once a list gets that long, the oldest element +is deleted each time an element is added. If the value of +@code{history-length} is @code{t}, though, there is no maximum length +and elements are never deleted. +@end ignore + +@node Repetition, , Minibuffer History, Minibuffer @section Repeating Minibuffer Commands @cindex command history @cindex history of commands Every command that uses the minibuffer at least once is recorded on a -special history list, together with the values of the minibuffer arguments, -so that you can repeat the command easily. In particular, every -use of @kbd{Meta-x} is recorded, since @kbd{M-x} uses the minibuffer to -read the command name. +special history list, together with the values of its arguments, so that +you can repeat the entire command. In particular, every use of +@kbd{M-x} is recorded there, since @kbd{M-x} uses the minibuffer to read +the command name. @findex list-command-history @c widecommands @table @kbd -@item C-x @key{ESC} -Re-execute a recent minibuffer command @*(@code{repeat-complex-command}). +@item C-x @key{ESC} @key{ESC} +Re-execute a recent minibuffer command (@code{repeat-complex-command}). @item M-p Within @kbd{C-x @key{ESC}}, move to previous recorded command (@code{previous-history-element}). @item M-n Within @kbd{C-x @key{ESC}}, move to the next (more recent) recorded -command (@code{next-history-element}).@refill +command (@code{next-history-element}). @item M-x list-command-history Display the entire command history, showing all the commands -@kbd{C-x @key{ESC}} can repeat, most recent first.@refill +@kbd{C-x @key{ESC} @key{ESC}} can repeat, most recent first. @end table -@kindex C-x ESC +@kindex C-x ESC ESC @findex repeat-complex-command - @kbd{C-x @key{ESC}} is used to re-execute a recent command that used -the minibuffer. With no argument, it repeats the last command. A numeric -argument specifies which command to repeat; 1 means the last one, and -larger numbers specify earlier commands. - - @kbd{C-x @key{ESC}} works by turning the previous command into a Lisp -expression and then entering a minibuffer initialized with the text for -that expression. If you type just @key{RET}, the command is repeated as -before. You can also change the command by editing the Lisp expression. -The expression you finally submit will be executed. The repeated -command is added to the front of the command history unless it is -identical to the most recently executed command already there. + @kbd{C-x @key{ESC} @key{ESC}} is used to re-execute a recent +minibuffer-using command. With no argument, it repeats the last such +command. A numeric argument specifies which command to repeat; one +means the last one, and larger numbers specify earlier ones. + + @kbd{C-x @key{ESC} @key{ESC}} works by turning the previous command +into a Lisp expression and then entering a minibuffer initialized with +the text for that expression. If you type just @key{RET}, the command +is repeated as before. You can also change the command by editing the +Lisp expression. Whatever expression you finally submit is what will be +executed. The repeated command is added to the front of the command +history unless it is identical to the most recently executed command +already there. Even if you don't understand Lisp syntax, it will probably be obvious which command is displayed for repetition. If you do not change the text, @@ -362,17 +513,17 @@ you can be sure the command will repeat exactly as before. @kindex M-p @findex next-complex-command @findex previous-complex-command - If you are in the minibuffer for @kbd{C-x @key{ESC}} and the command shown -to you is not the one you want to repeat, you can move around the list of -previous commands using @kbd{M-n} and @kbd{M-p}. @kbd{M-p} replaces the -contents of the minibuffer with the next earlier recorded command, and -@kbd{M-n} replaces it with the next later command. After finding the -desired previous command, you can edit its expression and then -resubmit it by typing @key{RET}. Any editing you have done on the -command to be repeated is lost if you use @kbd{M-n} or @kbd{M-p}. - -@kbd{M-n} and @kbd{M-p} are specially defined within @kbd{C-x @key{ESC}} -to run the commands @code{previous-history-element} and + If you are in the minibuffer for @kbd{C-x @key{ESC} @key{ESC}} and the +command shown to you is not the one you want to repeat, you can move +around the list of previous commands using @kbd{M-n} and @kbd{M-p}. +@kbd{M-p} replaces the contents of the minibuffer with the next earlier +recorded command, and @kbd{M-n} replaces it with the next later command. +After finding the desired previous command, you can edit its expression +and then resubmit it by typing @key{RET}. Any editing you have done on +the command to be repeated is lost if you use @kbd{M-n} or @kbd{M-p}. + +@kbd{M-n} and @kbd{M-p} are specially defined within @kbd{C-x @key{ESC} +@key{ESC}} to run the commands @code{previous-history-element} and @code{next-history-element}. @vindex command-history diff --git a/man/xemacs/regs.texi b/man/xemacs/regs.texi index 9435e1e..fe7810f 100644 --- a/man/xemacs/regs.texi +++ b/man/xemacs/regs.texi @@ -3,22 +3,20 @@ @chapter Registers @cindex registers - Emacs @dfn{registers} are places in which you can save text or -positions for later use. Text saved in a register can be copied into -the buffer once or many times; a position saved in a register is used by -moving point to that position. Rectangles can also be copied into and -out of registers (@pxref{Rectangles}). + XEmacs @dfn{registers} are places in which you can save text or +positions for later use. Once you save text or a rectangle in a +register, you can copy it into the buffer once or many times; a position +saved in a register is used by moving point to that position. +Rectangles can also be copied into and out of registers +(@pxref{Rectangles}). - Each register has a name, which is a single character. A register can -store either a piece of text, a position, or a rectangle, but only one -thing at any given time. Whatever you store in a register remains -there until you store something else in that register. - -@menu -* RegPos:: Saving positions in registers. -* RegText:: Saving text in registers. -* RegRect:: Saving rectangles in registers. -@end menu +@findex view-register + Each register has a name which is a single character. A register can +store a piece of text, a rectangle, a position, a window configuration, +or a file name, but only one thing at any given time. Whatever you +store in a register remains there until you store something else in that +register. To see what a register @var{r} contains, use @kbd{M-x +view-register}. @table @kbd @item M-x view-register @key{RET} @var{r} @@ -29,34 +27,49 @@ Display a description of what register @var{r} contains. @kbd{M-x view-register} reads a register name as an argument and then displays the contents of the specified register. +@menu +* Position: RegPos. Saving positions in registers. +* Text: RegText. Saving text in registers. +* Rectangle: RegRect. Saving rectangles in registers. +* Configurations: RegConfig. Saving window configurations in registers. +* Files: RegFiles. File names in registers. +* Numbers: RegNumbers. Numbers in registers. +* Bookmarks:: Bookmarks are like registers, but persistent. +@end menu + @node RegPos, RegText, Registers, Registers @section Saving Positions in Registers - Saving a position records a spot in a buffer so you can move -back there later. Moving to a saved position re-selects the buffer -and moves point to the spot. + Saving a position records a place in a buffer so that you can move +back there later. Moving to a saved position switches to that buffer +and moves point to that place in it. @table @kbd -@item C-x r SPC @var{r} -Save the location of point in register @var{r} (@code{point-to-register}). +@item C-x r @key{SPC} @var{r} +Save position of point in register @var{r} (@code{point-to-register}). @item C-x r j @var{r} -Jump to the location saved in register @var{r} (@code{register-to-point}). +Jump to the position saved in register @var{r} (@code{jump-to-register}). @end table @kindex C-x r SPC @findex point-to-register - To save the current location of point in a register, choose a name -@var{r} and type @kbd{C-x r SPC @var{r}}. The register @var{r} retains -the location thus saved until you store something else in that -register.@refill + To save the current position of point in a register, choose a name +@var{r} and type @kbd{C-x r @key{SPC} @var{r}}. The register @var{r} +retains the position thus saved until you store something else in that +register. @kindex C-x r j -@findex register-to-point - The command @kbd{C-x r j @var{r}} moves point to the location recorded +@findex jump-to-register + The command @kbd{C-x r j @var{r}} moves point to the position recorded in register @var{r}. The register is not affected; it continues to record the same location. You can jump to the same position using the same register as often as you want. + If you use @kbd{C-x r j} to go to a saved position, but the buffer it +was saved from has been killed, @kbd{C-x r j} tries to create the buffer +again by visiting the same file. Of course, this works only for buffers +that were visiting files. + @node RegText, RegRect, RegPos, Registers @section Saving Text in Registers @@ -65,46 +78,234 @@ can be impractical to use the kill ring, since each subsequent kill moves the piece of text further down on the ring. It becomes hard to keep track of the argument needed to retrieve the same text with @kbd{C-y}. An alternative is to store the text in a register with @kbd{C-x r s} -(@code{copy-to-register}) and then retrieve it with @kbd{C-x r g} +(@code{copy-to-register}) and then retrieve it with @kbd{C-x r i} (@code{insert-register}). @table @kbd @item C-x r s @var{r} Copy region into register @var{r} (@code{copy-to-register}). @item C-x r g @var{r} +@itemx C-x r i @var{r} Insert text contents of register @var{r} (@code{insert-register}). @end table @kindex C-x r s @kindex C-x r g +@kindex C-x r i @findex copy-to-register @findex insert-register @kbd{C-x r s @var{r}} stores a copy of the text of the region into the -register named @var{r}. Given a numeric argument, @kbd{C-x r s} deletes the -text from the buffer as well. +register named @var{r}. Given a numeric argument, @kbd{C-x r s @var{r}} +deletes the text from the buffer as well. - @kbd{C-x r g @var{r}} inserts the text from register @var{r} in the buffer. -By default it leaves point before the text and places the mark after it. -With a numeric argument, it puts point after the text and the mark -before it. + @kbd{C-x r i @var{r}} inserts the text from register @var{r} in the buffer. +By default it leaves point before the text and places the mark after +it. With a numeric argument (@kbd{C-u}), it puts point after the text +and the mark before it. -@node RegRect,, RegText, Registers +@node RegRect, RegConfig, RegText, Registers @section Saving Rectangles in Registers @cindex rectangle -@findex copy-region-to-rectangle A register can contain a rectangle instead of lines of text. The rectangle is represented as a list of strings. @xref{Rectangles}, for basic information on rectangles and how to specify rectangles in a buffer. @table @kbd +@findex copy-rectangle-to-register +@kindex C-x r r @item C-x r r @var{r} -Copy the region-rectangle into register @var{r}(@code{copy-rectangle-to-register}). -With a numeric argument, delete it as well. +Copy the region-rectangle into register @var{r} +(@code{copy-rectangle-to-register}). With a numeric argument, delete it +as well. @item C-x r g @var{r} +@itemx C-x r i @var{r} Insert the rectangle stored in register @var{r} (if it contains a rectangle) (@code{insert-register}). @end table - The @kbd{C-x r g} command inserts linear text if the register contains + The @kbd{C-x r i @var{r}} command inserts linear text if the register + contains that, or inserts a rectangle if the register contains one. + + See also the command @code{sort-columns}, which you can think of +as sorting a rectangle. @xref{Sorting}. + +@node RegConfig, RegNumbers, RegRect, Registers +@section Saving Window Configurations in Registers + +@findex window-configuration-to-register +@findex frame-configuration-to-register +@kindex C-x r w +@c @kindex C-x r f + You can save the window configuration of the selected frame in a +register, or even the configuration of all windows in all frames, and +restore the configuration later. + +@table @kbd +@item C-x r w @var{r} +Save the state of the selected frame's windows in register @var{r} +(@code{window-configuration-to-register}). +@c @item C-x r f @var{r} +@item M-x frame-configuration-to-register @key{RET} @var{r} +Save the state of all frames, including all their windows, in register +@var{r} (@code{frame-configuration-to-register}). +@end table + + Use @kbd{C-x r j @var{r}} to restore a window or frame configuration. +This is the same command used to restore a cursor position. When you +restore a frame configuration, any existing frames not included in the +configuration become invisible. If you wish to delete these frames +instead, use @kbd{C-u C-x r j @var{r}}. + +@node RegNumbers, RegFiles, RegConfig, Registers +@section Keeping Numbers in Registers + + There are commands to store a number in a register, to insert +the number in the buffer in decimal, and to increment it. These commands +can be useful in keyboard macros (@pxref{Keyboard Macros}). + +@table @kbd +@item C-u @var{number} C-x r n @var{reg} +@kindex C-x r n +@findex number-to-register +Store @var{number} into register @var{reg} (@code{number-to-register}). +@item C-u @var{number} C-x r + @var{reg} +@kindex C-x r + +@findex increment-register +Increment the number in register @var{reg} by @var{number} +(@code{increment-register}). +@item C-x r g @var{reg} +Insert the number from register @var{reg} into the buffer. +@end table + + @kbd{C-x r g} is the same command used to insert any other +sort of register contents into the buffer. + +@node RegFiles, Bookmarks, RegNumbers, Registers +@section Keeping File Names in Registers + + If you visit certain file names frequently, you can visit them more +conveniently if you put their names in registers. Here's the Lisp code +used to put a file name in a register: + +@smallexample +(set-register ?@var{r} '(file . @var{name})) +@end smallexample + +@need 3000 +@noindent +For example, + +@smallexample +(set-register ?z '(file . "/usr/src/xemacs/src/ChangeLog")) +@end smallexample + +@noindent +puts the file name shown in register @samp{z}. + + To visit the file whose name is in register @var{r}, type @kbd{C-x r j +@var{r}}. (This is the same command used to jump to a position or +restore a frame configuration.) + +@node Bookmarks, , RegFiles, Registers +@section Bookmarks +@cindex bookmarks + + @dfn{Bookmarks} are somewhat like registers in that they record +positions you can jump to. Unlike registers, they have long names, and +they persist automatically from one Emacs session to the next. The +prototypical use of bookmarks is to record ``where you were reading'' in +various files. + + Note: bookmark.el is distributed in edit-utils package. You need to +install that to use bookmark facility (@pxref{Packages}). + +@table @kbd +@item C-x r m @key{RET} +Set the bookmark for the visited file, at point. + +@item C-x r m @var{bookmark} @key{RET} +@findex bookmark-set +Set the bookmark named @var{bookmark} at point (@code{bookmark-set}). + +@item C-x r b @var{bookmark} @key{RET} +@findex bookmark-jump +Jump to the bookmark named @var{bookmark} (@code{bookmark-jump}). + +@item C-x r l +@findex list-bookmarks +List all bookmarks (@code{list-bookmarks}). + +@item M-x bookmark-save +@findex bookmark-save +Save all the current bookmark values in the default bookmark file. +@end table + +@kindex C-x r m +@findex bookmark-set +@kindex C-x r b +@findex bookmark-jump + The prototypical use for bookmarks is to record one current position +in each of several files. So the command @kbd{C-x r m}, which sets a +bookmark, uses the visited file name as the default for the bookmark +name. If you name each bookmark after the file it points to, then you +can conveniently revisit any of those files with @kbd{C-x r b}, and move +to the position of the bookmark at the same time. + +@kindex C-x r l + To display a list of all your bookmarks in a separate buffer, type +@kbd{C-x r l} (@code{list-bookmarks}). If you switch to that buffer, +you can use it to edit your bookmark definitions or annotate the +bookmarks. Type @kbd{C-h m} in that buffer for more information about +its special editing commands. + + When you kill XEmacs, XEmacs offers to save your bookmark values in +your default bookmark file, @file{~/.emacs.bmk}, if you have changed any +bookmark values. You can also save the bookmarks at any time with the +@kbd{M-x bookmark-save} command. The bookmark commands load your +default bookmark file automatically. This saving and loading is how +bookmarks persist from one XEmacs session to the next. + +@vindex bookmark-save-flag + If you set the variable @code{bookmark-save-flag} to 1, then each +command that sets a bookmark will also save your bookmarks; this way, +you don't lose any bookmark values even if XEmacs crashes. (The value, +if a number, says how many bookmark modifications should go by between +saving.) + +@vindex bookmark-search-size + Bookmark position values are saved with surrounding context, so that +@code{bookmark-jump} can find the proper position even if the file is +modified slightly. The variable @code{bookmark-search-size} says how +many characters of context to record, on each side of the bookmark's +position. + + Here are some additional commands for working with bookmarks: + +@table @kbd +@item M-x bookmark-load @key{RET} @var{filename} @key{RET} +@findex bookmark-load +Load a file named @var{filename} that contains a list of bookmark +values. You can use this command, as well as @code{bookmark-write}, to +work with other files of bookmark values in addition to your default +bookmark file. + +@item M-x bookmark-write @key{RET} @var{filename} @key{RET} +@findex bookmark-write +Save all the current bookmark values in the file @var{filename}. + +@item M-x bookmark-delete @key{RET} @var{bookmark} @key{RET} +@findex bookmark-delete +Delete the bookmark named @var{bookmark}. + +@item M-x bookmark-insert-location @key{RET} @var{bookmark} @key{RET} +@findex bookmark-insert-location +Insert in the buffer the name of the file that bookmark @var{bookmark} +points to. + +@item M-x bookmark-insert @key{RET} @var{bookmark} @key{RET} +@findex bookmark-insert +Insert in the buffer the @emph{contents} of the file that bookmark +@var{bookmark} points to. +@end table diff --git a/man/xemacs/xemacs.texi b/man/xemacs/xemacs.texi index 0ad18f7..cbbf13c 100644 --- a/man/xemacs/xemacs.texi +++ b/man/xemacs/xemacs.texi @@ -90,9 +90,8 @@ translation approved by the author instead of in the original English. @page @ifinfo @node Top, License,, (dir) +@top The XEmacs Editor -The XEmacs Editor -***************** XEmacs is the extensible, customizable, self-documenting real-time display editor. This Info file describes how to edit with Emacs diff --git a/nt/ChangeLog b/nt/ChangeLog index 993621f..dcf8740 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,23 @@ +2000-01-18 Martin Buchholz + + * XEmacs 21.2.27 is released. + +2000-01-18 Martin Buchholz + + * minitar.c: Errno.h --> errno.h. Remove errno declaration. + +2000-01-13 Kirill 'Big K' Katsnelson + + * xemacs.mak: Added USE_PORTABLE_DUMPER make command line macro. + (temacs:) Added dependency for lastfile.lib so that 'make temacs' + builds it first. + +1999-12-28 Scott Blachowicz + + * minitar.mak: Add vars to allow building from main xemacs.mak. + + * xemacs.mak: Add rules to build & install minitar. + 1999-12-31 Martin Buchholz * XEmacs 21.2.26 is released. diff --git a/nt/config.h b/nt/config.h index e012c18..7571782 100644 --- a/nt/config.h +++ b/nt/config.h @@ -611,16 +611,8 @@ on various systems. */ /* Should movemail use hesiod for getting POP server host? */ #undef HESIOD /* Determine type of mail locking. */ -/* Play preprocessor games so that configure options override s&m files */ -#undef REAL_MAIL_USE_LOCKF -#undef REAL_MAIL_USE_FLOCK -#undef MAIL_USE_LOCKF -#undef MAIL_USE_FLOCK -#ifdef REAL_MAIL_USE_FLOCK -#define MAIL_USE_FLOCK -#endif -#ifdef REAL_MAIL_USE_LOCKF -#define MAIL_USE_LOCKF -#endif +#undef MAIL_LOCK_LOCKF +#undef REAL_LOCK_FLOCK +#undef MAIL_LOCK_DOT #endif /* _SRC_CONFIG_H_ */ diff --git a/nt/minitar.c b/nt/minitar.c index 75127f6..2fa8b52 100644 --- a/nt/minitar.c +++ b/nt/minitar.c @@ -13,7 +13,7 @@ #include -#include +#include #include @@ -43,7 +43,6 @@ int makepath(char *path) { char tmp[MAXNAMELEN]; char *cp; - extern int errno; for (cp=path; cp; cp = (char*)strchr(cp+1,'/')){ if (!*cp) diff --git a/nt/minitar.mak b/nt/minitar.mak index 6218f56..50e5c0d 100644 --- a/nt/minitar.mak +++ b/nt/minitar.mak @@ -1,10 +1,12 @@ ZLIB=\path\to\zlib +LIB_SRC=. +NT=. -all: minitar.exe +all: $(LIB_SRC)\minitar.exe -minitar.exe: minitar.obj - cl -o minitar.exe minitar.obj $(ZLIB)\zlib.lib +$(LIB_SRC)\minitar.exe: $(LIB_SRC)\minitar.obj + cl -o $@ $(LIB_SRC)\minitar.obj $(ZLIB)\zlib.lib -minitar.obj: minitar.c - cl -c minitar.c -I $(ZLIB) +$(LIB_SRC)\minitar.obj: $(NT)\minitar.c + cl -Fo$@ -c $(NT)\minitar.c -I $(ZLIB) diff --git a/nt/xemacs.mak b/nt/xemacs.mak index 9090b73..e04f1c3 100644 --- a/nt/xemacs.mak +++ b/nt/xemacs.mak @@ -129,12 +129,18 @@ DEBUG_XEMACS=0 !if !defined(USE_UNION_TYPE) USE_UNION_TYPE=0 !endif +!if !defined(USE_MINITAR) +USE_MINITAR=1 +!endif !if !defined(USE_MINIMAL_TAGBITS) USE_MINIMAL_TAGBITS=0 !endif !if !defined(USE_INDEXED_LRECORD_IMPLEMENTATION) USE_INDEXED_LRECORD_IMPLEMENTATION=0 !endif +!if !defined(USE_PORTABLE_DUMPER) +USE_PORTABLE_DUMPER=0 +!endif !if !defined(GUNG_HO) GUNG_HO=0 !endif @@ -341,6 +347,10 @@ TAGBITS_DEFINES=-DUSE_MINIMAL_TAGBITS LRECORD_DEFINES=-DUSE_INDEXED_LRECORD_IMPLEMENTATION !endif !if $(USE_UNION_TYPE) +!if $(USE_PORTABLE_DUMPER) +DUMPER_DEFINES=-DPDUMP +!endif + UNION_DEFINES=-DUSE_UNION_TYPE !endif @@ -359,7 +369,7 @@ PATH_DEFINES=-DPATH_PREFIX=\"$(PATH_PREFIX)\" INCLUDES=$(X_INCLUDES) $(MSW_INCLUDES) -I$(XEMACS)\nt\inc -I$(XEMACS)\src -I$(XEMACS)\lwlib DEFINES=$(X_DEFINES) $(MSW_DEFINES) $(MULE_DEFINES) \ - $(TAGBITS_DEFINES) $(LRECORD_DEFINES) $(UNION_DEFINES) \ + $(TAGBITS_DEFINES) $(LRECORD_DEFINES) $(UNION_DEFINES) $(DUMPER_DEFINES)\ -DWIN32 -D_WIN32 -DWIN32_LEAN_AND_MEAN -DWINDOWSNT -Demacs \ -DHAVE_CONFIG_H $(PROGRAM_DEFINES) $(PATH_DEFINES) @@ -428,6 +438,8 @@ $(LIB_SRC)/movemail.exe: $(LIB_SRC)/movemail.c $(LIB_SRC)/pop.c $(ETAGS_DEPS) cd $(LIB_SRC) $(CCV) -I. -I$(XEMACS)/src -I$(XEMACS)/nt/inc $(LIB_SRC_DEFINES) $(CFLAGS) -Fe$@ $** wsock32.lib -link -incremental:no cd $(NT) +$(LIB_SRC)/minitar.exe : $(NT)/minitar.mak $(NT)/minitar.c + nmake -nologo -f minitar.mak ZLIB="$(ZLIB_DIR)" NT="$(NT)" LIB_SRC="$(LIB_SRC)" LIB_SRC_TOOLS = \ $(LIB_SRC)/make-docfile.exe \ @@ -437,6 +449,14 @@ LIB_SRC_TOOLS = \ $(LIB_SRC)/sorted-doc.exe \ $(LIB_SRC)/wakeup.exe \ $(LIB_SRC)/etags.exe +!if $(USE_MINITAR) +LIB_SRC_TOOLS = \ + $(LIB_SRC_TOOLS) \ + $(LIB_SRC)/minitar.exe +!endif + +# Shorthand target +minitar: $(LIB_SRC)/minitar.exe #------------------------------------------------------------------------------ @@ -1142,6 +1162,7 @@ $(DOC): $(LIB_SRC)\make-docfile.exe $(LIB_SRC)\make-docfile.exe -a $(DOC) -d $(TEMACS_SRC) $(DOC_SRC9) update-elc: + set EMACSBOOTSTRAPMODULEPATH=$(MODULES) set EMACSBOOTSTRAPLOADPATH=$(LISP);$(PACKAGE_PATH) set EMACSBOOTSTRAPMODULEPATH=$(MODULES) $(TEMACS) -batch -l $(TEMACS_DIR)\..\lisp\update-elc.el @@ -1163,7 +1184,7 @@ all: $(XEMACS)\Installation $(OUTDIR)\nul $(LASTFILE) $(LWLIB) \ $(LIB_SRC_TOOLS) $(RUNEMACS) $(TEMACS) update-elc $(DOC) dump-xemacs \ $(LISP)/auto-autoloads.el $(LISP)/custom-load.el info -temacs: $(TEMACS) +temacs: $(LASTFILE) $(TEMACS) # use this rule to install the system install: all @@ -1321,6 +1342,9 @@ XEmacs $(XEMACS_VERSION_STRING) $(xemacs_codename:"=\") configured for `$(EMACS_ !if $(USE_UNION_TYPE) Using union type for Lisp object storage. !endif +!if $(USE_PORTABLE_DUMPER) + Using portable dumper. +!endif !if $(DEBUG_XEMACS) Compiling in extra debug checks. XEmacs will be slow! !endif diff --git a/src/ChangeLog b/src/ChangeLog index 2ba3d85..b0a23b9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1666,8477 +1666,205 @@ (Vcharset_thai_tis620): Likewise. (Vcharset_katakana_jisx0201): Likewise. -1999-12-31 Martin Buchholz +2000-01-18 Martin Buchholz - * XEmacs 21.2.26 is released. + * XEmacs 21.2.27 is released. -1999-12-31 Andy Piper +2000-01-18 Martin Buchholz - * glyphs-x.c (x_widget_instantiate): Avoid X errors calling - XMapWindow() on a NULL pointer X window. + * glyphs-eimage.c (struct tiff_error_struct): + (tiff_error_func): + (tiff_warning_func): + #if HAVE_VSNPRINTF ==> #ifdef HAVE_VSNPRINTF -1999-12-31 Martin Buchholz + * unexmips.c: + * unexhp9k3.c: + * unexfreebsd.c: + * unexec.c: Remove vestigial Lucid C code. + * unexalpha.c: + * unexaix.c: + * termcap.c: + * libsst.c: Ansify. + Remove declarations of errno and strerror(). - * data.c (indirect_function): Use signal_void_function_error(). + * eval.c (Fbacktrace): Small Purify-cation. Fix docstring. - * lisp.h: Modify prototypes for signal_*(). Add SUBR_FUNCTION macro. + * .dbxrc (run-temacs): Use the horrible ${1+"$@"} instead of "$@". - * eval.c (PRIMITIVE_FUNCALL): Optimize. - (signal_void_function_error): return result of Fsignal(). - (signal_invalid_function_error): return result of Fsignal(). - (signal_wrong_number_of_arguments_error): return result of Fsignal(). - (signal_malformed_list_error): Add DOESNT_RETURN. - (signal_malformed_property_list_error): Add DOESNT_RETURN. - (signal_circular_list_error): Add DOESNT_RETURN. - (signal_circular_property_list_error): Add DOESNT_RETURN. - (Feval): Use returned results of signal_*(). Avoids a crash! - (Ffuncall): Use returned results of signal_*(). Avoids the crash: - (setq debug-on-error t) (funcall 'foo) kbd{r42} kbd{RET} - - Only check for fun_nargs < subr_min_args if fun_nargs != max_args. - (function_argcount): Use signal_invalid_function_error(). - (funcall_lambda): Use signal_wrong_number_of_arguments_error(). - Use signal_invalid_function_error(). - -1999-12-28 Andy Piper - - * debug.c: rename debug_loop elements to X_ to avoid name clashes. - - * menubar-x.c (menu_item_descriptor_to_widget_value_1): strdup - string_chars. - (menu_item_descriptor_to_widget_value_1): strdup name. - (pre_activate_callback): strdup name. - - * scrollbar-x.c (scrollbar_instance_to_widget_value): strdup name. - (x_update_scrollbar_instance_status): use free_widget_value_tree. - - * dialog-x.c (maybe_run_dbox_text_callback): strdup name. use - free_widget_value_tree. - (dbox_descriptor_to_widget_value): ditto. - - * gui-x.c (widget_value_unwind): use free_widget_value_tree. - (gui_items_to_widget_values_1): ditto. - (gui_items_to_widget_values): ditto. - (free_popup_widget_value_tree): free name. - -1999-12-27 Andy Piper - - * nt.c (fstat): use get_osfhandle rather than the handle - directly. From Fabrice Popineau. - - * process-nt.c (nt_open_network_stream): take types into account - when warning. From Fabrice Popineau. - -1999-12-24 Martin Buchholz - - * XEmacs 21.2.25 is released. - -1999-12-22 Yoshiki Hayashi - - * syntax.c (vars_of_syntax): Initialize parse-sexp_ignore_comments. - -1999-12-21 Martin Buchholz - - * editfns.c (Fpoint_min): - (Fpoint_min_marker): - (Fpoint_max): - (Fpoint_max_marker): - (Fchar_after): - (Fchar_before): - Docstring fixes. What's a `buffer pointer' anyways? - - * editfns.c (char=): Remove unused and undocumented optional - third BUFFER argument. - - * toolbar.h (DEVICE_SUPPORTS_TOOLBARS_P): - * fns.c (plists_differ): - * elhash.c (HASH_CODE): - * elhash.c (KEYS_EQUAL_P): - * redisplay-output.c (redisplay_move_cursor): - * redisplay.c (create_text_block): - * floatfns.c (Flogb): - * glyphs-msw.c (mswindows_initialize_image_instance_mask): - * glyphs-msw.c (xpm_to_eimage): - * buffer.h (POINT_MARKER_P): - * syntax.c (scan_lists): - * cmdloop.c (Fcommand_loop_1): - * widget.c (Fwidget_apply): - * regex.c (STREQ): - Remove extra parens, esp. of the form ((expr)) - - * floatfns.c (Flogb): Make 64-bit clean. - -1999-12-12 Daniel Pittman - - * configure.in: - * configure.usage: - Clean up Athena widget support: - - Add `with-athena' to select a variant. - - Remove all `athena3d' options. - - Robust detection of Athena libraries and headers. - - Refuse to build with mismatched library and headers. - - Only build a 3d Athena if the user asks for it. - -1999-12-21 Andy Piper - - * redisplay.c (redisplay_frame): check for faces changed when - reseting subwindow caches. - - * glyphs.h (struct ii_keyword_entry): add copy_p. - (struct image_instantiator_methods): add query_geometry_method and - layout_children_method. - (IIFORMAT_VALID_GENERIC_KEYWORD): new macro to take into account - copying characteristics of keywords. - (IIFORMAT_VALID_NONCOPY_KEYWORD): new macro for defining keywords - whose arguments should not be copied by the specifier code. - (image_instance_geometry): new enum for layouts. - (struct Lisp_Image_Instance): re-jig for layouts and update - macros. - - * glyphs.c (string_instantiate): rename variables. - (image_instantiate): add strings to those widgets that are - instantiated per-window. - (image_copy_vector_instantiator): new function for copying glyph - specifier instantiators. - (image_copy_instantiator): ditto. +2000-01-16 Martin Buchholz - * glyphs-x.c (x_update_subwindow): use new face update functions. - (update_widget_face): update to use new lwlib arg functions. - (update_tab_widget_face): new function for updating tab control - label faces. - (x_widget_instantiate): use new face update functions and new - lwlib arg functions. - (x_tab_control_instantiate): ditto. - (x_tab_control_set_property): ditto. - - * glyphs-widget.c (VALID_GUI_KEYWORDS): use NONCOPY keyword for - callbacks and other things that could recurse. - (VALID_GUI_KEYWORDS): - - * event-msw.c: fix cpp stuff for cygwin < b20. - - * config.h.in: move uid_t and friends to before the s&m files so - that they can be used there. - - * Makefile.in.in (debug-temacs): new target that adds emacs - environment before invoking gdb. - - * lwlib.h (_widget_args): new structure for holding widget - args. It is reference counted so that we don't have to copy Xt - args. - (_widget_value): remove widget args. Add reference to widget_args. - - * lwlib.c (free_widget_value_contents): free widget args using - free_widget_value_args. - - * lwlib-Xaw.c (xaw_update_one_widget): use new arg packet. - (xaw_update_one_widget): use XtIsSubclass for determining labels. - - * lwlib.c (lw_add_value_args_to_args): modify to use our reference - counted arg packet. - (lw_add_widget_value_arg): new function. Add an arg to the arg - packet. - (free_widget_value_args): new function. Remove a reference counted - arg packet. - (lw_copy_widget_value_args): new function. Copy reference counted - arg packet. - (merge_widget_value_args): new function. Do a merge of widget - args. - (merge_widget_value): use it. - (copy_widget_value_tree): copy widget args using reference - counting, since we can't easily copy the args we have been given. - - * specifier.h (struct specifier_methods): add copy_instantiator_method. - - * specifier.c (build_up_processed_list): use - copy_instantiator_method if defined. - -1999-12-19 Martin Buchholz - - * fns.c (Ffillarray): Use O(N), not O(N^2) algorithm for strings. - -1999-12-19 Hrvoje Niksic - - * profile.c (sigprof_handler): FUN retrieved from the backtrace - can also be a cons representing anonymous interpreted function. - -1999-12-18 Martin Buchholz - - * fns.c (mapcar1): - (Fmapconcat): - (Fmapcar): - (Fmapvector): - Docstring fixes. Make them consistent with the lispref and ANSI Lisp. - -1999-12-17 Martin Buchholz - - * print.c (print_internal): print ?+ instead of ?\+, etc... - Make printing a little more efficient. - Prevent buffer overflow if sizeof EMACS_INT > 8. - My first 128-bit fix! - -1999-12-14 Karl M. Hegbloom - - * filelock.c (unlock_all_files): GC_CONSP should be CONSP - -1999-12-17 Martin Buchholz - - * database.c: - * window.c: - * event-stream.c: - Remove last vestigial uses of GC_* - - * fns.c (mapcar1): Fix ***THREE*** obscure crashes in one function! - - Two of those involve evil mapping functions that destructively - modify a list being mapped over. - - Any garbage collection when mapping over a string could cause a - crash (typically in mapconcat). - -1999-12-08 Adrian Aichner - - * s\windowsnt.h (DIRECTORY_SEP): Initialize from - `Vdirectory_sep_char'. - - * lisp.h: Add declaration for `Vdirectory_sep_char' to allow - customization of `DIRECTORY_SEP' under native Windows NT. - -1999-12-14 Katsumi Yamaoka - - * buffer.c (Fbury_buffer): Add directions to the docstring. - -1999-12-14 Martin Buchholz - - * XEmacs 21.2.24 is released. - -1999-12-13 Martin Buchholz - - * sound.c (vars_of_sound): Provide esd-sound if HAVE_ESD_SOUND - - * nas.c: Fix compiler warnings. Ansify. C++ compilation support. - -1999-12-13 Kazuyuki IENAGA - - * input-method-xlib.c: Make sure src/ does not use Athena, except - indirectly through lwlib. - -1999-12-13 Gunnar Evermann - - * dbxrc (pobj): Add opaque_ptr, remove opaque_list. - -1999-12-10 Shenghuo ZHU - - * file-coding.c (add_coding_system_to_list_mapper): - - (coding-system-list) should list aliases correctly. - -1999-12-07 Andy Piper - - * fileio.c (vars_of_fileio): directory separator fix from Mike Alexander. - * windowsnt.h (ditto): - -1999-11-27 Adrian Aichner - - * sysfile.h: Encapsulate `fstat' for Windows NT just like stat to - get consistent file modification times. - - * sysdep.h: Declare `wait_for_termination' to use process handle, - not PID, on Windows NT native. - - * sysdep.c (wait_for_termination): Use process handle, not PID, on - Windows NT native. Set exit code correctly on Windows NT. - (sys_subshell): Use process handle, not PID, - on Windows NT native. - (sys_fstat): Add ENCAPSULATE_FSTAT for Windows NT. - - * process-nt.c (nt_create_process): Remove negative pid hack for - Windows 95. - (nt_send_process): Declare vol_proc volatile. - (get_internet_address): warn_when_safe if IP address cannot be - found. - (nt_open_network_stream): warn_when_safe if network stream fails - to open. - - * ntproc.c (create_child): Remove negative pid hack for Windows - 95. Remove incorrect and unnecessary USE_UNION_TYPE handling. - - * nt.c (fstat): Encapsulate for Windows NT just like stat to get - consistent file modification times. - - * callproc.c (call_process_cleanup): Use process handle, not PID, - on Windows NT native. - (Fcall_process_internal): Ditto. Close fd_error in parent. Don't - check for negative pid on Windows NT/9[58]. - -1999-12-07 Martin Buchholz - - * XEmacs 21.2.23 is released. - -1999-12-06 Martin Buchholz - - * events.c (Fcopy_event): Don't copy the lrecord_header. - - * lisp.h (DO_REALLOC): + * mule-charset.c (Fchar_octet): Resurrect from earlier in 1999. Optimize. - Remove redundant parens. - Remove generic hygienic macro comment. - - * lrecord.h (set_lheader_implementation): Remove redundant parens. - -1999-12-05 Martin Buchholz - - * lstream.c (Lstream_adding): - - Never compare a size_t and a possibly negative number. - - Optimize. - -1999-12-05 Kyle Jones - - * lisp/itimer.el: (require 'lisp-float-type). Use - floats directly in itimer-time-difference. - -1999-12-05 Andy Piper - - * redisplay-output.c (redisplay_output_layout): avoid name hiding. - - * gui.h: declare gui_add_item_keywords_to_plist. - - * window.c (Fdelete_window): mark subwindows as changed so that - they can be GC'd if necessary. - -1999-12-02 Jan Vroonhof - - * src/callproc.c (Fcall_process_internal): Be careful in writing - terminating null when copying args. nargs can be < 4. - Idea from Klaus Frank - -1999-11-29 Kyle Jones - - * src/sound.c (Fding): Remove zero initialization of - static variables to avoid crashes on systems that dump - the initialized data segment read-only. - -1999-12-05 Jan Vroonhof - - * glyphs-x.c (convert_EImage_to_XImage): Guard against other - visual classes. From Rasmus Borup Hansen - -1999-12-04 Martin Buchholz - - * lstream.c: (filedesc_reader): - (filedesc_writer): Try number 2: Support broken systems where - return type of read() and write() is different from ssize_t. - - * systty.h: - * sysdep.h: - * sysdep.c: - - Replace macro calls to EMACS_GET_TTY and EMACS_SET_TTY with - function equivalents emacs_get_tty() and emacs_set_tty(). - - Moved prototypes to systty.h, where struct event_tty is defined. - - Renamed bogus `waitp' parameter to `flushp'. - - * lstream.c (filedesc_reader): Support broken systems where return - type of read() is different from ssize_t. - - * events.c (Fcopy_event): Avoid redundant EQ test if event2 is nil. - - * event-stream.c (menu_move_up): Remove redundant if block. - (menu_move_down): Gratuitous rewriting. - (menu_move_left): Work around Cygnus codefusion-990706 compiler bug. - (menu_move_right): Ditto. - - * lrecord.h (copy_lcrecord): - (zero_lcrecord): - Always add parentheses around uses of macro arguments. - - * sysdll.c: #include for exit(). - * unexhp9k800.x: #include for malloc(). - Use proper prototype for Save_Shared_Data(void). - -1999-12-04 Jan Vroonhof - - * src/redisplay.c (point_would_be_visible): Correct for topclip. - -1999-12-02 Hrvoje Niksic - - * lisp.h: Declare Qself_insert_defer_undo. - - * event-stream.c (Fdispatch_event): Get the magic undo thing from - a symbol property, so commands other than self-insert-command can - install it. - (syms_of_event_stream): Define Qself_insert_defer_undo. - -1999-11-30 Martin Buchholz - - * floatfns.c (emacs_rint): Rename rint to emacs_rint, so that - `#undef HAVE_RINT' works. - - * sysdep.h: Fix up prototypes for sys_read_1(), sys_write_1() - -1999-11-25 Andy Piper - - * select-msw.c (Fmswindows_set_clipboard): selection fixes from - Mike Alexander. - (Fmswindows_delete_selection): ditto. - - * redisplay.h (CLASS_REDISPLAY_FLAGS_CHANGEDP): add size_changed. - (GLOBAL_REDISPLAY_FLAGS_CHANGEDP): ditto. - - * redisplay.c (redisplay_device): move size changed to macros in - redisplay.h - (redisplay_without_hooks): ditto. - - * redisplay-output.c (redisplay_output_layout): rename to avoid - name hiding. - - * process-nt.c (struct nt_process_data): mks toolkit fixes from - Mike Alexander. - (nt_create_process): ditto. - (nt_send_process): ditto. - - * nt.c (init_environment): make sure mingw32 gets the cached - system info. - - * gui.h: declare gui_add_item_keywords_to_plist. - - * event-msw.c (mswindows_wnd_proc): Clipboard fixes from Mike - Alexander. - - * console-msw.h: fix cygwin define/header 1.0 problems. - * glyphs-msw.c: ditto. - * ntplay.c: ditto. - * unexcw.c: ditto. - * s/cygwin32/h: ditto. - -1999-11-29 XEmacs Build Bot - - * XEmacs 21.2.22 is released - -1999-11-28 Martin Buchholz - - * XEmacs 21.2.21 is released. - -1999-11-26 Martin Buchholz - - * callproc.c (Fcall_process_internal): - * config.h.in: - * esd.c: - * event-msw.c (ntpipe_slurp_reader): - * event-msw.c (ntpipe_shove_writer): - * event-msw.c (winsock_reader): - * event-msw.c (winsock_writer): - * event-stream.c (dribble_out_event): - * fileio.c: - * fileio.c (Fexpand_file_name): - * glyphs-x.c (write_lisp_string_to_temp_file): - * gpmevent.c (tty_get_foreign_selection): - * lisp.h: Update prototypes. - * lstream.c (Lstream_flush_out): - * lstream.c (Lstream_write_1): - * lstream.c (Lstream_was_blocked_p): - * lstream.c (Lstream_read_more): - * lstream.c (Lstream_read): - * lstream.c (Lstream_fputc): - * lstream.c (make_stdio_output_stream): - * lstream.c (stdio_flusher): - * lstream.c (stdio_closer): - * lstream.c (make_filedesc_output_stream): - * lstream.c (errno_would_block_p): - * lstream.c (filedesc_writer): - * lstream.c (make_lisp_string_input_stream): - * lstream.c (make_fixed_buffer_output_stream): - * lstream.c (fixed_buffer_reader): - * lstream.c (make_resizing_buffer_output_stream): - * lstream.c (make_dynarr_output_stream): - * lstream.c (make_lisp_buffer_output_stream): - * lstream.c (lisp_buffer_reader): - * lstream.h (lstream_implementation): - * md5.c (Fmd5): - * miscplay.h (reset_parsestate): - * process-nt.c (nt_send_process): - * process-unix.c (unix_send_process): - * sound.c: - * sysdep.c (sys_close): - * sysdep.c (sys_read_1): - * sysdep.c (sys_write_1): - * sysfile.h: - * file-coding.c (determine_real_coding_system): - * file-coding.c (Fdetect_coding_region): - * file-coding.c (struct decoding_stream): - * file-coding.c (decoding_reader): - * file-coding.c (Fdecode_coding_region): - * file-coding.c (struct encoding_stream): - * file-coding.c (encoding_reader): - * file-coding.c (Fencode_coding_region): - * file-coding.c (convert_to_external_format): - * file-coding.c (convert_from_external_format): - - Lstream functions mirror Unix98 read(),write(). Therefore use - Unix98 types size_t and ssize_t. - - Try to make Lstream* functions 64-bit clean. Someday someone - may actually want to read from a Lstream with more than 2**32 bytes. - - Add configure support for ssize_t. - - Update all callers of Lstream_read and Lstream_write to - use the new types. - - Fix esd* initiated C++ compile errors. - - Remove comments referring to `fpurge' - we don't want to call it - even if it's there. - - * lisp.h - - Remove some lingering Lucid compiler support. - - * lisp.h - - Add prototype for Fdelete_process. - - * gpmevent.c (Freceive_gpm_event): Remove unused variables. - -1999-11-27 Martin Buchholz - - * Makefile.in.in (depend): Only update `depend' if there were changes. - -1999-11-26 Martin Buchholz - - * editfns.c (get_system_name): Remove. - -1999-11-26 Martin Buchholz - - * device-x.c (x_init_device): - - Replace magic number `17' with equivalent expn using sizeof. - - Replace strcmp with marginally more efficient memcmp. - - Avoid using C++ reserved word `class'. - - * file-coding.c (determine_real_coding_system): - - Look for both initial and final -*- cookies. - - Replace EQ (foo, Qnil) with NILP (foo) - - Make searching for cookies more efficient. - - Recognize only rfc 1521 characters in charset names. - -1999-11-22 Kazuyuki IENAGA - - * input-method-xlib.c (IMDestroyCallback): #ifdef'd by - "THIS_IS_X11R6", because it shouldn't be evaluated unless X11R6. - * input-method-xlib.c (IMInstantiateCallback): Ditto. - * input-method-xlib.c (XIM_init_device): Revive XOpenIM function - call for X11R5 systems. - * input-method-xlib.c (XIM_delete_frame): Enabled XDestroyIC() - again because XIM doesn't concern with frame deletion itself. - The XIC will be cleared by XIM when XIM is closing (at XIM destroy - callback). - -1999-10-25 Kazuyuki IENAGA - - * input-method-xlib.c: Added new lisp object Qxim_xlib. - New macro xim_warn(str), xim_warn1(fmt,str) and xim_info(str). - All the valid stderr_out were changed to those macros. - (IMDestroyCallback): Don't test the XIC if the frame is not X - frame. - (IMInstantiateCallback): Treat the client_data as "device" not - "frame" because the caller changed from frame to device. - Here initializes XIM and activates XICs for each frame which - doesn't have XIC. - (XIM_init_device): Register the XIM instantiation callback which - had been performed by XIM_init_frame() before. - (XIM_delete_frame): Added a test for the XIM before clearing XIC. - (XIM_init_frame): Placed an actual code for XIC activation which - was moved from IMInstantiateCallback. - (syms_of_input_method_xlib): New function which includes a symbol - Qxim_xlib that uses in emacs.c. - - * emacs.c: Added a function entry "syms_of_input_method_xlib" for - input_method_xlib. - - * symsinit.h: Added a declaration of "syms_of_input_method_xlib". - -1999-11-05 Robert Pluim - - * emacs.c (shut_down_emacs): Point users to PROBLEMS file - -1999-11-16 Jan Vroonhof - - * redisplay-output.c (compare_runes): Add comments about - results from profiling. - - * redisplay.h (struct rune): Do not use bitfields for members. - (struct rune): Add various comments about further optimizations. - -1999-11-19 Eric Darve - - * abbrev.c (abbrev_oblookup): Check whether wordend <= wordstart - if Vabbrev_start_location is used too. - -1999-10-27 Yoshiki Hayashi - - * file-coding.c (detect_eol_type): Return CR when two - sequential CR are found. - (determine_real_coding_system): Check EOL type when coding: - cookie is found and EOL type is not specified. - Don't assume 8bit char as part of coding: cookie. - -1999-10-26 Yoshiki Hayashi - - * file-coding.c (determine_real_coding_system): Check if - '-*-' exists. End searching for coding: cookie at the end - of line. Check whether character before coding: is space, - tab or ';'. - -1999-11-07 William M. Perry - - * gpmevent.c: Completely rewrote GPM mouse support for linux - console. The TTY console and event stream are modified at run - time, so this code can now be used as a module. - (tty_get_foreign_selection): New function to allow pasting from - other virtual consoles. - (Fgpm_enable): New lisp-visible function to turn GPM on or off - at run time. - - * device-tty.c (tty_asynch_device_change): No longer need to - notify GPM code of window/console height/width changes. - - * console-tty.c (tty_init_console): Removed outdated GPM support - that was part of the console/event code. - - * event-Xt.c (emacs_Xt_select_console): Ditto - - * event-Xt.c (emacs_Xt_unselect_console): Ditto - - * event-unixoid.c (read_event_from_tty_or_stream_desc): Ditto - - * frame-tty.c (console_type_create_frame_tty): Ditto - -1999-11-17 Martin Buchholz - - * nt.c: - * sysdep.c: - * s/mingw32.h: - * s/windowsnt.h: - - Use Unix 98 types uid_t, gid_t, pid_t. - - Define them. - -1999-11-01 Olivier Galibert - - * alloc.c (reinit_alloc_once_early): Move purify_flag init... - * emacs.c (main_1): ...here, to get the correct value even with - the portable dumper. - -1999-11-17 Martin Buchholz - - * lisp.h (BIT_VECTOR_LONG_STORAGE): Add extra parens. It's a macro! - - * tooltalk.c (tt_build_string): Remove extra parens. - * process.c (print_process): Remove extra parens. - * buffer.h (BI_BUF_PTR_BYTE_POS): - (BUF_PTR_BYTE_POS): - (BI_BUF_BYTE_ADDRESS): - (BI_BUF_BYTE_ADDRESS_BEFORE): - (valid_memind_p): - (bytind_to_memind): - (memind_to_bytind): - Remove extra parens. Inline functions are not macros. - - * editfns.c (Fuser_login_name): - (user_login_name): - Use proper type uid_t. - -1999-11-15 Martin Buchholz - - * syntax.c (complex_vars_of_syntax): Make more readable. - (define_standard_syntax): New function. - - * syntax.c (forward-comment): Gradually make XEmacs 64-bit-clean. - -1999-11-14 Martin Buchholz - - * mule-ccl.c (CCL_WRITE_STRING): Fix compiler warnings. - -1999-11-12 Yoshiki Hayashi - - * mule-charset.h (LEADING_BYTE_OFFICIAL_1, LEADING_BYTE_OFFICIAL_2): - New enum type to make sure no gap in the leading byte definition. - -1999-11-11 Yoshiki Hayashi - - * mule-charset.h (LEADING_BYTE_CYRILLIC_ISO_8859_5, - LEADING_BYTE_LATIN_ISO8859_9): Moved to 0x8B and 0x8C - to remove a hole in leading byte definition. - -1999-11-10 Yoshiki Hayashi - - * mule-charset.c (non_ascii_valid_charptr_p): Check if - private charset is defined. - -1999-11-09 Yoshiki Hayashi - - * mule-ccl.c (ccl_driver): Make sure generated sequences - are valid when doing `CCL_WRITE_STRING'. - (ccl-execute-on-string): Pass CCL_MODE_DECODING to ccl_driver. - -1999-11-10 XEmacs Build Bot - - * XEmacs 21.2.20 is released - -1999-11-04 Martin Buchholz - - * mule-ccl.c (ccl_driver): Warning suppression - -1999-11-01 SL Baur - - * emacs.c (main_1): Guard call to reinit_vars_of_debug when not - building a debugged XEmacs. - -1999-10-28 Andreas Jaeger - - * src/emacs.c (main_1): Don't set the malloc hooks if using - DOUG_LEA_MALLOC. - -1999-10-30 Olivier Galibert - - * alloc.c (pdump_dump_rtables): Don't forget to dump the last - registered type. - (pdump): Ditto. -1999-10-25 Olivier Galibert +2000-01-14 Yoshiki Hayashi - * emacs.c (main_1): Call reinit_vars_of_scrollbar_x. - - * symsinit.h: Declare reinit_vars_of_scrollbar_x. - -1999-10-25 Martin Buchholz - - * redisplay.h (CLASS_RESET_CHANGED_FLAGS): - (GLOBAL_RESET_CHANGED_FLAGS): - (CLASS_REDISPLAY_FLAGS_CHANGEDP): - (RESET_CHANGED_SET_FLAGS): - Fix C++ compile errors/warnings. - These macros were just a tad too clever. - - * process-unix.c (unix_open_network_stream): - * objects-x.c (allocate_nearest_color): - * mule-charset.c (vars_of_mule_charset): - * fileio.c (Ffile_truename): - * file-coding.c (vars_of_file_coding): - Fix compile errors/warnings. - - * alloc.c (xstrdup): Use fact that memcpy returns its first arg. - (allocate_lisp_storage): Simplify. - -1999-10-24 Olivier Galibert - - * conslots.h: Add defines with first and last slot names. - * bufslots.h: Add defines with first and last slot names. - - * buffer.c (common_init_complex_vars_of_buffer): Renamed from - reinit_complex_vars_of_buffer - (reinit_complex_vars_of_buffer): Reset the slots to the dumped - value. - (complex_vars_of_buffer): Dump the slots values. - - * console.c (common_init_complex_vars_of_console): Renamed from - reinit_complex_vars_of_console - (reinit_complex_vars_of_console): Reset the slots to the dumped - value. - (complex_vars_of_console): Dump the slots values. - - * alloc.c: Rename reloc_table to pdump_reloc_table, rt_list to - pdump_rt_list and move them at the beginning of the file. - (gc_sweep): Unmark pdumped objects after the sweep phase. - (pdump_dump_rtables): Change a bare 256 to - last_lrecord_type_index_assigned. Add a separator between the - adresses or lrecords and the ones of C structs in the dump file. - (pdump_load): Cope with the new separator and the renamings. Stop - looking for the hash tables list after it has been found (duh!). - -1999-10-24 Robert Bihlmeyer - - * sound.c: support HAVE_ESD_SOUND - - * miscplay.c: - * miscplay.h: - * linuxplay.c: Move large part of linuxplay to generalized file - miscplay. Make it platform independent. - - * esd.c: New file - -1999-10-24 Adrian Aichner - - * lisp.h (Dynarr_declare): Fix boo-boo. - -1999-10-24 Olivier Galibert - - * process-unix.c (allocate_pty): Fix HAVE_GETPT. - * process.h: Ditto. - -1999-10-24 Jan Vroonhof - - * redisplay.c (start_with_line_at_pixpos): Remove assert(cur_elt - >=0). Handle the cur_elt == 0 case. - -1999-10-24 Jan Vroonhof - - * unexelf.c: Merge Martin's c++ fixes back in - -1999-10-20 Jan Vroonhof - - * unexelf.c (unexec): Only copy the global offset - table from memory on sgi machines. - -1999-08-13 Alexandre Oliva , Vin Shelton - - * unexelf.c: Enable GNU/Linux/alpha to build with gcc 2.95 by - adding support for an sbss section. Get IRIX 5.2 to build using - unexelf.c. - - * m/iris4d.h: Use unexelf.o for unexec. - - * m/iris5d.h: Use unexelf.o for unexec. - -1999-10-24 Jan Vroonhof - - * unexelf.c: Revert to 21.1 version - -1999-08-28 Jan Vroonhof - - * window.c (Fwindow_truncated_p): New function. - -1999-08-25 Jonathan Marten - - * window.c (window_truncation_on): Always return 0 for minibuffer - windows, to enable auto scrolling. - -1999-10-24 Neal Becker - * process.h: Unix98 PTY support - -1999-10-17 Jan Vroonhof - - * fileio.c (Ffile_truename): Do proper mule decoding on - the argument to xrealpath() - -1999-08-19 Stephen Tse - - * process-unix.c (unix_open_network_stream): Add udp network - support; rename variable Qtcpip to Qtcp, parameter family to - protocol for consistency with Qudp. - - * process-nt.c (nt_open_network_stream): Rename variable Qtcpip to - Qtcp, parameter family to protocol for consistency with Qudp. - - * process.c (global_variables): Add a new variable Qudp for udp - network support; rename variable Qtcpip to Qtcp for consistency - with Qudp. - (Fopen_network_stream_internal): Rename parameter FAMILY to - PROTOCOL for consistency; fix a minor typo and add an explanation - in docstring for udp programming. - (Fopen_multicast_group_internal): Fix a minor typo in docstring. - (syms_of_process): Add a new variable Qudp for udp network - support; rename variable Qtcpip to Qtcp for consistency with Qudp. - - * process.h (extern_variables): Add a new variable Qudp for udp - network support; rename variable Qtcpip to Qtcp for consistency - with Qudp. - - * procimpl.h: Add a new variable Qudp for udp network support; - rename variable Qtcpip to Qtcp for consistency with Qudp. - (struct process_methods): Rename parameter family to protocol. - - -1999-10-24 Olivier Galibert - - * alloc.c (pdump_make_hash): Divide pointers by 8 for a better hash. - -1999-10-23 Olivier Galibert - - * lrecord.h (struct lrecord_header): Removed dumped flags. - - * dynarr.c: Use DUMPEDP instead of dumped flag. - - * lisp.h (DUMPEDP): Added. Removed dumped flag from dynarr. - - * alloc.c: Removed hash_next linked list pointer. - - * *.c *.h: Removed markobj and mark_object parameters, removed GC_ - and XGC macros. - -1999-10-14 Andy Piper - - * redisplay-x.c (x_output_shadows): fix dodgy maths for border - calculations. - - * gutter.c (output_gutter): be more accurate about the area to be - cleared since X seems to manage to do the clear after drawing the - border. - - * redisplay.h (RESET_CHANGED_FLAGS): new macro for setting - redisplay flags as a group. - (RESET_CHANGED_SET_FLAGS): ditto. - (CLASS_RESET_CHANGED_FLAGS): ditto. - (GLOBAL_RESET_CHANGED_FLAGS): ditto. - (REDISPLAY_FLAGS_CHANGEDP): new macro for testing redisplay flags - as a group. - (CLASS_REDISPLAY_FLAGS_CHANGEDP): ditto. - (GLOBAL_REDISPLAY_FLAGS_CHANGEDP): ditto. - - * redisplay.c (redisplay_frame): use CLASS_RESET_CHANGED_FLAGS - instead of setting flags individually. - (redisplay_device): ditto CLASS_REDISPLAY_FLAGS_CHANGEDP. - (redisplay_device): ditto. - (redisplay_device): ditto CLASS_RESET_CHANGED_FLAGS. - (redisplay_without_hooks): ditto GLOBAL_REDISPLAY_FLAGS_CHANGEDP. - (redisplay_without_hooks): ditto CLASS_REDISPLAY_FLAGS_CHANGEDP. - (redisplay_without_hooks): ditto. - (redisplay_without_hooks): ditto GLOBAL_RESET_CHANGED_FLAGS. - - * redisplay-x.c (x_output_string): unmap subwindows in the area. - (x_output_blank): ditto. - - * redisplay-output.c (redisplay_output_display_block): don't unmap - subwindows in case layout optimization can avoid it. - (redisplay_output_subwindow): unmap subwindows in the area. - (redisplay_output_layout): optimize the output of layouts - only - output glyphs that have changed if nothing else of redisplay - significance has occurred. - (redisplay_output_pixmap): change args to - redisplay_clear_clipped_region. - (redisplay_clear_clipped_region): allow the clipped region to be - cleared of all subwindows except the one passed in. - - * redisplay-msw.c (mswindows_output_blank): unmap subwindows in - the area. - (mswindows_output_cursor): ditto. - (mswindows_output_string): ditto. - - * gutter.c (calculate_gutter_size): if the window buffer is nil - then don't continue. - (update_frame_gutters): be more lenient about when we actually - update the gutter. Layout optimization makes this - non-costly. Cache redisplay flags that we want to temporarily - ignore. - - * glyphs.c (Fglyph_animated_timeout_handler): handle image - specific timeouts rather than iterating over the instance cache. - (glyph_animated_timeout_mapper): deleted. - (add_glyph_animated_timeout): use a weak list to hold onto the - image so that it can be GC'ed. - (disable_glyph_animated_timeout): disable a specific timeout. - (vars_of_glyphs): disable-animated-pixmaps is a new boolean for - controlling whether pixmaps are animated or not. - - * glyphs-msw.c (mswindows_finalize_image_instance): make sure the - image timeout gets disabled when the image gets freed. - - * glyphs-eimage.c (gif_instantiate): remove meaningless - comment. Cope with timeouts specified in the gif extension block. - - * event-msw.c (vars_of_event_mswindows): new variable - mswindows-meta-activates-menu. - (mswindows_wnd_proc): only goto defproc with VK_MENU if the user - wants it. - - * glyphs-x.c (x_finalize_image_instance): delete mask first so - that we can compare with image. - -1999-10-14 Jonathan Harris - - * event-msw.c (mswindows_key_to_emacs_keysym): - Recognise keypad keys as different from normal keys. - -1999-10-14 Didier Verna - - * glyphs-x.c (x_finalize_image_instance): avoid freeing null pixmaps. - -1999-10-10 Olivier Galibert - - * symbols.c (init_symbols_once_early): dump Vquit_flag. - - * symsinit.h: Updated. - - * ntproc.c (vars_of_ntproc): Use defsymbol. - - * emacs.c (main_1): Updated reinit calls. - - * lisp.h: Removed Fpurecopy and pure_put declarations. - * fns.c: Removed pure_put. - - * eval.c (Fdefvar): pure_put -> Fput - (Fdefconst): Ditto. - * frame-x.c (init_x_prop_symbols): Ditto. - * symbols.c (deferror): Ditto. - - * alloc.c (Fmake_byte_code): Remove Fpurecopy call. - * buffer.c (vars_of_buffer): Ditto. - * bytecode.c (Ffetch_bytecode): Ditto. - (optimize_compiled_function): Ditto. - * emacs.c (vars_of_emacs): Ditto. - * emodules.c (vars_of_module): Ditto. - * eval.c (define_function): Ditto. - (Fautoload): Ditto. - * frame.c (vars_of_frame): Ditto. - * intl.c (Fset_domain): Ditto. - * lread.c (load_force_doc_string_unwind): Ditto. - * menubar.c (vars_of_menubar): Ditto. - * minibuf.c (reinit_complex_vars_of_minibuf): Ditto. - - * debug.c (reinit_vars_of_debug): Extracted. - * device-x.c (reinit_vars_of_device_x): Ditto. - * emodules.c (reinit_vars_of_module): Ditto. - * font-lock.c (reinit_vars_of_font_lock): Ditto. - * glyphs-widget.c (reinit_vars_of_glyphs_widget): Ditto. - * glyphs.c (reinit_vars_of_glyphs): Ditto. - * gui-x.c (reinit_vars_of_gui_x): Ditto. - * insdel.c (reinit_vars_of_insdel): Ditto. - * menubar-x.c (reinit_vars_of_menubar_x): Ditto. - * minibuf.c (reinit_complex_vars_of_minibuf): Ditto. - * mule-wnnfns.c (reinit_vars_of_mule_wnn): Ditto. - * print.c (reinit_vars_of_print): Ditto. - * redisplay.c (reinit_vars_of_redisplay): Ditto. - * select-x.c (reinit_vars_of_xselect): Ditto. - * undo.c (reinit_vars_of_undo): Ditto. - -1999-10-10 Olivier Galibert - - * symsinit.h: Updated declarations, see other ChangeLog entries. - - * redisplay.c (init_redisplay): Ensure proper reinitialisation. - - * lrecord.h (XD_DYNARR_DESC): Introduce XD_INT_RESET and use it. - - * glyphs.c: Add the ii_keyword_entry and related descriptions. - Fix the image_instantiator_methods one. - - * file-coding.c: Plonk all data that needs to be dumped in a - dynamically allocated structure. - - * extents.c (reinit_vars_of_extents): Extracted from - vars_of_extents. - - * event-stream.c (vars_of_event_stream): Don't staticpro when - pdump_wire is enough. - - * event-msw.c (reinit_vars_of_event_mswindows): Extracted from - vars_of_event_mswindows. - - * event-Xt.c (reinit_vars_of_event_Xt): Extracted from - vars_of_event_Xt. - - * eval.c (vars_of_eval): Don't staticpro when pdump_wire is enough. - - * emacs.c (main_1): Added some reinit calls. - - * device-x.c (reinit_console_type_create_device_x): Extracted from - console_type_create_device_x. - - * console.h: Declare the console_type_entry_dynarr description. - - * console.c: Unstatic the console_type_entry_dynarr description. - - * alloc.c: Removed some dubious comments. Handle XD_INT_RESET. - -1999-10-07 Olivier Galibert - - * symsinit.h: Updated declarations, see other ChangeLog entries. - - * minibuf.c (reinit_complex_vars_of_minibuf): Extracted from - complex_vars_of_minibuf. - - * lrecord.h: Removed XD_PARENT_INDIRECT (unused and - unimplemented), added XD_LO_LINK. - - * lisp.h (pdump_wire_list): Add declaration. - - * glyphs.h (INITIALIZE_DEVICE_IIFORMAT): Fix bug found by Andy. - (INITIALIZE_IMAGE_INSTANTIATOR_FORMAT): Fix stupid bug. - (REINITIALIZE_IMAGE_INSTANTIATOR_FORMAT): Remove, useless once the - stupid bug fixed. - - * glyphs.c (reinit_image_instantiator_format_create): Remove. - - * glyphs-x.c (reinit_image_instantiator_format_create_glyphs_x): - Remove. - - * glyphs-widget.c - (reinit_image_instantiator_format_create_glyphs_widget): Remove. - - * glyphs-msw.c - (reinit_image_instantiator_format_create_glyphs_mswindows): - Remove. - - * glyphs-eimage.c - (reinit_image_instantiator_format_create_glyphs_eimage): Remove. - - * frame.c (Fmake_frame): Don't reset the face cache when using the - stream device. - - * file-coding.c: Dumped the_codesys_prop_dynarr and added all - relevant descriptions. - - * events.c (reinit_vars_of_events): Extracted from vars_of_events. - - * eval.c: The subr is _not_ a lcrecord. - - * emacs.c (main_1): Call vars_of_specifier early before any - specifier creation (e.g in vars_of_glyphs, at least). Remove the - useless reinit_image_instantiator_format*. Add - reinit_vars_of_events and reinit_complex_vars_of_minibuf. Add - calls to lstream_type_create* and process_type_create*. - - * elhash.c: Dump Vall_weak_hash_tables correctly. - - * data.c: Dump Vall_weak_lists correctly. - - * console.c: Fix description. - - * console-stream.c (init_console_stream): Do initializations - correctly in the pdump case. - - * chartab.c: Fix description. Dump Vall_syntax_tables correctly. - (Fcopy_char_table): Link into Vall_syntax_tables. - - * alloc.c (pdump_wire_list): Added. - (Fgarbage_collect): Fix loop in stats couting missing the last - lrecord type. - (pdump_register_sub): Added XD_LO_LINK. - (pdump_dump_data): Ditto. Fixed XD_LO_RESET_NIL forgttting the - counter. - (pdump_reloc_one): Ditto. - (pdump_scan_by_alignement): Use last_lrecord_type_index_assigned - instead of 256. - (pdump_dump_wired): Added lists. - (pdump): Use last_lrecord_type_index_assigned instead of 256. - Dump last_lrecord_type_index_assigned value. Fix minor bugs. - -1999-10-07 Andy Piper - - * glyphs-msw.c (mswindows_finalize_image_instance): zero out - bitmap slices. - - * glyphs-x.c (x_finalize_image_instance): fix FMW problem. - -1999-10-06 Andy Piper - - * elhash.c (resize_hash_table): Correct reference to lrecord_header. - -1999-10-06 Damon Lipparelli - - * elhash.h: forward declare Lisp_Hash_Table. - -1999-10-06 Andy Piper - - * glyphs.c (Fset_image_instance_property): mark glyphs as dirty - after setting an image instance property. - -1999-10-05 Andy Piper - - * gutter.c (update_frame_gutters): output gutters if - windows_changed is set. This is the only way of catching changes - in selected window which obviously can affect the specifiers. - - * redisplay.c: new state flags, subwindows_state_changed and - subwindows_state_changed set. - (redisplay_window): use them. - (redisplay_device): ditto. - (redisplay_without_hooks): ditto. - (redisplay_frame): ditto. Reset subwindow cachels if - subwindows_changed is set. - (redisplay_window): call mark_glyph_cachels_as_clean after - redisplaying. - - * redisplay-x.c (x_output_x_pixmap): select correct - pixmap image for display depending on the currently selected - slice. - - * redisplay-output.c (compare_runes): check dirtiness when - checking RUNE_DGLYPH runes. - (compare_display_blocks): relax invalidation of display blocks - since we can now detect whether individual glyphs have changed or - not. - - * redisplay-msw.c (mswindows_output_dibitmap): select correct - bitmap image for display depending on the currently selected - slice. - - * glyphs.h (struct Lisp_Image_Instance): add a dirty flag. - (IMAGE_INSTANCE_DIRTYP): new macro. - (XIMAGE_INSTANCE_DIRTYP): ditto. - (MARK_IMAGE_INSTANCE_CHANGED): ditto. - (GLYPH_DIRTYP): ditto. - (XGLYPH_DIRTYP): ditto. - (MARK_GLYPH_CHANGED): ditto. - (GLYPH_CACHEL_DIRTYP): ditto. - (struct glyph_cachel): add a dirty flag. - - * glyphs.c (update_frame_subwindows): Don't update on - glyphs_changed. - (glyph_animated_timeout_mapper): new function. Map over the - instance cache lookinng for animated images to update. - (Fglyph_animated_timeout_handler): new function. Lisp callback for - handling animated image timeout events. - (disable_glyph_animated_timeout): new function. Add the animated - image timeout. - (disable_glyph_animated_timeout): new function. Remove the - animated image timeout. - (syms_of_glyphs): initialize Qglyph_animated_timeout_handler and - friends. - (vars_of_glyphs): initialize Vglyph_animated_ticker. - (image_instance_equal): add the currently displayed slice. - (image_instance_hash): ditto. - (allocate_glyph): initialize dirty flag. - (glyph_width): rename glyph -> glyph_or_image. - (glyph_height_internal): ditto. - (glyph_dirty_p): new function. Determine whether the image - instance in the domain and/or glyph is dirty. - (set_glyph_dirty_p): set the dirtiness. - (update_glyph_cachel_data): take dirtiness into account. Pass the - image instance we are interested in to glyph_width and friends. - (get_glyph_cachel_index): make non-static. Always call - update_glyph_cachel_data. - (mark_glyph_cachels_as_not_updated): meaningless formatting - change. - (mark_glyph_cachels_as_clean): new function. Clean dirtiness from - glyph cachels. - - * glyphs-x.h (struct x_image_instance_data): change - pixmap to a list of pixmaps. - (IMAGE_INSTANCE_X_PIXMAP_SLICE): new macro. - (IMAGE_INSTANCE_X_PIXMAP_SLICES): ditto. - (XIMAGE_INSTANCE_X_PIXMAP_SLICE): ditto. - (XIMAGE_INSTANCE_X_PIXMAP_SLICES): ditto. - - * glyphs-x.c (x_finalize_image_instance): make sure multi pixmap - images get deleted properly. - (init_image_instance_from_x_image): add slices paramater and use - it to initialize x_image_instance_data correctly. - (image_instance_add_x_image): new function. Add new pixmaps to our - set of instantiated pixmaps for an image. Used by animated images. - (x_init_image_instance_from_eimage): add a slices - parameter. Instantiate all images from the eimage. - (x_xpm_instantiate): update use of - init_image_instance_from_x_image. - (init_image_instance_from_xbm_inline): ditto. - (x_initialize_pixmap_image_instance): add slices paramater and use - it to allocate x_image_instance_data correctly. - - * glyphs-msw.h (struct mswindows_image_instance_data): change - bitmap to a list of bitmaps. - (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE): new macro. - (IMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES): ditto. - (XIMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICE): ditto. - (XIMAGE_INSTANCE_MSWINDOWS_BITMAP_SLICES): ditto. - - * glyphs-msw.c (init_image_instance_from_dibitmap): add slices - paramater and use it to initialize mswindows_image_instance_data - correctly. - (image_instance_add_dibitmap): new function. Add new bitmaps to - our set of instantiated bitmaps for an image. Used by animated - images. - (mswindows_init_image_instance_from_eimage): add a slices - parameter. Instantiate all images from the eimage. - (mswindows_xpm_instantiate): update use of - init_image_instance_from_dibitmap. - (bmp_instantiate): ditto. - (init_image_instance_from_xbm_inline): ditto. - (mswindows_finalize_image_instance): make sure all the bitmap - slices get deleted. - (mswindows_initialize_dibitmap_image_instance): add slices - paramater and use it to allocate mswindows_image_instance_data - correctly. - - * glyphs-eimage.c (jpeg_instantiate): give extra paramter to - init_image_instance_from_eimage. - (png_instantiate): ditto. - (tiff_instantiate): ditto. - (gif_instantiate): allocate bitmaps for all gif slices not just - the first one. - - * device.h (struct device): add subwindows_state_changed flag. - (MARK_DEVICE_SUBWINDOWS_STATE_CHANGED): new macro. - (MARK_DEVICE_FRAMES_GLYPHS_CHANGED): ditto. - - * console.h (struct console_methods): add a slice parameter to - init_image_instance_from_eimage_method. - - * redisplay.c (create_string_text_block): Allow buffer to be nil - without crashing. - -1999-09-24 Andy Piper - - * glyphs-x.c: only include gui-x.h if we are building with - widgets. - - * gui-x.c (vars_of_gui_x): only set popup_up_p if we have popups. - -1999-09-28 Lee Kindness - - * objects-x.c (allocate_nearest_color): will return 0 (failure) - when the colormap is full and the color it has computed to be the - 'nearest' has been allocated read/write. - -1999-10-02 Olivier Galibert - - * search.c (reinit_vars_of_search): Reinit the search cache - correctly. - - * elhash.h: Make the description visible. Declare - resize_hash_table. - - * elhash.c (resize_hash_table): Extracted from enlarge_hash_table - to generalize the hash table reorganization. - (reorganize_hash_table): Added. - (enlarge_hash_table): Uses resize_has_table. - - * casetab.c (complex_vars_of_casetab): staticpro the mule mirror - tables. - - * alloc.c: Add correct management of blocks of structures. - Reorganize hash tables at reload since the hash values can change - with the pointers. - -1999-10-01 Olivier Galibert - - * lisp.h: Add pdump_wire declaration - - * elhash.c (vars_of_elhash): Wire Vall_weak_hash_tables. - * symbols.c (init_symbols_once_early): Wire Qnil and Qunbound. - - * alloc.c (pdump_wire): Added.. - (pdump_load): Support it. - (pdump): Support it - - * glyphs-msw.c - (reinit_image_instantiator_format_create_glyphs_mswindows): Fix - macro calls. - -1999-09-28 Olivier Galibert - - * symsinit.h: Added lots of prototypes. - - * symeval.h: Added defsymbol_nodump declaration. - - * symbols.c (find_symbol_value): Lame attempt at making the - startup go further. - (defsymbol_nodump): Added. - - * mule-charset.c: Collapsed global lisp objects arrays in one - dumpable structure. - - * lrecord.h: Added some flags. - - * lisp.h: Added dumped flag to dynarrs. Added dumpstruct - declaration. - - * glyphs.h (INITIALIZE_IMAGE_INSTANTIATOR_FORMAT_NO_SYM): Don't - staticpro dynamic variables. - - * glyphs.c (reinit_specifier_type_create_image): Added. - (image_instantiator_format_create): Dump image instantiator format - dynarr. - (reinit_image_instantiator_format_create): Added. - - * emacs.c (main_1): Added reinits calls. - - * dynarr.c: Protect dumped dynarrays from going berzek in free or - realloc. - - * specifier.h (INITIALIZE_SPECIFIER_TYPE): Don't staticpro dynamic - variables. - * specifier.c (specifier_type_create): Dump the specifier type - dynarr. - (reinit_specifier_type_create): Added. - * console.h (INITIALIZE_CONSOLE_TYPE): Don't staticpro dynamic - variables. - * console.c (console_type_create): Dump the console type dynarr. - (reinit_vars_of_console): Extracted from vars_of_console. - (reinit_complex_vars_of_console): Extracted from - complex_vars_of_console - * window.c (reinit_vars_of_window): Extracted from vars_of_window. - * toolbar.c (reinit_specifier_type_create_toolbar): Added. - * search.c (reinit_vars_of_search): Extracted from vars_of_search. - * objects.c (reinit_specifier_type_create_objects): Added. - (reinit_vars_of_objects): Extracted from vars_of_objects. - * lstream.c (reinit_vars_of_lstream): Extracted from - vars_of_lstream. - * lread.c (reinit_vars_of_lread): Extracted from vars_of_lread. - * gutter.c (reinit_specifier_type_create_gutter): Added. - * glyphs-x.c (reinit_image_instantiator_format_create_glyphs_x): - Added. - * glyphs-widget.c - (reinit_image_instantiator_format_create_glyphs_widget): Added - * glyphs-msw.c - (reinit_image_instantiator_format_create_glyphs_mswindows): Added. - * glyphs-eimage.c - (reinit_image_instantiator_format_create_glyphs_eimage): Added. - * event-stream.c (reinit_vars_of_event_stream): Extracted from - vars_of_event_stream - * eval.c (reinit_vars_of_eval): Extracted from vars_of_eval. - * device.c (reinit_vars_of_device): Extracted from vars_of_device. - * console-x.c (reinit_console_type_create_x): Added. - * console-tty.c (reinit_console_type_create_tty): Added - * console-stream.c (reinit_console_type_create_stream): Added. - (init_console_stream): If PDUMP, always reinitialise basic - devices. - * console-msw.c (reinit_console_type_create_mswindows): Added. - * buffer.c (reinit_vars_of_buffer): Extracted from - init_vars_of_buffer. - (reinit_complex_vars_of_buffer): Extracted from - complex_vars_of_buffer - - * alloc.c: Further with the portable dumping, the revenge. - (dumpstruct): Added. - (reinit_alloc_once_early): Extracted from init_alloc_once_early. - - * specifier.c (sizeof_specifier): Correct size computation. - (make_specifier_internal): Ditto. - -1999-09-27 Olivier Galibert - - * alloc.c: Further with the portable dumping. - -1999-09-27 Martin Buchholz - - * glyphs-x.c (update_widget_face): Remove bogus cast - - * data.c (sign_extent_lisp): - * data.c (check_int_range): - * data.c (Faref): - * data.c (Faset): - * data.c (number_char_or_marker_to_int): - * data.c (number_char_or_marker_to_double): - * data.c (Frem): - * data.c (Fmod): - * extents.c (print_extent_1): - * fns.c (print_bit_vector): - * fns.c (Flength): - * fns.c (Fsafe_length): - * fns.c (copy_list): - * fns.c (Fsubseq): - * fns.c (Felt): - * fns.c (Flast): - * fns.c (Fnbutlast): - * insdel.h: - * marker.c (print_marker): - * syntax.h: - * bytecode.c (bytecode_arithcompare): - * bytecode.c (bytecode_arithop): - * lisp.h: - * lisp.h (EXTERNAL_LIST_LOOP_DELETE_IF): - * lisp.h (TRUE_LIST_P): - * lisp.h (CHECK_TRUE_LIST): - * lisp.h (bit_vector_length): - * lisp.h (GCPRO4): Make consistent. - * lisp.h (NGCPRO4): Make consistent. - * lisp.h (NNGCPRO4): Make consistent. - * alloc.c (Fmake_list): - * alloc.c (Fmake_string): - Use proper 64-bit types, e.g. EMACS_INT or size_t instead of int. - This should make all arithmetic 64-bit clean. - - Use %ld with (long) casts in print statements of types with sizes - possibly larger than int. - - Following functions had mismatched prototypes!!: - do_marker_adjustment(), fixup_internal_substring(), scan_lists(), - char_quoted(), make_string_from_buffer(), - make_string_from_buffer_no_extents() - - The types of Bufpos, Bytind, Memind, Bytecount, Charcount, - Extcount are all now EMACS_INT. I hope to see the day when I can - create a buffer with more than INT_MAX characters, without having - XEmacs slow down to a crawl. I also hope to be able to create a - list with more than INT_MAX cons cells. - - * redisplay.c (decode_mode_spec): - The %p and %P specs in the mode line were not correct for buffers - larger than MAX_INT/100! The %p spec was off by .5% even for - small buffers! - -1999-09-27 Martin Buchholz - - * cmdloop.c (num_input_keys): - * print.c (debug_temp): - * emacs.c (Vinfo_directory): - Delete unused variables - - * console-x.h (x_interline_space): Mark as unimplemented. - * redisplay-x.c (x_interline_space): Mark as unimplemented. - - * event-Xt.c (pending_timeouts): - * linuxplay.c (linuxplay_sndbuf): - * profile.c (QS*): - * search.c (searchbufs): - * specifier.c (specifier_type_entry_dynarr): - * undo.c (pending_boundary): - * event-stream.c (the_low_level_timeout_blocktype): - * extents.c (gap_array_marker_freelist): - * extents.c (extent_list_marker_freelist): - * print.c (being_printed): - * print.c (alternate_do_pointer): - * alloc.c (first_string_chars_block): - * alloc.c (current_string_chars_block): - * emacs.c (initial_argv): - * emacs.c (initial_argc): - * eval.c (lisp_eval_depth): - * free-hook.c (pointer_table): - * free-hook.c (free_queue): - * free-hook.c (current_free): - * free-hook.c (strict_free_check): - * redisplay.c (formatted_string_emchar_dynarr): - * redisplay.c (formatted_string_display_line): - * redisplay.c (formatted_string_extent_dynarr): - * redisplay.c (formatted_string_extent_start_dynarr): - * redisplay.c (formatted_string_extent_end_dynarr): - * redisplay.c (updating_line_start_cache): - * redisplay.c (last_display_warning_tick): - * redisplay.c (display_warning_tick): - * redisplay.c (internal_cache): - * window.c (Vwindow_configuration_free_list): - Make static. - - * redisplay.c (Vinitial_window_system): Make CONST. - -1999-09-24 Martin Buchholz - - * redisplay-tty.c (term_get_fkeys_1): Minor aesthetic improvements. - - * doprnt.c (get_doprnt_args): Use int, not short, with va_arg. - -1999-09-24 Andy Piper - - * redisplay-output.c (output_display_line): only clear the borders - if we are not displaying the gutter. - -1999-09-24 Jan Vroonhof - - * frame-x.c (x_any_window_to_frame): Let Xt find the widget and - then use x_any_widget_or_parent_to_frame(). - (x_find_frame_for_window): remove special cases. - -1999-09-24 Andy Piper - - * scrollbar-x.c (x_window_is_scrollbar): deleted. - * scrollbar-x.h: ditto. - -1999-09-23 Martin Buchholz - - * alloc.c (this_marks_a_marked_record): Remove. - - * buffer.c (mark_buffer): - * buffer.c (nuke_all_buffer_slots): - * console.c (mark_console): - * console.c (nuke_all_console_slots): - * frame.c (mark_frame): - * frame.c (nuke_all_frame_slots): - Treat MARKED_SLOT() macros consistently. - - * device.h (error_check_device_type): - * faces.c (face_getprop): - * fileio.c (DRIVE_LETTER): - * filelock.c (lock_file_1): - * frame-x.c (x_create_widgets): - * frame.h (error_check_frame_type): - * keymap.c (print_keymap): - * keymap.c (Fkey_description): - * keymap.c (where_is_recursive_mapper): - * mule-charset.h (CHARSET_LEADING_BYTE): - * objects-msw.c (mswindows_color_instance_hash): - * objects.c (color_instance_equal): - * objects.h (struct color_specifier): - * objects.h (struct font_specifier): - * objects.h (struct face_boolean_specifier): - * opaque.h (get_opaque_ptr): - * opaque.h (set_opaque_ptr): - * process-unix.c (set_socket_nonblocking_maybe): - * specifier.h (SPECIFIER_TYPE_P): - * symbols.c (store_symval_forwarding): - * syssignal.h (EMACS_KILLPG): - * terminfo.c (emacs_tparam): - * glyphs.c (glyph_putprop): - * glyphs.c (glyph_remprop): - * glyphs.c (Fimage_instance_subwindow_id): - * window.c (mark_window): - * window.c (mark_window_config): - * window.c (Fset_window_configuration): - * window.c (save_window_save): - * eval.c (Fuser_variable_p): - * eval.c (Fcommand_execute): - * eval.c (Feval): - * eval.c (Ffuncall): - * lisp.h (XPNTR): - * lisp.h (INT_OR_FLOATP): - * lisp.h (GC_INT_OR_FLOATP): - * lisp.h (XFLOATINT): - * lisp.h (IS_ANY_SEP): - * mule-ccl.c (Fccl_execute): - * mule-ccl.c (Fccl_execute_on_string): - * redisplay-x.c (x_output_string): - Remove redundant extra parentheses. - -1999-09-22 Martin Buchholz - - * chartab.c (word_boundary_p): Add prototype for warning avoidance. - * eval.c (PRIMITIVE_FUNCALL): ANSIfy - * free-hook.c (fun_ptr): ANSIfy - * getloadavg.c: Remove declaration for errno. - * gui.c (allocate_gui_item): ANSIfy - * gui.h (allocate_gui_item): ANSIfy - * mule-ccl.c (resolve_symbol_ccl_program): Make static - * realpath.c: Remove K&R support. - * redisplay-x.c (x_output_display_block): Don't shadow previous local - * glyphs-widget.c (layout_instantiate): Don't shadow previous local - * gutter.c (get_gutter_coords): Make static. - * lread.c (locate_file_map_suffixes): Make static. - * ralloc.c (relinquish): ANSIfy - * redisplay.c: - * lisp.h: - Move prototypes from redisplay.c to lisp.h - -1999-09-22 Martin Buchholz - - * glyphs-x.c (x_widget_set_property): - - Remove unnecessary initialization. - - Use char*, not Bufbyte *, with GET_C_STRING_OS_DATA_ALLOCA - * glyphs-x.c (x_widget_instantiate): - - Use char*, not Bufbyte *, with GET_C_STRING_OS_DATA_ALLOCA - * unexelf.c (unexec): - Add cast for C++ compilability. - * redisplay.h: - Fix a typo. - * ralloc.c (r_alloc_reinit): - SET_FUN_PTR was broken wrt ANSI aliasing! - To compensate, use __typeof__ when using gcc, else live with - possible (but rare) warnings. - * ralloc.c (init_ralloc): - Ditto - * ralloc.c: Use the real dlmalloc prototype for __morecore. - * lread.c (locate_file_map_suffixes): - * input-method-xlib.c (XIM_init_frame): - - Xlib functions should use XPointer, not XtPointer. - * input-method-xlib.c (XIM_delete_frame): - - Xlib functions should use XPointer, not XtPointer. - * input-method-xlib.c (IMDestroyCallback): - - Simplify. - - XFRAME (obj) can never be NULL, so don't test for it. - * gutter.h: - Add GUTTER_POS_LOOP for iterating over all gutter_pos'es - * gutter.c (SET_GUTTER_WAS_VISIBLE_FLAG): - Run c-backslash-region on macro body. - * gutter.c (gutter_was_visible): - Remove redundant parens - this is not a macro. - * gutter.c (redraw_exposed_gutters): - Use GUTTER_POS_LOOP. - * gutter.c (gutter_specs_changed): - Use GUTTER_POS_LOOP. - * gutter.c (gutter_geometry_changed_in_window): - Use GUTTER_POS_LOOP. - * gutter.c (update_frame_gutters): - Use GUTTER_POS_LOOP. - * gutter.c (init_frame_gutters): - Use GUTTER_POS_LOOP. - * file-coding.c (determine_real_coding_system): - Fix C++ compile error. - * emodules.c (find_make_module): - Cast return value from xrealloc - * emacs.c (Fkill_emacs): - Use __typeof__, when available. - * emacs.c (voodoo_free_hook): - Use __typeof__, when available. - (Unfortunately, the type of __free_hook is glibc-version-dependent) - * dired.c (user_cache): Use Bufbyte *, not char * - * dired.c (Fuser_name_all_completions): Ditto. - -1999-09-22 Andy Piper - - * redisplay.c (redisplay_frame): reset the gutter display lines - when we reset the subwindows. - - * gutter.c (reset_gutter_display_lines): new function. - - * window.c (Flast_nonminibuf_window): new function equivalent to - FRAME_LAST_NONMINIBUF_WINDOW (). - (syms_of_window): declare it. - - * redisplay.c (create_string_text_block): don't add bogus eol - markers to gutter display lines. - - * glyphs.c (reset_subwindow_cachels): make sure we unmap - subwindows using unmap_subwindow so that expose events get - registered correctly. - - * window.c (window_scroll): use Vwindow_pixel_scroll_increment to - determine how much to scroll the window. - (vars_of_window): Vwindow_pixel_scroll_increment is a new - variable. - -1999-09-20 Robert Pluim - - * glyphs-x.c (update_widget_face): Guard fontList declaration for - non-motif uses. - -1999-09-20 Andy Piper - - * glyphs-msw.c (mswindows_update_subwindow): update faces. - -1999-09-19 Andy Piper - - * glyphs.c (update_frame_subwindows): update if faces have - changed. - - * glyphs-x.c (x_widget_instantiate): create the clip widget using - lwlib rather than directly. - (x_finalize_image_instance): delete the clip widget using lwlib. - (x_update_subwindow): update widget faces. - (update_widget_face): new function for updating the face - properties of a widget. - (x_widget_set_property): update widget faces. - - * lwlib-Xlw.c (xlw_create_clip_window): new function. We need to - manage the clip widgets using lwlib so that we can delete them in - a safe manner. - -1999-09-16 Martin Buchholz - - * lisp-union.h: - * lisp-disunion.h: - Define new, potentially faster INT arithmetic macros - INT_PLUS, INT_MINUS, INT_PLUS1, INT_MINUS1 - * bytecode.c (execute_optimized_function): - Use new macros. - Fix metering code - * bytecode.c (bytecode_negate): - Optimize for integer case. - -1999-08-29 Andreas Jaeger - - * m/mips.h: Support for mips-linux: Add !linux around places - that are not valid for linux, define TEXT_START, DATA_START, - DATA_SEG_BITS. - -1999-09-16 Andy Piper - - * redisplay-output.c (redisplay_output_subwindow): clip subwindows - that don't completely fit on-screen rather than just unmapping - them. - - * glyphs.h: change signature of map_subwindow. - - * glyphs.c (map_subwindow): add display_glyph_area to the - signature. make sure the mapped area saved in the subwindow_cachel - reflects this. - (Fforce_subwindow_map): make a no-op. I don't think this does - anything useful. - - * glyphs-x.h (struct x_subwindow_data): save the Display rather - than the Screen. Add a clipwindow and clipwidget handle. - (IMAGE_INSTANCE_X_CLIPWINDOW): new accessor. - (IMAGE_INSTANCE_X_CLIPWIDGET): ditto. - (XIMAGE_INSTANCE_X_CLIPWIDGET): ditto. - (XIMAGE_INSTANCE_X_CLIPWINDOW): ditto. - - * glyphs-x.c (x_finalize_image_instance): destroy the clipwidget - as well as the widget itself. - (x_unmap_subwindow): unmap the clipwindow and clipwidget rather - than the widgets and subwindows themselves. move the widget inside - the clipwidget. - (x_subwindow_instantiate): hold onto the Display rather than the - Screen. allocate a clipwindow to put the subwindow inside. - (x_resize_subwindow): use saved Display directly. - (x_widget_instantiate): allocate a clipwidget of type EmacsManager - to put widgets inside. - - * glyphs-widget.c: remove group stuff. - - * glyphs-msw.h (struct mswindows_subwindow_data): new structure to - hold the clipwindow. - (IMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW): new accessor. - (XIMAGE_INSTANCE_MSWINDOWS_CLIPWINDOW): ditto. - - * glyphs-msw.c: remove group stuff. - (mswindows_finalize_image_instance): destroy clipwindow as well as - the widget itself. - (mswindows_unmap_subwindow): unmap the clipwindow rather than the - widget. - (mswindows_map_subwindow): ditto. move the widget within the - clipwindow. - (mswindows_subwindow_instantiate): allocate and initialize - mswindows_subwindow_data. allocate a clipwindow with the subwindow - as a child. - (mswindows_widget_instantiate): ditto. - (mswindows_control_wnd_proc): new function that allows us to - propagate events from the widget to the main windows control loop. - - * device-msw.c (mswindows_init_device): register new widget clip window - class. - - * console.h (struct console_methods): add display_glyph_area to - map_window. - - * console-msw.h: declare new window class and wnd proc for - widgets. - -1999-09-14 Martin Buchholz - - * general.c: - * eldap.c: - Move symbols used only by eldap.c into eldap.c as statics. - -1999-09-09 Martin Buchholz - - * window.c (syms_of_window): - * symbols.c (syms_of_symbols): - * redisplay.c (syms_of_redisplay): - * print.c (syms_of_print): - * lisp.h: - * intl.c (syms_of_intl): - * general.c (syms_of_general): - * frame.c (syms_of_frame): - * fileio.c (syms_of_fileio): + * md5.c: + * file-coding.c: * file-coding.h: - * file-coding.c (syms_of_file_coding): - * extents.c (syms_of_extents): - * event-stream.c (syms_of_event_stream): - * event-stream.c (Fnext_event): - * device.c (syms_of_device): - * data.c (syms_of_data): - * casetab.c (syms_of_casetab): - * casetab.c (check_case_table): - * callint.c (syms_of_callint): - * buffer.c (syms_of_buffer): - Delete unused C symbols: - Qbuffer_file_name, Qbuffer_undo_list, Quser_variable_p, - Qcurrent_prefix_arg, Qtranslate_table, Qkeywordp, - Qnumber_or_marker_p, Qcons, Qkeyword, Qignore, Qdelete_device, - Qcommand_execute, Qglyph_invisible, - Qbuffer_file_coding_system, Qfile_name_handler_alist, - Qframe_x_p, Qframe_tty_p, Qblack, Qkeyboard, Qmenubar, Qpath, - Qvector, Qwhite, Qcase, Qdomain, Qalternate_debugging_output, - Qprint_escape_newlines, Qprint_readably, Qfloat_output_format, - Qwindow_scroll_functions, Qfboundp, Qscroll_up, Qscroll_down - - Rename symbols as required by the CHECK_RECORD macro: - - Qcase_table_p to Qcase_tablep - - Qcoding_system_p to Qcoding_systemp - - * debug.h: - * debug.c (syms_of_debug): - Make debug.c's internal Lisp_Objects static. - - * events.c (vars_of_events): - * events.c (syms_of_events): - Use regular old defsymbol instead of KEYSYM + staticpro(). - - * select-x.c (CHECK_CUTBUFFER): - Rewrite in accordance with coding standards. - - * keymap.c (syms_of_keymap): - Use SPC in the same way as RET, TAB, etc. - -1999-08-27 Jan Vroonhof - - * xemacs-20/src/menubar-x.c (make_dummy_xbutton_event): Don't add - offset twice if HAVE_WMCOMMAND is defined. - -1999-09-13 Mike McEwan - - * redisplay-x.c (x_output_vertical_divider): make sure - shadow_thickness is positive. - -1999-09-10 Julian Back - - * process-nt.c (nt_create_process): fixup to cope with - Vprocess_environment. - -1999-09-02 Andy Piper - - * redisplay-output.c (redisplay_output_layout): call output - routines with clear_clip false. output layout borders with text - correctly. - - * redisplay-msw.c (mswindows_output_blank): call output routines - with clear_clip true. - (mswindows_output_string): ditto. - (mswindows_output_display_block): ditto. - - * redisplay-x.c (x_output_display_block): call output routines - with clear_clip true. - - * redisplay.h: fix output routines for clear_clip parameter. - - * redisplay-output.c (redisplay_output_layout): cope with glyphs - in the border. - - * glyphs-widget.c (layout_instantiate): deal with border glyphs. - (check_valid_glyph_or_instantiator): renamed from - check_valid_glyph_or_image. - (check_valid_border): allow glyphs or their instantiators. - (check_valid_glyph_or_instantiator_list): renamed from - check_valid_glyph_or_image_list, - (glyph_instantiator_to_glyph): new function. make sure a glyph is - a glyph and not an instantiator. - (substitute_keyword_value): new function. replace a keyword value - with a new one. - -1999-09-01 Andy Piper - - * glyphs.c (string_set_property): new function to set the data of - a string. - (image_instantiator_format_create): use it. - -1999-09-07 Hrvoje Niksic + Change enum eol_type to eol_type_t. - * fns.c (Fmapc): Rename back to Fmapc_internal. +2000-01-17 Yoshiki Hayashi -1999-07-30 Gleb Arshinov + * gui.c (get_gui_callback): Check cons before accessing car. - * ntheap.h: CONST (semantically constant) name field of file_data - struct +2000-01-17 Yoshiki Hayashi - * unexnt.c (open_output_file): match function definition with - function declaration + * specifier.h (XSPECIFIER_TYPE): Add error checking version. + (XSETSPECIFIER_TYPE): Ditto. - * editfns.c: #include "sysfile.h" for getcwd() prototype +2000-01-17 Didier Verna - * gif_io.c: #include "sysfile.h" for close() prototype + * redisplay.c (generate_fstring_runes): compute string size in + characters, not bytes. -1999-09-02 Martin Buchholz +2000-01-09 Hrvoje Niksic - * elhash.c: - * elhash.h: - Change the :type keyword to :weakness, for compatibility with the - GNU Emacs 20.5 hash table implementation. - Keep (but don't document) the :type keyword for compatibility. - Obsolete function hash-table-type - General cleanup. - Define function sxhash for compatibility with Common Lisp and GNU Emacs. + * window.c (Fwindow_minibuffer_p): Make WINDOW optional. -1999-09-01 Martin Buchholz +2000-01-14 Hrvoje Niksic - * floatfns.c (arith_error): - * floatfns.c (range_error): - * floatfns.c (range_error2): - * floatfns.c (domain_error): - * floatfns.c (domain_error2): - * lrecord.h (LRECORDP): - * console-x.h (X_ERROR_OCCURRED): - * console-x.h (HANDLING_X_ERROR): - * chartab.c (CATEGORYP): - * buffer.h (XCHAR_OR_CHAR_INT): - Remove redundant and confusing parentheses. + * print.c (print_error_message): Call print_prepare(). - * redisplay-output.c (redisplay_clear_to_window_end): - Remove redundant initialization. +2000-01-14 Martin Buchholz - * redisplay.h: - * redisplay-msw.c: - * redisplay-x.c: - Move declarations of bevel_modeline() into redisplay.h. + * .dbxrc: Renamed from dbxrc. -1999-08-30 Olivier Galibert + * events.c (event_to_character): + Use `assert (foo)' instead of `if (!foo) abort()' - * lisp.h: Add staticpro_nodump for undumped staticpro-ing. - * alloc.c: Add staticpro_nodump for undumped staticpro-ing. Add - alignment information for dumped data. Enhance - descriptions. Phase out Vterminal_* variables while - dumping. - * lrecord.h: Add chained descriptions and automagically-reset - lisp_objects to the description system. + * .gdbinit (xtype): Add documentation. + * .gdbinit (check-temacs): New function. + * .gdbinit (check-xemacs): New function. + * dbxrc (check-xemacs): New function. + * dbxrc (check-xemacs): New function. - * console-stream.h: Declare the Vterminal_* variables. +2000-01-14 Andy Piper - * buffer.c: Don't dump Vbuffer_alist, Vbuffer_defaults and - Vbuffer_local_symbols. - * console.c: Don't dump Vconsole_list, Vconsole_defaults and - Vconsole_local_symbols. - * eval.c: Don't dump Qunbound_suspended_errors_tag. - * lread.c: Don't dump Vread_buffer_stream. - * lstream.c: Don't dump Vlstream_free_list[]. - * search.c: Don't dump last_thing_searched. - * window.c: Don't dump minibuf_window and - Vwindow_configuration_free_list[]. + * glyphs-widget.c (widget_query_geometry): Make sure that we + calculate default dimensions correctly. - * faces.c: Add face description. - * fns.c: Add bit_vector description. - * glyphs.c: Add image specifier description. - * objects.c: Add color, face and face boolean specifiers descriptions. - * opaque.c: Add opaque description. Don't dump Vopaque_ptr_free_list. - * rangetab.c: Add range table description. - * specifier.c: Add specifier and specifier methods description. - * specifier.h: Add specifier extra description support. +2000-01-13 Kirill 'Big K' Katsnelson - * symbols.c: Fix symbol_value_buffer_local_description. + * symsinit.h: Added prototype for reinit_vars_of_frame_mswindows. - * gdbinit (Lisp): Add opaque_ptr, remove opaque_list. + * event-msw.c (vars_of_event_mswindows): Fixed a mistyped + pdump_wire'd variable. -1999-09-02 Hrvoje Niksic + * emacs.c: (main_1): Conditionalized calls to + reinit_vars_of_scrollbar_x and reinit_vars_of_module. - * extents.c (extent_remprop): Get extent's plist address - correctly. +2000-01-13 Martin Buchholz -1999-08-31 Andy Piper - - * xmu.h: define Xmu/Converters.h things. - -1999-08-31 Andy Piper - - * opaque.c (equal_opaque_ptr): define. - (hash_opaque_ptr): define. - - * xmu.h: define Xmu/Misc.h things. - -1999-08-17 MORIOKA Tomohiko - - * file-coding.c (determine_real_coding_system): Treat `coding:' - cookie. - -1999-08-16 MORIOKA Tomohiko - - * file-coding.c (struct decoding_stream): New member `counter'. - (reset_decoding_stream): Initialize `counter'. - (decode_coding_ucs4): Use `counter'. - (decode_coding_utf8): Likewise. - -1999-08-31 Andy Piper - - * redisplay-output.c (redisplay_normalize_glyph_area): make sure - the clip offset doesn't exceed the height we have available to - show. - - * window.h (struct window): add top_yoffset and left_xoffset for - pixel scrolling. - (WINDOW_TEXT_TOP_CLIP): new macro. - - * window.c (window_scroll): add behaviour for pixel-scrolling of - tall lines. - - * redisplay.h (struct display_line): add top_clip. - (DISPLAY_LINE_HEIGHT): adjust for top_clip. - (DISPLAY_LINE_YPOS): ditto. - - * redisplay.c (position_redisplay_data_type): add - start_col_xoffset to prepare for pixel-based h-scrolling. - (WINDOW_SCROLLED): new macro. - (next_tab_position): use it. - (add_glyph_rune): use new hscoll vars. - (create_text_block): ditto. - (generate_displayable_area): adjust off-by-one error. - (regenerate_window): take top_clip into account. - (regenerate_window_extents_only_changed): ditto. - (regenerate_window_incrementally): ditto. - - * redisplay-x.c (x_output_display_block): use DISPLAY_LINE_YPOS, - DISPLAY_LINE_HEIGHT and DISPLAY_LINE_YEND macros. - (x_output_string): ditto. - (x_output_blank): ditto. - (x_output_hline): ditto. - (x_output_eol_cursor): ditto. - - * redisplay-output.c (output_display_line): allow for - top_clip. use DISPLAY_LINE_YPOS, DISPLAY_LINE_HEIGHT and - DISPLAY_LINE_YEND macros. - (redisplay_output_layout): output strings in layouts correctly. - (redisplay_clear_clipped_region): allow for top_clip. - (redisplay_calculate_display_boxes): ditto. - - * redisplay-msw.c (mswindows_output_blank): use DISPLAY_LINE_YPOS, - DISPLAY_LINE_HEIGHT and DISPLAY_LINE_YEND macros. - (mswindows_output_cursor): ditto. - (mswindows_output_string): ditto. - (mswindows_redraw_exposed_window): ditto. - (mswindows_output_display_block): ditto. - - * gutter.c: new specifier type gutter-size. - (gutter_size_validate): validate gutter-size specifier. - (Fgutter_size_specifier_p): predicate for gutter-size. - (Fredisplay_gutter_area): allow the gutter area to be redisplayed - under user contol, like Fredisplay_echo_area. - (syms_of_gutter): add new functions. - (specifier_type_create_gutter): add new specifier. - (specifier_vars_of_gutter): change specifier types of *-height to - gutter-size. - - * glyphs.c (glyph_width): make work with image instances. - - * console.h (struct console_methods): change api of output_string. - - * glyphs-x.c (x_map_subwindow): move before mapping as reported by - Stephen J. Turnbull - -1999-08-30 Andy Piper - - * glyphs-x.c (x_finalize_image_instance): X_MASK -> PIXMAP_MASK - for assignment. - (init_image_instance_from_x_image): ditto. - (x_xpm_instantiate): ditto. - (x_colorize_image_instance): ditto. Reported by Richard Cognot - - -1999-08-29 Andy Piper - - * glyphs-x.c (x_widget_instantiate): move font initialisation so - that it doesn't get saved in the user defined args. - (x_tab_control_instantiate): Set the fg color of the tab's - children. - (x_tab_control_set_property): ditto. - -1999-08-27 Damon Lipparelli - - * events.h (XTIMEOUT): must preface Lisp_Timeout with ``struct'' - (XSETTIMEOUT): fixup typo - -1999-08-11 Jan Vroonhof - - * syntax.c (scan_words): Unified Mule and Non-mule scanning. - Word boundary search looks back instead of forward so that it - doesn't peek over the limit. - -1999-08-20 Olivier Galibert - - * config.h.in: Add PDUMP define. - * emacs.c (Fdump_emacs): Hackish, call pdump() if configured in. - - * lrecord.h: Enhance description system. - * alloc.c: Fix vector and string description. Add portable - dumper enumeration fonctions. - - * symbols.c: Fix symbols description. Add symbol_value_forward - description. - * eval.c: Add subr description. - * elhash.c (CLEAR_HENTRY): Clean value pointer too. Fix hash - table description. - (remhash_1): CLEAR_HENTRY evaluates the parameter two times now. - -1999-08-20 Olivier Galibert - - * opaque.c: Kill opaque lists, make Lisp_Opaque_Ptr a lrecord of - its own. - * opaque.h: Ditto. - - * eval.c (eval_in_buffer_trapping_errors): - (run_hook_trapping_errors): - (safe_run_hook_trapping_errors): - (call0_trapping_errors): - (call1_trapping_errors): - (call2_trapping_errors): OPAQUEP -> OPAQUE_PTRP. make_opaque_ptr - now takes a non-const void *. - -1999-08-20 Olivier Galibert - - * opaque.c: Remove make_opaque_long. - - * opaque.h: Remove everything opaque_long related. - - * eval.c (vars_of_eval): Make Qunbound_suspended_errors_tag an - opaque_ptr. - - * emacs.c (main_1): Remove make_opaque_long from comment. - -1999-08-20 Olivier Galibert - - * event-stream.c (mark_timeout): - (print_timeout): - (event_stream_generate_wakeup): - (event_stream_resignal_wakeup): - (event_stream_disable_wakeup): - (event_stream_wakeup_pending_p): - (vars_of_event_stream): Lisp_Timeout is now a lrecord. - - * events.h (struct Lisp_Timeout): Added. - -1999-08-24 Andy Piper - - * console-x.h: declare new pixmap signatures. - -1999-08-23 Andy Piper - - * glyphs-x.c (x_update_subwindow): make sure the widget size is - maintained after an update. - - * event-Xt.c (emacs_Xt_handle_magic_event): use - find_matching_subwindow to check whether the exposure is totally - inside a subwindow, if it is then ignore it. - - * glyphs.c (find_matching_subwindow): new function. - - * toolbar-x.c (x_draw_blank_toolbar_button): use new - x_output_shadows signature. - (x_output_toolbar_button): use new x_output_x_pixmap signature. - - * redisplay.h (struct display_box): new structure. - (struct display_glyph_area): ditto. - declare new display_box functions. - - * redisplay-x.c (x_output_pixmap): update for new display - box stuff. - (x_bevel_area): update to allow multiple edge styles and border - segments. - (x_output_display_block): update for new display_box stuff and - signatures. - (x_clear_region): ditto. - (x_output_x_pixmap): ditto. adjust offsets rather than clip. - (console_type_create_redisplay_x): declare new console methods. - (x_output_vertical_divider): update for new bevel_area signature. - (x_output_shadows): update to allow selective drawing of edges. - - * redisplay-tty.c (tty_output_display_block): do nothing for - layouts. - - * redisplay-output.c (redisplay_output_subwindow): convert to use - display_box structure, this allows us to put subwindows anywhere - with any offset, useful for layout glyphs. - (redisplay_output_layout): new function. output a layout and its - sub-glyphs. - (redisplay_output_pixmap): new modular function combining generic - parts of the X and mswindows versions. convert to use display_box - structures. - (redisplay_clear_clipped_region): new function. clear the area a - glyph is going into. - (redisplay_normalize_glyph_area): new function. calculate the - bounds of a display_glyph_area given a display_box. - (redisplay_normalize_display_box): new function. shrink a - display_box to enclose a display_glyph_area. - (redisplay_display_boxes_in_window_p): check whether the input - display_box and display_glyph_area are actually in a window. - (redisplay_calculate_display_boxes): calculate display boxes based - on conventional display_line metrics. - (bevel_modeline): update for new bevel_area signature. - - * redisplay-msw.c (mswindows_output_blank): update for new - display_box stuff. - (mswindows_output_string): ditto. - (mswindows_output_dibitmap): ditto. - (mswindows_output_dibitmap_region): ditto. - (mswindows_output_pixmap): ditto. - (mswindows_bevel_area): update to allow multiple edge styles and - border segments. - (mswindows_output_display_block): update for new display_box stuff - and signatures. - (mswindows_clear_region): ditto. - (console_type_create_redisplay_mswindows): declare new console methods. - - * lisp.h (edge_style): new enum. - declare display_box and display_glyph_area. - - * gutter.c (output_gutter): update for new bevel_area signature. - - * glyphs.h (image_instance_type): add layout. - (IMAGE_LAYOUT_MASK): ditto. - (LAYOUT_IMAGE_INSTANCEP): new macro. - (CHECK_LAYOUT_IMAGE_INSTANCE): ditto. - (struct Lisp_Image_Instance): add offsets for layout and the - layout type itself. move mask here also. - (IMAGE_INSTANCE_LAYOUT_CHILDREN): new macro. - (IMAGE_INSTANCE_LAYOUT_BORDER): ditto. - (XIMAGE_INSTANCE_LAYOUT_CHILDREN): ditto. - (XIMAGE_INSTANCE_LAYOUT_BORDER): ditto. - - * glyphs.c (mark_image_instance): update for layouts. - (print_image_instance): ditto. - (image_instance_equal): ditto. - (image_instance_hash): ditto. - (allocate_image_instance): initialise offsets for layout. - (decode_image_instance_type): update for layouts. - (encode_image_instance_type): ditto. - (Fimage_instance_height): ditto. - (Fimage_instance_width): ditto. - (allocate_glyph): ditto. - (glyph_width): allow image instances as an argument. update for layouts. - (glyph_height_internal): ditto. - (syms_of_glyphs): add layout symbols. - - * glyphs-x.h (struct x_image_instance_data): remove mask entry. - (IMAGE_INSTANCE_X_MASK): update. - - * glyphs-x.c (x_label_instantiate): new function. instantiate a - label. - (image_instantiator_format_create_glyphs_x): initialise new layout - glyph type. - - * glyphs-widget.c: new layout type. - (check_valid_orientation): new keyword checker for layouts. - (check_valid_justification): ditto. - (check_valid_border): ditto. - (check_valid_glyph_or_image_list): ditto. - (layout_possible_dest_types): new function for layout glyph type. - (layout_normalize): ditto. - (layout_instantiate): ditto. - (syms_of_glyphs_widget): new keywords for layout. - (image_instantiator_format_create_glyphs_widget): initialise the - layout glyph type. - - * glyphs-msw.h (struct mswindows_image_instance_data): remove mask - argument. - (IMAGE_INSTANCE_MSWINDOWS_MASK): update. - - * glyphs-msw.c: declare layout format. - (image_instantiator_format_create_glyphs_mswindows): initialise it. - - * general.c: new symbols for layouts. - - * console.h (struct console_methods): new console methods for - outputting pixmaps and strings. - -1999-08-23 Didier Verna - - * sound.c: revert the renaming of `bell_volume' to `Vbell_volume' - and `bell_inhibit_time' to `Vbell_inhibit_time'. - -1999-08-18 Andy Piper - - * redisplay-output.c (redisplay_output_subwindow): disable - clipping attempt. - -1999-08-17 Andy Piper - - * gutter.c (redraw_exposed_gutter): handle degenerate case of no - area to expose or no gutter to display. - -1999-08-16 Charles G Waldman - - * sound.c: rename `bell_volume' to `Vbell_volume' and - `bell_inhibit_time' to `Vbell_inhibit_time'. - -1999-08-13 Charles G Waldman - - * sound.c: (bell-inhibit-time): New variable. - (ding): Use it. - (sound-alist): Fix docstring. - -1999-08-17 Andy Piper - - * gui-x.c (button_item_to_widget_value): xstrdup name so that - deleting it is ok. - -1999-08-16 Jeff Miller - - * syntax.c (scan_words): make compile. - -1999-08-16 Andy Piper - - * redisplay-output.c (redisplay_output_subwindow): try and be more - relaxed about clipping possibilities. - - * glyphs-x.c (x_tab_control_set_property): free_widget_value_tree - rather than just the widget_value. - (x_update_subwindow): ditto. - (x_widget_instantiate): ditto. - - * gutter.c (output_gutter): shrink current display lines if - required. - -1999-08-15 Andy Piper - - * redisplay.h: declare free_display_lines. - - * redisplay.c (free_display_lines): make non-static. - - * gutter.c (free_frame_gutters): use free_display_lines instead of - Dynarr_free. - (calculate_gutter_size): ditto. - -1999-08-12 Jan Vroonhof - - * eval.c (run_hook_with_args_in_buffer): GCPRO globals. - -1999-08-14 Andy Piper - - * glyphs.c (update_subwindow_cachel): make it less brittle. - -1999-08-04 Mike Woolley - - * scrollbar-msw.c (mswindows_handle_mousewheel_event): Fixed - problem in wheelmouse code occurring when the horizontal scrollbar - is enabled but not visible. - -1999-08-08 Andy Piper - - * toolbar-msw.c (mswindows_redraw_frame_toolbars): new function. - (console_type_create_toolbar_mswindows): use it. - - * glyphs.c (Fset_image_instance_property): fiddly reorganisation. - - * redisplay-output.c (redisplay_output_display_block): unmap - subwindows in the block area before outputting the block. - - * event-msw.c (mswindows_wnd_proc): check the update rect before - painting and disable expose registration while painting. - - * glyphs.c (register_ignored_expose): check - hold_ignored_expose_registration before registering expose events. - - * redisplay.c (redisplay_frame): reset the subwindow cache before - displaying the gutter. - - * glyphs-msw.c (mswindows_map_subwindow): move the window before - mapping. - - * gutter.c (update_frame_gutters): check for glyphs_changed as if - it is the subwindow cache will have been reset. - -1999-08-06 Andy Piper - - * gui-x.c (button_item_to_widget_value): cope with strings. - - * glyphs.h: declare global widget functions. - (IIFORMAT_HAS_SHARED_DEVMETHOD): new macro. - - * glyphs-x.c (x_combo_box_instantiate): do generic initialization - here. remove dead code. - (image_instantiator_format_create_glyphs_x): enable combo boxes - for Motif 2.0. - - * glyphs-widget.c (widget_instantiate_1): make non-static. - (tree_view_instantiate): renamed from combo_box_instantiate. - (image_instantiator_format_create_glyphs_widget): use new/changed methods. - - * glyphs-msw.c (mswindows_combo_box_instantiate): do generic - initialization here. - - * lwlib-Xm.c (xm_update_combo_box): new function. - (xm_update_one_widget): call it. - (xm_update_one_value): deal with combo boxes as well as lists. - (xm_create_combo_box): create a drop-down combo box. - - * toolbar-msw.c (mswindows_output_toolbar): call - mswindows_move_toolbar. - -1999-08-05 Andy Piper - - * window.c (Fcurrent_pixel_column): new function. use display - lines to calculate pixel position of point. - * window.c (syms_of_window): declare it. - -1999-08-05 Andy Piper - - * glyphs.c (check_for_ignored_expose): ignore exposures wholly - contained in our ignore list. - - * buffer.c (Frecord_buffer): add call to record-buffer-hook. - (syms_of_buffer): declare record-buffer-hook. - - * s/mingw32.h: define mousewheel things. - -1999-08-04 Mike Woolley - - * windowsnt.h (_WIN32_WINNT): enable for win95 - - * s/cygwin32.h: define mousewheel things. - - * scrollbar-msw.h: declare mousewheel handler. - - * scrollbar-msw.c (mswindows_handle_mousewheel_event): new function. - -1999-08-04 Andy Piper - - * gui-x.c (gui_items_to_widget_values): remove unused variable. - (gui_items_to_widget_values_1): ditto. - - * gui-x.h: unconditionally define since it is used everywhere. - -1999-08-04 Andy Piper - - * glyphs-x.c (x_finalize_image_instance): only free pixels if we - have that type of image. - -1999-07-30 Andy Piper - - * redisplay-output.c (redisplay_unmap_subwindows): add comparison - subwindow to not unmap if required. - (redisplay_unmap_subwindows_maybe): comparison is Qnil. - (redisplay_unmap_subwindows_except_us): new function. - (redisplay_output_subwindow): use it to unmap windows in the area - we are displaying into. - - * glyphs.c (update_subwindow_cachel_data): always update as we - only ever get called when an update is required. - (update_subwindow_cachel): new function. sync a subwindow with its - cachel. - (Fresize_subwindow): use it. - (register_ignored_expose): make sure we set the tail correctly. - -1999-07-28 Andy Piper - - * redisplay-output.c (redisplay_clear_bottom_of_window): remove - unneeded device. - - * gutter.c (redraw_exposed_gutter): unmap subwindows from the - whole gutter. - - * gui.h: declare parse_gui_item_tree_list and - parse_gui_item_tree_children. - - * gui.c (parse_gui_item_tree_item): new function for parsing item - lists into gui-item trees. - (parse_gui_item_tree_children): ditto. - (parse_gui_item_tree_list): ditto. - - * gui-x.h: declare gui_items_to_widget_values. - - * gui-x.c (gui_items_to_widget_values_1): new function for - recursively parsing gui-items into widget_values. - (gui_item_children_to_widget_values): ditto. - (gui_items_to_widget_values): ditto. - (sanity_check_lwlib): add widgets macrolets. - - * glyphs.h (IMAGE_INSTANCE_WIDGET_ITEMS): rename from *ITEM. - (XIMAGE_INSTANCE_WIDGET_ITEMS): ditto. - (IMAGE_INSTANCE_WIDGET_ITEM): rename from *SINGLE_ITEM. - (XIMAGE_INSTANCE_WIDGET_ITEM): ditto. - (struct expose_ignore): new structure for storing ignorable expose - events. - - * glyphs.c (valid_image_instantiator_format_p): fix so that using - a console-type as a locale works. - (mark_image_instance): ITEM->ITEMS. - (image_instance_equal): ditto. - (image_instance_hash): ditto. - (struct expose_ignore_blocktype): new blocktype. - (check_for_ignored_expose): new function. checks frame exposure - list for events to ignore. - (register_ignored_expose): new function. registers an expose event - as ignorable. - (unmap_subwindow): register the expose event as ignorable. - (vars_of_glyphs): initialise the exposure blocktype. - - * glyphs-x.c (x_finalize_image_instance): use lw_destroy_widget. - (x_update_subwindow): modify all widgets using widget_value tree - rather than just a single widget value. - (x_widget_instantiate): LWLIB_USES_MOTIF -> LWLIB_WIDGETS_MOTIF. - make sure widgets don't resize themselves. - (x_tab_control_instantiate): new function. use lwlib tab functions. - (x_tab_control_set_property): new function. - (image_instantiator_format_create_glyphs_x): add tab_control. - - * glyphs-widget.c (widget_text_to_pixel_conversion): calculate - slightly more sensibly. - (initialize_widget_image_instance): ITEM->ITEMS. - (widget_instantiate_1): parse gui items generically into the ITEMS - entry. - - * glyphs-msw.c (mswindows_update_subwindow): replace - SINGLE_ITEM->ITEM. - (mswindows_register_widget_instance): ditto. - (add_tree_item): modify to use new pre-initialised gui-item - structure. - (add_tab_item): ditto. - (mswindows_tab_control_instantiate): ditto. - (mswindows_tab_control_set_property): ditto. - (image_instantiator_format_create_glyphs_mswindows): predicate - existance of widgets on HAVE_WIDGETS. - - * frame.h (struct frame): add subwindow_exposures variables. - - * frame.c (allocate_frame_core): reset subwindow_exposures links. - - * event-msw.c (mswindows_wnd_proc): check for ignored - expose events before redrawing. - - * event-Xt.c (emacs_Xt_handle_magic_event): check for ignored - expose events before redrawing. - -1999-07-30 SL Baur - - * scrollbar-x.c: should include EmacsFrame.h. - From Jeff Miller - -1999-07-30 XEmacs Build Bot - - * XEmacs 21.2.19 is released - -1999-07-27 Jeff Miller - - * add a "#ifdef HAVE_MENUBARS" wrapper to gui.c around - menubar_show_keybindings. - -1999-07-23 SL Baur - - * mule-charset.c (syms_of_mule_charset): Delete duplicated - definition of Qccl_program. - - * mule-ccl.h: Make a global declaration of it here. - -1999-07-20 Bob Weiner - - * s/sco7.h: Added from rr@sco.com. - -1999-06-25 MORIOKA Tomohiko - - * mule-ccl.c (ccl_driver): Fix `CCL_WriteMultibyteChar2'. - -1999-06-24 MORIOKA Tomohiko - - * file-coding.c (mule_decode): Setup `str->ccl.last_block'. - (mule_encode): Likewise. - - * mule-ccl.c (Qccl_program): New variable. - (CCL_SUSPEND): New macro. - (CCL_INVALID_CMD): New macro. - (CCL_READ_CHAR): Don't regard as invalid command while processing - the last block even if input is empty; use - `CCL_STAT_SUSPEND_BY_SRC' instead of `CCL_STAT_SUSPEND'. - (vars_of_mule_ccl): Setup `Qccl_program' and `Qccl_program_idx'. - - * mule-ccl.h (CCL_STAT_SUCCESS): Moved from mule-ccl.c. - (CCL_STAT_SUSPEND_BY_SRC): Imported from Emacs 20.3.10. - (CCL_STAT_SUSPEND_BY_DST): Likewise. - (CCL_STAT_INVALID_CMD): Moved from mule-ccl.c; change value from 2. - (CCL_STAT_QUIT): Moved from mule-ccl.c; change value from 3. - -1999-05-04 Ken'ichi Handa - - * mule-ccl.h (struct ccl_program): New member stack_idx. - - * mule-ccl.c (ccl_prog_stack_struct): Declare it as static. - (ccl_driver): Setup stack_idx and ccl_prog correctly. Update them - before returing. - (setup_ccl_program): Initialize ccl->stack_idx to 0. - -1998-10-12 Kenichi Handa - - * mule-ccl.c (CCL_DECODE_SJIS, CCL_ENCODE_SJIS): Swap the - definitions. - -1998-08-18 Kenichi Handa - - * mule-ccl.c (CCL_READ_CHAR): If eof is encounterd while - processing the last block, don't just finish but processes eol - block of the current CCL program. - (ccl_driver): Add a new jump label ccl_repeat for the above - change. - -1998-04-15 Kenichi Handa - - * mule-ccl.c: Typo in comments fixed. - (Qccl_program_idx): New variables. - (CCL_ReadMultibyteChar2): Macro name changed from - CCL_ReadMultibyteCharacter. - (CCL_WriteMultibyteChar2): Macro name changed from - CCL_WriteMultibyteChar2. - (ccl_driver): Adjusted for the above changes. - (resolve_symbol_ccl_program): New function. - (Fccl_execute): The arg CCL-PROGRAM can be a symbol of CCL - program. If CCL-PRGRAM is a vector, convert symbols in it to ID - numbers by resolve_symbol_ccl_program. - (Fccl_execute_on_string): Likewise. - (Fregister_ccl_program): If the arg CCL-PRGRAM is a vector, - convert symbols in it to ID numbers by resolve_symbol_ccl_program. - -1998-01-21 Kenichi Handa - - * mule-ccl.h: (struct ccl_program): New member private_state. - - * mule-ccl.c - (CCL_Call): Fix the comment. - (CCL_ReadMultibyteCharacter, CCL_WriteMultibyteCharacter): New - macros for CCL Commands. - (EXCMD): New macro. - (ccl_driver): New case lable `CCL_Extention'. - (setup_ccl_program): Initialize the member `private_state' of CCL. - -1999-07-08 Katsumi Yamaoka - - * keymap.c (copy_keymap_internal): Inherit the default binding. - -1999-07-14 Kazuyuki IENAGA - - * event-Xt.c (handle_focus_event_1): Re-enable Motif/XIM to get - focus the event (XIM_focus_event). - (emacs_Xt_handle_magic_event): No side effect on Motif/XIM because - XIM_SetGeometry does nothing in input_method_motif.c, but re-unify - the interface for future use (XIM_SetGeometry). - * redisplay-x.c (x_output_string): Re-enable Motif/XIM to set spot - location (XIM_SetSpotLocation). - (x_output_eol_cursor): Ditto. - -1999-07-17 Gunnar Evermann - - * gdbinit (pobj): change lrecord_foo to &lrecord_foo to match - Olivier's change to lrecord.h of 1999-04-22 - -1999-07-20 Robert Pluim - - * gutter.c (redraw_exposed_gutter): Change type of pos from - enum toolbar_pos -> enum gutter_pos, since former is only defined - if toolbar support is. - -1999-07-19 Andy Piper - - * glyphs-x.c (x_resize_subwindow): cope with widgets as well as - subwindows. - - * gutter.c (gutter_validate): new function for the gutter specifier. - (specifier_type_create_gutter): declare specifier validator. - - * buffer.h (INC_CHARBYTIND): add for no error checking version. - -1999-07-18 Andy Piper - - * redisplay.c (add_emchar_rune): use XSTRING_DATA not string_data. - - * glyphs-msw.c (console_type_create_glyphs_mswindows): add - resize_subwindow. - (mswindows_resize_subwindow): new function. - - * gutter.c (redraw_exposed_gutter): only reset the - current_display_lines if non-zero. - (Fgutter_pixel_height): new function. - (Fgutter_pixel_width): new function. - - * event-msw.c (mswindows_wnd_proc): set the mask of the parameter - we want to retrive from the tab control. - -1999-07-17 Andy Piper - - * window.c (change_window_height): mark gutters changed when we're - done. - - * gutter.c (specifier_vars_of_gutter): make defaults more - sensible. - - * gutter.h (WINDOW_REAL_GUTTER_BORDER_WIDTH): adjust to be 0 for 0 - height gutter. - (DEFAULT_GUTTER_WIDTH): change. - (DEFAULT_GUTTER_BORDER_WIDTH): change. - -1999-07-18 Andy Piper - - * redisplay.c (add_emchar_rune): use XSTRING_DATA not string_data. - -1999-07-16 Andy Piper - - * frame.c (Fmake_frame): call init_frame_gutters(). - - * redisplay.c (add_emchar_rune): use string functions if we are - working with a string. - (position_redisplay_data_type): add string element. - -1999-07-15 Andy Piper - - * winslots.h: add real_gutter_size slots to hold the actual gutter - size. This is important for autodetected sizes. - - * gutter.c (calculate_gutter_size): calculate size for gutters - that have 'autodetect size. - - * redisplay-msw.c (mswindows_output_vertical_divider): adjust - extent of divider for gutters. - - * redisplay-x.c (x_output_vertical_divider): adjust extent of - divider for gutters. - - * scrollbar.c (update_scrollbar_instance): adjust scrollbar - position to take into account the gutters. - - * redisplay.c (generate_modeline): adjust modeline position to - take into account the gutters. - -1999-07-14 Andy Piper - - * gutter.c (frame_topmost_window): new function. - (frame_bottommost_window): ditto. - (frame_leftmost_window): ditto. - (frame_rightmost_window): ditto. - -1999-07-13 Andy Piper - - * redisplay.c (calculate_display_line_boundaries): use text - boundaries so that gutters get handled properly. - -1999-07-12 Andy Piper - - * glyphs-x.c (x_widget_instantiate): set the font Motif-style if - we're using Motif. - - * redisplay-output.c (redisplay_clear_to_window_end): generalised - from redisplay-x.c - - * redisplay-x.c (redisplay_clear_to_window_end): moved to - redisplay.c - - * redisplay-msw.c (redisplay_clear_to_window_end): deleted. - - * gutter.c: new file - implements gutters. All new functions are - semantically equivalent to the toolbar functions. - (gutter_was_visible): new function. - (get_gutter_coords): ditto. - (output_gutter): ditto. - (clear_gutter): ditto. - (update_frame_gutters): ditto. - (redraw_exposed_gutter): ditto. - (redraw_exposed_gutters): ditto. - (free_frame_gutters): ditto. - (init_frame_gutters): ditto. - (decode_gutter_position): ditto. - (Fset_default_gutter_position): ditto. - (Fset_default_gutter_position): ditto. - (Fdefault_gutter_position): ditto. - (gutter_after_change): ditto. - (Fgutter_specifier_p): ditto. - (recompute_overlaying_specifier): ditto. - (gutter_specs_changed): ditto. - (default_gutter_specs_changed): ditto. - (gutter_geometry_changed_in_window): ditto. - (default_gutter_size_changed_in_window): ditto. - (default_gutter_border_width_changed_in_window): ditto. - (default_gutter_visible_p_changed_in_window): ditto. - (syms_of_gutter): ditto. - (vars_of_gutter): ditto. - (specifier_type_create_gutter): ditto. - (specifier_vars_of_gutter): ditto. - - * gutter.h: new file. Contains gutter constants and sizing macros - similar to those for the toolbar. - - * winslots.h: add gutter variables. - - * window.h: declare window_is_* functions. - - * window.c (window_is_lowest): make non-static. - (window_is_highest): ditto. - (window_top_toolbar_height): deleted. - (window_bottom_toolbar_height): deleted. - (window_left_toolbar_width): deleted. - (window_right_toolbar_width): deleted. - (window_top_gutter_height): add gutter sizing. - (window_bottom_gutter_height): ditto. - (window_left_gutter_width): ditto. - (window_right_gutter_width): ditto. - - * symsinit.h: declarations for gutters vars etc. - - * search.c (bi_find_next_emchar_in_string): new function. - - * scrollbar.c (update_scrollbar_instance): remove reference to - window_bottom_toolbar_height which did nothing. - - * redisplay.h (struct display_line): add face indices for - overriding defaults in output_display_line. - Add gutter_changed flags and declarations. - - * redisplay.c (create_string_text_block): new function, similar to - create_text_block but for strings. Display tables etc are used - from the currently selected window. - (generate_string_display_line): ditto. Similar to - generate_display_line. - (generate_displayable_area): generate display lines for a given - area on a frame. Input is the string, with associated extents, to - display. - (redisplay_frame): add gutter_changed check. - (redisplay_device): ditto. - (redisplay_without_hooks): ditto. - - * redisplay-x.c (bevel_modeline): moved to redisplay.c. - (x_redraw_exposed_area): redraw exposed gutters. - (x_bevel_area): new redisplay device method. - (x_type_create_redisplay_mswindows): add bevel_area device method. - (x_output_display_block): fiddly Martin-style cleanup. - (x_output_vertical_divider): use bevel_area. - - * redisplay-output.c (output_display_line): check display_lines - for face information before using defaults. - (bevel_modeline): new function, calls bevel_area with appropriate - values. - - * redisplay-msw.c (bevel_modeline): moved to redisplay.c. - (mswindows_redraw_exposed_area): redraw exposed gutters. - (mswindows_bevel_area): new redisplay device method. - (console_type_create_redisplay_mswindows): add bevel_area device - method. - - * indent.c (string_column_at_point): add column_at_point but for - strings. - - * glyphs-x.c (image_instantiator_format_create_glyphs_x): only - instantiate widgets that we have a toolkit for. - - * general.c: add Qgutter. - - * frame.h (struct frame): add display lines for gutters and - visibility flags. - - * frame.c (set_frame_selected_window): mark gutters changed. - - * emacs.c (main_1): add gutter initialisation. - - * device.h (struct device): add gutter_changed flag and macros to - manipulate it. - - * console.h (struct console_methods): new bevel area redisplay - method. - - * buffer.h (REAL_INC_CHARBYTIND): new macro for strings as - REAL_INC_BYTIND is for buffers. - (INC_CHARPTR): ditto. - - * Makefile.in.in (objs): add gutter.o - -1999-07-13 XEmacs Build Bot - - * XEmacs 21.2.18 is released - -1999-07-08 SL Baur - - * event-Xt.c (handle_focus_event_1): Guard FRAME_X_XIC with - XIM_XLIB. - (emacs_Xt_handle_magic_event): Ditto. - * redisplay-x.c (x_output_string): Ditto. - (x_output_eol_cursor): Ditto. - -1999-06-30 Kazuyuki IENAGA - - * event-Xt.c, input-method-xlib.c, redisplay-x.c: Avoid the - problem that when XIM is destroyed or missed with some reason, - xemacs will die. Now xim=xlib waits the XIM will be ready and - endures the case of XIM end up. - -1999-07-03 Gunnar Evermann - - * tooltalk.c (init_tooltalk): save signal actions for SIGQUIT, - SIGINT and SIGCHLD before calling tt_open and restore the - afterwards. This fixes e.g. the zombie subprocesses on Solaris - -1999-07-06 SL Baur - - * s/linux.h: gcc-2.8 changes for powerpc - From Justin Vallon - -1999-07-05 Didier Verna - - * indent.c: new symbol Qcoerce. - (Fmove_to_column): use it + doc string update. - -1999-07-04 Andy Piper - - * console.c: undo earlier Fprovide changes. - * fns.c: ditto. - * console.h: ditto. - - * console-tty.c (image_instantiator_format_create_glyphs_tty): new - function. validate appropriate image formats for tty. - - * glyphs.h (INITIALIZE_IMAGE_INSTANTIATOR_FORMAT_NO_SYM): - initialize consoles parameter. - (struct image_instantiator_methods): add consoles parameter. - (IIFORMAT_VALID_CONSOLE): new function. validate the format on the - console. - (INITIALIZE_DEVICE_IIFORMAT): validate the format on the given - console. - - * glyphs-msw.c: declare instantiators for later use. - (image_instantiator_format_create_glyphs_mswindows): validate xpm - and friends on the mswindows console. - * glyphs-x.c: ditto. - - * glyphs.c (valid_image_instantiator_format_p): disallow glyphs - that have not been registered on the supplied device. - (Fvalid_image_instantiator_format_p): add locale argument. - (instantiate_image_instantiator): valid image instantiator on the - device. - - * symsinit.h: add image_instantiator_format_create_glyphs_tty() - declaration. - - * emacs.c (main_1): add call to - image_instantiator_format_create_glyphs_tty(). - -1999-06-29 Olivier Galibert - - * lisp.h: Add #include . - - * sysdep.c: Remove #include . - * symbols.c: Remove #include . - * sheap.c: Remove #include . - * opaque.c: Remove #include . - * nt.c: Remove #include . - * mule-charset.c: Remove #include . - * marker.c: Remove #include . - * file-coding.c: Remove #include . - * extents.c: Remove #include . - * elhash.c: Remove #include . - * data.c: Remove #include . - * chartab.c: Remove #include . - * bytecode.c: Remove #include . - * alloc.c: Remove #include . Fix vector description - -1999-06-30 SL Baur - - * editfns.c: Document "%s" format spec. - Suggested by Bob Weiner - -1999-06-29 Andy Piper - - * event-msw.c: fix definition booboo. - -1999-06-28 Andy Piper - - * glyphs-x.c: change tree -> tree-view, progress -> - progress_gauge, edit -> edit-field, tab -> tab-control, combo -> - combo-box. - (complex_vars_of_glyphs_x): provide-on-console the implemented - widget types. - - * glyphs-msw.c: ditto. - (complex_vars_of_glyphs_mswindows): ditto. - - * lisp.h: add Fprovide_on_console. - - * fns.c (Ffeaturep): add extra optional console argument. - (Fprovide_on_console): like Fprovide but provides only on the - specified console-type. - (Frequire): check console-features as well as global features. - - * console.c (Fconsole_features): new function. return features for - this console. - (syms_of_console): add Fconsole_features. - - * console.h (CONMETH_FEATURES): new function for accessing features. - (CONSOLE_FEATURES): ditto. - (struct console_methods): add features slot. - (INITIALIZE_CONSOLE_TYPE): initialize features slot. - -1999-06-28 Andy Piper - - * event-Xt.c (handle_focus_event_1): conditionally compile for - X11R5. - - * s/cygwin32.h: fix me website address. - - * event-msw.c: add NMHDR for pre b20 cygwin builds. - - * gui-x.c (button_item_to_widget_value): only add callback if it - is non-nil. - - * glyphs-x.c: add progress, edit and combo instantiators. - (x_widget_set_property): new function. uses lwlib to set widget - values. - (x_widget_property): new function. uses lwlib to get widget - values. - (x_button_instantiate): support images in buttons. - (x_button_property): new function. use lwlib to get the selected - state. - (x_progress_instantiate): new function for instantiating progress - gauges. - (x_progress_set_property): new function. sets the progress gauge - position. - (x_edit_instantiate): new function. for instantiating edit fields. - (x_combo_instantiate): new function. for instantiating combo - boxes. - (image_instantiator_format_create_glyphs_x): add new device ii - formats. - - * glyphs-msw.c (mswindows_tab_instantiate): remove redundant var. - - * console.h (CONSOLE_FEATURES): new features accesor. - - * conslots.h (MARKED_SLOT): add features entry. - -1999-06-25 Andy Piper - - * menubar-x.c (menu_item_descriptor_to_widget_value_1): use new - gui functions. - - * menubar-msw.c: move MAX_MENUITEM_LENGTH to gui.h - - * gui.h (struct Lisp_Gui_Item): add accelerator. - - * gui.c (gui_item_add_keyval_pair): deal with accelerators. - (gui_item_init): ditto. - (gui_add_item_keywords_to_plist): ditto. - (mark_gui_item): ditto. - (gui_item_hash): ditto. - (gui_item_accelerator): new function. - (gui_name_accelerator): new function stolen from gui-x.c - - * gui-x.c (popup_selection_callback): always define. mark - subwindows changed after calling a callback. - (menu_name_to_accelerator): deleted. - (button_item_to_widget_value): forward gui_item things to gui_item - functions. - - * glyphs-x.h (struct x_subwindow_data): add data for widgets. add - appropriate accesors. - - * glyphs-x.c: declare new glyph formats. - (x_finalize_image_instance): unmanage and destroy widgets if they - exist. - (x_unmap_subwindow): handle widgets specially. - (x_map_subwindow): ditto. offset display of widgets by offset of - text widget within container. - (x_update_subwindow): new function. call lw_modify_all_widgets - when we are a widget. - (x_widget_instantiate): new function for generically creating - widgets-glyphs. toolkit specifics forwarded to lwlib. - (x_button_instantiate): new function for instantiating - widgets-glyph buttons. - (console_type_create_glyphs_x): register update_subwindow. - (image_instantiator_format_create_glyphs_x): register widget and - button types. - - * event-msw.c (mswindows_wnd_proc): remove redundant variable. - - * event-Xt.c (x_event_to_emacs_event): call handle_focus_event_1 - when we get a button press in case we do not have the focus. - (handle_focus_event_1): set the keyboard focus to the text widget - if we do not have it. - - * dialog-x.c (dbox_descriptor_to_widget_value): use new gui_item - functions. - -1999-06-24 SL Baur - - * syntax.c (scan_words): Restore non-Mule code. - (word_constituent_p): Restore. - -1999-06-23 Olivier Galibert - - * config.h.in: Add missing #undef *_USER_DEFINED. - -1999-06-23 SL Baur - - * lisp.h (set_bit_vector_bit): Force promotion to unsigned long - int (fixes a 64-bit problem). - - * chartab.c (word_boundary_p): Use EQ not == for lisp_object - comparison. - -1999-03-23 Michael Sperber [Mr. Preprocessor] - - * paths.h.in (PATH_DOC): Made doc-directory configurable. - -1999-06-22 Olivier Galibert - - * lrecord.h: Added basic external description system. - - * symbols.c: Added symbol, symbol-value-buffer-local, - symbol-value-lisp-magic and symbol-value-varalias description. - * mule-charset.c: Added charset description. - * marker.c: Added marker description. - * keymap.c: Added keymap description. - * glyphs.c: Added glyph description. - * floatfns.c: Added float description. - * file-coding.c: Added coding-system description. - * extents.c: Added extent description. - * elhash.c: Added hash-table description. - * data.c: Added weak-list desciption. - * chartab.c: Added char-table-entry and char-table description. - * bytecode.c: Added compiled-function description. - * alloc.c: Added cons, vector and string description. - -1999-06-22 Olivier Galibert - - * lrecord.h (struct lrecord_header): Reduced size to 4 bytes. - Updated everything to the removal of the "flags" substructure. - - * lisp.h (subr_lheader_initializer): Updated. - * symeval.h (symbol_value_forward_lheader_initializer): Updated. - -1999-06-20 MORIOKA Tomohiko - - * syntax.c (word_constituent_p): Deleted. - (scan_words): Use `WORD_BOUNDARY_P'. - - * chartab.c (Vword_combining_categories): New variable. - (Vword_separating_categories): Likewise. - (CATEGORYP): New macro. - (CATEGORY_SET): Likewise. - (CATEGORY_MEMBER): Likewise. - (word_boundary_p): New function. - (complex_vars_of_chartab): Set up new variable - `word-combining-categories' and `word-separating-categories'. - -1999-06-18 Olivier Galibert - - * lrecord.h: Added description as a placehold in the lrecord - implementation structures. Added the parameter to all constructor - defines. - - * alloc.c: Added placeholders. - * buffer.c: Ditto. - * bytecode.c: Ditto. - * chartab.c: Ditto. - * console.c: Ditto. - * data.c: Ditto. - * database.c: Ditto. - * device.c: Ditto. - * eldap.c: Ditto. - * elhash.c: Ditto. - * eval.c: Ditto. - * event-stream.c: Ditto. - * events.c: Ditto. - * extents.c: Ditto. - * faces.c: Ditto. - * file-coding.c: Ditto. - * floatfns.c: Ditto. - * fns.c: Ditto. - * frame.c: Ditto. - * glyphs.c: Ditto. - * gui-x.c: Ditto. - * keymap.c: Ditto. - * lstream.c: Ditto. - * marker.c: Ditto. - * mule-charset.c: Ditto. - * objects.c: Ditto. - * opaque.c: Ditto. - * process.c: Ditto. - * rangetab.c: Ditto. - * specifier.c: Ditto. - * symbols.c: Ditto. - * toolbar.c: Ditto. - * tooltalk.c: Ditto. - * window.c: Ditto. - -1999-06-22 XEmacs Build Bot - - * XEmacs 21.2.17 is released - -1999-06-13 Oscar Figueiredo - - * config.h.in (HAVE_LDAP_SET_OPTION): New define - (HAVE_LDAP_GET_LDERRNO): Ditto - (HAVE_LDAP_RESULT2ERROR): Ditto - (HAVE_LDAP_PARSE_RESULT): Ditto - (HAVE_UMICH_LDAP): Removed - (HAVE_NS_LDAP): Removed - - * eldap.h (struct Lisp_LDAP): Removed the `livep' member as - suggested by Olivier Galibert - (CHECK_LIVE_LDAP): Test on `ld' instead of `livep' - - * eldap.c: Take the removal of `livep' into account in all the - necessary functions - (signal_ldap_error): Take two additional parameters - Added new finer compilation conditions in order to use - ldap_parse_result or ldap_result2error if available - (Fldap_open): Conform to this new API - (Fldap_search_internal): Ditto - -1999-06-17 SL Baur - - * data.c (struct int_or_double): Should use EMACS_INT not int. - -1999-06-16 Norbert Koch - - * redisplay-msw.c: Run 'ccl_driver' with 'CCL_MODE_ENCODING' as in - redisplay-x.c - -1999-06-12 MORIOKA Tomohiko - - * redisplay-x.c (separate_textual_runs): Run `ccl_driver' with - `CCL_MODE_ENCODING'. - - * file-coding.c (mule_decode): Run `ccl_driver' with - `CCL_MODE_DECODING'. - (mule_encode): Run `ccl_driver' with `CCL_MODE_ENCODING'. - - * mule-ccl.c (CCL_WRITE_CHAR): Refer `conversion_mode'. - (ccl_driver): Add new argument `conversion_mode'. - (Fccl_execute): Run `ccl_driver' with `CCL_MODE_ENCODING'. - (Fccl_execute_on_string): Likewise [perhaps it is better to add - new optional argument]. - - * mule-ccl.h (CCL_MODE_ENCODING): New macro. - (CCL_MODE_DECODING): New macro. - (ccl_driver): Add new argument `conversion_mode'. - -1999-06-15 SL Baur - - * mule-charset.c (Fsplit_char): New subr. - (Fchar_octet): delete. - (syms_of_mule_charset): DEFSUBR it. - -1999-06-13 Andy Piper - - * menubar.h: update declarations involving gui_items. - - * lisp.h: declare Lisp_Gui_Item. - - * glyphs.h (struct Lisp_Image_Instance): update type of gui_item. - - * glyphs.c (mark_image_instance): modify for new lisp-based gui_items. - (print_image_instance): ditto. - (image_instance_equal): ditto. - (image_instance_hash): ditto. - - * event-msw.c (mswindows_need_event): assert badly_p status. - (mswindows_wnd_proc): modify WM_NOTIFY handling to cope with - callbacks in tree-view and tab-control widgets. - (emacs_mswindows_next_event): modify use of - mswindows_dequeue_dispatch_event. - - * dialog-msw.c (mswindows_popup_dialog_box): modify for new - lisp-based gui_items. - - * glyphs-msw.c (mswindows_update_subwindow): update use of - gui_items. - (mswindows_register_gui_item): new function. - (mswindows_register_gui_item): fix to use lisp gui_items. - (mswindows_widget_instantiate): ditto. - (mswindows_button_instantiate): ditto. - (add_tree_item): new function to recursively add tree view - elements. - (add_tree_item_list): ditto. - (mswindows_tree_instantiate): new function. instantiate tree view - controls. - (add_tab_item): new function to add tabs to a tab control. - (mswindows_tab_instantiate): new function. instantiate tab - controls. - (image_instantiator_format_create_glyphs_mswindows): add tree view - and tab controls. - (vars_of_glyphs_mswindows): ditto. - - * glyphs-widget.c (check_valid_item_list_1): allow nested lists in - item lists. - (check_valid_item_list): ditto. - (initialize_widget_image_instance): fix to use new lisp gui_item. - (widget_instantiate_1): allow the setting of default textwidth in - characters. - (widget_instantiate): change to use new widget_instantiate_1 - signature. - (combo_instantiate): ditto. - (static_instantiate): ditto. - (tab_instantiate): new function for tab widgets. - (image_instantiator_format_create_glyphs_widget): add tab and tree - view widgets. - - * menubar-msw.c (displayable_menu_item): convert to use lisp - gui_items. - (populate_menu_add_item): ditto. - (populate_or_checksum_helper): ditto. - - * menubar.c (menu_parse_submenu_keywords): convert to use lisp - gui_items. - (Fmenu_find_real_submenu): ditto. - - * gui.h (struct Lisp_Gui_Item): make gui_item a lisp oebjct. - - * gui.c (gui_item_add_keyval_pair): gui_items are now lisp - objects, convert functions that use them accordingly. - (gui_item_init): ditto. - (gui_item_active_p): ditto. - (gui_item_selected_p): ditto. - (gui_item_included_p): ditto. - (gui_item_display_flush_left): ditto. - (gui_item_display_flush_right): ditto. - (mark_gui_item): ditto. - (allocate_gui_item): new function to create a gui_item. - (make_gui_item_from_keywords_internal): ditto. create and return a - gui_item as well as setting keywords. - (gui_parse_item_keywords): ditto. - (gui_parse_item_keywords_no_errors): ditto. - (gui_add_item_keywords_to_plist): new function, not yet used. - (gui_item_hash): new function. - (gui_item_id_hash): use gui_item_hash. - (gui_item_equal): new function. - (print_gui_item): new function. - -1999-06-11 XEmacs Build Bot - - * XEmacs 21.2.16 is released - -1999-06-10 Andy Piper - - * select-msw.c (mswindows_own_selection): only set the clipboard - if asked. - (mswindows_get_foreign_selection): only get the clipboard if - asked. - (mswindows_disown_selection): only disown the clipboard if asked. - -1999-06-03 MORIOKA Tomohiko - - * file-coding.c (coding_system_from_mask): Use `raw-text' instead - of `no-conversion'. - (complex_vars_of_mule_coding): Use `raw-text' as the coding-system - of coding-category `no-conversion'. - -1999-06-03 MORIOKA Tomohiko - - * file-coding.c (Qraw_text): New variable. - (syms_of_mule_coding): Add new symbol `raw-text'. - (complex_vars_of_mule_coding): Add new coding-system `raw-text'; - define coding-system `binary' independently; define coding-system - `no-conversion' as an alias for `raw-text'. - - * file-coding.h (Qraw_text): New variable. - -1999-06-08 SL Baur - - * s/decosf4-0.h: Explicitly #undef SYSTEM_MALLOC. - -1999-06-06 Hrvoje Niksic - - * fns.c (MIME_LINE_LENGTH): Default to 72, as in mimencode and - base64.el. - (base64_decode_1): Signal errors instead of returning -1. - -1999-06-07 Hrvoje Niksic - - * mule-charset.c (Fmake_char): Update docstring. - -1999-06-07 Hrvoje Niksic - - * fns.c (Fstring_lessp): Actually increment the Bufbyte pointers. - -1999-06-05 Hrvoje Niksic - - * fns.c (base64_decode_1): Allow and ignore any non-base64 - characters in input. - -1999-05-27 Olivier Galibert - - * emacs.c (Fdump_emacs): Add clear_message() lost with the removal - of report_pure_usage(). - -1999-06-04 Hrvoje Niksic - - * fns.c (Fstring_lessp): Remove O(n^2) under Mule. - -1999-06-04 XEmacs Build Bot - - * XEmacs 21.2.15 is released - -1999-06-01 Hirokazu FUKUI - - * frame.c (Fset_mouse_position): - (Fset_mouse_pixel_position): - * window.c (Fsplit_window): - (Fmove_to_window_line): - Fix crash when invoking functions with an already-deleted window - argument. - - * indent.c (vertical_motion_1): - (vmotion_pixels): - (Fvertical_motion_pixels): - * window.c (Fwindow_displayed_text_pixel_height): - Fix error message when invoking functions with an already-deleted - window argument. - -1999-06-01 Jan Vroonhof - - * sysdep.c (request_sigio_on_device): Guard against glibc - 2.1's stub streams implementation. - -1999-06-03 SL Baur - - * config.h.in: - * emacs.c: Implement x.y.z version numbers - From Jan Vroonhof - -1999-05-20 MORIOKA Tomohiko - - * mule-charset.c (complex_vars_of_mule_charset): Registry of - japanese-jisx0208-1978 should not match with "jisx0208.1983" nor - "jisc6226.1983". - -1999-06-03 SL Baur - - * frame-x.c: - * device-x.c: rename session option to wmcommand. - From Oliver Graf - -1999-05-27 Hrvoje Niksic - - * fns.c (Fsubstring): Don't traverse the same region twice with - charcount_to_bytecount(). - -1999-06-03 SL Baur - - * m/alpha.h (SYSTEM_MALLOC): Fix indented preprocessor directive - garbage. - - * s/decosf4-0.h: Defining ORDINARY_LINK here is redundant (and it - doesn't really work as is implied by the commentary). - Don't define SYSTEM_MALLOC so the old GNU malloc can be used. - -1999-06-02 SL Baur - - * symsinit.h: Declare vars_of_ntproc. - * emacs.c (main_1): Call it. - - * ntproc.c (syms_of_ntproc): Move variable initializations from - here ... - (vars_of_ntproc): ... to here [new function]. - - * file-coding.c (syms_of_file_coding): Rename. - (vars_of_file_coding): Ditto. - (complex_vars_of_file_coding): Ditto. - - * symsinit.h: Rename *_mule_coding to *_file_coding. - - * emacs.c (main_1): Call them by the proper name. - - * device-msw.c (syms_of_device_mswindows): Move variable - initializations from here ... - (vars_of_device_mswindows): ... to here. - - * chartab.c (vars_of_chartab): New function. - - * symsinit.h: New function, vars_of_chartab. - - * emacs.c (main_1): Call it. - - * mule-canna.c (syms_of_mule_canna): Move CANNA initialization ... - (vars_of_mule_canna): ... to here. - - * mule-ccl.c (vars_of_mule_ccl): New function. Move variable - initializations out of syms_of_mule_ccl. - - * symsinit.h: Declare new function vars_of_mule_ccl. - - * emacs.c (main_1): Call it. - -1999-05-27 Hrvoje Niksic - - * fns.c (base64_decode_1): Ignore whitespace. - -1999-05-27 Hrvoje Niksic - - * mule-charset.c (Fmake_char): Strip the eighth bit off ARG1 and - ARG2. - -1999-05-21 Andy Piper - - * xselect.c: deleted. - - * symsinit.h: declare select initialisation. - - * select.h: new file. declare commonly used select functions and - variables. - - * select.c: new file. generalised from xselect.c. - (clean_local_selection_data): moved from xselect.c. - (get_local_selection): ditto. device specific pieces called via a - devmeth. - (handle_selection_clear): ditto. - (Fown_selection_internal): renamed and generalised from - Fx_own_selection_internal. moved from xselect.c. - (Fdisown_selection_internal): ditto. - (Fselection_owner_p): ditto. - (Fselection_exists_p): ditto. - (Fget_selection_internal): ditto. - (syms_of_select): new function. QXXXX values moved from xselect.c - (vars_of_select): new function. selection_converter_alist, - lost_selection_hooks moved and renamed from xselect.c - - * select-x.c: renamed from xselect.c. - (x_own_selection): converted to device specific. non-X-specific - bits moved to select.c. - (x_get_foreign_selection): ditto. - (x_disown_selection): ditto. - (x_selection_exists_p): ditto. - (console_type_create_select_x): new function. - - * select-msw.c (mswindows_own_selection): new device method to set - the clipboard when we 'own' the selection. - (mswindows_get_foreign_selection): new device method to get the - clipboard. - (mswindows_disown_selection): new device method to delete the - selection when we 'disown' it. - (console_type_create_select_mswindows): new function. - - * emacs.c (main_1): add select to things to initialise. - - * console.h (struct console_methods): new console methods for - selection. - - * Makefile.in.in (x_objs): xselect.c renamed to select-x.c - -1999-05-20 Hrvoje Niksic - - * print.c (long_to_string): Install a faster version. - -1999-05-16 Andy Piper - - * ntproc.c (syms_of_ntproc): default - win32-start-process-share-console to t. - -1999-05-14 Hrvoje Niksic - - * config.h.in: Do it here. - - * bytecode.c: Don't define ERROR_CHECK_TYPECHECK here. - -1999-05-14 Andy Piper - - * toolbar-msw.c (mswindows_output_toolbar): hash on something - hashable. - -1999-05-14 XEmacs Build Bot - - * XEmacs 21.2.14 is released - -1999-05-12 Andy Piper - - * ntproc.c (sys_spawnve): kludge argv[0] in a MS compatible way. - -1999-05-11 Gunnar Evermann - - * emacs.c (Frun_emacs_from_temacs): (re)alloc natgs+2 entries for - run_temacs_argv array -- fixes random memory corruption crash - -1999-05-12 Jan Vroonhof - - * window.c (Fcurrent_window_configuration): - Save minibuffer height; - - * window.c (set_window_configuration): use it. - -1999-05-10 Robert Pluim - - * lisp.h (NNUNGCPRO): fix typo in name of DEBUG_GCPRO version - -1999-04-21 Jan Vroonhof - - * redisplay.c (redisplay_window): Do not put data - in the line start cache if it is not guaranteed to be correct - -1999-04-02 Jan Vroonhof - - * window.c (struct window_config): Removed frame - size members. - (window_config_equal): No longer compare frame sizes. - (Fset_window_configuration): Resize old top window to fit in the - current frame directly, no longer use a fake frame resize. - (Fcurrent_window_configuration): No longer save frame size - -1999-05-11 Andy Piper - - * ntproc.c (sys_spawnve): actually assign argv[0] instead of the - first character. - -1999-05-10 Hrvoje Niksic - - * sysdep.c (init_system_name): If gethostname gives a proper - domain name, don't look further for one. - -1999-05-09 Hrvoje Niksic - - * symbols.c (Fintern): Avoid frequent XSYMBOL (foo). - (Fintern_soft): Accept a symbol argument. - -1999-05-06 Hrvoje Niksic - - * symbols.c (Fintern): ...do it here. - - * lread.c (read_atom): Don't handle keywords here. - -1999-05-06 Hrvoje Niksic - - * symbols.c (reject_constant_symbols): Just use SYMBOL_IS_KEYWORD. - -1999-05-03 Olivier Galibert - - * lisp.h (SYMBOL_IS_KEYWORD): A symbol can be a keyword only if it - is interned in the main obarray. - -1999-04-23 Gunnar Evermann - - * menubar-x.c (pre_activate_callback): set accelerator field in - "No menu" entries to nil. Avoid crash in - command_builder_operate_menu_accelerator - -1999-05-03 Olivier Galibert - - * symeval.h (symbol_value_forward_lheader_initializer): Ditto. - - * lisp.h (DEFUN): Fix lrecord header initialisation. - -1999-05-02 Andy Piper - - * objects-msw.c (mswindows_font_instance_truename): add a ';'. - - * ntproc.c (sys_kill): cast using MS mandated defines. - -1999-04-29 Andy Piper - - * m/intel386.h: remove redundant definitions. - - * s/mingw32.h: new header for mingw32. - - * unexnt.c: (open_input_file): function moved to nt.c. - (close_file_data): ditto. - (rva_to_section): function moved to ntproc. - - * symsinit.h: declare syms_of_ntproc(); - - * objects-msw.c (mswindows_font_instance_truename): new function. - - * ntproc.c: remove many warnings. - (_sys_read_ahead): moved from nt.c and made static. - (rva_to_section): moved from unexnt.c but not defined under - mingw32. - (win32_executable_type): implement what we can for mingw32 - headers. - (sys_spawnve): fix bad MULE/GCPRO bug in filename handling. - - * ntheap.h: remove declarations of functions that are now static. - - * ntheap.c: support static heap. - - * nt.h: conditionalise X_OK definition. - - * nt.c: eliminate many warnings and support mingw32. - (open_input_file): function moved from unexnt.c and made static - (close_file_data): ditto. - (_sys_read_ahead): moved to ntproc.c - - * emacs.c: make sure syms_of_ntptroc gets called under windows. - - * console-msw.h: support mingw32. - * getloadavg.c: ditto. - * ntplay.c: ditto. - * sysdep.c: ditto. - * sysdir.h: ditto. - * systime.h: ditto. - * systty.h: ditto. - - * config.h.in: dont turn on DEBUG_ENCAPSULATION by default because - some systems don't have all of the encapsulated system calls. - - * callproc.c: warning elimination. - * dired-msw.c: ditto. - * process-nt.c: ditto. - * realpath.c: ditto. - - * Makefile.in.in: tweak : and ; for building under mswindows. - -1999-04-26 Michael Harnois - - * eldap.c (allocate_ldap): Adapt to the new semantics of - alloc_lcrecord_type(). - -1999-03-16 MORIOKA Tomohiko - - * file-coding.c (DECODE_HANDLE_END_OF_CONVERSION): fixed. - -1998-09-04 MORIOKA Tomohiko - - * Delete mule-coding.c and mule-coding.h because they are not - used. - -1999-04-22 Gunnar Evermann - - * objects.c (print_font_instance): Check for NILP(f->device), - i.e. Vthe_null_font_instance. - (font_instance_truename_internal): ditto. - (Ffont_instance_properties): ditto. - -1999-04-22 Olivier Galibert - - * lrecord.h (DECLARE_LRECORD): lrecord_implementation isn't an - array anymore. - -1999-04-22 Hrvoje Niksic - - * Makefile.in.in (tests): Don't mention tests explicitly -- makes - it easier to add new ones. - -1999-04-22 Hrvoje Niksic - - * symbols.c (reject_constant_symbols): Ditto. - (init_symbols_once_early): Ditto. - - * print.c (print_symbol): Don't use ->obarray. - - * symbols.c (Funintern): Ditto. - - * alloc.c (Fmake_symbol): Don't set ->obarray. - - * lisp.h (struct Lisp_Symbol): Removed .obarray field. - - * symbols.c (init_symbols_once_early): Removed - Vpure_uninterned_symbol_table. - (Fintern): Don't store to ->obarray field. - -1999-04-22 Hrvoje Niksic - - * data.c (vars_of_data): Default debug_issue_ebola_notices to 0. - (eq_with_ebola_notice): Remove abracadabra support. - -1999-04-11 Oscar Figueiredo - - * eldap.c (Fldap_search_internal): Add a new parameter `withdn' to - retrieve the distinguished names of entries - -1999-03-08 Martin Buchholz - - * lread.c (read_escape): Make hex escapes read only two hex digits. - -1999-04-05 Olivier Galibert - - * Makefile.in.in: Remove puresize-adjust.h and recursive makes. - * make-src-depend: Remove puresize-adjust.h. - * src-headers: Remove puresize-adjust.h. - * config.h.in: Kill everything purespace/gung-ho related. - - * dbxrc: Make gung-ho mandatory. - * gdbinit: Ditto. - - * lrecord.h: Make gung-ho mandatory. Remove pure flag and add - c_readonly and lisp_readonly. Remove implementation arrays. - (C_READONLY_RECORD_HEADER_P): Added. - (LISP_READONLY_RECORD_HEADER_P): Added. - (SET_C_READONLY_RECORD_HEADER): Added. - (SET_LISP_READONLY_RECORD_HEADER): Added. - - * lisp.h: Kill everything purespace/non gung-ho related. - (CHECK_C_WRITEABLE): Added. - (CHECK_LISP_WRITEABLE): Added. - (C_READONLY): Added. - (LISP_READONLY): Added. - - * lisp-union.h: Make gung-ho mandatory. - * lisp-disunion.h: Ditto. - - * alloc.c: Kill everything purespace/non gung-ho related. Fix all - set_lheader_implementation calls. - (c_readonly): Added. - (lisp_readonly): Added. - (make_string_nocopy): Added. - (Fpurecopy): Changed to do nothing. Kept the old documentation - for reference purposes for the next patches. - (sweep_lcrecords_1): Don't free C readonly lcrecords. - (sweep_bit_vectors_1): Don't free C readonly bitvectors. - (SWEEP_FIXED_TYPE_BLOCK): Don't free C readonly lrecords. - - * fns.c: Make gung-ho mandatory. - (Fput): CHECK_IMPURE -> CHECK_LISP_WRITEABLE. - (Fremprop): Ditto. - (Ffillarray): Ditto. - - * data.c: Make gung-ho mandatory. - (pure_write_error): Removed. - (c_write_error): Added. - (lisp_write_error): Added. - (Fsetcar): CHECK_IMPURE -> CHECK_LISP_WRITEABLE. - (Fsetcdr): Ditto. - (Faset): Ditto. - - * symbols.c: Make gung-ho mandatory. make_pure_pname -> - make_string or make_string_nocopy. Fix various - alloc_lcrecord_type. - - * lread.c: Remove everything purespace related. - (Flocate_file_clear_hashing): purified -> c_readonly. - (locate_file): Ditto. - (read_atom): make_pure_pname -> make_string. - - * emacs.c (Frun_emacs_from_temacs): Remove purespace stats - reporting. - (Fdump_emacs): Ditto. - - * print.c (print_internal): Make gung-ho mandatory. - * ntheap.c (sbrk): Ditto. - * mem-limits.h (EXCEEDS_LISP_PTR): Ditto - * symeval.h (symbol_value_forward_lheader_initializer): Ditto. - - * sheap.c (more_static_core): Remove puresize-adjust.h from - message. - - * syntax.c (complex_vars_of_syntax): make_pure_string -> - make_string_nocopy. - * keymap.c (make_keymap): Fix alloc_lcrecord_type. - (vars_of_keymap): make_pure_string -> make_string_nocopy. - * events.c (deinitialize_event): Fix set_lheader_implementation. - (zero_event): Ditto. - * specifier.c (make_specifier_internal): Fix alloc_lcrecord. - * menubar-x.c (set_frame_menubar): Fix alloc_lcrecord_type. - * mule-charset.c (make_charset): Ditto. - * console.c (allocate_console): Ditto. - (complex_vars_of_console): Ditto. - * file-coding.c (allocate_coding_system): Ditto. - * device.c (allocate_device): Ditto - * gui-x.c (gcpro_popup_callbacks): Ditto. - * extents.c (allocate_extent_auxiliary): Ditto. - (allocate_extent_info): Ditto. - (copy_extent): Ditto. - * glyphs.c (allocate_image_instance): Ditto. - (allocate_glyph): Ditto. - * frame.c (allocate_frame_core): Ditto. - * database.c (allocate_database): Ditto. - * tooltalk.c (make_tooltalk_message): Ditto. - (make_tooltalk_pattern): Ditto. - * rangetab.c (Fmake_range_table): Ditto. - (Fcopy_range_table): Ditto. - * process.c (make_process_internal): Ditto. - * chartab.c (Fmake_char_table): Ditto. - (make_char_table_entry): Ditto. - (copy_char_table_entry): Ditto. - (Fcopy_char_table): Ditto. - * elhash.c (make_general_lisp_hash_table): Ditto. - (Fcopy_hash_table): Ditto. - * buffer.c (allocate_buffer): Ditto. - (complex_vars_of_buffer): Ditto. - * event-stream.c (allocate_command_builder): Ditto. - * objects.c (Fmake_color_instance): Ditto. - (Fmake_font_instance): Ditto. - (vars_of_objects): Ditto. - * toolbar.c (update_toolbar_button): Ditto. - * window.c (allocate_window): Ditto. - (make_dummy_parent): Ditto. - (Fcurrent_window_configuration): Fix alloc_lcrecord. - (vars_of_window): Fix make_lcrecord_list. - * faces.c (allocate_face): Fix alloc_lcrecord_type. pure_list -> - Flist. - * lstream.c (Lstream_new): Fix make_lcrecord_list. - * opaque.c (make_opaque): Fix alloc_lrecord. - (make_opaque_list): Fix alloc_lrecord_type. - -1999-04-19 Hrvoje Niksic - - * process.c (Fstart_process_internal): Ditto. - - * ntproc.c (sys_spawnve): Use Vlisp_EXEC_SUFFIXES when calling - locate_file(). - - * glyphs-x.c (x_locate_pixmap_file): Ditto. - - * glyphs-msw.c (mswindows_locate_pixmap_file): Fix call to - locate_file(). - - * emodules.c (vars_of_module): New variable Vmodule_extensions. - (emodules_load): Use it when calling locate_file(). - - * emacs.c (main_1): Use Vlisp_EXEC_SUFFIXES when calling - locate_file(). - - * callproc.c: Vlisp_EXEC_SUFFIXES: New variable. - (vars_of_callproc): Initialize it. - (Fcall_process_internal): Use it when calling locate_file(). - - * alloc.c (disksave_object_finalization): Use - Flocate_file_clear_hashing(). - - * lread.c (Flocate_file_clear_hashing): Clear all hasing when - given `t' as argument. - -1999-04-18 Hrvoje Niksic - - * lread.c (locate_file): Expand `pathel' when appropriate. - (Flocate_file_clear_hashing): Expand path elements. - (Flocate_file_clear_hashing): Use Vlocate_file_hash_table. - - * dired.c (make_directory_hash_table): Create the hash-table only - if the directory open is successful. - - * lread.c (decode_mode_1): New function. - (decode_mode): Ditto. - (Flocate_file): Use them. - (Flocate_file): Expand FILENAME. - (locate_file_map_suffixes): New function. - (locate_file_in_directory_mapper): New function. - (locate_file_in_directory): Use locate_file_in_directory_mapper() - and locate_file_map_suffixes(). - (locate_file_construct_suffixed_files): Use - locate_file_map_suffixes(). - (locate_file_without_hash): Don't GCPRO path. - (Flocate_file_clear_hashing): Use EXTERNAL_LIST_LOOP. - (syms_of_lread): Remove Qlocate_file_hash_table. - (locate_file_find_directory_hash_table): Use - Vlocate_file_hash_table. - (locate_file_refresh_hashing): Ditto. - - * lread.c: Renamed read_objects to Vread_objects. - -1999-04-16 Olivier Galibert - - * mule-charset.c: Generally resync with fsf 20.3 charset - interface. - (make_charset): Add long and short name. Use id instead of - leading byte. - (Fmake_charset): Ditto. - (Fmake_reverse_direction_charset): Ditto. - (Fcharset_property): Ditto. - (Fcharset_short_name): Added. - (Fcharset_long_name): Added. - (Fcharset_description): Renamed from charset-doc-string. - (syms_of_mule_charset): Synced symbols. - (complex_vars_of_mule_charset): Synced charsets. - - * mule-charset.h: Removed leading byte (uses id instead), added - short and long name. - -1999-04-15 Hrvoje Niksic - - * file-coding.c (Fdefine_coding_system_alias): New function. - -1999-04-08 Olivier Galibert - - * mule-charset.c (complex_vars_of_mule_charset): Allow all iso8859 - and -ascii fonts for displaying ascii instead of iso8859-1 only. - -1998-12-14 Hrvoje Niksic - - * extents.c (set_extent_glyph_1): Make sure that the glyph we - attach to the extent is valid. - -1998-12-12 Hrvoje Niksic - - * dired.c (user_name_completion): Mule-ize. - (user_name_completion): Use xmalloc/xrealloc/xfree. - (user_name_completion): Use DO_REALLOC. - (user_name_completion): Cut down the number of static variables; - use a structure. - (user_name_completion): Username completion is always - case-sensitive. - -1998-12-06 Hrvoje Niksic - - * fns.c (base64_decode_1): Remove COUNTER. - (base64_decode_1): Accept CRLF in addition to CR. - (base64_decode_1): Disallow a stray character after final EOF; the - check was probably a remnant of buggy recode code. - -1998-12-05 Hrvoje Niksic - - * fns.c (init_provide_once): Provide `base64'. - -1998-12-04 Hrvoje Niksic - - * fns.c (XMALLOC_UNBIND): Include SPECCOUNT argument, for clarity. - (Fbase64_encode_region): If buffer is read-only, bail out early. - (Fbase64_decode_region): Ditto. - (Fbase64_encode_region): Initialize SPECCOUNT to pacify the - compiler. - (Fbase64_encode_string): Ditto. - (Fbase64_decode_region): Ditto. - (Fbase64_decode_string): Ditto. - -1998-11-25 Hrvoje Niksic - - * dired.c (Fdirectory_files): Remove redundant code. - -1999-03-05 Philip Aston - - * frame-msw.c Make raise-frame restore minimised windows. - -1999-03-05 Philip Aston - - * device-msw.c: Fix DEFVAR format - Death to phantom quote, and - add magic newline. - -1999-03-05 Philip Aston - - * toolbar-msw.c Consider captions when deciding whether to rebuild - toolbar. This fixes the initial toolbar display for those of us - who don't like captions. These patches applied by Andy Piper. - -1999-03-12 XEmacs Build Bot - - * XEmacs 21.2.13 is released - -1999-03-12 SL Baur - - * file-coding.c: Guard ucs table initialization with ifdef MULE. - -1999-03-10 Stephen J. Turnbull - - * file-coding.c: docstring and comment improvements. - (decode_ucs4) flag possible data loss with comment. - -1999-03-10 Martin Buchholz - - * file-coding.c (Fset_ucs_char): add CHECK_INT, CHECK_CHAR - (ucs_to_char): - (Fucs_char): - (Fset_char_ucs): - (decode_coding_ucs4): - (encode_coding_ucs4): - (detect_coding_utf8): - (decode_coding_utf8): - (encode_utf8): - (encode_coding_utf8): - Add CHECK_* macros where needed to avoid crashes. - #ifdef out all composite character support using - #ifdef ENABLE_COMPOSITE_CHARS - Use normal XEmacs coding standards. - Fix docstrings. - Remove CODING_STREAM_COMPOSE, CODING_STREAM_DECOMPOSE. - -1998-09-08 MORIOKA Tomohiko - - * file-coding.c (make-coding-system): Add description about - `ucs-4' and `utf-8'. - (detection_state): Modify to implement ucs-4 and utf-8. - (detect_coding_type): Likewise. - (detect_coding_ucs4): New implementation. - (detect_coding_utf8): New implementation. - (encode_utf8): fixed. - (syms_of_mule_coding): Rename `ucs4' and `utf8' to `ucs-4' and - `utf-8'. - -1998-09-08 MORIOKA Tomohiko - - * file-coding.c (mule_char_to_ucs4): Encode 94x94 chars in ISO - 2022 registry to private area. - -1998-09-07 MORIOKA Tomohiko - - * file-coding.c (encode_utf8): New function. - (encode_coding_utf8): New implementation. - -1998-09-07 MORIOKA Tomohiko - - * file-coding.c (ucs_to_mule_table): New variable; abolish - `Vucs_to_mule_table' - (mule_to_ucs_table): renamed from `Vmule_to_ucs_table'. - (set-ucs-char): New function. - (ucs_to_char): New function. - (ucs-char): New function. - (set-char-ucs): New function. - (char-ucs): New function. - (decode_ucs4): Use `ucs_to_char'. - (complex_vars_of_mule_coding): Abolish `ucs-to-mule-table' and - `mule-to-ucs-table'. - -1998-09-06 MORIOKA Tomohiko - - * chartab.h: EXFUN `Fget_char_table'. - - * file-coding.c (encode_ucs4): New function. - (encode_coding_ucs4): Use `encode_ucs4'. - -1998-09-06 MORIOKA Tomohiko - - * file-coding.c (decode_coding_ucs4): New implementation. - -1998-09-06 MORIOKA Tomohiko - - * file-coding.c (decode_coding_ucs4): fixed. - - * file-coding.c (Vmule_to_ucs_table): New variable. - (mule_char_to_ucs4): New function. - (encode_coding_ucs4): New implementation. - (complex_vars_of_mule_coding): Define variable - `mule-to-ucs-table'. - -1998-09-06 MORIOKA Tomohiko - - * file-coding.c (decode_coding_utf8): New implementation. - -1998-09-06 MORIOKA Tomohiko - - * file-coding.c (decode_coding_utf8): fixed. - -1998-09-06 MORIOKA Tomohiko - - * file-coding.c (Vucs_to_mule_table): New variable. - (decode_ucs4): Refer `Vucs_to_mule_table'. - (complex_vars_of_mule_coding): Define variable - `ucs-to-mule-table'. - -1998-09-04 MORIOKA Tomohiko - - * file-coding.c (detect_coding_ucs4): New function (not - implemented yet). - (decode_coding_ucs4): New function. - (encode_coding_ucs4): New function (not implemented yet). - (detect_coding_utf8): New function (not implemented yet). - (decode_coding_utf8): New function. - (encode_coding_utf8): New function (not implemented yet). - (make-coding-system): New type `ucs4' and `utf8'. - (coding-system-type): Likewise. - (detection_state): Add `ucs4' and `utf8'. - (detect_coding_type): Likewise. - (mule_decode): Use `decode_coding_ucs4' and `decode_coding_utf8'. - (mule_encode): Use `encode_coding_ucs4' and `encode_coding_utf8'. - (decode_ucs4): New function (very incomplete). - (syms_of_mule_coding): Add `ucs4' and `utf8'. - - * file-coding.h: Add definitions for UCS-4 and UTF-8. - -1999-03-08 Martin Buchholz - - * mule-charset.c: - (non_ascii_valid_char_p): - (lookup_composite_char): - (composite_char_string): - (make-composite-char): - (composite-char-string): - (syms_of_mule_charset): - (complex_vars_of_mule_charset): - * mule-charset.h (LEADING_BYTE_COMPOSITE): - (CHAR_LEADING_BYTE): - (MAKE_CHAR): - * file-coding.h (CODING_STATE_COMPOSITE): - (CODING_STATE_ISO2022_LOCK): - (iso_esc_flag): - (LEADING_BYTE_COMPOSITE): - * file-coding.c (struct iso2022_decoder): - (decoding_closer): - (reset_iso2022): - (parse_iso2022_esc): - (encode_coding_iso2022): - #ifdef out all composite character support using - #ifdef ENABLE_COMPOSITE_CHARS - - * alloc.c: Define lrecord_coding_system only if ! FILE_CODING - -1999-03-04 Takeshi YAMADA - - * fns.c (Fbase64_encode_string): Calculate `allength' in the same - way of `Fbase64_encode_region'. - -1999-02-18 Katsumi Yamaoka - - * fns.c (base64_encode_1): Don't add a newline at the tail. - -1999-03-08 Andy Piper - - * menubar-msw.c (displayable_menu_item): correct off-by-one & - handling. - -1999-03-07 Martin Buchholz - - * console-stream.h (struct stream_console): - * event-unixoid.c (event_stream_unixoid_select_console): - (event_stream_unixoid_unselect_console): - * print.c (Fexternal_debugging_output): - * sysdep.c (reset_one_device): - * console-stream.c (stream_init_console): - (stream_delete_console): - (allocate_stream_console_struct): move into stream_init_console. - (free_stream_console_struct): move into stream_delete_console. - Use `fd' only for file descriptors. - Therefore, rename members of struct stream_console. - - * systime.h: Unix98 says sys/time.h should define select(), but - some systems define that in unistd.h. So include that file always. - - * glyphs.h (MAYBE_IIFORMAT_METH): Don't use leading `_'. Avoid - multiple evaluation of first arg. Do proper do {} while (0) wrapping. - (HAS_IIFORMAT_METH_P): Prevent macro from being used in - non-boolean context - (MAYBE_IIFORMAT_DEVMETH): Use standard internal macro naming convention. - - * EmacsShell.c: - * balloon_help.c: - Add #include . - Some versions of assert.h use printf() without #include'ing stdio.h - - * free-hook.c (blocktype): Add gcpro5_type to blocktype. - (log_gcpro): Remove unused variable FRAME. - (show_gcprohist): Ansify. - Comment the #endif's - - * frame-x.c (x_delete_frame): Don't use FRAME_X_SHELL_WIDGET(f) - after it's just been XtDestroy'ed! - -1999-02-18 Martin Buchholz - - * opaque.c (print_opaque): - (sizeof_opaque): - (equal_opaque): - (hash_opaque): - Egcs 1.1.1 seems to have a bug where - INTP (p->size_or_chain) - will crash XEmacs. Fix by introducing intermediate variable. - - * sound.c (Fdevice_sound_enabled_p): Fix compiler warning. - - * dired.c (Fdirectory_files): - (Ffile_name_completion): - (Ffile_name_all_completions): - (file_name_completion): - - Use `directory' instead of `dirname' to sync with FSF Emacs and - avoid compiler warnings. - - Fix up docstrings so that C variables match documentation. - -1999-03-05 Martin Buchholz - - * alloc.c: (garbage_collect_1): Reorg code to make scope of local - variables as small as possible to help out the compiler and the maintainer. - - * alloc.c: (disksave_object_finalization): - Set all the *-load-path variables to - nil, not just load-path itself. This gets the locate-file hash - tables garbage collected BEFORE dump, and has the side effect of - preventing crashes on OSF4.0+egcs. - - * alloc.c: - * gdbinit: - * dbxrc: - - Clean up gdb/dbx debugging support. - - Storing an EMACS_INT in an enum is not 64-bit clean! - - So change the enum to a set of separate variables. - - Add test cases to help debug the debugging support! - - Add `lisp-shadows' and `run-temacs' targets for dbx. - - Both dbx and gdb have been tested now. - -1999-03-05 XEmacs Build Bot - - * XEmacs 21.2.12 is released - -1999-02-16 Kazuyuki IENAGA - - * device-x.c: Support to find best visual without flashing. - -1999-03-02 Paul Keusemann - - * database.c (berkdb_map): Add flags argument to cursor call (must - be 0 according to docs) required for Berkeley DB 2.6.4 and later. - -1999-03-03 Martin Buchholz - - * hash.c: - * hash.h: - General cleanup. Get free-hook.c working again. - Remove unused functions: - make_strings_hash_table, copy_hash, expand_hash_table. - - * malloc.c: - * mem-limits.h: - Always use new ANSI-style function prototypes. - - * unexalpha.c (unexec): Never use implicit int. - - * sgiplay.c (close_sound_file): - (play_sound_file): - (restore_audio_port): - (play_sound_data): - (audio_initialize): - (play_internal): - (drain_audio_port): - (write_mulaw_8_chunk): - (write_linear_chunk): - (write_linear_32_chunk): - (initialize_audio_port): - (open_audio_port): - (set_channels): - (set_output_format): - (adjust_audio_volume): - (get_current_volumes): - (parse_snd_header): - Always use new ANSI-style function prototypes. - Use unistd.h for missing prototypes. - - * unexelfsgi.c (round_up): - (find_section): - (unexec): Always use new ANSI-style function prototypes - - * elhash.c (struct Lisp_Hash_Table): rename golden to golden_ratio - - * console.h (struct console_methods): Always use full ANSI prototypes - - * emacs.c (__sti__iflPNGFile_c___): Always use full ANSI prototypes - -1999-03-02 Andy Piper - - * event-stream.c (init_event_stream): make sure native mswindows - gets an appropriate event loop. - -1999-02-22 Andy Piper - - * frame-msw.c (mswindows_make_frame_visible): use SW_SHOW rather - than SW_SHOWNORMAL to prevent resizing of maximised frames. - (mswindows_raise_frame): remove comment. - -1999-03-01 XEmacs Build Bot - - * XEmacs 21.2.11 is released - -1999-02-25 SL Baur - - * mule-charset.c (Qleading_byte): New variable to implement - charset-leading-byte function. - (Fcharset_property): Use it. - (syms_of_mule_charset): Initialize it. - From Kazuyuki IENAGA - -1999-02-17 Kazuo Oishi - - * glyphs-x.c (cononvert_EImage_to_XImage): correct - bytes per pixel counting. - -1999-02-15 Andy Piper - - * s/cygwin32.h (BROKEN_SIGIO): don't define this as it causes - major lockups. - -1999-02-16 MORIOKA Tomohiko - - * fns.c (Fbase64_encode_string): New optional argument - `NO_LINE_BREAK'. - -1999-02-16 Martin Buchholz - - * gdbinit: Fix up commands to run temacs. Add lisp-shadows command. - * alloc.c (xcalloc): undef xcalloc, just like xmalloc - -1999-02-10 Martin Buchholz - - * s/bsdos4.h: New file. Port to BSDI BSD/OS 4.0. - * xintrinsic.h: Redo CONST support for X11 R4 compatibility. - -1999-02-05 XEmacs Build Bot - - * XEmacs 21.2.10 is released - -1999-02-02 Gleb Arshinov - - * process-nt.c (nt_send_process): - Fix for process-send-region/process-send-string breaking when size - of the input > 128 chars: change maximum chunk size for process - stream from 512 to 128, thus guaranteeing that ntpipe_shove_writer - succeeds. - -1999-02-02 XEmacs Build Bot - - * XEmacs 21.2.9 is released - -1999-01-30 Martin Buchholz - - * bytecode.c (funcall_compiled_function): Call - UNBIND_TO_GCPRO instead of UNBIND_TO_GCPRO_VARIABLES_ONLY. - - * backtrace.h (UNBIND_TO_GCPRO_VARIABLES_ONLY): - #ifdef 0 out unused macro. - -1999-01-27 Martin Buchholz - - * gui.c (gui_parse_item_keywords_internal): Make static. - -1999-01-21 Andy Piper - - * glyphs-msw.c: add xface support. - (mswindows_xface_instantiate): new function copied from glyphs-x.c - (image_instantiator_format_create_glyphs_mswindows): do device - specific initialisation for xfaces. - (xbm_create_bitmap_from_data): line data must be padded to a word - boundary. - - * glyphs-x.c (xface_validate): moved to glyphs.c - (xface_normalize): ditto. - (xface_possible_dest_types): ditto. - (image_instantiator_format_create_glyphs_x): do device specific - initialisation for xfaces. - - * glyphs.h: declare xface symbol. - - * glyphs.c: move generic xface support here. - (xface_validate): moved from glyphs-x.c - (xface_normalize): ditto. - (xface_possible_dest_types): ditto. - (image_instantiator_format_create): xface declarations moved from - glyphs-x.c. - -1999-01-14 Adrian Aichner - - * event-stream.c (vars_of_event_stream): Fixing documentation. - -1999-01-17 Gunnar Evermann - - * glyphs-eimage.c (gif_instantiate): Correct handling of - interlaced gifs to avoid writing past the end of the eimage - buffer. - -1999-01-13 Hrvoje Niksic - - * search.c (Freplace_match): Handle single backslash at end of - NEWTEXT correctly. - -1999-01-12 William M. Perry - - * eldap.c (Fldap_open): slow down interrupts around ldap_open to - avoid connection errors. - -1999-01-12 Andy Piper - - * redisplay-output.c (redisplay_update_line): backout change that - shouldn't have gone ine. - -1999-01-09 Oscar Figueiredo - - * eldap.c (vars_of_ldap): Do no provide `ldap' here since it may - collide with ldap.el - -1999-01-11 Andy Piper - - * redisplay.h (DISPLAY_LINE_HEIGHT): new macro. - (DISPLAY_LINE_YPOS): new macro. - - * redisplay-msw.c (mswindows_output_string): use it. - (mswindows_output_pixmap): ditto. - (mswindows_output_display_block): ditto. - - * redisplay-output.c (redisplay_output_display_block): new - function. just call the devmeth, maybe insert some generic code - here later. - (compare_display_blocks): use it. - (output_display_line): ditto. - (redisplay_unmap_subwindows_maybe): new function. potentially - unmap subwindows in the given area. - - * glyphs.c (reset_subwindow_cachels): unmap subwindows that we are - resetting. - -1999-01-10 J. Kean Johnston - - * Makefile.in.in: Set value of moduledir - - Changed DUMPENV to include $(MODULEPATH) - - Added install rule to install header files for use by ellcc. - - * config.h.in: Added INHIBIT_SITE_MODULES - - Added HAVE__DLERROR - - Added HAVE_DLFCN_H - - Added DLSYM_NEEDS_UNDERSCORE - - * dll.c: Removed. - - * emodules.c: New file containing dynamic loading code. - - * emodules.h: New file. - - * emacs.c: Added variables Vmodule_directory, - Vsite_module_directory, Vconfigure_module_directory and - Vconfigure_site_module_directory. - - (main_1): Added new variable inhibit_site_modules and command - line options `-no-site-modules' and `--no-site-modules'. - - (main_1): Call syms_of_module() instead of syms_of_dll(). - - (main_1): Call vars_of_module(). - - (vars_of_emacs): Introduce inhibit-site-modules, - module-directory, configure-module-directory, - site-module-directory, and configure-site-module-directory to the - Lisp reader. - - * lisp.h: Declare load_module and list_modules, as well as - Vmodule_directory, Vsite_module_directory, - Vconfigure_module_directory and Vconfigure_site_module_directory. - - * paths.h.in: Added PATH_MODULESEARCH and PATH_SITE_MODULES. - - Added correct support for site-lisp directory. - - * symbols.c (defsubr): Modified to allow modules to add new subrs - after dump time. - - (defsubr_macro): Same. - - (defvar_magick): Only use purespace when not initialized, so - that loaded modules can still add symbols. - - * symsinit.h: Add definitions for syms_of_module(), - vars_of_module(). Removed syms_of_dll(). - - * sysdll.c: Include dlfcn.h if HAVE_DLFCN_H is defined. - - (dll_variable): Take DLSYM_NEEDS_UNDERSCORE into account. - - (dll_error): use _dlerror() if HAVE__DLERROR is defined. - - * s/sco5-shr.h (C_SWITCH_SYSTEM): Correct for modern gcc and - explicitly pass -belf for native cc. - - * s/sco5.h (LIB_GCC): Use -print-libgcc-file-name instead of - hard-coding the library name. - -1999-01-01 - - * device-x.c (Fx_set_font_path): - Add proper cast to permit compilation under C++. - - * buffer.c (directory_is_current_directory): - Add proper casts to permit compilation under C++. - -1998-12-30 Damon Lipparelli - - * event-msw.c (mswindows_wnd_proc): - Fixed failure when building with MSVC 5. - -1998-12-29 Martin Buchholz - - * file-coding.c (decode_coding_iso2022): - - Prevent crash when decoding ISO7/Lock detected files - - the usual martin fiddling - -1998-12-29 Jonathan Harris - - * event-msw.c: - glyphs-msw.c: - Fixed failures when building with MSVC. - * unexnt.c (dump_bss_and_heap): - Removed compiler warning by removing bss_data variable. - -1998-12-18 Jim Radford - - * device-x.c (Fx_set_font_path, Fx_get_font_path): New functions - so that packages that distribute their own fonts can access them. - -1998-12-28 Andy Piper - - * glyphs-msw.c (mswindows_button_instantiate): cope with buttons - that have an image provided. - - * glyphs.h: add Q_image decl. - - * glyphs-widget.c new functionality allowing images in - widgets. - (check_valid_glyph_or_image): new function to validate - glyphs passed in through :image. - (widget_normalize): new function. convert :image parameters into - real glyphs if not already so. - (widget_instantiate_1): mess with size parameters to be similar to - :image if provided. - (syms_of_glyphs_widget): new keyword :image. - (image_instantiator_format_create_glyphs_widget): normalize - buttons and allow :image. - -1998-12-27 Andy Piper - - * frame-msw.c (mswindows_init_frame_1): warning elimination. - - * glyphs-widget.c (check_valid_anything): no-op function. - (check_valid_callback): check callbacks in gui_items. - (check_valid_symbol): as it sounds. - (check_valid_string_or_vector): ditto. - (widget_validate): modified for descriptors that are vectors or - sequences of keyword/val pairs. - (widget_instantiate_1): ditto. - (image_instantiator_format_create_glyphs_widget): allow gui_item - keywords in the instantiator. - - * gui.c (gui_parse_item_keywords_internal): renamed from - gui_parse_item_keywords but taking error behaviour. - (gui_parse_item_keywords): use it. - (gui_parse_item_keywords_no_errors): ditto. - (gui_item_add_keyval_pair): add Error_behavior flag and only - signal invalid keywords if required. - - * gui.h: new gui signatures. - - * menubar.c (menu_parse_submenu_keywords): use new - gui_item_add_keyval_pair signature. - - * s/cygwin32.h: modify PTY_ITERATION to eliminate warnings. - -1998-12-28 Martin Buchholz - - * XEmacs 21.2.8 is released. - -1998-12-28 Martin Buchholz - - * editfns.c (get_home_directory): - (user-home-directory): Simplify. - - - * callproc.c (child_setup): - - Environment variables were being passed to inferior processes - using internal encoding. - - Convert to external encoding. - - Rename local var `tem' to better name `tail'. - - Use Flength instead of `manual' calculation. - - * buffer.c (kill-buffer): - (record-buffer): - (set-buffer-major-mode): - (current-buffer): - - Fix up parameter names to correspond to docstrings. - - Don't use `bufname' when a buffer will do as well. - - Remove one unneeded GCPRO. - - * buffer.h (initial_directory): - * buffer.c (init_initial_directory): - - use correct conversions between internal and external format. - (directory_is_current_directory): new function - (init_buffer): convert initial_directory to internal format. - - solve crashes when current working directory is non-ASCII. - - * alloc.c (xmalloc): - (xcalloc): - (xrealloc): - - remove stupid casts, since XEmacs requires an ANSI C system. - (lrecord_type_index): replace abort() with more readable assert(). - - (reset_lcrecord_stats): remove. - (sweep_lcrecords_1): - - replace call to reset_lcrecord_stats() with call to xzero(). - -1998-12-27 Martin Buchholz - - * process-unix.c (unix_create_process): - - Fix crash invoking program with non-ASCII name. - Try invoking xemacs with SHELL=/bin/sh, then M-x shell. - - Remove unused variable `env'. - - Rename `temp' to better name `save_errno'. - - Reorganize code for clarity. But still too chicken to nuke the - BSD 4.2 support. - -1998-12-24 Martin Buchholz - - * XEmacs 21.2.7 is released. - -1998-12-23 Martin Buchholz - - * glyphs.c (decode_device_ii_format): - - Fix indentation. - - Use GET_C_STRING_FILENAME_DATA_ALLOCA with char *, not Extbyte *. - - * glyphs-x.c (x_subwindow_instantiate): - - A image instance mask was being assigned to a image instance type! - - X_SUBWINDOW_INSTANCE_DATA (ii) is not an lvalue in C++. - - * glyphs-msw.c (mswindows_initialize_dibitmap_image_instance): - Fix indentation. - * glyphs-x.h: Make indentation consistent. - - * emacs.c (Fdump_emacs): Remove Steve Martin merge artifacts. - - * glyphs-widget.c (check_valid_glyph): Warning suppression. - - Make it static - - #ifdef it out, since it's not actually used yet (FIX THIS!) - - * glyphs-widget.c: - * glyphs.h: - Move declarations of decode_device_ii_format and - decode_image_instantiator_format into glyphs.h where they belong. - -1998-12-22 Martin Buchholz - - * frame-x.c (x_delete_frame): Revert part of my changes at the - suggestion of Gunnar Evermann - unfortunately no one really - understands this code. - - * callproc.c (init_callproc): code cleanup. - - * free-hook.c (malloc): - (check_malloc): - (__free_hook): - (__malloc_hook): - (__realloc_hook): - (block_input_malloc): - (block_input_realloc): - * device-x.c (x_delete_device): - * emacs.c (voodoo_free_hook): - * events.c (print_event): - (CHECK_EVENT_TYPE): - (CHECK_EVENT_TYPE2): - (CHECK_EVENT_TYPE3): - Use proper prototypes. - Make C_E_T macros a little faster. - Pedantic fiddly little changes. You really don't care. - -1998-12-22 Andy Piper - - * redisplay-output.c (redisplay_clear_region): make sure that - fg/bg colors get set even when we are in the border area. - -1998-12-13 Martin Buchholz - - * console-msw.c: Function definitions follow coding standards - - This prevents e.g. find-tag on Lisp_Event finding DEVENT - -1998-12-11 Martin Buchholz - - * events.h (struct timeout_data): - * event-tty.c (tty_timeout_to_emacs_event): - * event-msw.c (mswindows_wm_timer_callback): - * event-Xt.c (Xt_timeout_to_emacs_event): - * event-msw.c (mswindows_cancel_dispatch_event): - Make sure Lisp_Objects inside events are initialized to Qnil, not - Qnull_pointer, which is now illegal. - -1998-12-10 Martin Buchholz - - * lisp.h: Fix up prototypes to match alloc.c - -1998-12-08 Martin Buchholz - - * windowsnt.h: Remove `support' for using index and rindex - - * filelock.c (current_lock_owner): - - Change uses of index -> strchr, rindex -> strrchr - -1998-12-07 Martin Buchholz - - * sysdep.c (set_descriptor_non_blocking): - Since O_NONBLOCK is now always #defined, make use of fcntl - conditional on F_SETFL being defined. - - * console-msw.c (DHEADgER): - (DOPAQUE_DATA): - (DEVENT): - (DCONS): - (DCONSCDR): - (DSTRING): - (DVECTOR): - (DSYMBOL): - (DSYMNAME): - - max_align_t should not be visible to the user of the - XOPAQUE_DATA macro. - - use Bufbyte instead of char - - parens around (FOOP (obj)) are always redundant. - If they were necessary, we should fix the macro instead. - - Always use string_data(foo) instead of foo->data. - - -1998-12-06 Martin Buchholz - - * frame-msw.c (mswindows_init_frame_1): - - use make_lisp_hash_table, not Fmake_hash_table - - include elhash.h - - * lisp.h: - * alloc.c (make_vector): remove travesty - (Fmake_vector): - (make_pure_vector): - (pure_cons): - (make_bit_vector_internal): - (make_bit_vector): - (make_bit_vector_from_byte_vector): - (Fmake_bit_vector): - - make vector_equal a little faster. - - Don't use variable name `new'. - - Use size_t instead of EMACS_INT. - - usual Martin-style pointless bit-twiddling. - - * fns.c (mapcar1): - (Fmapconcat): - (Fmapcar): - (Fmapvector): - Make mapcar faster. In particular, make - (mapc #'identity long-string) - MUCH faster under Mule. - * tests/automated/lisp-tests.el: Test 'em! - - * bytecode.c (Ffetch_bytecode): Fix crash when loading lazy-loaded - bytecode. - -1998-12-01 Martin Buchholz - - * menubar-x.c (menu_item_descriptor_to_widget_value_1): Always use - Qnil, not NULL, to initialize `null' Lisp_Objects. - -1998-11-29 Hrvoje Niksic - - * specifier.c (display_table_validate): Update. - - * redisplay.c (create_text_block): Use them. - - * glyphs.c (display_table_entry): New function. - (get_display_tables): Ditto. - -1998-12-15 Oscar Figueiredo - - * eldap.c (toplevel): Mention that eldap.c compiles with - OpenLDAP libs - (Fldap_open): Use `GET_C_STRING_OS_DATA_ALLOCA' - (Fldap_search_internal): Ditto - -1998-12-11 Martin Buchholz - - * event-msw.c (mswindows_cancel_dispatch_event): - Gratuitous code prettification - - -1998-12-07 Hrvoje Niksic - - * fns.c (Fnconc): Fix use of wrong_type_argument(). - - * floatfns.c (Ffloat): Fix docstring. - (Ffloat): Fix use of wrong_type_argument(). - (Fabs): Ditto. - (extract_float): Ditto. - (Fceiling): Ditto. - (Fround): Ditto. - (Ftruncate): Ditto. - -1998-12-06 Martin Buchholz - - * frame-msw.c (mswindows_init_frame_1): - - use make_lisp_hash_table, not Fmake_hash_table - - include elhash.h - - * lisp.h: - * alloc.c (make_vector): remove travesty - (Fmake_vector): - (make_pure_vector): - (pure_cons): - (make_bit_vector_internal): - (make_bit_vector): - (make_bit_vector_from_byte_vector): - (Fmake_bit_vector): - - make vector_equal a little faster. - - Don't use variable name `new'. - - Use size_t instead of EMACS_INT. - - usual Martin-style pointless bit-twiddling. - - * fns.c (mapcar1): - (Fmapconcat): - (Fmapcar): - (Fmapvector): - Make mapcar faster. In particular, make - (mapc #'identity long-string) - MUCH faster under Mule. - * tests/automated/lisp-tests.el: Test 'em! - - * bytecode.c (Ffetch_bytecode): Fix crash when loading lazy-loaded - bytecode. - -1998-12-02 Didier Verna - - * menubar-x.c (menu_item_descriptor_to_widget_value_1): set the - accelerator field to nil for labels. - -1998-12-16 Jonathan Harris - - * menubar-msw.c (displayable_menu_item): - Escape occurrences of '&' and support occurrences of the - '%_' accelerator indicator in menus. - -1998-11-26 Didier Verna - - * dired.c (Fdirectory_files): use make_string instead of - make_ext_string on the filename. The conversion external->internal - format is already done in sys_readdir. - -1998-12-15 Gunnar Evermann - - * glyphs.c (normalize_image_instantiator): GCPRO instantiator - -1998-12-16 Jonathan Harris - - * event-msw.c - (Belatedly) added Kirill to list of file's authors. - emacs_mswindows_quit_p: Don't process WM_PAINT messages in - quit checking. WM_PAINT messages cause redisplay, but - windows' states are not necessarily stable when this function - gets called. - -1998-12-17 Andy Piper - - * strftime.c (zone_name): CONSTify. - -1998-12-15 Andy Piper - - * glyphs-msw.c (mswindows_combo_instantiate): ditto. - (mswindows_widget_property): return Qunbound when no property available. - (mswindows_button_property): ditto. - (mswindows_combo_property): ditto. - (mswindows_widget_set_property): ditto. - - * glyphs-widget.c (check_valid_item_list): use properties. - - * glyphs.h (struct Lisp_Image_Instance): we have properties now. - - * glyphs.c (Fset_image_instance_property): allow setting of arbitrary properties. - (Fimage_instance_property): ditto. - * glyphs-widget.c (widget_property): ditto. - (widget_set_property): ditto. - - * frame-msw.c (mswindows_set_frame_pointer): SetCursor() as well - as setting the class cursor so that GC actually changes the - cursor. - - * config.h: don't undef MAIL_USE_POP. - -1998-12-13 Andy Piper - - * glyphs-msw.c - (image_instantiator_format_create_glyphs_mswindows): line -> - label. - (mswindows_label_instantiate): ditto. Play with window flags. - (image_instantiator_format_create_glyphs_mswindows): ditto. - (vars_of_glyphs_mswindows): provide Qlabel as we support it now. - - * glyphs-widget.c (widget_instantiate_1): re-jig autosizing to - cope with lines and labels. - (static_instantiate): use widget_instantiate_1. - line -> label. - (image_instantiator_format_create_glyphs_widget): ditto. - -1998-12-10 Andy Piper - - * Makefile.in.in (objs): add gui.o - -1998-12-10 Andy Piper - - * gui.c: adjust defines of HAVE_POPUPS so that we can build with - no window system. - -1998-12-09 Andy Piper - - * glyphs.c (finalize_image_instance): mark glyphs changed when an - image instance is removed so that the subwindow cache gets reset - and thus destroyed images get GC'd. - -1998-12-08 Andy Piper - - * gui-msw.c (mswindows_handle_gui_wm_command): call - MARK_SUBWINDOWS_CHANGED. - - * glyphs-msw.c (mswindows_finalize_image_instance): make sure - subwindows really get deleted. - - * redisplay.c: new variable subwindows_changed[_set]. - (redisplay_window): use it. - (redisplay_frame): ditto. - (redisplay_device): ditto. - (redisplay_without_hooks): ditto. - - * device.h (MARK_DEVICE_SUBWINDOWS_CHANGED): new macro for - subwindows redisplay as per glyphs equivalent. - * redisplay.h: ditto. - (MARK_SUBWINDOWS_CHANGED): ditto. - (RESET_CHANGED_SET_FLAGS): ditto. - * frame.h (MARK_FRAME_SUBWINDOWS_CHANGED): ditto. - -1998-12-07 Andy Piper - - * frame.c (Fmake_frame): reset subwindow cachels on non-stream - frames. - - * redisplay.c (redisplay_frame): invalidate subwindow cachels. - - * event-msw.c (mswindows_wnd_proc): catch the various WM_CTLCOLOR* - messages and paint widget glyphs as appropriate with their face fg - & bg. - -1998-12-06 Andy Piper - - * glyphs-msw.c (vars_of_glyphs_mswindows): provide widget types - here rather than in glyphs-widget - do this because we only want - to provide what is really available. - - * glyphs.c (Fimage_instance_property): new function to get the - properties of image instances. wires through to console specific - methods and then to widget specific methods. - (Fset_image_instance_property): ditto but for setting widget properties. - (check_valid_face): make extern so that it can be used elsewhere. - - * glyphs-widget.c (widget_property): new function. gets the - properties of widgets in general and wires the function through to - widget specific ones. - (widget_set_property): ditto but for setting widget properties. - - * glyphs-msw.c (mswindows_combo_instantiate): Add functionality to - add items to the list. Play with window styles a bit to get the - desired effect. - (mswindows_widget_property): break out specific widget properties. - (mswindows_button_property): new function. gets the checked state - of a button. - (mswindows_combo_property): new function. gets the current - selection in the combo box. - (mswindows_widget_set_property): new function. sets specific - properties of specific widgets. - - * glyphs-widget.c (check_valid_item_list): new function. check - that items for a combo-box are just a list of strings. - (combo_validate): new function. check there is an item list. - (widget_instantiate_1): new function. renamed from - widget_instantiate so that we can do slightly different things for - other widgets. - (widget_instantiate): call widget_instantiate_1. - (combo_instantiate): new function to instantiate combo boxes, - defaults height to the pixel height of the number of items in the - box. - (syms_of_glyphs_widget): move widget keywords here. - (image_instantiator_format_create_glyphs_widget): use new combo - functions. - -1998-12-04 Andy Piper - - * event-msw.c (mswindows_wnd_proc): mule-ize. - - * glyphs.c (pixmap_to_lisp_data): mule-ize. - - * glyphs-msw.c (extract_xpm_color_names): mule-ize. - (resource_name_to_resource): ditto. - (mswindows_resource_instantiate): ditto. - (mswindows_widget_instantiate): ditto. - (mswindows_widget_set_property): ditto. - - * redisplay-output.c (redisplay_output_subwindow): don't show - subwindows if they are obscured at the edge of the frame, emacs - gets into some sort of redisplay loop otherwise. - - * gui.h: prototype gui_item_selected_p. - - * gui.c (gui_item_selected_p): new function to determine the - selected state of a gui_item. - - * frame.h (struct frame): add subwindows_changed flag. - - * redisplay.c (redisplay_frame): call update_frame_subwindows (). - - * glyphs.c (update_subwindow): new function to update a - subwindow's state. - (update_frame_subwindows): new function to update all the - subwindows on a frame. - - * console.h (struct console_methods): add update_subwindow. - - * glyphs-msw.c (mswindows_widget_property): return selected state - for selected property. - (mswindows_update_subwindow): new function. updates widget glyphs - in redisplay as per menubars or toolbars e.g. selected state. - (console_type_create_glyphs_mswindows): add update_subwindow. - -1998-12-03 Andy Piper - - * console-tty.c (syms_of_console_tty): MULE -> FILE_CODING since - tty coding system things are such. - - * glyphs-widget.c (widget_face_font_info): new function for - pulling out height and width metrics for a widget's face. - (widget_text_to_pixel_conversion): calculate pixel sizes of text - for widgets. - - * event-msw.c (mswindows_drain_windows_queue): translate messages - that are destined for subwindows. This makes edit fields interact - with the keyboard correctly. - nuke warnings by #ifndef'ing out stuff not required by msg select(). - - * glyphs.h (INITIALIZE_IMAGE_INSTANTIATOR_FORMAT_NO_SYM): new - macro defining the iiforma without the symbol required by widget. - (INITIALIZE_IMAGE_INSTANTIATOR_FORMAT): use it. - - * general.c (syms_of_general): add Qwidget, Qselected. - - * faces.c (complex_vars_of_faces): add widget face inheriting from - gui-element face. - -1998-11-09 Andy Piper - - * window.h (struct window): add a cache of subwindows on a - per-window basis. - - * window.c (mark_window): mark the subwindow_instance_cache. - (allocate_window): initialise the subwindow instance_cache. - - * toolbar-x.c (x_output_toolbar): call redisplay_clear_region - instead of the devmeth. - (x_clear_toolbar): ditto. - - * redisplay-x.c (x_output_display_block): call - redisplay_output_subwindow for subwindows and widgets. - - * redisplay-tty.c (tty_output_display_block): add IMAGE_WIDGET to - types to do nothing for. - - * lisp.h: declare new widget/subwindow symbols. - - * glyphs.c (image_instantiate): cache subwindows on a per-window - basis. - (subwindow_possible_dest_types): new function for subwindow dest - types. - (subwindow_instantiate): generic instantiation of a - subwindow. specialised by device multi-methods. - (Fsubwindowp): moved from glyphs-x.c. adapted for glyph-based - subwindows. - (Fimage_instance_subwindow_id): ditto. - (Fresize_subwindow): ditto. - (Fforce_subwindow_map): ditto. - - * glyphs-x.c (x_print_image_instance): remove subwindow - stuff. Handled genrically in glyphs.c. - (x_image_instance_equal): ditto. - (x_image_instance_hash): ditto. - (x_finalize_image_instance): delete subwindows when required. - (mark_subwindow) (print_subwindow) (finalize_subwindow) - (subwindow_hash) (Fmake_subwindow): deleted because of new, - glyph-based, subwindow implementation. - (Fsubwindow_height) (Fsubwindow_width) (Fsubwindow_xid): aliased - in glyphs.el - (Fsubwindowp) (Fresize_subwindow) (Fforce_subwindow_map): moved to - glyphs.c. - (x_unmap_subwindow): new function to unmap X subwindows. - (x_map_subwindow): new function to map X subwindows. - (x_subwindow_instantiate): new function to instantiate X - subwindows. - (x_resize_subwindow): new function to resize X subwindows. - (console_type_create_glyphs_x): add subwindow functions. - (image_instantiator_format_create_glyphs_x): add device - multi-methods for xpm, xbm and subwindow. - - * glyphs.el (subwindow-xid): old alias for new subwindow functions. - (subwindow-width): ditto. - (subwindow-height): ditto. - - * glyphs-msw.c (mswindows_widget_instantiate): new function for - generally instantiating ms subwindows. Used by - mswindows_*_instantiate. - (mswindows_edit_instantiate): instantiate an edit field on a - mswindows frame. - -1998-11-04 Andy Piper - - * symsinit.h: declare new functions. - - * redisplay.h: declare new functions. - - * redisplay-x.c (x_output_display_block): call - redisplay_clear_region rather than x_clear_region. - (x_output_string): ditto. - (x_output_pixmap): ditto. - (x_clear_to_window_end): ditto. - (x_output_eol_cursor): ditto. - (x_clear_region): only do X specific things. other duties handled - in redisplay_clear_region. - - * redisplay-tty.c (tty_clear_region): do tty specific things - some - duties moved to redisplay_clear_region. - - * redisplay-output.c (clear_left_border): use - redisplay_clear_region instead of device method. - (clear_right_border): ditto. - (output_display_line): ditto. - (redisplay_output_subwindow): ditto. - (redisplay_clear_top_of_window): ditto. - (redisplay_clear_region): perform duties previously handled by - device methods. call the appropriate device method at the - end. unmap subwindows if necessary. - - * redisplay-msw.c (mswindows_output_string): use - redisplay_clear_region instead of mswindows_clear_region. - (mswindows_clear_to_window_end): ditto. - (mswindows_output_display_block): output subwindows when required. - (mswindows_clear_region): only do mswindows specific things, - everything else is now handled in redisplay_clear_region. - - * gui.h: add item id hash defines and declare function prototypes. - - * gui.c (mark_gui_item): new function for marking gui_items. - (gui_item_hash): generic hash function for generating command ids - for gui_items. - - * gui-msw.c: new file. - (mswindows_handle_gui_wm_command): new function to handle widget - callbacks. - - * glyphs.h (MAYBE_IIFORMAT_DEVMETH): new function for device - multi-methods. - (IIFORMAT_HAS_SHARED_METHOD): ditto. - (DEFINE_DEVICE_IIFORMAT): ditto. - (INITIALIZE_DEVICE_IIFORMAT): ditto. - (struct Lisp_Image_Instance): add widget and subwindow data plus - appropriate access functions. - - * glyphs.c (decode_device_ii_format): new function for decoding - image instantiator functions based on a device type as well as an - image format. - (decode_image_instantiator_format): just call - decode_device_ii_format with nil device. - (add_entry_to_device_ii_format_list): new function for per device - method instances. - (add_entry_to_image_instantiator_format_list): just call - add_entry_to_device_ii_format_list with nil device. - (check_valid_vector): new function. - (instantiate_image_instantiator): instantiate using per-format - method and then per-format-per-device method (device - multi-methods). signal an error if neither is possible. - (mark_image_instance): cope with subwindows and widgets. - (print_image_instance): ditto. - (image_instance_equal): ditto. - (image_instance_hash): ditto. - (allocate_glyph): ditto. - (glyph_width): ditto. - (glyph_height_internal): ditto. - (xpm_instantiate): removed because of device multi-methods. - (mark_subwindow_cachels): new cachel functions for caching - instantiated subwindows on a per-frame basis. mostly copied from - glyph cachel functions. - (update_subwindow_cachel_data): ditto. - (add_subwindow_cachel): ditto. - (get_subwindow_cachel_index): ditto. - (reset_subwindow_cachels): ditto. - (mark_subwindow_cachels_as_not_updated): ditto. - (unmap_subwindow): generic unmapping of subwindows based on cachel - data. - (map_subwindow): ditto. - (initialize_subwindow_image_instance): generic initialisation of - subwindow data. - (syms_of_glyphs): add widget keywords. - - * glyphs-x.h (struct x_subwindow_data): convert Lisp_Subwindow to - x_subwindow_data. - -1998-11-04 Andy Piper - - * glyphs-widget.c: new file for instantiating widget type glyphs. - (widget_possible_dest_types): new general dest type function for - widgets. - (widget_validate): ditto. - (initialize_widget_image_instance): ditto - (widget_instantiate): ditto. Sets up fg/bg, gui_item parsing - before handing on control to device multi-methods. - (syms_of_glyphs_widget): new function. - (image_instantiator_format_create_glyphs_widget): new function, - added placeholders for button, edit, combo, scrollbar - (vars_of_glyphs_widget): new function. - - * glyphs-msw.h (WIDGET_INSTANCE_MSWINDOWS_HANDLE): new define for - storing window ids of widgets. - - * glyphs-msw.c (mswindows_finalize_image_instance): cope with - deletion of widget and subwindow glyphs. - (mswindows_unmap_subwindow): new device function for unmapping - subwindows on a msw frame. - (mswindows_map_subwindow): ditto. - (mswindows_register_image_instance): register instantiated widgets - with the widget hastable. - (mswindows_button_instantiate): instantiate a button type widget - on an msw frame. - (mswindows_subwindow_instantiate): instanttiate a subwindow on a - mswindows frame. - (image_instantiator_format_create_glyphs_mswindows): add device - multi-methods for xbm, xpm, subwindow, edit and button. - - * frame.h (struct frame): add subwindow_cachels dynarr for caching - information about subwindows visible on the current frame. used by - redisplay_clear_region to unmap subwindows as required. - - * frame.c (mark_frame): mark subwindow_cachels. - (allocate_frame_core): instantiate subwindow_cachels. - - * frame-msw.c (mswindows_init_frame_1): instntiate and mark the - widget hashtable. - - * event-msw.c (mswindows_wnd_proc): add call to - mswindows_handle_gui_wm_command to handle widget callbacks. - - * emacs.c (main_1): add calls to glyphs-widget initialisation - routines. - - * console.h (struct console_methods): add - unmap/map_subwindow_method for use be redisplay_clear_region to - map and unmap subwindows. Remove xpm and xbm stuff - now dealt - with by image instantiator multi-methods. Add - resize_subwindow_method. - - * console-stream.c (stream_clear_region): change signature to - match new generic clear region function. - - * Makefile.in.in: add glyphs-widget.o to list of objects. - - * console-msw.h (struct mswindows_frame): add widget hashtable for - wiring command ids to callbacks. - -1998-12-16 Andy Piper - - * XEmacs 21.2.6 is released - -1998-12-08 Hrvoje Niksic - - * md5.c (Fmd5): Correctly initiate string input stream. - - * Makefile.in.in (tests): Add md5-tests.el. - -1998-12-06 Martin Buchholz - - * lisp.h: - * alloc.c (make_vector): remove travesty - (Fmake_vector): - (make_pure_vector): - (pure_cons): - (make_bit_vector_internal): - (make_bit_vector): - (make_bit_vector_from_byte_vector): - (Fmake_bit_vector): - - make vector_equal a little faster. - - Don't use variable name `new'. - - Use size_t instead of EMACS_INT. - - usual Martin-style pointless bit-twiddling. - - * fns.c (mapcar1): - (Fmapconcat): - (Fmapcar): - (Fmapvector): - Make mapcar faster. In particular, make - (mapc #'identity long-string) - MUCH faster under Mule. - * tests/automated/lisp-tests.el: Test 'em! - -1998-12-06 Martin Buchholz - - * bytecode.c (Ffetch_bytecode): Fix crash when loading lazy-loaded - bytecode. - -1998-12-13 Martin Buchholz - - * console-msw.c: Function definitions follow coding standards - - This prevents e.g. find-tag on Lisp_Event finding DEVENT - -1998-12-11 Martin Buchholz - - * events.h (struct timeout_data): - * event-tty.c (tty_timeout_to_emacs_event): - * event-msw.c (mswindows_wm_timer_callback): - * event-Xt.c (Xt_timeout_to_emacs_event): - * event-msw.c (mswindows_cancel_dispatch_event): - Make sure Lisp_Objects inside events are initialized to Qnil, not - Qnull_pointer, which is now illegal. - -1998-12-10 Martin Buchholz - - * lisp.h: Fix up prototypes to match alloc.c - -1998-12-09 Andy Piper - - * glyphs-msw.c (init_image_instance_from_xbm_inline): don't use - XSETINT for assigning lisp objects. - -1998-12-07 Martin Buchholz - - * opaque.h: - * console-msw.c (DHEADER): - (DOPAQUE_DATA): - (DEVENT): - (DCONS): - (DCONSCDR): - (DSTRING): - (DVECTOR): - (DSYMBOL): - (DSYMNAME): - - max_align_t should not be visible to the user of the - XOPAQUE_DATA macro. - - use Bufbyte instead of char - - parens around (FOOP (obj)) are always redundant. - If they were necessary, we should fix the macro instead. - - Always use string_data(foo) instead of foo->data. - -1998-12-07 Martin Buchholz - - * sysdep.c (set_descriptor_non_blocking): - Since O_NONBLOCK is now always #defined, make use of fcntl - conditional on F_SETFL being defined. - -1998-12-09 Andy Piper - - * menubar-msw.c (mswindows_handle_wm_command): add back in checks - that got removed in the merge - -1998-11-30 Greg Klanderman - - * dired.c (vars_of_dired): bugfix for previous conditionalization - of user-name-completion on non- Windows NT. - -1998-12-08 Martin Buchholz - - * windowsnt.h: Remove `support' for using index and rindex - - * filelock.c (current_lock_owner): - - Change uses of index -> strchr, rindex -> strrchr - -1998-12-06 Martin Buchholz - - * frame-msw.c (mswindows_init_frame_1): - - use make_lisp_hash_table, not Fmake_hash_table - - include elhash.h - -1998-12-05 XEmacs Build Bot - - * XEmacs 21.2.5 is released - -1998-11-30 Martin Buchholz - - * xselect.c (receive_incremental_selection): - * xselect.c (x_get_window_property): - * xmu.c (XmuReadBitmapDataFromFile): - * xmu.c (XmuCursorNameToIndex): - * xgccache.c (describe_gc_cache): - * xgccache.c (gc_cache_lookup): - * xgccache.c (free_gc_cache): - * xgccache.c (make_gc_cache): - * window.h: - * window.c (map_windows_1): - * window.c (Fother_window_for_scrolling): - * window.c (window_scroll): - * window.c (change_window_height): - * window.c (Fsplit_window): - * window.c (window_left_gutter_width): - * window.c (window_modeline_height): - * window.c (invalidate_vertical_divider_cache_in_window): - * window.c (window_needs_vertical_divider_1): - * window.c (update_mirror_internal): - * window.c (SET_LAST_FACECHANGE): - * widget.c (Fwidget_plist_member): - * unexec.c (copy_text_and_data): - * unexcw.c (copy_executable_and_dump_data_section): - * tooltalk.doc: - * tooltalk.c (struct Lisp_Tooltalk_Pattern): - * tooltalk.c (struct Lisp_Tooltalk_Message): - * toolbar.h (struct toolbar_button): - * toolbar.c (default_toolbar_visible_p_changed_in_window): - * toolbar.c (recompute_overlaying_specifier): - * toolbar.c (toolbar_validate): - * toolbar.c (toolbar_button_at_pixpos): - * toolbar.c (get_toolbar_coords): - * toolbar.c (update_frame_toolbars): - * toolbar-x.c: - * toolbar-msw.c (mswindows_handle_toolbar_wm_command): - * toolbar-msw.c (mswindows_find_toolbar_pos): - * toolbar-msw.c (mswindows_output_toolbar): - * toolbar-msw.c (mswindows_clear_toolbar): - * toolbar-msw.c: - * systty.h: - * syssignal.h: - * sysproc.h: - * sysfile.h: - * sysdll.c: - * sysdep.h: - * sysdep.c (rmdir): - * sysdep.c (sys_fopen): - * sysdep.c (sys_open): - * sysdep.c (tty_init_sys_modes_on_device): - * sysdep.c (get_eof_char): - * sysdep.c (child_setup_tty): - * sysdep.c (set_descriptor_non_blocking): - * syntax.h: - * syntax.c (scan_words): - * syntax.c: - * symsinit.h: - * symeval.h (struct symbol_value_varalias): - * symeval.h (struct symbol_value_forward): - * symbols.c (syms_of_symbols): - * symbols.c (init_symbols_once_early): - * symbols.c (Fbuilt_in_variable_type): - * symbols.c (Fsymbol_value_in_buffer): - * symbols.c (default_value): - * symbols.c (Fset): - * symbols.c (find_symbol_value_quickly): - * symbols.c (store_symval_forwarding): - * symbols.c (set_default_console_slot_variable): - * symbols.c (set_default_buffer_slot_variable): - * symbols.c (verify_ok_for_buffer_local): - * symbols.c (symbol_is_constant): - * symbols.c (oblookup): - * symbols.c (Funintern): - * symbols.c (Fintern): - * symbols.c (check_obarray): - * sunplay.c: - * specifier.h (struct specifier_methods): - * specifier.h: - * specifier.c (specifier_instance): - * specifier.c (specifier_instance_from_inst_list): - * specifier.c (decode_locale_type): - * specifier.c (specifier_equal): - * specifier.c (finalize_specifier): - * specifier.c (prune_specifiers): - * specifier.c (kill_specifier_buffer_locals): - * sound.c (init_native_sound): - * sound.c: - * signal.c (alarm): - * search.c (Fmatch_data): - * search.c (match_limit): - * search.c (Freplace_match): - * search.c (skip_chars): - * search.c (scan_buffer): - * search.c: - * scrollbar.c (specifier_vars_of_scrollbar): - * scrollbar.c (Fscrollbar_set_hscroll): - * scrollbar.c (vertical_scrollbar_changed_in_window): - * scrollbar.c (release_window_mirror_scrollbars): - * scrollbar.c (free_scrollbar_instance): - * scrollbar-x.c: - * scrollbar-msw.c: - * s/msdos.h (O_BINARY): - * s/linux.h: - * s/freebsd.h (LIBS_TERMCAP): - * regex.c (re_match_2_internal): - * regex.c (compile_extended_range): - * regex.c (POP_FAILURE_POINT): - * regex.c (PUSH_FAILURE_POINT): - * redisplay.h (RESET_CHANGED_SET_FLAGS): - * redisplay.h: - * redisplay.h (struct display_line): - * redisplay.h (struct rune): - * redisplay.c (vars_of_redisplay): - * redisplay.c (redisplay_variable_changed): - * redisplay.c (UPDATE_CACHE_RETURN): - * redisplay.c (validate_line_start_cache): - * redisplay.c (mark_redisplay_structs): - * redisplay.c (mark_glyph_block_dynarr): - * redisplay.c (window_line_number): - * redisplay.c (redisplay_frame): - * redisplay.c (redisplay_window): - * redisplay.c (generate_modeline): - * redisplay.c (create_right_glyph_block): - * redisplay.c (create_left_glyph_block): - * redisplay.c (create_text_block): - * redisplay.c: - * redisplay-x.c (x_output_hline): - * redisplay-x.c (x_output_vertical_divider): - * redisplay-tty.c (tty_output_display_block): - * redisplay-output.c (output_display_line): - * redisplay-output.c: - * redisplay-msw.c (mswindows_output_vertical_divider): - * redisplay-msw.c (mswindows_ring_bell): - * redisplay-msw.c (mswindows_output_cursor): - * redisplay-msw.c: - * rangetab.c: - * ralloc.c: - * puresize.h (RAW_PURESIZE): - * profile.c (syms_of_profile): - * profile.c (Fstart_profiling): - * profile.c (sigprof_handler): - * profile.c: - * procimpl.h: - * process.c (vars_of_process): - * process.c (read_process_output): - * process.c (get_process): - * process.c: - * process-unix.c (unix_open_multicast_group): - * process-unix.c (unix_get_tty_name): - * process-unix.c (unix_send_process): - * process-unix.c (unix_reap_exited_processes): - * process-unix.c (unix_create_process): - * process-unix.c (unix_init_process_io_handles): - * process-unix.c (allocate_pty): - * process-unix.c: - * process-nt.c (nt_open_network_stream): - * process-nt.c (nt_update_status_if_terminated): - * process-nt.c (nt_finalize_process_data): - * process-nt.c: - * print.c (debug_short_backtrace): - * print.c (debug_backtrace): - * print.c (print_symbol): - * print.c (print_internal): - * print.c (print_cons): - * print.c (Fwrite_char): - * print.c (print_prepare): - * print.c (canonicalize_printcharfun): - * print.c (output_string): - * print.c: - * opaque.h: - * opaque.c (allocate_managed_opaque): - * opaque.c: - * offix.c (DndSetData): - * objects.c (face_boolean_create): - * objects.c (font_instantiate): - * objects.c (font_create): - * objects.c (color_create): - * objects.c (finalize_font_instance): - * objects.c (finalize_color_instance): - * objects.c: - * objects-x.c (x_font_instance_truename): - * objects-x.c: - * objects-x.c (x_initialize_font_instance): - * objects-x.c (allocate_nearest_color): - * objects-tty.c (tty_initialize_font_instance): - * objects-tty.c (tty_initialize_color_instance): - * objects-msw.c (mswindows_initialize_color_instance): - * ntproc.c (syms_of_ntproc): - * ntproc.c (Fwin32_set_process_priority): - * ntproc.c (sys_spawnve): - * ntproc.c: - * ntheap.c (get_data_end): - * nt.c (period): - * nt.c: - * nt.c (stat): - * nt.c (generate_inode_val): - * nt.c (sys_rename): - * nas.c: - * mule-wnnfns.c (Fwnn_hinsi_number): - * mule-wnnfns.c (Fwnn_yuragi): - * mule-wnnfns.c (Fwnn_common_learn): - * mule-wnnfns.c (Fwnn_suffix_learn): - * mule-wnnfns.c (Fwnn_prefix_learn): - * mule-wnnfns.c (Fwnn_okuri_learn): - * mule-wnnfns.c (Fwnn_complex_conv): - * mule-wnnfns.c (Fwnn_last_is_first): - * mule-wnnfns.c (Fwnn_bmodify_dict_add): - * mule-wnnfns.c (Fwnn_notrans_dict_add): - * mule-wnnfns.c (Fwnn_fiusr_dict_add): - * mule-wnnfns.c (Fwnn_fisys_dict_add): - * mule-wnnfns.c (Fwnn_hinsi_list): - * mule-wnnfns.c (Fwnn_fuzokugo_set): - * mule-wnnfns.c (Fwnn_dict_search): - * mule-wnnfns.c (Fwnn_word_toroku): - * mule-wnnfns.c (Fwnn_hindo_update): - * mule-wnnfns.c (Fwnn_bunsetu_henkou): - * mule-wnnfns.c (Fwnn_kakutei): - * mule-wnnfns.c (Fwnn_begin_henkan): - * mule-wnnfns.c (Fwnn_dict_comment): - * mule-wnnfns.c (Fwnn_dict_add): - * mule-wnnfns.c (Fwnn_open): - * mule-mcpath.c (mc_getcwd): - * mule-coding.c (vars_of_mule_coding): - * mule-coding.c (convert_to_external_format): - * mule-coding.c (encoding_marker): - * mule-coding.c (decoding_marker): - * mule-coding.c (Fcopy_coding_system): - * mule-coding.c (Fmake_coding_system): - * mule-coding.c (Fcoding_system_list): - * mule-coding.c (Ffind_coding_system): - * mule-coding.c (symbol_to_eol_type): - * mule-coding.c: - * mule-charset.c (complex_vars_of_mule_charset): - * mule-charset.c (vars_of_mule_charset): - * mule-charset.c (Fset_charset_ccl_program): - * mule-charset.c (struct charset_list_closure): - * mule-charset.c (Ffind_charset): - * mule-charset.c (make_charset): - * mule-charset.c (non_ascii_valid_char_p): - * mule-charset.c: - * mule-ccl.c (ccl_driver): - * mule-canna.c (c2mu): - * mule-canna.c (Fcanna_henkan_begin): - * mule-canna.c (Fcanna_parse): - * mule-canna.c (Fcanna_store_yomi): - * mule-canna.c (Fcanna_touroku_string): - * mule-canna.c (Fcanna_initialize): - * minibuf.c: - * menubar.c (menu_parse_submenu_keywords): - * menubar-x.c (make_dummy_xbutton_event): - * menubar-x.c (set_frame_menubar): - * menubar-x.c (menu_item_descriptor_to_widget_value_1): - * menubar-x.c: - * menubar-msw.h: - * menubar-msw.c (mswindows_popup_menu): - * menubar-msw.c (mswindows_update_frame_menubars): - * menubar-msw.c (mswindows_handle_wm_command): - * menubar-msw.c (unsafe_handle_wm_initmenu_1): - * menubar-msw.c (unsafe_handle_wm_initmenupopup_1): - * menubar-msw.c (update_frame_menubar_maybe): - * menubar-msw.c (populate_or_checksum_helper): - * menubar-msw.c (empty_menu): - * menubar-msw.c: - * md5.c: - * marker.c (set_marker_internal): - * marker.c (print_marker): - * malloc.c: - * make-src-depend: - * lstream.c (lisp_buffer_rewinder): - * lstream.c (mark_lstream): - * lrecord.h: - * lrecord.h (struct lrecord_header): - * lread.c (readevalloop): - * lread.c (locate_file): - * lread.c (locate_file_in_directory): - * lread.c (Flocate_file): - * lread.c (load_force_doc_string_unwind): - * lread.c (ebolify_bytecode_constants): - * lread.c: - * lisp.h: - * lisp-union.h: - * lisp-disunion.h: - * linuxplay.c (linux_play_data_or_file): - * linuxplay.c (audio_init): - * line-number.c: - * keymap.h: - * keymap.c (describe_map): - * keymap.c (describe_map_mapper): - * keymap.c (Fdescribe_bindings_internal): - * keymap.c (Fsingle_key_description): - * keymap.c (map_keymap_sorted): - * keymap.c (get_relevant_keymaps): - * keymap.c (Flookup_key): - * keymap.c (raw_lookup_key_mapper): - * keymap.c (Fdefine_key): - * keymap.c (Fevent_matches_key_specifier_p): - * keymap.c (key_desc_list_to_event): - * keymap.c (define_key_parser): - * keymap.c (define_key_check_and_coerce_keysym): - * keymap.c (keymap_submaps): - * keymap.c (keymap_store_internal): - * keymap.c (keymap_delete_inverse_internal): - * keymap.c (keymap_store_inverse_internal): - * keymap.c (print_keymap): - * keymap.c (Lisp_Keymap): - * keymap.c: - * intl.c: - * insdel.c (convert_bufbyte_string_into_emchar_dynarr): - * insdel.c (make_gap): - * input-method-xlib.c (get_XIM_input): - * input-method-xlib.c (XIM_init_frame): - * imgproc.c: - * hash.h: - * hash.c: - * gui.c: - * gui-x.c (button_item_to_widget_value): - * gui-x.c (popup_selection_callback): - * glyphs.h (struct image_instantiator_methods): - * glyphs.c (mark_glyph_cachels): - * glyphs.c (Fglyph_type): - * glyphs.c (image_instantiate): - * glyphs.c (image_create): - * glyphs.c (make_image_instance_1): - * glyphs.c (finalize_image_instance): - * glyphs.c: - * glyphs-x.c (finalize_subwindow): - * glyphs-x.c (xface_validate): - * glyphs-x.c (x_locate_pixmap_file): - * glyphs-x.c (convert_EImage_to_XImage): - * glyphs-msw.c: - * glyphs-msw.c (mswindows_resource_instantiate): - * glyphs-msw.c (xpm_to_eimage): - * glyphs-msw.c (convert_EImage_to_DIBitmap): - * glyphs-eimage.c (tiff_instantiate): - * glyphs-eimage.c (png_instantiate): - * glyphs-eimage.c (struct png_error_struct): - * glyphs-eimage.c (gif_memory_storage): - * glyphs-eimage.c: - * gifrlib.h: - * getloadavg.c (getloadavg): - * getloadavg.c: - * gdbinit: - * free-hook.c (log_gcpro): - * free-hook.c (check_malloc): - * free-hook.c (check_free): - * free-hook.c (ROUND_UP_TO_PAGE): - * free-hook.c: - * frame.h (struct frame): - * frame.h: - * frame.c (change_frame_size_1): - * frame.c (allocate_frame_core): - * frame.c: - * frame-x.c (x_focus_on_frame): - * frame-x.c (x_init_frame_2): - * frame-x.c (x_popup_frame): - * frame-x.c (xemacs_XtPopup): - * frame-x.c: - * frame-x.c (Foffix_start_drag_internal): - * frame-x.c (x_cde_destroy_callback): - * frame-x.c (x_wm_hack_wm_protocols): - * frame-tty.c (tty_frame_visible_p): - * frame-msw.c (mswindows_make_frame_invisible): - * frame-msw.c (mswindows_after_init_frame): - * frame-msw.c (mswindows_init_frame_1): - * fns.c (syms_of_fns): - * fns.c (Fbase64_decode_string): - * fns.c (Fnconc): - * fns.c (Ffillarray): - * fns.c (Fobject_plist): - * fns.c (Fget): - * fns.c (Fcanonicalize_lax_plist): - * fns.c (Fcanonicalize_plist): - * fns.c (Fplist_remprop): - * fns.c (Fplist_get): - * fns.c (advance_plist_pointers): - * fns.c (internal_plist_put): - * fns.c (Fnreverse): - * fns.c (Fremassq): - * fns.c (Felt): - * fns.c (Fsubstring): - * fns.c (Fbvconcat): - * fns.c (Flength): - * fns.c (length_with_bytecode_hack): - * fns.c (print_bit_vector): - * fns.c: - * floatfns.c (Ffloor): - * floatfns.c: - * floatfns.c (in_float_error): - * fileio.c (Ffile_modes): - * fileio.c (Fexpand_file_name): - * fileio.c (Fmake_temp_name): - * fileio.c (Ffile_name_nondirectory): - * fileio.c (Ffile_name_directory): - * file-coding.h: - * file-coding.c (vars_of_mule_coding): - * file-coding.c (convert_to_external_format): - * file-coding.c (encoding_marker): - * file-coding.c (decoding_marker): - * file-coding.c (Fcopy_coding_system): - * file-coding.c (Fmake_coding_system): - * file-coding.c (struct coding_system_list_closure): - * file-coding.c (Ffind_coding_system): - * file-coding.c (symbol_to_eol_type): - * file-coding.c: - * faces.h (struct face_cachel): - * faces.c (vars_of_faces): - * faces.c (face_property_was_changed): - * faces.c (mark_face_cachels): - * faces.c (temporary_faces_list): - * faces.c (struct face_list_closure): - * faces.c: - * extents.h (struct extent): - * extents.c (vars_of_extents): - * extents.c (struct copy_string_extents_1_arg): - * extents.c (add_string_extents_mapper): - * extents.c (Fextent_property): - * extents.c (Fset_extent_property): - * extents.c (symbol_to_glyph_layout): - * extents.c (properties_equal): - * extents.c (print_extent): - * extents.c (print_extent_1): - * extents.c (extent_in_region_p): - * extents.c (gap_array_make_gap): - * extents.c: - * events.h (struct Lisp_Event): - * events.h: - * events.c (Fevent_properties): - * events.c (format_event_object): - * events.c (Fmake_event): - * events.c (event_equal): - * events.c (print_event): - * events.c (mark_event): - * event-stream.c ((read-char) - * event-stream.c (vars_of_event_stream): - * event-stream.c (syms_of_event_stream): - * event-stream.c (Fset_recent_keys_ring_size): - * event-stream.c (Fsit_for): - * event-stream.c (Fnext_event): - * event-stream.c (execute_help_form): - * event-stream.c (maybe_kbd_translate): - * event-stream.c: - * event-msw.c (vars_of_event_mswindows): - * event-msw.c (mswindows_wnd_proc): - * event-msw.c (mswindows_need_event): - * event-msw.c (mswindows_drain_windows_queue): - * event-msw.c (mswindows_pump_outstanding_events): - * event-msw.c: - * event-msw.c (slurp_thread): - * event-msw.c (struct ntpipe_slurp_stream): - * event-msw.c (HANDLE_TO_USID): - * event-Xt.c (emacs_Xt_handle_magic_event): - * event-Xt.c (x_event_to_emacs_event): - * event-Xt.c (x_reset_modifier_mapping): - * event-Xt.c (x_reset_key_mapping): - * event-Xt.c: - * eval.c (syms_of_eval): - * eval.c (warn_when_safe): - * eval.c (warn_when_safe_lispobj): - * eval.c (Fbacktrace_frame): - * eval.c (Fbacktrace): - * eval.c (top_level_set): - * eval.c (unbind_to_hairy): - * eval.c (specbind_magic): - * eval.c (specbind_unwind_wasnt_local): - * eval.c (call2_trapping_errors): - * eval.c (call1_trapping_errors): - * eval.c (catch_them_squirmers_call2): - * eval.c (call0_trapping_errors): - * eval.c (run_hook_trapping_errors): - * eval.c (catch_them_squirmers_eval_in_buffer): - * eval.c (call4_in_buffer): - * eval.c (call3_in_buffer): - * eval.c (call2_in_buffer): - * eval.c (call1_in_buffer): - * eval.c (call0_in_buffer): - * eval.c (run_hook): - * eval.c (run_hook_with_args_in_buffer): - * eval.c (Fapply): - * eval.c (Feval): - * eval.c (do_autoload): - * eval.c (un_autoload): - * eval.c (Fautoload): - * eval.c (Finteractive_p): - * eval.c (Fcommand_execute): - * eval.c (signal_quit): - * eval.c (call_with_suspended_errors): - * eval.c (signal_error): - * eval.c (return_from_signal): - * eval.c (Fcall_with_condition_handler): - * eval.c (run_condition_case_handlers): - * eval.c (condition_case_1): - * eval.c (Funwind_protect): - * eval.c (unwind_to_catch): - * eval.c (internal_catch): - * eval.c (Fmacroexpand_internal): - * eval.c (Fuser_variable_p): - * eval.c (Fdefconst): - * eval.c (Fdefvar): - * eval.c (Ffunction): - * eval.c (signal_call_debugger): - * eval.c (call_debugger): - * eval.c: - * emacs.c (main): - * emacs.c (sort_args): - * emacs.c (main_1): - * elhash.h: - * elhash.c: - * editfns.c (Fencode_time): - * editfns.c (Fdecode_time): - * editfns.c (Fuser_full_name): - * editfns.c: - * editfns.c (save_excursion_restore): - * ecrt0.c: - * dynarr.c: - * doprnt.c (emacs_doprnt_1): - * doc.c (verify_doc_mapper): - * doc.c (Fsnarf_documentation): - * doc.c (Fdocumentation): - * dll.c: - * dired.c (user_name_completion): - * dired.c (Fdirectory_files): - * dialog-x.c: - * dialog-msw.c: - * dgif_lib.c (FreeSavedImages): - * dgif_lib.c (DGifGetImageDesc): - * device.h: - * device.h (struct device): - * device.c (Fselect_device): - * device.c (allocate_device): - * device.c: - * device-x.c (Fx_keysym_on_keyboard_p): - * device-x.c (Fx_valid_keysym_name_p): - * device-x.c (x_IO_error_handler): - * device-x.c (x_delete_device): - * device-x.c (x_finish_init_device): - * device-x.c (x_init_device): - * device-x.c: - * device-msw.c (mswindows_init_device): - * dbxrc: - * database.c (vars_of_database): - * database.c (Fput_database): - * database.c (Fopen_database): - * database.c (berkdb_remove): - * database.c (berkdb_put): - * database.c (Fdatabasep): - * database.c (print_database): - * database.c: - * data.c (vars_of_data): - * data.c (syms_of_data): - * data.c (init_errors_once_early): - * data.c (prune_weak_lists): - * data.c (finish_marking_weak_lists): - * data.c (print_weak_list): - * data.c (Fmod): - * data.c (Fstring_to_number): - * data.c (Fnumber_to_string): - * data.c (Findirect_function): - * data.c (Fsetcdr): - * data.c (Ffloatp): - * data.c (Fsubr_interactive): - * data.c (Farrayp): - * data.c (Fkeywordp): - * data.c (Fnull): - * data.c: - * console.h (CONSOLE_NAME): - * console.h: - * console.c (vars_of_console): - * console.c (Fselect_console): - * console.c: - * console-x.h (DEVICE_X_COLORMAP): - * console-x.h (struct x_device): - * console-x.c (x_device_to_console_connection): - * console-tty.h (CONSOLE_TTY_FINAL_CURSOR_Y): - * console-tty.c (tty_init_console): - * console-tty.c: - * console-msw.h (struct mswindows_frame): - * conslots.h: - * config.h.in: - * cmds.c (internal_self_insert): - * cmds.c (Fforward_line): - * cmds.c (Fforward_char): - * cmds.c: - * cmdloop.c: - * chartab.c (mark_char_table_entry): - * chartab.c: - * casefiddle.c (casify_word): - * callproc.c (child_setup): - * callproc.c (Fcall_process_internal): - * callproc.c: - * callint.c (Fcall_interactively): - * bytecode.h: - * bytecode.c (execute_rare_opcode): - * bytecode.c (execute_optimized_program): - * bytecode.c: - * bufslots.h: - * buffer.h (BUFFER_REALLOC): - * buffer.h (GET_CHARPTR_INT_DATA_ALLOCA): - * buffer.h (GET_CHARPTR_EXT_DATA_ALLOCA): - * buffer.h: - * buffer.h (MAP_INDIRECT_BUFFERS): - * buffer.h (CHECK_LIVE_BUFFER): - * buffer.c (init_initial_directory): - * buffer.c (complex_vars_of_buffer): - * buffer.c (vars_of_buffer): - * buffer.c (finish_init_buffer): - * buffer.c (Fget_file_buffer): - * buffer.c (Fbuffer_list): - * buffer.c (mark_buffer): - * balloon_help.c (balloon_help_move_to_pointer): - * balloon_help.c (show_help): - * balloon_help.c: - * backtrace.h: - * alloc.c (garbage_collect_1): - * alloc.c (sweep_strings): - * alloc.c (sweep_compiled_functions): - * alloc.c (sweep_bit_vectors_1): - * alloc.c (sweep_vectors_1): - * alloc.c (sweep_lcrecords_1): - * alloc.c (tick_lcrecord_stats): - * alloc.c (pure_string_sizeof): - * alloc.c (mark_conses_in_list): - * alloc.c (mark_object): - * alloc.c (report_pure_usage): - * alloc.c (make_pure_float): - * alloc.c (make_pure_string): - * alloc.c (free_managed_lcrecord): - * alloc.c (mark_string): - * alloc.c (noseeum_make_marker): - * alloc.c (allocate_event): - * alloc.c (Fbit_vector): - * alloc.c (Fvector): - * alloc.c (make_float): - * alloc.c (Fmake_list): - * alloc.c (Flist): - * alloc.c (FREE_FIXED_TYPE_WHEN_NOT_IN_GC): - * alloc.c (PUT_FIXED_TYPE_ON_FREE_LIST): - * alloc.c (DECLARE_FIXED_TYPE_ALLOC): - * alloc.c (dbg_constants): - * alloc.c (gc_record_type_p): - * alloc.c (free_lcrecord): - * alloc.c (xmalloc): - * alloc.c (NOSEEUM_INCREMENT_CONS_COUNTER): - * abbrev.c: - * Makefile.in.in (mostlyclean): - * Makefile.in.in (external_client_xlib_objs_nonshared): - * Makefile.in.in (temacs_link_args): - * Makefile.in.in (release): - * Makefile.in.in (dnd_objs): - * Makefile.in.in (objs): - * Makefile.in.in (PROGNAME): - * EmacsShell.c: cast strings to (XtPointer) - * EmacsFrame.c: cast strings to (XtPointer) - - mega patch - - rewrite basic lisp functions for speed - - rewrite bytecode interpreter for speed - - rewrite list looping constructs for speed and safety using - tortoise/hare. - - use size_t where appropriate. - - new hashtable implementation - - cleanup implementation of opaques - - opaques can now be purecopy'ed - - move some cl functionality into C for speed. - - remove last remaining VMS support - - spelling fixes - - improve gdb/dbx debugger support - - move pure.c back into alloc.c for performance - - enable report_pure_usage() if --memory-usage-stats - - remove remnants of Energize support (EMACS_BTL, cadillac...) - - don't use symbols with leading `_' or embedded `__' - - globally cleanup duplicated semicolons `;;' - - I give in on %p vs %lx - we use printf("%lx",(long) p) - globally. - - globally replace O_NDELAY with O_NONBLOCK. - - globally replace CDISABLE with _POSIX_VDISABLE. - - use O_RDONLY and O_RDWR instead of magic `0' and `2'. - - define (and maybe use!) STDERR_FILENO and friends. - - add support for macros defined in C - - `when', `unless', `not' and `defalias' now defined in C, - so that they are universally available. - - rename defvar_mumble to defvar_magic - - rename RETURN__ to RETURN_SANS_WARNINGS - - use consistent style of initial caps in error messages - - implement last, butlast, nbutlast, copy-list in C. - - provide typedefs for all struct Lisp_foo types - - Lisp_Objects must be initialized to Qnil rather than 0. - - make sure XEmacs runs (slowly) with always_gc == 1; - - fast and safe LOOP_* macros - - change calls to XSETOBJ to XSETFOO - - replace calls to XSETINT by make_int() - - plug up memory leaks - - use style markobj (foo), not silly ((markobj) (foo)) - - use XFLOAT_DATA (obj) instead of float_data (XFLOAT (obj)) - -1998-12-02 P. E. Jareth Hein - - * unexec.c: Changed a #ifndef statement to fix XEmacs on BSDI 3.0 - -1998-11-28 SL Baur - - * XEmacs 21.2-beta4 is released. - -1998-11-27 SL Baur - - * mule-charset.c (complex_vars_of_mule_charset): Fix graphic - property in control-1 charset. - From Julian Bradfield - -1998-11-26 Jan Vroonhof - - * gui-x.c (button_item_to_widget_value): Ignore :key-sequence - keyword. - Add stub for :label. - - * gui.c (gui_item_add_keyval_pair): ditto. - - * menubar-x.c (menu_item_descriptor_to_widget_value_1): Ignore - :key-sequence keyword. - Add stub for:label. - Support :active for submenus like the Windows code and FSF Emacs. - -1998-11-27 Hrvoje Niksic - - * dired.c (make_directory_hash_table): make_string() is OK because - readdir() Mule-encapsulates. - -1998-11-26 Hrvoje Niksic - - * fns.c (Fbase64_encode_string): Fix docstring. - (Fbase64_decode_string): Ditto. - -1998-11-26 Hrvoje Niksic - - * editfns.c (Ftranslate_region): Use - convert_bufbyte_string_into_emchar_string(). - -1998-11-25 Hrvoje Niksic - - * editfns.c (Ftranslate_region): Accept vectors and char-tables as - well as strings. - (Ftranslate_region): Turn table into an array of Emchars for - larger regions. - -1998-11-25 Hrvoje Niksic - - * chartab.c (Freset_char_table): Fix wrong placement of #endif. - -1998-11-24 Hrvoje Niksic - - * chartab.c (Freset_char_table): Don't blindly fill chartables of - type `char' with nils. - - * chartab.c (canonicalize_char_table_value): Coerce ints to chars - for tables of type `char'. - -1998-11-26 Didier Verna - - * input-method-xlib.c (Initialize_Locale): don't call - XtSetLanguageProc. We've done the whole work here. - * input-method-xfs.c (Initialize_Locale): ditto. - * input-method-motif.c (Initialize_Locale): ditto. - -1998-11-26 Didier Verna - - * process-unix.c (unix_create_process): handle properly - Vfile_name_coding_system for converting the program and directory - names. - -1998-11-27 SL Baur - - * m/arm.h: New file. - From James LewisMoss - -1998-11-27 Takeshi Hagiwara - - * m/mips-nec.h: - Fix the realpath() problem of UnixWare2.1.3. - Patches for NEC's sysv4.2 machine. - -1998-11-25 Hrvoje Niksic - - * dired.c (Fdirectory_files): Remove redundant code. - -1998-11-25 Hrvoje Niksic - - * fns.c (free_malloced_ptr): New function. - (XMALLOC_OR_ALLOCA): New macro. - (XMALLOC_UNBIND): Ditto. - (Fbase64_encode_region): Use malloc() for large blocks; arrange it - to be freed in case of non-local exit. - (Fbase64_encode_string): Ditto. - (Fbase64_decode_region): Ditto. - (Fbase64_decode_string): Ditto. - (STORE_BYTE): New macro. - (base64_decode_1): Use it. - -1998-11-25 Hrvoje Niksic - - * fns.c (base64_value_to_char): Base64 stuff. - -1998-11-24 Hrvoje Niksic - - * editfns.c (Fbuffer_substring): New function. - - * lisp.h: Declare make_string_from_buffer_no_extents(). - - * insdel.c (make_string_from_buffer_1): New function. - (make_string_from_buffer_no_extents): Ditto. - -1998-11-15 Michael Sperber [Mr. Preprocessor] - - * linuxplay.c: Including instead of makes - sound work on AIX with OSS installed. Linux should still work. - -1998-11-03 Andy Piper - - * config.h.in: name change for cygwin/version.h - - * configure.in: check for cygwin/version.h now. - - * cygwin32.h: track CYGWIN_DLL_VERSION_MAJOR -> - CYGWIN_VERSION_DLL_MAJOR name change in cygwin b20. - move cygwin32/version.h to cygwin/version.h - -1998-11-03 Olivier Galibert - - * lisp.h (struct Lisp_Bit_Vector): Fix declaration of bits from - int to long. - -1998-10-22 Andy Piper - - * cygwin32.h: track CYGWIN_DLL_VERSION_MAJOR -> - CYGWIN_VERSION_DLL_MAJOR name change in cygwin b20. - enable BROKEN_SIGIO under b20 to make QUIT work. - -1998-10-22 Andy Piper - - * frame-msw.c (mswindows_size_frame_internal): force frame sizing - to fit within the constraints of the screen size. I.e. make the - frame small enough to fit and move it if some of it will be - off-screen. - -1998-10-19 Greg Klanderman - - * dired.c: conditionalize inclusion of user-name-completion - primitives on non-Windows NT. The needed functions don't exist on NT. - -1998-11-24 SL Baur - - * gifrlib.h: Clean up types for 64 bit compile. - * dgif_lib.c (DGifInitRead): Ditto. - (MakeSavedImage): Ditto. - * emacs.c (decode_path): Ditto. - From Steve Carney - -1998-10-16 William M. Perry - - * glyphs-msw.c (bitmap_table): Fixed typo in builtin bitmaps - (cehckboxes instead of checkboxes). - -1998-10-15 SL Baur - - * XEmacs 21.2-beta3 is released. - -1998-10-13 Raymond Toy - - * runemacs.c (WinMain): If the basename is "rungnuclient.exe", run - gnuclient. Otherwise, we run xemacs as we always did. This gets - rid of the annoying DOS window when running gnuclient. - -1998-10-13 Andy Piper - - * dragdrop.c (vars_of_dragdrop): rename HAVE_MSWINDOWS -> - HAVE_MS_WINDOWS typo. - -1998-10-13 SL Baur - - * process-unix.c (unix_send_process): Set closed flag on writable - pipe after SIGPIPE is received and before we call deactivate_process. - -1998-10-03 Gunnar Evermann - - * window.c (Fset_window_start): respect narrowing when - checking wheter start is at the beginning of a line. - (Fset_window_buffer): Ditto - Fixes repeatable crash in VM. - -1998-10-09 SL Baur - - * window.c (specifier_vars_of_window): Set default vertical - divider width to 1 on ttys. - -1998-10-08 Martin Buchholz - - * alloc.c: - * unexec.c: - * malloc.c: - Add to get ptrdiff_t declaration - -1998-10-07 Jonathan Harris - - * scrollbar-msw.c: Use the same vertical scrollbar drag hack as - is used for Motif or Lucid scrollbars under X. - -1998-10-08 Pierre Wendling - - * m/alpha.h (UNEXEC): quoted to avoid bad expansion when running - `configure' - -1998-10-06 Takeshi Hagiwara - - * frame-x.c (x_delete_frame): Fix an argument of XtDestroyWidget. - -1998-10-05 Andy Piper - - * s/cygwin32.h: more cygwin b20 reorganisation. - -1998-10-01 Raymond Toy - - * nas.c: Added necessary support functions to be able to handle - WAVE files in memory, just like the support for SND files in - memory. - -1998-09-30 SL Baur - - * callproc.c (child_setup): Fix spelling typo. - -1998-09-29 SL Baur - - * XEmacs 21.2-beta2 is released. - -1998-09-27 P. E. Jareth Hein - - * regex.c (re_match_2_internal): Add in code to reset lowest_active_reg - to prevent memory corruption in the case of jumping out of a series of - nested match patterns. This is a rather brute force approach, though. - -1998-09-02 Andy Piper - - * config.h.in: ditto. - - * s/cygwin32.h: rearrange declarations to cope with cygwin - b20. Include cygwin32/version.h if it exists. - -1998-09-20 Jonathan Harris - - * device-msw.c (mswindows_init_device): Call new - mswindows_enumerate_fonts() function in objects-msw.c instead - of font_enum_callback_1() to enumerate fonts. - - font_enum_callback_1() and _2() moved to objects-msw.c. - - * faces.c (complex_vars_of_faces): Make the mswindows default - face font fully specified and provide some fallbacks. - - * objects-msw.c: font_enum_callback_1() and _2() moved here - from objects-msw.c. Obtain the enumerated font's character - sets by table lookup instead of using the locale-specific - string provided by Windows. - - New public non-method mswindows_enumerate_fonts() that fills - in the supplied mswindows device's font list. - - mswindows_initialize_font_instance: Use the supplied name - variable instead of f->name when signalling errors. Match font - weights and character sets using lookup tables which handle - spaces instead of by frobbing. - -1998-09-20 Jonathan Harris - - * process-nt.c: Define an arbitrary limit, FRAGMENT_CODE_SIZE, - on the size of code fragments passed to run_in_other_process. - - run_in_other_process(): Use FRAGMENT_CODE_SIZE to determine - the amount of memory to allocate in the other process. - - Removed sigkill_code_end(), sigint_code_end() and - sig_enable_code_end() since they are now redundant. - - send_signal() and enable_child_signals(): Don't try to work - out the end of the code fragments passed to - run_in_other_process() - -1998-09-10 Kazuyuki IENAGA - - * src/s/freebsd.h: Added __ELF__ and compiler/liker flags for - FreeBSD-current. - - * src/unexelf.c: Partially synched with FSF's 20.3. - -1998-09-10 Hrvoje Niksic - - * insdel.c (signal_after_change): Map across indirect buffers - here, and not in the upper-level functions. - (signal_first_change): Don't check for Armageddon. - (signal_before_change): Map across indirect buffers here. - (prepare_to_modify_buffer): ...and here. - -1998-09-09 Hrvoje Niksic - - * insdel.c (signal_after_change): Add return value. - (buffer_insert_string_1): Use it. - (buffer_delete_range): Ditto. - (buffer_replace_char): Ditto. - (cancel_multiple_change): Map the indirect buffers. - -1998-09-06 Hrvoje Niksic - - * insdel.c (init_buffer_text): Remove INDIRECT_P parameter. - (uninit_buffer_text): Ditto. - - * buffer.c (Fmake_indirect_buffer): Implement stricter - error-checking. - -1998-09-04 Hrvoje Niksic - - * insdel.c (change_function_restore): Reverse order of - function-call and assignment. - (first_change_hook_restore): Ditto. - - * extents.c (mark_extent_auxiliary): Mark them. - (Fset_extent_property): Set them. - (Fextent_property): Get them. - (Fextent_properties): Ditto. - (vars_of_extents): Set their default. - - * extents.h (struct extent_auxiliary): Add before_change_functions - and after_change_functions. - - * insdel.c (signal_before_change): Use it. - (signal_after_change): Ditto. - - * extents.c (report_extent_modification): New function. - - * insdel.c (signal_before_change): Don't check for Armageddon. - (signal_after_change): Ditto. - -1998-09-11 Gunnar Evermann - - * redisplay.c (redisplay_window): make sure a new starting point - is chosen if it somehow got moved from the beginning of the line - -- this can happen because Fwiden was called recently. - - * window.c (Fset_window_start): set start_at_line_beg correctly - (Fset_window_buffer): Ditto - -1998-09-06 Hrvoje Niksic - - * insdel.c (init_buffer_text): Remove INDIRECT_P parameter. - (uninit_buffer_text): Ditto. - - * buffer.c (Fmake_indirect_buffer): Implement stricter - error-checking. - -1998-05-14 Jan Vroonhof - - * emacs.c (main_1): Removed references to *vars_of_filelock. - - * lisp.h: Added Fsystem_name. - - * filelock.c: Replaced by version from FSF 20.2. Now implements - locking by using symlinks which is NFS safe. However keep the - GCPRO's in lock_file and the calls to callx_in_buffer like our old - version (and of course use ansi C, acessor macros, etc). - -1998-09-06 Jan Vroonhof - - * process-unix.c (unix_create_process): Reset SIGHUP handler to - SIG_DFL. We now try to conserve any inherted SIG_IGN settings - in init_signals_very_early. However these should not be passed - on to children attached to the new pty. - -1998-08-28 Andy Piper - - * glyphs-eimage.c (png_instantiate_unwind): clean up eimage after use. - -1998-09-07 Jonathan Harris - - * fileio.c (file-name-directory, file_name_as_directory): - Don't call CORRECT_DIR_SEPS, even when #defined WINDOWSNT. - -1998-09-02 Andy Piper - - * emacs.c (main_1): init_ralloc() if initialised and we have REL_ALLOC - - * ralloc.c: uncomment __morecore. - -1998-09-92 Jonathan Harris - - * event-msw.c(winsock_writer): Supply a dummy 4th argument to - WriteFile() to fix a winsock 1.x bug on Win95. - -1998-08-28 Hrvoje Niksic - - * event-Xt.c (emacs_Xt_mapping_action): Check for device being - deleted. - (x_event_to_emacs_event): Ditto. - (emacs_Xt_handle_focus_event): Ditto. - (emacs_Xt_handle_magic_event): Ditto. - - * console-x.h (struct x_device): New flag being_deleted. - (DEVICE_X_BEING_DELETED): New macro. - - * device-x.c (x_IO_error_handler): Throw to top-level instead of - returning. Before doing that, set the being_deleted flag on the - device. - -1998-08-27 Hrvoje Niksic - - * device-x.c (x-seppuku-on-epipe): Removed. - -1998-08-26 Gunnar Evermann - - * frame-x.c (x_delete_frame): Flush the X output buffer after - calling XtDestroyWidget to ensure that the windows are really - killed right now. - -1998-08-26 Hrvoje Niksic - - * menubar-x.c (my_run_hook): New unused function. - (pre_activate_callback): Use run_hook for Qactivate_menubar_hook, - since we ignore the results of the contained functions anyway. - -1998-08-26 P. E. Jareth Hein - - * glyphs-eimage.c (gif_instantiate): Fix a crash in handling - interlaced GIF files that are smaller than 4 lines high... - -1998-08-31 Hrvoje Niksic - - * buffer.c (map_over_sharing_buffers): Deleted. - - * insdel.c (MAP_INDIRECT_BUFFERS): Move to buffer.h. - - * buffer.c (Fkill_buffer): Keep indirect_children updated while - killing them. - -1998-08-31 Hrvoje Niksic - - * insdel.c (buffer_insert_string_1): Advance the point bytind in - all the buffers. - (buffer_delete_range): Ditto. - - * marker.c (init_buffer_markers): Set point-marker to the value of - point in an indirect buffer. - -1998-08-30 Hrvoje Niksic - - * undo.c (undo_prelude): Test last-undo-buffer against base - buffer. - - * insdel.c (MAP_INDIRECT_BUFFERS): Use it. - - * buffer.h (BUFFER_BASE_BUFFER): New macro. - -1998-08-30 Hrvoje Niksic - - * insdel.c (init_buffer_text): Initialize it here. - - * line-number.c: Address line_number_cache through buffer->text. - - * buffer.c (mark_buffer): Mark line number cache. - - * bufslots.h (line_number_cache): Move to struct buffer_text. - - * insdel.c (buffer_insert_string_1): Propagate signals and changes - across the children buffers. - (buffer_delete_range): Ditto. - (buffer_replace_char): Ditto. - (gap_left): Ditto. - (gap_right): Ditto. - - * insdel.c (MAP_INDIRECT_BUFFERS): New macro. - - * buffer.c (Fmake_indirect_buffer): Uncomment. - -1998-08-31 Hrvoje Niksic - - * macros.c (Fend_kbd_macro): Remove trailing period from error - message. - (Fexecute_kbd_macro): Ditto. - -1998-08-21 Greg Klanderman - - * dired.c (Fuser_name_completion): remove optional 2nd argument. - (Fuser_name_completion_1): new function to return uniqueness - indication in addition to the user name completion. - (user_name_completion): change type of `uniq' argument. - -1998-08-19 Michael Sperber [Mr. Preprocessor] - - * lread.c (vars_of_lread): Removed `source-directory' variable. - -1998-08-22 Hrvoje Niksic - - * fileio.c (Ffile_readable_p): Apply the DOS/Windows logic to - Cygwin. - -1998-08-19 SL Baur - - * dired.c (vars_of_dired): Fix misapplied patch. - -1998-08-16 Martin Buchholz - - * fns.c (Fremrassq, remrassq_no_quit): - A XCAR that should have been an XCDR turned Fremrassq into Fremassq - -1998-07-17 Didier Verna - - * redisplay-x.c (x_get_gc): returns a GC with a FillStipple fill - style as foreground GC for faces that have the `dim' property. - (x_output_string): when the `dim' face property is set, - ensure the gray pixmap has been created, and get a proper - foreground GC to draw the text. - -1998-08-09 Jonathan Harris - - * event-msw.c (mswindows_wnd_proc): Workaround for a Win95 bug: - Manually track the state of the left and right Ctrl and Alt - modifiers. - -1998-08-07 Matt Stupple - - * ntproc.c: don't wait on char_consumed at thread entry. - Additionally, to get the 'process' marked as finished, ensure - that the CHILD_ACTIVE macro returns false, so before exiting - close char_avail and set it to NULL, and close other handles - to reduce handle leak problems. - -1998-08-09 Jonathan Harris - - * menubar-msw.c (displayable_menu_item): take account of menu - depth when deciding whether to try to display accelerators. - -1998-08-04 Andy Piper - - * event-msw.c: use MsgWaitForMultipleObjects if there are no - subprocesses. - - * glyphs-msw.c: fix a couple of potential handle leaks. - -1998-08-04 P. E. Jareth Hein - - * dgif_lib.c gif_io.c gifrlib.h: New files to put GIF - *decoding ONLY* back into the core. - * glyphs-eimage.c: Change referenced header file for GIF - reading to point to the incore version. - -1998-07-20 Martin Buchholz - - * casefiddle.c (casify_object): - Change algorithm from O(N**2) to O(N). - Code cleanup. - Doc string cleanup. - -1998-07-22 Greg Klanderman - - * dired.c (file_name_completion_unwind): don't leak the cons. - -1998-07-20 Greg Klanderman - - * dired.c (Fuser_name_completion): new function. - (Fuser_name_all_completions): new function. - (user_name_completion): new function. - (syms_of_dired): 2 new DEFSUBRs. - (vars_of_dired): initialize user name cache vars. - -1998-07-29 P. E. Jareth Hein - - * glyphs-eimage.c (png_instantiate): Add proper handling for background - colors taken from the default face. Also correct a thinko in - transparency (not alpha) handling. - -1998-07-23 Martin Buchholz - - * s/decosf4-0.h: Use a perfectly ordinary link. Nuke BSD crap. - * unexalpha.c: ANSI C-ize. Clean compiler warnings. - * lread.c (Fload_internal): Be very careful with printfs of - size_t's - * gui-x.c (menu_name_to_accelerator): tolower wants an `int' - argument. - -1998-07-27 Gunnar Evermann - - * callint.c (Fcall_interactively): GCPRO prompt string before - passing it to Fread_key_sequence - -1998-07-27 SL Baur - - * keymap.c (vars_of_keymap): Initialize Vkey_translation_map and - Vvertical_divider_map. - - * mule-canna.c (vars_of_mule_canna): Initialize every symbol to - Qnil or 0, none were initialized prior to this change. - - Rename misnamed `V' prefixed integer variables: - Vcanna_empty_info, Vcanna_through_info, Vcanna_underline, - Vcanna_inhibit_hankakukana, Vcanna_henkan_length, Vcanna_henkan_revPos, - Vcanna_henkan_revLen, Vcanna_ichiran_length, Vcanna_ichiran_revPos, - Vcanna_ichiran_revLen. - - Rename misnamed `V' prefixed integer variables and initialize - properly in the vars_of routine. - Vcanna_mode_AlphaMode, Vcanna_mode_EmptyMode, Vcanna_mode_KigoMode, - Vcanna_mode_YomiMode, Vcanna_mode_JishuMode, Vcanna_mode_TankouhoMode, - Vcanna_mode_IchiranMode, Vcanna_mode_YesNoMode, Vcanna_mode_OnOffMode, - Vcanna_mode_AdjustBunsetsuMode, Vcanna_mode_ChikujiYomiMode, - Vcanna_mode_ChikujiTanMode, Vcanna_mode_HenkanMode, - Vcanna_mode_HenkanNyuryokuMode, Vcanna_mode_ZenHiraHenkanMode, - Vcanna_mode_HanHiraHenkanMode, Vcanna_mode_ZenKataHenkanMode, - Vcanna_mode_HanKataHenkanMode, Vcanna_mode_HanKataHenkanMode, - Vcanna_mode_ZenAlphaHenkanMode, Vcanna_mode_HanAlphaHenkanMode, - Vcanna_mode_ZenHiraKakuteiMode, Vcanna_mode_HanHiraKakuteiMode, - Vcanna_mode_ZenKataKakuteiMode, Vcanna_mode_HanKataKakuteiMode, - Vcanna_mode_ZenAlphaKakuteiMode, Vcanna_mode_HanAlphaKakuteiMode, - Vcanna_mode_HexMode, Vcanna_mode_BushuMode, Vcanna_mode_ExtendMode, - Vcanna_mode_RussianMode, Vcanna_mode_GreekMode, Vcanna_mode_LineMode, - Vcanna_mode_ChangingServerMode, Vcanna_mode_HenkanMethodMode, - Vcanna_mode_DeleteDicMode, Vcanna_mode_TourokuMode, - Vcanna_mode_TourokuEmptyMode, Vcanna_mode_TourokuHinshiMode, - Vcanna_mode_TourokuDicMode, Vcanna_mode_QuotedInsertMode, - Vcanna_mode_BubunMuhenkanMode, Vcanna_mode_MountDicMode, - Vcanna_fn_SelfInsert, Vcanna_fn_FunctionalInsert, - Vcanna_fn_QuotedInsert, Vcanna_fn_JapaneseMode, Vcanna_fn_AlphaMode, - Vcanna_fn_HenkanNyuryokuMode, Vcanna_fn_Forward, Vcanna_fn_Backward, - Vcanna_fn_Next, Vcanna_fn_Prev, Vcanna_fn_BeginningOfLine, - Vcanna_fn_EndOfLine, Vcanna_fn_DeleteNext, Vcanna_fn_DeletePrevious, - Vcanna_fn_KillToEndOfLine, Vcanna_fn_Henkan, Vcanna_fn_Kakutei, - Vcanna_fn_Extend, Vcanna_fn_Shrink, Vcanna_fn_AdjustBunsetsu, - Vcanna_fn_Quit, Vcanna_fn_ConvertAsHex, Vcanna_fn_ConvertAsBushu, - Vcanna_fn_KouhoIchiran, Vcanna_fn_BubunMuhenkan, Vcanna_fn_Zenkaku, - Vcanna_fn_Hankaku, Vcanna_fn_ExtendMode, Vcanna_fn_ToUpper, - Vcanna_fn_Capitalize, Vcanna_fn_ToLower, Vcanna_fn_Hiragana, - Vcanna_fn_Katakana, Vcanna_fn_Romaji, Vcanna_fn_BaseHiragana, - Vcanna_fn_BaseKatakana, Vcanna_fn_BaseEisu, Vcanna_fn_BaseZenkaku, - Vcanna_fn_BaseHankaku, Vcanna_fn_BaseKana, Vcanna_fn_BaseKakutei, - Vcanna_fn_BaseHenkan, Vcanna_fn_BaseHiraKataToggle, - Vcanna_fn_BaseZenHanToggle, Vcanna_fn_BaseKanaEisuToggle, - Vcanna_fn_BaseKakuteiHenkanToggle, Vcanna_fn_BaseRotateForward, - Vcanna_fn_BaseRotateBackward, Vcanna_fn_Touroku, Vcanna_fn_HexMode, - Vcanna_fn_BushuMode, Vcanna_fn_KigouMode, Vcanna_fn_Mark, - Vcanna_fn_TemporalMode, Vcanna_key_Nfer, Vcanna_key_Xfer, - Vcanna_key_Up, Vcanna_key_Left, Vcanna_key_Right, Vcanna_key_Down, - Vcanna_key_Insert, Vcanna_key_Rollup, Vcanna_key_Rolldown, - Vcanna_key_Home, Vcanna_key_Help, Vcanna_key_KP_Key, - Vcanna_key_Shift_Nfer, Vcanna_key_Shift_Xfer, Vcanna_key_Shift_Up, - Vcanna_key_Shift_Left, Vcanna_key_Shift_Right, Vcanna_key_Shift_Down, - Vcanna_key_Cntrl_Nfer, Vcanna_key_Cntrl_Xfer, Vcanna_key_Cntrl_Up, - Vcanna_key_Cntrl_Left, Vcanna_key_Cntrl_Right, Vcanna_key_Cntrl_Down - -1998-07-16 Jan Vroonhof - - * event-Xt.c (x_to_emacs_keysym): Return nil for modifier keysyms. - (x_event_to_emacs_event): Let x_to_emacs_keysym check for modifier - keys thus no longer considering all keysyms on a key. - -1998-07-19 SL Baur - - * XEmacs 21.2-beta1 is released. - -1998-07-12 Oscar Figueiredo - - * eldap.c (Fldap_search_internal): When converting the list of - attributes to search Copy the final 0 from Lisp strings to C - strings. - Check base, not Vldap_default_base as a a string - -1998-07-13 Jonathan Harris - - * nt.c: Remove Vstdio_str; already defined in console-stream.c. - - * unexnt.c: Unconditionally define bss_start and bss_size, and - ensure that they don't go in the .bss section. - -1998-07-17 Olivier Galibert - - * glyphs-x.c (convert_EImage_to_XImage): Fix previous patch (conv - byte order is dependant of the local byte order). - From Takeshi Hagiwara - -1998-07-18 SL Baur - - * glyphs-msw.c (mswindows_resource_normalize): Qresource -> - Qmswindows_resource. - From Jonathan Harris - -1998-07-12 SL Baur - - * general.c (syms_of_general): Add defsymbol for Qresource. - - * glyphs-msw.c (vars_of_glyphs_mswindows): Rename Qresource to - Qmswindows_resource. - (TopLevel): Rename 'resource image format to 'mswindows_resource. - (mswindows_resource_validate): Rename. - (mswindows_resource_normalize): Rename. - (mswindows_resource_possible_dest_types): Rename. - (mswindows_resource_instantiate): Rename. - (image_instantiator_format_create_glyphs_mswindows): Replace - `resource' with `mswindows.resource'. - - * XEmacs 21.0-pre5 is released. - -1998-07-10 SL Baur - - * mule-wnnfns.c (Fwnn_open): Correctly trap on misdefined Wnn - server type in environment. - Use alloca-ed strings instead of tiny fixed size ones. - -1998-07-09 SL Baur - - * XEmacs 21.0-pre4 is released. - -1998-07-01 James N. Potts - - * fileio.c: (expand_file_name): under win32: Don't treat names - as UNC names if a drive letter has been specified. If a drive - has been specified, strip out extra directory-seperators that - reportedly cause problems under Win95. - -1998-07-09 Jonathan Harris - - * windowsnt.h: Define DUMP_SEPARATE_SECTION when building with - MSVC >= 5.0. Put emacs init and zero-init data in a special - section of the executable when this is defined. - - * unexnt.c, ntheap.h: - Removed unused find_section() and get_section_size(). - - * unexnt.c: - Fix up the executable's checksum after dumping otherwise the - profiler complains. - When DUMP_SEPARATE_SECTION is defined, don't need to dump - zero-init data separately from init data. Dump emacs data - into a special section of the executable. - When DUMP_SEPARATE_SECTION not defined, dump .bss up to - my_ebss instead of up to the end of bss. - -1998-07-09 Jonathan Harris - - * filelock.c: Removed Vconfigure_lock_directory - already - defined in emacs.c. - - * frame-msw.c: Removed Qinitially_unmapped and Qpopup - already - defined in frame.c and general.c respectively. - - * glyphs-msw.c: Removed Qresource - already defined in - general.c. - -1998-07-05 Oscar Figueiredo - - * eldap.c (Fldap_search_internal): Docstring fixes - -1998-07-04 Jonathan Harris - - * nt.c (init_environment): Removed unused PRELOAD_WINSOCK, - EMACSDOC and TERM variables. Added EMACSDEBUGPATHS, - EMACSPACKAGEPATH and INFOPATH variables. - Removed unused get_emacs_configuration function. - - * s/windowsnt.h: Don't define EMACS_CONFIGURATION here because - it is now defined at build-time by the makefile. - -1998-07-01 James N. Potts - - * fileio.c: (expand_file_name): under win32: Don't treat names as - UNC names if a drive letter has been specified. If a drive has - been specified, strip out extra directory-seperators that - reportedly cause problems under Win95. - -1998-07-05 Andy Piper - - * faces.c (complex_vars_of_faces): for the gui-element face don't - fallback to the default face, instead provide reasonable default - fallbacks that were previously hardcoded elsewhere. - -1998-07-06 Olivier Galibert - - * glyphs-x.c (convert_EImage_to_XImage): Fix pixel writing problem - when the X server endianness is different than the client's one. - -1998-06-29 Kyle Jones - - * eval.c (run_hook_with_args_in_buffer): Check - default (non-buffer-local) value of hook for - nil before treating it as a function. Don't initialize - the `globals' variable twice. - -1998-06-24 Jonathan Harris - - * fileio.c: Don't do directory seperator canonicalisation in - substitute-in-file-name because we don't know that the - filename refers to a local file. - -1998-06-24 Adrian Aichner - - * process-nt.c (nt_create_process): Try appending the standard - executable file extensions to the filename if none supplied. - -1998-06-29 SL Baur - - * fileio.c (Fsubstitute_in_file_name): Enable double slash notation - for cygwin32. - From Keisuke Mori - -1998-06-24 Andy Piper - - * toolbar-msw.c (mswindows_output_toolbar): only enable masked - images if we have masks. This handles the xbm case (have masks) - and avoids overuse of resources in the xpm case (generally no masks). - Don't output small toolbars. - -1998-06-29 Kyle Jones - - * eval.c (run_hook_with_args_in_buffer): Don't treat - the default value of a buffer local hook as a list of - hooks unless it is both a cons and the car of that cons - is not Qlambda. - -1998-06-29 SL Baur - - * extents.c: Email address for Ben Wing is ben@xemacs.org. - * process-unix.c: Ditto. - * mule-coding.h: Ditto. - * mule-coding.c: Ditto. - * mule-charset.c: Ditto. - * mule-charset.h: Ditto. - * file-coding.c: Ditto. - * file-coding.h: Ditto. - -1998-06-22 Jonathan Harris - - * event-msw.c: Guard against recursion when freeing - FRAME_MSWINDOWS_TARGET_RECT struture in WM_SIZE processing. - - * frame-msw.c: Don't set WS_VISIBLE attribute on first frame. - Call ShowWindow twice in init_frame_3 to get round runemacs - weirdness. - -1998-06-27 Hrvoje Niksic - - * scrollbar.c (vertical_scrollbar_changed_in_window): Ditto. - - * winslots.h: Rename. - - * window.c (specifier_vars_of_window): Renamed - vertical-divider-draggable-p to vertical-divider-always-visible-p, - as suggested by Ben Wing. - (specifier_vars_of_window): Fix docstrings. - -1998-06-22 Michael Sperber [Mr. Preprocessor] - - * unexaix.c: Line number information works correctly again. - -1998-06-22 Olivier Galibert - - * emacs.c (__sti__iflPNGFile_c___): Added. See comment. Cry. - -1998-06-21 Martin Buchholz - - * editfns.c (get_home_directory): ANSIfy. - XEmacs is compilable under C *and* C++. - It's XEmacs, not Xemacs! - -1998-06-19 Jonathan Harris - - * console-msw.h: added a list of fonts to device data. - - * device-msw.c: enumerate list of available fonts in - mswindows_init_device. Free list in mswindows_delete_device. - - * objects-msw.c: Added helper function match_font used by - mswindows_initialize_font_instance and mswindows_list_fonts. - Allow a charset to be specified in a font string, even if - previous fields havn't been specified. - -1998-06-23 Greg Klanderman - - * indent.c (column_at_point): column cache bugfix. - Set last_known_column_point to the buffer position for - which the column was requested, not buffer's point. - - * redisplay.c (decode_mode_spec): for current-column, show - window's point's column, not buffer's point's column. - -1998-06-23 Andy Piper - - * menubar-msw.c (mswindows_handle_wm_command): use - enqueue_misc_user event rather than - mswindows_enqueue_msic_user_event to fix customize problems. Add some - checks that X does. - - * console-msw.h: declare mswindows_enqueue_magic_event. - - * event-msw.c (mswindows_enqueue_magic_event): make global. - -1998-06-24 Hrvoje Niksic - - * line-number.c (LINE_NUMBER_FAR): Reverted to 16384. - (buffer_line_number): Use EMACS_INT_MAX instead of random LOTS. - (add_position_to_cache): Use EMACS_INT instead of int. - -1998-06-21 Olivier Galibert - - * lisp-disunion.h (XMARKBIT): Have XMARKBIT return something - suitable for an int used as a boolean (btw, C sucks.). - -1998-06-18 Andy Piper - - * object-msw.c: remove warnings. - - * device-msw.c: #define wrongly named cygwin structure elements. - - * s/cygwin32.h: define DEMI_BOLD - -1998-06-19 Jonathan Harris - - * redisplay-msw.c: new function mswindows_apply_face_effects. - This is called by output_string and output_cursor to display - underline and strikeout on faces. - -1998-06-19 Jonathan Harris - - * console-msw.h: added a list of fonts to device data. - - * device-msw.c: enumerate list of available fonts in - mswindows_init_device. Free list in mswindows_delete_device. - - * objects-msw.c: Added helper function match_font used by - mswindows_initialize_font_instance and mswindows_list_fonts. - Allow a charset to be specified in a font string, even if - previous fields havn't been specified. - -1998-06-15 Jonathan Harris - - * objects-msw.c: - Removed compilation warnings from mswindows_string_to_color. - mswindows_list_fonts returns a more general bogus font. - New lisp-visible function mswindows-color-list. - -1998-06-19 David Bush - - * editfns.c (Fuser_login_name): Modify to user new function - user_login_name. - (user_login_name): C only function to avoid Lisp object overhead - Returns "unknown" instead of nil in Cygwin environment - - * fileio.c (Fexpand_file_name): Treat "~" and "~user" as - equivalent for current user in Cygwin environment. Use new - function user_login_name to get username. - - * lisp.h: Declare user_login_name - -1998-06-18 Michael Sperber [Mr. Preprocessor] - - * unexaix.c (make_hdr): Fixed bias computations so debugging info - works again. - Some other insignificant nitpicks. - -1998-06-18 Andy Piper - - * toolbar-msw.c (mswindows_output_toolbar): specify ILC_MASK when - creating the image list and make sure he bk color is transparent. - -1998-06-18 Jan Vroonhof - - * event-Xt.c (emacs_Xt_remove_timeout): Also remove timeout from - completed_timeouts. The timer could have expired. - -1998-06-17 Andy Piper - - * console-msw.h: move XEMACS_RECT_WH inside frame - parameters. define macors to access it. - - * frame-msw.c (mswindows_init_frame_1): use new target_rect - parameter to intialise desired sizing. (mswindows_init_frame_2): - enable and size the frame to something sensible when we get - here. (mswindows_set_frame_properites): use new - mswindows_size_frame_internal function and size frame if frame - parameters not just if init is finished - WM_SIZE happens too - early for some specs. (mswindows_size_frame_internal): new - function abstracted from mswindows_set_frame_properties. - (Vmswindows_use_system_frame_size_defaults): - new variable controls whether to allow the system to pick frame - size defaults, defaults to nil. - - * event-msw.c: in WM_SIZE use mswindows_size_frame_internal rather - than duplicated code. - -1998-06-15 Colin Rafferty - - * Makefile.in.in: Made EXTW_LINK expand properly. - -1998-06-12 Martin Buchholz - - * redisplay.c (vars_of_redisplay): default value of - column-number-start-at-one should be NIL! - -1998-06-11 Martin Buchholz - - * casefiddle.c: - (upcase-initials "fooBar") ==> "FooBar" instead of "Foobar" - -1998-06-05 Hrvoje Niksic - - * eldap.c (Fldap_search_internal): Use build_ext_string instead of - build_string to avoid crashes under Mule. - -1998-06-13 Andy Piper - - * ntplay.c (play_sound_data_1): don't delete the sound data until - the next sound is played and the previous one finished. - -1998-06-10 Samuel Mikes - - * fileio.c (directory-sep-char): Escape backslashes. - -1998-06-10 Hrvoje Niksic - - * event-stream.c: Fix docstring reference. - -1998-06-12 Hrvoje Niksic - - * alloc.c (make_float): Remove useless initialization of `next' - field. - (make_pure_float): Ditto. - - * lisp.h (struct Lisp_Float): Rename `next' to `__unused__next'. - -1998-06-08 Kirill M. Katsnelson - - * fileio.c (Fmake_directory_internal): Remove conditionals - on WINDOWSNT when calling mkdir. - - * ntproc.c: Deleted the following unused functions: - register_child, reap_subprocess, sys_wait. - - * nt.c (sys_rename): Ifzeroed this implementation. - Deleted the following unused functions: - sys_access, sys_chdir, sys_chmod, sys_creat, sys_link, sys_mkdir, - sys_mktemp, sys_rmdir, sys_unlink, sys_close, sys_dup, sys_dup2, - sys_read, sys_write. - Merger sys_fopen and sys_open with sysdep.c implementation. - - * sysdep.c: Removed MS-DOS code. - (sys_rename): Deal with Microsoft rename weirdness. - (sys_open): Implemented for Windows. - (sys_fopen): Ditto. - (sys_mkdir): Ditto. - -1998-06-08 Kirill M. Katsnelson - - * buffer.c (complex_vars_of_buffer): Removed %t description from - the docstring. - -1998-06-04 Rick Rankin - - * scrollbar-msw.c: initialize the cbSize element of the - SCROLLINFO struct before calling SetScrollInfo. WinNT seems - to ignore the value of cbSize, but Win95 (and I presume Win98) - appear to want it set to sizeof(SCROLLINFO). - -1998-06-04 Kirill M. Katsnelson - - * event-stream.c: Defined Qcancel_mode_internal. - (syms_of_event_stream): defsymbol'ed it. - - * events.h: Externed it. - - * event-msw.c (mswindows_wnd_proc, WM_CANCELMODE): Added this handler. - -1998-06-04 Oliver Graf - - * frame-x.c (x_cde_destroy_callback): free the data - (cde-start-drag-internal) corrected root position, 21.1 needs this - hardcoded in Button events - (offix-start-drag-internal) corrected root position - -1998-06-03 Kirill M. Katsnelson - - * process-nt.c (signal_cannot_launch): Use signal_simple_error() - instead of error(). - -1998-06-03 Kirill M. Katsnelson - - * dialog-msw.c (button_width): Removed `inline' from the function - declaration. - -1998-06-03 Rick Rankin - - * frame-msw.c: add WS_VISIBLE flag to the first frame created. - Note that adding this flag to subsequent frames causes problems. - -1998-06-03 Gunnar Evermann - - * glyphs-eimage.c (png_instantiate) move 'struct - png_memory_storage tbr' out of nested block to avoid dangling - reference - -1998-06-02 Andy Piper - - * faces.h: - * faces.c: rename 3d-object -> gui-element. add toolbar face which - inherits from gui-element. - - * glyphs-msw.c: use DIBitmaps for xbm bitmaps to be consistent - with existing code, generate masks correctly. - -1998-06-03 P. E. Jareth Hein - - * glyphs-eimage.c: Changed included header for gifs to use - Gifreader instead of giflib. - - * glyphs-x.c: removed the image-related functions that were - moved into glyphs-eimage. - -1998-06-02 David Bush - - * glyphs.c (bitmap_to_lisp_data) Define XFree to be free - if built without X Windows support. - -1998-06-02 Hrvoje Niksic - - * fns.c (Fconcat): Synch docstring with new reality. - -1998-06-03 SL Baur - - * frame.c: Remove reference to msdos.h (which is going away). - Suggested by Hrvoje Niksic and Kirill Katsnelson. - -1998-06-02 P. E. Jareth Hein - - * glyphs-eimage.c (jpeg_instantiate): Fix handling of - grayscale images/ - - -1998-05-30 Kirill M. Katsnelson - - * events.h: Fixed commentary about misc-user scrollbar events. - - * scrollbar-x.c (x_update_vertical_scrollbar_callback): Use frame - object as an event channel, instead of window object. - (x_update_horizontal_scrollbar_callback): Ditto. - -1998-05-29 Andy Piper - - * ntplay.c (play_sound_data_1) new function. convert alloca data - to malloc if necessary. - (play_sound_file): if the file is not in our path then convert to - data and play. - -1998-06-01 SL Baur - - * mule-mcpath.c (mc_chdir): Reverse parameters in call to memcpy. - * msdos.c (Frecent_doskeys): Ditto. - - * unexalpha.c (unexec): Reverse parameters in call to memcpy. - Suggested by Reggie Perry - - * buffer.h: Eliminate size in declaration. - -1998-06-01 Olivier Galibert - - * unexelfsgi.c (unexec): Cleanup n/nn and remove useless kludge. - -1998-06-01 Kirill M. Katsnelson - - * gui.c (gui_item_init): Changed the default value for config member - from Qunbound to Qnil. - -1998-06-01 Greg Klanderman - - * indent.c (vmotion_pixels): Don't #define abs(). - -1998-05-30 Kirill M. Katsnelson - - * s/windowsnt.h: Defined popen and pclose to be _popen and _pclose - respectively. - -1998-05-30 Andy Piper - - * glyphs.h: add xbm declarations. - - * console.h: add xbm_instantiate_method device method. - - * glyphs.c (check_valid_xbm_inline) (xbm_validate) - (bitmap_to_lisp_data) (xbm_mask_file_munging) (xbm_normalize) - (xbm_possible_dest_types): moved here from glyphs-x.c. use - locate_pixmap_file device method and read_bitmap_data_from_file - instead of XmuReadBitmapDataFromFile. - (xbm_instatntiate): make a device method. - - * glyphs-x.c: see glyphs.c changes. (read_bitmap_data_from_file) - new function that just calls XmuReadBitmapDataFromFile. - (x_xbm_instatntiate): device method from xbm_instantiate. - - * glyphs-msw.c (read_bitmap_data) (NextInt) - (read_bitmap_data_from_file): new functions copied from Xmu - sources. - (xbm_create_bitmap_from_data) from Ben convert - inline data to an mswindows bitmap. - (init_image_instance_from_xbm_inline) (xbm_instantiate_1) - (mswindows_xbm_instantiate): mswindows-ized versions of the X - functions. - -1998-05-30 Kirill M. Katsnelson - - * window.c (specifier_vars_of_window): Renamed `has_modeline-p' to - `modeline-visible-p'. - Declared specifier lisp variables at the beginning oh the file - as static. - - * procimpl.h (struct process_methods): Changed semantics of - create_process method so it accepts lisp strings instead of - char pointers. - - * process.c (Fstart_process_internal): Moved building of - unix style argv from here to process-unix.c, ... - - * process-unix.c (unix_create_process): ... right here. - - * process-nt.c (nt_create_process): Changed this function to - support new semantics, so avoided a GC problem. - - * events.c (Fmake_event): Document misc-user events properties. - (Fmake_event): Do not allow arbitrary objects for channel property - of misc-user events. - (Fmake_event): Change misc-user event validation: it is function - which is required, not button. - - * event-msw.c (mswindows_user_event_p): Recognize misc user events as - user events. - (mswindows_enqueue_misc_user_event): Added function. - (mswindows_bump_queue): Removed function. - (mswindows_enqueue_magic_event): Support NULL HWND parameter. - (mswindows_wnd_proc, WM_CLOSE): Use mswindows_enqueue_misc_user_event(). - (mswindows_wnd_proc, WM_EXITSIZEMOVE): Ditto. - (emacs_mswindows_handle_magic_event): Handle XM_BUMPQUEUE, by doing - really nothing, which is my personal favorite thing. - - * console-msw.h: Removed prototype for mswindows_bump_queue(). - Added prototype for mswindows_enqueue_misc_user_event(). - - * menubar-msw.c (mswindows_handle_wm_command): Use - mswindows_enqueue_misc_user_event(). - - * toolbar-msw.c (mswindows_handle_toolbar_wm_command): Ditto. - - * dialog-msw.c (dialog_proc): Ditto. - - * scrollbar-msw.c (mswindows_handle_scrollbar_event): Ditto. - (mswindows_handle_scrollbar_event): Use frame, not window, for misc - user events channel. - -1998-05-29 Greg Klanderman - - * window.c (Fwindow_displayed_text_pixel_height): was relying on - incorrect semantics of vmotion_pixels which has been fixed. don't - use it anymore as it can't easily be used. - - * indent.c (vmotion_pixels): fix off by one bug moving up. also - the motion was reported incorrectly if you tried to go past end of - buffer. - -1998-05-30 Kirill M. Katsnelson - - * toolbar.h: Removed misleading commentary, as Martin suggested. - -1998-05-30 Kirill M. Katsnelson - - * lisp.h: Extern Qactivate_menubar_hook. - - * menubar-msw.c (unsafe_handle_wm_initmenu_1): Pass correct value to - run_hook (). - -1998-05-29 Andy Piper - - * glyphs-msw.c: use BPLINE macro. - - * select-msw.c (mswindows-selection-exists-p) - (mswindows-delete-selection): doc string fixes. - - * toolbar-msw.c (mswindows_output_toolbar): make disabled buttons - unpressable. warning elimination. - -1998-05-28 Martin Buchholz - - * alloc.c (dbg_constants): - * dbxrc: - * gdbinit: - Remove toolbar_data debugging code, since that lrecord has - also been removed. - -Wed May 27, 1998 Darryl Okahata - - * alloc.c: zap cached value of (user-home-directory), so that - it's not undumped. - - * buffer.c: From init_buffer(), separated out code that - determined the initial directory for the *scratch* buffer, and - put them into a function called "init_initial_directory()". - The initial directory is now available as a global "char *" - called initial_directory. - - * buffer.h: Added extern entries for initial_directory[] and - init_initial_directory(). - - * editfns.c: added new elisp function "user-home-directory", - which basically returns getenv("HOME"), but attempts to use - other values if $HOME isn't set.This may have to be tweaked in - the future as, under Unix, "/" is used if $HOME isn't set (this - probably should be set to the current directory). To support - this, a new C function, "get_home_directory()", now exists, - which returns the "home directory", as a "char *" string. - - * emacs.c: Rearrange NT initialization order so that - environment/registry variables will be properly entered into - Vprocess_enviroment. - - * fileio.c: replaced egetenv("HOME") with calls to the new - get_home_directory(). - - * lisp.h: Added function prototypes for uncache_home_directory() - and get_home_directory(), along with lisp prototypes for - Fuser_home_directory() and friends. - - * nt.c: replaced getenv("HOME") with calls to the new - get_home_directory(). - - * sysfile.h: for WINDOWSNT, #include , to suppress - warnings about getcwd(), etc. not having prototypes. - -1998-05-28 Kirill M. Katsnelson - - * process-nt.c (send_signal): Emulate SIGHUP. - (validate_signal_number): Ditto. - - * event-msw.c (mswindows_wnd_proc, WM_KEYDOWN): Unconditionally - remove MOD_SHIFT from ASCII characters. - (mswindows_wnd_proc, WM_KEYDOWN): Do not activate the menubar when - F10 is pressed. - -1998-05-24 Oliver Graf - - * frame-x.c (cde-start-drag-internal): added filename and multi- - data transfers - (x_cde_convert_callback) dito - -1998-05-26 Oliver Graf - - * frame-x.c: include event-mod.h also with CDE - (x_cde_convert_callback) made the thing working - (cde-start-drag-internal) also debugging - -1998-05-25 Hans Guenter Weigand - - * m/sparc.h: - * getloadavg.c: - * malloc.c: - * unexec.c: - * mem-limits.h: - - add __OpenBSD__ where __NetBSD__ was found. - - TODO: replace platform-specific conditional compilation by - feature tests in configure.in. - -1998-05-15 Greg Klanderman - - * window.c (Fwindow_displayed_text_pixel_height): New function. - (syms_of_window): DEFSUBR it. - - * indent.c (Fvertical_motion_pixels): New function - request - movement in pixels. - (vmotion_pixels): helper. - (syms_of_indent): DEFSUBR. - * lisp.h: declaration for vmotion_pixels(). - - * indent.c (Fvertical_motion): Add optional third argument PIXELS, - to request returning motion in pixels. - (Fvertical_motion_pixels): Remove, functionality merged into - Fvertical_motion. - * window.c (window_scroll): call Fvertical_motion with 3 arguments. - (Fmove_to_window_line): ditto. - * lisp.h: Change declaration for Fvertical_motion. - - * window.c: rename window-text-pixel-{height,width,edges} to - window-text-area-pixel-*. - -1998-05-26 Gunnar Evermann - - * tooltalk.c (vars_of_tooltalk) added staticpro for - Tooltalk_Message_plist_str and Tooltalk_Pattern_plist_str - -1998-05-27 Andy Piper - - * faces.c: create a new 3d_object_face, make modeline and - vertical_divider faces fallback to this rather than the default. - -1998-05-21 Andy Piper - - * s/cygwin32.h: define charsets for cygwin. - -1998-05-25 Andy Piper - - * toolbar-msw.c (mswindows_output_toolbar): fix up button sizes - and coordinates. resize bitmaps if we have already settled on a - different size. - - * glyphs-msw.c (xpm_to_eimage): add ';' for mswindows compiler. - -1998-05-25 Hrvoje Niksic - - * toolbar-msw.c (mswindows_handle_toolbar_wm_command): Ditto. - - * menubar-msw.c (mswindows_handle_wm_command): Ditto. - - * gui.h: Ditto. - - * gui-x.c (popup_selection_callback): Ditto. - - * dialog-msw.c (dialog_proc): get_callback -> get_gui_callback. - - * gui.c (get_callback): Renamed to get_gui_callback. - -1998-05-17 Martin Buchholz - - * glyphs.h: order rearrangement. - - * device-tty.c (tty_asynch_device_change): Warning suppression. - * device-x.c (x_device_system_metrics): Warning suppression. - Make Doc strings consistent with coding standards. - -1998-05-24 Martin Buchholz - - * general.c: multiple definition of `Qicon'. general.c seems - like a good home for Qicon. - -1998-05-20 Kirill M. Katsnelson - - * This patch is to fix compilation warnings under Windows. - - * s/windowsnt.h: Encapsulate getpid with sys_getpid. - Added prototypes for FSF inherited functions, with which XEmacs is - sprinkled thoroughly. - Removed some #if 0 code. Bracketed some more definitions, probably - related to Visual C versions prior to 4 (we do not support them). - - * sysfloat.h (logb): Finally, get logb() prototyped. - - * sysfile.h: Added Windows specific includes. - Removed old Windows specific code bracketed with #if 0. - - * sysdep.h: Added prototype for xrealpath(). - - * sysdep.c (sys_getpid): Added function, to support '95 negative pids. - - * symsinit.h: Added prototypes for syms_of_dired_mswindows, - vars_of_dired_mswindows and init_ntproc (Grrr). - - * realpath.c: Added Windows specific include files. - (xrealpath): Conditionalized declaration of some auto variables on - S_IFLNK, to avoid warnings. - - * ntproc.c: Disabled some compiler warnings. This file is going to - die, so I have not cleaned it up much. - (set_process_dir): Const parameter. - (Fwin32_short_file_name): Down CHECK_* macros to one argument. - (Fwin32_long_file_name): Ditto. - (Fwin32_set_process_priority): Ditto. Why didn't I remove these - three functions? - - * nt.h: Added prototypes for set_process_dir and convert_time. - - * nt.c: More include files. - (getpwnam): Consted char* argument. - (get_emacs_configuration): Const return value. - (opendir): Const argument. - (stat): Casted converstion long->short. - (stat): Removed ad hoc and questionable support for non-MSC compile. - (sys_pipe): Removed unused auto variable. - (_sys_read_ahead): Removed calls to DebPrint. - (sys_read): Ditto, in 2 places. - (term_ntproc): Added unused int parameter to signal handler, to - avoid a warning when compiling a call to signal(). - (msw_sigset): Properly return old signandler or NULL instead of void. - - * floatfns.c (Flogb): Casted arguments to unary minus to signed. - - * gmalloc.c (morecore): Ditto. - (_free_internal): Ditto. - - * lread.c (parse_integer): Ditto. - - * dired-msw.c: Added several include files. - - * cmdloop.c (Fcommand_loop_1): Added Microsoft C to the Big List - of Compilers to Shut Up. - - * callproc.c: Added #includes to suppress warnings under Windows. - (init_callproc): Removed #if0'ed code and unused variables. - -1998-05-25 Andy Piper - - * device-msw.c (mswindows_device_system_metrics): do planes in a - way consistent with X. - - * glyphs-msw.c (mswindows_initialize_image_instance_mask): don't - use SetPixel, use DIBits functions. - (xpm_to_eimage): frob colors more closely like xpm deos. - - * toolbar-msw.c: only resize bitmaps when shrinking. Adjust look - to be closer to X version. - - * event-msw.c: use tooltip string directly. - - * redisplay-msw.c: reinstate Kirill's bg pixmap change. - - * objects-msw.c: frob rgb colors that only Kyle uses. - - * dialog-msw.c (button_width): INLINE -> inline. - -1998-05-23 SL Baur - - * getloadavg.c (getloadavg): Fix typo. - -1998-05-23 Kirill M. Katsnelson - - * objects-msw.c (mswindows_initialize_font_instance): Added support - for font character sets. - Replaced 'XXX' with '####' in comments throughout the file. - -1998-05-23 Kirill M. Katsnelson - - * emacs.c (main_1): Added calls to vars_of_dialog_mswindows() and - console_type_create_dialog_mswindows(), to initialize Windows dialog - support. - - * symsinit.h: Prototyped the above functions. - - * dialog-x.c (x_popup_dialog_box): Moved dialog descriptor consistency - checks to dialog.c... - - * dialog.c (Fpopup_dialog_box): ...right here. Added more checks: a - device must support dialog boxes, and the descriptor must supply at - least one button. - - * dialog-msw.c: New file, dialogs for Windows. - -1998-05-21 Oscar Figueiredo - - * eldap.c (ldap_search_unwind): Return Qnil instead of nothing - (Fldap_search_internal): Removed unused variable `err' - - * eldap.h: Moved Lisp_LDAP declaration here instead of using a - forward declaration - -1998-05-17 Martin Buchholz - - * eldap.h: eldap.[ch] should never be used unless HAVE_LDAP is - defined. Therefore there is no need to handle the case when - HAVE_LDAP is undefined. Similarily, there is no reason to have - any code wrapped within `#ifdef emacs', since this code is only - useful within an emacs. This simplifies the code significantly. - - * inline.c: Include eldap.h only if HAVE_LDAP. - * inline.c: Don't bother including TT_C_H_PATH, since tooltalk.h - already does that. - -1998-05-21 Kirill M. Katsnelson - - * unexnt.c (copy_executable_and_dump_data_section): Suppress - printing dump stats when building without DEBUG_XEMACS. - (dump_bss_and_heap): Ditto. - -1998-05-21 Andy Piper - - * gnuclient.c: don't suppress window system if there is no display - and we are running under mswindows. send 'mswindows device type if - we are in this situation. - -1998-05-20 Andy Piper - - * general.c: - * lisp.h: Qbitmap, Qcursor, Qicon moved here from glyphs-msw.c. - - * glyphs-msw.c: change cursor imgae type name to resource. Fix - some nits. - -1998-05-20 Kirill M. Katsnelson - - * EmacsFrame.c (Xt_StringToScrollBarPlacement): Added support for - {top,bottom}-{left,right} values in addition to - {top,bottom}_{left,right}. - -1998-05-18 Hrvoje Niksic - - * fileio.c (Fmake_temp_name): Remove unreached code. - - * process-nt.c (validate_signal_number): Use - signal_simple_error(). - -1998-05-19 Martin Buchholz - - * unexhp9k800.c: - * sound.c (vars_of_sound): - * sysdep.c (reset_sigio_on_device): - * window.c (window_bottom_gutter_height): - unexhp9k800.c:258: warning: implicit declaration of function - `calculate_checksum' - sound.c:604: warning: implicit declaration of function `vars_of_hpplay' - sysdep.c:1012: warning: unused variable `owner' - window.c:993: warning: `window_right_toolbar_width' defined but not used - -1998-05-19 Andy Piper - - * glyphs-msw.c (mswindows_create_resized_mask) - (mswindows_create_resized_bitmap): new funnctions split out from - mswindows_resize_dibitmap_instance. - - * glyphs-msw.h: declare new resize functions. - - * toolbar-msw.c (mswindows_output_toolbar): use new bitmap resize - functions so that the original bitmaps are preserved. - - * sheap.c: fixup static heap exhausted error to avoid FAQs. - - * redisplay-msw.c (mswindows_output_blank): fixup brush from bg - color if we are trying to output 0 depth bg pixmap. - - * scrollbar-msw.c: warning elimination. - -1998-05-18 Martin Buchholz - - * frame-x.c (x_update_frame_external_traits): Start preprocessor - directives in column 1. - - * search.c (skip_chars): Avoid using xzero with arrays, since some - compilers get confused by the construct &array. - -1998-05-18 Kirill M. Katsnelson - - * objects-msw.h: - * objects-msw.c: Changed the charset value for a new font from - "don't care" to "ansi". - - * glyphs-msw.c (convert_EImage_to_DIBitmap): Warnings fix. - -1998-05-18 Kirill M. Katsnelson - - * event-msw.c (mswindows_wnd_proc, WM_KEYDOWN): Do not clear shift - modifier on control chars. - Use IsCharAlpha() instead of isaplha(). - -1998-05-19 Kazuyuki IENAGA - - * s/freebsd.h: FreeBSD 2.2.6 now supports setlocale(LC_ALL, ""). - -1998-05-18 Kirill M. Katsnelson - - * objects-msw.c (mswindows_initialize_font_instance): Use ANSI - charset when creating font. - (mswindows_initialize_color_instance): Do not create brush along - with a color. - (mswindows_finalize_color_instance): Do not delete it then. - - * objects-msw.h (struct mswindows_color_instance_data): Removed - brush slot, and corresponding accessor macro. - -1998-05-18 Kirill M. Katsnelson - - * toolbar.c: Removed toolbar_data lrecord implementation. - (mark_frame_toolbar_buttons_dirty): Replase usage of toolbar_data - with toolbar_buttons (via FRAME_TOOLBAR_BUTTONS). - (compute_frame_toolbar_buttons): Ditto. - (CHECK_TOOLBAR): Ditto. - (set_frame_toolbar): Removed allocation of toolbar_data lrecord. - (update_frame_toolbars): Do not check for changed buffer - here. Toolbar information is provided by cached specs in - windows. The check for buffer is eliminated becuase toolbars are - marked changed in set_frame_selected_window() in frame.c - Added check for changed toolbars geometry. - (compute_frame_toolbars_data): Removed unused second parameter; - Adjusted callers of this static function throughout the file. - (init_frame_toolbars): Initialize current_toolbar_size. - (update_frame_toolbars): Use DEVICE_SUPPORTS_TOOLBARS_P instead of - what is its current expansion, for clarity. - (init_frame_toolbars): Ditto. - (init_device_toolbars): Ditto. - (init_global_toolbars): Ditto. - - * toolbar.h: Removed definition of toolbar_data lrecord. - Added accessor macros FRAME_TOOLBAR_BUTTONS and - FRAME_CURRENT_TOOLBAR_SIZE. - Added macro DEVICE_SUPPORTS_TOOLBARS_P. - - * toolbar-x.c (x_output_toolbar): The same change as in - toolbar-msw.c - (x_output_toolbar): Ditto. - (x_redraw_exposed_toolbar): Ditto. - - * toolbar-msw.c (mswindows_output_toolbar): Retrieve current - buttons from toolbar_buttons using FRAME_TOOLBAR_BUTTONS macro. - (mswindows_output_toolbar): Ditto. - (mswindows_output_toolbar): Ditto. - - * frame.c (mark_frame): Removed marking of arrays, according to - frameslots.h change. - (nuke_all_frame_slots): Ditto. - (set_frame_selected_window): Mark toolbars changed when - last_nonminibuf_window changes. - - * frame.h (struct frame): Moved some slots to frameslots.h. - Added current_toolbar_size array. - Changed references from toolbar_data to toolbar_buttons in macros - FRAME_RAW_THEORETICAL_TOOLBAR_VISIBLE, - FRAME_RAW_THEORETICAL_TOOLBAR_SIZE and - FRAME_RAW_THEORETICAL_TOOLBAR_BORDER_WIDTH. - - * frameslots.h: Added macro MARKED_SLOT_ARRAY a la winslots.h - Moved arrays of lisp objects here from frame.h: toolbar_size, - toolbar_visible_p, toolbar_border_width. - Removed toolbar_data slot and added toolbar_buttons. - -1998-05-17 Kirill M. Katsnelson - - * symsinit.h: Externed syms_of_process_nt() - - * emacs.c (main_1): Call syms_of_process_nt() - - * process-nt.c: Quote process arguments by a call to Lisp function - `nt-quote-process-args'. - (syms_of_process_nt): New function. - (nt_send_process): Flush data stream after each write, to avoid - leaving buffered data. - (nt_send_process): When blocked on process output, wait for - process to slurp more for progressively increasing time intervals. - -1998-05-17 Martin Buchholz - - * window.c (have_undivided_common_edge): Make file-local function - static. - (map_windows): Return 0 if all map functions successful. - Fix typos. - - * winslots.h: Use unlikely names for local variables in macros to - avoid shadowing warnings. - -1998-05-17 Andy Piper - - * toolbar-msw.c (mswindows_output_toolbar): hash on toolbar width - so that we re-output if the toolbar size has changed. - -1998-05-17 Michael Sperber [Mr. Preprocessor] - - * s/aix4-2.h (ALIGN_DATA_RELOC): Undefined to support new unexaix.c. - - * s/aix3-1.h (ALIGN_DATA_RELOC): Defined to support new unexaix.c. - - * unexaix.c: Massive cleanup and support of AIX 4.2 (and hopefully - greater). - -1998-05-16 Kirill M. Katsnelson - - * glyphs-msw.c: Defined OEMRESOURCE before including windows.h to - get bitmap manifest constants defined. - - * console-msw.h: Include system files in angle brackets, not in - quotes. - - * window.c (specifier_vars_of_window): Fixed a typo in - `vertical-divider-line-width' docstirng. - -1998-05-16 Olivier Galibert - - * line-number.c (delete_invalidate_line_number_cache): Use an - EMACS_INT. - (buffer_line_number): Remove dangerous, plain wrong when using - 64bits emacs ints, cast. - - * insdel.c (buffer_delete_range): Use an EMACS_INT. - - * cmds.c (Fforward_line): Use EMACS_INTs. - - * search.c (bi_scan_buffer): Change to use EMACS_INTs. - (scan_buffer): Ditto. - (bi_find_next_newline_no_quit): Remove useless cast. - (find_next_newline_no_quit): Ditto. - (find_next_newline): Ditto. - (find_before_next_newline): Use an EMACS_INT. - - * lisp.h: Change scan_buffer to pass EMACS_INTs. - -1998-05-16 Hrvoje Niksic - - * menubar-msw.c (mswindows_handle_wm_command): Ditto. - - * toolbar-msw.c (mswindows_handle_toolbar_wm_command): Ditto. - - * gui-x.c (popup_selection_callback): Use it. - - * gui.h (get_callback): Declare it. - - * gui.c (get_callback): New function. - -1998-05-15 SL Baur - - * window.c (have_undivided_common_edge): Guard scrollbar specific - stuff. - (window_needs_vertical_divider_1): Ditto. - -1998-05-16 Hrvoje Niksic - - * emacs.c (decode_path): Eliminate compiler warning. - (Fdecode_path): Renamed to Fsplit_path. - (Fsplit_string_by_char): New function. - -1998-05-14 Damon Lipparelli - - * winslots.h: close comment - -1998-05-16 Kirill M. Katsnelson - - * callproc.c: Removed declared and unused variable Qbuffer_file_type. - - * bufslots.h: Removed buffer_file_type slot. - - * buffer.c (complex_vars_of_buffer): Removed buffer_file_type from - buffer local flags. - (complex_vars_of_buffer): Removed buffer-file-type variable and - its default reference. - -1998-05-15 Kirill M. Katsnelson - - * faces.c (complex_vars_of_faces): Defined - Vvertical_divider_face. - (vars_of_faces): Staticpro it. - - * faces.h: Externed Vvertical_divider_face. - - * redisplay-x.c (x_output_vertical_divider): Use - Vvertical_divider_face to draw the divider instead of modeline - face. - - * redisplay-msw.c (mswindows_output_vertical_divider): Draw - divider face using Vvertical_divider_face background. - Fix drawing spacing gaps around the divider. - -1998-05-14 Didier Verna - - * redisplay-x.c (x_output_vertical_divider): removed hard-wired - values for the vertical divider line width and spacing. Use the - cached values from the window structure instead. - (x_divider_width): ditto. - - * window.c (specifier_vars_of_window): new specifiers: - vertical-divier -line-width and -spacing. - (vertical_divider_global_width_changed): formerly known as - vertical_divider_shadow_thickness_changed. - - * winslots.h: new slots: vertical_specifier _line_width and - _spacing. Plus corrected a comment typo. - -1998-05-15 Kirill M. Katsnelson - - * window.h: Declared window_divider_width(). - - * console-stream.c (stream_divider_width): Removed method. - (console_type_create_stream): And declaration for it. - - * redisplay.c (pixel_to_glyph_translation): Use - window_divider_width() instead of divider_width redisplay method. - (pixel_to_glyph_translation): Fix top divider edge calculation - when scrollbar is on top. - - * window.c (window_divider_width): New function, an outphaser for - divider_width redisplay method. - (window_right_gutter_width): Use it. - (specifier_vars_of_window): For vertical-divider-{spacing,line-width} - specifiers, set fallback values differently on TTYs, and document - the behavior of these on TTYs in the docstrings. - - * scrollbar.c (update_scrollbar_instance): Use - window_divider_width() instead of divider_width redisplay method. - - * console.h (struct console_methods): Removed divider_width_method. - - * redisplay-tty.c (tty_divider_width): Removed device method. - (console_type_create_redisplay_tty): Removed definition for it. - (tty_output_vertical_divider): Respect the value returned by - window_divider_width thus divider line width specification. - - * redisplay-msw.c (mswindows_divider_width): Removed device method. - (console_type_create_redisplay_mswindows): Removed definition for it. - (mswinodws_output_vertical_divider): Respect the value returned by - window_divider_width thus divider line width specification. - -1998-05-15 Andy Piper - - * toolbar-msw.c: guess toolbar frame size a bit more accurately. - -1998-05-15 Andy Piper - - * glyphs-msw.c: resource loading implementation. - (cursor_normalize): new function. - (cursor_validate): ditto. - (cursor_instantiate): ditto. - (cursor_name_to_resource): ditto. - (cursor_possible_dest_types): ditto. - (check_valid_symbol): ditto. - (check_valid_string_or_int): ditto. - -1998-05-14 Martin Buchholz - - * sysdep.c (tty_init_sys_modes_on_device): Treat VSUSP just like - VINTR and VQUIT. - - * process-unix.c (process_signal_char): Use VSUSP instead of - non-standard VSWTCH. Always prefer VSUSP to VSWTCH. - -1998-05-14 Kirill M. Katsnelson - - * specifier.c (specifier_instance): Change locale precedence of - instantiation so window locale has higher priority than buffer - locale. - (Fspecifier_instance): Reflect this in docstring. - (Fadd_spec_list_to_specifier): Ditto. - (Fadd_spec_to_specifier): Ditto. - (Fremove_specifier): Ditto. - -1998-05-15 Kirill M. Katsnelson - - ** Dialog separation into a device method from Andy Piper - - * emacs.c (main_1): Call console_type_create_dialog_x(). - - * dialog-x.c (x_popup_dialog_box): Old Fpopup_dialog_box converted - into this device method. - (console_type_create_dialog_x): New function. - - * dialog.c (Fpopup_dialog_box): New function. - (syms_of_dialog): Defsubr it. - - * console.h (struct console_methods): Declared - popup_dialog_box_method(). - - * symsinit.h: Defined console_type_create_dialog_{x,mswindows} - -1998-05-14 Oliver Graf - - * dragdrop.c (vars_of_dragdrop): dragdrop-protocols created - * frame-x.c (x_cde_transfer_callback): checked for merge errors - -1998-05-13 Oliver Graf - - * dragdrop.c (vars_of_dragdrop): provide dragdrop-api - -1998-05-15 Kirill M. Katsnelson - - * console.h (device_metrics): Removed dbcs, input-method-editor - and right-to-left metrics. - - * device.c (Fdevice_system_metric): Ditto. - (Fdevice_system_metrics): Ditto. - (syms_of_device): Ditto. - (Fdevice_system_metric): Swapped DEVICE and METRIC parameters back - again. - -1998-05-14 Hrvoje Niksic - - * line-number.h (mark_line_number_cache): Remove unused - declaration. - - * line-number.c (LINE_NUMBER_FAR): Increase to 32768. - (get_nearest_line_number): Simplify. - (add_position_to_cache): Make the old marker point nowhere. - -1998-05-14 Kirill M. Katsnelson - - ** Renamed window-divider-map => vertical-divider-map - and event-over-divider-p => event-over-vertical-divider-p, - in the following files/functions: - * events.h: - * events.c (Fevent_over_divider_p): - * keymap.c (get_relevant_keymaps): - (vars_of_keymap): - - * redisplay.h (OVER_V_DIVIDER): Renamed so from OVER_DIVIDER. - - * redisplay.c (pixel_to_glyph_translation): Use OVER_V_DIVIDER. - -1998-05-14 Kirill M. Katsnelson - - * window.c (vertical_divider_changed_in_window): Renamed so. - (specifier_vars_of_window): Defined Vvertical_divider_draggable_p. - (window_needs_vertical_divider_1): Decide whether we need it based - on the value of the above specifier. If separators are unwanted, - put them only if there's no scrollbar between this window and its - right neighbor. - (have_undivided_common_edge): New function, helper for the above. - (window_needs_vertical_divider): Return either a cached value, - or clauclate and cache one. - (invalidate_vertical_divider_cache_in_window): Implemented. - (map_windows): Changed return type to int, return the value from - MAPFUN. - - * window.h: Prototype invalidate_vertical_divider_cache_in_window. - (struct window): Added need_vertical_divider_p and - need_vertical_divider_valid_p. - - * winslots.h: Added vertical_divider_draggable_p slot. - - * scrollbar.c (vertical_scrollbar_changed_in_window): Implemented. - (specifier_vars_of_scrollbar): Used it in all vertical specifiers. - - * frame.c (invalidate_vertical_divider_cache_in_frame): New function. - - * frame.h (MARK_FRAME_WINDOWS_STRUCTURE_CHANGED): Call - invalidate_vertical_divider_cache_in_frame(). - Prototype it. - -1998-05-14 Andy Piper - - * toolbar-msw.c: provide correct parameters to TB_SETROWS. - - * glyphs-msw.c (mswindows_initialize_image_instance_mask): size - masks correctly and don't select 0. - -1998-05-14 Kirill M. Katsnelson - - * winslots.h: New file, declaration of some struct window and - struct saved_window members. - - * window.h (struct window): Include it, with required preprocessor - magic. - - * window.c (mark_window): Ditto. - (allocate_window): Ditto. - (struct saved_window): Ditto. - (mark_window_config): Ditto. - (saved_window_equal): Ditto. - (Fset_window_configuration): Ditto. - -1998-05-14 Kirill M. Katsnelson - - * redisplay-msw.c (mswindows_output_vertical_divider): Syntax fix. - -1998-05-12 Didier Verna - - * redisplay-x.c (x_output_vertical_divider): draw shadows around - the divider line. The shadow thickness is currently - hard-wired. This will probably be turned into a specifier soon. - -1998-05-12 Didier Verna - - * console.h (struct console_methods): the divider_width console - method now requires a struct window * argument. - - * redisplay-x.c (x_divider_width): ditto. Plus remove - X_DIVIDER_WIDTH, X_DIVIDER_SHADOW_THICKNESS. - (x_output_vertical_divider): give a depressed look when the shadow - thickness is negative. - - * console-stream.c (stream_divider_width): pass a struct window * - argument. - - * redisplay-tty.c (tty_divider_width): ditto. - - * window.c (window_right_gutter_width): totdi. - - * redisplay.c (generate_modeline): ittod. - - * scrollbar.c (update_scrollbar_instance): ttido. - - * redisplay-msw.c (mswindows_divider_width): ottid. - WARNING: this enables to compile, but the feature is not functional. - - * window.h (struct window): new field - vertical_divider_shadow_thickness. - - * window.c (specifier_vars_of_window): new specifier - vertical-divider-shadow-thickness. - (vertical_divider_shadow_thickness_changed): new function to - inform redisplay that the window has changed. - (mark_window): handle new field vertical_divider_shadow_thickness - from struct window. - (allocate_window): ditto. - (saved_window_equal): toddi. - (Fset_window_configuration): totid. - (save_window_save): ttdio. - (struct saved_window): new field vertical_divider_shadow_thickness. - -1998-05-14 Kirill M. Katsnelson - - * device-msw.c (mswindows_device_system_metrics): Support a deluge - of metrics. - -1998-05-12 Oliver Graf - - * frame-x.c (x_cde_transfer_callback): fixed for the new protocol - * event-Xt.c (x_event_to_emacs_event): C++ compability - -1998-05-14 Hrvoje Niksic - - * emacs.c (Fdecode_path): Default SEPCHAR to value of - path-separator. - -1998-05-14 Hrvoje Niksic - - * emacs.c (vars_of_emacs): Do it here; change the meaning of - Vpath_separator. - - * fileio.c (vars_of_fileio): Don't define Vpath_separator here. - -1998-05-14 Hrvoje Niksic - - * emacs.c (decode_path_1): New function. - (decode_path): Use it. - (Fdecode_path): Renamed from Fdecode_path_internal; use - decode_path_1. - -1998-05-12 Hrvoje Niksic - - * macros.c (Fzap_last_kbd_macro_event): New function. - (Fend_kbd_macro): Remove REMOVE_LAST kludge. - -1998-05-10 Andy Piper - - * redisplay-msw.c (mswindows_output_dibitmap_region): make sure - multiple bitmaps are output vertically as well as horizontally. - * (mswindows_output_dibitmap): don't cope with bitmap boundaries - crossing lines this is handled by - mswindows_output_dibitmap_region. - -1998-05-12 Martin Buchholz - - * inline.c: Include eldap.h - - * menubar-x.c (x_update_frame_menubar_internal): - Remove: unused variable `container' - -1998-05-11 Martin Buchholz - - * s/aix4.h: Allow AIX 4.3 XEmacs to compile cleanly. - Unfortunately, the resulting temacs still cannot dump. - - * symbols.c (symbol_is_constant): - (verify_ok_for_buffer_local): - -Wswitch Warning suppression - add default case to switches. - - * redisplay.c (decode_mode_spec): Remove unused variables, - Replace Fcoding_system_property (codesys, Qmnemonic) with - XCODING_SYSTEM_MNEMONIC (codesys); - Fcoding_system_property is for users. - - * buffer.c: - * fileio.c: - * lread.c: - * xselect.c: - Change empty docstrings into no doc strings at all. - Fix bogus FSF-format docstrings. - - * extents.c: - Standardize docstrings. - - * floatfns.c: - Explain problems with matherr. - - * glyphs.c: make DEFUNs etags-readable, i.e. single-line - - * syssignal.h: - if BROKEN_SIGIO, then SIGIO wants to be undefined. - if SIGIO and not SIGPOLL, SIGPOLL wants to be SIGIO.\ - Fix the weird resultant interaction (causes windows problems) - - * gdbinit: - * dbxrc: - Take new EMACSBOOTSTRAPLOADPATH into account. - Update documentation strings - - * Makefile.in.in: - - Adjust for luser's CDPATH being set to something weird. - - Take into account bash 2.02's tendency to print the cwd when - using CDPATH. Always use `cd ./foo' instead of `cd foo'. - - fix the run-temacs target to use $(DUMPENV) - - fix the run-puremacs target to use $(DUMPENV) - - fix the `depend' target to properly $(RM) the right files - - Generate a better TAGS file for XEmacs' lisp code using - hand-crafted regexps. - - Use standard coding conventions for modules/Makefile.in - -1998-05-12 Didier Verna - - * redisplay.c: removed the scrolling modeline code that didn't - make it for 21.0. To be continued ... - -1998-05-13 Michael Sperber [Mr. Preprocessor] - - * emacs.c (Fdecode_path_internal): Removed bogus handling of nil - and empty string inputs. - -1998-05-12 Hrvoje Niksic - - * redisplay-x.c (x_output_vertical_divider): Fixed typo. - -1998-05-10 Oliver Graf - - * event-stream.c (enqueue_misc_user_event_pos): created - * lisp.h (enqueue_misc_user_event_pos): prototype added - * frame-x.c (x_cde_transfer_callback): debug code plus API changes - * emacs.c: call vars_of_dragdrop - * dragdrop.c (vars_of_dragdrop): provide dragdrop - -1998-05-11 Oliver Graf - - * frame-x.c (x_cde_transfer_callback): return at correct pos - * event-Xt.c (x_event_to_emacs_event): changed format of drop - object for MIME (see comment in dragdrop.c) - * dragdrop.c: API change documented in comment - removed provide of dragdrop [is provided by dragdrop.el] - -1998-05-12 Kirill M. Katsnelson - - * window.c (window_needs_vertical_divider): Enable vertical - dividers for every non-rightmost window. - (window_left_gutter_width): Left gutter consists of mythical - toolbar and a virtual scrollbar. - (window_right_gutter_width): The right one may have a divider - also. - - * scrollbar.c (update_scrollbar_instance): Position vertical - scrollbar left to divider if the latter present. - - * redisplay.h: Declared OVER_DIVIER constant. - - * redisplay.c (pixel_to_glyph_translation): Handle OVER_DIVIDER - case. - - * redisplay-x.c (x_output_vertical_divider): Output divider along - the right side of the window, down to window bottom. Swapped - foreground and background colors so it is visible by default. - - * redisplay-tty.c (tty_output_vertical_divider): Uncondiionally - stick the divider to the right window side. - - * redisplay-msw.c (mswindows_redisplay_deadbox_maybe): Fixed - deadbox painting. - (mswindows_divider_width): Ask system for user preferred value. - (mswindows_output_vertical_divider): Always output the divider on - the right side of a window, down to bottom. - - * keymap.c (get_relevant_keymaps): Route mouse button events which - happened over a window divider through window-divider-map. - (Fkey_binding): Documented that in the docstring. - Defined the variable Vwindow_divider_map. - - * events.c (Fevent_over_divider_p): Added this function. - - * events.h: EXFUNed it. - -1998-05-12 Kirill M. Katsnelson - - * toolbar.c (update_frame_toolbars): Re-layout frame windows if - toolbar geometry is suspected to change. - -1998-05-11 Jonathan Harris - - * src/device-msw.c - * src/event-msw.c - Condition dnd and dde code on HAVE_DRAGNDROP. - -1998-05-11 Hrvoje Niksic - - * events.c (format_event_object): Print space as SPC etc. - -1998-05-11 Hrvoje Niksic - - * print.c (print_internal): In the default case, abort() if - ERROR_CHECK_TYPECHECK. - - * fileio.c (Fmake_temp_name): Doc fix. - -1998-05-10 Hrvoje Niksic - - * xgccache.c (describe_gc_cache): Define only if DEBUG_XEMACS. - - * undo.c (Fprimitive_undo): Fixed typo. - -1998-05-11 Hrvoje Niksic - - * fns.c (concat): Signal error on integer argument. - -1998-05-10 Kirill M. Katsnelson - - * console.h (device_metrics): Prefixed each constatnt with DM_ - - * device.c: (Fdevice_system_metric): Renamed so from plural form - (metrics); Changed parameters order and added DEFAULT parameter; - Unabbreviated some metric constants; Fixed and untabified doc string. - (Fdevice_system_metrics): Added. Returns a plist of all provided - metrics. - - * device-msw.c (mswindows_device_system_metrics): Renamed - device_metrics enum constants. - Return Qunbound instead of Qnil. - - * device-tty.c (tty_device_system_metrics): Ditto. - - * device-x.c (x_device_system_metrics): Ditto. - -1998-05-10 Andy Piper - - * redisplay-msw.c: implement background pixmaps (really!). Make - sure bg color is transparent if we have bg pmaps. - * (mswindows_output_string) (mswindows_clear_region): output bg - pmap if required. - * (mswindows_output_dibitmap_region): new function. - * (mswindows_output_dibitmap): output offset pixmaps, blt masks in - the bg color rather than transparently. - - * toolbar-msw.c: use masks if they exist. - - * glyphs-msw.c: set up masks correctly. - - * event-msw.c: typedef SOCKET if cygwin and not msg select(). + * window.c (Fset_window_configuration): + * sysdep.c (_start): + * input-method-motif.c (res): + * event-Xt.c (Xt_process_to_emacs_event): + Simple compiler warning fixes. + + * bytecode.c (funcall_compiled_function): Use the original + function symbol on the backtrace list in preference to the + compiled_function object in error messages. + +2000-01-13 Andy Piper -1998-05-10 Hrvoje Niksic + * glyphs-x.c (update_widget_face): Make sure we update the widget + background as well as foreground. + +2000-01-13 Andy Piper + + * glyphs.h (struct Lisp_Image_Instance): Move justify and orient + fields to subwindow. + (IMAGE_INSTANCE_SUBWINDOW_JUSTIFY): new macro. + (XIMAGE_INSTANCE_SUBWINDOW_JUSTIFY): ditto. + (IMAGE_INSTANCE_SUBWINDOW_ORIENT): ditto. + (XIMAGE_INSTANCE_SUBWINDOW_ORIENT): ditto. + + * glyphs-widget.c (check_valid_tab_orientation): new function. + (initialize_widget_image_instance): zero orientation and + justification. + (widget_instantiate): pick up orientation. + (tab_control_query_geometry): return appropriate values for + vertical tabs. + + * glyphs-msw.c: (mswindows_tab_control_instantiate): assign + appropriate creation flags for left, right and bottom tabs. + + * s/cygwin32.h: add tab definitions. + +2000-01-12 Kirill 'Big K' Katsnelson + + * glyphs-msw.c (mswindows_unmap_subwindow): Set focus back to the + frame upon hiding a subwindow. + (mswindows_button_instantiate): Changed the push button style to + BS_PUSHBUTTON. + (mswindows_button_instantiate): Removed button BS_NOTIFY + style. + (mswindows_button_instantiate): Removed redundant check for + a disabled gui item. + (mswindows_button_instantiate): Made use of WS_TABSTOP + consistent: "operable" controls (edit, button, tree, scroll) have + this style, "display-only" ones (static, progress gauge) do + not. This style is currently ignored by XEmacs though. Also, + removed the WS_EX_CONTROLPARENT style - it is not for children, + it is for their parents! + (mswindows_edit_field_instantiate): Ditto. + (mswindows_progress_gauge_instantiate): Ditto. + (mswindows_tree_view_instantiate): Ditto. + (mswindows_tab_control_instantiate): Ditto. + (mswindows_scrollbar_instantiate): Ditto. + (mswindows_combo_box_instantiate): Ditto. + (mswindows_widget_instantiate): Added the WS_EX_CONTROLPARENT + style to the "clip" window. + (mswindows_button_instantiate): Removed compilation warning by + equally typing terms of the ?: operator. + +2000-01-12 Didier Verna + + * redisplay.c (generate_fstring_runes): new parameter holding the + last modeline-format extent. + (add_glyph_to_fstring_db_runes): new parameter holding the glyph + extent, fill the glyph block with it. + (generate_fstring_runes): handle these parameters. + (generate_formatted_string_db): ditto. + + * keymap.c (get_relevant_keymaps): retreive the keymaps from the + glyphs'extents in the modeline. + +1999-01-11 Mike Woolley + + * ntheap.c: Reduced the reserved heap space from 1Gb down to + 256Mb, as a workaround for the non-starting problem many people + have experienced. + +2000-01-06 Yoshiki Hayashi + + * console-tty.c (Fset_console_tty_output_coding_system): + Force redrawing tty frame. + +2000-01-10 Didier Verna + + * redisplay.c (generate_fstring_runes): fix size computation bug. + +2000-01-09 William M. Perry + + * gpmevent.c: (gpm_next_event_cb): Don't return value from void function. + +2000-01-09 Andy Piper + + * glyphs-msw.c: index -> i to avoid shadows. + (xbm_create_bitmap_from_data): make static. + (check_valid_string_or_int): deleted. + (mswindows_control_wnd_proc): message -> msg to avoid shadows. + + * glyphs-x.c (x_update_subwindow): remove unused args. - * regex.c (re_match_2_internal): Check for quit. + * glyphs.c (glyph_image_instance): return the thing. Don't set the + back pointer - this is done in allocate_image_instance. + (query_string_font): return Qnil to make the compiler happy. + (unmap_subwindow): set to ~0 to make the compiler happy. + (glyph_query_geometry): comment out until used. + (glyph_layout): ditto. -1998-05-10 Hrvoje Niksic +2000-01-09 Hrvoje Niksic - * frame.c (Ffocus_frame): New function. + * insdel.c (signal_after_change): Remove extraneous unbind_to(). diff --git a/src/Makefile.in.in b/src/Makefile.in.in index 36aede3..21d04e1 100644 --- a/src/Makefile.in.in +++ b/src/Makefile.in.in @@ -502,7 +502,7 @@ debug-temacs: temacs ## Purify PURIFY_PROG = purify PURIFY_FLAGS = -chain-length=32 -ignore-signals=SIGPOLL -threads=yes \ - -cache-dir=./purecache -always-use-cache-dir=yes -pointer-mask=0x0fffffff + -cache-dir=./purecache -always-use-cache-dir=yes PURIFY_LIBS = -lpthread puremacs: $(temacs_deps) $(PURIFY_PROG) $(PURIFY_FLAGS) $(LD) $(temacs_link_args) $(PURIFY_LIBS) diff --git a/src/alloc.c b/src/alloc.c index ca3bb7c..8ee5af5 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -496,8 +496,8 @@ this_one_is_unmarkable (Lisp_Object obj) /************************************************************************/ /* Give gdb/dbx enough information to decode Lisp Objects. We make sure certain symbols are always defined, so gdb doesn't complain - about expressions in src/gdbinit. See src/gdbinit or src/dbxrc to - see how this is used. */ + about expressions in src/.gdbinit. See src/.gdbinit or src/.dbxrc + to see how this is used. */ EMACS_UINT dbg_valmask = ((1UL << VALBITS) - 1) << GCBITS; EMACS_UINT dbg_typemask = (1UL << GCTYPEBITS) - 1; @@ -1720,7 +1720,7 @@ noseeum_make_marker (void) This new method makes things somewhat bigger, but it is MUCH safer. */ -DECLARE_FIXED_TYPE_ALLOC (string, struct Lisp_String); +DECLARE_FIXED_TYPE_ALLOC (string, Lisp_String); /* strings are used and freed quite often */ /* #define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_string 10000 */ #define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_string 1000 @@ -1728,7 +1728,7 @@ DECLARE_FIXED_TYPE_ALLOC (string, struct Lisp_String); static Lisp_Object mark_string (Lisp_Object obj) { - struct Lisp_String *ptr = XSTRING (obj); + Lisp_String *ptr = XSTRING (obj); if (CONSP (ptr->plist) && EXTENT_INFOP (XCAR (ptr->plist))) flush_cached_extent_info (XCAR (ptr->plist)); @@ -1764,7 +1764,7 @@ DEFINE_BASIC_LRECORD_IMPLEMENTATION ("string", string, */ 0, string_equal, 0, string_description, - struct Lisp_String); + Lisp_String); /* String blocks contain this many useful bytes. */ #define STRING_CHARS_BLOCK_SIZE \ @@ -1789,27 +1789,22 @@ static struct string_chars_block *current_string_chars_block; * the string occupies in string_chars_block->string_chars * (including alignment padding). */ -#define STRING_FULLSIZE(s) \ - ALIGN_SIZE (((s) + 1 + sizeof (struct Lisp_String *)),\ - ALIGNOF (struct Lisp_String *)) +#define STRING_FULLSIZE(size) \ + ALIGN_SIZE (((size) + 1 + sizeof (Lisp_String *)),\ + ALIGNOF (Lisp_String *)) #define BIG_STRING_FULLSIZE_P(fullsize) ((fullsize) >= STRING_CHARS_BLOCK_SIZE) #define BIG_STRING_SIZE_P(size) (BIG_STRING_FULLSIZE_P (STRING_FULLSIZE(size))) -#define CHARS_TO_STRING_CHAR(x) \ - ((struct string_chars *) \ - (((char *) (x)) - (slot_offset (struct string_chars, chars[0])))) - - struct string_chars { - struct Lisp_String *string; + Lisp_String *string; unsigned char chars[1]; }; struct unused_string_chars { - struct Lisp_String *string; + Lisp_String *string; EMACS_INT fullsize; }; @@ -1824,19 +1819,14 @@ init_string_chars_alloc (void) } static struct string_chars * -allocate_string_chars_struct (struct Lisp_String *string_it_goes_with, +allocate_string_chars_struct (Lisp_String *string_it_goes_with, EMACS_INT fullsize) { struct string_chars *s_chars; - /* Allocate the string's actual data */ - if (BIG_STRING_FULLSIZE_P (fullsize)) - { - s_chars = (struct string_chars *) xmalloc (fullsize); - } - else if (fullsize <= - (countof (current_string_chars_block->string_chars) - - current_string_chars_block->pos)) + if (fullsize <= + (countof (current_string_chars_block->string_chars) + - current_string_chars_block->pos)) { /* This string can fit in the current string chars block */ s_chars = (struct string_chars *) @@ -1868,21 +1858,20 @@ allocate_string_chars_struct (struct Lisp_String *string_it_goes_with, Lisp_Object make_uninit_string (Bytecount length) { - struct Lisp_String *s; - struct string_chars *s_chars; + Lisp_String *s; EMACS_INT fullsize = STRING_FULLSIZE (length); Lisp_Object val; - if ((length < 0) || (fullsize <= 0)) - abort (); + assert (length >= 0 && fullsize > 0); /* Allocate the string header */ - ALLOCATE_FIXED_TYPE (string, struct Lisp_String, s); + ALLOCATE_FIXED_TYPE (string, Lisp_String, s); set_lheader_implementation (&(s->lheader), &lrecord_string); - s_chars = allocate_string_chars_struct (s, fullsize); + set_string_data (s, BIG_STRING_FULLSIZE_P (fullsize) + ? xnew_array (Bufbyte, length + 1) + : allocate_string_chars_struct (s, fullsize)->chars); - set_string_data (s, &(s_chars->chars[0])); set_string_length (s, length); s->plist = Qnil; @@ -1903,8 +1892,9 @@ static void verify_string_chars_integrity (void); */ void -resize_string (struct Lisp_String *s, Bytecount pos, Bytecount delta) +resize_string (Lisp_String *s, Bytecount pos, Bytecount delta) { + Bytecount oldfullsize, newfullsize; #ifdef VERIFY_STRING_CHARS_INTEGRITY verify_string_chars_integrity (); #endif @@ -1923,47 +1913,59 @@ resize_string (struct Lisp_String *s, Bytecount pos, Bytecount delta) } #endif /* ERROR_CHECK_BUFPOS */ - if (pos >= 0 && delta < 0) - /* If DELTA < 0, the functions below will delete the characters - before POS. We want to delete characters *after* POS, however, - so convert this to the appropriate form. */ - pos += -delta; - if (delta == 0) /* simplest case: no size change. */ return; - else - { - Bytecount oldfullsize = STRING_FULLSIZE (string_length (s)); - Bytecount newfullsize = STRING_FULLSIZE (string_length (s) + delta); - if (oldfullsize == newfullsize) + if (pos >= 0 && delta < 0) + /* If DELTA < 0, the functions below will delete the characters + before POS. We want to delete characters *after* POS, however, + so convert this to the appropriate form. */ + pos += -delta; + + oldfullsize = STRING_FULLSIZE (string_length (s)); + newfullsize = STRING_FULLSIZE (string_length (s) + delta); + + if (BIG_STRING_FULLSIZE_P (oldfullsize)) + { + if (BIG_STRING_FULLSIZE_P (newfullsize)) { - /* next simplest case; size change but the necessary - allocation size won't change (up or down; code somewhere - depends on there not being any unused allocation space, - modulo any alignment constraints). */ + /* Both strings are big. We can just realloc(). */ + set_string_data (s, (Bufbyte *) xrealloc (string_data (s), + string_length (s) + delta + 1)); if (pos >= 0) { Bufbyte *addroff = pos + string_data (s); memmove (addroff + delta, addroff, - /* +1 due to zero-termination. */ string_length (s) + 1 - pos); } } - else if (BIG_STRING_FULLSIZE_P (oldfullsize) && - BIG_STRING_FULLSIZE_P (newfullsize)) + else /* String has been demoted from BIG_STRING. */ { - /* next simplest case; the string is big enough to be malloc()ed - itself, so we just realloc. + Bufbyte *new_data = + allocate_string_chars_struct (s, newfullsize)->chars; + Bufbyte *old_data = string_data (s); - It's important not to let the string get below the threshold - for making big strings and still remain malloc()ed; if that - were the case, repeated calls to this function on the same - string could result in memory leakage. */ - set_string_data (s, (Bufbyte *) xrealloc (string_data (s), - newfullsize)); + if (pos >= 0) + { + memcpy (new_data, old_data, pos); + memcpy (new_data + pos + delta, old_data + pos, + string_length (s) + 1 - pos); + } + set_string_data (s, new_data); + xfree (old_data); + } + } + else /* old string is small */ + { + if (oldfullsize == newfullsize) + { + /* special case; size change but the necessary + allocation size won't change (up or down; code + somewhere depends on there not being any unused + allocation space, modulo any alignment + constraints). */ if (pos >= 0) { Bufbyte *addroff = pos + string_data (s); @@ -1975,58 +1977,52 @@ resize_string (struct Lisp_String *s, Bytecount pos, Bytecount delta) } else { - /* worst case. We make a new string_chars struct and copy - the string's data into it, inserting/deleting the delta - in the process. The old string data will either get - freed by us (if it was malloc()ed) or will be reclaimed - in the normal course of garbage collection. */ - struct string_chars *s_chars = - allocate_string_chars_struct (s, newfullsize); - Bufbyte *new_addr = &(s_chars->chars[0]); - Bufbyte *old_addr = string_data (s); + Bufbyte *old_data = string_data (s); + Bufbyte *new_data = + BIG_STRING_FULLSIZE_P (newfullsize) + ? xnew_array (Bufbyte, string_length (s) + delta + 1) + : allocate_string_chars_struct (s, newfullsize)->chars; + if (pos >= 0) { - memcpy (new_addr, old_addr, pos); - memcpy (new_addr + pos + delta, old_addr + pos, + memcpy (new_data, old_data, pos); + memcpy (new_data + pos + delta, old_data + pos, string_length (s) + 1 - pos); } - set_string_data (s, new_addr); - if (BIG_STRING_FULLSIZE_P (oldfullsize)) - xfree (old_addr); - else - { - /* We need to mark this chunk of the string_chars_block - as unused so that compact_string_chars() doesn't - freak. */ - struct string_chars *old_s_chars = - (struct string_chars *) ((char *) old_addr - - sizeof (struct Lisp_String *)); - /* Sanity check to make sure we aren't hosed by strange - alignment/padding. */ - assert (old_s_chars->string == s); - MARK_STRUCT_AS_FREE (old_s_chars); - ((struct unused_string_chars *) old_s_chars)->fullsize = - oldfullsize; - } + set_string_data (s, new_data); + + { + /* We need to mark this chunk of the string_chars_block + as unused so that compact_string_chars() doesn't + freak. */ + struct string_chars *old_s_chars = (struct string_chars *) + ((char *) old_data - offsetof (struct string_chars, chars)); + /* Sanity check to make sure we aren't hosed by strange + alignment/padding. */ + assert (old_s_chars->string == s); + MARK_STRUCT_AS_FREE (old_s_chars); + ((struct unused_string_chars *) old_s_chars)->fullsize = + oldfullsize; + } } + } - set_string_length (s, string_length (s) + delta); - /* If pos < 0, the string won't be zero-terminated. - Terminate now just to make sure. */ - string_data (s)[string_length (s)] = '\0'; + set_string_length (s, string_length (s) + delta); + /* If pos < 0, the string won't be zero-terminated. + Terminate now just to make sure. */ + string_data (s)[string_length (s)] = '\0'; - if (pos >= 0) - { - Lisp_Object string; - - XSETSTRING (string, s); - /* We also have to adjust all of the extent indices after the - place we did the change. We say "pos - 1" because - adjust_extents() is exclusive of the starting position - passed to it. */ - adjust_extents (string, pos - 1, string_length (s), - delta); - } + if (pos >= 0) + { + Lisp_Object string; + + XSETSTRING (string, s); + /* We also have to adjust all of the extent indices after the + place we did the change. We say "pos - 1" because + adjust_extents() is exclusive of the starting position + passed to it. */ + adjust_extents (string, pos - 1, string_length (s), + delta); } #ifdef VERIFY_STRING_CHARS_INTEGRITY @@ -2037,7 +2033,7 @@ resize_string (struct Lisp_String *s, Bytecount pos, Bytecount delta) #ifdef MULE void -set_string_char (struct Lisp_String *s, Charcount i, Emchar c) +set_string_char (Lisp_String *s, Charcount i, Emchar c) { Bufbyte newstr[MAX_EMCHAR_LEN]; Bytecount bytoff = charcount_to_bytecount (string_data (s), i); @@ -2164,7 +2160,7 @@ build_translated_string (CONST char *str) Lisp_Object make_string_nocopy (CONST Bufbyte *contents, Bytecount length) { - struct Lisp_String *s; + Lisp_String *s; Lisp_Object val; /* Make sure we find out about bad make_string_nocopy's when they happen */ @@ -2173,7 +2169,7 @@ make_string_nocopy (CONST Bufbyte *contents, Bytecount length) #endif /* Allocate the string header */ - ALLOCATE_FIXED_TYPE (string, struct Lisp_String, s); + ALLOCATE_FIXED_TYPE (string, Lisp_String, s); set_lheader_implementation (&(s->lheader), &lrecord_string); SET_C_READONLY_RECORD_HEADER (&s->lheader); s->plist = Qnil; @@ -2997,7 +2993,7 @@ verify_string_chars_integrity (void) { struct string_chars *s_chars = (struct string_chars *) &(sb->string_chars[pos]); - struct Lisp_String *string; + Lisp_String *string; int size; int fullsize; @@ -3048,7 +3044,7 @@ compact_string_chars (void) struct string_chars *from_s_chars = (struct string_chars *) &(from_sb->string_chars[from_pos]); struct string_chars *to_s_chars; - struct Lisp_String *string; + Lisp_String *string; int size; int fullsize; @@ -3133,7 +3129,7 @@ compact_string_chars (void) static int debug_string_purity; static void -debug_string_purity_print (struct Lisp_String *p) +debug_string_purity_print (Lisp_String *p) { Charcount i; Charcount s = string_char_length (p); @@ -3159,24 +3155,25 @@ sweep_strings (void) int num_small_used = 0, num_small_bytes = 0, num_bytes = 0; int debug = debug_string_purity; -#define UNMARK_string(ptr) \ - do { struct Lisp_String *p = (ptr); \ - int size = string_length (p); \ - UNMARK_RECORD_HEADER (&(p->lheader)); \ - num_bytes += size; \ - if (!BIG_STRING_SIZE_P (size)) \ - { num_small_bytes += size; \ - num_small_used++; \ - } \ - if (debug) debug_string_purity_print (p); \ - } while (0) -#define ADDITIONAL_FREE_string(p) \ - do { int size = string_length (p); \ - if (BIG_STRING_SIZE_P (size)) \ - xfree_1 (CHARS_TO_STRING_CHAR (string_data (p))); \ - } while (0) +#define UNMARK_string(ptr) do { \ + Lisp_String *p = (ptr); \ + size_t size = string_length (p); \ + UNMARK_RECORD_HEADER (&(p->lheader)); \ + num_bytes += size; \ + if (!BIG_STRING_SIZE_P (size)) \ + { num_small_bytes += size; \ + num_small_used++; \ + } \ + if (debug) \ + debug_string_purity_print (p); \ + } while (0) +#define ADDITIONAL_FREE_string(ptr) do { \ + size_t size = string_length (ptr); \ + if (BIG_STRING_SIZE_P (size)) \ + xfree (ptr->data); \ + } while (0) - SWEEP_FIXED_TYPE_BLOCK (string, struct Lisp_String); + SWEEP_FIXED_TYPE_BLOCK (string, Lisp_String); gc_count_num_short_string_in_use = num_small_used; gc_count_string_total_size = num_bytes; @@ -3489,7 +3486,7 @@ garbage_collect_1 (void) for (i = 0; i < staticidx; i++) mark_object (*(staticvec[i])); for (i = 0; i < staticidx_nodump; i++) - mark_object (*(staticvec_nodump[i])); + mark_object (*(staticvec_nodump[i])); } { /* GCPRO() */ @@ -4154,7 +4151,7 @@ complex_vars_of_alloc (void) * - lrecord_implementations_table[] * - relocation table * - wired variable address/value couples with the count preceding the list - */ + */ typedef struct { char signature[8]; @@ -4268,7 +4265,7 @@ pdump_add_entry (pdump_entry_list *list, const void *obj, size_t size, int count { if (e->obj == obj) return; - + pos++; if (pos == PDUMP_HASHSIZE) pos = 0; @@ -4315,7 +4312,7 @@ pdump_get_entry_list(const struct struct_description *sdesc) pdump_struct_table.list[pdump_struct_table.count].list.align = 8; pdump_struct_table.list[pdump_struct_table.count].list.count = 0; pdump_struct_table.list[pdump_struct_table.count].sdesc = sdesc; - + return &pdump_struct_table.list[pdump_struct_table.count++].list; } @@ -4440,11 +4437,11 @@ pdump_register_sub (const void *data, const struct lrecord_description *desc, in int i; if (XD_IS_INDIRECT (count)) count = pdump_get_indirect_count (count, desc, data); - + for(i=0;idescription) { int me = depth++; @@ -4526,7 +4523,7 @@ pdump_register_struct (const void *data, const struct struct_description *sdesc, backtrace[me].obj = 0; backtrace[me].position = 0; backtrace[me].offset = 0; - + pdump_add_entry (pdump_get_entry_list (sdesc), data, sdesc->size, @@ -4552,7 +4549,7 @@ pdump_dump_data (pdump_entry_list_elmt *elmt, const struct lrecord_description * int pos, i; void *rdata; memcpy (pdump_buf, elmt->obj, size*count); - + for (i=0; iobj); - + for(i=0; inext; } } - + for (i=0; inext; } } - + elmt = pdump_opaque_data_list.first; while (elmt) { @@ -4797,7 +4794,7 @@ pdump_dump_structvec (void) static void pdump_dump_itable (void) { - write (pdump_fd, lrecord_implementations_table, sizeof (lrecord_implementations_table)); + write (pdump_fd, lrecord_implementations_table, sizeof (lrecord_implementations_table)); } static void @@ -4862,7 +4859,7 @@ pdump_dump_wired (void) write (pdump_fd, &pdump_wirevec[i], sizeof (pdump_wirevec[i])); write (pdump_fd, &obj, sizeof (obj)); } - + for (i=0; ifunction, 0))) + fun = *backtrace_list->function; return Fsignal (Qwrong_number_of_arguments, list2 (fun, make_int (nargs))); } diff --git a/src/config.h.in b/src/config.h.in index d5f53c9..3f427a2 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -308,6 +308,11 @@ char *alloca(); #undef HAVE_SOCKADDR_SUN_LEN #undef HAVE_MULTICAST #undef HAVE_SYSVIPC +#undef HAVE_LOCKF +#undef HAVE_FLOCK +#undef HAVE_FSYNC +#undef HAVE_FTRUNCATE +#undef HAVE_UMASK #undef SYSV_SYSTEM_DIR #undef NONSYSTEM_DIR_LIBRARY @@ -801,17 +806,11 @@ on various systems. */ /* Should movemail use hesiod for getting POP server host? */ #undef HESIOD /* Determine type of mail locking. */ -/* Play preprocessor games so that configure options override s&m files */ -#undef REAL_MAIL_USE_LOCKF -#undef REAL_MAIL_USE_FLOCK -#undef MAIL_USE_LOCKF -#undef MAIL_USE_FLOCK -#ifdef REAL_MAIL_USE_FLOCK -#define MAIL_USE_FLOCK -#endif -#ifdef REAL_MAIL_USE_LOCKF -#define MAIL_USE_LOCKF -#endif +#undef MAIL_LOCK_LOCKF +#undef MAIL_LOCK_FLOCK +#undef MAIL_LOCK_DOT +#undef MAIL_LOCK_LOCKING +#undef MAIL_LOCK_MMDF #undef PREFIX_USER_DEFINED #undef EXEC_PREFIX_USER_DEFINED diff --git a/src/console-tty.c b/src/console-tty.c index c836d8c..12fc504 100644 --- a/src/console-tty.c +++ b/src/console-tty.c @@ -278,6 +278,8 @@ CODESYS defaults to the value of `terminal-coding-system'. set_encoding_stream_coding_system (XLSTREAM (CONSOLE_TTY_DATA (decode_tty_console (console))->outstream), Fget_coding_system (NILP (codesys) ? Vterminal_coding_system : codesys)); + /* Redraw tty */ + face_property_was_changed (Vdefault_face, Qfont, Qtty); return Qnil; } diff --git a/src/dbxrc b/src/dbxrc deleted file mode 100644 index 166922b..0000000 --- a/src/dbxrc +++ /dev/null @@ -1,362 +0,0 @@ -# -*- ksh -*- -# Copyright (C) 1998 Free Software Foundation, Inc. - -# This file is part of XEmacs. - -# XEmacs 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. - -# XEmacs 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 XEmacs; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# Author: Martin Buchholz - -# You can use this file to debug XEmacs using Sun WorkShop's dbx. -# Add the contents of this file to $HOME/.dbxrc or -# Source the contents of this file with something like: -# if test -r ./dbxrc; then . ./dbxrc; fi - -# Some functions defined here require a running process, but most -# don't. Considerable effort has been expended to this end. - -# See also the comments in gdbinit. - -# See also the question of the XEmacs FAQ, titled -# "How to Debug an XEmacs problem with a debugger". - -ignore POLL -ignore IO - -document lbt << 'end' -Usage: lbt -Print the current Lisp stack trace. -Requires a running xemacs process. -end - -function lbt { - call debug_backtrace() -} - -document ldp << 'end' -Usage: ldp lisp_object -Print a Lisp Object value using the Lisp printer. -Requires a running xemacs process. -end - -function ldp { - call debug_print ($1); -} - -# A bug in dbx prevents string variables from having values beginning with `-'!! -function XEmacsInit { - function ToInt { eval "$1=\$[(int) $1]"; } - ToInt dbg_USE_UNION_TYPE - ToInt Lisp_Type_Int - ToInt Lisp_Type_Char - ToInt Lisp_Type_Cons - ToInt Lisp_Type_String - ToInt Lisp_Type_Vector - ToInt Lisp_Type_Symbol - ToInt Lisp_Type_Record - ToInt dbg_valbits - ToInt dbg_gctypebits - function ToLong { eval "$1=\$[(unsigned long) $1]"; } - ToLong dbg_valmask - ToLong dbg_typemask - xemacs_initted=yes -} - -function printvar { - for i in $*; do eval "echo $i=\$$i"; done -} - -document decode_object << 'end' -Usage: decode_object lisp_object -Extract implementation information from a Lisp Object. -Defines variables $val, $type and $imp. -end - -# Various dbx bugs cause ugliness in following code -function decode_object { - if test -z "$xemacs_initted"; then XEmacsInit; fi; - if test $dbg_USE_UNION_TYPE = 1; then - # Repeat after me... dbx sux, dbx sux, dbx sux... - # Allow both `pobj Qnil' and `pobj 0x82746834' to work - case $(whatis $1) in - *Lisp_Object*) obj="$[(unsigned long)(($1).i)]";; - *) obj="$[(unsigned long)($1)]";; - esac - else - obj="$[(unsigned long)($1)]"; - fi - if test $[(int)($obj & 1)] = 1; then - # It's an int - val=$[(long)(((unsigned long long)$obj) >> 1)] - type=$Lisp_Type_Int - else - type=$[(int)(((void*)$obj) & $dbg_typemask)] - if test $type = $Lisp_Type_Char; then - val=$[(void*)(long)(((unsigned long long)($obj & $dbg_valmask)) >> $dbg_gctypebits)] - else - # It's a record pointer - val=$[(void*)$obj] - if test "$val" = "(nil)"; then type=null_pointer; fi - fi - fi - - if test $type = $Lisp_Type_Record; then - typeset lheader="((struct lrecord_header *) $val)" - imp=$[(void*)(lrecord_implementations_table[$lheader->type])] - else - imp="0xdeadbeef" - fi - # printvar obj val type imp -} - -function xint { - decode_object "$*" - print (long) ($val) -} - -function xtype { - decode_object "$*" - if test $type = $Lisp_Type_Int; then echo "int" - elif test $type = $Lisp_Type_Char; then echo "char" - elif test $type = $Lisp_Type_Symbol; then echo "symbol" - elif test $type = $Lisp_Type_String; then echo "string" - elif test $type = $Lisp_Type_Vector; then echo "vector" - elif test $type = $Lisp_Type_Cons; then echo "cons" - elif test $type = null_pointer; then echo "null_pointer" - else - echo "record type with name: $[((struct lrecord_implementation *)$imp)->name]" - fi -} - -function lisp-shadows { - run -batch -vanilla -f list-load-path-shadows -} - -function environment-to-run-temacs { - unset EMACSLOADPATH - export EMACSBOOTSTRAPLOADPATH=../lisp/:.. - export EMACSBOOTSTRAPMODULEPATH=../modules/:.. -} - -document run-temacs << 'end' -Usage: run-temacs -Run temacs interactively, like xemacs. -Use this with debugging tools (like purify) that cannot deal with dumping, -or when temacs builds successfully, but xemacs does not. -end - -function run-temacs { - environment-to-run-temacs - run -batch -l ../lisp/loadup.el run-temacs -q -} - -document update-elc << 'end' -Usage: update-elc -Run the core lisp byte compilation part of the build procedure. -Use when debugging temacs, not xemacs! -Use this when temacs builds successfully, but xemacs does not. -end - -function update-elc { - environment-to-run-temacs - run -batch -l ../lisp/update-elc.el -} - - -function dump-temacs { - environment-to-run-temacs - run -batch -l ../lisp/loadup.el dump -} - -document dump-temacs << 'end' -Usage: dump-temacs -Run the dumping part of the build procedure. -Use when debugging temacs, not xemacs! -Use this when temacs builds successfully, but xemacs does not. -end - -function pstruct { - xstruct="((struct $1 *) $val)" - print $xstruct - print *$xstruct -} - -function lrecord_type_p { - if eval test -z \"\$lrecord_$1\" && test $imp = $[(void*)(&lrecord_$1)]; then return 0; else return 1; fi -} - -document pobj << 'end' -Usage: pobj lisp_object -Print the internal C structure of a underlying Lisp Object. -end - -function pobj { - decode_object $1 - if test $type = $Lisp_Type_Int; then - print -f"Integer: %d" $val - elif test $type = $Lisp_Type_Char; then - if test $[$val > 32 && $val < 128] = 1; then - print -f"Char: %c" $val - else - print -f"Char: %d" $val - fi - elif test $type = $Lisp_Type_String || lrecord_type_p string; then - pstruct Lisp_String - elif test $type = $Lisp_Type_Cons || lrecord_type_p cons; then - pstruct Lisp_Cons - elif test $type = $Lisp_Type_Symbol || lrecord_type_p symbol; then - pstruct Lisp_Symbol - echo "Symbol name: $[(char *)($xstruct->name->data)]" - elif test $type = $Lisp_Type_Vector || lrecord_type_p vector; then - pstruct Lisp_Vector - echo "Vector of length $[$xstruct->size]" - elif lrecord_type_p bit_vector; then - pstruct Lisp_Bit_Vector - elif lrecord_type_p buffer; then - pstruct buffer - elif lrecord_type_p char_table; then - pstruct Lisp_Char_Table - elif lrecord_type_p char_table_entry; then - pstruct Lisp_Char_Table_Entry - elif lrecord_type_p charset; then - pstruct Lisp_Charset - elif lrecord_type_p coding_system; then - pstruct Lisp_Coding_System - elif lrecord_type_p color_instance; then - pstruct Lisp_Color_Instance - elif lrecord_type_p command_builder; then - pstruct command_builder - elif lrecord_type_p compiled_function; then - pstruct Lisp_Compiled_Function - elif lrecord_type_p console; then - pstruct console - elif lrecord_type_p database; then - pstruct Lisp_Database - elif lrecord_type_p device; then - pstruct device - elif lrecord_type_p event; then - pstruct Lisp_Event - elif lrecord_type_p extent; then - pstruct extent - elif lrecord_type_p extent_auxiliary; then - pstruct extent_auxiliary - elif lrecord_type_p extent_info; then - pstruct extent_info - elif lrecord_type_p face; then - pstruct Lisp_Face - elif lrecord_type_p float; then - pstruct Lisp_Float - elif lrecord_type_p font_instance; then - pstruct Lisp_Font_Instance - elif lrecord_type_p frame; then - pstruct frame - elif lrecord_type_p glyph; then - pstruct Lisp_Glyph - elif lrecord_type_p hash_table; then - pstruct Lisp_Hash_Table - elif lrecord_type_p image_instance; then - pstruct Lisp_Image_Instance - elif lrecord_type_p keymap; then - pstruct Lisp_Keymap - elif lrecord_type_p lcrecord_list; then - pstruct lcrecord_list - elif lrecord_type_p lstream; then - pstruct lstream - elif lrecord_type_p marker; then - pstruct Lisp_Marker - elif lrecord_type_p opaque; then - pstruct Lisp_Opaque - elif lrecord_type_p opaque_ptr; then - pstruct Lisp_Opaque_Ptr - elif lrecord_type_p popup_data; then - pstruct popup_data - elif lrecord_type_p process; then - pstruct Lisp_Process - elif lrecord_type_p range_table; then - pstruct Lisp_Range_Table - elif lrecord_type_p specifier; then - pstruct Lisp_Specifier - elif lrecord_type_p subr; then - pstruct Lisp_Subr - elif lrecord_type_p symbol_value_buffer_local; then - pstruct symbol_value_buffer_local - elif lrecord_type_p symbol_value_forward; then - pstruct symbol_value_forward - elif lrecord_type_p symbol_value_lisp_magic; then - pstruct symbol_value_lisp_magic - elif lrecord_type_p symbol_value_varalias; then - pstruct symbol_value_varalias - elif lrecord_type_p toolbar_button; then - pstruct toolbar_button - elif lrecord_type_p tooltalk_message; then - pstruct Lisp_Tooltalk_Message - elif lrecord_type_p tooltalk_pattern; then - pstruct Lisp_Tooltalk_Pattern - elif lrecord_type_p weak_list; then - pstruct weak_list - elif lrecord_type_p window; then - pstruct window - elif lrecord_type_p window_configuration; then - pstruct window_config - elif test "$type" = "null_pointer"; then - echo "Lisp Object is a null pointer!!" - else - echo "Unknown Lisp Object type" - print $1 - fi -} - -function pproc { - print *(`process.c`struct Lisp_Process*)$1 ; - ldp "(`process.c`struct Lisp_Process*)$1->name" ; - ldp "(`process.c`struct Lisp_Process*)$1->command" ; -} - -dbxenv suppress_startup_message 4.0 -dbxenv mt_watchpoints on - -function dp_core { - print ((struct x_frame *)(((struct frame*)(Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget->core -} - -# Barf! -function print_shell { - print *(`frame-x.c`TopLevelShellRec*) (((struct `frame-x.c`x_frame*) (((struct `frame-x.c`frame*) (Fselected_frame(Qnil)&0x00FFFFFF))->frame_data))->widget) -} - -# ------------------------------------------------------------- -# functions to test the debugging support itself. -# If you change this file, make sure the following still work... -# ------------------------------------------------------------- -function test_xtype { - function doit { echo -n "$1: "; xtype "$1"; } - test_various_objects -} - -function test_pobj { - function doit { echo '==============================='; echo -n "$1: "; pobj "$1"; } - test_various_objects -} - -function test_various_objects { - doit Vemacs_major_version - doit Vhelp_char - doit Qnil - doit Qunbound - doit Vobarray - doit Vall_weak_lists - doit Vxemacs_codename -} diff --git a/src/depend b/src/depend index c9db857..e4ba398 100644 --- a/src/depend +++ b/src/depend @@ -94,7 +94,7 @@ ecrt0.o: config.h editfns.o: $(LISP_H) buffer.h bufslots.h char-1byte.h char-lb.h char-ucs.h character.h chartab.h commands.h conslots.h console.h device.h events.h extents.h frame.h frameslots.h glyphs.h gui.h insdel.h line-number.h lisp-disunion.h lisp-union.h lrecord.h mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysfile.h syspwd.h systime.h toolbar.h window.h winslots.h eldap.o: $(LISP_H) buffer.h bufslots.h char-1byte.h char-lb.h char-ucs.h character.h eldap.h lisp-disunion.h lisp-union.h lrecord.h mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.h opaque.h symeval.h symsinit.h sysdep.h elhash.o: $(LISP_H) bytecode.h elhash.h lisp-disunion.h lisp-union.h lrecord.h symeval.h symsinit.h -emacs.o: $(LISP_H) backtrace.h buffer.h bufslots.h char-1byte.h char-lb.h char-ucs.h character.h commands.h conslots.h console.h lisp-disunion.h lisp-union.h lrecord.h mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.h paths.h process.h redisplay.h symeval.h symsinit.h sysdep.h sysdll.h sysfile.h syssignal.h systime.h systty.h +emacs.o: $(LISP_H) backtrace.h buffer.h bufslots.h char-1byte.h char-lb.h char-ucs.h character.h commands.h conslots.h console.h device.h frame.h frameslots.h glyphs.h gui.h lisp-disunion.h lisp-union.h lrecord.h mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.h paths.h process.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysdll.h sysfile.h syssignal.h systime.h systty.h toolbar.h emodules.o: $(LISP_H) buffer.h bufslots.h char-1byte.h char-lb.h char-ucs.h character.h conslots.h console.h device.h emodules.h file-coding.h frame.h frameslots.h glyphs.h gui.h insdel.h lisp-disunion.h lisp-union.h lrecord.h lstream.h mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.h redisplay.h scrollbar.h specifier.h symeval.h symsinit.h sysdep.h sysdll.h toolbar.h window.h winslots.h esd.o: $(LISP_H) lisp-disunion.h lisp-union.h lrecord.h miscplay.h symeval.h symsinit.h eval.o: $(LISP_H) backtrace.h buffer.h bufslots.h bytecode.h char-1byte.h char-lb.h char-ucs.h character.h commands.h conslots.h console.h lisp-disunion.h lisp-union.h lrecord.h mb-1byte.h mb-lb.h mb-multibyte.h mb-utf-8.h mule-charset.h multibyte.h opaque.h symeval.h symsinit.h diff --git a/src/elhash.c b/src/elhash.c index 29fe779..397f65d 100644 --- a/src/elhash.c +++ b/src/elhash.c @@ -413,19 +413,11 @@ xhash_table (Lisp_Object hash_table) /************************************************************************/ /* Creation of hash tables, without error-checking. */ -static double -hash_table_rehash_threshold (Lisp_Hash_Table *ht) -{ - return - ht->rehash_threshold > 0.0 ? ht->rehash_threshold : - ht->size > 4096 && !ht->test_function ? 0.7 : 0.6; -} - static void compute_hash_table_derived_values (Lisp_Hash_Table *ht) { ht->rehash_count = (size_t) - ((double) ht->size * hash_table_rehash_threshold (ht)); + ((double) ht->size * ht->rehash_threshold); ht->golden_ratio = (size_t) ((double) ht->size * (.6180339887 / (double) sizeof (Lisp_Object))); } @@ -440,10 +432,6 @@ make_general_lisp_hash_table (enum hash_table_test test, Lisp_Object hash_table; Lisp_Hash_Table *ht = alloc_lcrecord_type (Lisp_Hash_Table, &lrecord_hash_table); - ht->rehash_size = rehash_size; - ht->rehash_threshold = rehash_threshold; - ht->weakness = weakness; - switch (test) { case HASH_TABLE_EQ: @@ -465,15 +453,21 @@ make_general_lisp_hash_table (enum hash_table_test test, abort (); } - if (ht->rehash_size <= 0.0) - ht->rehash_size = HASH_TABLE_DEFAULT_REHASH_SIZE; + ht->weakness = weakness; + + ht->rehash_size = + rehash_size > 1.0 ? rehash_size : HASH_TABLE_DEFAULT_REHASH_SIZE; + + ht->rehash_threshold = + rehash_threshold > 0.0 ? rehash_threshold : + size > 4096 && !ht->test_function ? 0.7 : 0.6; + if (size < HASH_TABLE_MIN_SIZE) size = HASH_TABLE_MIN_SIZE; - if (rehash_threshold < 0.0) - rehash_threshold = 0.75; - ht->size = - hash_table_size ((size_t) ((double) size / hash_table_rehash_threshold (ht)) + 1); + ht->size = hash_table_size ((size_t) (((double) size / ht->rehash_threshold) + + 1.0)); ht->count = 0; + compute_hash_table_derived_values (ht); /* We leave room for one never-occupied sentinel hentry at the end. */ @@ -500,8 +494,7 @@ make_lisp_hash_table (size_t size, enum hash_table_weakness weakness, enum hash_table_test test) { - return make_general_lisp_hash_table - (test, size, HASH_TABLE_DEFAULT_REHASH_SIZE, -1.0, weakness); + return make_general_lisp_hash_table (test, size, -1.0, -1.0, weakness); } /* Pretty reading of hash tables. @@ -1090,7 +1083,7 @@ beyond which the HASH-TABLE is enlarged by rehashing. */ (hash_table)) { - return make_float (hash_table_rehash_threshold (xhash_table (hash_table))); + return make_float (xhash_table (hash_table)->rehash_threshold); } DEFUN ("hash-table-weakness", Fhash_table_weakness, 1, 1, 0, /* diff --git a/src/emacs.c b/src/emacs.c index bf999a0..4312190 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -36,6 +36,7 @@ Boston, MA 02111-1307, USA. */ #include "console.h" #include "process.h" #include "redisplay.h" +#include "frame.h" #include "sysdep.h" #include "syssignal.h" /* Always include before systty.h */ @@ -155,6 +156,7 @@ Lisp_Object Vconfigure_info_directory; Lisp_Object Vsite_directory, Vconfigure_site_directory; Lisp_Object Vconfigure_info_path; Lisp_Object Vinternal_error_checking; +Lisp_Object Vmail_lock_methods, Vconfigure_mail_lock_method; Lisp_Object Vpath_separator; /* The default base directory XEmacs is installed under. */ @@ -1711,7 +1713,9 @@ main_1 (int argc, char **argv, char **envp, int restart) reinit_vars_of_lread (); reinit_vars_of_lstream (); reinit_vars_of_minibuf (); +#ifdef HAVE_SHLIB reinit_vars_of_module (); +#endif reinit_vars_of_objects (); reinit_vars_of_print (); reinit_vars_of_redisplay (); @@ -1726,6 +1730,9 @@ main_1 (int argc, char **argv, char **envp, int restart) #ifdef HAVE_X_WINDOWS reinit_vars_of_device_x (); +#endif +#ifdef HAVE_SCROLLBARS + reinit_vars_of_scrollbar_x (); #ifdef HAVE_MENUBARS reinit_vars_of_menubar_x (); #endif @@ -1800,6 +1807,7 @@ main_1 (int argc, char **argv, char **envp, int restart) init_redisplay (); /* Determine terminal type. init_sys_modes uses results */ + init_frame (); init_event_stream (); /* Set up so we can get user input. */ init_macros (); /* set up so we can run macros. */ init_editfns (); /* Determine the name of the user we're running as */ @@ -3086,6 +3094,46 @@ bufpos - check buffer positions. Vinternal_error_checking); #endif + DEFVAR_CONST_LISP ("mail-lock-methods", &Vmail_lock_methods /* +Mail spool locking methods supported by this instance of XEmacs. +This is a list of symbols. Each of the symbols is one of the +following: dot, lockf, flock, locking, mmdf. +*/ ); + { + Vmail_lock_methods = Qnil; + Vmail_lock_methods = Fcons (intern ("dot"), Vmail_lock_methods); +#ifdef HAVE_LOCKF + Vmail_lock_methods = Fcons (intern ("lockf"), Vmail_lock_methods); +#endif +#ifdef HAVE_FLOCK + Vmail_lock_methods = Fcons (intern ("flock"), Vmail_lock_methods); +#endif +#ifdef HAVE_MMDF + Vmail_lock_methods = Fcons (intern ("mmdf"), Vmail_lock_methods); +#endif +#ifdef HAVE_LOCKING + Vmail_lock_methods = Fcons (intern ("locking"), Vmail_lock_methods); +#endif + } + + DEFVAR_CONST_LISP ("configure-mail-lock-method", &Vconfigure_mail_lock_method /* +Mail spool locking method suggested by configure. This is one +of the symbols in MAIL-LOCK-METHODS. +*/ ); + { +#if defined(MAIL_LOCK_FLOCK) && defined(HAVE_FLOCK) + Vconfigure_mail_lock_method = intern("flock"); +#elif defined(MAIL_LOCK_LOCKF) && defined(HAVE_LOCKF) + Vconfigure_mail_lock_method = intern("lockf"); +#elif defined(MAIL_LOCK_MMDF) && defined(HAVE_MMDF) + Vconfigure_mail_lock_method = intern("mmdf"); +#elif defined(MAIL_LOCK_LOCKING) && defined(HAVE_LOCKING) + Vconfigure_mail_lock_method = intern("locking"); +#else + Vconfigure_mail_lock_method = intern("dot"); +#endif + } + DEFVAR_LISP ("path-separator", &Vpath_separator /* The directory separator in search paths, as a string. */ ); diff --git a/src/eval.c b/src/eval.c index 1992302..e2768e7 100644 --- a/src/eval.c +++ b/src/eval.c @@ -4743,7 +4743,7 @@ backtrace_specials (int speccount, int speclimit, Lisp_Object stream) DEFUN ("backtrace", Fbacktrace, 0, 2, "", /* Print a trace of Lisp function calls currently active. -Option arg STREAM specifies the output stream to send the backtrace to, +Optional arg STREAM specifies the output stream to send the backtrace to, and defaults to the value of `standard-output'. Optional second arg DETAILED means show places where currently active variable bindings, catches, condition-cases, and unwind-protects were made as well as @@ -4786,8 +4786,8 @@ function calls. if (!NILP (detailed) && catches && catches->backlist == backlist) { int catchpdl = catches->pdlcount; - if (specpdl[catchpdl].func == condition_case_unwind - && speccount > catchpdl) + if (speccount > catchpdl + && specpdl[catchpdl].func == condition_case_unwind) /* This is a condition-case catchpoint */ catchpdl = catchpdl + 1; diff --git a/src/event-Xt.c b/src/event-Xt.c index 4bea4e7..46161af 100644 --- a/src/event-Xt.c +++ b/src/event-Xt.c @@ -1339,8 +1339,8 @@ handle_focus_event_1 (struct frame *f, int in_p) is mandatory. Weirdly you get a FocusOut event when you click in a widget-glyph but you don't get a correspondng FocusIn when you click in the frame. Why is this? */ - if (in_p -#if XtSpecificationRelease > 5 + if (in_p +#if XtSpecificationRelease > 5 && FRAME_X_TEXT_WIDGET (f) != focus_widget #endif ) @@ -2011,22 +2011,24 @@ static void Xt_process_to_emacs_event (struct Lisp_Event *emacs_event) { int i; - Lisp_Object process; assert (process_events_occurred > 0); + for (i = 0; i < MAXDESC; i++) { - process = filedesc_with_input[i]; + Lisp_Object process = filedesc_with_input[i]; if (PROCESSP (process)) - break; + { + filedesc_with_input[i] = Qnil; + process_events_occurred--; + /* process events have nil as channel */ + emacs_event->event_type = process_event; + emacs_event->timestamp = 0; /* #### */ + emacs_event->event.process.process = process; + return; + } } - assert (i < MAXDESC); - filedesc_with_input[i] = Qnil; - process_events_occurred--; - /* process events have nil as channel */ - emacs_event->event_type = process_event; - emacs_event->timestamp = 0; /* #### */ - emacs_event->event.process.process = process; + abort (); } static void diff --git a/src/event-msw.c b/src/event-msw.c index 3911ef6..d8c07f1 100644 --- a/src/event-msw.c +++ b/src/event-msw.c @@ -2264,9 +2264,7 @@ mswindows_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) VOID_TO_LISP (image_instance, ii); if (IMAGE_INSTANCEP (image_instance) && - IMAGE_INSTANCE_TYPE_P (image_instance, IMAGE_WIDGET) - && - !NILP (XIMAGE_INSTANCE_WIDGET_FACE (image_instance))) + IMAGE_INSTANCE_TYPE_P (image_instance, IMAGE_WIDGET)) { /* set colors for the buttons */ HDC hdc = (HDC)wParam; @@ -3004,7 +3002,7 @@ vars_of_event_mswindows (void) mswindows_s_dispatch_event_queue = Qnil; staticpro (&mswindows_s_dispatch_event_queue); mswindows_s_dispatch_event_queue_tail = Qnil; - pdump_wire (&mswindows_u_dispatch_event_queue_tail); + pdump_wire (&mswindows_s_dispatch_event_queue_tail); mswindows_error_caught_in_modal_loop = Qnil; staticpro (&mswindows_error_caught_in_modal_loop); diff --git a/src/events.c b/src/events.c index 7bb19c4..e08ded9 100644 --- a/src/events.c +++ b/src/events.c @@ -1059,7 +1059,7 @@ event_to_character (struct Lisp_Event *event, if (event->event_type != key_press_event) { - if (event->event_type == dead_event) abort (); + assert (event->event_type != dead_event); return -1; } if (!allow_extra_modifiers && diff --git a/src/extents.c b/src/extents.c index d0ef995..bb5fa40 100644 --- a/src/extents.c +++ b/src/extents.c @@ -4618,14 +4618,9 @@ struct report_extent_modification_closure { int speccount; }; -/* This juggling with the pointer to another file's global variable is - kind of yucky. Perhaps I should just export the variable. */ -static int *inside_change_hook_pointer; - static Lisp_Object report_extent_modification_restore (Lisp_Object buffer) { - *inside_change_hook_pointer = 0; if (current_buffer != XBUFFER (buffer)) Fset_buffer (buffer); return Qnil; @@ -4650,7 +4645,13 @@ report_extent_modification_mapper (EXTENT extent, void *arg) /* Now that we are sure to call elisp, set up an unwind-protect so inside_change_hook gets restored in case we throw. Also record the current buffer, in case we change it. Do the recording only - once. */ + once. + + One confusing thing here is that our caller never actually calls + unbind_to (closure.speccount, Qnil). This is because + map_extents_bytind() unbinds before, and with a smaller + speccount. The additional unbind_to() in + report_extent_modification() would cause XEmacs to abort. */ if (closure->speccount == -1) { closure->speccount = specpdl_depth (); @@ -4666,7 +4667,10 @@ report_extent_modification_mapper (EXTENT extent, void *arg) /* #### It's a shame that we can't use any of the existing run_hook* functions here. This is so because all of them work with symbols, to be able to retrieve default values of local hooks. - */ + + + #### Idea: we could set up a dummy symbol, and call the hook + functions on *that*. */ if (!CONSP (hook) || EQ (XCAR (hook), Qlambda)) call3 (hook, exobj, startobj, endobj); @@ -4674,6 +4678,8 @@ report_extent_modification_mapper (EXTENT extent, void *arg) { Lisp_Object tail; EXTERNAL_LIST_LOOP (tail, hook) + /* #### Shouldn't this perform the same Fset_buffer() check as + above? */ call3 (XCAR (tail), exobj, startobj, endobj); } return 0; @@ -4681,7 +4687,7 @@ report_extent_modification_mapper (EXTENT extent, void *arg) void report_extent_modification (Lisp_Object buffer, Bufpos start, Bufpos end, - int *inside, int afterp) + int afterp) { struct report_extent_modification_closure closure; @@ -4691,20 +4697,8 @@ report_extent_modification (Lisp_Object buffer, Bufpos start, Bufpos end, closure.afterp = afterp; closure.speccount = -1; - inside_change_hook_pointer = inside; - *inside = 1; - map_extents (start, end, report_extent_modification_mapper, (void *)&closure, buffer, NULL, ME_MIGHT_CALL_ELISP); - - if (closure.speccount == -1) - *inside = 0; - else - { - /* We mustn't unbind when closure.speccount != -1 because - map_extents_bytind has already done that. */ - assert (*inside == 0); - } } diff --git a/src/extents.h b/src/extents.h index 390c3e0..2a2ab9d 100644 --- a/src/extents.h +++ b/src/extents.h @@ -367,7 +367,7 @@ void process_extents_for_insertion (Lisp_Object object, Bytind opoint, Bytecount length); void process_extents_for_deletion (Lisp_Object object, Bytind from, Bytind to, int destroy_them); -void report_extent_modification (Lisp_Object, Bufpos, Bufpos, int *, int); +void report_extent_modification (Lisp_Object, Bufpos, Bufpos, int); void set_extent_glyph (EXTENT extent, Lisp_Object glyph, int endp, glyph_layout layout); diff --git a/src/file-coding.c b/src/file-coding.c index 3f5dfdd..248313a 100644 --- a/src/file-coding.c +++ b/src/file-coding.c @@ -428,7 +428,7 @@ finalize_coding_system (void *header, int for_disksave) } } -static enum eol_type +static eol_type_t symbol_to_eol_type (Lisp_Object symbol) { CHECK_SYMBOL (symbol); @@ -442,7 +442,7 @@ symbol_to_eol_type (Lisp_Object symbol) } static Lisp_Object -eol_type_to_symbol (enum eol_type type) +eol_type_to_symbol (eol_type_t type) { switch (type) { @@ -1063,7 +1063,7 @@ Define symbol ALIAS as an alias for coding system CODING-SYSTEM. } static Lisp_Object -subsidiary_coding_system (Lisp_Object coding_system, enum eol_type type) +subsidiary_coding_system (Lisp_Object coding_system, eol_type_t type) { Lisp_Coding_System *cs = XCODING_SYSTEM (coding_system); Lisp_Object new_coding_system; @@ -1404,7 +1404,7 @@ Return the coding system associated with a coding category. struct detection_state { - enum eol_type eol_type; + eol_type_t eol_type; int seen_non_ascii; int mask; #ifdef MULE @@ -1485,7 +1485,7 @@ mask_has_at_most_one_bit_p (int mask) return (mask & (mask - 1)) == 0; } -static enum eol_type +static eol_type_t detect_eol_type (struct detection_state *st, CONST unsigned char *src, unsigned int n) { @@ -1647,7 +1647,7 @@ coding_system_from_mask (int mask) void determine_real_coding_system (Lstream *stream, Lisp_Object *codesys_in_out, - enum eol_type *eol_type_in_out) + eol_type_t *eol_type_in_out) { struct detection_state decst; @@ -2007,7 +2007,7 @@ struct decoding_stream EOL type stored in CODESYS because the latter might indicate automatic EOL-type detection while the former will always indicate a particular EOL type. */ - enum eol_type eol_type; + eol_type_t eol_type; #ifdef MULE /* Additional ISO2022 information. We define the structure above because it's also needed by the detection routines. */ diff --git a/src/file-coding.h b/src/file-coding.h index 023bf57..ff70465 100644 --- a/src/file-coding.h +++ b/src/file-coding.h @@ -96,7 +96,7 @@ struct Lisp_Coding_System Lisp_Object post_read_conversion, pre_write_conversion; - enum eol_type eol_type; + eol_type_t eol_type; /* Subsidiary coding systems that specify a particular type of EOL marking, rather than autodetecting it. These will only be non-nil @@ -500,7 +500,7 @@ void set_decoding_stream_coding_system (Lstream *stream, void set_encoding_stream_coding_system (Lstream *stream, Lisp_Object codesys); void determine_real_coding_system (Lstream *stream, Lisp_Object *codesys_in_out, - enum eol_type *eol_type_in_out); + eol_type_t *eol_type_in_out); #ifndef MULE diff --git a/src/fns.c b/src/fns.c index 6cbc1be..403e6ea 100644 --- a/src/fns.c +++ b/src/fns.c @@ -1850,7 +1850,7 @@ int plists_differ (Lisp_Object a, Lisp_Object b, int nil_means_not_present, int laxp, int depth) { - int eqp = (depth == -1); /* -1 as depth means us eq, not equal. */ + int eqp = (depth == -1); /* -1 as depth means use eq, not equal. */ int la, lb, m, i, fill; Lisp_Object *keys, *vals; char *flags; diff --git a/src/frame.c b/src/frame.c index 0264e90..ccdb8ab 100644 --- a/src/frame.c +++ b/src/frame.c @@ -116,6 +116,10 @@ Lisp_Object Vframe_being_created; Lisp_Object Qframe_being_created; static void store_minibuf_frame_prop (struct frame *f, Lisp_Object val); +static struct display_line title_string_display_line; +/* Used by generate_title_string. Global because they get used so much that + the dynamic allocation time adds up. */ +static Emchar_dynarr *title_string_emchar_dynarr; EXFUN (Fset_frame_properties, 2); @@ -2674,8 +2678,8 @@ frame_conversion_internal (struct frame *f, int pixel_to_char, window = FRAME_SELECTED_WINDOW (f); - egw = max (glyph_width (Vcontinuation_glyph, Vdefault_face, 0, window), - glyph_width (Vtruncation_glyph, Vdefault_face, 0, window)); + egw = max (glyph_width (Vcontinuation_glyph, window), + glyph_width (Vtruncation_glyph, window)); egw = max (egw, cpw); bdr = 2 * f->internal_border_width; obw = FRAME_SCROLLBAR_WIDTH (f) + FRAME_THEORETICAL_LEFT_TOOLBAR_WIDTH (f) + @@ -2850,9 +2854,9 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth) { int adjustment, trunc_width, cont_width; - trunc_width = glyph_width (Vtruncation_glyph, Vdefault_face, 0, + trunc_width = glyph_width (Vtruncation_glyph, FRAME_SELECTED_WINDOW (f)); - cont_width = glyph_width (Vcontinuation_glyph, Vdefault_face, 0, + cont_width = glyph_width (Vcontinuation_glyph, FRAME_SELECTED_WINDOW (f)); adjustment = max (trunc_width, cont_width); adjustment = max (adjustment, font_width); @@ -2967,6 +2971,37 @@ change_frame_size (struct frame *f, int newheight, int newwidth, int delay) } +/* The caller is responsible for freeing the returned string. */ +static Bufbyte * +generate_title_string (struct window *w, Lisp_Object format_str, + face_index findex, int type) +{ + struct display_line *dl; + struct display_block *db; + int elt = 0; + + dl = &title_string_display_line; + db = get_display_block_from_line (dl, TEXT); + Dynarr_reset (db->runes); + + generate_formatted_string_db (format_str, Qnil, w, dl, db, findex, 0, + -1, type); + + Dynarr_reset (title_string_emchar_dynarr); + while (elt < Dynarr_length (db->runes)) + { + if (Dynarr_atp (db->runes, elt)->type == RUNE_CHAR) + Dynarr_add (title_string_emchar_dynarr, + Dynarr_atp (db->runes, elt)->object.chr.ch); + elt++; + } + + return + convert_emchar_string_into_malloced_string + (Dynarr_atp (title_string_emchar_dynarr, 0), + Dynarr_length (title_string_emchar_dynarr), 0); +} + void update_frame_title (struct frame *f) { @@ -2990,8 +3025,8 @@ update_frame_title (struct frame *f) if (HAS_FRAMEMETH_P (f, set_title_from_bufbyte)) { - title = generate_formatted_string (w, title_format, Qnil, - DEFAULT_INDEX, CURRENT_DISP); + title = generate_title_string (w, title_format, + DEFAULT_INDEX, CURRENT_DISP); FRAMEMETH (f, set_title_from_bufbyte, (f, title)); } @@ -3002,8 +3037,8 @@ update_frame_title (struct frame *f) if (title) xfree (title); - title = generate_formatted_string (w, icon_format, Qnil, - DEFAULT_INDEX, CURRENT_DISP); + title = generate_title_string (w, icon_format, + DEFAULT_INDEX, CURRENT_DISP); } FRAMEMETH (f, set_icon_name_from_bufbyte, (f, title)); } @@ -3062,6 +3097,24 @@ icon_glyph_changed (Lisp_Object glyph, Lisp_Object property, } +/***************************************************************************/ +/* */ +/* initialization */ +/* */ +/***************************************************************************/ + +void +init_frame (void) +{ +#ifndef PDUMP + if (!initialized) +#endif + { + title_string_emchar_dynarr = Dynarr_new (Emchar); + xzero (title_string_display_line); + } +} + void syms_of_frame (void) { diff --git a/src/frame.h b/src/frame.h index bba3195..c8ec325 100644 --- a/src/frame.h +++ b/src/frame.h @@ -777,4 +777,6 @@ int is_surrogate_for_selected_frame (struct frame *f); void update_frame_icon (struct frame *f); void invalidate_vertical_divider_cache_in_frame (struct frame *f); +void init_frame (void); + #endif /* _XEMACS_FRAME_H_ */ diff --git a/src/gdbinit b/src/gdbinit deleted file mode 100644 index a50968a..0000000 --- a/src/gdbinit +++ /dev/null @@ -1,477 +0,0 @@ -# -*- ksh -*- -# Copyright (C) 1998 Free Software Foundation, Inc. - -# This file is part of XEmacs. - -# XEmacs 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. - -# XEmacs 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 XEmacs; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# Author: Martin Buchholz - -# Some useful commands for debugging emacs with gdb 4.16 or better. -# Install this as your .gdbinit file in your home directory, -# or source this file from your .gdbinit -# Configure xemacs with --debug, and compile with -g. -# -# See also the question of the XEmacs FAQ, titled -# "How to Debug an XEmacs problem with a debugger". -# -# This can be used to debug XEmacs no matter how the following are -# specified: - -# USE_UNION_TYPE - -# (the above all have configure equivalents) - -# Some functions defined here require a running process, but most -# don't. Considerable effort has been expended to this end. - -# See the dbg_ C support code in src/alloc.c that allows the functions -# defined in this file to work correctly. - -set print union off -set print pretty off - -define decode_object - set $obj = (unsigned long) $arg0 - if $obj & 1 - # It's an int - set $val = $obj >> 1 - set $type = Lisp_Type_Int - else - set $type = $obj & dbg_typemask - if $type == Lisp_Type_Char - set $val = ($obj & dbg_valmask) >> dbg_gctypebits - else - # It's a record pointer - set $val = $obj - end - end - - if $type == Lisp_Type_Record - set $lheader = (struct lrecord_header *) $val - set $imp = lrecord_implementations_table[$lheader->type] - else - set $imp = -1 - end -end - -document decode_object -Usage: decode_object lisp_object -Extract implementation information from a Lisp Object. -Defines variables $val, $type and $imp. -end - -define xint -decode_object $arg0 -print ((long) $val) -end - -define xtype - decode_object $arg0 - if $type == Lisp_Type_Int - echo int\n - else - if $type == Lisp_Type_Char - echo char\n - else - if $type == Lisp_Type_Symbol - echo symbol\n - else - if $type == Lisp_Type_String - echo string\n - else - if $type == Lisp_Type_Vector - echo vector\n - else - if $type == Lisp_Type_Cons - echo cons\n - else - printf "record type: %s\n", $imp->name - # barf - end - end - end - end - end - end -end - -define lisp-shadows - run -batch -vanilla -f list-load-path-shadows -end - -document lisp-shadows -Usage: lisp-shadows -Run xemacs to check for lisp shadows -end - -define environment-to-run-temacs - unset env EMACSLOADPATH - set env EMACSBOOTSTRAPLOADPATH=../lisp/:.. - set env EMACSBOOTSTRAPMODULEPATH=../modules/:.. -end - -define run-temacs - environment-to-run-temacs - run -batch -l ../lisp/loadup.el run-temacs -q -end - -document run-temacs -Usage: run-temacs -Run temacs interactively, like xemacs. -Use this with debugging tools (like purify) that cannot deal with dumping, -or when temacs builds successfully, but xemacs does not. -end - -define update-elc - environment-to-run-temacs - run -batch -l ../lisp/update-elc.el -end - -document update-elc -Usage: update-elc -Run the core lisp byte compilation part of the build procedure. -Use when debugging temacs, not xemacs! -Use this when temacs builds successfully, but xemacs does not. -end - -define dump-temacs - environment-to-run-temacs - run -batch -l ../lisp/loadup.el dump -end - -document dump-temacs -Usage: dump-temacs -Run the dumping part of the build procedure. -Use when debugging temacs, not xemacs! -Use this when temacs builds successfully, but xemacs does not. -end - -# if you use Purify, do this: -# export PURIFYOPTIONS='-pointer-mask=0x0fffffff' - -define ldp - printf "%s", "Lisp => " - call debug_print($arg0) -end - -document ldp -Usage: ldp lisp_object -Print a Lisp Object value using the Lisp printer. -Requires a running xemacs process. -end - -define lbt -call debug_backtrace() -end - -document lbt -Usage: lbt -Print the current Lisp stack trace. -Requires a running xemacs process. -end - - -define leval -ldp Feval(Fcar(Fread_from_string(build_string($arg0),Qnil,Qnil))) -end - -document leval -Usage: leval "SEXP" -Eval a lisp expression. -Requires a running xemacs process. - -Example: -(gdb) leval "(+ 1 2)" -Lisp ==> 3 -end - - -define wtype -print $arg0->core.widget_class->core_class.class_name -end - -define xtname -print XrmQuarkToString(((Object)($arg0))->object.xrm_name) -end - -# GDB's command language makes you want to ... - -define pstruct - set $xstruct = (struct $arg0 *) $val - print $xstruct - print *$xstruct -end - -define pobj - decode_object $arg0 - if $type == Lisp_Type_Int - printf "Integer: %d\n", $val - else - if $type == Lisp_Type_Char - if $val > 32 && $val < 128 - printf "Char: %c\n", $val - else - printf "Char: %d\n", $val - end - else - if $type == Lisp_Type_String || $imp == &lrecord_string - pstruct Lisp_String - else - if $type == Lisp_Type_Cons || $imp == &lrecord_cons - pstruct Lisp_Cons - else - if $type == Lisp_Type_Symbol || $imp == &lrecord_symbol - pstruct Lisp_Symbol - printf "Symbol name: %s\n", $xstruct->name->data - else - if $type == Lisp_Type_Vector || $imp == &lrecord_vector - pstruct Lisp_Vector - printf "Vector of length %d\n", $xstruct->size - #print *($xstruct->data) @ $xstruct->size - else - if $imp == &lrecord_bit_vector - pstruct Lisp_Bit_Vector - else - if $imp == &lrecord_buffer - pstruct buffer - else - if $imp == &lrecord_char_table - pstruct Lisp_Char_Table - else - if $imp == &lrecord_char_table_entry - pstruct Lisp_Char_Table_Entry - else - if $imp == &lrecord_charset - pstruct Lisp_Charset - else - if $imp == &lrecord_coding_system - pstruct Lisp_Coding_System - else - if $imp == &lrecord_color_instance - pstruct Lisp_Color_Instance - else - if $imp == &lrecord_command_builder - pstruct command_builder - else - if $imp == &lrecord_compiled_function - pstruct Lisp_Compiled_Function - else - if $imp == &lrecord_console - pstruct console - else - if $imp == &lrecord_database - pstruct Lisp_Database - else - if $imp == &lrecord_device - pstruct device - else - if $imp == &lrecord_event - pstruct Lisp_Event - else - if $imp == &lrecord_extent - pstruct extent - else - if $imp == &lrecord_extent_auxiliary - pstruct extent_auxiliary - else - if $imp == &lrecord_extent_info - pstruct extent_info - else - if $imp == &lrecord_face - pstruct Lisp_Face - else - if $imp == &lrecord_float - pstruct Lisp_Float - else - if $imp == &lrecord_font_instance - pstruct Lisp_Font_Instance - else - if $imp == &lrecord_frame - pstruct frame - else - if $imp == &lrecord_glyph - pstruct Lisp_Glyph - else - if $imp == &lrecord_hash_table - pstruct Lisp_Hash_Table - else - if $imp == &lrecord_image_instance - pstruct Lisp_Image_Instance - else - if $imp == &lrecord_keymap - pstruct Lisp_Keymap - else - if $imp == &lrecord_lcrecord_list - pstruct lcrecord_list - else - if $imp == &lrecord_lstream - pstruct lstream - else - if $imp == &lrecord_marker - pstruct Lisp_Marker - else - if $imp == &lrecord_opaque - pstruct Lisp_Opaque - else - if $imp == &lrecord_opaque_ptr - pstruct Lisp_Opaque_Ptr - else - if $imp == &lrecord_popup_data - pstruct popup_data - else - if $imp == &lrecord_process - pstruct Lisp_Process - else - if $imp == &lrecord_range_table - pstruct Lisp_Range_Table - else - if $imp == &lrecord_specifier - pstruct Lisp_Specifier - else - if $imp == &lrecord_subr - pstruct Lisp_Subr - else - if $imp == &lrecord_symbol_value_buffer_local - pstruct symbol_value_buffer_local - else - if $imp == &lrecord_symbol_value_forward - pstruct symbol_value_forward - else - if $imp == &lrecord_symbol_value_lisp_magic - pstruct symbol_value_lisp_magic - else - if $imp == &lrecord_symbol_value_varalias - pstruct symbol_value_varalias - else - if $imp == &lrecord_toolbar_button - pstruct toolbar_button - else - if $imp == &lrecord_tooltalk_message - pstruct Lisp_Tooltalk_Message - else - if $imp == &lrecord_tooltalk_pattern - pstruct Lisp_Tooltalk_Pattern - else - if $imp == &lrecord_weak_list - pstruct weak_list - else - if $imp == &lrecord_window - pstruct window - else - if $imp == &lrecord_window_configuration - pstruct window_config - else - echo Unknown Lisp Object type\n - print $arg0 - # Barf, gag, retch - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - # Repeat after me... gdb sux, gdb sux, gdb sux... - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - # Are we having fun yet?? - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end - end -end - -document pobj -Usage: pobj lisp_object -Print the internal C structure of a underlying Lisp Object. -end - -# ------------------------------------------------------------- -# functions to test the debugging support itself. -# If you change this file, make sure the following still work... -# ------------------------------------------------------------- -define test_xtype - printf "Vemacs_major_version: " - xtype Vemacs_major_version - printf "Vhelp_char: " - xtype Vhelp_char - printf "Qnil: " - xtype Qnil - printf "Qunbound: " - xtype Qunbound - printf "Vobarray: " - xtype Vobarray - printf "Vall_weak_lists: " - xtype Vall_weak_lists - printf "Vxemacs_codename: " - xtype Vxemacs_codename -end - -define test_pobj - printf "Vemacs_major_version: " - pobj Vemacs_major_version - printf "Vhelp_char: " - pobj Vhelp_char - printf "Qnil: " - pobj Qnil - printf "Qunbound: " - pobj Qunbound - printf "Vobarray: " - pobj Vobarray - printf "Vall_weak_lists: " - pobj Vall_weak_lists - printf "Vxemacs_codename: " - pobj Vxemacs_codename -end - diff --git a/src/glyphs-eimage.c b/src/glyphs-eimage.c index 4005413..0cb977a 100644 --- a/src/glyphs-eimage.c +++ b/src/glyphs-eimage.c @@ -663,7 +663,7 @@ gif_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, height = unwind.giffile->SHeight; width = unwind.giffile->SWidth; - unwind.eimage = (unsigned char*) + unwind.eimage = (unsigned char*) xmalloc (width * height * 3 * unwind.giffile->ImageCount); if (!unwind.eimage) signal_image_error("Unable to allocate enough memory for image", instantiator); @@ -695,7 +695,7 @@ gif_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, eip = unwind.eimage + (width * height * 3 * slice) + (row * width * 3); for (j = 0; j < width; j++) { - unsigned char pixel = + unsigned char pixel = unwind.giffile->SavedImages[slice].RasterBits[(i * width) + j]; *eip++ = cmo->Colors[pixel].Red; *eip++ = cmo->Colors[pixel].Green; @@ -727,7 +727,7 @@ gif_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, unwind.giffile->SavedImages[0].ExtensionBlockCount) { timeout = (unsigned short) - ((unwind.giffile->SavedImages[0].ExtensionBlocks[0].Bytes[2] << 8) + + ((unwind.giffile->SavedImages[0].ExtensionBlocks[0].Bytes[2] << 8) + unwind.giffile-> SavedImages[0].ExtensionBlocks[0].Bytes[1]) * 10; } @@ -737,7 +737,7 @@ gif_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, if (!NILP (tid)) IMAGE_INSTANCE_PIXMAP_TIMEOUT (ii) = XINT (tid); } - + unbind_to (speccount, Qnil); } @@ -1155,7 +1155,7 @@ tiff_memory_size(thandle_t data) struct tiff_error_struct { -#if HAVE_VSNPRINTF +#ifdef HAVE_VSNPRINTF char err_str[256]; #else char err_str[1024]; /* return the error string */ @@ -1175,7 +1175,7 @@ tiff_error_func(CONST char *module, CONST char *fmt, ...) va_list vargs; va_start (vargs, fmt); -#if HAVE_VSNPRINTF +#ifdef HAVE_VSNPRINTF vsnprintf (tiff_err_data.err_str, 255, fmt, vargs); #else /* pray this doesn't overflow... */ @@ -1190,14 +1190,14 @@ static void tiff_warning_func(CONST char *module, CONST char *fmt, ...) { va_list vargs; -#if HAVE_VSNPRINTF +#ifdef HAVE_VSNPRINTF char warn_str[256]; #else char warn_str[1024]; #endif va_start (vargs, fmt); -#if HAVE_VSNPRINTF +#ifdef HAVE_VSNPRINTF vsnprintf (warn_str, 255, fmt, vargs); #else vsprintf (warn_str, fmt, vargs); diff --git a/src/glyphs-msw.c b/src/glyphs-msw.c index 00506b5..cbe62a1 100644 --- a/src/glyphs-msw.c +++ b/src/glyphs-msw.c @@ -1,5 +1,5 @@ /* mswindows-specific glyph objects. - Copyright (C) 1998, 1999 Andy Piper. + Copyright (C) 1998, 1999, 2000 Andy Piper. This file is part of XEmacs. @@ -439,18 +439,18 @@ static void set_mono_pixel ( unsigned char* bits, int bpline, int height, int x, int y, int white ) { - int index; + int i; unsigned char bitnum; /* Find the byte on which this scanline begins */ - index = (height - y - 1) * bpline; + i = (height - y - 1) * bpline; /* Find the byte containing this pixel */ - index += (x >> 3); + i += (x >> 3); /* Which bit is it? */ bitnum = (unsigned char)( 7 - (x % 8) ); if( white ) /* Turn it on */ - bits[index] |= (1<style; + /* #### consider using the default face for radio and toggle + buttons. */ if (EQ (style, Qradio)) { flags |= BS_RADIOBUTTON; @@ -2447,11 +2439,13 @@ mswindows_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiat flags |= BS_AUTOCHECKBOX; } else - flags |= BS_DEFPUSHBUTTON; + { + flags |= BS_DEFPUSHBUTTON; + } mswindows_widget_instantiate (image_instance, instantiator, pointer_fg, - pointer_bg, dest_mask, domain, "BUTTON", flags, - WS_EX_CONTROLPARENT); + pointer_bg, dest_mask, domain, "BUTTON", + flags, 0); wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii); /* set the checked state */ @@ -2465,9 +2459,9 @@ mswindows_button_instantiate (Lisp_Object image_instance, Lisp_Object instantiat SendMessage (wnd, BM_SETIMAGE, (WPARAM) (XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ? IMAGE_BITMAP : IMAGE_ICON), - (LPARAM) (XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ? - XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) : - XIMAGE_INSTANCE_MSWINDOWS_ICON (glyph))); + (XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) ? + (LPARAM) XIMAGE_INSTANCE_MSWINDOWS_BITMAP (glyph) : + (LPARAM) XIMAGE_INSTANCE_MSWINDOWS_ICON (glyph))); } } @@ -2480,8 +2474,7 @@ mswindows_edit_field_instantiate (Lisp_Object image_instance, Lisp_Object instan mswindows_widget_instantiate (image_instance, instantiator, pointer_fg, pointer_bg, dest_mask, domain, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP - | WS_BORDER, - WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT); + | WS_BORDER, WS_EX_CLIENTEDGE); } /* instantiate a progress gauge */ @@ -2494,8 +2487,7 @@ mswindows_progress_gauge_instantiate (Lisp_Object image_instance, Lisp_Object in struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); mswindows_widget_instantiate (image_instance, instantiator, pointer_fg, pointer_bg, dest_mask, domain, PROGRESS_CLASS, - WS_TABSTOP | WS_BORDER | PBS_SMOOTH, - WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT); + WS_BORDER | PBS_SMOOTH, WS_EX_CLIENTEDGE); wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii); /* set the colors */ #ifdef PBS_SETBKCOLOR @@ -2579,7 +2571,7 @@ mswindows_tree_view_instantiate (Lisp_Object image_instance, Lisp_Object instant pointer_bg, dest_mask, domain, WC_TREEVIEW, WS_TABSTOP | WS_BORDER | PBS_SMOOTH | TVS_HASLINES | TVS_HASBUTTONS, - WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT); + WS_EX_CLIENTEDGE); wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii); @@ -2602,7 +2594,7 @@ mswindows_tree_view_instantiate (Lisp_Object image_instance, Lisp_Object instant /* instantiate a tab control */ static TC_ITEM* add_tab_item (Lisp_Object image_instance, HWND wnd, Lisp_Object item, - Lisp_Object domain, int index) + Lisp_Object domain, int i) { TC_ITEM tvitem, *ret; @@ -2624,7 +2616,7 @@ static TC_ITEM* add_tab_item (Lisp_Object image_instance, tvitem.cchTextMax = strlen (tvitem.pszText); if ((ret = (TC_ITEM*)SendMessage (wnd, TCM_INSERTITEM, - index, (LPARAM)&tvitem)) < 0) + i, (LPARAM)&tvitem)) < 0) signal_simple_error ("error adding tab entry", item); return ret; @@ -2637,20 +2629,31 @@ mswindows_tab_control_instantiate (Lisp_Object image_instance, Lisp_Object insta { Lisp_Object rest; HWND wnd; - int index = 0; + int i = 0; struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); + Lisp_Object orient = find_keyword_in_vector (instantiator, Q_orientation); + unsigned int flags = WS_TABSTOP; + + if (EQ (orient, Qleft) || EQ (orient, Qright)) + { + flags |= TCS_VERTICAL | TCS_MULTILINE; + } + if (EQ (orient, Qright) || EQ (orient, Qbottom)) + { + flags |= TCS_BOTTOM; + } + mswindows_widget_instantiate (image_instance, instantiator, pointer_fg, pointer_bg, dest_mask, domain, WC_TABCONTROL, /* borders don't suit tabs so well */ - WS_TABSTOP, - WS_EX_CONTROLPARENT); + flags, 0); wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii); /* add items to the tab */ LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii))) { - add_tab_item (image_instance, wnd, XCAR (rest), domain, index); - index++; + add_tab_item (image_instance, wnd, XCAR (rest), domain, i); + i++; } } @@ -2664,7 +2667,7 @@ mswindows_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop if (EQ (prop, Q_items)) { HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii); - int index = 0; + int i = 0; Lisp_Object rest; check_valid_item_list_1 (val); @@ -2679,8 +2682,8 @@ mswindows_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop LIST_LOOP (rest, XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii))) { add_tab_item (image_instance, wnd, XCAR (rest), - IMAGE_INSTANCE_SUBWINDOW_FRAME (ii), index); - index++; + IMAGE_INSTANCE_SUBWINDOW_FRAME (ii), i); + i++; } return Qt; @@ -2707,8 +2710,7 @@ mswindows_scrollbar_instantiate (Lisp_Object image_instance, Lisp_Object instant { mswindows_widget_instantiate (image_instance, instantiator, pointer_fg, pointer_bg, dest_mask, domain, "SCROLLBAR", - 0, - WS_EX_CLIENTEDGE ); + WS_TABSTOP, WS_EX_CLIENTEDGE); } /* instantiate a combo control */ @@ -2722,8 +2724,7 @@ mswindows_combo_box_instantiate (Lisp_Object image_instance, Lisp_Object instant Lisp_Object rest; Lisp_Object data = Fplist_get (find_keyword_in_vector (instantiator, Q_properties), Q_items, Qnil); - int len; - GET_LIST_LENGTH (data, len); + int len, height; /* Maybe ought to generalise this more but it may be very windows specific. In windows the window height of a combo box is the @@ -2731,19 +2732,29 @@ mswindows_combo_box_instantiate (Lisp_Object image_instance, Lisp_Object instant before creating the window and then reset it to a single line after the window is created so that redisplay does the right thing. */ - widget_instantiate_1 (image_instance, instantiator, pointer_fg, - pointer_bg, dest_mask, domain, len + 1, 0, 0); + widget_instantiate (image_instance, instantiator, pointer_fg, + pointer_bg, dest_mask, domain); + + /* We now have everything right apart from the height. */ + default_face_font_info (domain, 0, 0, &height, 0, 0); + GET_LIST_LENGTH (data, len); + height = (height + WIDGET_BORDER_HEIGHT * 2 ) * len; + IMAGE_INSTANCE_HEIGHT (ii) = height; + + /* Now create the widget. */ mswindows_widget_instantiate (image_instance, instantiator, pointer_fg, pointer_bg, dest_mask, domain, "COMBOBOX", WS_BORDER | WS_TABSTOP | CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_HASSTRINGS | WS_VSCROLL, - WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT); - /* reset the height */ - widget_text_to_pixel_conversion (domain, - IMAGE_INSTANCE_WIDGET_FACE (ii), 1, 0, - &IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii), 0); + WS_EX_CLIENTEDGE); + /* Reset the height. layout will probably do this safely, but better make sure. */ + image_instance_layout (image_instance, + IMAGE_UNSPECIFIED_GEOMETRY, + IMAGE_UNSPECIFIED_GEOMETRY, + domain); + wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii); /* add items to the combo box */ SendMessage (wnd, CB_RESETCONTENT, 0, 0); @@ -2823,7 +2834,8 @@ mswindows_widget_set_property (Lisp_Object image_instance, Lisp_Object prop, GET_C_STRING_OS_DATA_ALLOCA (val, lparam); SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii), WM_SETTEXT, 0, (LPARAM)lparam); - return Qt; + /* We don't return Qt here so that other widget methods can be + called afterwards. */ } return Qunbound; } @@ -2846,10 +2858,10 @@ mswindows_progress_gauge_set_property (Lisp_Object image_instance, Lisp_Object p } LRESULT WINAPI -mswindows_control_wnd_proc (HWND hwnd, UINT message, +mswindows_control_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { - switch (message) + switch (msg) { case WM_NOTIFY: case WM_COMMAND: @@ -2859,9 +2871,9 @@ mswindows_control_wnd_proc (HWND hwnd, UINT message, case WM_CTLCOLORSTATIC: case WM_CTLCOLORSCROLLBAR: - return mswindows_wnd_proc (GetParent (hwnd), message, wParam, lParam); + return mswindows_wnd_proc (GetParent (hwnd), msg, wParam, lParam); default: - return DefWindowProc (hwnd, message, wParam, lParam); + return DefWindowProc (hwnd, msg, wParam, lParam); } } diff --git a/src/glyphs-widget.c b/src/glyphs-widget.c index eb399c1..2d6ed8c 100644 --- a/src/glyphs-widget.c +++ b/src/glyphs-widget.c @@ -1,5 +1,5 @@ /* Widget-specific glyph objects. - Copyright (C) 1998, 1999 Andy Piper. + Copyright (C) 1998, 1999, 2000 Andy Piper. This file is part of XEmacs. @@ -60,50 +60,20 @@ Lisp_Object Q_descriptor, Q_height, Q_width, Q_properties, Q_items; Lisp_Object Q_image, Q_text, Q_percent, Q_orientation, Q_justify, Q_border; Lisp_Object Qetched_in, Qetched_out, Qbevel_in, Qbevel_out; -#define WIDGET_BORDER_HEIGHT 4 -#define WIDGET_BORDER_WIDTH 4 - #ifdef DEBUG_WIDGETS int debug_widget_instances; #endif /* TODO: - more complex controls. - - tooltips for controls. + - tooltips for controls, especially buttons. */ -/* In windows normal windows work in pixels, dialog boxes work in +/* In MS-Windows normal windows work in pixels, dialog boxes work in dialog box units. Why? sigh. We could reuse the metrics for dialogs if this were not the case. As it is we have to position things pixel wise. I'm not even sure that X has this problem at least for buttons in groups. */ -Lisp_Object -widget_face_font_info (Lisp_Object domain, Lisp_Object face, - int *height, int *width) -{ - Lisp_Object font_instance = FACE_FONT (face, domain, Vcharset_ascii); - - if (height) - *height = XFONT_INSTANCE (font_instance)->height; - if (width) - *width = XFONT_INSTANCE (font_instance)->width; - - return font_instance; -} - -void -widget_text_to_pixel_conversion (Lisp_Object domain, Lisp_Object face, - int th, int tw, - int* height, int* width) -{ - int ch=0, cw=0; - widget_face_font_info (domain, face, &ch, &cw); - if (height) - *height = th * ch + 2 * WIDGET_BORDER_HEIGHT; - if (width) - *width = tw * cw + 2 * WIDGET_BORDER_WIDTH; -} - static int widget_possible_dest_types (void) { @@ -133,6 +103,19 @@ check_valid_orientation (Lisp_Object data) } static void +check_valid_tab_orientation (Lisp_Object data) +{ + if (!EQ (data, Qtop) + && + !EQ (data, Qbottom) + && + !EQ (data, Qleft) + && + !EQ (data, Qright)) + signal_simple_error ("unknown orientation for tab control", data); +} + +static void check_valid_justification (Lisp_Object data) { if (!EQ (data, Qleft) && !EQ (data, Qright) && !EQ (data, Qcenter)) @@ -259,17 +242,17 @@ substitute_keyword_value (Lisp_Object inst, Lisp_Object key, Lisp_Object val) } } -/* wire widget property invocations to specific widgets ... The - problem we are solving here is that when instantiators get converted - to instances they lose some type information (they just become - subwindows or widgets for example). For widgets we need to preserve - this type information so that we can do widget specific operations on - the instances. This is encoded in the widget type - field. widget_property gets invoked by decoding the primary type - (Qwidget), widget property then invokes based on the secondary type - (Qedit_field for example). It is debatable that we should wire things in this - generalised way rather than treating widgets specially in - image_instance_property. */ +/* Wire widget property invocations to specific widgets. The problem + we are solving here is that when instantiators get converted to + instances they lose some type information (they just become + subwindows or widgets for example). For widgets we need to preserve + this type information so that we can do widget specific operations + on the instances. This is encoded in the widget type + field. widget_property gets invoked by decoding the primary type + (Qwidget), _property then invokes based on the secondary + type (Qedit_field for example). It is debatable whether we should + wire things in this generalised way rather than treating widgets + specially in image_instance_property. */ static Lisp_Object widget_property (Lisp_Object image_instance, Lisp_Object prop) { @@ -302,7 +285,14 @@ widget_set_property (Lisp_Object image_instance, Lisp_Object prop, Lisp_Object v struct image_instantiator_methods* meths; Lisp_Object ret; - /* try device specific methods first ... */ + /* PIck up any generic properties that we might need to keep hold + of. */ + if (EQ (prop, Q_text)) + { + IMAGE_INSTANCE_WIDGET_TEXT (ii) = val; + } + + /* Now try device specific methods first ... */ meths = decode_device_ii_format (IMAGE_INSTANCE_DEVICE (ii), IMAGE_INSTANCE_WIDGET_TYPE (ii), ERROR_ME_NOT); @@ -329,6 +319,85 @@ widget_set_property (Lisp_Object image_instance, Lisp_Object prop, Lisp_Object v return val; } +/* Query for a widgets desired geometry. If no type specific method is + provided then use the widget text to calculate sizes. */ +static void +widget_query_geometry (Lisp_Object image_instance, + unsigned int* width, unsigned int* height, + enum image_instance_geometry disp, Lisp_Object domain) +{ + struct Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance); + struct image_instantiator_methods* meths; + + /* First just set up what we already have. */ + if (width) *width = IMAGE_INSTANCE_WIDTH (ii); + if (height) *height = IMAGE_INSTANCE_HEIGHT (ii); + + if (IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) + || + IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii)) + { + /* .. then try device specific methods ... */ + meths = decode_device_ii_format (IMAGE_INSTANCE_DEVICE (ii), + IMAGE_INSTANCE_WIDGET_TYPE (ii), + ERROR_ME_NOT); + if (meths && HAS_IIFORMAT_METH_P (meths, query_geometry)) + IIFORMAT_METH (meths, query_geometry, (image_instance, + width, height, disp, + domain)); + else + { + /* ... then format specific methods ... */ + meths = decode_device_ii_format (Qnil, IMAGE_INSTANCE_WIDGET_TYPE (ii), + ERROR_ME_NOT); + if (meths && HAS_IIFORMAT_METH_P (meths, query_geometry)) + IIFORMAT_METH (meths, query_geometry, (image_instance, + width, height, disp, + domain)); + else + { + unsigned int w, h; + + /* Then if we are allowed to resize the widget, make the + size the same as the text dimensions. */ + query_string_geometry (IMAGE_INSTANCE_WIDGET_TEXT (ii), + IMAGE_INSTANCE_WIDGET_FACE (ii), + &w, &h, 0, domain); + /* Adjust the size for borders. */ + if (IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii)) + *width = w + 2 * WIDGET_BORDER_WIDTH; + if (IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii)) + *height = h + 2 * WIDGET_BORDER_HEIGHT; + } + } + } +} + +static void +widget_layout (Lisp_Object image_instance, + unsigned int width, unsigned int height, Lisp_Object domain) +{ + struct Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance); + struct image_instantiator_methods* meths; + + /* .. then try device specific methods ... */ + meths = decode_device_ii_format (IMAGE_INSTANCE_DEVICE (ii), + IMAGE_INSTANCE_WIDGET_TYPE (ii), + ERROR_ME_NOT); + if (meths && HAS_IIFORMAT_METH_P (meths, layout)) + IIFORMAT_METH (meths, layout, (image_instance, + width, height, domain)); + else + { + /* ... then format specific methods ... */ + meths = decode_device_ii_format (Qnil, IMAGE_INSTANCE_WIDGET_TYPE (ii), + ERROR_ME_NOT); + if (meths && HAS_IIFORMAT_METH_P (meths, layout)) + IIFORMAT_METH (meths, layout, (image_instance, + width, height, domain)); + } +} + static void widget_validate (Lisp_Object instantiator) { @@ -381,8 +450,12 @@ initialize_widget_image_instance (struct Lisp_Image_Instance *ii, Lisp_Object ty /* initialize_subwindow_image_instance (ii);*/ IMAGE_INSTANCE_WIDGET_TYPE (ii) = type; IMAGE_INSTANCE_WIDGET_PROPS (ii) = Qnil; - IMAGE_INSTANCE_WIDGET_FACE (ii) = Vwidget_face; + SET_IMAGE_INSTANCE_WIDGET_FACE (ii, Qnil); IMAGE_INSTANCE_WIDGET_ITEMS (ii) = allocate_gui_item (); + IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 1; + IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 1; + IMAGE_INSTANCE_SUBWINDOW_ORIENT (ii) = 0; + IMAGE_INSTANCE_SUBWINDOW_JUSTIFY (ii) = 0; } /* Instantiate a button widget. Unfortunately instantiated widgets are @@ -392,10 +465,9 @@ initialize_widget_image_instance (struct Lisp_Image_Instance *ii, Lisp_Object ty many-to-one relationship with things you see, whereas widgets can only be one-to-one (i.e. per frame) */ void -widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator, - Lisp_Object pointer_fg, Lisp_Object pointer_bg, - int dest_mask, Lisp_Object domain, int default_textheight, - int default_pixheight, int default_textwidth) +widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, + Lisp_Object pointer_fg, Lisp_Object pointer_bg, + int dest_mask, Lisp_Object domain) { struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); Lisp_Object face = find_keyword_in_vector (instantiator, Q_face); @@ -406,6 +478,7 @@ widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator, Lisp_Object desc = find_keyword_in_vector (instantiator, Q_descriptor); Lisp_Object glyph = find_keyword_in_vector (instantiator, Q_image); Lisp_Object props = find_keyword_in_vector (instantiator, Q_properties); + Lisp_Object orient = find_keyword_in_vector (instantiator, Q_orientation); int pw=0, ph=0, tw=0, th=0; /* this just does pixel type sizing */ @@ -419,11 +492,15 @@ widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator, /* retrieve the fg and bg colors */ if (!NILP (face)) - IMAGE_INSTANCE_WIDGET_FACE (ii) = Fget_face (face); + SET_IMAGE_INSTANCE_WIDGET_FACE (ii, Fget_face (face)); /* data items for some widgets */ IMAGE_INSTANCE_WIDGET_PROPS (ii) = props; + /* Pick up the orientation before we do our first layout. */ + if (EQ (orient, Qleft) || EQ (orient, Qright) || EQ (orient, Qvertical)) + IMAGE_INSTANCE_SUBWINDOW_ORIENT (ii) = 1; + /* retrieve the gui item information. This is easy if we have been provided with a vector, more difficult if we have just been given keywords */ @@ -448,53 +525,73 @@ widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator, parse_gui_item_tree_children (items)); } - /* normalize size information */ - if (!NILP (width)) - tw = XINT (width); - if (!NILP (height)) - th = XINT (height); - if (!NILP (pixwidth)) - pw = XINT (pixwidth); - if (!NILP (pixheight)) - ph = XINT (pixheight); + /* Normalize size information. We now only assign sizes if the user + gives us some explicitly, or there are some constraints that we + can't change later on. Otherwise we postpone sizing until query + geometry gets called. */ + if (!NILP (pixwidth)) /* pixwidth takes precendent */ + { + pw = XINT (pixwidth); + IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 0; + } + else if (!NILP (width)) + { + tw = XINT (width); + IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 0; + } - /* for a widget with an image pick up the dimensions from that */ - if (!NILP (glyph)) + if (!NILP (pixheight)) + { + ph = XINT (pixheight); + IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 0; + } + else if (!NILP (height) && XINT (height) > 1) { - if (!pw && !tw) - pw = glyph_width (glyph, Qnil, DEFAULT_INDEX, domain) - + 2 * WIDGET_BORDER_WIDTH; - if (!ph && !th) - ph = glyph_height (glyph, Qnil, DEFAULT_INDEX, domain) - + 2 * WIDGET_BORDER_HEIGHT; + th = XINT (height); + IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 0; } - /* if we still don' t have sizes, guess from text size */ - if (!tw && !pw) + /* Taking the default face information when the user has specified + size in characters is probably as good as any since the widget + face is more likely to be proportional and thus give inadequate + results. Using character sizes can only ever be approximate + anyway. */ + if (tw || th) { - if (default_textwidth) - tw = default_textwidth; - else if (!NILP (IMAGE_INSTANCE_WIDGET_TEXT (ii))) - tw = XSTRING_LENGTH (IMAGE_INSTANCE_WIDGET_TEXT (ii)); + int charwidth, charheight; + default_face_font_info (domain, 0, 0, &charheight, &charwidth, 0); + if (tw) + pw = charwidth * tw; + if (th) + ph = charheight * th; } - if (!th && !ph) + /* for a widget with an image pick up the dimensions from that */ + if (!NILP (glyph)) { - if (default_textheight) - th = default_textheight; - else if (!NILP (IMAGE_INSTANCE_WIDGET_TEXT (ii))) - th = 1; - else - ph = default_pixheight; + if (!pw) + pw = glyph_width (glyph, domain) + 2 * WIDGET_BORDER_WIDTH; + if (!ph) + ph = glyph_height (glyph, domain) + 2 * WIDGET_BORDER_HEIGHT; + IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 0; + IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 0; } - - if (tw !=0 || th !=0) - widget_text_to_pixel_conversion (domain, - IMAGE_INSTANCE_WIDGET_FACE (ii), - th, tw, th ? &ph : 0, tw ? &pw : 0); - IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii) = pw; - IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii) = ph; + /* have to set the type this late in case there is no device + instantiation for a widget */ + IMAGE_INSTANCE_TYPE (ii) = IMAGE_WIDGET; + + /* When we create the widgets the window system expects a valid + size, so If we still don' t have sizes, call layout to pick them + up. If query_geometry or layout relies on the widget being in + existence then we are in catch 22. */ + image_instance_layout (image_instance, + pw ? pw : IMAGE_UNSPECIFIED_GEOMETRY, + ph ? ph : IMAGE_UNSPECIFIED_GEOMETRY, + domain); + /* Layout has already been done so we don't need to re-layout. */ + IMAGE_INSTANCE_DIRTYP (ii) = 0; + #ifdef DEBUG_WIDGETS debug_widget_instances++; stderr_out ("instantiated "); @@ -503,63 +600,67 @@ widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator, #endif } +/* tree-view geometry - get the height right */ static void -widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, - Lisp_Object pointer_fg, Lisp_Object pointer_bg, - int dest_mask, Lisp_Object domain) +tree_view_query_geometry (Lisp_Object image_instance, + unsigned int* width, unsigned int* height, + enum image_instance_geometry disp, Lisp_Object domain) { - widget_instantiate_1 (image_instance, instantiator, pointer_fg, - pointer_bg, dest_mask, domain, 1, 0, 0); -} + struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); + Lisp_Object items = IMAGE_INSTANCE_WIDGET_ITEMS (ii); -/* tree-view generic instantiation - get the height right */ -static void -tree_view_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, - Lisp_Object pointer_fg, Lisp_Object pointer_bg, - int dest_mask, Lisp_Object domain) -{ - Lisp_Object data = Fplist_get (find_keyword_in_vector (instantiator, Q_properties), - Q_items, Qnil); - int len; - GET_LIST_LENGTH (data, len); - widget_instantiate_1 (image_instance, instantiator, pointer_fg, - pointer_bg, dest_mask, domain, len + 1, 0, 0); + + if (*width) + { + /* #### what should this be. reconsider when X has tree views. */ + query_string_geometry (IMAGE_INSTANCE_WIDGET_TEXT (ii), + IMAGE_INSTANCE_WIDGET_FACE (ii), + width, 0, 0, domain); + } + if (*height) + { + int len, h; + default_face_font_info (domain, 0, 0, &h, 0, 0); + GET_LIST_LENGTH (items, len); + *height = len * h; + } } +/* Get the geometry of a tab control. This is based on the number of + items and text therin in the tab control. */ static void -tab_control_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, - Lisp_Object pointer_fg, Lisp_Object pointer_bg, - int dest_mask, Lisp_Object domain) +tab_control_query_geometry (Lisp_Object image_instance, + unsigned int* width, unsigned int* height, + enum image_instance_geometry disp, Lisp_Object domain) { - Lisp_Object data = Fplist_get (find_keyword_in_vector (instantiator, Q_properties), - Q_items, Qnil); + struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); + Lisp_Object items = IMAGE_INSTANCE_WIDGET_ITEMS (ii); Lisp_Object rest; - int len = 0; + unsigned int tw = 0, th = 0; - LIST_LOOP (rest, data) + LIST_LOOP (rest, items) { - len += 3; /* some bias */ - if (STRINGP (XCAR (rest))) - len += XSTRING_LENGTH (XCAR (rest)); - else if (VECTORP (XCAR (rest))) - { - Lisp_Object gui = gui_parse_item_keywords (XCAR (rest)); - len += XSTRING_LENGTH (XGUI_ITEM (gui)->name); - } + unsigned int h, w; + + query_string_geometry (XGUI_ITEM (XCAR (rest))->name, + IMAGE_INSTANCE_WIDGET_FACE (ii), + &w, &h, 0, domain); + tw += 2 * WIDGET_BORDER_WIDTH; /* some bias */ + tw += w; + th = max (th, h + 2 * WIDGET_BORDER_HEIGHT); } - widget_instantiate_1 (image_instance, instantiator, pointer_fg, - pointer_bg, dest_mask, domain, 0, 0, len); -} - -/* Instantiate a static control */ -static void -static_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, - Lisp_Object pointer_fg, Lisp_Object pointer_bg, - int dest_mask, Lisp_Object domain) -{ - widget_instantiate_1 (image_instance, instantiator, pointer_fg, - pointer_bg, dest_mask, domain, 0, 4, 0); + /* Fixup returned values depending on orientation. */ + if (IMAGE_INSTANCE_SUBWINDOW_ORIENT (ii)) + { + if (height) *height = tw; + if (width) *width = th; + } + else + { + if (height) *height = th; + if (width) *width = tw; + } } @@ -689,8 +790,8 @@ layout_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, LIST_LOOP (rest, items) { Lisp_Object glyph = XCAR (rest); - int gheight = glyph_height (glyph, Qnil, DEFAULT_INDEX, domain); - int gwidth = glyph_width (glyph, Qnil, DEFAULT_INDEX, domain); + int gheight = glyph_height (glyph, domain); + int gwidth = glyph_width (glyph, domain); nitems ++; if (EQ (orient, Qhorizontal)) { @@ -738,7 +839,7 @@ layout_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, XIMAGE_INSTANCE_XOFFSET (bglyph) = 10; /* Really, what should this be? */ XIMAGE_INSTANCE_YOFFSET (bglyph) = 0; - ph_adjust = (glyph_height (border, Qnil, DEFAULT_INDEX, domain) / 2); + ph_adjust = (glyph_height (border, domain) / 2); IMAGE_INSTANCE_LAYOUT_BORDER (ii) = make_int (ph_adjust); } @@ -768,8 +869,8 @@ layout_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, /* make sure the image is instantiated */ Lisp_Object glyph = XCAR (rest); Lisp_Object gii = glyph_image_instance (glyph, domain, ERROR_ME, 1); - int gwidth = glyph_width (glyph, Qnil, DEFAULT_INDEX, domain); - int gheight = glyph_height (glyph, Qnil, DEFAULT_INDEX, domain); + int gwidth = glyph_width (glyph, domain); + int gheight = glyph_height (glyph, domain); children = Fcons (gii, children); @@ -862,6 +963,8 @@ image_instantiator_format_create_glyphs_widget (void) INITIALIZE_IMAGE_INSTANTIATOR_FORMAT_NO_SYM (widget, "widget"); IIFORMAT_HAS_METHOD (widget, property); IIFORMAT_HAS_METHOD (widget, set_property); + IIFORMAT_HAS_METHOD (widget, query_geometry); + IIFORMAT_HAS_METHOD (widget, layout); /* widget image-instantiator types - buttons */ INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (button, "button"); @@ -917,7 +1020,8 @@ image_instantiator_format_create_glyphs_widget (void) INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (tree_view, "tree-view"); IIFORMAT_HAS_SHARED_METHOD (tree_view, validate, combo_box); IIFORMAT_HAS_SHARED_METHOD (tree_view, possible_dest_types, widget); - IIFORMAT_HAS_METHOD (tree_view, instantiate); + IIFORMAT_HAS_SHARED_METHOD (tree_view, instantiate, widget); + IIFORMAT_HAS_METHOD (tree_view, query_geometry); VALID_WIDGET_KEYWORDS (tree_view); VALID_GUI_KEYWORDS (tree_view); IIFORMAT_VALID_KEYWORD (tree_view, Q_properties, check_valid_item_list); @@ -926,15 +1030,17 @@ image_instantiator_format_create_glyphs_widget (void) INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (tab_control, "tab-control"); IIFORMAT_HAS_SHARED_METHOD (tab_control, validate, combo_box); IIFORMAT_HAS_SHARED_METHOD (tab_control, possible_dest_types, widget); - IIFORMAT_HAS_METHOD (tab_control, instantiate); + IIFORMAT_HAS_SHARED_METHOD (tab_control, instantiate, widget); + IIFORMAT_HAS_METHOD (tab_control, query_geometry); VALID_WIDGET_KEYWORDS (tab_control); VALID_GUI_KEYWORDS (tab_control); + IIFORMAT_VALID_KEYWORD (tab_control, Q_orientation, check_valid_tab_orientation); IIFORMAT_VALID_KEYWORD (tab_control, Q_properties, check_valid_item_list); /* labels */ INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (label, "label"); IIFORMAT_HAS_SHARED_METHOD (label, possible_dest_types, widget); - IIFORMAT_HAS_SHARED_METHOD (label, instantiate, static); + IIFORMAT_HAS_SHARED_METHOD (label, instantiate, widget); VALID_WIDGET_KEYWORDS (label); IIFORMAT_VALID_KEYWORD (label, Q_descriptor, check_valid_string); diff --git a/src/glyphs-x.c b/src/glyphs-x.c index b162822..d2dc9df 100644 --- a/src/glyphs-x.c +++ b/src/glyphs-x.c @@ -4,7 +4,7 @@ Copyright (C) 1995 Tinker Systems Copyright (C) 1995, 1996 Ben Wing Copyright (C) 1995 Sun Microsystems - Copyright (C) 1999 Andy Piper + Copyright (C) 1999, 2000 Andy Piper This file is part of XEmacs. @@ -104,13 +104,13 @@ DECLARE_IMAGE_INSTANTIATOR_FORMAT (jpeg); #endif #ifdef HAVE_TIFF DECLARE_IMAGE_INSTANTIATOR_FORMAT (tiff); -#endif +#endif #ifdef HAVE_PNG DECLARE_IMAGE_INSTANTIATOR_FORMAT (png); -#endif +#endif #ifdef HAVE_GIF DECLARE_IMAGE_INSTANTIATOR_FORMAT (gif); -#endif +#endif #ifdef HAVE_XPM DEFINE_DEVICE_IIFORMAT (x, xpm); #endif @@ -427,7 +427,7 @@ x_finalize_image_instance (struct Lisp_Image_Instance *p) IMAGE_INSTANCE_X_MASK (p) != IMAGE_INSTANCE_X_PIXMAP (p)) XFreePixmap (dpy, IMAGE_INSTANCE_X_MASK (p)); IMAGE_INSTANCE_PIXMAP_MASK (p) = 0; - + if (IMAGE_INSTANCE_X_PIXMAP_SLICES (p)) { for (i = 0; i < IMAGE_INSTANCE_PIXMAP_MAXSLICE (p); i++) @@ -445,7 +445,7 @@ x_finalize_image_instance (struct Lisp_Image_Instance *p) XFreeCursor (dpy, IMAGE_INSTANCE_X_CURSOR (p)); IMAGE_INSTANCE_X_CURSOR (p) = 0; } - + if (IMAGE_INSTANCE_X_NPIXELS (p) != 0) { XFreeColors (dpy, @@ -519,7 +519,7 @@ x_initialize_pixmap_image_instance (struct Lisp_Image_Instance *ii, { ii->data = xnew_and_zero (struct x_image_instance_data); IMAGE_INSTANCE_PIXMAP_MAXSLICE (ii) = slices; - IMAGE_INSTANCE_X_PIXMAP_SLICES (ii) = + IMAGE_INSTANCE_X_PIXMAP_SLICES (ii) = xnew_array_and_zero (Pixmap, slices); IMAGE_INSTANCE_TYPE (ii) = type; IMAGE_INSTANCE_PIXMAP_FILENAME (ii) = Qnil; @@ -945,7 +945,7 @@ x_init_image_instance_from_eimage (struct Lisp_Image_Instance *ii, for (slice = 0; slice < slices; slice++) { - ximage = convert_EImage_to_XImage (device, width, height, + ximage = convert_EImage_to_XImage (device, width, height, eimage + (width * height * 3 * slice), &pixtbl, &npixels); if (!ximage) @@ -1288,8 +1288,8 @@ xpm_free (XpmAttributes *xpmattrs) static void x_xpm_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, - Lisp_Object pointer_fg, Lisp_Object pointer_bg, - int dest_mask, Lisp_Object domain) + Lisp_Object pointer_fg, Lisp_Object pointer_bg, + int dest_mask, Lisp_Object domain) { /* This function can GC */ struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); @@ -1729,7 +1729,7 @@ autodetect_validate (Lisp_Object instantiator) static Lisp_Object autodetect_normalize (Lisp_Object instantiator, - Lisp_Object console_type) + Lisp_Object console_type) { Lisp_Object file = find_keyword_in_vector (instantiator, Q_data); Lisp_Object filename = Qnil; @@ -1820,10 +1820,10 @@ autodetect_possible_dest_types (void) static void autodetect_instantiate (Lisp_Object image_instance, - Lisp_Object instantiator, - Lisp_Object pointer_fg, - Lisp_Object pointer_bg, - int dest_mask, Lisp_Object domain) + Lisp_Object instantiator, + Lisp_Object pointer_fg, + Lisp_Object pointer_bg, + int dest_mask, Lisp_Object domain) { Lisp_Object data = find_keyword_in_vector (instantiator, Q_data); struct gcpro gcpro1, gcpro2, gcpro3; @@ -2113,8 +2113,8 @@ x_unmap_subwindow (struct Lisp_Image_Instance *p) { if (IMAGE_INSTANCE_TYPE (p) == IMAGE_SUBWINDOW) { - XUnmapWindow - (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p), + XUnmapWindow + (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p), IMAGE_INSTANCE_X_CLIPWINDOW (p)); } else /* must be a widget */ @@ -2133,7 +2133,7 @@ x_map_subwindow (struct Lisp_Image_Instance *p, int x, int y, { Window subwindow = IMAGE_INSTANCE_X_SUBWINDOW_ID (p); XMoveResizeWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p), - IMAGE_INSTANCE_X_CLIPWINDOW (p), + IMAGE_INSTANCE_X_CLIPWINDOW (p), x, y, dga->width, dga->height); XMoveWindow (IMAGE_INSTANCE_X_SUBWINDOW_DISPLAY (p), subwindow, -dga->xoffset, -dga->yoffset); @@ -2142,7 +2142,7 @@ x_map_subwindow (struct Lisp_Image_Instance *p, int x, int y, } else /* must be a widget */ { - XtConfigureWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p), + XtConfigureWidget (IMAGE_INSTANCE_X_CLIPWIDGET (p), x + IMAGE_INSTANCE_X_WIDGET_XOFFSET (p), y + IMAGE_INSTANCE_X_WIDGET_YOFFSET (p), dga->width, dga->height, 0); @@ -2160,28 +2160,23 @@ x_update_subwindow (struct Lisp_Image_Instance *p) #ifdef HAVE_WIDGETS if (IMAGE_INSTANCE_TYPE (p) == IMAGE_WIDGET) { - Arg al[5]; - widget_value* wv = gui_items_to_widget_values + widget_value* wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (p)); /* This seems ugly, but I'm not sure what else to do. */ if (EQ (IMAGE_INSTANCE_WIDGET_TYPE (p), Qtab_control)) { - update_tab_widget_face (wv, p, + update_tab_widget_face (wv, p, IMAGE_INSTANCE_SUBWINDOW_FRAME (p)); } /* update the colors and font */ update_widget_face (wv, p, IMAGE_INSTANCE_SUBWINDOW_FRAME (p)); - + /* now modify the widget */ - lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p), + lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (p), wv, True); free_widget_value_tree (wv); - /* We have to do this otherwise Motif will unceremoniously - resize us when the label gets set. */ - XtSetArg (al [0], XtNwidth, IMAGE_INSTANCE_WIDGET_WIDTH (p)); - XtSetArg (al [1], XtNheight, IMAGE_INSTANCE_WIDGET_HEIGHT (p)); - XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (p), al, 2); + /* subwindow resizing now gets done by the parent function. */ } #endif } @@ -2202,7 +2197,7 @@ x_subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, Window pw, win; XSetWindowAttributes xswa; Mask valueMask = 0; - unsigned int w = IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii), + unsigned int w = IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii), h = IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii); if (!DEVICE_X_P (XDEVICE (device))) @@ -2224,9 +2219,9 @@ x_subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, valueMask |= CWBackingStore; xswa.colormap = DefaultColormapOfScreen (xs); valueMask |= CWColormap; - + /* Create a window for clipping */ - IMAGE_INSTANCE_X_CLIPWINDOW (ii) = + IMAGE_INSTANCE_X_CLIPWINDOW (ii) = XCreateWindow (dpy, pw, 0, 0, w, h, 0, CopyFromParent, InputOutput, CopyFromParent, valueMask, &xswa); @@ -2236,7 +2231,7 @@ x_subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, 0, 0, w, h, 0, CopyFromParent, InputOutput, CopyFromParent, valueMask, &xswa); - + IMAGE_INSTANCE_SUBWINDOW_ID (ii) = (void*)win; } @@ -2270,7 +2265,7 @@ Subwindows are not currently implemented. } #endif -static void +static void x_resize_subwindow (struct Lisp_Image_Instance* ii, int w, int h) { if (IMAGE_INSTANCE_TYPE (ii) == IMAGE_SUBWINDOW) @@ -2310,28 +2305,34 @@ update_widget_face (widget_value* wv, struct Lisp_Image_Instance *ii, #ifdef LWLIB_WIDGETS_MOTIF XmFontList fontList; #endif - - Lisp_Object pixel = FACE_FOREGROUND + /* Update the foreground. */ + Lisp_Object pixel = FACE_FOREGROUND (IMAGE_INSTANCE_WIDGET_FACE (ii), domain); - XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); - + XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)), bcolor; lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel); + + /* Update the background. */ + pixel = FACE_BACKGROUND (IMAGE_INSTANCE_WIDGET_FACE (ii), + domain); + bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); + lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel); + #ifdef LWLIB_WIDGETS_MOTIF fontList = XmFontListCreate - (FONT_INSTANCE_X_FONT - (XFONT_INSTANCE (widget_face_font_info - (domain, + (FONT_INSTANCE_X_FONT + (XFONT_INSTANCE (query_string_font + (IMAGE_INSTANCE_WIDGET_TEXT (ii), IMAGE_INSTANCE_WIDGET_FACE (ii), - 0, 0))), XmSTRING_DEFAULT_CHARSET); + domain))), XmSTRING_DEFAULT_CHARSET); lw_add_widget_value_arg (wv, XmNfontList, (XtArgVal)fontList); #endif - lw_add_widget_value_arg - (wv, XtNfont, (XtArgVal)FONT_INSTANCE_X_FONT - (XFONT_INSTANCE (widget_face_font_info - (domain, + lw_add_widget_value_arg + (wv, XtNfont, (XtArgVal)FONT_INSTANCE_X_FONT + (XFONT_INSTANCE (query_string_font + (IMAGE_INSTANCE_WIDGET_TEXT (ii), IMAGE_INSTANCE_WIDGET_FACE (ii), - 0, 0)))); + domain)))); } static void @@ -2341,9 +2342,9 @@ update_tab_widget_face (widget_value* wv, struct Lisp_Image_Instance *ii, if (wv->contents) { widget_value* val = wv->contents, *cur; - + /* Give each child label the correct foreground color. */ - Lisp_Object pixel = FACE_FOREGROUND + Lisp_Object pixel = FACE_FOREGROUND (IMAGE_INSTANCE_WIDGET_FACE (ii), domain); XColor fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); @@ -2398,9 +2399,9 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, clip_wv = xmalloc_widget_value (); lw_add_widget_value_arg (clip_wv, XtNresize, False); - lw_add_widget_value_arg (clip_wv, XtNwidth, + lw_add_widget_value_arg (clip_wv, XtNwidth, (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii)); - lw_add_widget_value_arg (clip_wv, XtNheight, + lw_add_widget_value_arg (clip_wv, XtNheight, (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii)); clip_wv->enabled = True; @@ -2422,7 +2423,7 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, created so that Motif will fix up the shadow colors correctly. Once the widget is created Motif won't do this anymore...*/ - pixel = FACE_FOREGROUND + pixel = FACE_FOREGROUND (IMAGE_INSTANCE_WIDGET_FACE (ii), IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); fcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel)); @@ -2436,9 +2437,9 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, lw_add_widget_value_arg (wv, XtNforeground, fcolor.pixel); /* we cannot allow widgets to resize themselves */ lw_add_widget_value_arg (wv, XtNresize, False); - lw_add_widget_value_arg (wv, XtNwidth, + lw_add_widget_value_arg (wv, XtNwidth, (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii)); - lw_add_widget_value_arg (wv, XtNheight, + lw_add_widget_value_arg (wv, XtNheight, (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii)); /* update the font. */ update_widget_face (wv, ii, domain); @@ -2452,9 +2453,9 @@ x_widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, /* Resize the widget here so that the values do not get copied by lwlib. */ ac = 0; - XtSetArg (al [ac], XtNwidth, + XtSetArg (al [ac], XtNwidth, (Dimension)IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii)); ac++; - XtSetArg (al [ac], XtNheight, + XtSetArg (al [ac], XtNheight, (Dimension)IMAGE_INSTANCE_SUBWINDOW_HEIGHT (ii)); ac++; XtSetValues (IMAGE_INSTANCE_X_WIDGET_ID (ii), al, ac); /* because the EmacsManager is the widgets parent we have to @@ -2485,7 +2486,6 @@ x_widget_set_property (Lisp_Object image_instance, Lisp_Object prop, GET_C_STRING_OS_DATA_ALLOCA (val, str); wv->value = str; lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, False); - return Qt; } /* Modify the text properties of the widget */ @@ -2494,7 +2494,6 @@ x_widget_set_property (Lisp_Object image_instance, Lisp_Object prop, widget_value* wv = lw_get_all_values (IMAGE_INSTANCE_X_WIDGET_LWID (ii)); update_widget_face (wv, ii, IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, False); - return Qt; } return Qunbound; } @@ -2616,9 +2615,9 @@ x_edit_field_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii); widget_value* wv = xmalloc_widget_value (); - + button_item_to_widget_value (gui, wv, 1, 1); - + x_widget_instantiate (image_instance, instantiator, pointer_fg, pointer_bg, dest_mask, domain, "text-field", wv); } @@ -2634,11 +2633,11 @@ x_combo_box_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, widget_value * wv = 0; /* This is not done generically because of sizing problems under mswindows. */ - widget_instantiate_1 (image_instance, instantiator, pointer_fg, - pointer_bg, dest_mask, domain, 1, 0, 0); + widget_instantiate (image_instance, instantiator, pointer_fg, + pointer_bg, dest_mask, domain); wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii)); - + x_widget_instantiate (image_instance, instantiator, pointer_fg, pointer_bg, dest_mask, domain, "combo-box", wv); } @@ -2650,10 +2649,10 @@ x_tab_control_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, int dest_mask, Lisp_Object domain) { struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); - widget_value * wv = + widget_value * wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii)); - update_tab_widget_face (wv, ii, + update_tab_widget_face (wv, ii, IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); x_widget_instantiate (image_instance, instantiator, pointer_fg, @@ -2666,19 +2665,19 @@ x_tab_control_set_property (Lisp_Object image_instance, Lisp_Object prop, Lisp_Object val) { struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); - + if (EQ (prop, Q_items)) { widget_value * wv = 0; check_valid_item_list_1 (val); - IMAGE_INSTANCE_WIDGET_ITEMS (ii) = - Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)), + IMAGE_INSTANCE_WIDGET_ITEMS (ii) = + Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)), parse_gui_item_tree_children (val)); wv = gui_items_to_widget_values (IMAGE_INSTANCE_WIDGET_ITEMS (ii)); - - update_tab_widget_face (wv, ii, + + update_tab_widget_face (wv, ii, IMAGE_INSTANCE_SUBWINDOW_FRAME (ii)); lw_modify_all_widgets (IMAGE_INSTANCE_X_WIDGET_LWID (ii), wv, True); @@ -2699,9 +2698,9 @@ x_label_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); Lisp_Object gui = IMAGE_INSTANCE_WIDGET_ITEM (ii); widget_value* wv = xmalloc_widget_value (); - + button_item_to_widget_value (gui, wv, 1, 1); - + x_widget_instantiate (image_instance, instantiator, pointer_fg, pointer_bg, dest_mask, domain, "button", wv); } @@ -2755,13 +2754,13 @@ image_instantiator_format_create_glyphs_x (void) #endif #ifdef HAVE_TIFF IIFORMAT_VALID_CONSOLE (x, tiff); -#endif +#endif #ifdef HAVE_PNG IIFORMAT_VALID_CONSOLE (x, png); -#endif +#endif #ifdef HAVE_GIF IIFORMAT_VALID_CONSOLE (x, gif); -#endif +#endif INITIALIZE_DEVICE_IIFORMAT (x, xbm); IIFORMAT_HAS_DEVMETHOD (x, xbm, instantiate); diff --git a/src/glyphs.c b/src/glyphs.c index e099355..3639de1 100644 --- a/src/glyphs.c +++ b/src/glyphs.c @@ -3,7 +3,7 @@ Copyright (C) 1995 Tinker Systems Copyright (C) 1995, 1996 Ben Wing Copyright (C) 1995 Sun Microsystems - Copyright (C) 1998, 1999 Andy Piper + Copyright (C) 1998, 1999, 2000 Andy Piper This file is part of XEmacs. @@ -24,7 +24,8 @@ Boston, MA 02111-1307, USA. */ /* Synched up with: Not in FSF. */ -/* Written by Ben Wing and Chuck Thompson. */ +/* Written by Ben Wing and Chuck Thompson. Heavily modified / + rewritten by Andy Piper. */ #include #include "lisp.h" @@ -122,7 +123,7 @@ typedef struct image_instantiator_format_entry_dynarr * the_image_instantiator_format_entry_dynarr; -static Lisp_Object allocate_image_instance (Lisp_Object device); +static Lisp_Object allocate_image_instance (Lisp_Object device, Lisp_Object glyph); static void image_validate (Lisp_Object instantiator); static void glyph_property_was_changed (Lisp_Object glyph, Lisp_Object property, @@ -575,9 +576,9 @@ static Lisp_Object instantiate_image_instantiator (Lisp_Object device, Lisp_Object domain, Lisp_Object instantiator, Lisp_Object pointer_fg, Lisp_Object pointer_bg, - int dest_mask) + int dest_mask, Lisp_Object glyph) { - Lisp_Object ii = allocate_image_instance (device); + Lisp_Object ii = allocate_image_instance (device, glyph); struct image_instantiator_methods *meths; struct gcpro gcpro1; int methp = 0; @@ -622,6 +623,8 @@ mark_image_instance (Lisp_Object obj) struct Lisp_Image_Instance *i = XIMAGE_INSTANCE (obj); mark_object (i->name); + /* We don't mark the glyph reference since that would create a + circularity preventing GC. */ switch (IMAGE_INSTANCE_TYPE (i)) { case IMAGE_TEXT: @@ -754,13 +757,6 @@ print_image_instance (Lisp_Object obj, Lisp_Object printcharfun, break; case IMAGE_WIDGET: - /* - if (!NILP (IMAGE_INSTANCE_WIDGET_CALLBACK (ii))) - { - print_internal (IMAGE_INSTANCE_WIDGET_CALLBACK (ii), printcharfun, 0); - write_c_string (", ", printcharfun); - } - */ if (!NILP (IMAGE_INSTANCE_WIDGET_FACE (ii))) { write_c_string (" (", printcharfun); @@ -842,7 +838,11 @@ image_instance_equal (Lisp_Object obj1, Lisp_Object obj2, int depth) if (d1 != d2) return 0; - if (IMAGE_INSTANCE_TYPE (i1) != IMAGE_INSTANCE_TYPE (i2)) + if (IMAGE_INSTANCE_TYPE (i1) != IMAGE_INSTANCE_TYPE (i2) + || IMAGE_INSTANCE_WIDTH (i1) != IMAGE_INSTANCE_WIDTH (i2) + || IMAGE_INSTANCE_HEIGHT (i1) != IMAGE_INSTANCE_HEIGHT (i2) + || IMAGE_INSTANCE_XOFFSET (i1) != IMAGE_INSTANCE_XOFFSET (i2) + || IMAGE_INSTANCE_YOFFSET (i1) != IMAGE_INSTANCE_YOFFSET (i2)) return 0; if (!internal_equal (IMAGE_INSTANCE_NAME (i1), IMAGE_INSTANCE_NAME (i2), depth + 1)) @@ -863,11 +863,7 @@ image_instance_equal (Lisp_Object obj1, Lisp_Object obj2, int depth) case IMAGE_MONO_PIXMAP: case IMAGE_COLOR_PIXMAP: case IMAGE_POINTER: - if (!(IMAGE_INSTANCE_PIXMAP_WIDTH (i1) == - IMAGE_INSTANCE_PIXMAP_WIDTH (i2) && - IMAGE_INSTANCE_PIXMAP_HEIGHT (i1) == - IMAGE_INSTANCE_PIXMAP_HEIGHT (i2) && - IMAGE_INSTANCE_PIXMAP_DEPTH (i1) == + if (!(IMAGE_INSTANCE_PIXMAP_DEPTH (i1) == IMAGE_INSTANCE_PIXMAP_DEPTH (i2) && IMAGE_INSTANCE_PIXMAP_SLICE (i1) == IMAGE_INSTANCE_PIXMAP_SLICE (i2) && @@ -887,6 +883,8 @@ image_instance_equal (Lisp_Object obj1, Lisp_Object obj2, int depth) case IMAGE_WIDGET: if (!(EQ (IMAGE_INSTANCE_WIDGET_TYPE (i1), IMAGE_INSTANCE_WIDGET_TYPE (i2)) + && IMAGE_INSTANCE_SUBWINDOW_ID (i1) == + IMAGE_INSTANCE_SUBWINDOW_ID (i2) && internal_equal (IMAGE_INSTANCE_WIDGET_ITEMS (i1), IMAGE_INSTANCE_WIDGET_ITEMS (i2), depth + 1) @@ -895,6 +893,8 @@ image_instance_equal (Lisp_Object obj1, Lisp_Object obj2, int depth) depth + 1) )) return 0; + break; + case IMAGE_LAYOUT: if (IMAGE_INSTANCE_TYPE (i1) == IMAGE_LAYOUT && @@ -905,12 +905,10 @@ image_instance_equal (Lisp_Object obj1, Lisp_Object obj2, int depth) IMAGE_INSTANCE_LAYOUT_CHILDREN (i2), depth + 1))) return 0; + break; + case IMAGE_SUBWINDOW: - if (!(IMAGE_INSTANCE_SUBWINDOW_WIDTH (i1) == - IMAGE_INSTANCE_SUBWINDOW_WIDTH (i2) && - IMAGE_INSTANCE_SUBWINDOW_HEIGHT (i1) == - IMAGE_INSTANCE_SUBWINDOW_HEIGHT (i2) && - IMAGE_INSTANCE_SUBWINDOW_ID (i1) == + if (!(IMAGE_INSTANCE_SUBWINDOW_ID (i1) == IMAGE_INSTANCE_SUBWINDOW_ID (i2))) return 0; break; @@ -927,7 +925,9 @@ image_instance_hash (Lisp_Object obj, int depth) { struct Lisp_Image_Instance *i = XIMAGE_INSTANCE (obj); struct device *d = XDEVICE (i->device); - unsigned long hash = (unsigned long) d; + unsigned long hash = HASH3 ((unsigned long) d, + IMAGE_INSTANCE_WIDTH (i), + IMAGE_INSTANCE_HEIGHT (i)); switch (IMAGE_INSTANCE_TYPE (i)) { @@ -942,9 +942,7 @@ image_instance_hash (Lisp_Object obj, int depth) case IMAGE_MONO_PIXMAP: case IMAGE_COLOR_PIXMAP: case IMAGE_POINTER: - hash = HASH6 (hash, IMAGE_INSTANCE_PIXMAP_WIDTH (i), - IMAGE_INSTANCE_PIXMAP_HEIGHT (i), - IMAGE_INSTANCE_PIXMAP_DEPTH (i), + hash = HASH4 (hash, IMAGE_INSTANCE_PIXMAP_DEPTH (i), IMAGE_INSTANCE_PIXMAP_SLICE (i), internal_hash (IMAGE_INSTANCE_PIXMAP_FILENAME (i), depth + 1)); @@ -955,16 +953,15 @@ image_instance_hash (Lisp_Object obj, int depth) internal_hash (IMAGE_INSTANCE_WIDGET_TYPE (i), depth + 1), internal_hash (IMAGE_INSTANCE_WIDGET_PROPS (i), depth + 1), internal_hash (IMAGE_INSTANCE_WIDGET_ITEMS (i), depth + 1)); - case IMAGE_LAYOUT: - if (IMAGE_INSTANCE_TYPE (i) == IMAGE_LAYOUT) - hash = HASH3 (hash, - internal_hash (IMAGE_INSTANCE_LAYOUT_BORDER (i), depth + 1), - internal_hash (IMAGE_INSTANCE_LAYOUT_CHILDREN (i), - depth + 1)); case IMAGE_SUBWINDOW: - hash = HASH4 (hash, IMAGE_INSTANCE_SUBWINDOW_WIDTH (i), - IMAGE_INSTANCE_SUBWINDOW_HEIGHT (i), - (int) IMAGE_INSTANCE_SUBWINDOW_ID (i)); + hash = HASH2 (hash, (int) IMAGE_INSTANCE_SUBWINDOW_ID (i)); + break; + + case IMAGE_LAYOUT: + hash = HASH3 (hash, + internal_hash (IMAGE_INSTANCE_LAYOUT_BORDER (i), depth + 1), + internal_hash (IMAGE_INSTANCE_LAYOUT_CHILDREN (i), + depth + 1)); break; default: @@ -982,7 +979,7 @@ DEFINE_LRECORD_IMPLEMENTATION ("image-instance", image_instance, struct Lisp_Image_Instance); static Lisp_Object -allocate_image_instance (Lisp_Object device) +allocate_image_instance (Lisp_Object device, Lisp_Object glyph) { struct Lisp_Image_Instance *lp = alloc_lcrecord_type (struct Lisp_Image_Instance, &lrecord_image_instance); @@ -994,7 +991,12 @@ allocate_image_instance (Lisp_Object device) lp->name = Qnil; lp->x_offset = 0; lp->y_offset = 0; + lp->width = 0; + lp->height = 0; + lp->glyph = glyph; + MARK_IMAGE_INSTANCE_CHANGED (lp); /* So that layouts get done. */ XSETIMAGE_INSTANCE (val, lp); + MARK_GLYPHS_CHANGED; /* So that the dirty flag gets reset. */ return val; } @@ -1176,7 +1178,7 @@ make_image_instance_1 (Lisp_Object data, Lisp_Object device, if (VECTORP (data) && EQ (XVECTOR_DATA (data)[0], Qinherit)) signal_simple_error ("Inheritance not allowed here", data); ii = instantiate_image_instantiator (device, device, data, - Qnil, Qnil, dest_mask); + Qnil, Qnil, dest_mask, Qnil); RETURN_UNGCPRO (ii); } @@ -1450,12 +1452,10 @@ Return the height of the image instance, in pixels. case IMAGE_MONO_PIXMAP: case IMAGE_COLOR_PIXMAP: case IMAGE_POINTER: - return make_int (XIMAGE_INSTANCE_PIXMAP_HEIGHT (image_instance)); - case IMAGE_SUBWINDOW: case IMAGE_WIDGET: case IMAGE_LAYOUT: - return make_int (XIMAGE_INSTANCE_SUBWINDOW_HEIGHT (image_instance)); + return make_int (XIMAGE_INSTANCE_HEIGHT (image_instance)); default: return Qnil; @@ -1474,12 +1474,10 @@ Return the width of the image instance, in pixels. case IMAGE_MONO_PIXMAP: case IMAGE_COLOR_PIXMAP: case IMAGE_POINTER: - return make_int (XIMAGE_INSTANCE_PIXMAP_WIDTH (image_instance)); - case IMAGE_SUBWINDOW: case IMAGE_WIDGET: case IMAGE_LAYOUT: - return make_int (XIMAGE_INSTANCE_SUBWINDOW_WIDTH (image_instance)); + return make_int (XIMAGE_INSTANCE_WIDTH (image_instance)); default: return Qnil; @@ -1611,7 +1609,7 @@ instance is a mono pixmap; otherwise, the same image instance is returned. /* #### There should be a copy_image_instance(), which calls a device-specific method to copy the window-system subobject. */ - new = allocate_image_instance (device); + new = allocate_image_instance (device, Qnil); copy_lcrecord (XIMAGE_INSTANCE (new), XIMAGE_INSTANCE (image_instance)); /* note that if this method returns non-zero, this method MUST copy any window-system resources, so that when one image instance is @@ -1622,6 +1620,98 @@ instance is a mono pixmap; otherwise, the same image instance is returned. return new; } + +/************************************************************************/ +/* Geometry calculations */ +/************************************************************************/ + +/* Find out desired geometry of the image instance. If there is no + special function then just return the width and / or height. */ +void +image_instance_query_geometry (Lisp_Object image_instance, + unsigned int* width, unsigned int* height, + enum image_instance_geometry disp, + Lisp_Object domain) +{ + struct Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance); + Lisp_Object type; + struct image_instantiator_methods* meths; + + type = encode_image_instance_type (IMAGE_INSTANCE_TYPE (ii)); + meths = decode_device_ii_format (Qnil, type, ERROR_ME_NOT); + + if (meths && HAS_IIFORMAT_METH_P (meths, query_geometry)) + { + IIFORMAT_METH (meths, query_geometry, (image_instance, width, height, + disp, domain)); + } + else + { + if (width) + *width = IMAGE_INSTANCE_WIDTH (ii); + if (height) + *height = IMAGE_INSTANCE_HEIGHT (ii); + } +} + +/* Layout the image instance using the provided dimensions. Layout + widgets are going to do different kinds of calculations to + determine what size to give things so we could make the layout + function relatively simple to take account of that. An alternative + approach is to consider separately the two cases, one where you + don't mind what size you have (normal widgets) and one where you + want to specifiy something (layout widgets). */ +void +image_instance_layout (Lisp_Object image_instance, + unsigned int width, unsigned int height, + Lisp_Object domain) +{ + struct Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance); + Lisp_Object type; + struct image_instantiator_methods* meths; + + type = encode_image_instance_type (IMAGE_INSTANCE_TYPE (ii)); + meths = decode_device_ii_format (Qnil, type, ERROR_ME_NOT); + + /* If geometry is unspecified then get some reasonable values for it. */ + if (width == IMAGE_UNSPECIFIED_GEOMETRY + || + height == IMAGE_UNSPECIFIED_GEOMETRY) + { + unsigned int dwidth, dheight; + + /* Get the desired geometry. */ + if (meths && HAS_IIFORMAT_METH_P (meths, query_geometry)) + { + IIFORMAT_METH (meths, query_geometry, (image_instance, &dwidth, &dheight, + IMAGE_DESIRED_GEOMETRY, + domain)); + } + else + { + dwidth = IMAGE_INSTANCE_WIDTH (ii); + dheight = IMAGE_INSTANCE_HEIGHT (ii); + } + + /* Compare with allowed geometry. */ + if (width == IMAGE_UNSPECIFIED_GEOMETRY) + width = dwidth; + if (height == IMAGE_UNSPECIFIED_GEOMETRY) + height = dheight; + } + + /* At this point width and height should contain sane values. Thus + we set the glyph geometry and lay it out. */ + IMAGE_INSTANCE_WIDTH (ii) = width; + IMAGE_INSTANCE_HEIGHT (ii) = height; + + if (meths && HAS_IIFORMAT_METH_P (meths, layout)) + { + IIFORMAT_METH (meths, layout, (image_instance, width, height, domain)); + } + /* else no change to the geometry. */ +} + /************************************************************************/ /* error helpers */ @@ -1718,7 +1808,7 @@ string_possible_dest_types (void) return IMAGE_TEXT_MASK; } -/* called from autodetect_instantiate() */ +/* Called from autodetect_instantiate() */ void string_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, Lisp_Object pointer_fg, Lisp_Object pointer_bg, @@ -1726,8 +1816,9 @@ string_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, { Lisp_Object string = find_keyword_in_vector (instantiator, Q_data); struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); - - assert (!NILP (string)); + + /* Should never get here with a domain other than a window. */ + assert (!NILP (string) && WINDOWP (domain)); if (dest_mask & IMAGE_TEXT_MASK) { IMAGE_INSTANCE_TYPE (ii) = IMAGE_TEXT; @@ -1737,6 +1828,116 @@ string_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, incompatible_image_types (instantiator, dest_mask, IMAGE_TEXT_MASK); } +/* Sort out the size of the text that is being displayed. Calculating + it dynamically allows us to change the text and still see + everything. Note that the following methods are for text not string + since that is what the instantiated type is. The first method is a + helper that is used elsewhere for calculating text geometry. */ +void +query_string_geometry (Lisp_Object string, Lisp_Object face, + unsigned int* width, unsigned int* height, + unsigned int* descent, Lisp_Object domain) +{ + struct font_metric_info fm; + Charset_ID charsets[NUM_LEADING_BYTES]; + struct face_cachel frame_cachel; + struct face_cachel *cachel; + Lisp_Object frame = FW_FRAME (domain); + + /* Compute height */ + if (height) + { + /* Compute string metric info */ + find_charsets_in_bufbyte_string (charsets, + XSTRING_DATA (string), + XSTRING_LENGTH (string)); + + /* Fallback to the default face if none was provided. */ + if (!NILP (face)) + { + reset_face_cachel (&frame_cachel); + update_face_cachel_data (&frame_cachel, frame, face); + cachel = &frame_cachel; + } + else + { + cachel = WINDOW_FACE_CACHEL (XWINDOW (domain), DEFAULT_INDEX); + } + + ensure_face_cachel_complete (cachel, domain, charsets); + face_cachel_charset_font_metric_info (cachel, charsets, &fm); + + *height = fm.ascent + fm.descent; + /* #### descent only gets set if we query the height as well. */ + if (descent) + *descent = fm.descent; + } + + /* Compute width */ + if (width) + { + if (!NILP (face)) + *width = redisplay_frame_text_width_string (XFRAME (frame), + face, + 0, string, 0, -1); + else + *width = redisplay_frame_text_width_string (XFRAME (frame), + Vdefault_face, + 0, string, 0, -1); + } +} + +Lisp_Object +query_string_font (Lisp_Object string, Lisp_Object face, Lisp_Object domain) +{ + Charset_ID charsets[NUM_LEADING_BYTES]; + struct face_cachel frame_cachel; + struct face_cachel *cachel; + int i; + Lisp_Object frame = FW_FRAME (domain); + + /* Compute string font info */ + find_charsets_in_bufbyte_string (charsets, + XSTRING_DATA (string), + XSTRING_LENGTH (string)); + + reset_face_cachel (&frame_cachel); + update_face_cachel_data (&frame_cachel, frame, face); + cachel = &frame_cachel; + + ensure_face_cachel_complete (cachel, domain, charsets); + + for (i = 0; i < NUM_LEADING_BYTES; i++) + { + if (charsets[i]) + { + return FACE_CACHEL_FONT (cachel, + CHARSET_BY_LEADING_BYTE (i + + MIN_LEADING_BYTE)); + + } + } + + return Qnil; /* NOT REACHED */ +} + +static void +text_query_geometry (Lisp_Object image_instance, + unsigned int* width, unsigned int* height, + enum image_instance_geometry disp, Lisp_Object domain) +{ + struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); + unsigned int descent = 0; + + query_string_geometry (IMAGE_INSTANCE_TEXT_STRING (ii), + IMAGE_INSTANCE_FACE (ii), + width, height, &descent, domain); + + /* The descent gets set as a side effect of querying the + geometry. */ + IMAGE_INSTANCE_TEXT_DESCENT (ii) = descent; +} + /* set the properties of a string */ static Lisp_Object text_set_property (Lisp_Object image_instance, Lisp_Object prop, @@ -1777,20 +1978,12 @@ formatted_string_instantiate (Lisp_Object image_instance, Lisp_Object pointer_fg, Lisp_Object pointer_bg, int dest_mask, Lisp_Object domain) { - Lisp_Object data = find_keyword_in_vector (instantiator, Q_data); - struct Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance); - - assert (!NILP (data)); /* #### implement this */ warn_when_safe (Qunimplemented, Qnotice, "`formatted-string' not yet implemented; assuming `string'"); - if (dest_mask & IMAGE_TEXT_MASK) - { - IMAGE_INSTANCE_TYPE (ii) = IMAGE_TEXT; - IMAGE_INSTANCE_TEXT_STRING (ii) = data; - } - else - incompatible_image_types (instantiator, dest_mask, IMAGE_TEXT_MASK); + + string_instantiate (image_instance, instantiator, + pointer_fg, pointer_bg, dest_mask, domain); } @@ -2447,6 +2640,7 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec, { Lisp_Object device = DFW_DEVICE (domain); struct device *d = XDEVICE (device); + Lisp_Object glyph = IMAGE_SPECIFIER_ATTACHEE (XIMAGE_SPECIFIER (specifier)); int dest_mask = XIMAGE_SPECIFIER_ALLOWED (specifier); int pointerp = dest_mask & image_instance_type_to_mask (IMAGE_POINTER); @@ -2569,7 +2763,8 @@ image_instantiate (Lisp_Object specifier, Lisp_Object matchspec, domain, instantiator, pointer_fg, pointer_bg, - dest_mask); + dest_mask, + glyph); Fsetcar (locative, instance); /* only after the image has been instantiated do we know @@ -3163,7 +3358,8 @@ allocate_glyph (enum glyph_type type, break; case GLYPH_ICON: XIMAGE_SPECIFIER_ALLOWED (g->image) = - IMAGE_NOTHING_MASK | IMAGE_MONO_PIXMAP_MASK | IMAGE_COLOR_PIXMAP_MASK; + IMAGE_NOTHING_MASK | IMAGE_MONO_PIXMAP_MASK + | IMAGE_COLOR_PIXMAP_MASK; break; default: abort (); @@ -3296,70 +3492,52 @@ The return value will be one of 'buffer, 'pointer, or 'icon. } } -/***************************************************************************** - glyph_width +Lisp_Object +glyph_image_instance (Lisp_Object glyph, Lisp_Object domain, + Error_behavior errb, int no_quit) +{ + Lisp_Object specifier = GLYPH_IMAGE (XGLYPH (glyph)); - Return the width of the given GLYPH on the given WINDOW. If the - instance is a string then the width is calculated using the font of - the given FACE, unless a face is defined by the glyph itself. - ****************************************************************************/ -unsigned short -glyph_width (Lisp_Object glyph_or_image, Lisp_Object frame_face, - face_index window_findex, Lisp_Object window) + /* This can never return Qunbound. All glyphs have 'nothing as + a fallback. */ + Lisp_Object image_instance = specifier_instance (specifier, Qunbound, + domain, errb, no_quit, 0, + Qzero); + + return image_instance; +} + +static Lisp_Object +glyph_image_instance_maybe (Lisp_Object glyph_or_image, Lisp_Object window) { Lisp_Object instance = glyph_or_image; - Lisp_Object frame = XWINDOW (window)->frame; - /* #### We somehow need to distinguish between the user causing this - error condition and a bug causing it. */ if (GLYPHP (glyph_or_image)) instance = glyph_image_instance (glyph_or_image, window, ERROR_ME_NOT, 1); - if (!IMAGE_INSTANCEP (instance)) - return 0; - - switch (XIMAGE_INSTANCE_TYPE (instance)) - { - case IMAGE_TEXT: - { - Lisp_Object str = XIMAGE_INSTANCE_TEXT_STRING (instance); - Lisp_Object private_face = Qnil; - - if (GLYPHP (glyph_or_image)) - private_face = XGLYPH_FACE(glyph_or_image); - - if (!NILP (private_face)) - return redisplay_frame_text_width_string (XFRAME (frame), - private_face, - 0, str, 0, -1); - else - if (!NILP (frame_face)) - return redisplay_frame_text_width_string (XFRAME (frame), - frame_face, - 0, str, 0, -1); - else - return redisplay_text_width_string (XWINDOW (window), - window_findex, - 0, str, 0, -1); - } + return instance; +} - case IMAGE_MONO_PIXMAP: - case IMAGE_COLOR_PIXMAP: - case IMAGE_POINTER: - return XIMAGE_INSTANCE_PIXMAP_WIDTH (instance); +/***************************************************************************** + glyph_width - case IMAGE_NOTHING: - return 0; + Return the width of the given GLYPH on the given WINDOW. + Calculations are done based on recursively querying the geometry of + the associated image instances. + ****************************************************************************/ +unsigned short +glyph_width (Lisp_Object glyph_or_image, Lisp_Object domain) +{ + Lisp_Object instance = glyph_image_instance_maybe (glyph_or_image, + domain); + if (!IMAGE_INSTANCEP (instance)) + return 0; - case IMAGE_SUBWINDOW: - case IMAGE_WIDGET: - case IMAGE_LAYOUT: - return XIMAGE_INSTANCE_SUBWINDOW_WIDTH (instance); + if (XIMAGE_INSTANCE_DIRTYP (instance)) + image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY, + IMAGE_UNSPECIFIED_GEOMETRY, domain); - default: - abort (); - return 0; - } + return XIMAGE_INSTANCE_WIDTH (instance); } DEFUN ("glyph-width", Fglyph_width, 1, 2, 0, /* @@ -3372,126 +3550,60 @@ that redisplay will. XSETWINDOW (window, decode_window (window)); CHECK_GLYPH (glyph); - return make_int (glyph_width (glyph, Qnil, DEFAULT_INDEX, window)); -} - -#define RETURN_ASCENT 0 -#define RETURN_DESCENT 1 -#define RETURN_HEIGHT 2 - -Lisp_Object -glyph_image_instance (Lisp_Object glyph, Lisp_Object domain, - Error_behavior errb, int no_quit) -{ - Lisp_Object specifier = GLYPH_IMAGE (XGLYPH (glyph)); - - /* This can never return Qunbound. All glyphs have 'nothing as - a fallback. */ - return specifier_instance (specifier, Qunbound, domain, errb, no_quit, 0, - Qzero); + return make_int (glyph_width (glyph, window)); } -static unsigned short -glyph_height_internal (Lisp_Object glyph_or_image, Lisp_Object frame_face, - face_index window_findex, Lisp_Object window, - int function) +unsigned short +glyph_ascent (Lisp_Object glyph_or_image, Lisp_Object domain) { - Lisp_Object instance = glyph_or_image; - Lisp_Object frame = XWINDOW (window)->frame; - - if (GLYPHP (glyph_or_image)) - instance = glyph_image_instance (glyph_or_image, window, ERROR_ME_NOT, 1); - + Lisp_Object instance = glyph_image_instance_maybe (glyph_or_image, + domain); if (!IMAGE_INSTANCEP (instance)) return 0; - switch (XIMAGE_INSTANCE_TYPE (instance)) - { - case IMAGE_TEXT: - { - struct font_metric_info fm; - Lisp_Object string = XIMAGE_INSTANCE_TEXT_STRING (instance); - Charset_ID charsets[NUM_LEADING_BYTES]; - struct face_cachel frame_cachel; - struct face_cachel *cachel; - - find_charsets_in_bufbyte_string (charsets, - XSTRING_DATA (string), - XSTRING_LENGTH (string)); - - if (!NILP (frame_face)) - { - reset_face_cachel (&frame_cachel); - update_face_cachel_data (&frame_cachel, frame, frame_face); - cachel = &frame_cachel; - } - else - cachel = WINDOW_FACE_CACHEL (XWINDOW (window), window_findex); - ensure_face_cachel_complete (cachel, window, charsets); + if (XIMAGE_INSTANCE_DIRTYP (instance)) + image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY, + IMAGE_UNSPECIFIED_GEOMETRY, domain); - face_cachel_charset_font_metric_info (cachel, charsets, &fm); - - switch (function) - { - case RETURN_ASCENT: return fm.ascent; - case RETURN_DESCENT: return fm.descent; - case RETURN_HEIGHT: return fm.ascent + fm.descent; - default: - abort (); - return 0; /* not reached */ - } - } - - case IMAGE_MONO_PIXMAP: - case IMAGE_COLOR_PIXMAP: - case IMAGE_POINTER: - /* #### Ugh ugh ugh -- temporary crap */ - if (function == RETURN_ASCENT || function == RETURN_HEIGHT) - return XIMAGE_INSTANCE_PIXMAP_HEIGHT (instance); - else - return 0; - - case IMAGE_NOTHING: - return 0; - - case IMAGE_SUBWINDOW: - case IMAGE_WIDGET: - case IMAGE_LAYOUT: - /* #### Ugh ugh ugh -- temporary crap */ - if (function == RETURN_ASCENT || function == RETURN_HEIGHT) - return XIMAGE_INSTANCE_SUBWINDOW_HEIGHT (instance); - else - return 0; - - default: - abort (); - return 0; - } + if (XIMAGE_INSTANCE_TYPE (instance) == IMAGE_TEXT) + return XIMAGE_INSTANCE_TEXT_ASCENT (instance); + else + return XIMAGE_INSTANCE_HEIGHT (instance); } unsigned short -glyph_ascent (Lisp_Object glyph, Lisp_Object frame_face, - face_index window_findex, Lisp_Object window) +glyph_descent (Lisp_Object glyph_or_image, Lisp_Object domain) { - return glyph_height_internal (glyph, frame_face, window_findex, window, - RETURN_ASCENT); -} + Lisp_Object instance = glyph_image_instance_maybe (glyph_or_image, + domain); + if (!IMAGE_INSTANCEP (instance)) + return 0; -unsigned short -glyph_descent (Lisp_Object glyph, Lisp_Object frame_face, - face_index window_findex, Lisp_Object window) -{ - return glyph_height_internal (glyph, frame_face, window_findex, window, - RETURN_DESCENT); + if (XIMAGE_INSTANCE_DIRTYP (instance)) + image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY, + IMAGE_UNSPECIFIED_GEOMETRY, domain); + + if (XIMAGE_INSTANCE_TYPE (instance) == IMAGE_TEXT) + return XIMAGE_INSTANCE_TEXT_DESCENT (instance); + else + return 0; } /* strictly a convenience function. */ unsigned short -glyph_height (Lisp_Object glyph, Lisp_Object frame_face, - face_index window_findex, Lisp_Object window) +glyph_height (Lisp_Object glyph_or_image, Lisp_Object domain) { - return glyph_height_internal (glyph, frame_face, window_findex, window, - RETURN_HEIGHT); + Lisp_Object instance = glyph_image_instance_maybe (glyph_or_image, + domain); + + if (!IMAGE_INSTANCEP (instance)) + return 0; + + if (XIMAGE_INSTANCE_DIRTYP (instance)) + image_instance_layout (instance, IMAGE_UNSPECIFIED_GEOMETRY, + IMAGE_UNSPECIFIED_GEOMETRY, domain); + + return XIMAGE_INSTANCE_HEIGHT (instance); } DEFUN ("glyph-ascent", Fglyph_ascent, 1, 2, 0, /* @@ -3504,7 +3616,7 @@ that redisplay will. XSETWINDOW (window, decode_window (window)); CHECK_GLYPH (glyph); - return make_int (glyph_ascent (glyph, Qnil, DEFAULT_INDEX, window)); + return make_int (glyph_ascent (glyph, window)); } DEFUN ("glyph-descent", Fglyph_descent, 1, 2, 0, /* @@ -3517,7 +3629,7 @@ that redisplay will. XSETWINDOW (window, decode_window (window)); CHECK_GLYPH (glyph); - return make_int (glyph_descent (glyph, Qnil, DEFAULT_INDEX, window)); + return make_int (glyph_descent (glyph, window)); } /* This is redundant but I bet a lot of people expect it to exist. */ @@ -3531,22 +3643,14 @@ that redisplay will. XSETWINDOW (window, decode_window (window)); CHECK_GLYPH (glyph); - return make_int (glyph_height (glyph, Qnil, DEFAULT_INDEX, window)); + return make_int (glyph_height (glyph, window)); } -#undef RETURN_ASCENT -#undef RETURN_DESCENT -#undef RETURN_HEIGHT - static unsigned int glyph_dirty_p (Lisp_Object glyph_or_image, Lisp_Object window) { - Lisp_Object instance = glyph_or_image; - - if (GLYPHP (glyph_or_image)) - instance = glyph_image_instance (glyph_or_image, window, ERROR_ME_NOT, 1); - - return XIMAGE_INSTANCE_DIRTYP (instance); + return XIMAGE_INSTANCE_DIRTYP (glyph_image_instance_maybe + (glyph_or_image, window)); } static void @@ -3621,6 +3725,33 @@ glyph_property_was_changed (Lisp_Object glyph, Lisp_Object property, (XGLYPH (glyph)->after_change) (glyph, property, locale); } +#if 0 /* Not used for now */ +static void +glyph_query_geometry (Lisp_Object glyph_or_image, Lisp_Object window, + unsigned int* width, unsigned int* height, + enum image_instance_geometry disp, Lisp_Object domain) +{ + Lisp_Object instance = glyph_or_image; + + if (GLYPHP (glyph_or_image)) + instance = glyph_image_instance (glyph_or_image, window, ERROR_ME_NOT, 1); + + image_instance_query_geometry (instance, width, height, disp, domain); +} + +static void +glyph_layout (Lisp_Object glyph_or_image, Lisp_Object window, + unsigned int width, unsigned int height, Lisp_Object domain) +{ + Lisp_Object instance = glyph_or_image; + + if (GLYPHP (glyph_or_image)) + instance = glyph_image_instance (glyph_or_image, window, ERROR_ME_NOT, 1); + + image_instance_layout (instance, width, height, domain); +} +#endif + /***************************************************************************** * glyph cachel functions * @@ -3662,9 +3793,9 @@ update_glyph_cachel_data (struct window *w, Lisp_Object glyph, and passing it to the size functions. */ instance = glyph_image_instance (glyph, window, ERROR_ME_NOT, 1); cachel->dirty = XGLYPH_DIRTYP (glyph) = glyph_dirty_p (glyph, window); - cachel->width = glyph_width (instance, Qnil, DEFAULT_INDEX, window); - cachel->ascent = glyph_ascent (instance, Qnil, DEFAULT_INDEX, window); - cachel->descent = glyph_descent (instance, Qnil, DEFAULT_INDEX, window); + cachel->width = glyph_width (instance, window); + cachel->ascent = glyph_ascent (instance, window); + cachel->descent = glyph_descent (instance, window); } cachel->updated = 1; @@ -3781,7 +3912,7 @@ compute_glyph_cachel_usage (glyph_cachel_dynarr *glyph_cachels, /***************************************************************************** * subwindow cachel functions * *****************************************************************************/ -/* subwindows are curious in that you have to physically unmap them to +/* Subwindows are curious in that you have to physically unmap them to not display them. It is problematic deciding what to do in redisplay. We have two caches - a per-window instance cache that keeps track of subwindows on a window, these are linked to their @@ -4051,8 +4182,15 @@ update_subwindow (Lisp_Object subwindow) return; MAYBE_DEVMETH (XDEVICE (ii->device), update_subwindow, (ii)); + /* We must update the window's size as it may have been changed by + the the layout routines. We also do this here so that explicit resizing + from lisp does not result in synchronous updates. */ + MAYBE_DEVMETH (XDEVICE (ii->device), resize_subwindow, (ii, + IMAGE_INSTANCE_WIDTH (ii), + IMAGE_INSTANCE_HEIGHT (ii))); } +/* Update all the subwindows on a frame. */ void update_frame_subwindows (struct frame *f) { @@ -4094,8 +4232,8 @@ void unmap_subwindow (Lisp_Object subwindow) /* make sure we don't get expose events */ register_ignored_expose (f, cachel->x, cachel->y, cachel->width, cachel->height); - cachel->x = -1; - cachel->y = -1; + cachel->x = ~0; + cachel->y = ~0; cachel->being_displayed = 0; IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP (ii) = 0; @@ -4133,6 +4271,15 @@ void map_subwindow (Lisp_Object subwindow, int x, int y, cachel->height = dga->height; cachel->being_displayed = 1; + /* This forces any pending display changes to happen to the image + before we show it. I'm not sure whether or not we need mark as + clean here, but for now we will. */ + if (IMAGE_INSTANCE_DIRTYP (ii)) + { + update_subwindow (subwindow); + IMAGE_INSTANCE_DIRTYP (ii) = 0; + } + MAYBE_DEVMETH (XDEVICE (ii->device), map_subwindow, (ii, x, y, dga)); } @@ -4165,7 +4312,10 @@ subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP (ii) = 0; IMAGE_INSTANCE_SUBWINDOW_FRAME (ii) = frame; - /* this stuff may get overidden by the widget code */ + /* #### This stuff may get overidden by the widget code and is + actually really dumb now that we have dynamic geometry + calculations. What should really happen is that the subwindow + should query its child for and appropriate geometry. */ if (NILP (width)) IMAGE_INSTANCE_SUBWINDOW_WIDTH (ii) = 20; else @@ -4217,21 +4367,19 @@ If a value is nil that parameter is not changed. CHECK_SUBWINDOW_IMAGE_INSTANCE (subwindow); if (NILP (width)) - neww = XIMAGE_INSTANCE_SUBWINDOW_WIDTH (subwindow); + neww = XIMAGE_INSTANCE_WIDTH (subwindow); else neww = XINT (width); if (NILP (height)) - newh = XIMAGE_INSTANCE_SUBWINDOW_HEIGHT (subwindow); + newh = XIMAGE_INSTANCE_HEIGHT (subwindow); else newh = XINT (height); - - MAYBE_DEVMETH (XDEVICE (XIMAGE_INSTANCE_DEVICE (subwindow)), - resize_subwindow, (XIMAGE_INSTANCE (subwindow), neww, newh)); - - XIMAGE_INSTANCE_SUBWINDOW_HEIGHT (subwindow) = newh; - XIMAGE_INSTANCE_SUBWINDOW_WIDTH (subwindow) = neww; + /* The actual resizing gets done asychronously by + update_subwindow. */ + XIMAGE_INSTANCE_HEIGHT (subwindow) = newh; + XIMAGE_INSTANCE_WIDTH (subwindow) = neww; /* need to update the cachels as redisplay will not do this */ update_subwindow_cachel (subwindow); @@ -4370,7 +4518,7 @@ Don't use this. also might not. */ MARK_DEVICE_FRAMES_GLYPHS_CHANGED (XDEVICE (IMAGE_INSTANCE_DEVICE (ii))); - IMAGE_INSTANCE_DIRTYP (ii) = 1; + MARK_IMAGE_INSTANCE_CHANGED (ii); } } } @@ -4645,6 +4793,7 @@ image_instantiator_format_create (void) /* Do this so we can set strings. */ INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (text, "text"); IIFORMAT_HAS_METHOD (text, set_property); + IIFORMAT_HAS_METHOD (text, query_geometry); INITIALIZE_IMAGE_INSTANTIATOR_FORMAT (formatted_string, "formatted-string"); @@ -4814,8 +4963,7 @@ Faces can have their own, overriding display table. set_specifier_fallback (Vcurrent_display_table, list1 (Fcons (Qnil, Qnil))); set_specifier_caching (Vcurrent_display_table, - slot_offset (struct window, - display_table), + offsetof (struct window, display_table), some_window_value_changed, 0, 0); } diff --git a/src/glyphs.h b/src/glyphs.h index c8bb105..decfe0c 100644 --- a/src/glyphs.h +++ b/src/glyphs.h @@ -84,6 +84,18 @@ typedef struct extern const struct struct_description iim_description; +enum image_instance_geometry +{ + IMAGE_GEOMETRY, + IMAGE_DESIRED_GEOMETRY, + IMAGE_MIN_GEOMETRY, + IMAGE_MAX_GEOMETRY, + IMAGE_UNSPECIFIED_GEOMETRY = ~0 +}; + +#define WIDGET_BORDER_HEIGHT 4 +#define WIDGET_BORDER_WIDTH 4 + struct image_instantiator_methods { Lisp_Object symbol; @@ -132,12 +144,19 @@ struct image_instantiator_methods Lisp_Object property, Lisp_Object val); - /* Find out the geometry of this image instance. */ + /* Find out the desired geometry, as given by disp, of this image + instance. Actual geometry is stored in the appropriate slots in the + image instance. */ void (*query_geometry_method) (Lisp_Object image_instance, - int* width, int* height, int disp); - - /* Layout the instances children. */ - void (*layout_children_method) (Lisp_Object image_instance); + unsigned int* width, unsigned int* height, + enum image_instance_geometry disp, + Lisp_Object domain); + + /* Layout the instance and its children bounded by the provided + dimensions. */ + void (*layout_method) (Lisp_Object image_instance, + unsigned int width, unsigned int height, + Lisp_Object domain); }; /***** Calling an image-instantiator method *****/ @@ -306,10 +325,16 @@ void initialize_subwindow_image_instance (struct Lisp_Image_Instance*); void subwindow_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, Lisp_Object pointer_fg, Lisp_Object pointer_bg, int dest_mask, Lisp_Object domain); -void widget_instantiate_1 (Lisp_Object image_instance, Lisp_Object instantiator, - Lisp_Object pointer_fg, Lisp_Object pointer_bg, - int dest_mask, Lisp_Object domain, int default_textheight, - int default_pixheight, int default_textwidth); +void widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator, + Lisp_Object pointer_fg, Lisp_Object pointer_bg, + int dest_mask, Lisp_Object domain); +void image_instance_query_geometry (Lisp_Object image_instance, + unsigned int* width, unsigned int* height, + enum image_instance_geometry disp, + Lisp_Object domain); +void image_instance_layout (Lisp_Object image_instance, + unsigned int width, unsigned int height, + Lisp_Object domain); DECLARE_DOESNT_RETURN (incompatible_image_types (Lisp_Object instantiator, int given_dest_mask, @@ -372,14 +397,6 @@ enum image_instance_type IMAGE_LAYOUT }; -enum image_instance_geometry -{ - IMAGE_GEOMETRY, - IMAGE_DESIRED_GEOMETRY, - IMAGE_MIN_GEOMETRY, - IMAGE_MAX_GEOMETRY -}; - #define IMAGE_NOTHING_MASK (1 << 0) #define IMAGE_TEXT_MASK (1 << 1) #define IMAGE_MONO_PIXMAP_MASK (1 << 2) @@ -463,6 +480,9 @@ struct Lisp_Image_Instance struct lcrecord_header header; Lisp_Object device; Lisp_Object name; + /* The glyph from which we were instantiated. This is a weak + reference. */ + Lisp_Object glyph; enum image_instance_type type; unsigned int x_offset, y_offset; /* for layout purposes */ unsigned int width, height; @@ -493,11 +513,19 @@ struct Lisp_Image_Instance Lisp_Object frame; void* subwindow; /* specific devices can use this as necessary */ unsigned int being_displayed : 1; /* used to detect when needs to be unmapped */ + unsigned int v_resize : 1; /* Whether the vsize is allowed to change. */ + unsigned int h_resize : 1; /* Whether the hsize is allowed to change. */ + unsigned int orientation : 1; /* Vertical or horizontal. */ + unsigned int justification : 2; /* Left, right or center. */ union { struct { - Lisp_Object face; /* foreground and background colors */ + /* Face for colors and font. We specify this here becuase we + want people to be able to put :face in the instantiator + spec. Using gyph-face is more inconvenient, although more + general. */ + Lisp_Object face; Lisp_Object type; Lisp_Object props; /* properties */ Lisp_Object gui_item; /* a list of gui_items */ @@ -515,8 +543,18 @@ struct Lisp_Image_Instance void *data; }; +/* Layout bit-fields. */ +#define LAYOUT_HORIZONTAL 0 +#define LAYOUT_VERTICAL 1 + +#define LAYOUT_JUSTIFY_LEFT 0 +#define LAYOUT_JUSTIFY_RIGHT 1 +#define LAYOUT_JUSTIFY_CENTER 2 + +/* Accessor macros. */ #define IMAGE_INSTANCE_DEVICE(i) ((i)->device) #define IMAGE_INSTANCE_NAME(i) ((i)->name) +#define IMAGE_INSTANCE_GLYPH(i) ((i)->glyph) #define IMAGE_INSTANCE_TYPE(i) ((i)->type) #define IMAGE_INSTANCE_XOFFSET(i) ((i)->x_offset) #define IMAGE_INSTANCE_YOFFSET(i) ((i)->y_offset) @@ -526,6 +564,8 @@ struct Lisp_Image_Instance ((IMAGE_INSTANCE_TYPE (i) == IMAGE_MONO_PIXMAP) \ || (IMAGE_INSTANCE_TYPE (i) == IMAGE_COLOR_PIXMAP)) #define IMAGE_INSTANCE_DIRTYP(i) ((i)->dirty) +#define IMAGE_INSTANCE_FACE(i) \ + XGLYPH_FACE (IMAGE_INSTANCE_GLYPH (i)) #define IMAGE_INSTANCE_TEXT_STRING(i) ((i)->u.text.string) #define IMAGE_INSTANCE_TEXT_WIDTH(i) \ @@ -533,6 +573,8 @@ struct Lisp_Image_Instance #define IMAGE_INSTANCE_TEXT_HEIGHT(i) \ IMAGE_INSTANCE_HEIGHT(i) #define IMAGE_INSTANCE_TEXT_DESCENT(i) ((i)->u.text.descent) +#define IMAGE_INSTANCE_TEXT_ASCENT(i) \ + (IMAGE_INSTANCE_TEXT_HEIGHT(i) - IMAGE_INSTANCE_TEXT_DESCENT(i)) #define IMAGE_INSTANCE_PIXMAP_WIDTH(i) \ IMAGE_INSTANCE_WIDTH(i) @@ -559,6 +601,14 @@ struct Lisp_Image_Instance #define IMAGE_INSTANCE_SUBWINDOW_FRAME(i) ((i)->u.subwindow.frame) #define IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP(i) \ ((i)->u.subwindow.being_displayed) +#define IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP(i) \ +((i)->u.subwindow.v_resize) +#define IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP(i) \ +((i)->u.subwindow.h_resize) +#define IMAGE_INSTANCE_SUBWINDOW_ORIENT(i) \ +((i)->u.subwindow.orientation) +#define IMAGE_INSTANCE_SUBWINDOW_JUSTIFY(i) \ +((i)->u.subwindow.justification) #define IMAGE_INSTANCE_WIDGET_WIDTH(i) \ IMAGE_INSTANCE_WIDTH(i) @@ -566,7 +616,12 @@ struct Lisp_Image_Instance IMAGE_INSTANCE_HEIGHT(i) #define IMAGE_INSTANCE_WIDGET_TYPE(i) ((i)->u.subwindow.s.widget.type) #define IMAGE_INSTANCE_WIDGET_PROPS(i) ((i)->u.subwindow.s.widget.props) -#define IMAGE_INSTANCE_WIDGET_FACE(i) ((i)->u.subwindow.s.widget.face) +#define SET_IMAGE_INSTANCE_WIDGET_FACE(i,f) \ + ((i)->u.subwindow.s.widget.face = f) +#define IMAGE_INSTANCE_WIDGET_FACE(i) \ + (!NILP ((i)->u.subwindow.s.widget.face) ? (i)->u.subwindow.s.widget.face : \ + !NILP (IMAGE_INSTANCE_FACE (i)) ? IMAGE_INSTANCE_FACE (i) : \ + Vwidget_face) #define IMAGE_INSTANCE_WIDGET_ITEMS(i) ((i)->u.subwindow.s.widget.gui_item) #define IMAGE_INSTANCE_WIDGET_ITEM(i) \ (CONSP (IMAGE_INSTANCE_WIDGET_ITEMS (i)) ? \ @@ -581,6 +636,8 @@ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \ IMAGE_INSTANCE_DEVICE (XIMAGE_INSTANCE (i)) #define XIMAGE_INSTANCE_NAME(i) \ IMAGE_INSTANCE_NAME (XIMAGE_INSTANCE (i)) +#define XIMAGE_INSTANCE_GLYPH(i) \ + IMAGE_INSTANCE_GLYPH (XIMAGE_INSTANCE (i)) #define XIMAGE_INSTANCE_TYPE(i) \ IMAGE_INSTANCE_TYPE (XIMAGE_INSTANCE (i)) #define XIMAGE_INSTANCE_XOFFSET(i) \ @@ -589,9 +646,23 @@ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \ IMAGE_INSTANCE_YOFFSET (XIMAGE_INSTANCE (i)) #define XIMAGE_INSTANCE_DIRTYP(i) \ IMAGE_INSTANCE_DIRTYP (XIMAGE_INSTANCE (i)) +#define XIMAGE_INSTANCE_WIDTH(i) \ + IMAGE_INSTANCE_WIDTH (XIMAGE_INSTANCE (i)) +#define XIMAGE_INSTANCE_HEIGHT(i) \ + IMAGE_INSTANCE_HEIGHT (XIMAGE_INSTANCE (i)) +#define XIMAGE_INSTANCE_FACE(i) \ + IMAGE_INSTANCE_FACE (XIMAGE_INSTANCE (i)) #define XIMAGE_INSTANCE_TEXT_STRING(i) \ IMAGE_INSTANCE_TEXT_STRING (XIMAGE_INSTANCE (i)) +#define XIMAGE_INSTANCE_TEXT_WIDTH(i) \ + IMAGE_INSTANCE_TEXT_WIDTH (XIMAGE_INSTANCE (i)) +#define XIMAGE_INSTANCE_TEXT_HEIGHT(i) \ + IMAGE_INSTANCE_TEXT_HEIGHT (XIMAGE_INSTANCE (i)) +#define XIMAGE_INSTANCE_TEXT_ASCENT(i) \ + IMAGE_INSTANCE_TEXT_ASCENT (XIMAGE_INSTANCE (i)) +#define XIMAGE_INSTANCE_TEXT_DESCENT(i) \ + IMAGE_INSTANCE_TEXT_DESCENT (XIMAGE_INSTANCE (i)) #define XIMAGE_INSTANCE_PIXMAP_WIDTH(i) \ IMAGE_INSTANCE_PIXMAP_WIDTH (XIMAGE_INSTANCE (i)) @@ -630,6 +701,8 @@ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \ IMAGE_INSTANCE_WIDGET_PROPS (XIMAGE_INSTANCE (i)) #define XIMAGE_INSTANCE_WIDGET_FACE(i) \ IMAGE_INSTANCE_WIDGET_FACE (XIMAGE_INSTANCE (i)) +#define XSET_IMAGE_INSTANCE_WIDGET_FACE(i) \ + SET_IMAGE_INSTANCE_WIDGET_FACE (XIMAGE_INSTANCE (i)) #define XIMAGE_INSTANCE_WIDGET_ITEM(i) \ IMAGE_INSTANCE_WIDGET_ITEM (XIMAGE_INSTANCE (i)) #define XIMAGE_INSTANCE_WIDGET_ITEMS(i) \ @@ -652,6 +725,10 @@ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \ IMAGE_INSTANCE_SUBWINDOW_FRAME (XIMAGE_INSTANCE (i)) #define XIMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP(i) \ IMAGE_INSTANCE_SUBWINDOW_DISPLAYEDP (XIMAGE_INSTANCE (i)) +#define XIMAGE_INSTANCE_SUBWINDOW_ORIENT(i) \ + IMAGE_INSTANCE_SUBWINDOW_ORIENT (XIMAGE_INSTANCE (i)) +#define XIMAGE_INSTANCE_SUBWINDOW_JUSTIFY(i) \ + IMAGE_INSTANCE_SUBWINDOW_JUSTIFY (XIMAGE_INSTANCE (i)) #define MARK_IMAGE_INSTANCE_CHANGED(i) \ (IMAGE_INSTANCE_DIRTYP (i) = 1); @@ -758,19 +835,10 @@ extern Lisp_Object Vcontinuation_glyph, Vcontrol_arrow_glyph, Vhscroll_glyph; extern Lisp_Object Vinvisible_text_glyph, Voctal_escape_glyph, Vtruncation_glyph; extern Lisp_Object Vxemacs_logo; -unsigned short glyph_width (Lisp_Object glyph, Lisp_Object frame_face, - face_index window_findex, - Lisp_Object window); -unsigned short glyph_ascent (Lisp_Object glyph, Lisp_Object frame_face, - face_index window_findex, - Lisp_Object window); -unsigned short glyph_descent (Lisp_Object glyph, - Lisp_Object frame_face, - face_index window_findex, - Lisp_Object window); -unsigned short glyph_height (Lisp_Object glyph, Lisp_Object frame_face, - face_index window_findex, - Lisp_Object window); +unsigned short glyph_width (Lisp_Object glyph, Lisp_Object domain); +unsigned short glyph_ascent (Lisp_Object glyph, Lisp_Object domain); +unsigned short glyph_descent (Lisp_Object glyph, Lisp_Object domain); +unsigned short glyph_height (Lisp_Object glyph, Lisp_Object domain); Lisp_Object glyph_baseline (Lisp_Object glyph, Lisp_Object domain); Lisp_Object glyph_face (Lisp_Object glyph, Lisp_Object domain); int glyph_contrib_p (Lisp_Object glyph, Lisp_Object domain); @@ -789,11 +857,11 @@ Lisp_Object allocate_glyph (enum glyph_type type, void (*after_change) (Lisp_Object glyph, Lisp_Object property, Lisp_Object locale)); -Lisp_Object widget_face_font_info (Lisp_Object domain, Lisp_Object face, - int *height, int *width); -void widget_text_to_pixel_conversion (Lisp_Object domain, Lisp_Object face, - int th, int tw, - int* height, int* width); +void query_string_geometry ( Lisp_Object string, Lisp_Object face, + unsigned int* width, unsigned int* height, + unsigned int* descent, Lisp_Object domain); +Lisp_Object query_string_font (Lisp_Object string, + Lisp_Object face, Lisp_Object domain); Lisp_Object add_glyph_animated_timeout (EMACS_INT tickms, Lisp_Object device); void disable_glyph_animated_timeout (int i); @@ -868,8 +936,8 @@ typedef struct subwindow_cachel subwindow_cachel; struct subwindow_cachel { Lisp_Object subwindow; - int x, y; - int width, height; + unsigned int x, y; + unsigned int width, height; unsigned int being_displayed : 1; unsigned int updated : 1; }; @@ -890,10 +958,8 @@ int find_matching_subwindow (struct frame* f, int x, int y, int width, int heigh struct expose_ignore { - int x; - int y; - int width; - int height; + unsigned int x, y; + unsigned int width, height; struct expose_ignore *next; }; diff --git a/src/gpmevent.c b/src/gpmevent.c index 2d37ea1..0a219b9 100644 --- a/src/gpmevent.c +++ b/src/gpmevent.c @@ -452,7 +452,7 @@ static void gpm_next_event_cb (struct Lisp_Event *event) return; } - return (orig_next_event_cb (event)); + orig_next_event_cb (event); } static void hook_event_callbacks_once (void) diff --git a/src/gui.c b/src/gui.c index e43a204..a83688c 100644 --- a/src/gui.c +++ b/src/gui.c @@ -76,7 +76,7 @@ get_gui_callback (Lisp_Object data, Lisp_Object *fn, Lisp_Object *arg) if (SYMBOLP (data) || (COMPILED_FUNCTIONP (data) && XCOMPILED_FUNCTION (data)->flags.interactivep) - || (EQ (XCAR (data), Qlambda) + || (CONSP (data) && (EQ (XCAR (data), Qlambda)) && !NILP (Fassq (Qinteractive, Fcdr (Fcdr (data)))))) { *fn = Qcall_interactively; diff --git a/src/gutter.c b/src/gutter.c index d9534d0..f9d884f 100644 --- a/src/gutter.c +++ b/src/gutter.c @@ -805,8 +805,7 @@ in the gutter area. automatically knew about specifier fallbacks, so we didn't have to do it ourselves. */ set_specifier_caching (Vdefault_gutter, - slot_offset (struct window, - default_gutter), + offsetof (struct window, default_gutter), default_gutter_specs_changed, 0, 0); @@ -818,8 +817,7 @@ See `default-gutter' for a description of a valid gutter instantiator. */ ); Vgutter[TOP_GUTTER] = Fmake_specifier (Qgutter); set_specifier_caching (Vgutter[TOP_GUTTER], - slot_offset (struct window, - gutter[TOP_GUTTER]), + offsetof (struct window, gutter[TOP_GUTTER]), gutter_specs_changed, 0, 0); @@ -836,8 +834,7 @@ displayed even if you provide a value for `bottom-gutter'. */ ); Vgutter[BOTTOM_GUTTER] = Fmake_specifier (Qgutter); set_specifier_caching (Vgutter[BOTTOM_GUTTER], - slot_offset (struct window, - gutter[BOTTOM_GUTTER]), + offsetof (struct window, gutter[BOTTOM_GUTTER]), gutter_specs_changed, 0, 0); @@ -854,8 +851,7 @@ displayed even if you provide a value for `left-gutter'. */ ); Vgutter[LEFT_GUTTER] = Fmake_specifier (Qgutter); set_specifier_caching (Vgutter[LEFT_GUTTER], - slot_offset (struct window, - gutter[LEFT_GUTTER]), + offsetof (struct window, gutter[LEFT_GUTTER]), gutter_specs_changed, 0, 0); @@ -872,8 +868,7 @@ displayed even if you provide a value for `right-gutter'. */ ); Vgutter[RIGHT_GUTTER] = Fmake_specifier (Qgutter); set_specifier_caching (Vgutter[RIGHT_GUTTER], - slot_offset (struct window, - gutter[RIGHT_GUTTER]), + offsetof (struct window, gutter[RIGHT_GUTTER]), gutter_specs_changed, 0, 0); @@ -913,8 +908,7 @@ is the default. */ ); Vdefault_gutter_height = Fmake_specifier (Qgutter_size); set_specifier_caching (Vdefault_gutter_height, - slot_offset (struct window, - default_gutter_height), + offsetof (struct window, default_gutter_height), default_gutter_size_changed_in_window, 0, 0); @@ -926,8 +920,7 @@ See `default-gutter-height' for more information. */ ); Vdefault_gutter_width = Fmake_specifier (Qnatnum); set_specifier_caching (Vdefault_gutter_width, - slot_offset (struct window, - default_gutter_width), + offsetof (struct window, default_gutter_width), default_gutter_size_changed_in_window, 0, 0); @@ -940,8 +933,7 @@ See `default-gutter-height' for more information. */ ); Vgutter_size[TOP_GUTTER] = Fmake_specifier (Qgutter_size); set_specifier_caching (Vgutter_size[TOP_GUTTER], - slot_offset (struct window, - gutter_size[TOP_GUTTER]), + offsetof (struct window, gutter_size[TOP_GUTTER]), gutter_geometry_changed_in_window, 0, 0); @@ -954,8 +946,7 @@ See `default-gutter-height' for more information. */ ); Vgutter_size[BOTTOM_GUTTER] = Fmake_specifier (Qgutter_size); set_specifier_caching (Vgutter_size[BOTTOM_GUTTER], - slot_offset (struct window, - gutter_size[BOTTOM_GUTTER]), + offsetof (struct window, gutter_size[BOTTOM_GUTTER]), gutter_geometry_changed_in_window, 0, 0); @@ -968,8 +959,7 @@ See `default-gutter-height' for more information. */ ); Vgutter_size[LEFT_GUTTER] = Fmake_specifier (Qnatnum); set_specifier_caching (Vgutter_size[LEFT_GUTTER], - slot_offset (struct window, - gutter_size[LEFT_GUTTER]), + offsetof (struct window, gutter_size[LEFT_GUTTER]), gutter_geometry_changed_in_window, 0, 0); @@ -982,8 +972,7 @@ See `default-gutter-height' for more information. */ ); Vgutter_size[RIGHT_GUTTER] = Fmake_specifier (Qnatnum); set_specifier_caching (Vgutter_size[RIGHT_GUTTER], - slot_offset (struct window, - gutter_size[RIGHT_GUTTER]), + offsetof (struct window, gutter_size[RIGHT_GUTTER]), gutter_geometry_changed_in_window, 0, 0); @@ -1036,8 +1025,7 @@ instead. */ ); Vdefault_gutter_border_width = Fmake_specifier (Qnatnum); set_specifier_caching (Vdefault_gutter_border_width, - slot_offset (struct window, - default_gutter_border_width), + offsetof (struct window, default_gutter_border_width), default_gutter_border_width_changed_in_window, 0, 0); @@ -1050,8 +1038,8 @@ See `default-gutter-height' for more information. */ ); Vgutter_border_width[TOP_GUTTER] = Fmake_specifier (Qnatnum); set_specifier_caching (Vgutter_border_width[TOP_GUTTER], - slot_offset (struct window, - gutter_border_width[TOP_GUTTER]), + offsetof (struct window, + gutter_border_width[TOP_GUTTER]), gutter_geometry_changed_in_window, 0, 0); @@ -1064,8 +1052,8 @@ See `default-gutter-height' for more information. */ ); Vgutter_border_width[BOTTOM_GUTTER] = Fmake_specifier (Qnatnum); set_specifier_caching (Vgutter_border_width[BOTTOM_GUTTER], - slot_offset (struct window, - gutter_border_width[BOTTOM_GUTTER]), + offsetof (struct window, + gutter_border_width[BOTTOM_GUTTER]), gutter_geometry_changed_in_window, 0, 0); @@ -1078,8 +1066,8 @@ See `default-gutter-height' for more information. */ ); Vgutter_border_width[LEFT_GUTTER] = Fmake_specifier (Qnatnum); set_specifier_caching (Vgutter_border_width[LEFT_GUTTER], - slot_offset (struct window, - gutter_border_width[LEFT_GUTTER]), + offsetof (struct window, + gutter_border_width[LEFT_GUTTER]), gutter_geometry_changed_in_window, 0, 0); @@ -1092,8 +1080,8 @@ See `default-gutter-height' for more information. */ ); Vgutter_border_width[RIGHT_GUTTER] = Fmake_specifier (Qnatnum); set_specifier_caching (Vgutter_border_width[RIGHT_GUTTER], - slot_offset (struct window, - gutter_border_width[RIGHT_GUTTER]), + offsetof (struct window, + gutter_border_width[RIGHT_GUTTER]), gutter_geometry_changed_in_window, 0, 0); @@ -1133,8 +1121,8 @@ visibility specifiers have a fallback value of true. */ ); Vdefault_gutter_visible_p = Fmake_specifier (Qboolean); set_specifier_caching (Vdefault_gutter_visible_p, - slot_offset (struct window, - default_gutter_visible_p), + offsetof (struct window, + default_gutter_visible_p), default_gutter_visible_p_changed_in_window, 0, 0); @@ -1147,8 +1135,8 @@ See `default-gutter-visible-p' for more information. */ ); Vgutter_visible_p[TOP_GUTTER] = Fmake_specifier (Qboolean); set_specifier_caching (Vgutter_visible_p[TOP_GUTTER], - slot_offset (struct window, - gutter_visible_p[TOP_GUTTER]), + offsetof (struct window, + gutter_visible_p[TOP_GUTTER]), gutter_geometry_changed_in_window, 0, 0); @@ -1161,8 +1149,8 @@ See `default-gutter-visible-p' for more information. */ ); Vgutter_visible_p[BOTTOM_GUTTER] = Fmake_specifier (Qboolean); set_specifier_caching (Vgutter_visible_p[BOTTOM_GUTTER], - slot_offset (struct window, - gutter_visible_p[BOTTOM_GUTTER]), + offsetof (struct window, + gutter_visible_p[BOTTOM_GUTTER]), gutter_geometry_changed_in_window, 0, 0); @@ -1175,8 +1163,8 @@ See `default-gutter-visible-p' for more information. */ ); Vgutter_visible_p[LEFT_GUTTER] = Fmake_specifier (Qboolean); set_specifier_caching (Vgutter_visible_p[LEFT_GUTTER], - slot_offset (struct window, - gutter_visible_p[LEFT_GUTTER]), + offsetof (struct window, + gutter_visible_p[LEFT_GUTTER]), gutter_geometry_changed_in_window, 0, 0); @@ -1189,8 +1177,8 @@ See `default-gutter-visible-p' for more information. */ ); Vgutter_visible_p[RIGHT_GUTTER] = Fmake_specifier (Qboolean); set_specifier_caching (Vgutter_visible_p[RIGHT_GUTTER], - slot_offset (struct window, - gutter_visible_p[RIGHT_GUTTER]), + offsetof (struct window, + gutter_visible_p[RIGHT_GUTTER]), gutter_geometry_changed_in_window, 0, 0); diff --git a/src/input-method-motif.c b/src/input-method-motif.c index a1cb446..d209e88 100644 --- a/src/input-method-motif.c +++ b/src/input-method-motif.c @@ -115,9 +115,10 @@ XIM_init_frame (struct frame *f) default face, rather than foreground and background resources, or that the user can use set-frame-parameters to set xic attributes */ -#define res(name, class, representation, field, default_value) \ - { name, class, representation, sizeof(xim_resources.field), \ - XtOffsetOf(xim_resources_t, field), XtRString, default_value } +#define res(name, class, representation, field, default_value) \ + { name, class, representation, sizeof(xim_resources.field), \ + XtOffsetOf(xim_resources_t, field), \ + XtRString, (XtPointer) (default_value) } static XtResource resources[] = { diff --git a/src/insdel.c b/src/insdel.c index bec55be..3313316 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -2085,7 +2085,12 @@ multiple_change_finish_up (Lisp_Object buffer) of the specified region, that will also be handled correctly. begin_multiple_change() returns a number (actually a specpdl depth) - that you must pass to end_multiple_change() when you are done. */ + that you must pass to end_multiple_change() when you are done. + + FSF Emacs 20 implements a similar feature, accessible from Lisp + through a `combine-after-change-calls' special form, which is + essentially equivalent to this function. We should consider + whether we want to introduce a similar Lisp form. */ int begin_multiple_change (struct buffer *buf, Bufpos start, Bufpos end) @@ -2133,7 +2138,8 @@ change_function_restore (Lisp_Object buffer) /* We should first reset the variable and then change the buffer, because Fset_buffer() can throw. */ inside_change_hook = 0; - Fset_buffer (buffer); + if (XBUFFER (buffer) != current_buffer) + Fset_buffer (buffer); return Qnil; } @@ -2183,6 +2189,7 @@ signal_before_change (struct buffer *buf, Bufpos start, Bufpos end) if (!inside_change_hook) { Lisp_Object buffer; + int speccount; /* Are we in a multiple-change session? */ if (buf->text->changes->in_multiple_change && @@ -2220,6 +2227,9 @@ signal_before_change (struct buffer *buf, Bufpos start, Bufpos end) } /* Now in any case run the before-change-functions if any. */ + speccount = specpdl_depth (); + record_unwind_protect (change_function_restore, Fcurrent_buffer ()); + inside_change_hook = 1; MAP_INDIRECT_BUFFERS (buf, mbuf, bufcons) { @@ -2228,25 +2238,28 @@ signal_before_change (struct buffer *buf, Bufpos start, Bufpos end) /* Obsolete, for compatibility */ || !NILP (symbol_value_in_buffer (Qbefore_change_function, buffer))) { - int speccount = specpdl_depth (); - record_unwind_protect (change_function_restore, Fcurrent_buffer ()); set_buffer_internal (buf); - inside_change_hook = 1; va_run_hook_with_args (Qbefore_change_functions, 2, make_int (start), make_int (end)); /* Obsolete, for compatibility */ va_run_hook_with_args (Qbefore_change_function, 2, make_int (start), make_int (end)); - unbind_to (speccount, Qnil); } } + /* Make sure endpoints remain valid. before-change-functions + might have modified the buffer. */ + if (start < BUF_BEGV (buf)) start = BUF_BEGV (buf); + if (start > BUF_ZV (buf)) start = BUF_ZV (buf); + if (end < BUF_BEGV (buf)) end = BUF_BEGV (buf); + if (end > BUF_ZV (buf)) end = BUF_ZV (buf); + MAP_INDIRECT_BUFFERS (buf, mbuf, bufcons) { XSETBUFFER (buffer, mbuf); - report_extent_modification (buffer, start, end, - &inside_change_hook, 0); + report_extent_modification (buffer, start, end, 0); } + unbind_to (speccount, Qnil); /* Only now do we indicate that the before-change-functions have been called, in case some function throws out. */ @@ -2283,6 +2296,7 @@ signal_after_change (struct buffer *buf, Bufpos start, Bufpos orig_end, if (!inside_change_hook) { Lisp_Object buffer; + int speccount; if (buf->text->changes->in_multiple_change && buf->text->changes->mc_begin != 0) @@ -2295,6 +2309,9 @@ signal_after_change (struct buffer *buf, Bufpos start, Bufpos orig_end, return; /* after-change-functions signalled when all changes done */ } + speccount = specpdl_depth (); + record_unwind_protect (change_function_restore, Fcurrent_buffer ()); + inside_change_hook = 1; MAP_INDIRECT_BUFFERS (buf, mbuf, bufcons) { XSETBUFFER (buffer, mbuf); @@ -2303,10 +2320,7 @@ signal_after_change (struct buffer *buf, Bufpos start, Bufpos orig_end, /* Obsolete, for compatibility */ || !NILP (symbol_value_in_buffer (Qafter_change_function, buffer))) { - int speccount = specpdl_depth (); - record_unwind_protect (change_function_restore, Fcurrent_buffer ()); set_buffer_internal (buf); - inside_change_hook = 1; /* The actual after-change functions take slightly different arguments than what we were passed. */ va_run_hook_with_args (Qafter_change_functions, 3, @@ -2316,16 +2330,24 @@ signal_after_change (struct buffer *buf, Bufpos start, Bufpos orig_end, va_run_hook_with_args (Qafter_change_function, 3, make_int (start), make_int (new_end), make_int (orig_end - start)); - unbind_to (speccount, Qnil); } } + /* Make sure endpoints remain valid. after-change-functions + might have modified the buffer. */ + if (start < BUF_BEGV (buf)) start = BUF_BEGV (buf); + if (start > BUF_ZV (buf)) start = BUF_ZV (buf); + if (new_end < BUF_BEGV (buf)) new_end = BUF_BEGV (buf); + if (new_end > BUF_ZV (buf)) new_end = BUF_ZV (buf); + if (orig_end < BUF_BEGV (buf)) orig_end = BUF_BEGV (buf); + if (orig_end > BUF_ZV (buf)) orig_end = BUF_ZV (buf); + MAP_INDIRECT_BUFFERS (buf, mbuf, bufcons) { XSETBUFFER (buffer, mbuf); - report_extent_modification (buffer, start, new_end, - &inside_change_hook, 1); + report_extent_modification (buffer, start, new_end, 1); } + unbind_to (speccount, Qnil); /* sets inside_change_hook back to 0 */ } } diff --git a/src/keymap.c b/src/keymap.c index 04b6b46..2fd38ef 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -2116,7 +2116,7 @@ lookup_keys (Lisp_Object keymap, int nkeys, Lisp_Object *keys, if (nkeys == 0) return Qnil; - if (nkeys < (countof (kkk))) + if (nkeys < countof (kkk)) raw_keys = kkk; else raw_keys = alloca_array (struct key_data, nkeys); @@ -2146,7 +2146,7 @@ lookup_events (Lisp_Object event_head, int nmaps, Lisp_Object keymaps[], nkeys = event_chain_count (event_head); - if (nkeys < (countof (kkk))) + if (nkeys < countof (kkk)) raw_keys = kkk; else raw_keys = alloca_array (struct key_data, nkeys); @@ -2372,8 +2372,7 @@ get_relevant_keymaps (Lisp_Object keys, get_relevant_extent_keymaps (Fevent_modeline_position (terminal), XBUFFER (buffer)->generated_modeline_string, - /* #### third arg should maybe be a glyph. */ - Qnil, &closure); + Fevent_glyph_extent (terminal), &closure); if (!UNBOUNDP (map) && !NILP (map)) relevant_map_push (get_keymap (map, 1, 1), &closure); diff --git a/src/libsst.c b/src/libsst.c index 677852d..4180167 100644 --- a/src/libsst.c +++ b/src/libsst.c @@ -20,29 +20,25 @@ #include "lisp.h" #endif -#ifdef STDC_HEADERS #include -#endif +#include +#include #ifdef HAVE_UNISTD_H #include #endif -#include -#include #include "libsst.h" #define AUDBUF 1024 -extern void usleep(); - int sst_open(play_level, record_level) int play_level, record_level; { int fd, i, gr, ger, gx; struct audio_ioctl ai; - char *getenv(), *ep; + char *ep; fd = open( "/dev/audio", O_RDWR ); if ( fd < 0 ) diff --git a/src/lisp.h b/src/lisp.h index 85da011..24b1924 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -116,13 +116,11 @@ void *xmalloc_and_zero (size_t size); void *xrealloc (void *, size_t size); char *xstrdup (CONST char *); /* generally useful */ -#define countof(x) ((int) (sizeof(x)/sizeof(x[0]))) -#define slot_offset(type, slot_name) \ - ((unsigned) (((char *) (&(((type *)0)->slot_name))) - ((char *)0))) +#define countof(x) ((int) (sizeof(x)/sizeof((x)[0]))) #define xnew(type) ((type *) xmalloc (sizeof (type))) #define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type))) #define xnew_and_zero(type) ((type *) xmalloc_and_zero (sizeof (type))) -#define xzero(lvalue) ((void) memset (&(lvalue), 0, sizeof (lvalue))) +#define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue))) #define xnew_array_and_zero(type, len) ((type *) xmalloc_and_zero ((len) * sizeof (type))) #define XREALLOC_ARRAY(ptr, type, len) ((void) (ptr = (type *) xrealloc (ptr, (len) * sizeof (type)))) #define alloca_array(type, len) ((type *) alloca ((len) * sizeof (type))) @@ -156,7 +154,6 @@ void xfree_1 (void *); } while (0) #else void xfree (void *); -#define xfree_1 xfree #endif /* ERROR_CHECK_MALLOC */ #ifndef PRINTF_ARGS @@ -195,7 +192,7 @@ void xfree (void *); #ifndef ALIGNOF # if defined (__GNUC__) && (__GNUC__ >= 2) -# define ALIGNOF(x) __alignof (x) +# define ALIGNOF(x) __alignof__ (x) # else # define ALIGNOF(x) sizeof (x) # endif diff --git a/src/md5.c b/src/md5.c index 775942a..8e524f6 100644 --- a/src/md5.c +++ b/src/md5.c @@ -482,7 +482,7 @@ md5_coding_system (Lisp_Object object, Lisp_Object coding, Lisp_Object istream, { /* Attempt to autodetect the coding of the string. This is VERY hit-and-miss. */ - enum eol_type eol = EOL_AUTODETECT; + eol_type_t eol = EOL_AUTODETECT; coding_system = Fget_coding_system (Qundecided); determine_real_coding_system (XLSTREAM (istream), &coding_system, &eol); diff --git a/src/menubar-x.c b/src/menubar-x.c index c15e271..62f4afc 100644 --- a/src/menubar-x.c +++ b/src/menubar-x.c @@ -94,14 +94,11 @@ menu_item_descriptor_to_widget_value_1 (Lisp_Object desc, prohibits GC. */ /* !!#### This function has not been Mule-ized */ int menubar_root_p = (menu_type == MENUBAR_TYPE && depth == 0); - widget_value *wv; - Lisp_Object wv_closure; int count = specpdl_depth (); int partition_seen = 0; + widget_value *wv = xmalloc_widget_value (); + Lisp_Object wv_closure = make_opaque_ptr (wv); - wv = xmalloc_widget_value (); - - wv_closure = make_opaque_ptr (wv); record_unwind_protect (widget_value_unwind, wv_closure); if (STRINGP (desc)) @@ -363,7 +360,7 @@ int in_menu_callback; static Lisp_Object restore_in_menu_callback (Lisp_Object val) { - in_menu_callback = XINT(val); + in_menu_callback = XINT (val); return Qnil; } #endif /* LWLIB_MENUBARS_LUCID || LWLIB_MENUBARS_MOTIF */ @@ -514,24 +511,21 @@ pre_activate_callback (Widget widget, LWLIB_ID id, XtPointer client_data) static widget_value * compute_menubar_data (struct frame *f, Lisp_Object menubar, int deep_p) { - widget_value *data; - if (NILP (menubar)) - data = 0; + return 0; else { - Lisp_Object old_buffer; + widget_value *data; int count = specpdl_depth (); - old_buffer = Fcurrent_buffer (); - record_unwind_protect (Fset_buffer, old_buffer); - Fset_buffer ( XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer); + record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); + Fset_buffer (XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer); data = menu_item_descriptor_to_widget_value (menubar, MENUBAR_TYPE, deep_p, 0); - Fset_buffer (old_buffer); unbind_to (count, Qnil); + + return data; } - return data; } static int @@ -541,7 +535,7 @@ set_frame_menubar (struct frame *f, int deep_p, int first_time_p) Lisp_Object menubar; int menubar_visible; long id; - /* As for the toolbar, the minibuffer does not have its own menubar. */ + /* As with the toolbar, the minibuffer does not have its own menubar. */ struct window *w = XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f)); if (! FRAME_X_P (f)) @@ -693,7 +687,7 @@ make_dummy_xbutton_event (XEvent *dummy, XtSetArg (al [1], XtNy, &shelly); XtGetValues (shell, al, 2); } -#endif +#endif XtSetArg (al [0], XtNx, &framex); XtSetArg (al [1], XtNy, &framey); XtGetValues (daddy, al, 2); diff --git a/src/menubar.c b/src/menubar.c index 7a6e2dc..c92232f 100644 --- a/src/menubar.c +++ b/src/menubar.c @@ -588,11 +588,9 @@ This is a specifier; use `set-specifier' to change it. set_specifier_fallback (Vmenubar_visible_p, list1 (Fcons (Qnil, Qt))); set_specifier_caching (Vmenubar_visible_p, - slot_offset (struct window, - menubar_visible_p), + offsetof (struct window, menubar_visible_p), menubar_visible_p_changed, - slot_offset (struct frame, - menubar_visible_p), + offsetof (struct frame, menubar_visible_p), menubar_visible_p_changed_in_frame); } diff --git a/src/mule-ccl.c b/src/mule-ccl.c index 5fb3c52..d16205e 100644 --- a/src/mule-ccl.c +++ b/src/mule-ccl.c @@ -645,20 +645,20 @@ static tr_stack *mapping_stack_pointer; /* Suspend CCL program because of reading from empty input buffer or writing to full output buffer. When this program is resumed, the - same I/O command is executed. */ + same I/O command is executed. The `if (1)' is for warning suppression. */ #define CCL_SUSPEND(stat) \ do { \ ic--; \ ccl->status = stat; \ - goto ccl_finish; \ + if (1) goto ccl_finish; \ } while (0) /* Terminate CCL program because of invalid command. Should not occur - in the normal case. */ + in the normal case. The `if (1)' is for warning suppression. */ #define CCL_INVALID_CMD \ do { \ ccl->status = CCL_STAT_INVALID_CMD; \ - goto ccl_error_handler; \ + if (1) goto ccl_error_handler; \ } while (0) /* Encode one character CH to multibyte form and write to the current diff --git a/src/mule-charset.c b/src/mule-charset.c index c7769c7..79fee33 100644 --- a/src/mule-charset.c +++ b/src/mule-charset.c @@ -128,9 +128,9 @@ static const struct struct_description charset_lookup_description = { rep_bytes_by_first_byte(c) is more efficient than the equivalent canonical computation: - (BYTE_ASCII_P (c) ? 1 : XCHARSET_REP_BYTES (CHARSET_BY_LEADING_BYTE (c))) */ + XCHARSET_REP_BYTES (CHARSET_BY_LEADING_BYTE (c)) */ -Bytecount rep_bytes_by_first_byte[0xA0] = +const Bytecount rep_bytes_by_first_byte[0xA0] = { /* 0x00 - 0x7f are for straight ASCII */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1276,7 +1276,6 @@ DEFINE_LRECORD_IMPLEMENTATION ("charset", charset, mark_charset, print_charset, 0, 0, 0, charset_description, struct Lisp_Charset); - /* Make a new charset. */ static Lisp_Object @@ -1381,11 +1380,6 @@ make_charset (Charset_ID id, Lisp_Object name, assert (NILP (chlook->charset_by_leading_byte[id - MIN_LEADING_BYTE])); chlook->charset_by_leading_byte[id - MIN_LEADING_BYTE] = obj; -#ifndef UTF2000 - if (id < 0xA0) - /* official leading byte */ - rep_bytes_by_first_byte[id] = CHARSET_REP_BYTES (cs); -#endif /* Some charsets are "faux" and don't have names or really exist at all except in the leading-byte table. */ @@ -2352,6 +2346,27 @@ Return the character set of char CH. return XCHARSET_NAME (CHAR_CHARSET (XCHAR (ch))); } +DEFUN ("char-octet", Fchar_octet, 1, 2, 0, /* +Return the octet numbered N (should be 0 or 1) of char CH. +N defaults to 0 if omitted. +*/ + (ch, n)) +{ + Lisp_Object charset; + int octet0, octet1; + + CHECK_CHAR_COERCE_INT (ch); + + BREAKUP_CHAR (XCHAR (ch), charset, octet0, octet1); + + if (NILP (n) || EQ (n, Qzero)) + return make_int (octet0); + else if (EQ (n, make_int (1))) + return make_int (octet1); + else + signal_simple_error ("Octet number must be 0 or 1", n); +} + DEFUN ("split-char", Fsplit_char, 1, 1, 0, /* Return list of charset and one or two position-codes of CHAR. */ @@ -2389,6 +2404,7 @@ Return list of charset and one or two position-codes of CHAR. rc = list2 (XCHARSET_NAME (charset), make_int (c1)); } UNGCPRO; + return rc; #endif } @@ -2506,6 +2522,7 @@ syms_of_mule_charset (void) DEFSUBR (Fmake_char); DEFSUBR (Fchar_charset); + DEFSUBR (Fchar_octet); DEFSUBR (Fsplit_char); #ifdef ENABLE_COMPOSITE_CHARS diff --git a/src/mule-charset.h b/src/mule-charset.h index 5948f1b..3d51fdc 100644 --- a/src/mule-charset.h +++ b/src/mule-charset.h @@ -239,7 +239,7 @@ Boston, MA 02111-1307, USA. */ Character set Encoding (PC == position-code) ------------- -------- (LB == leading-byte) - ASCII PC1 | + ASCII PC1 | Control-1 LB | PC1 + 0xA0 Dimension-1 official LB | PC1 + 0x80 Dimension-1 private 0x9E | LB | PC1 + 0x80 @@ -559,17 +559,6 @@ struct charset_lookup { extern struct charset_lookup *chlook; -/* Table of number of bytes in the string representation of a character - indexed by the first byte of that representation. - - This value can be derived other ways -- e.g. something like - - (BYTE_ASCII_P (first_byte) ? 1 : - XCHARSET_REP_BYTES (CHARSET_BY_LEADING_BYTE (first_byte))) - - but it's faster this way. */ -extern Bytecount rep_bytes_by_first_byte[0xA0]; - #ifdef ERROR_CHECK_TYPECHECK /* int not Bufbyte even though that is the actual type of a leading byte. This way, out-ot-range values will get caught rather than automatically @@ -593,21 +582,26 @@ CHARSET_BY_LEADING_BYTE (int lb) #define CHARSET_BY_ATTRIBUTES(type, final, dir) \ (chlook->charset_by_attributes[type][final][dir]) -#ifdef ERROR_CHECK_TYPECHECK -/* Number of bytes in the string representation of a character */ +/* Table of number of bytes in the string representation of a character + indexed by the first byte of that representation. + + This value can be derived in other ways -- e.g. something like + XCHARSET_REP_BYTES (CHARSET_BY_LEADING_BYTE (first_byte)) + but it's faster this way. */ +extern const Bytecount rep_bytes_by_first_byte[0xA0]; + +/* Number of bytes in the string representation of a character. */ INLINE int REP_BYTES_BY_FIRST_BYTE (int fb); INLINE int REP_BYTES_BY_FIRST_BYTE (int fb) { - assert (fb >= 0 && fb < 0xA0); +#ifdef ERROR_CHECK_TYPECHECK + assert (0 <= fb && fb < 0xA0); +#endif return rep_bytes_by_first_byte[fb]; } -#else -#define REP_BYTES_BY_FIRST_BYTE(fb) (rep_bytes_by_first_byte[fb]) -#endif - /************************************************************************/ /* Dealing with characters */ diff --git a/src/ntheap.c b/src/ntheap.c index ff5ef3a..8f9984e 100644 --- a/src/ntheap.c +++ b/src/ntheap.c @@ -148,7 +148,8 @@ allocate_heap (void) still a pretty decent arena to play in! */ unsigned long base = 0x01B00000; /* 27MB */ - unsigned long end = 1 << VALBITS; /* 256MB */ + /* Temporary hack for the non-starting problem - use 28 (256Mb) rather than VALBITS (1Gb) */ + unsigned long end = 1 << 28; /* 256MB */ void *ptr = NULL; #define NTHEAP_PROBE_BASE 1 diff --git a/src/print.c b/src/print.c index 5b828ca..41591be 100644 --- a/src/print.c +++ b/src/print.c @@ -627,8 +627,13 @@ print_error_message (Lisp_Object error_object, Lisp_Object stream) { int first = 1; int speccount = specpdl_depth (); + Lisp_Object frame = Qnil; + struct gcpro gcpro1; + GCPRO1 (stream); specbind (Qprint_message_label, Qerror); + stream = print_prepare (stream, &frame); + tail = Fcdr (error_object); if (EQ (type, Qerror)) { @@ -650,6 +655,8 @@ print_error_message (Lisp_Object error_object, Lisp_Object stream) tail = Fcdr (tail); first = 0; } + print_finish (stream, frame); + UNGCPRO; unbind_to (speccount, Qnil); return; /* not reached */ diff --git a/src/redisplay-output.c b/src/redisplay-output.c index 16a27f2..8f41eff 100644 --- a/src/redisplay-output.c +++ b/src/redisplay-output.c @@ -1234,8 +1234,8 @@ redisplay_output_layout (struct window *w, XSETWINDOW (window, w); - layout_height = glyph_height (image_instance, Qnil, findex, window); - layout_width = glyph_width (image_instance, Qnil, findex, window); + layout_height = glyph_height (image_instance, window); + layout_width = glyph_width (image_instance, window); dga->height = layout_height; dga->width = layout_width; @@ -1319,8 +1319,8 @@ redisplay_output_layout (struct window *w, struct display_glyph_area cdga; cdga.xoffset = IMAGE_INSTANCE_XOFFSET (childii) - dga->xoffset; cdga.yoffset = IMAGE_INSTANCE_YOFFSET (childii) - dga->yoffset; - cdga.width = glyph_width (child, Qnil, findex, window); - cdga.height = glyph_height (child, Qnil, findex, window); + cdga.width = glyph_width (child, window); + cdga.height = glyph_height (child, window); /* Although normalization is done by the output routines we have to do it here so that they don't try and @@ -1362,9 +1362,9 @@ redisplay_output_layout (struct window *w, xzero (dl); /* Munge boxes into display lines. */ dl.ypos = (cdb.ypos - cdga.yoffset) - + glyph_ascent (child, Qnil, findex, window); - dl.ascent = glyph_ascent (child, Qnil, findex, window); - dl.descent = glyph_descent (child, Qnil, findex, window); + + glyph_ascent (child, window); + dl.ascent = glyph_ascent (child, window); + dl.descent = glyph_descent (child, window); dl.top_clip = cdga.yoffset; dl.clip = (dl.ypos + dl.descent) - (cdb.ypos + cdb.height); /* output_string doesn't understand offsets in diff --git a/src/redisplay.c b/src/redisplay.c index 156ff35..ed35b8e 100644 --- a/src/redisplay.c +++ b/src/redisplay.c @@ -246,18 +246,13 @@ typedef struct } prop_block_dynarr; -static void generate_formatted_string_db (Lisp_Object format_str, - Lisp_Object result_str, - struct window *w, - struct display_line *dl, - struct display_block *db, - face_index findex, int min_pixpos, - int max_pixpos, int type); static Charcount generate_fstring_runes (struct window *w, pos_data *data, Charcount pos, Charcount min_pos, Charcount max_pos, Lisp_Object elt, int depth, int max_pixsize, - face_index findex, int type); + face_index findex, int type, + Charcount *offset, + Lisp_Object cur_ext); static prop_block_dynarr *add_glyph_rune (pos_data *data, struct glyph_block *gb, int pos_type, int allow_cursor, @@ -300,10 +295,6 @@ static int max_preempts; isn't any reason we need more than a single set. */ display_line_dynarr *cmotion_display_lines; -/* Used by generate_formatted_string. Global because they get used so - much that the dynamic allocation time adds up. */ -static Emchar_dynarr *formatted_string_emchar_dynarr; -static struct display_line formatted_string_display_line; /* We store the extents that we need to generate in a Dynarr and then frob them all on at the end of generating the string. We do it this way rather than adding them as we generate the string because @@ -428,7 +419,6 @@ int windows_structure_changed; Lisp_Object Vbar_cursor; Lisp_Object Qbar_cursor; - int visible_bell; /* If true and the terminal will support it then the frame will flash instead of beeping when an error occurs */ @@ -1551,7 +1541,7 @@ add_glyph_rune (pos_data *data, struct glyph_block *gb, int pos_type, if (cachel) width = cachel->width; else - width = glyph_width (gb->glyph, Qnil, data->findex, data->window); + width = glyph_width (gb->glyph, data->window); if (!width) return NULL; @@ -1614,9 +1604,8 @@ add_glyph_rune (pos_data *data, struct glyph_block *gb, int pos_type, } else { - ascent = glyph_ascent (gb->glyph, Qnil, data->findex, data->window); - descent = glyph_descent (gb->glyph, Qnil, data->findex, - data->window); + ascent = glyph_ascent (gb->glyph, data->window); + descent = glyph_descent (gb->glyph, data->window); } baseline = glyph_baseline (gb->glyph, data->window); @@ -2777,8 +2766,8 @@ add_margin_runes (struct display_line *dl, struct display_block *db, int start, unsigned short ascent, descent; Lisp_Object baseline = glyph_baseline (gb->glyph, window); - ascent = glyph_ascent (gb->glyph, Qnil, gb->findex, window); - descent = glyph_descent (gb->glyph, Qnil, gb->findex, window); + ascent = glyph_ascent (gb->glyph, window); + descent = glyph_descent (gb->glyph, window); /* A pixmap that has not had a baseline explicitly set. We use the existing ascent / descent ratio of the @@ -2892,7 +2881,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl, { int width; - width = glyph_width (gb->glyph, Qnil, gb->findex, window); + width = glyph_width (gb->glyph, window); if (white_in_start - width >= left_in_end) { @@ -2943,7 +2932,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl, if (extent_begin_glyph_layout (XEXTENT (gb->extent)) == GL_INSIDE_MARGIN) { - gb->width = glyph_width (gb->glyph, Qnil, gb->findex, window); + gb->width = glyph_width (gb->glyph, window); used_in += gb->width; Dynarr_add (ib, *gb); } @@ -3012,7 +3001,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl, if (extent_begin_glyph_layout (XEXTENT (gb->extent)) == GL_INSIDE_MARGIN) { - int width = glyph_width (gb->glyph, Qnil, gb->findex, window); + int width = glyph_width (gb->glyph, window); if (used_out) { @@ -3054,7 +3043,7 @@ create_left_glyph_block (struct window *w, struct display_line *dl, if (extent_begin_glyph_layout (XEXTENT (gb->extent)) == GL_OUTSIDE_MARGIN) { - int width = glyph_width (gb->glyph, Qnil, gb->findex, window); + int width = glyph_width (gb->glyph, window); if (out_end + width <= in_out_start) { @@ -3211,7 +3200,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl) if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_WHITESPACE) { - int width = glyph_width (gb->glyph, Qnil, gb->findex, window); + int width = glyph_width (gb->glyph, window); if (white_in_end + width <= dl->bounds.right_in) { @@ -3261,7 +3250,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl) if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_INSIDE_MARGIN) { - gb->width = glyph_width (gb->glyph, Qnil, gb->findex, window); + gb->width = glyph_width (gb->glyph, window); used_in += gb->width; Dynarr_add (ib, *gb); } @@ -3325,7 +3314,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl) if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_INSIDE_MARGIN) { - int width = glyph_width (gb->glyph, Qnil, gb->findex, window); + int width = glyph_width (gb->glyph, window); if (used_out) { @@ -3366,7 +3355,7 @@ create_right_glyph_block (struct window *w, struct display_line *dl) if (extent_end_glyph_layout (XEXTENT (gb->extent)) == GL_OUTSIDE_MARGIN) { - int width = glyph_width (gb->glyph, Qnil, gb->findex, window); + int width = glyph_width (gb->glyph, window); if (out_start - width >= in_out_end) { @@ -3482,9 +3471,119 @@ create_right_glyph_block (struct window *w, struct display_line *dl) /* */ /***************************************************************************/ +/* This function is also used in frame.c by `generate_title_string' */ +void +generate_formatted_string_db (Lisp_Object format_str, Lisp_Object result_str, + struct window *w, struct display_line *dl, + struct display_block *db, face_index findex, + int min_pixpos, int max_pixpos, int type) +{ + struct frame *f = XFRAME (w->frame); + struct device *d = XDEVICE (f->device); + + pos_data data; + int c_pixpos; + Charcount offset = 0; + + xzero (data); + data.d = d; + data.db = db; + data.dl = dl; + data.findex = findex; + data.pixpos = min_pixpos; + data.max_pixpos = max_pixpos; + data.cursor_type = NO_CURSOR; + data.last_charset = Qunbound; + data.last_findex = DEFAULT_INDEX; + data.result_str = result_str; + data.is_modeline = 1; + data.string = Qnil; + XSETWINDOW (data.window, w); + + Dynarr_reset (formatted_string_extent_dynarr); + Dynarr_reset (formatted_string_extent_start_dynarr); + Dynarr_reset (formatted_string_extent_end_dynarr); + + /* result_str is nil when we're building a frame or icon title. Otherwise, + we're building a modeline, so the offset starts at the modeline + horizontal scrolling ammount */ + if (! NILP (result_str)) + offset = w->modeline_hscroll; + generate_fstring_runes (w, &data, 0, 0, -1, format_str, 0, + max_pixpos - min_pixpos, findex, type, &offset, + Qnil); + + if (Dynarr_length (db->runes)) + { + struct rune *rb = + Dynarr_atp (db->runes, Dynarr_length (db->runes) - 1); + c_pixpos = rb->xpos + rb->width; + } + else + c_pixpos = min_pixpos; + + /* If we don't reach the right side of the window, add a blank rune + to make up the difference. This usually only occurs if the + modeline face is using a proportional width font or a fixed width + font of a different size from the default face font. */ + + if (c_pixpos < max_pixpos) + { + data.pixpos = c_pixpos; + data.blank_width = max_pixpos - data.pixpos; + + add_blank_rune (&data, NULL, 0); + } + + /* Now create the result string and frob the extents into it. */ + if (!NILP (result_str)) + { + int elt; + Bytecount len; + Bufbyte *strdata; + struct buffer *buf = XBUFFER (WINDOW_BUFFER (w)); + + detach_all_extents (result_str); + resize_string (XSTRING (result_str), -1, + data.bytepos - XSTRING_LENGTH (result_str)); + + strdata = XSTRING_DATA (result_str); + + for (elt = 0, len = 0; elt < Dynarr_length (db->runes); elt++) + { + if (Dynarr_atp (db->runes, elt)->type == RUNE_CHAR) + { + len += (set_charptr_emchar + (strdata + len, Dynarr_atp (db->runes, + elt)->object.chr.ch)); + } + } + + for (elt = 0; elt < Dynarr_length (formatted_string_extent_dynarr); + elt++) + { + Lisp_Object extent = Qnil; + Lisp_Object child; + + XSETEXTENT (extent, Dynarr_at (formatted_string_extent_dynarr, elt)); + child = Fgethash (extent, buf->modeline_extent_table, Qnil); + if (NILP (child)) + { + child = Fmake_extent (Qnil, Qnil, result_str); + Fputhash (extent, child, buf->modeline_extent_table); + } + Fset_extent_parent (child, extent); + set_extent_endpoints + (XEXTENT (child), + Dynarr_at (formatted_string_extent_start_dynarr, elt), + Dynarr_at (formatted_string_extent_end_dynarr, elt), + result_str); + } + } +} + /* Ensure that the given display line DL accurately represents the modeline for the given window. */ - static void generate_modeline (struct window *w, struct display_line *dl, int type) { @@ -3585,110 +3684,6 @@ generate_modeline (struct window *w, struct display_line *dl, int type) dl->ypos -= FRAME_BOTTOM_GUTTER_BOUNDS (f); } -static void -generate_formatted_string_db (Lisp_Object format_str, Lisp_Object result_str, - struct window *w, struct display_line *dl, - struct display_block *db, face_index findex, - int min_pixpos, int max_pixpos, int type) -{ - struct frame *f = XFRAME (w->frame); - struct device *d = XDEVICE (f->device); - - pos_data data; - int c_pixpos; - - xzero (data); - data.d = d; - data.db = db; - data.dl = dl; - data.findex = findex; - data.pixpos = min_pixpos; - data.max_pixpos = max_pixpos; - data.cursor_type = NO_CURSOR; - data.last_charset = Qunbound; - data.last_findex = DEFAULT_INDEX; - data.result_str = result_str; - data.is_modeline = 1; - data.string = Qnil; - XSETWINDOW (data.window, w); - - Dynarr_reset (formatted_string_extent_dynarr); - Dynarr_reset (formatted_string_extent_start_dynarr); - Dynarr_reset (formatted_string_extent_end_dynarr); - - /* This recursively builds up the modeline. */ - generate_fstring_runes (w, &data, 0, 0, -1, format_str, 0, - max_pixpos - min_pixpos, findex, type); - - if (Dynarr_length (db->runes)) - { - struct rune *rb = - Dynarr_atp (db->runes, Dynarr_length (db->runes) - 1); - c_pixpos = rb->xpos + rb->width; - } - else - c_pixpos = min_pixpos; - - /* If we don't reach the right side of the window, add a blank rune - to make up the difference. This usually only occurs if the - modeline face is using a proportional width font or a fixed width - font of a different size from the default face font. */ - - if (c_pixpos < max_pixpos) - { - data.pixpos = c_pixpos; - data.blank_width = max_pixpos - data.pixpos; - - add_blank_rune (&data, NULL, 0); - } - - /* Now create the result string and frob the extents into it. */ - if (!NILP (result_str)) - { - int elt; - Bytecount len; - Bufbyte *strdata; - struct buffer *buf = XBUFFER (WINDOW_BUFFER (w)); - - detach_all_extents (result_str); - resize_string (XSTRING (result_str), -1, - data.bytepos - XSTRING_LENGTH (result_str)); - - strdata = XSTRING_DATA (result_str); - - for (elt = 0, len = 0; elt < Dynarr_length (db->runes); elt++) - { - if (Dynarr_atp (db->runes, elt)->type == RUNE_CHAR) - { - len += (set_charptr_emchar - (strdata + len, Dynarr_atp (db->runes, - elt)->object.chr.ch)); - } - } - - for (elt = 0; elt < Dynarr_length (formatted_string_extent_dynarr); - elt++) - { - Lisp_Object extent = Qnil; - Lisp_Object child; - - XSETEXTENT (extent, Dynarr_at (formatted_string_extent_dynarr, elt)); - child = Fgethash (extent, buf->modeline_extent_table, Qnil); - if (NILP (child)) - { - child = Fmake_extent (Qnil, Qnil, result_str); - Fputhash (extent, child, buf->modeline_extent_table); - } - Fset_extent_parent (child, extent); - set_extent_endpoints - (XEXTENT (child), - Dynarr_at (formatted_string_extent_start_dynarr, elt), - Dynarr_at (formatted_string_extent_end_dynarr, elt), - result_str); - } - } -} - static Charcount add_string_to_fstring_db_runes (pos_data *data, CONST Bufbyte *str, Charcount pos, Charcount min_pos, Charcount max_pos) @@ -3734,7 +3729,8 @@ add_string_to_fstring_db_runes (pos_data *data, CONST Bufbyte *str, modeline extents. */ static Charcount add_glyph_to_fstring_db_runes (pos_data *data, Lisp_Object glyph, - Charcount pos, Charcount min_pos, Charcount max_pos) + Charcount pos, Charcount min_pos, + Charcount max_pos, Lisp_Object extent) { /* This function has been Mule-ized. */ Charcount end; @@ -3750,7 +3746,7 @@ add_glyph_to_fstring_db_runes (pos_data *data, Lisp_Object glyph, end = min (max_pos, end); gb.glyph = glyph; - gb.extent = Qnil; + gb.extent = extent; add_glyph_rune (data, &gb, BEGIN_GLYPHS, 0, 0); pos++; @@ -3777,7 +3773,8 @@ static Charcount generate_fstring_runes (struct window *w, pos_data *data, Charcount pos, Charcount min_pos, Charcount max_pos, Lisp_Object elt, int depth, int max_pixsize, - face_index findex, int type) + face_index findex, int type, Charcount *offset, + Lisp_Object cur_ext) { /* This function has been Mule-ized. */ /* #### The other losing things in this function are: @@ -3809,13 +3806,22 @@ tail_recurse: if (this != last) { - /* The string is just a string. */ + /* No %-construct */ Charcount size = - bytecount_to_charcount (last, this - last) + pos; - Charcount tmp_max = (max_pos == -1 ? size : min (size, max_pos)); + bytecount_to_charcount (last, this - last); - pos = add_string_to_fstring_db_runes (data, last, pos, pos, - tmp_max); + if (size <= *offset) + *offset -= size; + else + { + Charcount tmp_max = (max_pos == -1 ? pos + size - *offset : + min (pos + size - *offset, max_pos)); + CONST Bufbyte *tmp_last = charptr_n_addr (last, *offset); + + pos = add_string_to_fstring_db_runes (data, tmp_last, + pos, pos, tmp_max); + *offset = 0; + } } else /* *this == '%' */ { @@ -3840,7 +3846,7 @@ tail_recurse: pos = generate_fstring_runes (w, data, pos, spec_width, max_pos, Vglobal_mode_string, depth, max_pixsize, findex, - type); + type, offset, cur_ext); } else if (*this == '-') { @@ -3871,13 +3877,31 @@ tail_recurse: } else if (*this != 0) { - Bufbyte *str; Emchar ch = charptr_emchar (this); + Bufbyte *str; + Charcount size; + decode_mode_spec (w, ch, type); str = Dynarr_atp (mode_spec_bufbyte_string, 0); - pos = add_string_to_fstring_db_runes (data,str, pos, pos, - max_pos); + size = bytecount_to_charcount + /* Skip the null character added by `decode_mode_spec' */ + (str, Dynarr_length (mode_spec_bufbyte_string)) - 1; + + if (size <= *offset) + *offset -= size; + else + { + CONST Bufbyte *tmp_str = charptr_n_addr (str, *offset); + + /* ### NOTE: I don't understand why a tmp_max is not + computed and used here as in the plain string case + above. -- dv */ + pos = add_string_to_fstring_db_runes (data, tmp_str, + pos, pos, + max_pos); + *offset = 0; + } } /* NOT this++. There could be any sort of character at @@ -3903,13 +3927,26 @@ tail_recurse: if (!UNBOUNDP (tem)) { - /* If value is a string, output that string literally: + /* If value is a string, output that string literally: don't check for % within it. */ if (STRINGP (tem)) { - pos = - add_string_to_fstring_db_runes - (data, XSTRING_DATA (tem), pos, min_pos, max_pos); + Bufbyte *str = XSTRING_DATA (tem); + Charcount size = XSTRING_CHAR_LENGTH (tem); + + if (size <= *offset) + *offset -= size; + else + { + CONST Bufbyte *tmp_str = charptr_n_addr (str, *offset); + + /* ### NOTE: I don't understand why a tmp_max is not + computed and used here as in the plain string case + above. -- dv */ + pos = add_string_to_fstring_db_runes (data, tmp_str, pos, + min_pos, max_pos); + *offset = 0; + } } /* Give up right away for nil or t. */ else if (!EQ (tem, elt)) @@ -3934,50 +3971,53 @@ tail_recurse: else if (CONSP (elt)) { /* A cons cell: four distinct cases. - * If first element is a string or a cons, process all the elements - * and effectively concatenate them. - * If first element is a negative number, truncate displaying cdr to - * at most that many characters. If positive, pad (with spaces) - * to at least that many characters. - * If first element is a symbol, process the cadr or caddr recursively - * according to whether the symbol's value is non-nil or nil. - * If first element is a face, process the cdr recursively - * without altering the depth. + * - If first element is a string or a cons, process all the elements + * and effectively concatenate them. + * - If first element is a negative number, truncate displaying cdr to + * at most that many characters. If positive, pad (with spaces) + * to at least that many characters. + * - If first element is another symbol, process the cadr or caddr + * recursively according to whether the symbol's value is non-nil or + * nil. + * - If first element is a face, process the cdr recursively + * without altering the depth. */ + Lisp_Object car, tem; car = XCAR (elt); if (SYMBOLP (car)) - { - elt = XCDR (elt); - if (!CONSP (elt)) - goto invalid; - tem = symbol_value_in_buffer (car, w->buffer); - /* elt is now the cdr, and we know it is a cons cell. - Use its car if CAR has a non-nil value. */ - if (!UNBOUNDP (tem)) - { - if (!NILP (tem)) - { - elt = XCAR (elt); - goto tail_recurse; - } - } - /* Symbol's value is nil (or symbol is unbound) - * Get the cddr of the original list - * and if possible find the caddr and use that. - */ - elt = XCDR (elt); - if (NILP (elt)) - ; - else if (!CONSP (elt)) - goto invalid; - else - { - elt = XCAR (elt); - goto tail_recurse; - } - } + { + elt = XCDR (elt); + if (!CONSP (elt)) + goto invalid; + + tem = symbol_value_in_buffer (car, w->buffer); + /* elt is now the cdr, and we know it is a cons cell. + Use its car if CAR has a non-nil value. */ + if (!UNBOUNDP (tem)) + { + if (!NILP (tem)) + { + elt = XCAR (elt); + goto tail_recurse; + } + } + /* Symbol's value is nil (or symbol is unbound) + * Get the cddr of the original list + * and if possible find the caddr and use that. + */ + elt = XCDR (elt); + if (NILP (elt)) + ; + else if (!CONSP (elt)) + goto invalid; + else + { + elt = XCAR (elt); + goto tail_recurse; + } + } else if (INTP (car)) { Charcount lim = XINT (car); @@ -4016,13 +4056,14 @@ tail_recurse: else if (STRINGP (car) || CONSP (car)) { int limit = 50; + /* LIMIT is to protect against circular lists. */ while (CONSP (elt) && --limit > 0 && (pos < max_pos || max_pos == -1)) { pos = generate_fstring_runes (w, data, pos, pos, max_pos, - XCAR (elt), depth, - max_pixsize, findex, type); + XCAR (elt), depth, max_pixsize, + findex, type, offset, cur_ext); elt = XCDR (elt); } } @@ -4061,7 +4102,8 @@ tail_recurse: data->findex = new_findex; pos = generate_fstring_runes (w, data, pos, pos, max_pos, XCDR (elt), depth - 1, - max_pixsize, new_findex, type); + max_pixsize, new_findex, type, + offset, car); data->findex = old_findex; Dynarr_add (formatted_string_extent_dynarr, ext); Dynarr_add (formatted_string_extent_start_dynarr, start); @@ -4071,57 +4113,46 @@ tail_recurse: } else if (GLYPHP (elt)) { - pos = add_glyph_to_fstring_db_runes (data, elt, pos, pos, max_pos); + /* Glyphs are considered as one character with respect to the modeline + horizontal scrolling facility. -- dv */ + if (*offset > 0) + *offset -= 1; + else + pos = add_glyph_to_fstring_db_runes (data, elt, pos, pos, max_pos, + cur_ext); } else { invalid: - pos = - add_string_to_fstring_db_runes - (data, (CONST Bufbyte *) GETTEXT ("*invalid*"), pos, min_pos, - max_pos); + { + char *str = GETTEXT ("*invalid*"); + Charcount size = (Charcount) strlen (str); /* is this ok ?? -- dv */ + + if (size <= *offset) + *offset -= size; + else + { + CONST Bufbyte *tmp_str = + charptr_n_addr ((CONST Bufbyte *) str, *offset); + + /* ### NOTE: I don't understand why a tmp_max is not computed and + used here as in the plain string case above. -- dv */ + pos = add_string_to_fstring_db_runes (data, tmp_str, pos, + min_pos, max_pos); + *offset = 0; + } + } } if (min_pos > pos) { - add_string_to_fstring_db_runes (data, (CONST Bufbyte *) "", pos, min_pos, - -1); + add_string_to_fstring_db_runes (data, (CONST Bufbyte *) "", pos, + min_pos, -1); } return pos; } -/* The caller is responsible for freeing the returned string. */ -Bufbyte * -generate_formatted_string (struct window *w, Lisp_Object format_str, - Lisp_Object result_str, face_index findex, int type) -{ - struct display_line *dl; - struct display_block *db; - int elt = 0; - - dl = &formatted_string_display_line; - db = get_display_block_from_line (dl, TEXT); - Dynarr_reset (db->runes); - - generate_formatted_string_db (format_str, result_str, w, dl, db, findex, 0, - -1, type); - - Dynarr_reset (formatted_string_emchar_dynarr); - while (elt < Dynarr_length (db->runes)) - { - if (Dynarr_atp (db->runes, elt)->type == RUNE_CHAR) - Dynarr_add (formatted_string_emchar_dynarr, - Dynarr_atp (db->runes, elt)->object.chr.ch); - elt++; - } - - return - convert_emchar_string_into_malloced_string - ( Dynarr_atp (formatted_string_emchar_dynarr, 0), - Dynarr_length (formatted_string_emchar_dynarr), 0); -} - /* Update just the modeline. Assumes the desired display structs. If they do not have a modeline block, it does nothing. */ static void @@ -6164,7 +6195,9 @@ regeneration_done: somewhere else once tty updates occur on a per-frame basis. */ mark_face_cachels_as_clean (w); - /* The glyph cachels only get dirty if someone changed something. */ + /* The glyph cachels only get dirty if someone changed something. + Since redisplay has now effectively ended we can reset the dirty + flag since everything must be up-to-date. */ if (glyphs_changed) mark_glyph_cachels_as_clean (w); @@ -9094,12 +9127,10 @@ init_redisplay (void) { cmotion_display_lines = Dynarr_new (display_line); mode_spec_bufbyte_string = Dynarr_new (Bufbyte); - formatted_string_emchar_dynarr = Dynarr_new (Emchar); formatted_string_extent_dynarr = Dynarr_new (EXTENT); formatted_string_extent_start_dynarr = Dynarr_new (Bytecount); formatted_string_extent_end_dynarr = Dynarr_new (Bytecount); internal_cache = Dynarr_new (line_start_cache); - xzero (formatted_string_display_line); } /* window system is nil when in -batch mode */ @@ -9383,9 +9414,9 @@ This is a specifier; use `set-specifier' to change it. Vleft_margin_width = Fmake_specifier (Qnatnum); set_specifier_fallback (Vleft_margin_width, list1 (Fcons (Qnil, Qzero))); set_specifier_caching (Vleft_margin_width, - slot_offset (struct window, left_margin_width), + offsetof (struct window, left_margin_width), some_window_value_changed, - slot_offset (struct frame, left_margin_width), + offsetof (struct frame, left_margin_width), margin_width_changed_in_frame); DEFVAR_SPECIFIER ("right-margin-width", &Vright_margin_width /* @@ -9395,9 +9426,9 @@ This is a specifier; use `set-specifier' to change it. Vright_margin_width = Fmake_specifier (Qnatnum); set_specifier_fallback (Vright_margin_width, list1 (Fcons (Qnil, Qzero))); set_specifier_caching (Vright_margin_width, - slot_offset (struct window, right_margin_width), + offsetof (struct window, right_margin_width), some_window_value_changed, - slot_offset (struct frame, right_margin_width), + offsetof (struct frame, right_margin_width), margin_width_changed_in_frame); DEFVAR_SPECIFIER ("minimum-line-ascent", &Vminimum_line_ascent /* @@ -9407,7 +9438,7 @@ This is a specifier; use `set-specifier' to change it. Vminimum_line_ascent = Fmake_specifier (Qnatnum); set_specifier_fallback (Vminimum_line_ascent, list1 (Fcons (Qnil, Qzero))); set_specifier_caching (Vminimum_line_ascent, - slot_offset (struct window, minimum_line_ascent), + offsetof (struct window, minimum_line_ascent), some_window_value_changed, 0, 0); @@ -9418,7 +9449,7 @@ This is a specifier; use `set-specifier' to change it. Vminimum_line_descent = Fmake_specifier (Qnatnum); set_specifier_fallback (Vminimum_line_descent, list1 (Fcons (Qnil, Qzero))); set_specifier_caching (Vminimum_line_descent, - slot_offset (struct window, minimum_line_descent), + offsetof (struct window, minimum_line_descent), some_window_value_changed, 0, 0); @@ -9430,7 +9461,7 @@ This is a specifier; use `set-specifier' to change it. Vuse_left_overflow = Fmake_specifier (Qboolean); set_specifier_fallback (Vuse_left_overflow, list1 (Fcons (Qnil, Qnil))); set_specifier_caching (Vuse_left_overflow, - slot_offset (struct window, use_left_overflow), + offsetof (struct window, use_left_overflow), some_window_value_changed, 0, 0); @@ -9442,7 +9473,7 @@ This is a specifier; use `set-specifier' to change it. Vuse_right_overflow = Fmake_specifier (Qboolean); set_specifier_fallback (Vuse_right_overflow, list1 (Fcons (Qnil, Qnil))); set_specifier_caching (Vuse_right_overflow, - slot_offset (struct window, use_right_overflow), + offsetof (struct window, use_right_overflow), some_window_value_changed, 0, 0); @@ -9453,7 +9484,7 @@ This is a specifier; use `set-specifier' to change it. Vtext_cursor_visible_p = Fmake_specifier (Qboolean); set_specifier_fallback (Vtext_cursor_visible_p, list1 (Fcons (Qnil, Qt))); set_specifier_caching (Vtext_cursor_visible_p, - slot_offset (struct window, text_cursor_visible_p), + offsetof (struct window, text_cursor_visible_p), text_cursor_visible_p_changed, 0, 0); diff --git a/src/redisplay.h b/src/redisplay.h index 04f2538..b9772bf 100644 --- a/src/redisplay.h +++ b/src/redisplay.h @@ -696,13 +696,18 @@ int window_half_pixpos (struct window *w); void redisplay_echo_area (void); void free_display_structs (struct window_mirror *mir); void free_display_lines (display_line_dynarr *dla); -Bufbyte *generate_formatted_string (struct window *w, Lisp_Object format_str, - Lisp_Object result_str, face_index findex, - int type); void generate_displayable_area (struct window *w, Lisp_Object disp_string, int xpos, int ypos, int width, int height, display_line_dynarr* dl, Bufpos start_pos, face_index default_face); +/* `generate_title_string' in frame.c needs this */ +void generate_formatted_string_db (Lisp_Object format_str, + Lisp_Object result_str, + struct window *w, + struct display_line *dl, + struct display_block *db, + face_index findex, + int min_pixpos, int max_pixpos, int type); int real_current_modeline_height (struct window *w); int pixel_to_glyph_translation (struct frame *f, int x_coord, int y_coord, int *col, int *row, diff --git a/src/s/aix3-2.h b/src/s/aix3-2.h index a006cef..70330be 100644 --- a/src/s/aix3-2.h +++ b/src/s/aix3-2.h @@ -32,8 +32,6 @@ #endif #endif -#define HAVE_FSYNC - /* With this defined, a gcc-compiled Emacs crashed in realloc under AIX 3.2, and a cc-compiled Emacs works with this undefined. --karl@cs.umb.edu. */ diff --git a/src/s/cygwin32.h b/src/s/cygwin32.h index def1faa..1eaa8b5 100644 --- a/src/s/cygwin32.h +++ b/src/s/cygwin32.h @@ -121,6 +121,12 @@ extern long random(); #ifndef WM_MOUSEWHEEL #define WM_MOUSEWHEEL 0x20A #endif +#ifndef TCS_BOTTOM +#define TCS_BOTTOM 0x0002 +#endif +#ifndef TCS_VERTICAL +#define TCS_VERTICAL 0x0080 +#endif #define PBS_SMOOTH 0x01 diff --git a/src/s/windowsnt.h b/src/s/windowsnt.h index ebbcf69..6dee7ee 100644 --- a/src/s/windowsnt.h +++ b/src/s/windowsnt.h @@ -105,9 +105,9 @@ typedef int pid_t; The alternative is that a lock file named /usr/spool/mail/$USER.lock. */ -/* #define MAIL_USE_FLOCK */ #define MAIL_USE_POP -#define MAIL_USE_SYSTEM_LOCK +#define HAVE_LOCKING +#define MAIL_USE_LOCKING /* If the character used to separate elements of the executable path is not ':', #define this to be the appropriate character constant. */ diff --git a/src/scrollbar.c b/src/scrollbar.c index 39855c8..6f2f0e9 100644 --- a/src/scrollbar.c +++ b/src/scrollbar.c @@ -956,11 +956,9 @@ This is a specifier; use `set-specifier' to change it. (Vscrollbar_width, list1 (Fcons (Qnil, make_int (DEFAULT_SCROLLBAR_WIDTH)))); set_specifier_caching (Vscrollbar_width, - slot_offset (struct window, - scrollbar_width), + offsetof (struct window, scrollbar_width), vertical_scrollbar_changed_in_window, - slot_offset (struct frame, - scrollbar_width), + offsetof (struct frame, scrollbar_width), frame_size_slipped); DEFVAR_SPECIFIER ("scrollbar-height", &Vscrollbar_height /* @@ -972,11 +970,9 @@ This is a specifier; use `set-specifier' to change it. (Vscrollbar_height, list1 (Fcons (Qnil, make_int (DEFAULT_SCROLLBAR_HEIGHT)))); set_specifier_caching (Vscrollbar_height, - slot_offset (struct window, - scrollbar_height), + offsetof (struct window, scrollbar_height), some_window_value_changed, - slot_offset (struct frame, - scrollbar_height), + offsetof (struct frame, scrollbar_height), frame_size_slipped); DEFVAR_SPECIFIER ("horizontal-scrollbar-visible-p", &Vhorizontal_scrollbar_visible_p /* @@ -987,11 +983,11 @@ This is a specifier; use `set-specifier' to change it. set_specifier_fallback (Vhorizontal_scrollbar_visible_p, list1 (Fcons (Qnil, Qt))); set_specifier_caching (Vhorizontal_scrollbar_visible_p, - slot_offset (struct window, - horizontal_scrollbar_visible_p), + offsetof (struct window, + horizontal_scrollbar_visible_p), some_window_value_changed, - slot_offset (struct frame, - horizontal_scrollbar_visible_p), + offsetof (struct frame, + horizontal_scrollbar_visible_p), frame_size_slipped); DEFVAR_SPECIFIER ("vertical-scrollbar-visible-p", &Vvertical_scrollbar_visible_p /* @@ -1002,11 +998,11 @@ This is a specifier; use `set-specifier' to change it. set_specifier_fallback (Vvertical_scrollbar_visible_p, list1 (Fcons (Qnil, Qt))); set_specifier_caching (Vvertical_scrollbar_visible_p, - slot_offset (struct window, - vertical_scrollbar_visible_p), + offsetof (struct window, + vertical_scrollbar_visible_p), vertical_scrollbar_changed_in_window, - slot_offset (struct frame, - vertical_scrollbar_visible_p), + offsetof (struct frame, + vertical_scrollbar_visible_p), frame_size_slipped); DEFVAR_SPECIFIER ("scrollbar-on-left-p", &Vscrollbar_on_left_p /* @@ -1030,11 +1026,9 @@ This is a specifier; use `set-specifier' to change it. } set_specifier_caching (Vscrollbar_on_left_p, - slot_offset (struct window, - scrollbar_on_left_p), + offsetof (struct window, scrollbar_on_left_p), vertical_scrollbar_changed_in_window, - slot_offset (struct frame, - scrollbar_on_left_p), + offsetof (struct frame, scrollbar_on_left_p), frame_size_slipped); DEFVAR_SPECIFIER ("scrollbar-on-top-p", &Vscrollbar_on_top_p /* @@ -1045,11 +1039,9 @@ This is a specifier; use `set-specifier' to change it. set_specifier_fallback (Vscrollbar_on_top_p, list1 (Fcons (Qnil, Qnil))); set_specifier_caching (Vscrollbar_on_top_p, - slot_offset (struct window, - scrollbar_on_top_p), + offsetof (struct window, scrollbar_on_top_p), some_window_value_changed, - slot_offset (struct frame, - scrollbar_on_top_p), + offsetof (struct frame, scrollbar_on_top_p), frame_size_slipped); } @@ -1059,8 +1051,7 @@ complex_vars_of_scrollbar (void) Vscrollbar_pointer_glyph = Fmake_glyph_internal (Qpointer); set_specifier_caching (XGLYPH (Vscrollbar_pointer_glyph)->image, - slot_offset (struct window, - scrollbar_pointer), + offsetof (struct window, scrollbar_pointer), scrollbar_pointer_changed_in_window, 0, 0); } diff --git a/src/specifier.h b/src/specifier.h index e447d5c..e8c51f8 100644 --- a/src/specifier.h +++ b/src/specifier.h @@ -281,6 +281,15 @@ error_check_##type##_specifier_data (struct Lisp_Specifier *sp) \ assert (SPECIFIER_TYPE_P (sp, type)); \ return (struct type##_specifier *) sp->data; \ } \ +INLINE struct Lisp_Specifier * \ +error_check_##type##_specifier_type (Lisp_Object obj); \ +INLINE struct Lisp_Specifier * \ +error_check_##type##_specifier_type (Lisp_Object obj) \ +{ \ + struct Lisp_Specifier *sp = XSPECIFIER (obj); \ + assert (SPECIFIER_TYPE_P (sp, type)); \ + return sp; \ +} \ DECLARE_NOTHING #else #define DECLARE_SPECIFIER_TYPE(type) \ @@ -343,10 +352,19 @@ do { \ : (sp)->data)) #endif -/* #### Need to create ERROR_CHECKING versions of these. */ +#ifdef ERROR_CHECK_TYPECHECK +# define XSPECIFIER_TYPE(x, type) \ + error_check_##type##_specifier_type (x) +# define XSETSPECIFIER_TYPE(x, p, type) do \ +{ \ + XSETSPECIFIER (x, p); \ + assert (SPECIFIER_TYPEP (XSPECIFIER(x), type)); \ +} while (0) +#else +# define XSPECIFIER_TYPE(x, type) XSPECIFIER (x) +# define XSETSPECIFIER_TYPE(x, p, type) XSETSPECIFIER (x, p) +#endif /* ERROR_CHECK_TYPE_CHECK */ -#define XSPECIFIER_TYPE(x, type) XSPECIFIER (x) -#define XSETSPECIFIER_TYPE(x, p, type) XSETSPECIFIER (x, p) #define SPECIFIER_TYPEP(x, type) \ (SPECIFIERP (x) && SPECIFIER_TYPE_P (XSPECIFIER (x), type)) #define CHECK_SPECIFIER_TYPE(x, type) do { \ diff --git a/src/symsinit.h b/src/symsinit.h index 7ae439d..2e6a4e3 100644 --- a/src/symsinit.h +++ b/src/symsinit.h @@ -293,6 +293,7 @@ void vars_of_font_lock (void); void reinit_vars_of_font_lock (void); void vars_of_frame_tty (void); void vars_of_frame_mswindows (void); +void reinit_vars_of_frame_mswindows (void); void vars_of_frame_x (void); void vars_of_frame (void); void vars_of_glyphs_x (void); diff --git a/src/sysdep.c b/src/sysdep.c index 7f5486b..99b4313 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -2145,9 +2145,9 @@ hft_reset (struct console *con) */ #ifdef __cplusplus - extern "C" int _start (); + extern "C" int _start (void); #else - extern int _start (); + extern int _start (void); #endif #ifndef HAVE_TEXT_START diff --git a/src/sysfile.h b/src/sysfile.h index cc8f2de..c7e29cb 100644 --- a/src/sysfile.h +++ b/src/sysfile.h @@ -203,10 +203,6 @@ Boston, MA 02111-1307, USA. */ #define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) #endif -#if !defined (USG) && !defined (WINDOWSNT) -# define HAVE_FSYNC -#endif - #ifndef MAXPATHLEN /* in 4.1, param.h fails to define this. */ #define MAXPATHLEN 1024 diff --git a/src/termcap.c b/src/termcap.c index 6beecc5..1c5529e 100644 --- a/src/termcap.c +++ b/src/termcap.c @@ -26,18 +26,9 @@ Boston, MA 02111-1307, USA. */ #include "lisp.h" /* For encapsulated open, close, read */ #include "device.h" /* For DEVICE_BAUD_RATE */ #else /* not emacs */ -#if defined(USG) || defined(STDC_HEADERS) -#define memcpy(d, s, n) memcpy ((d), (s), (n)) -#endif -#ifdef STDC_HEADERS #include #include -#else -char *getenv (); -char *malloc (); -char *realloc (); -#endif #ifdef HAVE_UNISTD_H #include @@ -337,8 +328,6 @@ static int name_match (); If BP is zero, space is dynamically allocated. */ -extern char *getenv (); - int tgetent (bp, name) char *bp; @@ -365,7 +354,7 @@ tgetent (bp, name) it is the entry itself, but only if the name the caller requested matches the TERM variable. */ - if (tem && !IS_DIRECTORY_SEP (*tem) && !strcmp (name, (char *) getenv ("TERM"))) + if (tem && !IS_DIRECTORY_SEP (*tem) && !strcmp (name, getenv ("TERM"))) { indirect = tgetst1 (find_capability (tem, "tc"), 0); if (!indirect) diff --git a/src/toolbar-x.c b/src/toolbar-x.c index ab7e16d..6e2be07 100644 --- a/src/toolbar-x.c +++ b/src/toolbar-x.c @@ -296,9 +296,9 @@ x_get_button_size (struct frame *f, Lisp_Object window, return XINT (f->toolbar_size[pos]); if (vert) - size = glyph_height (glyph, Vdefault_face, 0, window); + size = glyph_height (glyph, window); else - size = glyph_width (glyph, Vdefault_face, 0, window); + size = glyph_width (glyph, window); } if (!size) diff --git a/src/toolbar.c b/src/toolbar.c index 31732af..cff25ac 100644 --- a/src/toolbar.c +++ b/src/toolbar.c @@ -1434,8 +1434,7 @@ For the other vector formats (specifying blank areas of the toolbar): automatically knew about specifier fallbacks, so we didn't have to do it ourselves. */ set_specifier_caching (Vdefault_toolbar, - slot_offset (struct window, - default_toolbar), + offsetof (struct window, default_toolbar), default_toolbar_specs_changed, 0, 0); @@ -1447,8 +1446,7 @@ See `default-toolbar' for a description of a valid toolbar instantiator. */ ); Vtoolbar[TOP_TOOLBAR] = Fmake_specifier (Qtoolbar); set_specifier_caching (Vtoolbar[TOP_TOOLBAR], - slot_offset (struct window, - toolbar[TOP_TOOLBAR]), + offsetof (struct window, toolbar[TOP_TOOLBAR]), toolbar_specs_changed, 0, 0); @@ -1465,8 +1463,7 @@ displayed even if you provide a value for `bottom-toolbar'. */ ); Vtoolbar[BOTTOM_TOOLBAR] = Fmake_specifier (Qtoolbar); set_specifier_caching (Vtoolbar[BOTTOM_TOOLBAR], - slot_offset (struct window, - toolbar[BOTTOM_TOOLBAR]), + offsetof (struct window, toolbar[BOTTOM_TOOLBAR]), toolbar_specs_changed, 0, 0); @@ -1483,8 +1480,7 @@ displayed even if you provide a value for `left-toolbar'. */ ); Vtoolbar[LEFT_TOOLBAR] = Fmake_specifier (Qtoolbar); set_specifier_caching (Vtoolbar[LEFT_TOOLBAR], - slot_offset (struct window, - toolbar[LEFT_TOOLBAR]), + offsetof (struct window, toolbar[LEFT_TOOLBAR]), toolbar_specs_changed, 0, 0); @@ -1501,8 +1497,7 @@ displayed even if you provide a value for `right-toolbar'. */ ); Vtoolbar[RIGHT_TOOLBAR] = Fmake_specifier (Qtoolbar); set_specifier_caching (Vtoolbar[RIGHT_TOOLBAR], - slot_offset (struct window, - toolbar[RIGHT_TOOLBAR]), + offsetof (struct window, toolbar[RIGHT_TOOLBAR]), toolbar_specs_changed, 0, 0); @@ -1556,11 +1551,9 @@ is not visible, so it is expanded to take up the slack. */ ); Vdefault_toolbar_height = Fmake_specifier (Qnatnum); set_specifier_caching (Vdefault_toolbar_height, - slot_offset (struct window, - default_toolbar_height), + offsetof (struct window, default_toolbar_height), default_toolbar_size_changed_in_window, - slot_offset (struct frame, - default_toolbar_height), + offsetof (struct frame, default_toolbar_height), default_toolbar_size_changed_in_frame); DEFVAR_SPECIFIER ("default-toolbar-width", &Vdefault_toolbar_width /* @@ -1571,11 +1564,9 @@ See `default-toolbar-height' for more information. */ ); Vdefault_toolbar_width = Fmake_specifier (Qnatnum); set_specifier_caching (Vdefault_toolbar_width, - slot_offset (struct window, - default_toolbar_width), + offsetof (struct window, default_toolbar_width), default_toolbar_size_changed_in_window, - slot_offset (struct frame, - default_toolbar_width), + offsetof (struct frame, default_toolbar_width), default_toolbar_size_changed_in_frame); DEFVAR_SPECIFIER ("top-toolbar-height", @@ -1587,11 +1578,9 @@ See `default-toolbar-height' for more information. */ ); Vtoolbar_size[TOP_TOOLBAR] = Fmake_specifier (Qnatnum); set_specifier_caching (Vtoolbar_size[TOP_TOOLBAR], - slot_offset (struct window, - toolbar_size[TOP_TOOLBAR]), + offsetof (struct window, toolbar_size[TOP_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_size[TOP_TOOLBAR]), + offsetof (struct frame, toolbar_size[TOP_TOOLBAR]), frame_size_slipped); DEFVAR_SPECIFIER ("bottom-toolbar-height", @@ -1603,11 +1592,9 @@ See `default-toolbar-height' for more information. */ ); Vtoolbar_size[BOTTOM_TOOLBAR] = Fmake_specifier (Qnatnum); set_specifier_caching (Vtoolbar_size[BOTTOM_TOOLBAR], - slot_offset (struct window, - toolbar_size[BOTTOM_TOOLBAR]), + offsetof (struct window, toolbar_size[BOTTOM_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_size[BOTTOM_TOOLBAR]), + offsetof (struct frame, toolbar_size[BOTTOM_TOOLBAR]), frame_size_slipped); DEFVAR_SPECIFIER ("left-toolbar-width", @@ -1619,11 +1606,9 @@ See `default-toolbar-height' for more information. */ ); Vtoolbar_size[LEFT_TOOLBAR] = Fmake_specifier (Qnatnum); set_specifier_caching (Vtoolbar_size[LEFT_TOOLBAR], - slot_offset (struct window, - toolbar_size[LEFT_TOOLBAR]), + offsetof (struct window, toolbar_size[LEFT_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_size[LEFT_TOOLBAR]), + offsetof (struct frame, toolbar_size[LEFT_TOOLBAR]), frame_size_slipped); DEFVAR_SPECIFIER ("right-toolbar-width", @@ -1635,11 +1620,9 @@ See `default-toolbar-height' for more information. */ ); Vtoolbar_size[RIGHT_TOOLBAR] = Fmake_specifier (Qnatnum); set_specifier_caching (Vtoolbar_size[RIGHT_TOOLBAR], - slot_offset (struct window, - toolbar_size[RIGHT_TOOLBAR]), + offsetof (struct window, toolbar_size[RIGHT_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_size[RIGHT_TOOLBAR]), + offsetof (struct frame, toolbar_size[RIGHT_TOOLBAR]), frame_size_slipped); fb = Qnil; @@ -1700,11 +1683,9 @@ the value in a window domain will not. */ ); Vdefault_toolbar_border_width = Fmake_specifier (Qnatnum); set_specifier_caching (Vdefault_toolbar_border_width, - slot_offset (struct window, - default_toolbar_border_width), + offsetof (struct window, default_toolbar_border_width), default_toolbar_border_width_changed_in_window, - slot_offset (struct frame, - default_toolbar_border_width), + offsetof (struct frame, default_toolbar_border_width), default_toolbar_border_width_changed_in_frame); DEFVAR_SPECIFIER ("top-toolbar-border-width", @@ -1716,11 +1697,11 @@ See `default-toolbar-height' for more information. */ ); Vtoolbar_border_width[TOP_TOOLBAR] = Fmake_specifier (Qnatnum); set_specifier_caching (Vtoolbar_border_width[TOP_TOOLBAR], - slot_offset (struct window, - toolbar_border_width[TOP_TOOLBAR]), + offsetof (struct window, + toolbar_border_width[TOP_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_border_width[TOP_TOOLBAR]), + offsetof (struct frame, + toolbar_border_width[TOP_TOOLBAR]), frame_size_slipped); DEFVAR_SPECIFIER ("bottom-toolbar-border-width", @@ -1732,11 +1713,11 @@ See `default-toolbar-height' for more information. */ ); Vtoolbar_border_width[BOTTOM_TOOLBAR] = Fmake_specifier (Qnatnum); set_specifier_caching (Vtoolbar_border_width[BOTTOM_TOOLBAR], - slot_offset (struct window, - toolbar_border_width[BOTTOM_TOOLBAR]), + offsetof (struct window, + toolbar_border_width[BOTTOM_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_border_width[BOTTOM_TOOLBAR]), + offsetof (struct frame, + toolbar_border_width[BOTTOM_TOOLBAR]), frame_size_slipped); DEFVAR_SPECIFIER ("left-toolbar-border-width", @@ -1748,11 +1729,11 @@ See `default-toolbar-height' for more information. */ ); Vtoolbar_border_width[LEFT_TOOLBAR] = Fmake_specifier (Qnatnum); set_specifier_caching (Vtoolbar_border_width[LEFT_TOOLBAR], - slot_offset (struct window, - toolbar_border_width[LEFT_TOOLBAR]), + offsetof (struct window, + toolbar_border_width[LEFT_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_border_width[LEFT_TOOLBAR]), + offsetof (struct frame, + toolbar_border_width[LEFT_TOOLBAR]), frame_size_slipped); DEFVAR_SPECIFIER ("right-toolbar-border-width", @@ -1764,11 +1745,11 @@ See `default-toolbar-height' for more information. */ ); Vtoolbar_border_width[RIGHT_TOOLBAR] = Fmake_specifier (Qnatnum); set_specifier_caching (Vtoolbar_border_width[RIGHT_TOOLBAR], - slot_offset (struct window, - toolbar_border_width[RIGHT_TOOLBAR]), + offsetof (struct window, + toolbar_border_width[RIGHT_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_border_width[RIGHT_TOOLBAR]), + offsetof (struct frame, + toolbar_border_width[RIGHT_TOOLBAR]), frame_size_slipped); fb = Qnil; @@ -1812,11 +1793,9 @@ visibility specifiers have a fallback value of true. */ ); Vdefault_toolbar_visible_p = Fmake_specifier (Qboolean); set_specifier_caching (Vdefault_toolbar_visible_p, - slot_offset (struct window, - default_toolbar_visible_p), + offsetof (struct window, default_toolbar_visible_p), default_toolbar_visible_p_changed_in_window, - slot_offset (struct frame, - default_toolbar_visible_p), + offsetof (struct frame, default_toolbar_visible_p), default_toolbar_visible_p_changed_in_frame); DEFVAR_SPECIFIER ("top-toolbar-visible-p", @@ -1828,11 +1807,11 @@ See `default-toolbar-visible-p' for more information. */ ); Vtoolbar_visible_p[TOP_TOOLBAR] = Fmake_specifier (Qboolean); set_specifier_caching (Vtoolbar_visible_p[TOP_TOOLBAR], - slot_offset (struct window, - toolbar_visible_p[TOP_TOOLBAR]), + offsetof (struct window, + toolbar_visible_p[TOP_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_visible_p[TOP_TOOLBAR]), + offsetof (struct frame, + toolbar_visible_p[TOP_TOOLBAR]), frame_size_slipped); DEFVAR_SPECIFIER ("bottom-toolbar-visible-p", @@ -1844,11 +1823,11 @@ See `default-toolbar-visible-p' for more information. */ ); Vtoolbar_visible_p[BOTTOM_TOOLBAR] = Fmake_specifier (Qboolean); set_specifier_caching (Vtoolbar_visible_p[BOTTOM_TOOLBAR], - slot_offset (struct window, - toolbar_visible_p[BOTTOM_TOOLBAR]), + offsetof (struct window, + toolbar_visible_p[BOTTOM_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_visible_p[BOTTOM_TOOLBAR]), + offsetof (struct frame, + toolbar_visible_p[BOTTOM_TOOLBAR]), frame_size_slipped); DEFVAR_SPECIFIER ("left-toolbar-visible-p", @@ -1860,11 +1839,11 @@ See `default-toolbar-visible-p' for more information. */ ); Vtoolbar_visible_p[LEFT_TOOLBAR] = Fmake_specifier (Qboolean); set_specifier_caching (Vtoolbar_visible_p[LEFT_TOOLBAR], - slot_offset (struct window, - toolbar_visible_p[LEFT_TOOLBAR]), + offsetof (struct window, + toolbar_visible_p[LEFT_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_visible_p[LEFT_TOOLBAR]), + offsetof (struct frame, + toolbar_visible_p[LEFT_TOOLBAR]), frame_size_slipped); DEFVAR_SPECIFIER ("right-toolbar-visible-p", @@ -1876,11 +1855,11 @@ See `default-toolbar-visible-p' for more information. */ ); Vtoolbar_visible_p[RIGHT_TOOLBAR] = Fmake_specifier (Qboolean); set_specifier_caching (Vtoolbar_visible_p[RIGHT_TOOLBAR], - slot_offset (struct window, - toolbar_visible_p[RIGHT_TOOLBAR]), + offsetof (struct window, + toolbar_visible_p[RIGHT_TOOLBAR]), toolbar_geometry_changed_in_window, - slot_offset (struct frame, - toolbar_visible_p[RIGHT_TOOLBAR]), + offsetof (struct frame, + toolbar_visible_p[RIGHT_TOOLBAR]), frame_size_slipped); /* initially, top inherits from default; this can be @@ -1902,8 +1881,7 @@ This is a specifier; use `set-specifier' to change it. */ ); Vtoolbar_buttons_captioned_p = Fmake_specifier (Qboolean); set_specifier_caching (Vtoolbar_buttons_captioned_p, - slot_offset (struct window, - toolbar_buttons_captioned_p), + offsetof (struct window, toolbar_buttons_captioned_p), toolbar_buttons_captioned_p_changed, 0, 0); set_specifier_fallback (Vtoolbar_buttons_captioned_p, diff --git a/src/unexaix.c b/src/unexaix.c index 50f5b21..933097e 100644 --- a/src/unexaix.c +++ b/src/unexaix.c @@ -439,7 +439,6 @@ write_segment (int new, char *ptr, char *end) { int i, nwrite, ret; char buf[80]; - extern int errno; char zeros[UnexBlockSz]; for (i = 0; ptr < end;) diff --git a/src/unexalpha.c b/src/unexalpha.c index a8045f0..9602c10 100644 --- a/src/unexalpha.c +++ b/src/unexalpha.c @@ -31,6 +31,7 @@ Boston, MA 02111-1307, USA. */ #include #include #include +#include #include #include #include @@ -54,9 +55,6 @@ static void mark_x (char *); if (lseek (_fd, _position, L_SET) != _position) \ fatal_unexec (_error_message, _error_arg); -extern int errno; -extern char *strerror (); - void *sbrk(); #define EEOF -1 diff --git a/src/unexec.c b/src/unexec.c index 06bb930..7c885d5 100644 --- a/src/unexec.c +++ b/src/unexec.c @@ -136,7 +136,7 @@ before writing it (above and beyond the number of bytes of actual program text). HDR's standard fields are already correct, except that this adjustment to the `a_text' field has not yet been made; thus, the amount of offset can depend on the data in the file. - + * A_TEXT_SEEK(HDR) If defined, this macro specifies the number of bytes to seek into the @@ -186,19 +186,12 @@ pointer looks like an int) but not on all machines. # undef _POSIX_SOURCE # endif -# if defined(__lucid) && !defined(__STDC_EXTENDED__) -# define __STDC_EXTENDED__ 1 -# endif - # include # include # include # include # include - -# ifdef __lucid -# include -# endif +# include #endif @@ -443,7 +436,7 @@ unexec (new_name, a_name, data_start, bss_start, entry_address) { close (new); /* unlink (new_name); / * Failed, unlink new a.out */ - return -1; + return -1; } close (new); @@ -998,7 +991,7 @@ copy_text_and_data (int new, int a_out) char c; int mcount_address, mcount_offset, count; extern char *_execname; - + /* The use of _execname is incompatible with RISCiX 1.1 */ sprintf (command, "nm %s | fgrep mcount", _execname); @@ -1018,7 +1011,7 @@ copy_text_and_data (int new, int a_out) { sprintf (errbuf, "Failed to execute the command '%s'\n", command); PERROR (errbuf); - } + } sscanf(address_text, "%x", &mcount_address); ptr = (char *) unexec_text_start; @@ -1076,7 +1069,6 @@ write_segment (new, ptr, end) #if 0 char buf[80]; #endif - extern int errno; /* This is the normal amount to write at once. It is the size of block that NFS uses. */ int writesize = 1 << 13; diff --git a/src/unexfreebsd.c b/src/unexfreebsd.c index 5cb73b3..0a97488 100644 --- a/src/unexfreebsd.c +++ b/src/unexfreebsd.c @@ -40,6 +40,7 @@ Tweaked 26-Feb-94 by Shawn Carey for use with FreeBSD-1.1 shared libraries. #include #include #include +#include #include #include #include @@ -95,7 +96,6 @@ int run_time_remap (char *dummy); /********************** Variables **********************************/ /* for reporting error messages from system calls */ -extern int errno; extern int _DYNAMIC; extern char **environ; diff --git a/src/unexhp9k3.c b/src/unexhp9k3.c index 607cd73..9bca2a9 100644 --- a/src/unexhp9k3.c +++ b/src/unexhp9k3.c @@ -40,6 +40,7 @@ Modified Jan 93 by Hamish Macdonald for HPUX #include #include #include +#include #include #ifdef __hp9000s300 # include @@ -87,7 +88,6 @@ int run_time_remap (char *dummy); /* for reporting error messages from system calls */ extern int sys_nerr; -extern int errno; extern int _DYNAMIC; extern char **environ; diff --git a/src/unexmips.c b/src/unexmips.c index 486646b..ca497ae 100644 --- a/src/unexmips.c +++ b/src/unexmips.c @@ -26,6 +26,7 @@ Boston, MA 02111-1307, USA. */ #include #include #include +#include #include #ifdef MACH @@ -95,7 +96,6 @@ static void mark_x (); if (lseek (_fd, _position, L_SET) != _position) \ fatal_unexec (_error_message, _error_arg); -extern int errno; extern char *strerror (); #define EEOF -1 diff --git a/src/window.c b/src/window.c index 80934b9..9281bd8 100644 --- a/src/window.c +++ b/src/window.c @@ -1148,7 +1148,7 @@ be used. Otherwise, the selected frame is used. return FRAME_MINIBUF_WINDOW (decode_frame_or_selected (con_dev_or_frame)); } -DEFUN ("window-minibuffer-p", Fwindow_minibuffer_p, 1, 1, 0, /* +DEFUN ("window-minibuffer-p", Fwindow_minibuffer_p, 0, 1, 0, /* Return non-nil if WINDOW is a minibuffer window. */ (window)) @@ -1437,22 +1437,23 @@ Return the number of columns by which WINDOW is scrolled from left margin. return make_int (decode_window (window)->hscroll); } -#ifdef MODELINE_IS_SCROLLABLE DEFUN ("modeline-hscroll", Fmodeline_hscroll, 0, 1, 0, /* -Return the number of columns by which WINDOW's modeline is scrolled from -left margin. If the window has no modeline, return nil. +Return the horizontal scrolling ammount of WINDOW's modeline. +If the window has no modeline, return nil. */ (window)) { struct window *w = decode_window (window); - return (WINDOW_HAS_MODELINE_P (w)) ? make_int (w->modeline_hscroll) : Qnil; + return (WINDOW_HAS_MODELINE_P (w)) ? make_int ((int) w->modeline_hscroll) : + Qnil; } DEFUN ("set-modeline-hscroll", Fset_modeline_hscroll, 2, 2, 0, /* -Set number of columns WINDOW's modeline is scrolled from left margin to NCOL. -NCOL should be zero or positive. If NCOL is negative, it will be forced to 0. -If the window has no modeline, do nothing and return nil. +Set the horizontal scrolling ammount of WINDOW's modeline to NCOL. +If NCOL is negative, it will silently be forced to 0. +If the window has no modeline, return nil. Otherwise, return the actual +value that was set. */ (window, ncol)) { @@ -1460,18 +1461,20 @@ If the window has no modeline, do nothing and return nil. if (WINDOW_HAS_MODELINE_P (w)) { - int ncols; + Charcount ncols; + CHECK_INT (ncol); - ncols = XINT (ncol); - if (ncols < 0) ncols = 0; - if (w->modeline_hscroll != ncols) - MARK_MODELINE_CHANGED; - w->modeline_hscroll = ncols; - return ncol; + ncols = (XINT (ncol) <= 0) ? 0 : (Charcount) XINT (ncol); + if (ncols != w->modeline_hscroll) + { + MARK_MODELINE_CHANGED; + w->modeline_hscroll = ncols; + } + return make_int ((int) ncols); } + return Qnil; } -#endif /* MODELINE_IS_SCROLLABLE */ DEFUN ("set-window-hscroll", Fset_window_hscroll, 2, 2, 0, /* Set number of columns WINDOW is scrolled from left margin to NCOL. @@ -4050,12 +4053,12 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction, fheight = XINT (Vwindow_pixel_scroll_increment); else if (!NILP (Vwindow_pixel_scroll_increment)); default_face_height_and_width (window, &fheight, &fwidth); - + if (Dynarr_length (dla) >= 1) modeline = Dynarr_atp (dla, 0)->modeline; dl = Dynarr_atp (dla, modeline); - + if (value > 0) { /* Go for partial display line scrolling. This just means bumping @@ -4074,7 +4077,7 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction, { int vtarget; Bufpos startp, old_start; - + if (WINDOW_TEXT_TOP_CLIP (w)) { WINDOW_TEXT_TOP_CLIP (w) = 0; @@ -4083,7 +4086,7 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction, old_start = marker_position (w->start[CURRENT_DISP]); startp = vmotion (w, old_start, value, &vtarget); - + if (vtarget < value && (w->window_end_pos[CURRENT_DISP] == -1 || (BUF_Z (b) - w->window_end_pos[CURRENT_DISP] > BUF_ZV (b)))) @@ -4098,7 +4101,7 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction, w->force_start = 1; w->start_at_line_beg = beginning_of_line_p (b, startp); MARK_WINDOWS_CHANGED (w); - + if (!point_would_be_visible (w, startp, XINT (point))) { if (selected) @@ -4132,16 +4135,16 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction, { int vtarget; Bufpos startp, old_start; - + if (WINDOW_TEXT_TOP_CLIP (w)) { WINDOW_TEXT_TOP_CLIP (w) = 0; MARK_WINDOWS_CHANGED (w); } - + old_start = marker_position (w->start[CURRENT_DISP]); startp = vmotion (w, old_start, value, &vtarget); - + if (vtarget > value && marker_position (w->start[CURRENT_DISP]) == BUF_BEGV (b)) { @@ -4155,16 +4158,16 @@ window_scroll (Lisp_Object window, Lisp_Object n, int direction, w->force_start = 1; w->start_at_line_beg = beginning_of_line_p (b, startp); MARK_WINDOWS_CHANGED (w); - + if (!point_would_be_visible (w, startp, XINT (point))) { Bufpos new_point; - + if (MINI_WINDOW_P (w)) new_point = startp; else new_point = start_of_last_line (w, startp); - + if (selected) BUF_SET_PT (b, new_point); else @@ -4694,7 +4697,7 @@ struct saved_window int pixel_width; int pixel_height; int hscroll; - int modeline_hscroll; + Charcount modeline_hscroll; int parent_index; /* index into saved_windows */ int prev_index; /* index into saved_windows */ char start_at_line_beg; /* boolean */ @@ -4956,7 +4959,7 @@ by `current-window-configuration' (which see). int previous_pixel_width; int previous_minibuf_height, previous_minibuf_top,previous_minibuf_width; int real_font_height; - int converted_minibuf_height,target_minibuf_height; + int converted_minibuf_height,target_minibuf_height; int specpdl_count = specpdl_depth (); GCPRO1 (configuration); @@ -5024,7 +5027,7 @@ by `current-window-configuration' (which see). #if 0 /* JV: This is bogus, First of all, the units are inconsistent. The frame sizes are measured - in characters but the window sizes are stored in pixels. So if a + in characters but the window sizes are stored in pixels. So if a font size change happened between saving and restoring, the frame "sizes" maybe equal but the windows still should be resized. This is tickled alot by the new "character size @@ -5045,7 +5048,7 @@ by `current-window-configuration' (which see). || config->frame_width != FRAME_WIDTH (f)) change_frame_size (f, config->frame_height, config->frame_width, 0); #endif - + previous_pixel_top = XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_top; previous_pixel_height = XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_height; previous_pixel_left = XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_left; @@ -5055,7 +5058,7 @@ by `current-window-configuration' (which see). default_face_height_and_width (frame, &real_font_height, 0); assert(real_font_height > 0); - + if (FRAME_HAS_MINIBUF_P (f) && ! FRAME_MINIBUF_ONLY_P (f)) { previous_minibuf_height @@ -5068,13 +5071,14 @@ by `current-window-configuration' (which see). else { previous_minibuf_height = 0; + previous_minibuf_top = 0; previous_minibuf_width = 0; } converted_minibuf_height = (previous_minibuf_height % real_font_height) == 0 ? - (previous_minibuf_height / real_font_height ) : /* lines */ previous_minibuf_height; /* pixels */ - + /* Temporarily avoid any problems with windows that are smaller than they are supposed to be. */ window_min_height = 1; @@ -5256,7 +5260,7 @@ by `current-window-configuration' (which see). #### Now we get more cases correct then ever before, but are we treating all? For instance what if the frames minibuf window - is no longer the same one? + is no longer the same one? */ target_minibuf_height = previous_minibuf_height; if (converted_minibuf_height && @@ -5279,7 +5283,7 @@ by `current-window-configuration' (which see). set_window_pixwidth (FRAME_MINIBUF_WINDOW (f), previous_minibuf_width, 0); } - + /* This is a better way to deal with frame resizing, etc. What we _actually_ want is for the old (just restored) root window to fit @@ -5294,7 +5298,7 @@ by `current-window-configuration' (which see). /* Note that this function also updates the subwindow "pixel_left"s */ set_window_pixwidth (FRAME_ROOT_WINDOW (f), previous_pixel_width, 0); - + /* If restoring in the current frame make the window current, otherwise just update the frame selected_window slot to be the restored current_window. */ @@ -5536,11 +5540,11 @@ its value is -not- saved. /* save the minibuffer height using the heuristics from change_frame_size_1 */ - + XSETFRAME (frame, f); /* frame could have been nil ! */ default_face_height_and_width (frame, &real_font_height, 0); assert(real_font_height > 0); - + if (FRAME_HAS_MINIBUF_P (f) && ! FRAME_MINIBUF_ONLY_P (f)) minibuf_height = XWINDOW(FRAME_MINIBUF_WINDOW(f))->pixel_height; else @@ -5606,7 +5610,7 @@ a non-nil result to be returned. if (NILP (pos)) pos = Fwindow_point (window); - + CHECK_INT (pos); point = XINT (pos); @@ -5744,15 +5748,13 @@ syms_of_window (void) DEFSUBR (Fwindow_displayed_text_pixel_height); DEFSUBR (Fwindow_text_area_pixel_width); DEFSUBR (Fwindow_hscroll); -#ifdef MODELINE_IS_SCROLLABLE + DEFSUBR (Fset_window_hscroll); DEFSUBR (Fmodeline_hscroll); DEFSUBR (Fset_modeline_hscroll); -#endif /* MODELINE_IS_SCROLLABLE */ #if 0 /* bogus FSF crock */ DEFSUBR (Fwindow_redisplay_end_trigger); DEFSUBR (Fset_window_redisplay_end_trigger); #endif - DEFSUBR (Fset_window_hscroll); DEFSUBR (Fwindow_pixel_edges); DEFSUBR (Fwindow_text_area_pixel_edges); DEFSUBR (Fwindow_point); @@ -5892,8 +5894,7 @@ This is a specifier; use `set-specifier' to change it. Fadd_spec_to_specifier (Vmodeline_shadow_thickness, make_int (2), Qnil, Qnil, Qnil); set_specifier_caching (Vmodeline_shadow_thickness, - slot_offset (struct window, - modeline_shadow_thickness), + offsetof (struct window, modeline_shadow_thickness), modeline_shadow_thickness_changed, 0, 0); @@ -5905,8 +5906,7 @@ This is a specifier; use `set-specifier' to change it. set_specifier_fallback (Vhas_modeline_p, list1 (Fcons (Qnil, Qt))); set_specifier_caching (Vhas_modeline_p, - slot_offset (struct window, - has_modeline_p), + offsetof (struct window, has_modeline_p), /* #### It's strange that we need a special flag to indicate that the shadow-thickness has changed, but not one to indicate that @@ -5928,8 +5928,8 @@ This is a specifier; use `set-specifier' to change it. set_specifier_fallback (Vvertical_divider_always_visible_p, list1 (Fcons (Qnil, Qt))); set_specifier_caching (Vvertical_divider_always_visible_p, - slot_offset (struct window, - vertical_divider_always_visible_p), + offsetof (struct window, + vertical_divider_always_visible_p), vertical_divider_changed_in_window, 0, 0); @@ -5943,8 +5943,8 @@ This is a specifier; use `set-specifier' to change it. Fadd_spec_to_specifier (Vvertical_divider_shadow_thickness, make_int (2), Qnil, Qnil, Qnil); set_specifier_caching (Vvertical_divider_shadow_thickness, - slot_offset (struct window, - vertical_divider_shadow_thickness), + offsetof (struct window, + vertical_divider_shadow_thickness), vertical_divider_changed_in_window, 0, 0); DEFVAR_SPECIFIER ("vertical-divider-line-width", &Vvertical_divider_line_width /* @@ -5974,8 +5974,8 @@ This is a specifier; use `set-specifier' to change it. set_specifier_fallback (Vvertical_divider_line_width, fb); } set_specifier_caching (Vvertical_divider_line_width, - slot_offset (struct window, - vertical_divider_line_width), + offsetof (struct window, + vertical_divider_line_width), vertical_divider_changed_in_window, 0, 0); @@ -6004,8 +6004,7 @@ This is a specifier; use `set-specifier' to change it. set_specifier_fallback (Vvertical_divider_spacing, fb); } set_specifier_caching (Vvertical_divider_spacing, - slot_offset (struct window, - vertical_divider_spacing), + offsetof (struct window, vertical_divider_spacing), vertical_divider_changed_in_window, 0, 0); } diff --git a/src/window.h b/src/window.h index 043a9fc..588187a 100644 --- a/src/window.h +++ b/src/window.h @@ -129,7 +129,7 @@ struct window /* Number of columns display within the window is scrolled to the left. */ int hscroll; /* Idem for the window's modeline */ - int modeline_hscroll; + Charcount modeline_hscroll; /* Amount to clip off the top line for pixel-based scrolling. Point will remain constant but this will be incremented to incrementally shift lines up. */ diff --git a/tests/ChangeLog b/tests/ChangeLog index b4234ab..d1b19a2 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,17 @@ +2000-01-18 Martin Buchholz + + * XEmacs 21.2.27 is released. + +1999-12-24 Yoshiki Hayashi + + * automated/syntax-tests.el: New file. + Add test for scan_words using forward-word and backword-word. + +2000-01-08 Martin Buchholz + + * automated/mule-tests.el: + Test resizing of small and big (> 8k bytes) strings. + 1999-12-31 Martin Buchholz * XEmacs 21.2.26 is released. diff --git a/tests/automated/mule-tests.el b/tests/automated/mule-tests.el index dea33ef..86c402d 100644 --- a/tests/automated/mule-tests.el +++ b/tests/automated/mule-tests.el @@ -103,4 +103,61 @@ the Assert macro checks for correctness." (aset string 0 (make-char 'latin-iso8859-2 42)) (Assert (eq (aref string 1) (make-char 'latin-iso8859-2 69)))) + ;; Test strings waxing and waning across the 8k BIG_STRING limit (see alloc.c) + (defun charset-char-string (charset) + (let (lo hi string n) + (if (= (charset-chars charset) 94) + (setq lo 33 hi 126) + (setq lo 32 hi 127)) + (if (= (charset-dimension charset) 1) + (progn + (setq string (make-string (1+ (- hi lo)) ??)) + (setq n 0) + (loop for j from lo to hi do + (progn + (aset string n (make-char charset j)) + (incf n))) + string) + (progn + (setq string (make-string (* (1+ (- hi lo)) (1+ (- hi lo))) ??)) + (setq n 0) + (loop for j from lo to hi do + (loop for k from lo to hi do + (progn + (aset string n (make-char charset j k)) + (incf n)))) + string)))) + + ;; The following two used to crash xemacs! + (Assert (charset-char-string 'japanese-jisx0208)) + (aset (make-string 9003 ??) 1 (make-char 'latin-iso8859-1 77)) + + (let ((greek-string (charset-char-string 'greek-iso8859-7)) + (string (make-string (* 96 60) ??))) + (loop for j from 0 below (length string) do + (aset string j (aref greek-string (mod j 96)))) + (loop for k in '(0 1 58 59) do + (Assert (equal (substring string (* 96 k) (* 96 (1+ k))) greek-string)))) + + (let ((greek-string (charset-char-string 'greek-iso8859-7)) + (string (make-string (* 96 60) ??))) + (loop for j from (1- (length string)) downto 0 do + (aset string j (aref greek-string (mod j 96)))) + (loop for k in '(0 1 58 59) do + (Assert (equal (substring string (* 96 k) (* 96 (1+ k))) greek-string)))) + + (let ((ascii-string (charset-char-string 'ascii)) + (string (make-string (* 94 60) (make-char 'greek-iso8859-7 57)))) + (loop for j from 0 below (length string) do + (aset string j (aref ascii-string (mod j 94)))) + (loop for k in '(0 1 58 59) do + (Assert (equal (substring string (* 94 k) (+ 94 (* 94 k))) ascii-string)))) + + (let ((ascii-string (charset-char-string 'ascii)) + (string (make-string (* 94 60) (make-char 'greek-iso8859-7 57)))) + (loop for j from (1- (length string)) downto 0 do + (aset string j (aref ascii-string (mod j 94)))) + (loop for k in '(0 1 58 59) do + (Assert (equal (substring string (* 94 k) (* 94 (1+ k))) ascii-string)))) + ) diff --git a/tests/glyph-test.el b/tests/glyph-test.el index 67533cc..b9c04a1 100644 --- a/tests/glyph-test.el +++ b/tests/glyph-test.el @@ -2,6 +2,10 @@ (make-extent (point) (point)) (setq im (make-glyph [xpm :file "xemacs-icon.xpm"]))) +(set-extent-begin-glyph + (make-extent (point) (point)) + (make-glyph [string :data "xemacs"])) + (defun foo () (interactive) (setq ok-select (not ok-select))) @@ -64,6 +68,7 @@ (setq tab (make-glyph [tab-control :descriptor "My Tab" :face highlight + :orientation right :properties (:items (["One" foo] ["Two" fee] ["Three" foo]))]))) @@ -104,7 +109,8 @@ ;; normal pushbutton (set-extent-begin-glyph (make-extent (point) (point)) - (make-glyph [button :descriptor ["A Big Button" foo ]])) + (setq pbutton + (make-glyph [button :descriptor ["A Big Button" foo ]]))) ;; edit box (set-extent-begin-glyph diff --git a/version.sh b/version.sh index 97bafe3..40561bc 100644 --- a/version.sh +++ b/version.sh @@ -2,8 +2,8 @@ emacs_is_beta=t emacs_major_version=21 emacs_minor_version=2 -emacs_beta_version=26 -xemacs_codename="Millenium" +emacs_beta_version=27 +xemacs_codename="Hera" infodock_major_version=4 infodock_minor_version=0 infodock_build_version=8