User: stephent
Date: 05/11/06 17:15:41
Branch: xemacs sjt-xft
xemacs/etc sjt-xft
xemacs/lib-src sjt-xft
xemacs/lisp sjt-xft
xemacs/lisp/mule sjt-xft
xemacs/lwlib sjt-xft
xemacs/man sjt-xft
xemacs/man/internals sjt-xft
xemacs/man/lispref sjt-xft
xemacs/modules sjt-xft
xemacs/modules/canna sjt-xft
xemacs/modules/ldap sjt-xft
xemacs/modules/postgresql sjt-xft
xemacs/netinstall sjt-xft
xemacs/nt sjt-xft
xemacs/nt/installer/Wise sjt-xft
xemacs/src sjt-xft
xemacs/tests sjt-xft
Modified: xemacs/tests ChangeLog
Log:
Sync to mainline 21.5.23 plus minor changes.
<87oe4x4v7r.fsf(a)tleepslib.sk.tsukuba.ac.jp>
Sun Nov 6 23:57:02 JST 2005 Stephen J. Turnbull <stephen(a)xemacs.org>
* Make sure inlines get instantiated for included modules (LDAP, PostgreSQL).
Sun Nov 6 23:55:48 JST 2005 Stephen J. Turnbull <stephen(a)xemacs.org>
* Detect -lcrypto -lssl for PostgreSQL on Darwin.
Sun Nov 6 23:46:56 JST 2005 Stephen J. Turnbull <stephen(a)xemacs.org>
* Use new macros for lcrecords in Xft support.
Sun Nov 6 23:42:10 JST 2005 Stephen J. Turnbull <stephen(a)xemacs.org>
* Canonicalize my name in man/ChangeLog.
Sun Nov 6 23:29:11 JST 2005 Stephen J. Turnbull <stephen(a)xemacs.org>
* netinstall/ChangeLog: Nuke useless CVS keyword.
Sun Nov 6 23:17:02 JST 2005 Stephen J. Turnbull <stephen(a)xemacs.org>
* INSTALL: Substitute "with" for "enable" in option names.
Sun Nov 6 23:15:25 JST 2005 Stephen J. Turnbull <stephen(a)xemacs.org>
* INSTALL: Describe --with-modules and add notes to OEMs.
Sun Nov 6 23:13:52 JST 2005 Stephen J. Turnbull <stephen(a)xemacs.org>
* INSTALL: Minor accuracy improvements 2005-11-06.
Sun Nov 6 23:09:36 JST 2005 Stephen J. Turnbull <stephen(a)xemacs.org>
* INSTALL: Add appendix listing new configure options.
Sun Nov 6 23:08:40 JST 2005 Stephen J. Turnbull <stephen(a)xemacs.org>
* INSTALL: Remove "Updated by" paragraph; nobody updates this.
Sun Nov 6 22:23:30 JST 2005 Clemens Fruhwirth <clemens(a)endorphin.org>
* glyphs-x.c: Conditionalize Xft-specific code.
Sun Nov 6 16:19:16 JST 2005 Stephen J. Turnbull <stephen(a)xemacs.org>
* Xft and Motif don't mix well yet, do they.
Revision Changes Path
1.218.2.4 +77 -1 XEmacs/xemacs/CHANGES-beta
Index: CHANGES-beta
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/CHANGES-beta,v
retrieving revision 1.218.2.3
retrieving revision 1.218.2.4
diff -u -p -r1.218.2.3 -r1.218.2.4
--- CHANGES-beta 2005/09/20 16:04:31 1.218.2.3
+++ CHANGES-beta 2005/11/06 16:13:44 1.218.2.4
@@ -1,8 +1,84 @@
+to 21.5.23 "daikon"
+Major features
+
+-- New: all-singing, all-dancing --with/--enable aliasing. -- Malcolm Purvis
+-- New: native NT support for building gmp, db, postgresql, ldap. -- Ben Wing
+-- New: non-XPM color images can be mouse pointers. -- Ben Wing
+
+User-Visible Bug Fixes and Minor Improvements
+
+-- Fix: change address for crash reporting to xemacs-beta. -- Ben Wing
+-- Fix: configure requires explicit choice of Motif (from 21.4). -- Malcolm Purvis
+-- Fix: crash due to duplicate subrs with MC_ALLOC and modules. -- Marcus Crestani
+-- Improve: memory usage reporting, especially with MC_ALLOC. -- Ben Wing
+-- Improve: remove obsolete autoconf 2.13 files. -- Malcolm Purvis.
+-- Improve: --with-cflags-optimization now forces optimization. -- Ben Wing
+-- Update: sync package-get.el mirrors with website. -- Adrian Aichner, Ville Skyttä
+
+Build Infrastructure
+
+-- Fix: Cygwin, non-X build needs XPM header and library files in XE_CFLAGS. -- Mike
Alexander, Rick Rankin
+-- Fix: guess VC++ version; set debug and browser flags appropriately. -- Ben Wing
+-- Fix: pass -I$(SRC) to minitar.c so it compiles. -- Ben Wing
+-- Fix: pass module sources, not objects, to make-docfile. -- Ben Wing
+-- Fix: stop installexe.sh from adding redundant exe extension. -- Rick Rankin
+-- Fix: variable initialization misordering in xemacs.mak. -- Adrian Aichner
+-- Improve: Canna API is now a module. -- Stephen Turnbull
+-- Improve: delete more stuff in `make clean'. -- Ben Wing
+-- Improve: options now added to one OPT_*, rather than many FOO_*, variables. -- Ben
Wing
+-- Improve: replace support for autoconf 2.13 with warning to use autoconf 2.59. --
Malcolm Purvis
+-- Improve: update config.inc.samp to recent versions and add gmp, db, postgresql, ldap
support; also optimization in non-debug builds. -- Ben Wing
+-- Improve: xemacs.mak now caters to VC++ version, support for building gmp, db,
postgresql, ldap; other fixes. -- Ben Wing
+
+Documentation
+
+-- Fix: force C-h N to find etc/NEWS, not some package's. -- Steve Youngs
+-- Fix: texinfmt.el can build all Info files again. -- Adrian Aichner
+-- Fix: typos in Texinfo docs. -- Adrian Aichner
+-- Improve: Texinfo docs about specifiers. -- Ben Wing
+-- Improve: comment style, 'foo -> `foo'. -- Ben Wing
+-- Improve: comments and docstrings. -- Stephen Turnbull
+-- Improve: document --with/--enable, improve Mac OS X in INSTALL. -- Malcolm Purvis
+-- Improve: emodules.texi tells how to add modules to core. -- Stephen Turnbull
+-- Improve: FAQ includes examples of 21.5 configure options. -- Malcolm Purvis
+-- Improve: nt/README tells how to compile optional libs. -- Ben Wing
+-- New: FAQ on `rebaseall' under Cygwin. -- Ben Wing
+-- New: internals documents XEmacs treatment of --with/--enable configure args. --
Malcolm Purvis
+
+Lisp API
+
+-- Fix: finder-find-library returns accurate filename. -- Adrian Aichner
+-- Fix: xemacs-composefunc kvetching when noninteractive. -- Stephen Turnbull
+-- Improve: GC now triggers on relative, not absolute, consing. -- Ben Wing
+-- Improve: memory usage reporting. -- Ben Wing
+-- Improve: sync build-report.el to Adrian's version. -- Stephen Turnbull
+-- Improve: sync read-buffer, line-number-at-pos, delete-dups, occur to GNU Emacs
22.0.50. -- Malcolm Purvis
+-- New: batch-build-report command. -- Stephen Turnbull
+-- New: inherit properties for faces and custom. -- Ben Wing
+-- New: next-error from GNU Emacs. -- Malcolm Purvis
+-- New: `specifier-instantiator' and related primitives. -- Ben Wing
+
+Internal API and Implementation
+
+-- Fix: address of register variable can't be taken. -- Ben Wing
+-- Fix: asserts in lwlib are now consistent with src. -- Ben Wing
+-- Fix: bitrot in sysdep.c and nt.c. -- Ben Wing
+-- Fix: bug in range tables with non-default closure. -- Ben Wing
+-- Fix: don't use C++ reserved words "new" and "catch", append
'_'. -- Ben Wing
+-- Fix: initialization in mc-alloc. -- Marcus Crestani
+-- Fix: non-MULE needs mswindows_current_locale too. -- Mike Alexander
+-- Fix: setlocale return string is volatile, dup it. -- Olivier Galibert
+-- Fix: unexec for _LP64 ELF architectures. -- Andrey Slusar
+-- Fix: use of config.h, especially in Windows files. -- Ben Wing
+-- Improve: refactor MC_ALLOC to reduce #ifdefs. -- Ben Wing
+-- Improve: use _CRT_SECURE_NO_DEPRECATE to suppress VC8 warnings. -- Ben Wing
+-- Improve: warning elimination. -- Ben Wing, Stephen Turnbull
+
to 21.5.22 "cucumber"
Major features
---New: support for Unnnn-style keysyms on X11. -- Aidan Kehoe
+-- New: support for Unnnn-style keysyms on X11. -- Aidan Kehoe
User-Visible Bug Fixes and Minor Improvements
1.418.2.19 +33 -3 XEmacs/xemacs/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/ChangeLog,v
retrieving revision 1.418.2.18
retrieving revision 1.418.2.19
diff -u -p -r1.418.2.18 -r1.418.2.19
--- ChangeLog 2005/09/24 15:15:30 1.418.2.18
+++ ChangeLog 2005/11/06 16:13:44 1.418.2.19
@@ -1,6 +1,36 @@
-2005-09-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
+
+2005-10-25 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * configure.ac: Prefer Xaw to Motif on Linux, Mac and BSD. From
+ 21.4.
+ * configure.ac (XE_PARSE_COMPLEX_OPTION): Remove debugging.
+ Fix broken --with-<complex>=no.
+
+2005-10-20 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * INSTALL: Reflect changes in the configure options. Update MacOS
+ X X11 installation instructions to reflect the changes in recent
+ OS releases.
+
+2005-10-15 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * configure.ac: Added XE_MERGED_ARG to alias all local --enable
+ and --with options. Configure can only be built with autoconf
+ 2.59. Prevent many unwanted blank lines from appearing in
+ configure.
+
+2005-10-13 Ben Wing <ben(a)xemacs.org>
- * configure.ac (Canna): Disable if MC_ALLOC is enabled.
+ * configure.ac (XE_COMPLEX_ARG_ENABLE):
+ Break lines.
+ * configure.ac (TAB):
+ Rewrite optimization help to be accurate. Setting
+ `--with-cflags-optimization=""' will now unilaterally turn off
+ optimization; setting it to something non-null unilaterally turns it
+ on.
2005-09-22 Stephen J. Turnbull <stephen(a)xemacs.org>
@@ -162,7 +192,7 @@
Use it.
* configure.ac (sound):
- AC_DEFINE_UNQUOTED seems OK, if it's not m4-quoted.
+ AC_DEFINE_UNQUOTED seems OK, if it's not m4-quoted.
2005-02-18 Stephen J. Turnbull <stephen(a)xemacs.org>
1.1.2.4 +0 -4 XEmacs/xemacs/Attic/ChangeLog.Xft
Index: ChangeLog.Xft
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/Attic/ChangeLog.Xft,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -p -r1.1.2.3 -r1.1.2.4
--- ChangeLog.Xft 2005/09/23 18:20:28 1.1.2.3
+++ ChangeLog.Xft 2005/11/06 16:13:45 1.1.2.4
@@ -1,7 +1,3 @@
-2005-09-24 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * .cvsignore: Add _darcs for Darcs users.
-
2005-03-05 Malcolm Purvis <malcolmp(a)xemacs.org>
* configure.ac: Correct the filename of the old copy of configure.
1.41.2.4 +269 -272 XEmacs/xemacs/INSTALL
Index: INSTALL
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/INSTALL,v
retrieving revision 1.41.2.3
retrieving revision 1.41.2.4
diff -u -p -r1.41.2.3 -r1.41.2.4
--- INSTALL 2005/03/15 05:18:54 1.41.2.3
+++ INSTALL 2005/11/06 16:13:45 1.41.2.4
@@ -16,8 +16,6 @@ Copyright (c) 1994-1999, 2003 Free Softw
and that any new or changed statements about the activities
of the Free Software Foundation are approved by the Foundation.
-Last modified by Stephen J. Turnbull <stephen(a)xemacs.org> 2003-02-12
-
BUILDING AND INSTALLATION FOR UNIX AND CYGWIN
(for Microsoft Windows, see nt/README also.)
@@ -74,16 +72,17 @@ ADD-ON LIBRARIES
Decide which libraries you would like to use with XEmacs, but are not
yet available on your system. On some systems, X11, Motif and CDE are
-optional additions. On MacOS/X systems, you may download X11R6 for
-Mac OS X from
http://www.apple.com/macosx/x11/download/. You need
-both the runtime libraries and the SDK (in a sidebar of that page at
-the time of writing). There is also a 3rd-party implementation of
-X11R6 for the Mac at
http://www.xdarwin.org/. On Solaris, the
-SUNWaudmo package enables native sound support. There are also a
-number of free software applications that XEmacs can use. If these
-are not yet available on your system, obtain, build and install those
-external libraries before building XEmacs. The libraries XEmacs can
-use are:
+optional additions. On MacOS/X systems prior to 10.2, you may download
+X11R6 for Mac OS X from
http://www.apple.com/macosx/x11/download/. In
+later releases X11 is available as an optional package on the
+installation CDs. In either case you need both the runtime libraries
+and the SDK (in a sidebar of that page at the time of writing). There
+is also a 3rd-party implementation of X11R6 for the Mac at
+http://www.xdarwin.org/. On Solaris, the SUNWaudmo package enables
+native sound support. There are also a number of free software
+applications that XEmacs can use. If these are not yet available on
+your system, obtain, build and install those external libraries before
+building XEmacs. The libraries XEmacs can use are:
Xaw3d, XPM, JPEG, compface, PNG, zlib, GNU DBM, Berkeley DB, socks,
term, NAS, Canna, Kinput2, SJ3, Wnn, PostgreSQL, LDAP.
@@ -137,239 +136,17 @@ In the top level directory of the XEmacs
program `configure' as follows:
./configure [CONFIGURATION-NAME] [--OPTION[=VALUE]] ...
-
-autoconf 2.5x compatibility
----------------------------
-
-This version of XEmacs includes Malcolm Purvis's support for autoconf 2.5x.
-The distributed version (CVS) of configure is created with autoconf 2.59.
-There should be no significant differences from configure created with
-autoconf version 2.13 from configure.in as of this writing (2005-01-28,
-pre-21.5.19). configure.in is still distributed, and will be automatically
-used by autoconf 2.13 (since autoconf 2.13 doesn't know about configure.ac),
-and normally ignored by autoconf 2.5x (which prefer configure.ac).
-
-Here are Malcolm's notes from xemacs-patches <m2wtuunhp9.fsf(a)silver.local>.
-The remainder of this file uses the nomenclature relevant to configure.in;
-these notes provide a translation.
-
-The most significant change is with the command line arguments. The only
-custom command line arguments allowed in 2.59 are --with-X for using external
-packages and --enable-X for compiling in optional internal features. I have
-renamed the options to conform to this pattern. This results in changes such
-as --with-mule now being --enable-mule.
-
-The full translation of command line arguments are:
-
-Old | New
-------------------------------------------
-General options:
-----------------
-
---help Unchanged
---verbose Unchanged
---extra-verbose Removed
-
-Compilation options:
---------------------
-
---compiler --with-compiler
---xemacs-compiler --with-xemacs-compiler
---with-gcc Unchanged
---cflags --with-cflags
---cflags-warning --with-cflags-warning
---cpp --with-cpp
---cppflags --with-cppflags
---libs --with-libs
---ldflags --with-ldflags
---site-includes --with-site-includes
---site-libraries --with-site-libraries
---site-prefixes --with-site-prefixes
---site-runtime-libraries --with-site-runtime-libraries
---dynamic --with-dynamic
---srcdir Unchanged
-
-Installation options:
----------------------
-
---prefix Unchanged
---with-prefix Unchanged
---with-netinstall Unchanged
---bindir Unchanged
---datadir Unchanged
---statedir Unchanged
---libdir Unchanged
---infodir Unchanged
---mandir Unchanged
---lispdir --with-lispdir
---sitelispdir Removed
---etcdir --with-etcdir
---lockdir Removed
---archlibdir --with-archlibdir
---docdir --with-docdir
---moduledir --with-moduledir
-
-Run-time path-searching options:
---------------------------------
-
---with-site-lisp Unchanged
---with-site-modules Unchanged
---package-prefix --with-package-prefix
---package-path --with-package-path
---infopath --with-infopath
-
-Window-system options:
-----------------------
-
---with-gtk Unchanged
---with-gnome Unchanged
---with-x11 Unchanged
---x-includes Unchanged
---x-libraries Unchanged
---with-msw Unchanged
---with-toolbars --enable-toolbars
---with-wmcommand Unchanged
---with-athena Unchanged
---with-menubars --enable-menubars
---with-scrollbars --enable-scrollbars
---with-dialogs --enable-dialogs
---with-widgets --enable-widgets
---with-dragndrop Unchanged
---with-cde Unchanged
---with-offix Unchanged
---with-xmu Unchanged
---external-widget --enable-external-widget
-
-TTY (character terminal) options:
----------------------------------
-
---with-tty Unchanged
---with-ncurses Unchanged
---with-gpm Unchanged
-
-Image options:
---------------
-
---with-xpm Unchanged
---with-png Unchanged
---with-jpeg Unchanged
---with-tiff Unchanged
---with-xface Unchanged
---with-gif Unchanged
-
-Sound options:
---------------
-
---with-sound --enable-sound
---native-sound-lib=LIB --with-native-sound-lib
-
-Internationalization options:
------------------------------
-
---with-mule --enable-mule
---with-xim Unchanged
---with-canna Unchanged
---with-wnn Unchanged
---with-wnn6 Unchanged
---with-xfs Unchanged
-
-File-related options:
----------------------
-
---with-default-eol-detection --enable-default-eol-detection
---with-clash-detection --enable-clash-detection
-
-Database options:
------------------
-
---with-database --enable-database
---with-ldap Unchanged
---with-postgresql Unchanged
-
-Mail options:
--------------
-
---mail-locking=TYPE --with-mail-locking
---with-pop Unchanged
---with-kerberos Unchanged
---with-hesiod Unchanged
-Networking options:
--------------------
-
---with-tooltalk Unchanged
---with-socks Unchanged
---with-dnet Unchanged
---with-ipv6-cname Unchanged
-
-Memory allocation options:
---------------------------
-
---rel-alloc --with-rel-alloc
---with-dlmalloc Unchanged
---with-system-malloc Unchanged
---with-debug-malloc Unchanged
-
-Emacs Lisp options:
--------------------
-
---use-number-lib --enable-bignum
-
-Debugging options:
-------------------
-
---debug --enable-debug
---error-checking --enable-error-checking
---memory-usage-stats --enable-memory-usage-stats
---quick-build --enable-quick-build
---use-union-type --enable-union-type
---with-quantify Unchanged
---with-purify Unchanged
-
-Developer options:
-------------------
-
---with-workshop Unchanged
---pdump --enable-pdump
---use-kkcc --enable-kkcc
---with-modules --enable-modules
-
-The output files produced by this new configure should be almost identical to
-those produced by the old. This can be tested with the attached regression
-test script. This script runs the two versions of configure with the supplied
-list of command line arguments and reports any differences. Please add your
-favorite configuration command lines to the list before running the test. The
-script is run as:
-
-$ regressiontest.pl /absolute/path/to/2.13/configure \
- /absolute/path/to/2.59/configure >diffs.txt
-
-The only differences should be:
-- those related to changes in the command line arguments
-- the change of SYS_SIGLIST_DECLARED to HAVE_DECL_SYS_SIGLIST (because the old
- form has been removed), and
-- The removal of trailing comments in src/config.h. Applying the attached
- patch config-h-213.patch to the 2.13 work area will remove these. This
- patch makes no functional changes to the configuration and will cut the size
- of diffs.txt by about 60%.
-
-At this stage please review this patch for the accuracy of the generated
-configuration files and the command line arguments. I shall improve the
-documentation and formatting before posting the final patch.
-
-End of Malcolm's notes on the port of configure to autoconf 2.59.
-
-The regression test script mentioned in Malcolm's notes is in
-tests/autoconf/.
-
-I have a few differences of opinion about naming; for now we'll go with
-Malcolm's names but you should pay attention as some of the flag names may
-change again. There's also the problem that Malcolm's naming does not
-conform to GNU autoconf's option naming rules. I think that these rules are
-a crock (or maybe even a whole cesspit) of shit (well, what else is GNU?).
-However, if other projects are following them I think we should seriously
-consider doing so, too. After all, God gave us opposable thumbs so that we
-could hold our noses in situations like this.
+Options are generally of the form `--with-FEATURE' or
+`--enable-FEATURE' to use a feature or `--without-FEATURE' or
+`--disable-FEATURE' to not use a feature. Unlike the `configure'
+program used in other applications, either `--with-FEATURE' or
+`--enable-FEATURE' can be used to use the same feature.
+
+If you haven't built XEmacs 21.5 recently, the change from the
+configure script based on Autoconf 2.13 can be a shock. Appendix:
+Correspondence to Old Configure Options (at the end of this document)
+contains a list of old options and their new equivalents.
Controlling the Host Type
-------------------------
@@ -431,23 +208,37 @@ CFLAGS is consulted. If that is also un
The `--with-cflags-warning=FLAGS' option specifies the warnings to be
generated. There is normally no reason to use this flag, as XEmacs
-turns on as many warnings as possible, and is still expected to build
-with no, or at most a few warnings.
+turns on as many warnings as possible, and is still intended to build
+with no warnings. If you get any undocumented warnings, please report
+them as bugs---they very often are, or at least indicate possible
+bitrot.
The `--with-cflags-optimization=FLAGS' option specifies the
-optimizations to be used. There is normally no reason to use this flag,
-as XEmacs will already set the maximum safe
-optimization flags appropriate for the compiler being invoked.
+optimizations to be used. There is normally no reason to use this
+flag, as XEmacs will already set the maximum safe optimization flags
+appropriate for the compiler being invoked.
The `--with-cflags-debugging=FLAGS' option specifies debugging
-information to be generated. There is normally no reason to use this
-flag, as XEmacs will include debugging information whenever possible
-(i.e. unless optimization is turned on and the compiler does not permit
-debugging and optimization simultaneously).
+information to be generated. You should avoid using this flag, as it
+makes most severe or fatal bugs hard-to-impossible to diagnose and
+fix. Debugging information does not slow down XEmacs at runtime, and
+it doesn't make the binary very much bigger.
+
+The `--with-dynamic' option specifies that configure should try to
+link XEmacs dynamically rather than statically. `--with-static'
+specifies the reverse. XEmacs's configure script detects whether
+dynamic linking can be done on all platforms we know of; these options
+are normally unnecessary.
+
+The `--with-modules' option specifies that XEmacs be built with
+support for runtime loadable modules. NOTE TO OEMS: XEmacs can be
+distributed configured to support several options based on external
+APIs (currently LDAP, PostgreSQL, and Canna) as loadable modules. You
+can distribute an XEmacs binary package with these options enabled
+without depending on the external package. XEmacs will fail
+gracefully at runtime, issuing an error message indicating that the
+required support was not found on the system.
-The `--with-dynamic' option specifies that configure should try to link
-emacs dynamically rather than statically.
-
You can build XEmacs for several different machine types from a single
source directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. Create separate
@@ -501,27 +292,27 @@ system has X Window System support, and
The `--without-xmu' option can be used if your vendor doesn't ship
the Xmu library.
-The `--enable-menubars=TYPE' option allows you to specify which X
+The `--with-menubars=TYPE' option allows you to specify which X
toolkit you wish to use for the menubar. The valid options are
`lucid', `motif' and `no'. The default is `lucid' which is a
Motif-lookalike menubar. We highly recommend its usage over the real
Motif menubar. (In fact, the Motif menubar is currently broken.) If
`no' is specified then support for menubars will not be compiled in.
-The `--enable-scrollbars=TYPE' option allows you to specify which X
+The `--with-scrollbars=TYPE' option allows you to specify which X
toolkit you wish to use for the scrollbars. The valid options are
`lucid', `motif', `athena', `athena3d', and `no'. The default is
`lucid' which is a Motif-lookalike scrollbar. If `no' is specified then
support for scrollbars will not be compiled in.
-The `--enable-dialogs=TYPE' option allows you to specify which X toolkit
+The `--with-dialogs=TYPE' option allows you to specify which X toolkit
you wish to use for the dialog boxes. The valid options are `athena',
`athena3d', `motif, and `no. The `lucid' option is accepted and will
result in the `athena' toolkit being used. If the Motif toolkit can be
found the default is `motif'. Otherwise, the default is `athena'. If
`no' is specified then support for dialog boxes will not be compiled in.
-The `--enable-toolbars' option allows you to enable or disable toolbar
+The `--with-toolbars' option allows you to enable or disable toolbar
support. The default is `yes' if support for a windowing system is
included.
@@ -533,38 +324,41 @@ The `--with-xface' option specifies that
X-Faces. `configure' will attempt to detect if you have the compface
library and define `--with-xface' for you.
-The `--enable-database' option specifies that XEmacs should be built
+The `--with-database' option specifies that XEmacs should be built
with simple database support. The valid options are `no' or a
comma-separated list of one or more of `dbm', `gnudbm' or `berkdb'.
`configure' will attempt to detect the necessary libraries and header
-files and define `--enable-database' for you.
+files and define `--with-database' for you.
The `--with-postgresql' option specifies that XEmacs should be built
with PostgreSQL support, linking with libpq. `configure' will attempt
to detect whether PostgreSQL support is available, and automatically
-define `--with-postgresql' for you.
+define `--with-postgresql' for you. NOTE TO OEMS: If modules are
+supported and enabled, the libpq API support will be build as a
+module.
The `--with-ldap' option specifies that XEmacs should be build with
LDAP support, using the OpenLDAP libraries. `configure' will attempt
to detect whether LDAP support is available, and automatically define
-`--with-ldap' for you.
+`--with-ldap' for you. NOTE TO OEMS: If modules are supported and
+enabled, the OpenLDAP API support will be build as a module.
The `--with-socks' option specifies that XEmacs should be built with
SOCKS support. This requires the libsocks library.
-The `--enable-external-widget' option specifies that XEmacs should be
+The `--with-external-widget' option specifies that XEmacs should be
built with support for being used as a widget by other X11 applications.
This functionality should be considered beta.
-The `--enable-sound=TYPE' option specifies that XEmacs should be built
-with sound support. Native (`--enable-sound=native') sound support is
+The `--with-sound=TYPE' option specifies that XEmacs should be built
+with sound support. Native (`--with-sound=native') sound support is
currently available only on Sun SparcStations, SGI's, HP9000s, and
systems (such as Linux) with soundcard.h. Network Audio Support (NAS)
-(`--enable-sound=nas') is an extension to X that you may or may not have
+(`--with-sound=nas') is an extension to X that you may or may not have
for your system. For NAS, you will probably need to provide the paths
to the nas include and library directories to configure. If
-`--enable-sound' is not specified, `configure' will attempt to determine
-if your configuration supports native sound and define --enable-sound
+`--with-sound' is not specified, `configure' will attempt to determine
+if your configuration supports native sound and define --with-sound
for you. If your native sound library is not in a standard location you
can specify it with the `--with-native-sound-lib=LIB' flag. For Linux,
`/dev/audio' is required for SunAudio files and `/dev/dsp' is required
@@ -594,7 +388,7 @@ support can be explicitly disabled via t
Internationalization Options
----------------------------
-The `--enable-mule' option enables MUlti-Lingual Emacs (Mule) support,
+The `--with-mule' option enables MUlti-Lingual Emacs (Mule) support,
needed to support non-Latin-1 (including Asian) languages. Mule
support is required for Asian language and Unicode (multibyte and wide
character) support. With the advent of the Euro and European
@@ -635,7 +429,8 @@ still unknown. If Canna is already inst
it, so you never need to explicitly use this option unless your Canna
libraries are somewhere strange. Canna run time support is currently
bundled with the `mule-base' package so there is nothing additional to
-install in order to use it.
+install in order to use it. NOTE TO OEMS: If modules are supported
+and enabled, the libcanna API support will be build as a module.
The `--with-wnn' and `--with-wnn6' options are for compiling with the Wnn
multi-language input method. `--with-wnn' is for compiling with Wnn-4.2,
@@ -1014,3 +809,205 @@ without downloading some additional pack
See the file PROBLEMS in this directory for a list of various problems
sometimes encountered, and what to do about them. PROBLEMS is also
the place where platform-specific build notes can be found.
+
+APPENDIX: CORRESPONDENCE TO OLD CONFIGURE OPTIONS
+=================================================
+
+Here is a full translation of command line arguments. Note that any
+option starting with "--with" may also be specified with
"--enable".
+This list may not be up-to-date.
+
+Old | New
+------------------------------------------
+General options:
+----------------
+
+--help Unchanged
+--usage Removed
+--verbose Unchanged
+--extra-verbose Removed
+
+Compilation options:
+--------------------
+
+--compiler --with-compiler
+--xemacs-compiler --with-xemacs-compiler
+--with-gcc Unchanged
+--cflags --with-cflags
+--cflags-warning --with-cflags-warning
+--debug --with-debug
+New --with-cflags-debug
+New --with-optimization
+New --with-cflags-optimization
+--cpp --with-cpp
+--cppflags --with-cppflags
+--libs --with-libs
+--ldflags --with-ldflags
+--site-includes --with-site-includes
+--site-libraries --with-site-libraries
+--site-prefixes --with-site-prefixes
+--site-runtime-libraries --with-site-runtime-libraries
+--dynamic --with-dynamic
+--srcdir Unchanged
+
+Installation options:
+---------------------
+
+--prefix Unchanged
+--with-prefix Unchanged
+--with-netinstall Unchanged
+--bindir Unchanged
+--datadir Unchanged
+--statedir Unchanged
+--libdir Unchanged
+--infodir Unchanged
+--mandir Unchanged
+--lispdir --with-lispdir
+--sitelispdir Removed
+--etcdir --with-etcdir
+--lockdir Removed
+--archlibdir --with-archlibdir
+--docdir --with-docdir
+--moduledir --with-moduledir
+
+Run-time path-searching options:
+--------------------------------
+
+--with-site-lisp Unchanged
+--with-site-modules Unchanged
+--package-prefix --with-package-prefix
+--package-path --with-package-path
+--infopath --with-infopath
+
+Window-system options:
+----------------------
+
+--with-gtk Unchanged
+--with-gnome Unchanged
+--with-x11 Unchanged
+--x-includes Unchanged
+--x-libraries Unchanged
+--with-msw Unchanged
+--with-toolbars Unchanged
+--with-wmcommand Unchanged
+--with-athena Unchanged
+--with-menubars Unchanged
+--with-scrollbars Unchanged
+--with-dialogs Unchanged
+--with-widgets Unchanged
+--with-dragndrop Unchanged
+--with-cde Unchanged
+--with-offix Unchanged
+--with-xmu Unchanged
+--external-widget --with-external-widget
+
+TTY (character terminal) options:
+---------------------------------
+
+--with-tty Unchanged
+--with-ncurses Unchanged
+--with-gpm Unchanged
+
+Image options:
+--------------
+
+--with-xpm Unchanged
+--with-png Unchanged
+--with-jpeg Unchanged
+--with-tiff Unchanged
+--with-xface Unchanged
+--with-gif Unchanged
+
+Sound options:
+--------------
+
+--with-sound Unchanged
+--native-sound-lib=LIB --with-native-sound-lib
+
+Internationalization options:
+-----------------------------
+
+--with-mule Unchanged
+--with-xim Unchanged
+--with-canna Unchanged
+--with-wnn Unchanged
+--with-wnn6 Unchanged
+--with-xfs Unchanged
+
+File-related options:
+---------------------
+
+--with-default-eol-detection Unchanged
+--with-clash-detection Unchanged
+
+Database options:
+-----------------
+
+--with-database Unchanged
+--with-ldap Unchanged
+--with-postgresql Unchanged
+
+Mail options:
+-------------
+
+--mail-locking=TYPE --with-mail-locking
+--with-pop Unchanged
+--with-kerberos Unchanged
+--with-hesiod Unchanged
+
+Networking options:
+-------------------
+
+--with-tooltalk Unchanged
+--with-socks Unchanged
+--with-dnet Unchanged
+--with-ipv6-cname Unchanged
+
+Memory allocation options:
+--------------------------
+
+--rel-alloc --with-rel-alloc
+--with-dlmalloc Unchanged
+--with-system-malloc Unchanged
+--with-debug-malloc Unchanged
+
+Emacs Lisp options:
+-------------------
+
+--use-number-lib --with-bignum
+
+Debugging options:
+------------------
+
+--debug --with-debug
+--error-checking --with-error-checking
+--memory-usage-stats --with-memory-usage-stats
+--quick-build --with-quick-build
+--use-union-type --with-union-type
+--with-quantify Unchanged
+--with-purify Unchanged
+
+Developer options:
+------------------
+
+--with-workshop Unchanged
+--pdump --with-pdump
+--use-kkcc --with-kkcc
+--with-modules Unchanged
+
+The output files produced by this new configure should be almost
+identical to those produced by the old. This can be tested with the
+provided regression test script. This script runs the two versions of
+configure with the supplied list of command line arguments and reports
+any differences. Please add your favorite configuration command lines
+to the list before running the test. The script is run as:
+
+$ tests/autoconf/regressiontest.pl /absolute/path/to/2.13/configure \
+ /absolute/path/to/2.59/configure >diffs.txt
+
+The only differences should be:
+- those related to changes in the command line arguments
+- the change of SYS_SIGLIST_DECLARED to HAVE_DECL_SYS_SIGLIST (because the old
+ form has been removed), and
+- The removal of trailing comments in src/config.h.
+
1.1.14.15 +302 -252 XEmacs/xemacs/configure.ac
Index: configure.ac
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/configure.ac,v
retrieving revision 1.1.14.14
retrieving revision 1.1.14.15
diff -u -p -r1.1.14.14 -r1.1.14.15
--- configure.ac 2005/09/24 15:16:01 1.1.14.14
+++ configure.ac 2005/11/06 16:13:46 1.1.14.15
@@ -15,13 +15,17 @@ ac_compile='$CC -c $CFLAGS '"$xe_cppflag
ac_link='$CC -o conftest$ac_exeext $CFLAGS '"$xe_cppflags
$xe_ldflags"' conftest.$ac_ext '"$xe_libs"'
>&AS_MESSAGE_LOG_FD'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
])
-
+dnl
dnl -------------------------------------------------------------------------
dnl Autoconf startup.
-
+dnl
+dnl Due to a dependence on the implementation of certain internal autoconf
+dnl macros, die if any version other than 2.59 is used.
AC_PREREQ(2.59)dnl
+m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [2.59]), 1,
+ [m4_fatal([This script can only be generated with autoconf 2.59])], [])dnl
AC_INIT(src/lisp.h)dnl
-
+dnl
dnl -------------------------------------------------------------------------
dnl Local copyright notices.
@@ -85,39 +89,39 @@ dnl
dnl If there's reason to prefer $0 over this, make sure you fix all the
dnl uses in this script!!
progname="`echo $0 | sed 's:^\./\./:\./:'`"
-
+dnl
dnl -------------------------------------------------------------------------
dnl Local macros
-
+dnl
define([USAGE_ERROR],
[(echo "$progname: Usage error:"
echo " " $1
-echo " Use \`$progname --help' to show usage.") >&2 &&
exit 1])
-
+echo " Use \`$progname --help' to show usage.") >&2 &&
exit 1])dnl
+dnl
dnl PRINT_VAR(var var ...) prints values of shell variables
define([PRINT_VAR],[for var in patsubst([$1],[[
-]+],[ ]); do eval "echo \"$var = '\$$var'\""; done])
-
+]+],[ ]); do eval "echo \"$var = '\$$var'\""; done])dnl
+dnl
dnl XE_ADD_OBJS(foo.o)
define([XE_ADD_OBJS],
[extra_objs="$extra_objs [$1]" && dnl
if test "$verbose" = "yes"; then
echo " xemacs will be linked with \"[$1]\""
fi])dnl XE_ADD_OBJS
-
+dnl
dnl XE_APPEND(value, varname)
define([XE_APPEND],
[[$2]="$[$2] [$1]" && dnl
- if test "$verbose" = "yes"; then echo " Appending
\"[$1]\" to \$[$2]"; fi])
-
+ if test "$verbose" = "yes"; then echo " Appending
\"[$1]\" to \$[$2]"; fi])dnl
+dnl
dnl XE_PREPEND(value, varname)
define([XE_PREPEND],
[[$2]="[$1] $[$2]" && dnl
- if test "$verbose" = "yes"; then echo " Prepending
\"[$1]\" to \$[$2]"; fi])
-
+ if test "$verbose" = "yes"; then echo " Prepending
\"[$1]\" to \$[$2]"; fi])dnl
+dnl
dnl XE_DIE(message)
-define([XE_DIE], [{ echo "Error:" $1 >&2; exit 1; }])
-
+define([XE_DIE], [{ echo "Error:" $1 >&2; exit 1; }])dnl
+dnl
dnl XE_CHECK_FEATURE_DEPENDENCY(feature1, feature2)
define([XE_CHECK_FEATURE_DEPENDENCY],
[if test "$with_[$1] $with_[$2]" = "yes no"; then
@@ -125,13 +129,13 @@ define([XE_CHECK_FEATURE_DEPENDENCY],
elif test "$with_[$2]" = "no" ; then with_[$1]=no
elif test "$with_[$1]" = "yes"; then with_[$2]=yes
fi
-])
-
+])dnl
+dnl
dnl XE_STRIP_4TH_COMPONENT(var)
dnl Changes i986-pc-linux-gnu to i986-pc-linux, as God (not RMS) intended.
define([XE_STRIP_4TH_COMPONENT],
-[$1=`echo "$$1" | sed
'[s/^\([^-][^-]*-[^-][^-]*-[^-][^-]*\)-.*$/\1/]'`])
-
+[$1=`echo "$$1" | sed
'[s/^\([^-][^-]*-[^-][^-]*-[^-][^-]*\)-.*$/\1/]'`])dnl
+dnl
dnl Do our best to deal with automounter brokenness
dnl CANONICALIZE_PATH(varname)
define([CANONICALIZE_PATH],
@@ -140,7 +144,7 @@ define([CANONICALIZE_PATH],
$1=`echo "[$]$1" | \
sed -e "s|^${tdir}/|/net/|" -e "s|^/a/|/net/|" -e
"s|^/amd/|/net/|"`
fi])dnl
-
+dnl
dnl XE_PROTECT_LINKER_FLAGS(shell_var)
define([XE_PROTECT_LINKER_FLAGS], [
if test "$GCC" = "yes"; then
@@ -155,11 +159,11 @@ if test "$GCC" = "yes"; then
shift
done
fi])dnl
-
+dnl
dnl Allow use of either ":" or spaces for lists of directories
define(COLON_TO_SPACE,
[case "$[$1]" in *:* [)] [$1]="`echo '' $[$1] | sed -e
's/^ //' -e 's/:/ /g'`";; esac])dnl
-
+dnl
dnl XE_ADD_RUNPATH_DIR(directory)
define([XE_ADD_RUNPATH_DIR],[{
xe_runpath_dir=$1
@@ -169,7 +173,7 @@ dnl PRINT_VAR(ld_switch_site ld_switch_x
-n "`ls ${xe_runpath_dir}/*.s[[ol]] 2>/dev/null`" && \
eval "$xe_add_unique_runpath_dir"
}])dnl
-
+dnl
dnl XE_COMPUTE_RUNPATH()
define([XE_COMPUTE_RUNPATH],[
if test "$add_runtime_path" = "yes" -a -n "$dash_r";
then
@@ -204,6 +208,7 @@ if test "$add_runtime_path" = "yes" -a -
case "$arg" in -L*) XE_ADD_RUNPATH_DIR(`echo ''
"$arg" | sed -e 's:^ ::' -e 's/^-L//'`);; esac
done
dnl Sometimes /opt/SUNWdt/lib is the only installed Motif available
+ dnl #### this test always fails here as need_motif is null
if test "$opsys $need_motif" = "sol2 yes"; then
xe_runpath_dir="/opt/SUNWdt/lib";
eval "$xe_add_unique_runpath_dir";
@@ -217,7 +222,7 @@ if test "$add_runtime_path" = "yes" -a -
fi
fi
])dnl
-
+dnl
dnl The construct foo=`echo $w1 $w2 $w3` fails on some systems if $w1 = -e or -n
dnl So we use the following instead.
dnl XE_SPACE(var, words)
@@ -226,7 +231,42 @@ T=""
for W in $2; do if test -z "$T"; then T="$W"; else T="$T
$W"; fi; done
$1="$T"
])dnl XE_SPACE
-
+dnl
+dnl XE_MERGED_ARG(FEATURE, HELP-STRING, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+dnl ------------------------------------------------------------------------
+dnl
+dnl Arguments that can be specified with either --enable or --with. The
+dnl majority of XEmacs arguments do not fit neatly into the division between
+dnl --enable and --with, so allow those to be specified by either argument.
+dnl The value is stored in both enable_FEATURE and with_FEATURE.
+AC_DEFUN([XE_MERGED_ARG],
+[m4_divert_once([HELP_ENABLE], [[
+Optional Features:
+ --with-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-FEATURE[=ARG] alias for --with-FEATURE
+ --without-FEATURE do not use FEATURE (same as --with-FEATURE=no)
+ --disable-FEATURE alias for --without-FEATURE]])dnl
+m4_divert_once([HELP_ENABLE], m4_bpatsubst([[$2]],[--enable\([^ ]+\) ],[--with\1
]))dnl
+# If --with-$1 or --without-$1 were given then copy the value to the
+# equivalent enable_$1 variable.
+if test "[${with_]m4_bpatsubst([$1], -, _)+set}" = set; then
+ [enable_]m4_bpatsubst([$1], -, _)="[$with_]m4_bpatsubst([$1], -, _)"
+fi;
+# If -enable-$1 or --disable-$1 were given then copy the value to the
+# equivalent with_$1 variable.
+if test "[${enable_]m4_bpatsubst([$1], -, _)+set}" = set; then
+ [with_]m4_bpatsubst([$1], -, _)="[$enable_]m4_bpatsubst([$1], -, _)"
+fi;
+# Check whether --with-$1 or --without-$1 was given.
+if test "[${with_]m4_bpatsubst([$1], -, _)+set}" = set; then
+ enableval="[$with_]m4_bpatsubst([$1], -, _)"
+ withval="[$with_]m4_bpatsubst([$1], -, _)"
+ $3
+m4_ifvaln([$4], [else
+ $4])dnl
+fi; dnl
+])dnl XE_MERGED_ARG
+dnl
dnl XEmacs keyword option support
dnl =============================
dnl
@@ -249,7 +289,7 @@ dnl
define([XE_PARSE_KEYWORD_OPTION],
[_[$1]_bogus=yes
for x in XE_KEYWORD_LIST ; do
- if test $x = $[$1] ; then
+ if test $x = $with_[$1] ; then
_[$1]_bogus=no
fi
done
@@ -258,7 +298,7 @@ define([XE_PARSE_KEYWORD_OPTION],
fi
unset _[$1]_bogus
undefine([XE_KEYWORD_LIST])dnl
-undefine([XE_KEYWORD_VALUES])])
+undefine([XE_KEYWORD_VALUES])])dnl
dnl
dnl XE_KEYWORD(keyword)
dnl --------------------------------
@@ -269,35 +309,21 @@ define([XE_KEYWORD],
dnl Separate with a ':' instead of a ',' (see the parsing code above)
to avoid
dnl confusion with marco parameter lists.
m4_append([XE_KEYWORD_VALUES],[\`$1'],[:])dnl
-])
-dnl
-dnl XE_KEYWORD_ARG_WITH(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE,
-dnl [XE_KEYWORD(keyword), ....])
-dnl --------------------------------------------------------------------------
-dnl
-dnl Expanded version of AC_ARG_WITH for keyword options. All the parameters
-dnl are required.
-dnl
-define([XE_KEYWORD_ARG_WITH],
-[m4_map([XE_KEYWORD],m4_shiftn(4, $@))
-AC_ARG_WITH([$1],[$2],
-[XE_PARSE_KEYWORD_OPTION([with_]patsubst([$1], -, _), [--with-$1])
-$3
-],[$4])])
+])dnl
dnl
-dnl XE_KEYWORD_ARG_ENABLE(FEATURE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE,
+dnl XE_KEYWORD_ARG(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE,
dnl [XE_KEYWORD(keyword), ....])
dnl --------------------------------------------------------------------------
dnl
-dnl Expanded version of AC_ARG_ENABLE for keyword options. All the parameters
+dnl Expanded version of XE_MERGED_ARG for keyword options. All the parameters
dnl are required.
dnl
-define([XE_KEYWORD_ARG_ENABLE],
+define([XE_KEYWORD_ARG],
[m4_map([XE_KEYWORD],m4_shiftn(4, $@))
-AC_ARG_ENABLE([$1],[$2],
-[XE_PARSE_KEYWORD_OPTION([enable_]patsubst([$1], -, _), [--enable-$1])
+XE_MERGED_ARG([$1],[$2],
+[XE_PARSE_KEYWORD_OPTION(patsubst([$1], -, _), [--with-$1])
$3
-],[$4])])
+],[$4])])dnl
dnl
dnl XEmacs complex option support
dnl =============================
@@ -320,7 +346,8 @@ dnl Internal macro create the option's s
dnl value and to note the values in an option list.
dnl
define([XE_EXPAND_COMPLEX_OPTION],
-[[$1]_[$2]=[$3]
+[with_[$1]_[$2]=[$3]
+enable_[$1]_[$2]=[$3]
m4_append([XE_COMPONENT_LIST],[$2],[ ])dnl
dnl Separate with a ':' instead of a ',' (see <prefix>_default
below) to avoid
dnl confusion with marco parameter lists.
@@ -335,7 +362,7 @@ dnl
define([XE_EXPAND_COMPLEX_OPTIONS],
[m4_if([$2], [[]], [],
[XE_EXPAND_COMPLEX_OPTION([$1], m4_fst($2))[]dnl
-XE_EXPAND_COMPLEX_OPTIONS([$1], m4_cdr($2))])])
+XE_EXPAND_COMPLEX_OPTIONS([$1], m4_cdr($2))])])dnl
dnl
dnl XE_INIT_COMPLEX_OPTION(prefix, option_list)
dnl -------------------------------------------
@@ -347,7 +374,7 @@ dnl and <prefix>_default contains a comm
dnl values.
dnl
define([XE_INIT_COMPLEX_OPTION],
-[[$1]_notfirst=""
+[_[$1]_notfirst=""
dnl
XE_EXPAND_COMPLEX_OPTIONS($@)
_[$1]_types="XE_COMPONENT_LIST"
@@ -356,8 +383,8 @@ dnl Undefine these macros so that they c
dnl options.
undefine([XE_COMPONENT_LIST])
undefine([XE_COMPONENT_DEFAULT])
-])
-
+])dnl
+dnl
dnl XE_PARSE_COMPLEX_OPTION(prefix, cmdline-flag)
dnl ---------------------------------------------
dnl
@@ -365,7 +392,7 @@ dnl Internal macro to parse the option v
dnl found then an error is generated.
dnl
define([XE_PARSE_COMPLEX_OPTION],
-[for x in `echo "$[$1]" | sed -e 's/,/ /g'` ; do
+[for x in `echo "$with_[$1]" | sed -e 's/,/ /g'` ; do
_[$1]_all_default=""
_[$1]_found=""
case "$x" in
@@ -380,12 +407,14 @@ define([XE_PARSE_COMPLEX_OPTION],
dnl echo "$x" = "$y"
_[$1]_found=yes
dnl echo eval `echo "[$1]_$y=yes"`
- eval "[$1]_$y=yes"
+ eval "with_[$1]_$y=yes"
+ eval "enable_[$1]_$y=yes"
elif test "$x" = "no$y"; then
dnl echo "$x" = "no$y"
_[$1]_found=yes
dnl echo eval `echo "[$1]_$y=no"`
- eval "[$1]_$y=no"
+ eval "with_[$1]_$y=no"
+ eval "enable_[$1]_$y=no"
fi
done
test -z "$_[$1]_found" && _[$1]_bogus=yes
@@ -398,15 +427,16 @@ Defaults may be overridden with \`all' o
Hardcoded default is: $_[$1]_default."])
elif test -n "$_[$1]_all_default" ; then
for y in $_[$1]_types; do
- eval "[$1]_$y=$_[$1]_all_default"
+ eval "with_[$1]_$y=$_[$1]_all_default"
+ eval "enable_[$1]_$y=$_[$1]_all_default"
done
fi
_[$1]_notfirst=yes
done
unset _[$1]_bogus _[$1]_found _[$1]_notfirst _[$1]_types
unset _[$1]_default _[$1]_all_default x y
-])
-
+])dnl
+dnl
dnl XE_COMPLEX_OPTION(option, yesno)
dnl --------------------------------
dnl
@@ -423,35 +453,21 @@ dnl
define([XE_COMPLEX_OPTION_HELP_STRING],
[AC_HELP_STRING([$1],[Compile with support for $2. Components that can use
$3 are $4. Prefix component with `no' to disable its use of $3. Requires
-$5 support. Default is $6.])])
+$5 support. Default is $6.])])dnl
dnl
-dnl XE_COMPLEX_ARG_WITH(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE,
+dnl XE_COMPLEX_ARG(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE,
dnl [XE_COMPLEX_OPTION(a,yes), ....])
dnl --------------------------------------------------------------------------
-dnl
-dnl Expanded version of AC_ARG_WITH for complex options. All the parameters
-dnl are required.
-dnl
-define([XE_COMPLEX_ARG_WITH],
-[XE_INIT_COMPLEX_OPTION([with_]patsubst([$1], -, _), m4_shiftn(4, $@))
-AC_ARG_WITH([$1],[$2],
-[XE_PARSE_COMPLEX_OPTION([with_]patsubst([$1], -, _), [--with-$1])
-$3
-],[$4])])
-dnl
-dnl XE_COMPLEX_ARG_ENABLE(FEATURE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE,
-dnl [XE_COMPLEX_OPTION, ....])
-dnl --------------------------------------------------------------------------
dnl
-dnl Expanded version of AC_ARG_ENABLE for complex options. All the parameters
+dnl Expanded version of XE_MERGED_ARG for complex options. All the parameters
dnl are required.
dnl
-define([XE_COMPLEX_ARG_ENABLE],
-[XE_INIT_COMPLEX_OPTION([enable_]patsubst([$1], -, _), m4_shiftn(4, $@))
-AC_ARG_ENABLE([$1],[$2],
-[XE_PARSE_COMPLEX_OPTION([enable_]patsubst([$1], -, _), [--enable-$1])
+define([XE_COMPLEX_ARG],
+[XE_INIT_COMPLEX_OPTION(patsubst([$1], -, _), m4_shiftn(4, $@))
+XE_MERGED_ARG([$1],[$2],
+[XE_PARSE_COMPLEX_OPTION(patsubst([$1], -, _), [--with-$1])
$3
-],[$4])])
+],[$4])])dnl
dnl
dnl -------------------------------------------------------------------------
XE_APPEND(lib-src, MAKE_SUBDIR)
@@ -462,19 +478,6 @@ dnl Command line argument processing.
dnl Note that AC_HELP_STRING compresses whitespace, wraps, and indents the
dnl string to fit the --help display; there's no need to preformat.
dnl
-dnl Error-checking on old-style flags
-AC_ARG_WITH([mule],[],[XE_DIE([--enable-mule, NOT --with-mule])],[])
-AC_ARG_WITH([menubars],[],[XE_DIE([--enable-menubars, NOT --with-menubars])],[])
-AC_ARG_WITH([scrollbars],[],[XE_DIE([--enable-scrollbars, NOT --with-scrollbars])],[])
-AC_ARG_WITH([dialogs],[],[XE_DIE([--enable-dialogs, NOT --with-dialogs])],[])
-AC_ARG_WITH([widgets],[],[XE_DIE([--enable-widgets, NOT --with-widgets])],[])
-AC_ARG_WITH([sound],[],[XE_DIE([--enable-sound, NOT --with-sound])],[])
-AC_ARG_WITH([default-eol-detection],[],[XE_DIE([--enable-default-eol-detection, NOT
--with-default-eol-detection])],[])
-AC_ARG_WITH([clash-detection],[],[XE_DIE([--enable-clash-detection, NOT
--with-clash-detection])],[])
-AC_ARG_WITH([database],[],[XE_DIE([--enable-database, NOT --with-database])],[])
-AC_ARG_WITH([modules],[],[XE_DIE([--enable-modules, NOT --with-modules])],[])
-AC_ARG_WITH([toolbars],[],[XE_DIE([--enable-toolbars, NOT --with-toolbars])],[])
-
dnl I think these will be caught by autoconf internal checks,
dnl only --with-* are unchecked
dnl --external-widget --enable-external-widget
@@ -489,52 +492,52 @@ dnl --quick-build --enable-q
dnl --use-union-type --enable-union-type
dnl --pdump --enable-pdump
dnl --use-kkcc --enable-kkcc
-
+dnl
dnl parse flags
-AC_ARG_WITH([prefix],
+XE_MERGED_ARG([prefix],
AC_HELP_STRING([--with-prefix=no],[Don't compile the value for `prefix' into
the executable.]),
[true], [with_prefix=yes])
-AC_ARG_WITH([site-lisp],
+XE_MERGED_ARG([site-lisp],
AC_HELP_STRING([--with-site-lisp=no],[Allow for a site-lisp directory in the XEmacs
hierarchy searched before the installation packages.]),
[true], [with_site_lisp=no])
-AC_ARG_WITH([site-modules],
+XE_MERGED_ARG([site-modules],
AC_HELP_STRING([--with-site-modules],[Disable site-modules directory in the XEmacs
hierarchy, which is searched before the installation modules.]),
[], [])
-AC_ARG_WITH([gtk],
+XE_MERGED_ARG([gtk],
AC_HELP_STRING([--with-gtk],[Support GTK on the X Window System. (EXPERIMENTAL)]),
[true], [with_gtk=no])
-AC_ARG_WITH([gnome],
+XE_MERGED_ARG([gnome],
AC_HELP_STRING([--with-gnome],[Support GNOME on the X Window System.
(EXPERIMENTAL)]),
[true], [with_gnome=no])
-AC_ARG_WITH([msw],
+XE_MERGED_ARG([msw],
AC_HELP_STRING([--with-msw],[Support MS Windows as a window system (only under Cygwin
and MinGW). `--with-msw=no' may be needed on *nix systems with Wine installed.]),
[], [])
-AC_ARG_WITH([gcc],
+XE_MERGED_ARG([gcc],
AC_HELP_STRING([--with-gcc],[Use GCC to compile XEmacs.]),
[], [])
-AC_ARG_WITH([dynamic],
+XE_MERGED_ARG([dynamic],
AC_HELP_STRING([--with-dynamic],[Link dynamically if supported by system.
'No' forces static linking.]),
[], [])
-AC_ARG_WITH([ncurses],
+XE_MERGED_ARG([ncurses],
AC_HELP_STRING([--with-ncurses],[Use the ncurses library for tty support.]),
[], [])
-AC_ARG_WITH([dnet],
+XE_MERGED_ARG([dnet],
AC_HELP_STRING([--with-dnet],[Compile with support for DECnet.]),
[], [])
-AC_ARG_WITH([socks],
+XE_MERGED_ARG([socks],
AC_HELP_STRING([--with-socks],[Compile with support for SOCKS (an Internet proxy).]),
[], [])
-AC_ARG_WITH([dragndrop],
+XE_MERGED_ARG([dragndrop],
AC_HELP_STRING([--with-dragndrop],[Compile in the generic drag and drop API. This is
automatically added if one of the drag and drop
protocols is found (currently CDE, OffiX, MSWindows,
and GTK).
*WARNING* The Drag'n'drop support is under
development
and is considered experimental.]),
[], [])
-AC_ARG_WITH([cde],
+XE_MERGED_ARG([cde],
AC_HELP_STRING([--with-cde],[Compile in support for CDE drag and drop.]),
[], [])
-AC_ARG_WITH([offix],
+XE_MERGED_ARG([offix],
AC_HELP_STRING([--with-offix],[Compile in support for OffiX drag and drop.
*WARNING* If you compile in OffiX, you may not be
able to use multiple X displays success-
@@ -542,40 +545,39 @@ AC_ARG_WITH([offix],
different vendors, the results may be
unpredictable.]),
[], [])
-AC_ARG_WITH([gpm],
+XE_MERGED_ARG([gpm],
AC_HELP_STRING([--with-gpm],[Compile in GPM mouse support for ttys.]),
[], [])
-AC_ARG_WITH([xpm],
+XE_MERGED_ARG([xpm],
AC_HELP_STRING([--with-xpm],[Compile with support for XPM images. PRACTICALLY
REQUIRED. Although this library is nonstandard and
a real hassle to build, many basic things (e.g.
toolbars) depend on it, and you will run into
many problems without it.]),
[], [])
-AC_ARG_WITH([xface],
+XE_MERGED_ARG([xface],
AC_HELP_STRING([--with-xface],[Compile with support for X-Face mail headers.
Requires the compface package.]),
[], [])
-AC_ARG_WITH([gif],
+XE_MERGED_ARG([gif],
AC_HELP_STRING([--with-gif],[Compile without the (builtin) support for GIF images.]),
[], [])
-AC_ARG_WITH([jpeg],
+XE_MERGED_ARG([jpeg],
AC_HELP_STRING([--with-jpeg],[Compile with support for JPEG images. Useful if
you are using a mail, news reader, or web browser
in XEmacs, so that JPEG images can be displayed.]),
[], [])
-AC_ARG_WITH([png],
+XE_MERGED_ARG([png],
AC_HELP_STRING([--with-png],[Compile with support for PNG images. Recommended
because the images on the About page are not viewable
without it.]),
[], [])
-AC_ARG_WITH([tiff],
+XE_MERGED_ARG([tiff],
AC_HELP_STRING([--with-tiff],[Compile with support for TIFF images. Possibly
useful, for the same reason as JPEG images.]),
[], [])
-
dnl if you change defaults, make sure to fix arg 6 of the OPTION_HELP macro.
-XE_COMPLEX_ARG_WITH([xft],
+XE_COMPLEX_ARG([xft],
[XE_COMPLEX_OPTION_HELP_STRING([--with-xft],
[Xft client-side font rendering and anti-aliasing],
[Xft],
@@ -587,182 +589,173 @@ XE_COMPLEX_ARG_WITH([xft],
XE_COMPLEX_OPTION([menubars],[yes]),
XE_COMPLEX_OPTION([tabs],[yes]),
XE_COMPLEX_OPTION([gauges],[yes])])
-dnl sanity checking
-dnl #### Maybe we should XE_DIE here instead? Or fix the UI so that
-dnl emacs is always implicit? (I worry that --without-xft would be weird.)
-if test \( "$with_xft_menubars" = "yes" -o
"$with_xft_tabs" = "yes" \
- -o "$with_xft_gauges" = "yes" \) -a
"$with_xft_emacs" = "no"; then
- AC_MSG_WARN([Forcing --with-xft=emacs because Xft is enabled])
- with_xft_emacs=yes
-fi
-# end of Xft parsing
-AC_ARG_WITH([zlib],
+XE_MERGED_ARG([zlib],
AC_HELP_STRING([--with-zlib],[Support inflate (de)compression internally.]),
[], [])
-AC_ARG_WITH([wmcommand],
+XE_MERGED_ARG([wmcommand],
AC_HELP_STRING([--with-wmcommand],[Compile without realized leader window which will
keep the WM_COMMAND property.]),
[], [])
-AC_ARG_WITH([xmu],
+XE_MERGED_ARG([xmu],
AC_HELP_STRING([--with-xmu],[Use Xmu utilities. Default: yes.]),
[], [])
-AC_ARG_WITH([purify],
+XE_MERGED_ARG([purify],
AC_HELP_STRING([--with-purify],[Support memory debugging using Purify.]),
[], [])
-AC_ARG_WITH([quantify],
+XE_MERGED_ARG([quantify],
AC_HELP_STRING([--with-quantify],[Support performance debugging using Quantify.]),
[], [])
-AC_ARG_ENABLE([toolbars],
- AC_HELP_STRING([--with-toolbars],[Enable toolbar support. Default: yes.]),
+XE_MERGED_ARG([toolbars],
+ AC_HELP_STRING([--enable-toolbars],[Enable toolbar support. Default: yes.]),
[], [])
-AC_ARG_WITH([tty],
+XE_MERGED_ARG([tty],
AC_HELP_STRING([--with-tty],[Enable TTY support. Default: yes.]),
[], [])
-AC_ARG_WITH([xfs],
+XE_MERGED_ARG([xfs],
AC_HELP_STRING([--with-xfs],[Enable XFontSet support for internationalized
menubar. Incompatible with `--with-xim=motif' and
`--with-xft'.
`--enable-menubars=lucid' (the default) is desirable.]),
[], [])
-AC_ARG_ENABLE([mule],
- AC_HELP_STRING([--enable-mule],[Compile with Mule (MUlti-Lingual Emacs) support,
+XE_MERGED_ARG([mule],
+ AC_HELP_STRING([--enable-mule],[Compile with Mule (Multi-Lingual Emacs) support,
needed to support non-Latin-1 (including Asian)
languages.]),
[], [])
-AC_ARG_ENABLE([default-eol-detection],
+XE_MERGED_ARG([default-eol-detection],
AC_HELP_STRING([--enable-default-eol-detection],[Turns on by default auto-detection of
end-of-line type
when reading a file. Applies to those platforms where
auto-detection is off by default (non-Mule Unix). Has
no effect otherwise.]),
[], [])
-AC_ARG_WITH([canna],
+XE_MERGED_ARG([canna],
AC_HELP_STRING([--with-canna],[Support the Canna Japanese input method. Requires
Mule.]),
[], [])
-AC_ARG_WITH([wnn],
+XE_MERGED_ARG([wnn],
AC_HELP_STRING([--with-wnn],[Support the Wnn Asian language input
method. Requires Mule.]),
[], [])
-AC_ARG_WITH([wnn6],
+XE_MERGED_ARG([wnn6],
AC_HELP_STRING([--with-wnn6],[Support the Wnn6 Asian language input
method (proprietary). Requires Mule.]),
[], [])
-AC_ARG_WITH([workshop],
+XE_MERGED_ARG([workshop],
AC_HELP_STRING([--with-workshop],[Support the Sun WorkShop (formerly Sparcworks)
development environment.]),
[], [])
-AC_ARG_WITH([sparcworks],
+XE_MERGED_ARG([sparcworks],
AC_HELP_STRING([--with-sparcworks],[Alias for --with-workshop]),
[], [])
-AC_ARG_WITH([tooltalk],
+XE_MERGED_ARG([tooltalk],
AC_HELP_STRING([--with-tooltalk],[Support the ToolTalk IPC protocol.]),
[], [])
-AC_ARG_WITH([ldap],
+XE_MERGED_ARG([ldap],
AC_HELP_STRING([--with-ldap],[Support the LDAP protocol.]),
[], [])
-AC_ARG_WITH([postgresql],
+XE_MERGED_ARG([postgresql],
AC_HELP_STRING([--with-postgresql],[Support the PostgreSQL RDBMS.]),
[], [])
-AC_ARG_WITH([pop],
+XE_MERGED_ARG([pop],
AC_HELP_STRING([--with-pop],[Support POP for mail retrieval.]),
[], [])
-AC_ARG_WITH([kerberos],
+XE_MERGED_ARG([kerberos],
AC_HELP_STRING([--with-kerberos],[Support Kerberos-authenticated POP.]),
[], [])
-AC_ARG_WITH([hesiod],
+XE_MERGED_ARG([hesiod],
AC_HELP_STRING([--with-hesiod],[Support Hesiod to get the POP server host.]),
[], [])
-AC_ARG_WITH([infodock],
+XE_MERGED_ARG([infodock],
AC_HELP_STRING([--with-infodock],[Support the Infodock version of XEmacs. Infodock is
a SourceForge project).]),
[], [])
-AC_ARG_WITH([native-sound-lib],
+XE_MERGED_ARG([native-sound-lib],
AC_HELP_STRING([--with-native-sound-lib],[Path to sound library (for systems with name
conflicts).]),
[], [])
-AC_ARG_WITH([netinstall],
+XE_MERGED_ARG([netinstall],
AC_HELP_STRING([--with-netinstall],[Support for installation over the internet.
Only functional on the MS Windows platforms.]),
[], [with_netinstall="no"])
-AC_ARG_WITH([optimization],
+XE_MERGED_ARG([optimization],
AC_HELP_STRING([--with-optimization],[Control whether compilation is optimized. By
default, optimization is on in release versions and off in beta versions, since it can
interfere with proper stack backtraces.]),
[], [])
-AC_ARG_WITH([ipv6-cname],
+XE_MERGED_ARG([ipv6-cname],
AC_HELP_STRING([--with-ipv6-cname],[Try IPv6 information first when canonicalizing
host names. This option has no effect unless system supports getaddrinfo(3) and
getnameinfo(3).]),
[], [with_ipv6_cname="no"])
-AC_ARG_WITH([site-includes],
+XE_MERGED_ARG([site-includes],
AC_HELP_STRING([--with-site-includes],[Prepend to include search path.]),
[], [])
-AC_ARG_WITH([site-libraries],
+XE_MERGED_ARG([site-libraries],
AC_HELP_STRING([--with-site-libraries],[Prepend to library search path.]),
[], [])
-AC_ARG_WITH([site-prefixes],
+XE_MERGED_ARG([site-prefixes],
AC_HELP_STRING([--with-site-prefixes],[Prepend to include and library search paths,
with /include and /lib added. Comes after site-includes and site-libraries, if any.]),
[], [])
-AC_ARG_WITH([statedir],
+XE_MERGED_ARG([statedir],
AC_HELP_STRING([--with-statedir],[]),
[], [with_statedir='${prefix}/lib'])
-AC_ARG_WITH([lispdir],
+XE_MERGED_ARG([lispdir],
AC_HELP_STRING([--with-lispdir],[]),
[AC_DEFINE(LISPDIR_USER_DEFINED)],
[with_lispdir='${datadir}/${instvardir}/lisp'])
-AC_ARG_WITH([archlibdir],
+XE_MERGED_ARG([archlibdir],
AC_HELP_STRING([--with-archlibdir],[]),
[AC_DEFINE(ARCHLIBDIR_USER_DEFINED)],
[with_archlibdir='${libdir}/${instvardir}/${configuration}'])
-AC_ARG_WITH([moduledir],
+XE_MERGED_ARG([moduledir],
AC_HELP_STRING([--with-moduledir],[]),
[AC_DEFINE(MODULEDIR_USER_DEFINED)],
[with_moduledir='${libdir}/${instvardir}/${configuration}/modules'])
-AC_ARG_WITH([etcdir],
+XE_MERGED_ARG([etcdir],
AC_HELP_STRING([--with-etcdir],[]),
[AC_DEFINE(ETCDIR_USER_DEFINED)],
[with_etcdir='${datadir}/${instvardir}/etc'])
-AC_ARG_WITH([infopath],
+XE_MERGED_ARG([infopath],
AC_HELP_STRING([--with-infopath],[]),
[AC_DEFINE(INFOPATH_USER_DEFINED)], [])
-AC_ARG_WITH([docdir],
+XE_MERGED_ARG([docdir],
AC_HELP_STRING([--with-docdir],[]),
[AC_DEFINE(DOCDIR_USER_DEFINED)], [with_docdir='${archlibdir}'])
-AC_ARG_WITH([site-runtime-libraries],
+XE_MERGED_ARG([site-runtime-libraries],
AC_HELP_STRING([--with-site-runtime-libraries],[]),
[], [])
-AC_ARG_WITH([package-prefix],
+XE_MERGED_ARG([package-prefix],
AC_HELP_STRING([--with-package-prefix],[Specify packages root.]),
[AC_DEFINE(PACKAGE_PATH_USER_DEFINED)], [])
-AC_ARG_WITH([package-path],
+XE_MERGED_ARG([package-path],
AC_HELP_STRING([--with-package-path],[Search path for package hierarchies.]),
[AC_DEFINE(PACKAGE_PATH_USER_DEFINED)], [])
-AC_ARG_ENABLE([external-widget],
+XE_MERGED_ARG([external-widget],
AC_HELP_STRING([--enable-external-widget],[Support XEmacs server for text widgets in
other applications.]),
[], [])
-AC_ARG_ENABLE([kkcc],
+XE_MERGED_ARG([kkcc],
AC_HELP_STRING([--enable-kkcc],[Enable new GC algorithms.]),
- [], [])
-AC_ARG_ENABLE([mc-alloc],
+ [], [enable_kkcc=yes])
+XE_MERGED_ARG([mc-alloc],
AC_HELP_STRING([--enable-mc-alloc],[Enable new allocator.]),
- [], [])
-AC_ARG_ENABLE([union-type],
+ [], [enable_mc_alloc=yes])
+XE_MERGED_ARG([union-type],
AC_HELP_STRING([--enable-union-type],[Use union definition of Lisp_Object type. Known
to trigger bugs in some compilers.]),
[], [])
-AC_ARG_ENABLE([pdump],
+XE_MERGED_ARG([pdump],
AC_HELP_STRING([--enable-pdump],[Enable portable LISP preloader.]),
[], [])
-AC_ARG_ENABLE([dump-in-exec],
+XE_MERGED_ARG([dump-in-exec],
AC_HELP_STRING([--enable-dump-in-exec],[Enable dumping into executable (enabled by
default
for `pdump', not enabled by default in combination
with `mc-alloc').]),
[], [])
-AC_ARG_ENABLE([debug],
+XE_MERGED_ARG([debug],
AC_HELP_STRING([--enable-debug],[Enable additional debugging information. No time
cost.]),
[], [])
-AC_ARG_ENABLE([assertions],
+XE_MERGED_ARG([assertions],
AC_HELP_STRING([--enable-assertions],[]),
[], [])
-AC_ARG_ENABLE([memory-usage-stats],
+XE_MERGED_ARG([memory-usage-stats],
AC_HELP_STRING([--enable-memory-usage-stats],[Enable LISP memory usage API.]),
[], [])
-AC_ARG_ENABLE([clash-detection],
+XE_MERGED_ARG([clash-detection],
AC_HELP_STRING([--enable-clash-detection],[Disable use of lock files to detect
multiple edits
of the same file.]),
[], [])
-AC_ARG_ENABLE([modules],
+XE_MERGED_ARG([modules],
AC_HELP_STRING([--enable-modules],[Compile in experimental support for dynamically
loaded libraries (Dynamic Shared Objects).]),
[], [])
-AC_ARG_ENABLE([quick-build],
+XE_MERGED_ARG([quick-build],
AC_HELP_STRING([--enable-quick-build],[Speed up the build cycle by leaving out steps
where
XEmacs will still work (more or less) without them.
Potentially dangerous if you don't know what you're
@@ -775,81 +768,81 @@ AC_ARG_ENABLE([quick-build],
to be rebuilt.]),
[], [])
-AC_ARG_WITH([compiler],
+XE_MERGED_ARG([compiler],
AC_HELP_STRING([--with-compiler],[C compiler to use]),
[], [])
-AC_ARG_WITH([xemacs-compiler],
- AC_HELP_STRING([--with-xemacs-compiler],[compiler to use to compile just the xemacs
executable and C modules.
+XE_MERGED_ARG([xemacs-compiler],
+ AC_HELP_STRING([--with-xemacs-compiler],
+ [compiler to use to compile just the xemacs executable and C modules.
If you want to compile XEmacs as C++, use e.g.
`--with-xemacs-compiler=g++'. This turns on a lot of
additional error-checking.]),
[], [])
-AC_ARG_WITH([cflags],
- AC_HELP_STRING([--with-cflags],[Compiler flags (such as -O); setting this overrides
- all default compiler flags except those that control
- warnings.]),
+XE_MERGED_ARG([cflags],
+ AC_HELP_STRING([--with-cflags],
+ [Compiler flags. These flags will be placed after any flags inserted for warnings,
debugging or optimization; setting this does not disable the insertion of those flags.
Use configure settings such as `--with-optimization=no' or `enable-debug=no' to
turn them off, or override them with `--with-cflags-optimization',
`--with-cflags-debugging', or `with-cflags-warning'.]),
[], [])
-AC_ARG_WITH([cflags-warning],
+XE_MERGED_ARG([cflags-warning],
AC_HELP_STRING([--with-cflags-warning],[Override compiler flags used to control
warnings.
Normally, don't set this, as XEmacs already turns on
the maximum safe warning level.]),
[], [])
-AC_ARG_WITH([cflags-optimization],
+XE_MERGED_ARG([cflags-optimization],
AC_HELP_STRING([--with-cflags-optimization=FLAGS],
- [Override compiler flags used to control optimization. Only has an effect when
optimization is enabled. Normally, don't set this, as XEmacs will already set the
maximum safe optimization flags appropriate for the compiler being invoked.]),
+ [Override compiler flags used to control optimization. If blank, forces no
optimization; if non-blank, forces optimization. Normally, don't set this; XEmacs
automatically sets the maximum safe optimization flags appropriate for the compiler being
invoked. If you just want to turn optimization on or off, use `with-optimization'
instead.]),
[], [])
-AC_ARG_WITH([cflags-debugging],
+XE_MERGED_ARG([cflags-debugging],
AC_HELP_STRING([--with-cflags-debugging=FLAGS],
[Override compiler flags used to add debugging information to the executable.
Normally, debugging information is added whenever possible (i.e. unless optimization is
turned on and the compiler does not permit debugging and optimization simultaneously).]),
[], [])
-AC_ARG_WITH([cpp],
+XE_MERGED_ARG([cpp],
AC_HELP_STRING([--with-cpp],[C preprocessor to use (e.g. /usr/ccs/lib/cpp or cc
-E)]),
[CPP="$with_cpp"], [])
-AC_ARG_WITH([cppflags],
+XE_MERGED_ARG([cppflags],
AC_HELP_STRING([--with-cppflags],[C preprocessor flags (e.g. -I/foo or -Dfoo=bar)]),
[CPPFLAGS="$with_cppflags"], [])
-AC_ARG_WITH([libs],
+XE_MERGED_ARG([libs],
AC_HELP_STRING([--with-libs],[Additional libraries (e.g. -lfoo)]),
[LIBS="$with_libs"], [])
-AC_ARG_WITH([ldflags],
+XE_MERGED_ARG([ldflags],
AC_HELP_STRING([--with-ldflags],[Additional linker flags (e.g. -L/foo)]),
[LDFLAGS="$with_ldflags"], [])
-AC_ARG_WITH([rel-alloc],
+XE_MERGED_ARG([rel-alloc],
AC_HELP_STRING([--with-rel-alloc],[Enable the relocating allocator.]),
[], [with_rel_alloc='default'])
-AC_ARG_WITH([dlmalloc],
+XE_MERGED_ARG([dlmalloc],
AC_HELP_STRING([--with-dlmalloc],[Use Doug Lea's malloc implementation.]),
[], [with_dlmalloc='default'])
-AC_ARG_WITH([debug-malloc],
+XE_MERGED_ARG([debug-malloc],
AC_HELP_STRING([--with-debug-malloc],[Use a debugging malloc.]),
[], [])
-AC_ARG_WITH([system-malloc],
+XE_MERGED_ARG([system-malloc],
AC_HELP_STRING([--with-system-malloc],[Use the system malloc, not the one distributed
with XEmacs.]),
[], [with_system_malloc='default'])
#Enable code.
-XE_COMPLEX_ARG_ENABLE([database],
+XE_COMPLEX_ARG([database],
AC_HELP_STRING([--enable-database],[Compile with database support. Valid types are
`no' or a comma-separated list of one or more
of `berkdb' and either `dbm' or `gnudbm'.]),
[
if test "$enable_database_dbm" = "yes" -a
"$enable_database_gdbm" = "yes"; then
USAGE_ERROR("Only one of \`dbm' and \`gnudbm' may be specified
-with the \`--enable-database' option.")
+with the \`--with-database' option.")
fi
],
[],
@@ -857,7 +850,7 @@ fi
XE_COMPLEX_OPTION([dbm],[""]),
XE_COMPLEX_OPTION([gdbm],[""])])
-XE_COMPLEX_ARG_ENABLE([sound],
+XE_COMPLEX_ARG([sound],
AC_HELP_STRING([--enable-sound],[Compile with sound support.
Valid types are `native', `nas' and `esd'.
Prefix a type with 'no' to disable.
@@ -872,26 +865,26 @@ XE_COMPLEX_ARG_ENABLE([sound],
XE_COMPLEX_OPTION([nas],[""]),
XE_COMPLEX_OPTION([esd],[no])])
-XE_KEYWORD_ARG_WITH([athena],
+XE_KEYWORD_ARG([athena],
AC_HELP_STRING([--with-athena],[Use TYPE Athena widgets (xaw, 3d, next, 95, or
xpm).]),
[],[],[xaw,3d,next,95,xpm])dnl
-XE_KEYWORD_ARG_WITH([xim],[],[],[],[yes,no,xlib,motif])dnl
+XE_KEYWORD_ARG([xim],[],[],[],[yes,no,xlib,motif])dnl
-XE_KEYWORD_ARG_WITH([mail-locking],
+XE_KEYWORD_ARG([mail-locking],
AC_HELP_STRING([--with-mail-locking],[Specify the locking to be used by movemail to
prevent
concurrent updates of mail spool files. Valid types
are `lockf', `flock', `dot', `locking' or
`mmdf'.]),
[],[],[lockf,flock,file,locking,mmdf,pop])dnl
-XE_KEYWORD_ARG_ENABLE([bignum],
+XE_KEYWORD_ARG([bignum],
AC_HELP_STRING([--enable-bignum=TYPE],[Compile in support for bignums, ratios, or
bigfloats
using library support. TYPE must be one of "gmp"
(for GNU MP), "mp" (for BSD MP), or "no"
(disabled).]),
[], [enable_bignum="no"],[no,gmp,mp])
-XE_COMPLEX_ARG_ENABLE([error-checking],
+XE_COMPLEX_ARG([error-checking],
AC_HELP_STRING([--enable-error-checking],[Compile with internal error-checking added.
Causes noticeable loss of speed. Valid types
are extents, bufpos, malloc, gc, types, text, byte_code,
glyphs, display, structures.]),
@@ -906,25 +899,25 @@ XE_COMPLEX_ARG_ENABLE([error-checking],
XE_COMPLEX_OPTION([display],[""]),
XE_COMPLEX_OPTION([structures],[""])])
-XE_KEYWORD_ARG_ENABLE([menubars],
+XE_KEYWORD_ARG([menubars],
AC_HELP_STRING([--enable-menubars=TYPE],[Use TYPE menubars (lucid, motif, or no). The
Lucid
widgets emulate Motif (mostly) but are faster.
*WARNING* The Motif menubar is currently broken.
Lucid menubars are the default.]),
[], [],[yes,no,lucid,motif,athena,gtk,msw])
-XE_KEYWORD_ARG_ENABLE([scrollbars],
+XE_KEYWORD_ARG([scrollbars],
AC_HELP_STRING([--enable-scrollbars=TYPE],[Use TYPE scrollbars (lucid, motif, athena,
or no).
Lucid scrollbars are the default.]),
[], [],[yes,no,lucid,motif,athena,gtk,msw])
-XE_KEYWORD_ARG_ENABLE([dialogs],
+XE_KEYWORD_ARG([dialogs],
AC_HELP_STRING([--enable-dialogs=TYPE],[Use TYPE dialog boxes (lucid, motif, athena,
or no).
There are no true Lucid dialogs; Motif dialogs will be
used if Motif can be found, else Athena is used.]),
[], [],[yes,no,lucid,motif,athena,gtk,msw])
-XE_KEYWORD_ARG_ENABLE([widgets],
+XE_KEYWORD_ARG([widgets],
AC_HELP_STRING([--enable-widgets],[Use TYPE native widgets (lucid, motif, athena, or
no).
Other widget types are currently unsupported.
There are no true Lucid widgets; Motif widgets will be
@@ -942,6 +935,15 @@ fi
dnl CDE requires tooltalk
XE_CHECK_FEATURE_DEPENDENCY(cde, tooltalk)
+dnl Xft sanity checking
+dnl #### Maybe we should XE_DIE here instead? Or fix the UI so that
+dnl emacs is always implicit? (I worry that --without-xft would be weird.)
+if test \( "$with_xft_menubars" = "yes" -o
"$with_xft_tabs" = "yes" \
+ -o "$with_xft_gauges" = "yes" \) -a
"$with_xft_emacs" = "no"; then
+ AC_MSG_WARN([Forcing --with-xft=emacs because Xft is enabled])
+ with_xft_emacs=yes
+fi
+
dnl XFS and Xft in menubars conflict
if test "$with_xfs" = "yes" -a "$with_xft_menubars" =
"yes"; then
USAGE_ERROR("XFS and Xft in the menubars are incompatible!")
@@ -2102,7 +2104,15 @@ dnl Calculate optimization flags. These
dnl versions and on in release versions.
if test -z "$with_optimization"; then
- if test -z "$emacs_is_beta" -o "$cflags_optimization_specified" =
"yes"; then
+ # If user set --with-cflags-optimization, use it to unilaterally
+ # determine whether optimization should be enabled.
+ if test "$cflags_optimization_specified" = "yes" ; then
+ if -z "$with_cflags_optimization" ; then
+ with_optimization=no
+ else
+ with_optimization=yes
+ fi
+ elif test -z "$emacs_is_beta" ; then
with_optimization=yes
else
with_optimization=no
@@ -3768,16 +3778,29 @@ dnl Look for these standard header file
libpq_fe_h_file=${header_dir}libpq-fe.h; break)
done
- test -n "$libpq_fe_h_file" && {
AC_CHECK_LIB(pq,PQconnectdb,have_libpq=yes) }
+ pq_libs=
+ extra_libs=
+ if test -n "$libpq_fe_h_file"; then
+ dnl #### Would it be nicer to do this with a loop?
+ AC_CHECK_LIB(pq, PQconnectdb,[pq_libs="-lpq"],[
+ unset ac_cv_lib_pq_PQconnectdb;
+ AC_CHECK_LIB(pq, PQconnectdb,[pq_libs="-lpq -lcrypto -lssl"],,
+ [-lcrypto -lssl])])
+ if test -z "$pq_libs"; then
+ have_libpq="no"
+ else
+ have_libpq="yes"
+ fi
+ fi
if test -n "$libpq_fe_h_file" -a "$have_libpq" = "yes";
then
with_postgresql=yes
AC_DEFINE(HAVE_POSTGRESQL)
AC_CHECK_LIB(pq,PQconnectStart, [
with_postgresqlv7=yes;
- AC_DEFINE(HAVE_POSTGRESQLV7)])
+ AC_DEFINE(HAVE_POSTGRESQLV7)], [:], $extra_libs)
AC_DEFINE_UNQUOTED(LIBPQ_FE_H_FILE, "$libpq_fe_h_file")
- XE_PREPEND(-lpq, postgresql_libs)
+ XE_PREPEND([$pq_libs], postgresql_libs)
XE_APPEND(modules/postgresql, MAKE_SUBDIR)
need_modules_common=yes
if test "$enable_modules" = "yes"; then
@@ -3986,14 +4009,15 @@ if test "$with_x11" = "yes"; then
AC_CHECKING([for X11 graphics libraries])
fi
-dnl We don't automatically trigger widgets if athena is present
-dnl because of stability concerns.
-dnl But if the user wants widgets, still offer him autodetections
case "$enable_widgets" in
- "yes" | "athena") detect_athena=yes ;;
+ "" | "yes" | "athena") detect_athena=yes ;;
*) detect_athena=no ;;
esac
+case "$enable_dialogs" in
+ "" | "yes" | "athena") detect_athena=yes ;;
+esac
+
if test "$with_x11" = "yes" -a "$detect_athena" =
"yes" ; then
AC_CHECKING([for the Athena widgets])
@@ -4146,8 +4170,13 @@ fi dnl "$with_x11" = "yes"
dnl Finish ensuring that we have values for the various toolkit items.
dnl Not all toolkits support all widgets
-dnl if Motif is available we use it for the dialog boxes.
+dnl Avoid using Motif :-(
+case "$opsys" in
+ *linux* | *darwin* | *bsd* ) lucid_prefers_motif="no" ;;
+ * ) lucid_prefers_motif="yes" ;;
+esac
+
case "$enable_menubars" in "" | "yes" |
"athena" )
enable_menubars="lucid" ;;
esac
@@ -4160,20 +4189,36 @@ if test "$with_xft_menubars" != "no" ; t
fi
fi
case "$enable_dialogs" in "" | "yes" | "lucid"
)
- if test "$have_motif" = "yes"; then
enable_dialogs="motif"
- elif test "$have_xaw" = "yes"; then
enable_dialogs="athena"
- elif test "$with_msw" = "yes"; then
enable_dialogs="msw"
- else enable_dialogs=no
+ if test "$lucid_prefers_motif" = "yes"; then
+ if test "$have_motif" = "yes"; then
enable_dialogs="motif"
+ elif test "$have_xaw" = "yes"; then
enable_dialogs="athena"
+ elif test "$with_msw" = "yes"; then
enable_dialogs="msw"
+ else enable_dialogs=no
+ fi
+ else
+ if test "$have_xaw" = "yes"; then
enable_dialogs="athena"
+ elif test "$have_motif" = "yes"; then
enable_dialogs="motif"
+ elif test "$with_msw" = "yes"; then
enable_dialogs="msw"
+ else enable_dialogs=no
+ fi
fi ;;
esac
case "$enable_scrollbars" in "" | "yes" )
enable_scrollbars="lucid" ;;
esac
case "$enable_widgets" in "" | "yes" |
"lucid")
- if test "$have_motif" = "yes"; then
enable_widgets="motif"
- elif test "$have_xaw" = "yes"; then
enable_widgets="athena"
- elif test "$with_msw" = "yes"; then
enable_widgets="msw"
- else enable_widgets=no
+ if test "$lucid_prefers_motif" = "yes"; then
+ if test "$have_motif" = "yes"; then
enable_widgets="motif"
+ elif test "$have_xaw" = "yes"; then
enable_widgets="athena"
+ elif test "$with_msw" = "yes"; then
enable_widgets="msw"
+ else enable_widgets=no
+ fi
+ else
+ if test "$have_xaw" = "yes"; then
enable_widgets="athena"
+ elif test "$have_motif" = "yes"; then
enable_widgets="motif"
+ elif test "$with_msw" = "yes"; then
enable_widgets="msw"
+ else enable_widgets=no
+ fi
fi ;;
esac
dnl this is not in xft reloaded #3
@@ -4303,6 +4348,10 @@ if test "$enable_default_eol_detection"
AC_DEFINE(HAVE_DEFAULT_EOL_DETECTION)
fi
+dnl initialize _libs variables for possible modules at top level
+canna_libs=
+wnn_libs=
+
if test "$enable_mule" = "yes" ; then
AC_CHECKING([for Mule-related features])
AC_DEFINE(MULE)
@@ -4319,7 +4368,10 @@ if test "$enable_mule" = "yes" ; then
AC_CHECKING([for XIM])
AC_CHECK_LIB(X11, XOpenIM, with_xim=xlib, with_xim=no)
dnl XIM + Lesstif is not (yet?) usable
- if test "$have_motif $have_lesstif" = "yes no"; then
+ dnl Only use Motif if linking Motif anyway, or don't have xlib XIM
+ if test "$need_motif $have_lesstif" = "yes no"; then
+ AC_CHECK_LIB(Xm, XmImMbLookupString, with_xim=motif)
+ elif test "$have_motif $have_lesstif $with_xim" = "yes no no";
then
AC_CHECK_LIB(Xm, XmImMbLookupString, with_xim=motif)
fi ;;
esac
@@ -4379,7 +4431,7 @@ if test "$enable_mule" = "yes" ; then
fi
dnl Autodetect canna
- canna_libs=
+ dnl canna_libs variable is initialized at toplevel
canna_includes_found=no
if test "$with_canna" != "no"; then
AC_CHECK_HEADER(canna/jrkanji.h,canna_includes_found=yes)
@@ -4400,18 +4452,13 @@ if test "$enable_mule" = "yes" ; then
test -z "$with_canna" && {
AC_CHECK_LIB(canna,jrKanjiControl,[:],with_canna=no) }
test -z "$with_canna" && with_canna=yes
if test "$with_canna" = "yes"; then
- if test "$enable_mc_alloc" = "yes"; then
- dnl #### REMOVE THIS BRANCH WHEN CANNA_MC_ALLOC CONFLICT IS FIXED ####
- with_canna=disabled
- else
- AC_DEFINE(HAVE_CANNA)
- XE_APPEND(modules/canna, MAKE_SUBDIR)
- need_modules_common=yes
- if test "$with_modules" = "yes"; then
- XE_APPEND(modules/canna, INSTALL_ARCH_DEP_SUBDIR)
- fi
- XE_PREPEND(-lcanna -lRKC, canna_libs)
+ AC_DEFINE(HAVE_CANNA)
+ XE_APPEND(modules/canna, MAKE_SUBDIR)
+ need_modules_common=yes
+ if test "$with_modules" = "yes"; then
+ XE_APPEND(modules/canna, INSTALL_ARCH_DEP_SUBDIR)
fi
+ XE_PREPEND(-lcanna -lRKC, canna_libs)
fi
AC_SUBST(canna_libs)
@@ -5264,7 +5311,7 @@ dnl Use XE_SPACE instead of plain assign
if test "$enable_modules" = "yes"; then
ld_libs_module=
else
- XE_SPACE(ld_libs_module, $ldap_libs $postgresql_libs)
+ XE_SPACE(ld_libs_module, $ldap_libs $postgresql_libs $canna_libs)
fi
XE_SPACE(CFLAGS, $CFLAGS)
@@ -5717,6 +5764,16 @@ if test "$with_x11" = "yes"; then
echo " - Compiling in support for Xft antialiased fonts
(EXPERIMENTAL)."
fi
fi
+if test "$need_motif" = "yes" ; then
+ echo " Compiling in support for Motif."
+ if test "$have_lesstif" = "yes"; then
+ echo " - Using LessTif implementation."
+ fi
+ echo " *WARNING* Many versions of Motif are buggy, requiring
workarounds."
+ echo " You are likely to experience slow redisplay."
+ echo " You may need to install vendor patches to Motif."
+ echo " See PROBLEMS for more information."
+fi
if test "$need_athena" = "yes"; then
echo " Compiling in support for the Athena widget set:"
echo " - Athena headers location: $athena_h_path"
@@ -5842,13 +5899,6 @@ test "$with_xim" = motif && echo " -
test "$with_xim" = xlib && echo " - Using raw Xlib to provide
XIM support."
test "$with_xfs" = yes && echo " - Using XFontSet to provide
bilingual menubar."
test "$with_canna" = yes && echo " Compiling in support for
Canna on Mule."
-if test "$with_canna" = disabled; then
- echo " WARNING:
---------------------------------------------------------"
- echo " WARNING: Canna found but disabled due to conflict with MC_ALLOC!"
- echo " WARNING: To configure with Canna you must use --disable-mc-alloc."
- echo " WARNING: If you don't know what Canna is, you don't need
it."
- echo " WARNING:
---------------------------------------------------------"
-fi
if test "$with_wnn" = yes; then
echo " Compiling in support for the WNN input method on Mule."
test "$with_wnn6" = yes && echo " - Using WNN version
6."
1.984.2.9 +4 -4 XEmacs/xemacs/version.sh
Index: version.sh
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/version.sh,v
retrieving revision 1.984.2.8
retrieving revision 1.984.2.9
diff -u -p -r1.984.2.8 -r1.984.2.9
--- version.sh 2005/09/27 16:28:45 1.984.2.8
+++ version.sh 2005/11/06 16:13:46 1.984.2.9
@@ -2,11 +2,11 @@
emacs_is_beta=t
emacs_major_version=21
emacs_minor_version=5
-emacs_beta_version=22
-xemacs_codename="cucumber"
+emacs_beta_version=23
+xemacs_codename="daikon"
emacs_kit_version=
infodock_major_version=4
infodock_minor_version=0
infodock_build_version=8
-xemacs_extra_name="(+Xft+CVS-20050926)"
-xemacs_release_date="2005-09-14"
+xemacs_extra_name="(+Xft)"
+xemacs_release_date="2005-10-26"
1.48.2.6 +4 -0 XEmacs/xemacs/etc/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/etc/ChangeLog,v
retrieving revision 1.48.2.5
retrieving revision 1.48.2.6
diff -u -p -r1.48.2.5 -r1.48.2.6
--- ChangeLog 2005/09/23 18:20:33 1.48.2.5
+++ ChangeLog 2005/11/06 16:13:51 1.48.2.6
@@ -1,3 +1,7 @@
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
+
2005-09-17 Malcolm Purvis <malcolmp(a)xemacs.org>
* configure-2.13: Remove. autoconf 2.59 support is stable.
1.178.2.7 +12 -0 XEmacs/xemacs/lib-src/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lib-src/ChangeLog,v
retrieving revision 1.178.2.6
retrieving revision 1.178.2.7
diff -u -p -r1.178.2.6 -r1.178.2.7
--- ChangeLog 2005/09/23 18:20:35 1.178.2.6
+++ ChangeLog 2005/11/06 16:13:52 1.178.2.7
@@ -1,3 +1,15 @@
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
+
+2005-10-13 Ben Wing <ben(a)xemacs.org>
+
+ * i.c:
+ * mmencode.c:
+ Always include config.h first.
+ * winclient.c:
+ Move include of windows.h after config.h.
+
2005-09-18 Mike Alexander <mta(a)arbortext.com>
* installexe.sh: Don't add an exe extention to a file that already
1.4.2.2 +4 -0 XEmacs/xemacs/lib-src/i.c
Index: i.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lib-src/i.c,v
retrieving revision 1.4.2.1
retrieving revision 1.4.2.2
diff -u -p -r1.4.2.1 -r1.4.2.2
--- i.c 2004/12/11 05:12:54 1.4.2.1
+++ i.c 2005/11/06 16:13:52 1.4.2.2
@@ -31,6 +31,10 @@ does. It can be used also when xemacs s
command ina script, especially when its standart output should be
obtained programmatically. */
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <windows.h>
#include <stdio.h>
#include <string.h>
1.8.8.1 +3 -0 XEmacs/xemacs/lib-src/mmencode.c
Index: mmencode.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lib-src/mmencode.c,v
retrieving revision 1.8
retrieving revision 1.8.8.1
diff -u -p -r1.8 -r1.8.8.1
--- mmencode.c 2001/08/13 04:45:48 1.8
+++ mmencode.c 2005/11/06 16:13:52 1.8.8.1
@@ -13,6 +13,9 @@ OF THIS MATERIAL FOR ANY PURPOSE. IT IS
WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
#define NEWLINE_CHAR '\n'
#include <stdlib.h>
#include <stdio.h>
1.3.8.1 +2 -1 XEmacs/xemacs/lib-src/winclient.c
Index: winclient.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lib-src/winclient.c,v
retrieving revision 1.3
retrieving revision 1.3.8.1
diff -u -p -r1.3 -r1.3.8.1
--- winclient.c 2002/05/28 08:44:26 1.3
+++ winclient.c 2005/11/06 16:13:53 1.3.8.1
@@ -22,10 +22,11 @@
/* -- Includes -------------------------------------------------------------- */
-#include <windows.h>
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
+#include <windows.h>
+#include <ddeml.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
1.599.2.12 +142 -0 XEmacs/xemacs/lisp/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/ChangeLog,v
retrieving revision 1.599.2.11
retrieving revision 1.599.2.12
diff -u -p -r1.599.2.11 -r1.599.2.12
--- ChangeLog 2005/09/27 16:28:49 1.599.2.11
+++ ChangeLog 2005/11/06 16:13:54 1.599.2.12
@@ -1,3 +1,145 @@
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
+
+2005-10-25 Ben Wing <ben(a)xemacs.org>
+
+ * cus-face.el:
+ * cus-face.el (custom-face-attributes):
+ * cus-face.el (custom-face-background-pixmap):
+ * cus-face.el (custom-set-face-inherit): New.
+ * cus-face.el (custom-face-inherit): New.
+ * faces.el:
+ * faces.el (face-property):
+ * faces.el (convert-face-property-into-specifier):
+ * faces.el (face-property-instance):
+ * faces.el (set-face-property):
+ * faces.el (reset-face):
+ * faces.el (set-face-parent):
+ * faces.el (face-font-name):
+ * faces.el (face-font):
+ * faces.el (face-font-instance):
+ * faces.el (set-face-font):
+ * faces.el (face-foreground):
+ * faces.el (face-foreground-instance):
+ * faces.el (set-face-foreground):
+ * faces.el (face-background):
+ * faces.el (face-background-instance):
+ * faces.el (set-face-background):
+ * faces.el (face-background-pixmap):
+ * faces.el (face-background-pixmap-instance):
+ * faces.el (set-face-background-pixmap):
+ * faces.el (face-display-table):
+ * faces.el (face-display-table-instance):
+ * faces.el (face-equal):
+ * faces.el (init-face-from-resources):
+ Provide a basic implementation of the `inherit' property for
+ faces and the :inherit property in custom. Use the new
+ `specifier-instantiator' function.
+
+ Update the documentation for various places in faces.el.
+
+ 'foo -> `foo'.
+
+2005-10-25 Adrian Aichner <adrian(a)xemacs.org>
+
+ * package-get.el (package-get-download-sites): Fixes after
+ checklink and linklint testing.
+ * package-get.el (package-get-pre-release-download-sites): Ditto.
+
+2005-10-24 Ben Wing <ben(a)xemacs.org>
+
+ * next-error.el (compilation-current-error):
+ * next-error.el (compilation-current-error)): New.
+ * next-error.el (compilation-context-lines)): New.
+ * occur.el (occur-accumulate-lines):
+ * occur.el (multi-occur):
+ Fix some byte-compile warnings.
+
+2005-10-23 Adrian Aichner <adrian(a)xemacs.org>
+
+ * package-get.el (package-get-download-sites): Sync packages
+ mirrors list with website, based on Ville's work.
+ * package-get.el (package-get-pre-release-download-sites): Sync
+ with `package-get-download-sites'.
+
+2005-10-18 Ville Skyttä <scop(a)xemacs.org>
+
+ * package-get.el (package-get-download-sites): Sync mirrors list
+ with the XEmacs website.
+ (package-get-pre-release-download-sites): Ditto.
+
+2005-10-21 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ UNDO:
+ * mule/canna-leim.el: Rename canna_api to canna-api.
+
+2005-10-21 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * build-report.el: Note synch to XEmacs build package version 1.49.
+
+2005-10-04 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * build-report.el (build-report): Refactor into interactive
+ portion and `build-report-create-report'.
+ (build-report-create-report): New function.
+ (batch-build-report): Non-interactive version of `build-report'
+ using `build-report-create-report'.
+
+2005-10-10 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * minibuf.el:
+ * minibuf.el (read-buffer): Follow GNU Emacs behaviour: Can return
+ empty string if require-match is t and default is nil.
+ * replace.el: Moved occur code to occur.el
+ * simple.el:
+ * simple.el (line-number-at-pos): New.
+ * subr.el:
+ * subr.el (delete-dups): New.
+ * occur.el: New. Sync with 22.0.50.1 (CVS)
+ * next-error.el: New. Sync with 22.0.50.1 (CVS)
+
+2005-10-10 Steve Youngs <steve(a)sxemacs.org>
+
+ * help.el (view-emacs-news): Use `expand-file-name' instead of
+ `locate-data-file' as the latter will find any "NEWS" files that
+ might exist in packages _before_ the one in core.
+
+2005-10-09 Adrian Aichner <adrian(a)xemacs.org>
+
+ * finder.el (finder-find-library): Return filename actually
+ searched for.
+
+2005-10-04 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * simple.el (xemacs-default-composefunc): Don't warn when batch.
+
+2005-10-04 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * build-report.el: Synch to Adrian's packaged version.
+
+2005-10-04 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * mule/canna-leim.el: Rename canna_api to canna-api.
+
+2005-09-30 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * mule/canna-leim.el (canna-activate): Fix typo in error symbol.
+ Improve docstring.
+
+2005-09-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * mule/canna-leim.el: Add comment on autoloading strategy.
+ (canna-activate): Handle CANNA in ELL.
+
+ * dumped-lisp.el (preloaded-file-list): Remove dependency of
+ canna-leim on CANNA. Canna may be an ELL.
+
+2005-09-21 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * mule/mule-cmds.el (input-method-alist, register-input-method):
+ Improve docstrings and formal parameter names.
+
2005-09-14 Stephen J. Turnbull <stephen(a)xemacs.org>
* XEmacs 21.5.22 "cucumber" is released.
1.1.2.6 +0 -13 XEmacs/xemacs/lisp/Attic/ChangeLog.Xft
Index: ChangeLog.Xft
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/Attic/ChangeLog.Xft,v
retrieving revision 1.1.2.5
retrieving revision 1.1.2.6
diff -u -p -r1.1.2.5 -r1.1.2.6
--- ChangeLog.Xft 2005/09/27 16:28:51 1.1.2.5
+++ ChangeLog.Xft 2005/11/06 16:13:56 1.1.2.6
@@ -1,16 +1,3 @@
-2005-09-22 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * mule/canna-leim.el: Add comment on autoloading strategy.
- (canna-activate): Handle CANNA in ELL.
-
- * dumped-lisp.el (preloaded-file-list): Remove dependency of
- canna-leim on CANNA. Canna may be an ELL.
-
-2005-09-21 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * mule/mule-cmds.el (input-method-alist, register-input-method):
- Improve docstrings and formal parameter names.
-
2005-09-07 Clemens Fruhwirth <clemens(a)endorphin.org>
* font.el (font-default-font-for-device): Remove vestigial code
1.11.6.1 +106 -68 XEmacs/xemacs/lisp/build-report.el
Index: build-report.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/build-report.el,v
retrieving revision 1.11
retrieving revision 1.11.6.1
diff -u -p -r1.11 -r1.11.6.1
--- build-report.el 2002/08/28 05:36:31 1.11
+++ build-report.el 2005/11/06 16:13:56 1.11.6.1
@@ -1,8 +1,10 @@
;;; build-report.el --- Automatically formatted build reports for XEmacs
-;; Copyright (C) 1997-2001 Adrian Aichner
+;; Copyright (C) 1997-2003 Adrian Aichner
;; Author: Adrian Aichner <adrian(a)xemacs.org>
+;; Date: $Date: 2005/11/06 16:13:56 $
+;; Version: $Revision: 1.11.6.1 $
;; Keywords: internal
;; This file is part of XEmacs.
@@ -22,7 +24,7 @@
;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
;; 02111-1307, USA.
-;;; Synched up with: Not synched.
+;;; Synched up with: XEmacs build package build-report.el Revision 1.49.
;;; Commentary:
@@ -66,8 +68,8 @@
"emacs_major_version\\s-*=\\s-*\\([0-9]+\\)
emacs_minor_version\\s-*=\\s-*\\([0-9]+\\)
emacs_beta_version\\s-*=\\s-*\\([0-9]+\\)?
-xemacs_codename\\s-*=\\s-*\"\\([^\"]+\\)\"
-xemacs_extra_name\\s-*=\\s-*\"\\([^\"]+\\)\""
+xemacs_codename\\s-*=\\s-*\"\\([^\"]+\\)\"\\(
+xemacs_extra_name\\s-*=\\s-*\"\\([^\"]+\\)\"\\)?"
"*REGEXP matching XEmacs Beta Version variable assignments in
`build-report-version-file' file. This variable is used by
`build-report-version-file-data'.")
@@ -113,7 +115,11 @@ go to."
"^Note:"
"Installing"
"[Ff]ile(s) copied"
- "\\s-+tests\\s-+")
+ "\\s-+tests\\s-+"
+ "^[A-Z] [^ ]+$"
+ "^Wrong number of arguments:"
+ "^ \\*\\* "
+ "^\\(FAIL\\|SKIP\\):")
"*Regexp of make process output lines to keep in the report."
:type '(repeat
:custom-show t
@@ -125,6 +131,8 @@ go to."
(list
"confl.*with.*auto-inlining"
"^Formatting:"
+ "^\\s-*0 .*\\(failure\\|error\\)s?"
+ "^PASS:"
"(100%) tests successful")
"*Regexp of make process output lines to delete from the report."
:type '(repeat
@@ -198,6 +206,8 @@ under csh, so that you get beta.err when
(defcustom build-report-subject
(concat "[%s] " emacs-version " on " system-configuration)
+ ;; #### this should allow variable names which will be evalled and
+ ;; formatted using %s, see `build-report-prompts'
"*XEmacs Build Report Subject Line. %s-sequences will be substituted
with user input through `build-report' according to
`build-report-prompts' using `format'."
@@ -208,6 +218,8 @@ under csh, so that you get beta.err when
(defcustom build-report-prompts
(quote (("Status?: " ("Success" "Failure"))))
+ ;; #### this should allow variable names which will be evalled and
+ ;; formatted using %s, see `build-report-prompts'
"*XEmacs Build Report Prompt(s). This is a list of prompt-string
lists used by `build-report' in conjunction with
`build-report-subject'. Each list consists of a prompt string
@@ -248,7 +260,7 @@ under csh, so that you get beta.err when
'mime-editor/insert-binary-file)))
(defun build-report-make-output-get ()
- "Returns the filename the XEmacs make output is saved in."
+ "Return the filename the XEmacs make output is saved in."
(interactive)
(if (or (string-equal build-report-make-output-dir "")
(null build-report-make-output-dir))
@@ -306,59 +318,85 @@ See also `mail-user-agent', `build-repor
(setq prompts (cdr prompts))
(setq arg (cons (read-string prompt "" 'hist) arg)))
arg)))
+ (let ((destination-address
+ ;; `build-report-destination' used to be a single string, so
+ ;; let's test if we really get a list of destinations.
+ (if (listp build-report-destination)
+ (read-string
+ "Build Report Destination: "
+ (car build-report-destination)
+ 'build-report-destination)
+ (read-string
+ "Build Report Destination: "
+ build-report-destination)
+ )))
+ (save-excursion
+ (build-report-create-report destination-address args))))
+
+;;;###autoload
+(defun batch-build-report (&optional status destination)
+ "Format a build report. Save it as \"./BUILD-REPORT\".
+If the file \"./BUILD-REPORT-COMMENT\" is readable, insert its contents.
+Optional STATUS is a string to insert in the subject. It defaults to
+\"Success\". \(This will be made customizable.)
+Optional DESTINATION is a string containing the destination mailbox. It
+defaults to \"XEmacs Build Reports <xemacs-buildreports(a)xemacs.org>\".
+\(This will be made customizable.)
+This function may be invoked as a command."
+ (interactive)
+ (unless (stringp status) (setq status "Success"))
+ (unless (stringp destination)
+ (setq destination "XEmacs Build Reports
<xemacs-buildreports(a)xemacs.org>"))
(save-excursion
- (if (file-exists-p build-report-installation-file)
- (multiple-value-bind
- (major minor beta codename extraname configuration)
- (build-report-installation-data build-report-installation-file)
- (setq build-report-subject
- (format "[%%s] XEmacs %s.%s%s \"%s\" %s %s"
- major minor beta codename extraname configuration)))
+ (build-report-create-report destination
+ ;; #### listify in the internal function?
+ (list status)))
+ (when (file-readable-p "BUILD-REPORT-COMMENT")
+ (insert-file "BUILD-REPORT-COMMENT"))
+ (write-file "BUILD-REPORT"))
+
+(defun build-report-create-report (destination status)
+ "Format current buffer as an XEmacs build report to DESTINATION.
+
+DESTINATION is the mailbox to which the report will be submitted.
+STATUS is the status of the build.
+You probably don't want to use this function; see `build-report' for the
+interactive command, and `batch-build-report' for a command suitable for
+use in shell scripts and Makefiles."
+ (if (file-exists-p build-report-installation-file)
(multiple-value-bind
- (major minor beta codename extraname)
- (build-report-version-file-data build-report-version-file)
- (setq build-report-subject
- (format "[%%s] XEmacs %s.%s%s \"%s\" %s %s"
- major minor beta codename extraname system-configuration))))
- (compose-mail
- ;; `build-report-destination' used to be a single string, so
- ;; let's test if we really get a list of destinations.
- (if (listp build-report-destination)
- (read-string
- "Build Report Destination: "
- (car build-report-destination)
- 'build-report-destination)
- (read-string
- "Build Report Destination: "
- build-report-destination)
- )
- (apply 'format build-report-subject args)
- nil
- nil
- nil
- nil
- nil)
- (let* ((report-begin (point))
- (files (reverse (build-report-make-output-get)))
- (file (car files)))
- (while file
- (if (file-exists-p file)
- (insert (build-report-insert-make-output report-begin file))
- (insert (format "%s not found!\n" file)))
- (insert "\n")
- (setq files (cdr files))
- (setq file (car files)))
- (if (file-exists-p build-report-installation-file)
- (insert (build-report-insert-installation-file
- report-begin
- build-report-installation-insert-all))
- (insert (format "%s not found!\n" build-report-installation-file)))
-;;; (when (and (>= major 21) (>= minor 2) (or (null beta) (>= beta
32)))
-;;; (insert "\n")
-;;; (insert (build-report-insert-config-inc report-begin)))
+ (major minor beta codename extraname configuration)
+ (build-report-installation-data build-report-installation-file)
+ (setq build-report-subject
+ (format "[%%s] XEmacs %s.%s%s \"%s\" %s%s"
+ major minor beta codename extraname configuration)))
+ (multiple-value-bind
+ (major minor beta codename extraname)
+ (build-report-version-file-data build-report-version-file)
+ (setq build-report-subject
+ (format "[%%s] XEmacs %s.%s%s \"%s\" %s%s"
+ major minor beta codename extraname system-configuration))))
+ (compose-mail destination
+ (apply 'format build-report-subject status)
+ nil nil nil nil nil)
+ (let* ((report-begin (point))
+ (files (reverse (build-report-make-output-get)))
+ (file (car files)))
+ (while file
+ (if (file-exists-p file)
+ (insert (build-report-insert-make-output report-begin file))
+ (insert (format "%s not found!\n" file)))
(insert "\n")
- (insert (build-report-insert-header report-begin))
- (goto-char report-begin))))
+ (setq files (cdr files))
+ (setq file (car files)))
+ (if (file-exists-p build-report-installation-file)
+ (insert (build-report-insert-installation-file
+ report-begin
+ build-report-installation-insert-all))
+ (insert (format "%s not found!\n" build-report-installation-file)))
+ (insert "\n")
+ (insert (build-report-insert-header report-begin))
+ (goto-char report-begin)))
(defun build-report-insert-header (where)
"Inserts the build-report-header at the point specified by `where'."
@@ -501,15 +539,15 @@ which defaults to `build-report-installa
(cond
((looking-at build-report-installation-version-regexp)
(goto-char (match-end 0))
- (setq major (match-string 1))
- (setq minor (match-string 2))
- (setq beta (match-string 3))
- (setq codename (match-string 6))
- (setq extraname (match-string 7))
- (setq configuration (match-string 8)))
+ (setq major (or (match-string 1) ""))
+ (setq minor (or (match-string 2) ""))
+ (setq beta (or (match-string 3) ""))
+ (setq codename (or (match-string 6) ""))
+ (setq extraname (or (match-string 7) ""))
+ (setq configuration (or (match-string 8) "")))
((looking-at build-report-installation-srcdir-regexp)
(goto-char (match-end 0))
- (setq srcdir (match-string 1)))
+ (setq srcdir (or (match-string 1) "")))
;; We avoid matching a potentially zero-length string to avoid
;; infinite looping.
((looking-at
@@ -535,11 +573,11 @@ defaults to `build-report-version-file'.
(cond
((looking-at build-report-version-file-regexp)
(goto-char (match-end 0))
- (setq major (match-string 1))
- (setq minor (match-string 2))
- (setq beta (match-string 3))
- (setq codename (match-string 4))
- (setq extraname (match-string 5)))
+ (setq major (or (match-string 1) ""))
+ (setq minor (or (match-string 2) ""))
+ (setq beta (or (match-string 3) ""))
+ (setq codename (or (match-string 4) ""))
+ (setq extraname (or (match-string 6) "")))
;; We avoid matching a potentially zero-length string to avoid
;; infinite looping.
((looking-at
1.11.8.1 +37 -6 XEmacs/xemacs/lisp/cus-face.el
Index: cus-face.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/cus-face.el,v
retrieving revision 1.11
retrieving revision 1.11.8.1
diff -u -p -r1.11 -r1.11.8.1
--- cus-face.el 2002/03/13 08:52:04 1.11
+++ cus-face.el 2005/11/06 16:13:56 1.11.8.1
@@ -8,13 +8,12 @@
;; Version: 1.9960-x
;; X-URL:
http://www.dina.kvl.dk/~abraham/custom/
+;;; Synched with: Not synched.
+
;;; Commentary:
;;
;; See `custom.el'.
-;; This file should probably be dissolved, and code moved to faces.el,
-;; like Stallman did.
-
;;; Code:
;; it is now safe to put the `provide' anywhere. if an error occurs while
@@ -102,7 +101,26 @@ Control whether the text should be strik
(:inverse-video (toggle :format "%[Inverse Video%]: %v\n"
:help-echo "\
Control whether the text should be inverted. Works only on TTY-s")
- set-face-reverse-p face-reverse-p))
+ set-face-reverse-p face-reverse-p)
+ (:inherit
+ (repeat :tag "Inherit"
+ :help-echo "List of faces to inherit attributes from."
+ (face :Tag "Face" default))
+ ;; FSF 21.3
+; ;; filter to make value suitable for customize
+; (lambda (real-value)
+; (cond ((or (null real-value) (eq real-value 'unspecified))
+; nil)
+; ((symbolp real-value)
+; (list real-value))
+; (t
+; real-value)))
+; ;; filter to make customized-value suitable for storing
+; (lambda (cus-value)
+; (if (and (consp cus-value) (null (cdr cus-value)))
+; (car cus-value)
+; cus-value))
+ custom-set-face-inherit custom-face-inherit))
"Alist of face attributes.
The elements are lists of the form (KEY TYPE SET GET) where:
@@ -199,10 +217,23 @@ If FRAME is nil, use the default face."
(defun custom-face-background-pixmap (face &rest args)
"Return the name of the background pixmap file used for FACE."
- (let ((image (apply 'specifier-instance
- (face-background-pixmap face) args)))
+ (let ((image (apply 'specifier-instance
+ (face-background-pixmap face) args)))
(and image
(image-instance-file-name image))))
+
+(defun custom-set-face-inherit (face value &optional frame tags)
+ "Set FACE to inherit its properties from another face."
+ (if (listp value) (setq value (car value))) ;; #### Temporary hack!
+ (if (find-face value)
+ (set-face-parent face value frame tags)))
+
+(defun custom-face-inherit (face &rest args)
+ "Return the value (instance) of the `inherit' property for FACE."
+ ;; #### Major, temporary hack!
+ (let ((spec (apply 'specifier-instantiator
+ (face-font face) args)))
+ (and spec (vector spec) (aref spec 0))))
;; This consistently fails to dtrt
;;(defun custom-set-face-font-size (face size &optional locale tags)
1.34.4.3 +139 -62 XEmacs/xemacs/lisp/faces.el
Index: faces.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/faces.el,v
retrieving revision 1.34.4.2
retrieving revision 1.34.4.3
diff -u -p -r1.34.4.2 -r1.34.4.3
--- faces.el 2005/07/13 04:44:37 1.34.4.2
+++ faces.el 2005/11/06 16:13:56 1.34.4.3
@@ -2,7 +2,7 @@
;; Copyright (C) 1992-4, 1997 Free Software Foundation, Inc.
;; Copyright (C) 1995 Board of Trustees, University of Illinois
-;; Copyright (C) 1995, 1996, 2002 Ben Wing
+;; Copyright (C) 1995, 1996, 2002, 2005 Ben Wing
;; Author: Ben Wing <ben(a)xemacs.org>
;; Keywords: faces, internal, dumped
@@ -41,6 +41,8 @@
;; authored for 19.12 by Chuck Thompson <cthomp(a)cs.uiuc.edu>,
;; rewritten by Ben Wing with the advent of specifiers.
+;; Face refactoring: this file's API is *compatible* with the API
+;; proposed in fontconfig.el. Implementation is *unchecked*.
;;; Some stuff in FSF's faces.el is in our x-faces.el.
@@ -97,35 +99,55 @@ Such a collection of attributes is calle
(defun face-property (face property &optional locale tag-set exact-p)
"Return FACE's value of the given PROPERTY.
+NOTE: If you are looking for the \"value\" of a built-in face property
+ (`foreground', `background', `font', `background-pixmap', etc.), you
+ are probably better off calling `face-property-instance'. The return
+ value of `face-property' for built-in properties describes the original
+ specification used to determine the face property, which may be nil,
+ a list of instantiators, or something else that is unexpected. For
+ example, if you ask for a face property in a particular buffer (by
+ specifying a buffer for LOCALE), you will get a non-nil return value
+ only if a buffer-local specification for that particular buffer had
+ previously been given.
+
+For a full list of built-in property names and their semantics, see
+ `set-face-property'.
+
If LOCALE is omitted, the FACE's actual value for PROPERTY will be
- returned. For built-in properties, this will be a specifier object
- of a type appropriate to the property (e.g. a font or color
- specifier). For other properties, this could be anything.
-
-If LOCALE is supplied, then instead of returning the actual value,
- the specification(s) for the given locale or locale type will
- be returned. This will only work if the actual value of
- PROPERTY is a specifier (this will always be the case for built-in
- properties, but not or not may apply to user-defined properties).
- If the actual value of PROPERTY is not a specifier, this value
- will simply be returned regardless of LOCALE.
+ returned. In this case, this function appears to behave rather
+ differently depending on whether PROPERTY is a built-in face property of
+ a user-defined face property. This is because the most basic value of a
+ user-defined property is simply whatever was set using
+ `set-face-property', but for a built-in property it's always a specifier,
+ which is an abstract object encapsulating all the specifications for that
+ particular property.
+
+LOCALE, if supplied, will generally be a buffer, frame or
+ `global' (for the global value), but there are other possibilities -- see
+ the following paragraph. This mostly applies to built-in properties. In
+ this case, the return value will not be a specifier object but the
+ specification(s) for the given locale or locale type will be returned
+ (equivalent to calling `specifier-specs' on the specifier).
+ (Technically, the same thing happens if the basic value of a user-
+ defined property is a specifier, although this usage is rare.)
The return value will be a list of instantiators (e.g. strings
specifying a font or color name), or a list of specifications, each
of which is a cons of a locale and a list of instantiators.
Specifically, if LOCALE is a particular locale (a buffer, window,
- frame, device, or 'global), a list of instantiators for that locale
+ frame, device, or `global'), a list of instantiators for that locale
will be returned. Otherwise, if LOCALE is a locale type (one of
- the symbols 'buffer, 'window, 'frame, or 'device), the
specifications
+ the symbols `buffer', `window', `frame', or `device'), the
specifications
for all locales of that type will be returned. Finally, if LOCALE is
- 'all, the specifications for all locales of all types will be returned.
+ `all', the specifications for all locales of all types will be returned.
The specifications in a specifier determine what the value of
PROPERTY will be in a particular \"domain\" or set of circumstances,
- which is typically a particular Emacs window along with the buffer
- it contains and the frame and device it lies within. The value is
+ which is typically a particular Emacs window -- which in turn defines
+ a buffer (the buffer in the window), a frame (the frame that the window
+ is in), and a device (the device that the frame is in). The value is
derived from the instantiator associated with the most specific
- locale (in the order buffer, window, frame, device, and 'global)
+ locale (in the order buffer, window, frame, device, and `global')
that matches the domain in question. In other words, given a domain
(i.e. an Emacs window, usually), the specifier for PROPERTY will
first be searched for a specification whose locale is the buffer
@@ -134,11 +156,10 @@ The specifications in a specifier determ
frame that the window is contained within; etc. The first
instantiator that is valid for the domain (usually this means that
the instantiator is recognized by the device [i.e. MS Windows, the X
- server or TTY device] that the domain is on. The function
- `face-property-instance' actually does all this, and is used to
- determine how to display the face.
-
-See `set-face-property' for the built-in property-names."
+ server or TTY device]) will be \"instantiated\", which generates
+ a Lisp object encapsulating the original instantiator and the underlying
+ window-system object describing the property. The function
+ `face-property-instance' actually does all this."
(setq face (get-face face))
(let ((value (get face property)))
@@ -155,7 +176,7 @@ See `set-face-property' for the built-in
;; if a user-property does not have a specifier but a
;; locale was specified, put a specifier there.
;; If there was already a value there, convert it to a
- ;; specifier with the value as its 'global instantiator.
+ ;; specifier with the value as its `global' instantiator.
(unless (specifierp specifier)
(let ((new-specifier (make-specifier 'generic)))
(if (or (not (null specifier))
@@ -180,11 +201,11 @@ Under most circumstances, DOMAIN will be
the returned instance would be different.
The returned instance will typically be a color-instance,
- font-instance, or pixmap-instance object, and you can query
+ font-instance, or image-instance object, and you can query
it using the appropriate object-specific functions. For example,
you could use `color-instance-rgb-components' to find out the
- RGB (red, green, and blue) components of how the 'background
- property of the 'highlight face is displayed in a particular
+ RGB (red, green, and blue) components of how the `background'
+ property of the `highlight' face is displayed in a particular
window. The results might be different from the results
you would get for another window (perhaps the user
specified a different color for the frame that window is on;
@@ -266,7 +287,7 @@ If PROPERTY is a built-in property, the
-- If VALUE is a simple instantiator (e.g. a string naming a font or
color) or a list of instantiators, then the instantiator(s) will
be added as a specification of the property for the given LOCALE
- (which defaults to 'global if omitted).
+ (which defaults to `global' if omitted).
-- If VALUE is a list of specifications (each of which is a cons of
a locale and a list of instantiators), then LOCALE must be nil
(it does not make sense to explicitly specify a locale in this
@@ -278,12 +299,12 @@ If PROPERTY is a built-in property, the
`copy-specifier' and LOCALE has the same semantics (if it is
a particular locale, the specification for the locale will be
copied; if a locale type, specifications for all locales of
- that type will be copied; if nil or 'all, then all
+ that type will be copied; if nil or `all', then all
specifications will be copied).
-HOW-TO-ADD should be either nil or one of the symbols 'prepend,
- 'append, 'remove-tag-set-prepend, 'remove-tag-set-append,
'remove-locale,
- 'remove-locale-type, or 'remove-all. See `copy-specifier' and
+HOW-TO-ADD should be either nil or one of the symbols `prepend',
+ `append', `remove-tag-set-prepend', `remove-tag-set-append',
`remove-locale',
+ `remove-locale-type', or `remove-all'. See `copy-specifier' and
`add-spec-to-specifier' for a description of what each of
these means. Most of the time, you do not need to worry about
this argument; the default behavior usually is fine.
@@ -292,7 +313,7 @@ In general, it is OK to pass an instance
by `face-property-instance') as an instantiator in place of
an actual instantiator. In such a case, the instantiator used
to create that instance object will be used (for example, if
- you set a font-instance object as the value of the 'font
+ you set a font-instance object as the value of the `font'
property, then the font name used to create that object will
be used instead). If some cases, however, doing this
conversion does not make sense, and this will be noted in
@@ -303,7 +324,7 @@ If PROPERTY is not a built-in property,
given, then this function will attempt to add VALUE as the
instantiator for the given LOCALE, using `add-spec-to-specifier'.
If the value of the property is not a specifier, it will
- automatically be converted into a 'generic specifier.
+ automatically be converted into a `generic' specifier.
The following symbols have predefined meanings:
@@ -345,6 +366,11 @@ The following symbols have predefined me
Only used by faces on TTY devices.
For valid instantiators, see `make-face-boolean-specifier'.
+ inherit Face name or face object from which to inherit attributes,
+ or a list of such elements. Attributes from inherited
+ faces are merged into the face like an underlying face
+ would be, with higher priority than underlying faces.
+
doc-string Description of what the face's normal use is.
NOTE: This is not a specifier, unlike all
the other built-in properties, and cannot
@@ -378,7 +404,7 @@ arguments."
(defun reset-face (face &optional locale tag-set exact-p)
"Clear all existing built-in specifications from FACE.
-This makes FACE inherit all its display properties from 'default.
+This makes FACE inherit all its display properties from `default'.
WARNING: Be absolutely sure you want to do this!!! It is a dangerous
operation and is not undoable.
@@ -396,9 +422,8 @@ This makes all properties of FACE inheri
(mapcar (lambda (x)
(set-face-property face x (vector parent) locale tag-set
how-to-add))
- (delq 'display-table
- (delq 'background-pixmap
- (copy-sequence built-in-face-specifiers))))
+ (set-difference built-in-face-specifiers
+ '(display-table background-pixmap inherit)))
(set-face-background-pixmap face (vector 'inherit ':face parent)
locale tag-set how-to-add)
nil)
@@ -414,18 +439,25 @@ This makes all properties of FACE inheri
(defun face-font-name (face &optional domain charset)
"Return the font name of FACE in DOMAIN, or nil if it is unspecified.
-DOMAIN is as in `face-font-instance'."
+DOMAIN is as in `face-font-instance'.
+
+Font names are strings, as described in `make-font-specifier'."
(let ((f (face-font-instance face domain charset)))
(and f (font-instance-name f))))
(defun face-font (face &optional locale tag-set exact-p)
- "Return the font of FACE in LOCALE, or nil if it is unspecified.
+ "Return the font spec of FACE in LOCALE, or nil if it is unspecified.
+
+NOTE: This returns a locale-specific specification, not any sort of value
+corresponding to the actual font being used. If you want to know the
+actual font used in a particular domain, use `face-font-instance', or
+`face-font-name' for its name (i.e. the instantiator used to create it).
FACE may be either a face object or a symbol representing a face.
LOCALE may be a locale (the instantiators for that particular locale
will be returned), a locale type (the specifications for all locales
- of that type will be returned), 'all (all specifications will be
+ of that type will be returned), `all' (all specifications will be
returned), or nil (the actual specifier object will be returned).
See `face-property' for more information."
@@ -434,6 +466,9 @@ See `face-property' for more information
(defun face-font-instance (face &optional domain charset)
"Return the instance of FACE's font in DOMAIN.
+Return value will be a font instance object; query its properties using
+`font-instance-name', `font-instance-height', `font-instance-width', etc.
+
FACE may be either a face object or a symbol representing a face.
Normally DOMAIN will be a window or nil (meaning the selected window),
@@ -455,23 +490,29 @@ FONT should be an instantiator (see `mak
locale to an instantiator list), or a font specifier object.
If FONT is an alist, LOCALE must be omitted. If FONT is a
- specifier object, LOCALE can be a locale, a locale type, 'all,
+ specifier object, LOCALE can be a locale, a locale type, `all',
or nil; see `copy-specifier' for its semantics. Otherwise LOCALE
specifies the locale under which the specified instantiator(s)
- will be added, and defaults to 'global.
+ will be added, and defaults to `global'.
See `set-face-property' for more information."
(interactive (face-interactive "font"))
(set-face-property face 'font font locale tag-set how-to-add))
(defun face-foreground (face &optional locale tag-set exact-p)
- "Return the foreground of FACE in LOCALE, or nil if it is unspecified.
+ "Return the foreground spec of FACE in LOCALE, or nil if it is unspecified.
+
+NOTE: This returns a locale-specific specification, not any sort of value
+corresponding to the actual foreground being used. If you want to know the
+actual foreground color used in a particular domain, use
+`face-foreground-instance', or `face-foreground-name' for its name
+\(i.e. the instantiator used to create it).
FACE may be either a face object or a symbol representing a face.
LOCALE may be a locale (the instantiators for that particular locale
will be returned), a locale type (the specifications for all locales
- of that type will be returned), 'all (all specifications will be
+ of that type will be returned), `all' (all specifications will be
returned), or nil (the actual specifier object will be returned).
See `face-property' for more information."
@@ -480,6 +521,9 @@ See `face-property' for more information
(defun face-foreground-instance (face &optional domain default no-fallback)
"Return the instance of FACE's foreground in DOMAIN.
+Return value will be a color instance object; query its properties using
+`color-instance-name' or `color-instance-rgb-properties'.
+
FACE may be either a face object or a symbol representing a face.
Normally DOMAIN will be a window or nil (meaning the selected window),
@@ -512,10 +556,10 @@ COLOR should be an instantiator (see `ma
an instantiator list), or a color specifier object.
If COLOR is an alist, LOCALE must be omitted. If COLOR is a
- specifier object, LOCALE can be a locale, a locale type, 'all,
+ specifier object, LOCALE can be a locale, a locale type, `all',
or nil; see `copy-specifier' for its semantics. Otherwise LOCALE
specifies the locale under which the specified instantiator(s)
- will be added, and defaults to 'global.
+ will be added, and defaults to `global'.
See `set-face-property' for more information."
(interactive (face-interactive "foreground"))
@@ -524,11 +568,17 @@ See `set-face-property' for more informa
(defun face-background (face &optional locale tag-set exact-p)
"Return the background color of FACE in LOCALE, or nil if it is unspecified.
+NOTE: This returns a locale-specific specification, not any sort of value
+corresponding to the actual background being used. If you want to know the
+actual background color used in a particular domain, use
+`face-background-instance', or `face-background-name' for its name
+\(i.e. the instantiator used to create it).
+
FACE may be either a face object or a symbol representing a face.
LOCALE may be a locale (the instantiators for that particular locale
will be returned), a locale type (the specifications for all locales
- of that type will be returned), 'all (all specifications will be
+ of that type will be returned), `all' (all specifications will be
returned), or nil (the actual specifier object will be returned).
See `face-property' for more information."
@@ -537,6 +587,9 @@ See `face-property' for more information
(defun face-background-instance (face &optional domain default no-fallback)
"Return the instance of FACE's background in DOMAIN.
+Return value will be a color instance object; query its properties using
+`color-instance-name' or `color-instance-rgb-properties'.
+
FACE may be either a face object or a symbol representing a face.
Normally DOMAIN will be a window or nil (meaning the selected window),
@@ -569,24 +622,29 @@ COLOR should be an instantiator (see `ma
an instantiator list), or a color specifier object.
If COLOR is an alist, LOCALE must be omitted. If COLOR is a
- specifier object, LOCALE can be a locale, a locale type, 'all,
+ specifier object, LOCALE can be a locale, a locale type, `all',
or nil; see `copy-specifier' for its semantics. Otherwise LOCALE
specifies the locale under which the specified instantiator(s)
- will be added, and defaults to 'global.
+ will be added, and defaults to `global'.
See `set-face-property' for more information."
(interactive (face-interactive "background"))
(set-face-property face 'background color locale tag-set how-to-add))
(defun face-background-pixmap (face &optional locale tag-set exact-p)
- "Return the background pixmap of FACE in LOCALE, or nil if it is unspecified.
+ "Return the background pixmap spec of FACE in LOCALE, or nil if unspecified.
This property is only used on window system devices.
+NOTE: This returns a locale-specific specification, not any sort of value
+corresponding to the actual background pixmap being used. If you want to
+know the actual background pixmap used in a particular domain, use
+`face-background-pixmap-instance'.
+
FACE may be either a face object or a symbol representing a face.
LOCALE may be a locale (the instantiators for that particular locale
will be returned), a locale type (the specifications for all locales
- of that type will be returned), 'all (all specifications will be
+ of that type will be returned), `all' (all specifications will be
returned), or nil (the actual specifier object will be returned).
See `face-property' for more information."
@@ -596,6 +654,12 @@ See `face-property' for more information
no-fallback)
"Return the instance of FACE's background pixmap in DOMAIN.
+Return value will be an image instance object; query its properties using
+`image-instance-instantiator' (the original instantiator used to create
+the image, which may be a complex beast -- see `make-image-specifier'),
+`image-instance-file-name' (the file, if any, from which the image was
+created), `image-instance-height', etc.
+
FACE may be either a face object or a symbol representing a face.
Normally DOMAIN will be a window or nil (meaning the selected window),
@@ -617,10 +681,10 @@ PIXMAP should be an instantiator (see `m
to an instantiator list), or an image specifier object.
If PIXMAP is an alist, LOCALE must be omitted. If PIXMAP is a
- specifier object, LOCALE can be a locale, a locale type, 'all,
+ specifier object, LOCALE can be a locale, a locale type, `all',
or nil; see `copy-specifier' for its semantics. Otherwise LOCALE
specifies the locale under which the specified instantiator(s)
- will be added, and defaults to 'global.
+ will be added, and defaults to `global'.
See `set-face-property' for more information."
(interactive (face-interactive "background-pixmap"))
@@ -648,13 +712,18 @@ designed for interactive use."
(set-face-property face 'background-pixmap file))
(defun face-display-table (face &optional locale tag-set exact-p)
- "Return the display table of FACE in LOCALE.
+ "Return the display table spec of FACE in LOCALE, or nil if unspecified..
+
+NOTE: This returns a locale-specific specification, not any sort of value
+corresponding to the actual display table being used. If you want to
+know the actual display table used in a particular domain, use
+`face-display-table-instance'.
-A vector (as returned by `make-display-table') will be returned.
+FACE may be either a face object or a symbol representing a face.
LOCALE may be a locale (the instantiators for that particular locale
will be returned), a locale type (the specifications for all locales
- of that type will be returned), 'all (all specifications will be
+ of that type will be returned), `all' (all specifications will be
returned), or nil (the actual specifier object will be returned).
See `face-property' for more information."
@@ -662,9 +731,17 @@ See `face-property' for more information
(defun face-display-table-instance (face &optional domain default no-fallback)
"Return the instance of FACE's display table in DOMAIN.
-A vector (as returned by `make-display-table') will be returned.
-See `face-property-instance' for the semantics of the DOMAIN argument."
+Return value will be a vector, char table or range table; see
+`current-display-table'.
+
+FACE may be either a face object or a symbol representing a face.
+
+Normally DOMAIN will be a window or nil (meaning the selected window),
+ and the actual display table used in that particular window and buffer
+ will be returned.
+
+See `face-property-instance' for more information."
(face-property-instance face 'display-table domain default no-fallback))
(defun set-face-display-table (face display-table &optional locale tag-set
@@ -788,7 +865,7 @@ See `face-property-instance' for the sem
(error "Invalid specifier domain"))
(let ((device (dfw-device domain))
(common-props '(foreground background font display-table underline
- dim))
+ dim inherit))
(win-props '(background-pixmap strikethru))
(tty-props '(highlight blinking reverse)))
@@ -1632,10 +1709,10 @@ Don't use this function in your program.
(defun init-face-from-resources (face &optional locale)
"Initialize FACE from the resource database.
-If LOCALE is specified, it should be a frame, device, or 'global, and
+If LOCALE is specified, it should be a frame, device, or `global', and
the face will be resourced over that locale. Otherwise, the face will
be resourced over all possible locales (i.e. all frames, all devices,
-and 'global)."
+and `global')."
(cond ((null init-face-from-resources)
;; Do nothing.
)
1.7.2.1 +1 -1 XEmacs/xemacs/lisp/finder.el
Index: finder.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/finder.el,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -p -r1.7 -r1.7.2.1
--- finder.el 2003/02/20 08:19:29 1.7
+++ finder.el 2005/11/06 16:13:57 1.7.2.1
@@ -288,7 +288,7 @@ arguments compiles from `load-path'."
found)
(while (and dirs (not found))
(if (file-exists-p (expand-file-name (concat file ".el") (car dirs)))
- (setq found (expand-file-name file (car dirs)))
+ (setq found (expand-file-name (concat file ".el") (car dirs)))
(if (file-exists-p (expand-file-name file (car dirs)))
(setq found (expand-file-name file (car dirs)))))
(setq dirs (cdr dirs)))
1.15.2.8 +102 -82 XEmacs/xemacs/lisp/font.el
Index: font.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/font.el,v
retrieving revision 1.15.2.7
retrieving revision 1.15.2.8
diff -u -p -r1.15.2.7 -r1.15.2.8
--- font.el 2005/09/20 16:05:24 1.15.2.7
+++ font.el 2005/11/06 16:13:57 1.15.2.8
@@ -72,29 +72,38 @@
(defmacro defcustom (var value doc &rest args)
`(defvar ,var ,value ,doc))))
-; delete alternate defn of try-font-name
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; ancient gomi
+;; will be deleted soon 2005-09-25
+
+;; ; delete alternate defn of try-font-name
+
+;; (if (not (fboundp 'facep))
+;; (defun facep (face)
+;; "Return t if X is a face name or an internal face vector."
+;; (if (not window-system)
+;; nil ; FIXME if FSF ever does TTY faces
+;; (and (or (internal-facep face)
+;; (and (symbolp face) (assq face global-face-data)))
+;; t))))
+
+;; (if (not (fboundp 'set-face-property))
+;; (defun set-face-property (face property value &optional locale
+;; tag-set how-to-add)
+;; "Change a property of FACE."
+;; (and (symbolp face)
+;; (put face property value))))
+
+;; (if (not (fboundp 'face-property))
+;; (defun face-property (face property &optional locale tag-set exact-p)
+;; "Return FACE's value of the given PROPERTY."
+;; (and (symbolp face) (get face property))))
+
+;; end of condemned stuff
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(if (not (fboundp 'facep))
- (defun facep (face)
- "Return t if X is a face name or an internal face vector."
- (if (not window-system)
- nil ; FIXME if FSF ever does TTY faces
- (and (or (internal-facep face)
- (and (symbolp face) (assq face global-face-data)))
- t))))
-
-(if (not (fboundp 'set-face-property))
- (defun set-face-property (face property value &optional locale
- tag-set how-to-add)
- "Change a property of FACE."
- (and (symbolp face)
- (put face property value))))
-
-(if (not (fboundp 'face-property))
- (defun face-property (face property &optional locale tag-set exact-p)
- "Return FACE's value of the given PROPERTY."
- (and (symbolp face) (get face property))))
-
(require 'disp-table)
@@ -108,11 +117,13 @@
(gtk . (x-font-create-name x-font-create-object))
;; #### FIXME should this handle fontconfig font objects?
(fc . (fc-font-create-name fc-font-create-object))
- (ns . (ns-font-create-name ns-font-create-object))
(mswindows . (mswindows-font-create-name mswindows-font-create-object))
- (pm . (x-font-create-name x-font-create-object)) ; Change? FIXME
;; #### what is this bogosity?
- (tty . (tty-font-create-plist tty-font-create-object)))
+ (tty . (tty-font-create-plist tty-font-create-object))
+ ;; NeXTstep and Presentation Manager are scheduled for demolition
+ ;; (ns . (ns-font-create-name ns-font-create-object))
+ ;; (pm . (x-font-create-name x-font-create-object)) ; Change? FIXME
+ )
"An assoc list mapping device types to a list of translations.
The first function creates a font name from a font descriptor object.
@@ -844,63 +855,72 @@ The type may be the strings \"px\", \"pi
(fc-name-unparse pattern)))
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; The window-system dependent code (NS-style)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun ns-font-families-for-device (&optional device no-resetp)
- ;; For right now, assume we are going to have the same storage for
- ;; device fonts for NS as we do for X. Is this a valid assumption?
- (or device (setq device (selected-device)))
- (if (boundp 'device-fonts-cache)
- (let ((menu (or (cdr-safe (assq device device-fonts-cache)))))
- (if (and (not menu) (not no-resetp))
- (progn
- (reset-device-font-menus device)
- (ns-font-families-for-device device t))
- (let ((scaled (mapcar #'(lambda (x) (if x (aref x 0)))
- (aref menu 0)))
- (normal (mapcar #'(lambda (x) (if x (aref x 0)))
- (aref menu 1))))
- (sort (font-unique (nconc scaled normal)) 'string-lessp))))))
-
-(defun ns-font-create-name (fontobj &optional device)
- "Return a font name constructed from FONTOBJ, appropriate for NextSTEP
devices."
- (let ((family (or (font-family fontobj)
- (ns-font-families-for-device device)))
- (weight (or (font-weight fontobj) :medium))
- (style (or (font-style fontobj) (list :normal)))
- (size (font-size fontobj)))
- ;; Create a font, wow!
- (if (stringp family)
- (setq family (list family)))
- (if (or (symbolp style) (numberp style))
- (setq style (list style)))
- (setq weight (font-higher-weight weight (car-safe (memq :bold style))))
- (if (stringp size)
- (setq size (font-spatial-to-canonical size device)))
- (setq weight (or (cdr-safe (assq weight ns-font-weight-mappings))
- "medium"))
- (let ((done nil) ; Did we find a good font yet?
- (font-name nil) ; font name we are currently checking
- (cur-family nil) ; current family we are checking
- )
- (while (and family (not done))
- (setq cur-family (car family)
- family (cdr family))
- (if (assoc cur-family font-x-family-mappings)
- ;; If the family name is an alias as defined by
- ;; font-x-family-mappings, then append those families
- ;; to the front of 'family' and continue in the loop.
- ;; #### jhar: I don't know about ns font names, so using X mappings
- (setq family (append
- (cdr-safe (assoc cur-family
- font-x-family-mappings))
- family))
- ;; CARL: Need help here - I am not familiar with the NS font
- ;; model
- (setq font-name "UNKNOWN FORMULA GOES HERE"
- done (try-font-name font-name device))))
- (if done font-name))))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; ancient gomi
+;; will be deleted soon 2005-09-25
+
+;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; ;;; The window-system dependent code (NeXTstep-style)
+;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; (defun ns-font-families-for-device (&optional device no-resetp)
+;; ;; For right now, assume we are going to have the same storage for
+;; ;; device fonts for NS as we do for X. Is this a valid assumption?
+;; (or device (setq device (selected-device)))
+;; (if (boundp 'device-fonts-cache)
+;; (let ((menu (or (cdr-safe (assq device device-fonts-cache)))))
+;; (if (and (not menu) (not no-resetp))
+;; (progn
+;; (reset-device-font-menus device)
+;; (ns-font-families-for-device device t))
+;; (let ((scaled (mapcar #'(lambda (x) (if x (aref x 0)))
+;; (aref menu 0)))
+;; (normal (mapcar #'(lambda (x) (if x (aref x 0)))
+;; (aref menu 1))))
+;; (sort (font-unique (nconc scaled normal)) 'string-lessp))))))
+
+;; (defun ns-font-create-name (fontobj &optional device)
+;; "Return a font name constructed from FONTOBJ, appropriate for NextSTEP
devices."
+;; (let ((family (or (font-family fontobj)
+;; (ns-font-families-for-device device)))
+;; (weight (or (font-weight fontobj) :medium))
+;; (style (or (font-style fontobj) (list :normal)))
+;; (size (font-size fontobj)))
+;; ;; Create a font, wow!
+;; (if (stringp family)
+;; (setq family (list family)))
+;; (if (or (symbolp style) (numberp style))
+;; (setq style (list style)))
+;; (setq weight (font-higher-weight weight (car-safe (memq :bold style))))
+;; (if (stringp size)
+;; (setq size (font-spatial-to-canonical size device)))
+;; (setq weight (or (cdr-safe (assq weight ns-font-weight-mappings))
+;; "medium"))
+;; (let ((done nil) ; Did we find a good font yet?
+;; (font-name nil) ; font name we are currently checking
+;; (cur-family nil) ; current family we are checking
+;; )
+;; (while (and family (not done))
+;; (setq cur-family (car family)
+;; family (cdr family))
+;; (if (assoc cur-family font-x-family-mappings)
+;; ;; If the family name is an alias as defined by
+;; ;; font-x-family-mappings, then append those families
+;; ;; to the front of 'family' and continue in the loop.
+;; ;; #### jhar: I don't know about ns font names, so using X mappings
+;; (setq family (append
+;; (cdr-safe (assoc cur-family
+;; font-x-family-mappings))
+;; family))
+;; ;; CARL: Need help here - I am not familiar with the NS font
+;; ;; model
+;; (setq font-name "UNKNOWN FORMULA GOES HERE"
+;; done (try-font-name font-name device))))
+;; (if done font-name))))
+
+;; end of condemned stuff
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1.1.2.7 +195 -42 XEmacs/xemacs/lisp/Attic/fontconfig.el
Index: fontconfig.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/Attic/fontconfig.el,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -u -p -r1.1.2.6 -r1.1.2.7
--- fontconfig.el 2005/09/27 16:28:51 1.1.2.6
+++ fontconfig.el 2005/11/06 16:13:57 1.1.2.7
@@ -1,9 +1,117 @@
+;;; fontconfig.el --- New font model, NG
+
+;; Copyright (c) 2003 Eric Knauel and Matthias Neubauer
+;; Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+
+;; Authors: Eric Knauel <knauel(a)informatik.uni-tuebingen.de>
+;; Matthias Neubauer <neubauer(a)informatik.uni-freiburg.de>
+;; Stephen J. Turnbull <stephen(a)xemacs.org>
+;; Created: 27 Oct 2003
+;; Updated: 05 Mar 2005 by Stephen J. Turnbull
+;; Keywords: faces
+
+;; 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.
+
+;;; Synched up with: Not in GNU
+
+;;; Commentary:
+
+;; This file is one of the pillars of the face refactoring effort
+;; (another will be colorconfig.el, and there may be others).
+
+;; The overall plan is to have a sensible modern model for values of
+;; each of the components of a face (starting with fonts and colors),
+;; implemented in a single module. Of course we must be able to
+;; convert such values to appropriate descriptors for any device type
+;; on the one hand, but on the other it seems unreasonable to force
+;; users to deal with a large number of different (and arcane, in the
+;; case of XLFD) naming formats.
+
+;; This file implements font specification. We call a specification a
+;; *pattern* to conform to fontconfig usage. The internal
+;; representation of a pattern will have Keith Packard's fontconfig
+;; API. For one, there is a robust and free C implementation, which
+;; is available as a package for all platforms supported by X.org or
+;; XFree86. For another, it seems to be capable of representing any
+;; specification of any of the font models I know. Third, on X
+;; platforms that internal representation can be passed verbatim to
+;; libXft to get high quality TrueType fonts rendered with
+;; anti-aliasing and hinting.
+
+;; We will support the following user interfaces:
+
+;; 1. fontconfig font names
+;; 2. X Logical Font Descriptions (XLFD)
+;; 3. MS Windows font names
+;; 4. Mac OS X font names
+
+;; and possibly others (such as ad hoc abbreviations used in older X11
+;; implementations). This is called the *fontname UI* (for the
+;; platform) to distinguish it from XEmacs's internal model
+;; (fontconfig patterns) and the API for rendering engines (called the
+;; *font API* for the engine).
+
+;; We will support the following rendering engine APIs:
+
+;; 1. fontconfig patterns (the native language of Xft); to emphasize
+;; the engine-specific nature, we will call these *Xft fonts*
+;; 2. XLFD strings
+;; 3. MS Windows font names
+
+;; and possibly others (such as Mac OS X font names). This is called
+;; the *font API* (for the platform) to distinguish it from XEmacs's
+;; internal model (fontconfig *patterns*) and the names used by users
+;; (called the *fontname UI* for the platform).
+
+
;; TODO (possible enhancements)
;; 1. add a more complete docstring for properties as such (would be a
;; hash table?) to describe things like special symbolic values, and
;; Emacs-relevant semantics
;; 2. add a special value defining macro for constants
+;;; Code:
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; The fontconfig pattern API
+;;
+;; The basic interfaces are defined as API wrappers in C in xft-font.c
+;; #### which should be renamed to fontconfig.c. These are prefixed
+;; with "fc-pattern-". These are
+;;
+;; fc-pattern-p
+;; fc-pattern-create
+;; fc-pattern-duplicate
+;; fc-pattern-add
+;; fc-pattern-del
+;; fc-pattern-get
+;; fc-pattern-destroy
+
+;; We provide a LISP-y alias, `make-fc-pattern' for the pattern
+;; constructor function `fc-pattern-create'. #### It might make sense
+;; to generalize `make-fc-pattern' by allowing a plist of properties
+;; as an optional argument. We also provide accessors
+;; `fc-pattern-get-PROPERTY' and mutators `fc-pattern-add-PROPERTY'
+;; for each of the standard properties used by Xft, which overlap
+;; substantially with the properties defined by X11. #### We probably
+;; should provide `fc-pattern-delete-PROPERTY', too.
+
+(defalias 'make-fc-pattern 'fc-pattern-create)
+
(defmacro fc-define-property (property type docfrag &optional obsolete-p)
"Define PROPERTY as a fontconfig font property of type TYPE using DOCFRAG.
@@ -156,9 +264,18 @@ See `fc-pattern-add' for documentation o
;; (,fc-font-name-property-render . fc-pattern-get-render)
))
-(defvar fc-find-available-font-families-fc-fonts-only t
- "If `fc-find-available-font-families-fc-fonts-only' is set to `t',
-`fc-find-available-font-families' will ignore core fonts.")
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; fontconfig API for massaging property values
+;;
+;; Note that functions that actually manipulate values in patterns for
+;; the purpose of changing size or creating a group of related faces
+;; (eg, roman, italic, bold, and bold-italic) _do not_ belong here.
+;; Those belong in the face code.
+;;
+;; #### This is way overcomplexified. It's not obvious to me that we
+;; need to expose the fontconfig integer values to LISP, and we should
+;; not if we can avoid it.
(defconst fc-font-name-slant-roman 0)
(defconst fc-font-name-slant-italic 100)
@@ -267,28 +384,6 @@ corresponding Xft font slant constant."
(let ((pair (assoc str fc-font-name-weight-mapping-string-reverse)))
(if pair (cdr pair))))
-;; #### it might make sense to generalize `make-fc-pattern' by allowing
-;; a plist of properties as an optional argument.
-
-;; A LISP-y alias for the pattern constructor function.
-(defalias 'make-fc-pattern 'fc-pattern-create)
-
-;; #### it might make sense to generalize `fc-try-font' by having a
-;; global variable that contains a list of font name parsers. They are
-;; tried in order, and the first one to return an fc-pattern is matched.
-
-(defun fc-try-font (font &optional device)
- "Return list of pattern objects matching FONT on DEVICE.
-
-FONT may be a fontconfig pattern object or a fontconfig font name (a string).
-Optional DEVICE is the device object to query, defaulting to the currently
-selected device."
- (fc-list-fonts-pattern-objects (or device (default-x-device))
- (if (fc-pattern-p font)
- font
- (fc-name-parse font))
- nil))
-
(defun fc-copy-pattern-partial (pattern attribute-list)
"Return a copy of PATTERN restricted to ATTRIBUTE-LIST.
@@ -307,6 +402,64 @@ A new object is allocated and returned."
(setq attrs (cdr attrs)))
new))
+(defun fc-pattern-get-all-attributes (fc-pattern fc-pattern-get-function)
+ (let ((count 0)
+ res end val)
+ (while (not end)
+ (setq val (funcall fc-pattern-get-function fc-pattern count))
+ (if (or (equal val 'fc-result-no-id)
+ (equal val 'fc-result-no-match))
+ (setq end t)
+ (setq res (append res (list val))
+ count (+ count 1))))
+ res))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; The fontconfig fontname UI
+;;
+;; The basic interfaces are defined as API wrappers in C in xft-font.c
+;; #### which should be renamed to fontconfig.c. These are prefixed
+;; with "fc-name-". These are
+;;
+;; fc-name-parse
+;; fc-name-unparse
+;; xft-name-unparse
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; The fontconfig font API
+;;
+;; The basic interfaces are defined as API wrappers in C in xft-font.c
+;; #### which should be renamed to fontconfig.c. These are prefixed
+;; with "fc-font-". These are
+;;
+;; fc-font-match
+;; fc-list-fonts-pattern-objects
+;; fc-font-sort
+;; fc-font-real-pattern
+
+;; #### it might make sense to generalize `fc-try-font' by having a
+;; global variable that contains a list of font name parsers. They are
+;; tried in order, and the first one to return an fc-pattern is matched.
+
+;; #### Probably useless. If not, make it a defcustom.
+(defvar fc-find-available-font-families-fc-fonts-only t
+ "If `fc-find-available-font-families-fc-fonts-only' is set to `t',
+`fc-find-available-font-families' will ignore core fonts.")
+
+(defun fc-try-font (font &optional device)
+ "Return list of pattern objects matching FONT on DEVICE.
+
+FONT may be a fontconfig pattern object or a fontconfig font name (a string).
+Optional DEVICE is the device object to query, defaulting to the currently
+selected device."
+ (fc-list-fonts-pattern-objects (or device (default-x-device))
+ (if (fc-pattern-p font)
+ font
+ (fc-name-parse font))
+ nil))
+
(defun fc-find-available-font-families (&optional device filter-fun)
"Find all available font families."
(let ((device (or device (default-x-device)))
@@ -351,6 +504,23 @@ A new object is allocated and returned."
(fc-font-weight-translate-from-constant fc-weight-constant))))
(fc-list-fonts-pattern-objects device pattern objectset))))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; The XLFD fontname UI
+;;
+
+;; xlfd-font-name-p
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Utility functions
+;;
+
+(defun fc-pattern-get-successp (result)
+ (and (not (equal result 'fc-result-no-match))
+ (not (equal result 'fc-result-no-id))
+ (not (equal result 'fc-internal-error))))
+
;;; DELETE-DUPLICATES and REMOVE-DUPLICATES from cl-seq.el do not
;;; seem to work on list of strings...
;;; #### Presumably just use :test 'equal!
@@ -372,23 +542,6 @@ A new object is allocated and returned."
(setq res (append res (list (car in)))))
(setq in (cdr in)))
res))
-
-(defun fc-pattern-get-all-attributes (fc-pattern fc-pattern-get-function)
- (let ((count 0)
- res end val)
- (while (not end)
- (setq val (funcall fc-pattern-get-function fc-pattern count))
- (if (or (equal val 'fc-result-no-id)
- (equal val 'fc-result-no-match))
- (setq end t)
- (setq res (append res (list val))
- count (+ count 1))))
- res))
-
-(defun fc-pattern-get-successp (result)
- (and (not (equal result 'fc-result-no-match))
- (not (equal result 'fc-result-no-id))
- (not (equal result 'fc-internal-error))))
(provide 'fontconfig)
1.43.2.2 +1 -1 XEmacs/xemacs/lisp/help.el
Index: help.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/help.el,v
retrieving revision 1.43.2.1
retrieving revision 1.43.2.2
diff -u -p -r1.43.2.1 -r1.43.2.2
--- help.el 2005/03/15 05:20:48 1.43.2.1
+++ help.el 2005/11/06 16:13:58 1.43.2.2
@@ -838,7 +838,7 @@ of the key sequence that ran this comman
(defun view-emacs-news ()
"Display info on recent changes to XEmacs."
(interactive)
- (Help-find-file (locate-data-file "NEWS")))
+ (Help-find-file (expand-file-name "NEWS" data-directory)))
(defun xemacs-www-page ()
"Go to the XEmacs World Wide Web page."
1.26.2.3 +3 -3 XEmacs/xemacs/lisp/minibuf.el
Index: minibuf.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/minibuf.el,v
retrieving revision 1.26.2.2
retrieving revision 1.26.2.3
diff -u -p -r1.26.2.2 -r1.26.2.3
--- minibuf.el 2005/07/13 04:44:41 1.26.2.2
+++ minibuf.el 2005/11/06 16:13:58 1.26.2.3
@@ -23,8 +23,8 @@
;; 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, 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Synched up with: all the minibuffer history stuff is synched with
;;; 19.30. Not sure about the rest.
@@ -1495,7 +1495,7 @@ only existing buffer names are allowed."
(setq result default)
nil)
((not default)
- t)
+ nil)
((not (get-buffer default))
t)
(t
1.68.2.2 +30 -22 XEmacs/xemacs/lisp/package-get.el
Index: package-get.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/package-get.el,v
retrieving revision 1.68.2.1
retrieving revision 1.68.2.2
diff -u -p -r1.68.2.1 -r1.68.2.2
--- package-get.el 2005/09/20 16:05:25 1.68.2.1
+++ package-get.el 2005/11/06 16:13:58 1.68.2.2
@@ -204,6 +204,7 @@ directory."
("US (Main XEmacs Site)"
"ftp.xemacs.org" "pub/xemacs/packages")
;; In alphabetical order of Country, our mirrors...
+ ("Argentina (xmundo.net)" "xemacs.xmundo.net"
"pub/mirrors/xemacs/packages")
("Australia (aarnet.edu.au)" "mirror.aarnet.edu.au"
"pub/xemacs/packages")
("Australia (au.xemacs.org)" "ftp.au.xemacs.org"
"pub/xemacs/packages")
("Austria (at.xemacs.org)" "ftp.at.xemacs.org"
"editors/xemacs/packages")
@@ -211,7 +212,7 @@ directory."
("Brazil (br.xemacs.org)" "ftp.br.xemacs.org"
"pub/xemacs/packages")
("Canada (ca.xemacs.org)" "ftp.ca.xemacs.org"
"pub/Mirror/xemacs/packages")
("Canada (crc.ca)" "ftp.crc.ca"
"pub/packages/editors/xemacs/packages")
- ("Canada (ualberta.ca)" "sunsite.ualberta.ca"
"pub/Mirror/xemacs/packages")
+ ("Canada (nrc.ca)" "ftp.nrc.ca"
"pub/packages/editors/xemacs/packages")
("Czech Republic (cz.xemacs.org)" "ftp.cz.xemacs.org"
"MIRRORS/ftp.xemacs.org/pub/xemacs/packages")
("Denmark (dk.xemacs.org)" "ftp.dk.xemacs.org"
"pub/emacs/xemacs/packages")
("Finland (fi.xemacs.org)" "ftp.fi.xemacs.org"
"pub/mirrors/ftp.xemacs.org/pub/tux/xemacs/packages")
@@ -219,32 +220,32 @@ directory."
("France (mirror.cict.fr)" "mirror.cict.fr"
"xemacs/packages")
("France (pasteur.fr)" "ftp.pasteur.fr"
"pub/computing/xemacs/packages")
("Germany (de.xemacs.org)" "ftp.de.xemacs.org"
"pub/ftp.xemacs.org/tux/xemacs/packages")
- ("Germany (tu-darmstadt.de)" "ftp.tu-darmstadt.de"
"pub/editors/xemacs/packages")
+ ("Iceland (is.xemacs.org)" "ftp.is.xemacs.org"
"pub/xemacs/packages")
("Ireland (ie.xemacs.org)" "ftp.ie.xemacs.org"
"mirrors/ftp.xemacs.org/pub/xemacs/packages")
+ ("Ireland (heanet.ie)" "ftp.heanet.ie"
"mirrors/ftp.xemacs.org/packages")
("Italy (it.xemacs.org)" "ftp.it.xemacs.org"
"unix/packages/XEMACS/packages")
("Japan (aist.go.jp)" "ring.aist.go.jp"
"pub/text/xemacs/packages")
("Japan (asahi-net.or.jp)" "ring.asahi-net.or.jp"
"pub/text/xemacs/packages")
("Japan (dti.ad.jp)" "ftp.dti.ad.jp"
"pub/unix/editor/xemacs/packages")
("Japan (jaist.ac.jp)" "ftp.jaist.ac.jp"
"pub/GNU/xemacs/packages")
("Japan (jp.xemacs.org)" "ftp.jp.xemacs.org"
"pub/GNU/xemacs/packages")
- ("Japan (nucba.ac.jp)" "mirror.nucba.ac.jp"
"mirror/xemacs/packages")
+; ("Japan (nucba.ac.jp)" "mirror.nucba.ac.jp"
"mirror/xemacs/packages")
("Japan (sut.ac.jp)" "sunsite.sut.ac.jp"
"pub/archives/packages/xemacs/packages")
("Korea (kr.xemacs.org)" "ftp.kr.xemacs.org"
"pub/tools/emacs/xemacs/packages")
("New Zealand (nz.xemacs.org)" "ftp.nz.xemacs.org"
"mirror/ftp.xemacs.org/packages")
("Norway (no.xemacs.org)" "ftp.no.xemacs.org"
"pub/xemacs/packages")
("Poland (pl.xemacs.org)" "ftp.pl.xemacs.org"
"pub/unix/editors/xemacs/packages")
("Russia (ru.xemacs.org)" "ftp.ru.xemacs.org"
"pub/xemacs/packages")
- ("Slovakia (sk.xemacs.org)" "ftp.sk.xemacs.org"
"pub/mirrors/xemacs/packages")
- ("South Africa (za.xemacs.org)" "ftp.za.xemacs.org"
"mirrorsites/ftp.xemacs.org/packages")
+; ("South Africa (za.xemacs.org)" "ftp.za.xemacs.org"
"mirrorsites/ftp.xemacs.org/packages")
("Sweden (se.xemacs.org)" "ftp.se.xemacs.org"
"pub/gnu/xemacs/packages")
("Switzerland (ch.xemacs.org)" "ftp.ch.xemacs.org"
"mirror/xemacs/packages")
+ ("Taiwan (ftp.tw.xemacs.org)" "ftp.tw.xemacs.org"
"Unix/Editors/XEmacs/packages")
("UK (uk.xemacs.org)" "ftp.uk.xemacs.org"
"sites/ftp.xemacs.org/pub/xemacs/packages")
- ("US (ibiblio.org)" "ibiblio.org"
"pub/packages/editors/xemacs/packages")
+ ("US (ibiblio.org)" "mirrors.ibiblio.org"
"pub/mirrors/xemacs/packages")
("US (stealth.net)" "ftp.stealth.net"
"pub/mirrors/ftp.xemacs.org/pub/xemacs/packages")
("US (unc.edu)" "metalab.unc.edu"
"pub/packages/editors/xemacs/packages")
("US (us.xemacs.org)" "ftp.us.xemacs.org"
"pub/xemacs/packages")
- ("US (utk.edu)" "ftp.sunsite.utk.edu"
"pub/xemacs/packages")
- )
+ ("US (utk.edu)" "ftp.sunsite.utk.edu"
"pub/xemacs/packages"))
"*List of remote sites available for downloading packages.
List format is '(site-description site-name directory-on-site).
SITE-DESCRIPTION is a textual description of the site. SITE-NAME
@@ -263,20 +264,24 @@ variable actually used to specify packag
("Pre-Releases (Main XEmacs Site)" "ftp.xemacs.org"
"pub/xemacs/beta/experimental/packages")
;; In alphabetical order of Country, our mirrors...
+ ("Argentina Pre-Releases (xmundo.net)" "xemacs.xmundo.net"
+ "pub/mirrors/xemacs/beta/experimental/packages")
("Australia Pre-Releases (aarnet.edu.au)"
"mirror.aarnet.edu.au"
"pub/xemacs/beta/experimental/packages")
("Australia Pre-Releases (au.xemacs.org)" "ftp.au.xemacs.org"
"pub/xemacs/beta/experimental/packages")
("Austria Pre-Releases (at.xemacs.org)" "ftp.at.xemacs.org"
- "editors/xemacs/beta/experimentsl/packages")
+ "editors/xemacs/beta/experimental/packages")
+ ("Belgium (be.xemacs.org)" "ftp.be.xemacs.org"
+ "xemacs/beta/experimental/packages")
("Brazil Pre-Releases (br.xemacs.org)" "ftp.br.xemacs.org"
"pub/xemacs/xemacs-21.5/experimental/packages")
("Canada Pre-Releases (ca.xemacs.org)" "ftp.ca.xemacs.org"
"pub/Mirror/xemacs/beta/experimental/packages")
("Canada Pre-Releases (crc.ca)" "ftp.crc.ca"
"pub/packages/editors/xemacs/beta/experimental/packages")
- ("Canada Pre-Releases (ualberta.ca)" "sunsite.ualberta.ca"
- "pub/Mirror/xemacs/beta/experimental/packages")
+ ("Canada Pre-Releases (nrc.ca)" "ftp.nrc.ca"
+ "pub/packages/editors/xemacs/beta/experimental/packages")
("Czech Republic Pre-Releases (cz.xemacs.org)"
"ftp.cz.xemacs.org"
"MIRRORS/ftp.xemacs.org/pub/xemacs/xemacs-21.5/experimental/packages")
("Denmark Pre-Releases (dk.xemacs.org)" "ftp.dk.xemacs.org"
@@ -291,10 +296,12 @@ variable actually used to specify packag
"pub/computing/xemacs/beta/experimental/packages")
("Germany Pre-Releases (de.xemacs.org)" "ftp.de.xemacs.org"
"pub/ftp.xemacs.org/tux/xemacs/beta/experimental/packages")
- ("Germany Pre-Releases (tu-darmstadt.de)"
"ftp.tu-darmstadt.de"
- "pub/editors/xemacs/beta/experimental/packages")
+ ("Iceland Pre-Releases (is.xemacs.org)" "ftp.is.xemacs.org"
+ "pub/xemacs/beta/experimental/packages")
("Ireland Pre-Releases (ie.xemacs.org)" "ftp.ie.xemacs.org"
"mirrors/ftp.xemacs.org/pub/xemacs/beta/experimental/packages")
+ ("Ireland Pre-Releases (heanet.ie)" "ftp.heanet.ie"
+ "mirrors/ftp.xemacs.org/beta/experimental/packages")
("Italy Pre-Releases (it.xemacs.org)" "ftp.it.xemacs.org"
"unix/packages/XEMACS/beta/experimental/packages")
("Japan Pre-Releases (aist.go.jp)" "ring.aist.go.jp"
@@ -309,27 +316,28 @@ variable actually used to specify packag
"pub/GNU/xemacs/beta/experimental/packages")
("Japan Pre-Releases (sut.ac.jp)" "sunsite.sut.ac.jp"
"pub/archives/packages/xemacs/xemacs-21.5/experimental/packages")
- ("New Zealand Pre-Releases (nz.xemacs.org)" "ftp.nz.xemacs.org"
"mirror/ftp.xemacs.org/packages")
+ ("Korea (kr.xemacs.org)" "ftp.kr.xemacs.org"
+ "pub/tools/emacs/xemacs/beta/experimental/packages")
+ ("New Zealand Pre-Releases (nz.xemacs.org)"
"ftp.nz.xemacs.org"
+ "mirror/ftp.xemacs.org/packages")
("Norway Pre-Releases (no.xemacs.org)" "ftp.no.xemacs.org"
"pub/xemacs/beta/experimental/packages")
("Poland Pre-Releases (pl.xemacs.org)" "ftp.pl.xemacs.org"
"pub/unix/editors/xemacs/beta/experimental/packages")
("Russia Pre-Releases (ru.xemacs.org)" "ftp.ru.xemacs.org"
"pub/xemacs/beta/experimental/packages")
- ("Saudi Arabia Pre-Releases (sa.xemacs.org)"
"ftp.sa.xemacs.org"
- "pub/mirrors/ftp.xemacs.org/xemacs/xemacs-21.5/experimental/packages")
- ("Slovakia Pre-Releases (sk.xemacs.org)" "ftp.sk.xemacs.org"
- "pub/mirrors/xemacs/beta/experimental/packages")
- ("South Africa Pre-Releases (za.xemacs.org)"
"ftp.za.xemacs.org"
- "mirrorsites/ftp.xemacs.org/beta/experimental/packages")
+; ("South Africa Pre-Releases (za.xemacs.org)"
"ftp.za.xemacs.org"
+; "mirrorsites/ftp.xemacs.org/beta/experimental/packages")
("Sweden Pre-Releases (se.xemacs.org)" "ftp.se.xemacs.org"
"pub/gnu/xemacs/beta/experimental/packages")
("Switzerland Pre-Releases (ch.xemacs.org)"
"ftp.ch.xemacs.org"
"mirror/xemacs/beta/experimental/packages")
+ ("Taiwan Pre-Releases (ftp.tw.xemacs.org)" "ftp.tw.xemacs.org"
+ "Unix/Editors/XEmacs/beta/experimental/packages")
("UK Pre-Releases (uk.xemacs.org)" "ftp.uk.xemacs.org"
"sites/ftp.xemacs.org/pub/xemacs/beta/experimental/packages")
- ("US Pre-Releases (ibiblio.org)" "ibiblio.org"
- "pub/packages/editors/xemacs/beta/experimental/packages")
+ ("US Pre-Releases (ibiblio.org)" "mirrors.ibiblio.org"
+ "pub/mirrors/xemacs/beta/experimental/packages")
("US Pre-Releases (stealth.net)" "ftp.stealth.net"
"pub/mirrors/ftp.xemacs.org/pub/xemacs/beta/experimental/packages")
("US Pre-Releases (unc.edu)" "metalab.unc.edu"
1.10.2.2 +3 -267 XEmacs/xemacs/lisp/replace.el
Index: replace.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/replace.el,v
retrieving revision 1.10.2.1
retrieving revision 1.10.2.2
diff -u -p -r1.10.2.1 -r1.10.2.2
--- replace.el 2005/03/15 05:20:54 1.10.2.1
+++ replace.el 2005/11/06 16:13:58 1.10.2.2
@@ -19,8 +19,8 @@
;; 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.
+;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Synched up with: FSF 19.34 [Partially].
@@ -455,271 +455,7 @@ kill ring as one block of text."
(message "%d occurrences" count)))))
-(defvar occur-mode-map ())
-(if occur-mode-map
- ()
- (setq occur-mode-map (make-sparse-keymap))
- (set-keymap-name occur-mode-map 'occur-mode-map) ; XEmacs
- (define-key occur-mode-map 'button2 'occur-mode-mouse-goto) ; XEmacs
- (define-key occur-mode-map "\C-c\C-c" 'occur-mode-goto-occurrence)
- (define-key occur-mode-map "\C-m" 'occur-mode-goto-occurrence))
-
-(defvar occur-buffer nil)
-(defvar occur-nlines nil)
-(defvar occur-pos-list nil)
-
-(defun occur-mode ()
- "Major mode for output from \\[occur].
-\\<occur-mode-map>Move point to one of the items in this buffer, then use
-\\[occur-mode-goto-occurrence] to go to the occurrence that the item refers to.
-Alternatively, click \\[occur-mode-mouse-goto] on an item to go to it.
-
-\\{occur-mode-map}"
- (kill-all-local-variables)
- (use-local-map occur-mode-map)
- (setq major-mode 'occur-mode)
- (setq mode-name (gettext "Occur")) ; XEmacs
- (make-local-variable 'occur-buffer)
- (make-local-variable 'occur-nlines)
- (make-local-variable 'occur-pos-list)
- (require 'mode-motion) ; XEmacs
- (setq mode-motion-hook 'mode-motion-highlight-line) ; XEmacs
- (run-hooks 'occur-mode-hook))
-
-;; FSF Version of next function:
-; (let (buffer pos)
-; (save-excursion
-; (set-buffer (window-buffer (posn-window (event-end event))))
-; (save-excursion
-; (goto-char (posn-point (event-end event)))
-; (setq pos (occur-mode-find-occurrence))
-; (setq buffer occur-buffer)))
-; (pop-to-buffer buffer)
-; (goto-char (marker-position pos))))
-
-(defun occur-mode-mouse-goto (event)
- "Go to the occurrence highlighted by mouse.
-This function should be bound to a mouse key in the `*Occur*' buffer."
- (interactive "e")
- (let ((window-save (selected-window))
- (frame-save (selected-frame)))
- ;; preserve the window/frame setup
- (unwind-protect
- (progn
- (mouse-set-point event)
- (occur-mode-goto-occurrence))
- (select-frame frame-save)
- (select-window window-save))))
-
-;; Called occur-mode-find-occurrence in FSF
-(defun occur-mode-goto-occurrence ()
- "Go to the occurrence the current line describes."
- (interactive)
- (if (or (null occur-buffer)
- (null (buffer-name occur-buffer)))
- (progn
- (setq occur-buffer nil
- occur-pos-list nil)
- (error "Buffer in which occurrences were found is deleted")))
- (let* ((line-count
- (count-lines (point-min)
- (save-excursion
- (beginning-of-line)
- (point))))
- (occur-number (save-excursion
- (beginning-of-line)
- (/ (1- line-count)
- (cond ((< occur-nlines 0)
- (- 2 occur-nlines))
- ((> occur-nlines 0)
- (+ 2 (* 2 occur-nlines)))
- (t 1)))))
- (pos (nth occur-number occur-pos-list))
- ;; removed t arg from Bob Weiner, 10/6/95
- (window (get-buffer-window occur-buffer))
- (occur-source-buffer occur-buffer))
- (if (< line-count 1)
- (error "No occurrence on this line"))
- (or pos
- (error "No occurrence on this line"))
- ;; XEmacs: don't raise window unless it isn't visible
- ;; allow for the possibility that the occur buffer is on another frame
- (or (and window
- (window-live-p window)
- (frame-visible-p (window-frame window))
- (set-buffer occur-source-buffer))
- (and (pop-to-buffer occur-source-buffer)
- (setq window (get-buffer-window occur-source-buffer))))
- (goto-char pos)
- (set-window-point window pos)))
-
-
-(defvar list-matching-lines-default-context-lines 0
- "*Default number of context lines to include around a `list-matching-lines'
-match. A negative number means to include that many lines before the match.
-A positive number means to include that many lines both before and after.")
-
-;; XEmacs addition
-;;; Damn you Jamie, this is utter trash.
-(defvar list-matching-lines-whole-buffer t
- "If t, occur operates on whole buffer, otherwise occur starts from point.
-default is t.")
-
-(define-function 'occur 'list-matching-lines)
-(defun list-matching-lines (regexp &optional nlines)
- "Show all lines in the current buffer containing a match for REGEXP.
-
-If a match spreads across multiple lines, all those lines are shown.
-
-If variable `list-matching-lines-whole-buffer' is non-nil, the entire
-buffer is searched, otherwise search begins at point.
-
-Each line is displayed with NLINES lines before and after, or -NLINES
-before if NLINES is negative.
-NLINES defaults to `list-matching-lines-default-context-lines'.
-Interactively it is the prefix arg.
-
-The lines are shown in a buffer named `*Occur*'.
-It serves as a menu to find any of the occurrences in this buffer.
-\\[describe-mode] in that buffer will explain how."
- (interactive
- ;; XEmacs change
- (list (let* ((default (or (symbol-near-point)
- (and regexp-history
- (car regexp-history))))
- (minibuffer-history-minimum-string-length 0)
- (input
- (if default
- ;; rewritten for I18N3 snarfing
- (read-from-minibuffer
- (format "List lines matching regexp (default `%s'): "
- default) nil nil nil 'regexp-history nil
- default)
- (read-from-minibuffer
- "List lines matching regexp: "
- nil nil nil
- 'regexp-history))))
- (if (and (equal input "") default)
- (progn
- (setq input default)
- (setcar regexp-history default)))
- ;; clear extra entries
- (setcdr regexp-history (delete (car regexp-history)
- (cdr regexp-history)))
- input)
- current-prefix-arg))
- (if (equal regexp "")
- (error "Must pass non-empty regexp to `list-matching-lines'"))
- (setq nlines (if nlines (prefix-numeric-value nlines)
- list-matching-lines-default-context-lines))
- (let ((first t)
- (dir default-directory)
- (buffer (current-buffer))
- (linenum 1)
- (prevpos (point-min))
- ;; The rest of this function is very different from FSF.
- ;; Presumably that's due to Jamie's misfeature
- (final-context-start (make-marker)))
- (if (not list-matching-lines-whole-buffer)
- (save-excursion
- (beginning-of-line)
- (setq linenum (1+ (count-lines (point-min) (point))))
- (setq prevpos (point))))
- (with-output-to-temp-buffer "*Occur*"
- (save-excursion
- (set-buffer standard-output)
- (setq default-directory dir)
- ;; We will insert the number of lines, and "lines", later.
- ;; #### Needs fixing for I18N3
- (let ((print-escape-newlines t))
- (insert (format " matching %s in buffer %s.\n"
- regexp (buffer-name buffer))))
- (occur-mode)
- (setq occur-buffer buffer)
- (setq occur-nlines nlines)
- (setq occur-pos-list ()))
- (if (eq buffer standard-output)
- (goto-char (point-max)))
- (with-interactive-search-caps-disable-folding regexp t
- (save-excursion
- (if list-matching-lines-whole-buffer
- (beginning-of-buffer))
- (message "Searching for %s ..." regexp)
- ;; Find next match, but give up if prev match was at end of buffer.
- (while (and (not (= prevpos (point-max)))
- (re-search-forward regexp nil t))
- (goto-char (match-beginning 0))
- (beginning-of-line)
- (save-match-data
- (setq linenum (+ linenum (count-lines prevpos (point)))))
- (setq prevpos (point))
- (goto-char (match-end 0))
- (let* ((start (save-excursion
- (goto-char (match-beginning 0))
- (forward-line (if (< nlines 0) nlines (- nlines)))
- (point)))
- (end (save-excursion
- (goto-char (match-end 0))
- (if (> nlines 0)
- (forward-line (1+ nlines))
- (forward-line 1))
- (point)))
- (tag (format "%5d" linenum))
- (empty (make-string (length tag) ?\ ))
- tem)
- (save-excursion
- (setq tem (make-marker))
- (set-marker tem (point))
- (set-buffer standard-output)
- (setq occur-pos-list (cons tem occur-pos-list))
- (or first (zerop nlines)
- (insert "--------\n"))
- (setq first nil)
- (insert-buffer-substring buffer start end)
- (set-marker final-context-start
- (- (point) (- end (match-end 0))))
- (backward-char (- end start))
- (setq tem (if (< nlines 0) (- nlines) nlines))
- (while (> tem 0)
- (insert empty ?:)
- (forward-line 1)
- (setq tem (1- tem)))
- (let ((this-linenum linenum))
- (while (< (point) final-context-start)
- (if (null tag)
- (setq tag (format "%5d" this-linenum)))
- (insert tag ?:)
- ;; FSFmacs --
- ;; we handle this using mode-motion-highlight-line, above.
- ;; (put-text-property (save-excursion
- ;; (beginning-of-line)
- ;; (point))
- ;; (save-excursion
- ;; (end-of-line)
- ;; (point))
- ;; 'mouse-face 'highlight)
- (forward-line 1)
- (setq tag nil)
- (setq this-linenum (1+ this-linenum)))
- (while (<= (point) final-context-start)
- (insert empty ?:)
- (forward-line 1)
- (setq this-linenum (1+ this-linenum))))
- (while (< tem nlines)
- (insert empty ?:)
- (forward-line 1)
- (setq tem (1+ tem)))
- (goto-char (point-max)))
- (forward-line 1)))
- (set-buffer standard-output)
- ;; Put positions in increasing order to go with buffer.
- (setq occur-pos-list (nreverse occur-pos-list))
- (goto-char (point-min))
- (if (= (length occur-pos-list) 1)
- (insert "1 line")
- (insert (format "%d lines" (length occur-pos-list))))
- (if (interactive-p)
- (message "%d matching lines." (length occur-pos-list))))))))
+;;; occur code moved to occur.el
;; It would be nice to use \\[...], but there is no reasonable way
;; to make that display both SPC and Y.
1.47.2.3 +11 -7 XEmacs/xemacs/lisp/simple.el
Index: simple.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/simple.el,v
retrieving revision 1.47.2.2
retrieving revision 1.47.2.3
diff -u -p -r1.47.2.2 -r1.47.2.3
--- simple.el 2005/07/13 04:44:42 1.47.2.2
+++ simple.el 2005/11/06 16:13:59 1.47.2.3
@@ -21,12 +21,12 @@
;; 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.
+;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Synched up with: FSF 19.34 [But not very closely].
-;;; Occasional synching to FSF 21.2, as marked. Comment stuff also
-;;; synched, and in newcomment.el.
+;;; Occasional synching to FSF 21.2 and FSF 22.0, as marked. Comment stuff
+;;; also synched, and in newcomment.el.
;;; Commentary:
@@ -746,6 +746,10 @@ be given to `goto-line' to get back to t
(line-number nil respect-narrowing))
(1+ (count-lines (if respect-narrowing (point-min) 1) (point-at-bol)))))
+;; FSF 22.0.50.1 (CVS) version of above.
+(defun line-number-at-pos (&optional pos)
+ (line-number pos t))
+
(defun count-lines (start end &optional ignore-invisible-lines-flag)
"Return number of lines between START and END.
This is usually the number of newlines between them,
@@ -3417,7 +3421,8 @@ The properties used on SYMBOL are `compo
(defun xemacs-default-composefunc (&rest args)
"Warn that the default mail-reading package is heinously underfeatured;
compose a mail using it, all the same. "
- (warn "
+ (unless (noninteractive)
+ (warn "
Defaulting to the GNU Emacs-derived `sendmail.el' mail client. This facility,
while part of base XEmacs, is heinously underfeatured, and not going to get
@@ -3431,11 +3436,10 @@ To choose a package from those installed
list. Gnus and VM are full-featured and have active user communities.
To disable this warning and stick with the old behavior, you can explicitly
-initialize `mail-user-agent' to 'sendmail-user-agent . ")
+initialize `mail-user-agent' to 'sendmail-user-agent . "))
(setq mail-user-agent 'sendmail-user-agent)
(apply (get 'sendmail-user-agent 'composefunc) args))
-
(defun xemacs-default-sendfunc (&rest args)
"Set `mail-user-agent' to `sendmail-user-agent'; call the send function
associated with that package, passing it the supplied arguments. "
1.35.2.2 +16 -2 XEmacs/xemacs/lisp/subr.el
Index: subr.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/subr.el,v
retrieving revision 1.35.2.1
retrieving revision 1.35.2.2
diff -u -p -r1.35.2.1 -r1.35.2.2
--- subr.el 2005/03/15 05:20:57 1.35.2.1
+++ subr.el 2005/11/06 16:13:59 1.35.2.2
@@ -23,8 +23,8 @@
;; 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.
+;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Synched up with: FSF 19.34. Some things synched up with later versions.
@@ -1619,6 +1619,20 @@ FILE should be the name of a library, wi
(make-compatible 'eval-next-after-load "")
;; END SYNC WITH FSF 21.2
+
+;; BEGIN SYNC WITH FSF 22.0.50.1 (CVS)
+(defun delete-dups (list)
+ "Destructively remove `equal' duplicates from LIST.
+Store the result in LIST and return it. LIST must be a proper list.
+Of several `equal' occurrences of an element in LIST, the first
+one is kept."
+ (let ((tail list))
+ (while tail
+ (setcdr tail (delete (car tail) (cdr tail)))
+ (setq tail (cdr tail))))
+ list)
+
+;; END SYNC WITH FSF 22.0.50.1 (CVS)
;; (defun shell-quote-argument (argument) in process.el.
1.7.8.2 +3 -3 XEmacs/xemacs/lisp/mule/canna-leim.el
Index: canna-leim.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lisp/mule/canna-leim.el,v
retrieving revision 1.7.8.1
retrieving revision 1.7.8.2
diff -u -p -r1.7.8.1 -r1.7.8.2
--- canna-leim.el 2005/09/24 14:02:22 1.7.8.1
+++ canna-leim.el 2005/11/06 16:14:05 1.7.8.2
@@ -46,10 +46,10 @@
(defun canna-activate (&optional name)
;; XEmacs 21.5.10 and later have 3-argument require.
(unless (require 'CANNA "canna/canna_api" 'no-error)
- (error file-error
- "Neither built-in nor ELL support for the Canna API was found."))
+ (error 'file-error
+ "No Canna API support!? See M-x describe-installation & C-h v
module-load-path."))
(unless (require 'canna nil 'no-error)
- (error file-error
+ (error 'file-error
"Canna LISP support not found. Is the mule-base package missing?"))
(setq inactivate-current-input-method-function 'canna-inactivate)
(unless (featurep 'leim-canna-initialized)
1.64.2.12 +18 -0 XEmacs/xemacs/lwlib/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lwlib/ChangeLog,v
retrieving revision 1.64.2.11
retrieving revision 1.64.2.12
diff -u -p -r1.64.2.11 -r1.64.2.12
--- ChangeLog 2005/09/20 16:05:33 1.64.2.11
+++ ChangeLog 2005/11/06 16:14:06 1.64.2.12
@@ -1,3 +1,21 @@
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
+
+2005-10-25 Ben Wing <ben(a)xemacs.org>
+
+ * lwlib-internal.h (assert):
+ redo assert macros to follow lisp.h and not trigger warnings.
+
+ * lwlib.c (merge_scrollbar_values):
+ * lwlib.c (merge_widget_value_args):
+ * xlwtabs.c:
+ * xlwtabs.c (TabsInit):
+ * xlwtabs.c (TabsConstraintInitialize):
+ * xlwtabs.c (TabsSetValues):
+ * xlwtabs.c (TabsConstraintSetValues):
+ new -> new_.
+
2005-09-14 Stephen J. Turnbull <stephen(a)xemacs.org>
* XEmacs 21.5.22 "cucumber" is released.
1.4.2.1 +3 -3 XEmacs/xemacs/lwlib/lwlib-internal.h
Index: lwlib-internal.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lwlib/lwlib-internal.h,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -p -r1.4 -r1.4.2.1
--- lwlib-internal.h 2003/08/28 15:44:05 1.4
+++ lwlib-internal.h 2005/11/06 16:14:06 1.4.2.1
@@ -8,12 +8,12 @@
/* (thanks, Jamie, I feel better now -- ben) */
EXTERN_C void assert_failed (const char *, int, const char *);
# define abort() (assert_failed (__FILE__, __LINE__, "abort()"))
-# define assert(x) ((x) ? 1 : (assert_failed (__FILE__, __LINE__, #x), 0))
+# define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
#else
# ifdef DEBUG_XEMACS
-# define assert(x) ((x) ? 1 : ((void) abort (), 0))
+# define assert(x) ((x) ? (void) 0 : (void) abort ())
# else
-# define assert(x) (1)
+# define assert(x) ((void) 0)
# endif
#endif
1.19.2.1 +10 -10 XEmacs/xemacs/lwlib/lwlib.c
Index: lwlib.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lwlib/lwlib.c,v
retrieving revision 1.19
retrieving revision 1.19.2.1
diff -u -p -r1.19 -r1.19.2.1
--- lwlib.c 2004/09/20 19:19:17 1.19
+++ lwlib.c 2005/11/06 16:14:06 1.19.2.1
@@ -193,7 +193,7 @@ copy_scrollbar_values (widget_value *val
/*
* Return true if old->scrollbar_data were not equivalent
- * to new->scrollbar_data.
+ * to new_->scrollbar_data.
*/
static Boolean
merge_scrollbar_values (widget_value *old, widget_value *new_)
@@ -238,33 +238,33 @@ merge_scrollbar_values (widget_value *ol
#ifdef HAVE_X_WIDGETS
/*
* Return true if old->args was not equivalent
- * to new->args.
+ * to new_->args.
*/
static Boolean
-merge_widget_value_args (widget_value *old, widget_value *new)
+merge_widget_value_args (widget_value *old, widget_value *new_)
{
Boolean changed = False;
- if (new->args && !old->args)
+ if (new_->args && !old->args)
{
- lw_copy_widget_value_args (new, old);
+ lw_copy_widget_value_args (new_, old);
changed = True;
}
/* Generally we don't want to lose values that are already in the
widget. */
- else if (!new->args && old->args)
+ else if (!new_->args && old->args)
{
- lw_copy_widget_value_args (old, new);
+ lw_copy_widget_value_args (old, new_);
changed = True;
}
- else if (new->args && old->args && new->args !=
old->args)
+ else if (new_->args && old->args && new_->args !=
old->args)
{
/* #### Do something more sensible here than just copying the
new values (like actually merging the values). */
- lw_copy_widget_value_args (new, old);
+ lw_copy_widget_value_args (new_, old);
changed = True;
}
- else if (new->args && new->args == old->args &&
new->args->args_changed == True)
+ else if (new_->args && new_->args == old->args &&
new_->args->args_changed == True)
{
changed = True;
}
1.4.2.11 +23 -23 XEmacs/xemacs/lwlib/xlwtabs.c
Index: xlwtabs.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/lwlib/xlwtabs.c,v
retrieving revision 1.4.2.10
retrieving revision 1.4.2.11
diff -u -p -r1.4.2.10 -r1.4.2.11
--- xlwtabs.c 2005/03/09 09:30:26 1.4.2.10
+++ xlwtabs.c 2005/11/06 16:14:06 1.4.2.11
@@ -255,7 +255,7 @@ static void TabsAllocGreyGC() ;
#else
static void TabsClassInit(void) ;
-static void TabsInit( Widget req, Widget new, ArgList, Cardinal *nargs) ;
+static void TabsInit( Widget req, Widget new_, ArgList, Cardinal *nargs) ;
static void TabsConstraintInitialize(Widget, Widget, ArgList, Cardinal *) ;
static void TabsRealize(Widget, Mask *, XSetWindowAttributes *) ;
static void TabsDestroy( Widget w) ;
@@ -459,10 +459,10 @@ TabsClassInit(void)
/* ARGSUSED */
static void
-TabsInit(Widget request, Widget new, ArgList UNUSED (args),
+TabsInit(Widget request, Widget new_, ArgList UNUSED (args),
Cardinal *UNUSED (num_args))
{
- TabsWidget newTw = (TabsWidget)new;
+ TabsWidget newTw = (TabsWidget)new_;
newTw->tabs.numRows = 0 ;
newTw->tabs.realRows = 0;
@@ -501,9 +501,9 @@ TabsInit(Widget request, Widget new, Arg
{
Dimension w,h ;
PreferredSize(newTw, &w, &h, NULL,NULL) ;
- if( request->core.width == 0 ) new->core.width = w ;
- if( request->core.height == 0 ) new->core.height = h ;
- XtClass(new)->core_class.resize(new) ;
+ if( request->core.width == 0 ) new_->core.width = w ;
+ if( request->core.height == 0 ) new_->core.height = h ;
+ XtClass(new_)->core_class.resize(new_) ;
}
/* defer GC allocation, etc., until Realize() time. */
@@ -531,15 +531,15 @@ TabsInit(Widget request, Widget new, Arg
*/
/* ARGSUSED */
static void
-TabsConstraintInitialize(Widget UNUSED (request), Widget new,
+TabsConstraintInitialize(Widget UNUSED (request), Widget new_,
ArgList UNUSED (args), Cardinal *UNUSED (num_args))
{
- TabsConstraints tab = (TabsConstraints) new->core.constraints ;
+ TabsConstraints tab = (TabsConstraints) new_->core.constraints ;
tab->tabs.greyAlloc = False ; /* defer allocation of pixel */
tab->tabs.visible = False ;
- getBitmapInfo((TabsWidget)XtParent(new), tab) ;
- TabWidth(new) ;
+ getBitmapInfo((TabsWidget)XtParent(new_), tab) ;
+ TabWidth(new_) ;
}
@@ -658,11 +658,11 @@ TabsExpose(Widget w, XEvent *UNUSED (eve
/* ARGSUSED */
static Boolean
-TabsSetValues(Widget current, Widget UNUSED (request), Widget new,
+TabsSetValues(Widget current, Widget UNUSED (request), Widget new_,
ArgList UNUSED (args), Cardinal *UNUSED (num_args))
{
TabsWidget curtw = (TabsWidget) current ;
- TabsWidget tw = (TabsWidget) new ;
+ TabsWidget tw = (TabsWidget) new_ ;
Boolean needRedraw = False ;
Widget *childP ;
int i ;
@@ -705,7 +705,7 @@ TabsSetValues(Widget current, Widget UNU
/* TODO: if any color changes, need to recompute GCs and redraw */
- if (tw->core.background_pixel != curtw->core.background_pixel ||
+ if( tw->core.background_pixel != curtw->core.background_pixel ||
tw->core.background_pixmap != curtw->core.background_pixmap ||
#ifdef USE_XFT_TABS
tw->tabs.renderFont != curtw->tabs.renderFont
@@ -713,11 +713,11 @@ TabsSetValues(Widget current, Widget UNU
tw->tabs.font != curtw->tabs.font
#endif
)
- if (XtIsRealized(new))
+ if( XtIsRealized(new_) )
{
- TabsFreeGCs(tw);
- TabsAllocGCs(tw);
- needRedraw = True;
+ TabsFreeGCs(tw) ;
+ TabsAllocGCs(tw) ;
+ needRedraw = True ;
}
if( tw->core.sensitive != curtw->core.sensitive )
@@ -757,12 +757,12 @@ TabsSetValues(Widget current, Widget UNU
/* ARGSUSED */
static Boolean
-TabsConstraintSetValues(Widget current, Widget UNUSED (request), Widget new,
+TabsConstraintSetValues(Widget current, Widget UNUSED (request), Widget new_,
ArgList UNUSED (args), Cardinal *UNUSED (num_args))
{
- TabsWidget tw = (TabsWidget) XtParent(new) ;
+ TabsWidget tw = (TabsWidget) XtParent(new_) ;
TabsConstraints ctab = (TabsConstraints) current->core.constraints ;
- TabsConstraints tab = (TabsConstraints) new->core.constraints ;
+ TabsConstraints tab = (TabsConstraints) new_->core.constraints ;
/* if label changes, need to re-layout the entire widget */
@@ -775,7 +775,7 @@ TabsConstraintSetValues(Widget current,
if( tab->tabs.label != ctab->tabs.label || /* Tab size has changed. */
tab->tabs.left_bitmap != ctab->tabs.left_bitmap )
{
- TabWidth(new) ;
+ TabWidth(new_) ;
tw->tabs.needs_layout = True ;
if( tab->tabs.left_bitmap != ctab->tabs.left_bitmap )
@@ -794,7 +794,7 @@ TabsConstraintSetValues(Widget current,
* Tabs widget might.
*/
- if( XtIsRealized(new) )
+ if( XtIsRealized(new_) )
{
if( tw->tabs.needs_layout ) {
XClearWindow(XtDisplay((Widget)tw), XtWindow((Widget)tw)) ;
@@ -802,7 +802,7 @@ TabsConstraintSetValues(Widget current,
}
else if( tab->tabs.foreground != ctab->tabs.foreground )
- DrawTab(tw, new, True) ;
+ DrawTab(tw, new_, True) ;
}
return False ;
1.269.2.11 +48 -0 XEmacs/xemacs/man/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/ChangeLog,v
retrieving revision 1.269.2.10
retrieving revision 1.269.2.11
diff -u -p -r1.269.2.10 -r1.269.2.11
--- ChangeLog 2005/09/27 16:28:57 1.269.2.10
+++ ChangeLog 2005/11/06 16:14:08 1.269.2.11
@@ -1,3 +1,51 @@
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
+
+2005-10-20 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * xemacs-faq.texi (Q1.2.2):
+ * xemacs-faq.texi (Q2.1.1):
+ * xemacs-faq.texi (Q2.1.6):
+ * xemacs-faq.texi (Q2.2.1):
+ * xemacs-faq.texi (Q2.3.6):
+ * xemacs-faq.texi (Q2.4.3):
+ * xemacs-faq.texi (Q2.4.4):
+ * xemacs-faq.texi (Q2.4.7):
+ * xemacs-faq.texi (Q5.3.3):
+ * xemacs-faq.texi (Q6.0.8):
+ * xemacs-faq.texi (Q7.2.1):
+ Add 21.5 specific examples of configure options in addition to the
+ existing 21.4 ones.
+
+2005-10-15 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * internals/internals.texi: "API's" -> "APIs". This fixes
+ problems generating dvi and pdf versions.
+ * internals/internals.texi (The configure Script):
+ Describe the use of XE_MERGED_ARG.
+
+2005-10-13 Ben Wing <ben(a)xemacs.org>
+
+ * xemacs-faq.texi (Top):
+ * xemacs-faq.texi (External Subsystems):
+ * xemacs-faq.texi (Q5.4.4):
+ * xemacs-faq.texi (Q5.4.5):
+ * xemacs-faq.texi (Q5.4.6):
+ Add question about need to run `rebaseall' under Cygwin.
+
+2005-10-04 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * emodules.texi (Distribution with XEmacs): New node describing
+ organization of module-related code in top-level configure.ac and
+ src/Makefile.in.in.
+
+2005-09-27 Adrian Aichner <adrian(a)xemacs.org>
+
+ * lispref/compile.texi (Compilation Options): Lowercase SYMBOL
+ argument in `byte-compile-print-gensym' documentation, as
+ suggested by Stephen.
+
2005-09-27 Adrian Aichner <adrian(a)xemacs.org>
* lispref/packaging.texi: Get file to compile with teinfmt.el.
1.6.6.1 +51 -2 XEmacs/xemacs/man/emodules.texi
Index: emodules.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/emodules.texi,v
retrieving revision 1.6
retrieving revision 1.6.6.1
diff -u -p -r1.6 -r1.6.6.1
--- emodules.texi 2002/06/24 22:00:17 1.6
+++ emodules.texi 2005/11/06 16:14:08 1.6.6.1
@@ -124,6 +124,7 @@ module support documentation.
* Introduction:: Introducing Emacs Modules
* Anatomy of a Module:: Basic module layout and technology
* Using ellcc:: How to use the module compiler
+* Distribution with XEmacs:: Adding your module to the distribution
* Defining Functions:: Creating new Lisp primitives
* Defining Variables:: Creating new Lisp variables
* Index:: Concept Index
@@ -497,7 +498,7 @@ shared library containing those symbols,
that library. Otherwise, interactions between modules must take place
via Lisp function calls and Lisp variables accesses.
-@node Using ellcc, Defining Functions, Anatomy of a Module, Top
+@node Using ellcc, Distribution with XEmacs, Anatomy of a Module, Top
@chapter Using @code{ellcc}
@cindex @code{ellcc}
@cindex module compiler
@@ -822,7 +823,55 @@ Sets the name of the @file{make-docfile}
Used during the compile phase of @value{emacs} itself.
@end table
-@node Defining Functions, Defining Variables, Using ellcc, Top
+@node Distribution with XEmacs, Defining Functions, Using ellcc, Top
+@chapter Adding Modules to the XEmacs Distribution
+@cindex XEmacs integration
+@cindex integration, XEmacs
+@cindex modules and configure.ac
+@cindex configure.ac, modules and
+@cindex modules and Makefiles
+@cindex Makefiles, modules and
+
+#### This section needs to be filled out.
+
+@strong{Warning: The procedure described in the section is subject to
+change, as it is very stylized and thus a good candidate for further
+automation.}
+
+Modules distributed with XEmacs are placed in the @file{modules}
+subdirectory of the root of the source tree. Each module's code is
+placed in a separate subdirectory. The build infrastructure for a
+module consists of a @file{Makefile.in.in}, a @file{configure.ac}, and
+@file{install-sh}. @file{install-sh} is a constant, and may simply be
+copied from an existing module.
+
+Most of the job of building a module is encapsulated in
+(a)file{modules/common/Makefile.common} and in @file{ellcc}. The module's
+(a)file{Makefile.in.in} normally needs only to define module name and
+version information, and include @file{modules/common/Makefile.common}.
+The @file{configure.ac} is very module-specific, and little can be said
+about its contents. However, since no logic that depends on XEmacs
+itself or other modules needs to be present, it is easier to write and
+maintain than if it were contained in the XEmacs distribution's
+(a)file{configure.ac}.
+
+Modules can usually be trivially built in to the XEmacs binary. To make
+this work, you need to duplicate the detection logic for any resources
+the module requires in the top-level @file{configure.ac}. Since module
+objects may be linked into modules or into @file{xemacs}, instead of
+adding library path and library information directly to some
+@file{@var{subsystem}_libs} variable, you should add them to a
+@file{@var{module}_libs} variable, which in turn must be added to
+@code{ld_libs_module} in the section ``Compute SUBST-itutable variables.''
+
+Furthermore, in @file{src/Makefile.in.in} you add rules to build the
+object without the module wrapper, and conditionalize these and the
+addition of the object to @code{objs} on @code{HAVE_SHLIB}. The right
+way to do this is somewhat indirect. Study the integration of LDAP and
+PostgreSQL for the details.
+
+
+@node Defining Functions, Defining Variables, Distribution with XEmacs, Top
@chapter Defining Functions
@cindex defining functions
1.78.2.3 +5809 -4748XEmacs/xemacs/man/xemacs-faq.texi
Index: xemacs-faq.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/xemacs-faq.texi,v
retrieving revision 1.78.2.2
retrieving revision 1.78.2.3
diff -u -p -r1.78.2.2 -r1.78.2.3
--- xemacs-faq.texi 2005/07/13 04:45:12 1.78.2.2
+++ xemacs-faq.texi 2005/11/06 16:14:09 1.78.2.3
@@ -7,7 +7,7 @@
@finalout
@titlepage
@title XEmacs FAQ
-@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2005/07/13
04:45:12 $
+@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2005/11/06
16:14:09 $
@sp 1
@author Ben Wing <ben@(a)xemacs.org>
@author Tony Rossini <rossini@(a)u.washington.edu>
@@ -55,12 +55,7 @@ magic to coerce them into the right form
Then,
-1. Use the Lisp line below to get the spacing correct for the Q#.#.#
- menu entries.
-
-(set (make-local-variable 'texinfo-column-for-description) 14)
-
-2. C-u C-c C-u m (C-u M-x texinfo-master-menu) will update the menus
+6. C-u C-c C-u m (C-u M-x texinfo-master-menu) will update the menus
and nodes. However, it appears that even though it tries to
preserve the existing menu structure as much as possible, it
doesn't do a perfect job. It messes up in at least two ways: The
@@ -69,20 +64,26 @@ Then,
detailmenu and the individual chapter menus. In addition,
sometimes random things get screwed up in individual parts of the
menus. Therefore:
+
+ 1. Use the Lisp line below to get the spacing correct for the Q#.#.#
+ menu entries.
+
+(set (make-local-variable 'texinfo-column-for-description) 14)
- 1. Copy the whole detailmenu beforehand.
- 2. Run C-u C-C C-u m to fix up the nodes.
- 3. Run `fix-main-menu' and `fix-omitted-menu-lines'.
- 4. Check the new detailmenu carefully to see if anything is screwed up
+ 2. Copy the whole detailmenu beforehand.
+ 3. Run C-u C-c C-u m to fix up the nodes.
+ 4. Run `fix-main-menu' and `fix-omitted-menu-lines'.
+ 5. Check the new detailmenu carefully to see if anything is screwed up
compared to the old detailmenu you copied.
- 5. If so, paste back the appropriate sections and fix up the corresponding
+ 6. If so, paste back the appropriate sections and fix up the corresponding
part of the chapter-specific menu.
(defun fix-main-menu ()
(interactive)
(save-restriction
(let (p q)
- (search-forward "@menu")
+ (goto-char (point-min))
+ (re-search-forward "^@menu")
(setq p (match-beginning 0))
(re-search-forward "^$")
(setq q (match-end 0))
@@ -94,22 +95,22 @@ Then,
(defun fix-omitted-menu-lines ()
(interactive)
(save-excursion
- (loop for x from 1 to 7 do
+ (loop for x from 1 to 10 do
(goto-char (point-min))
(re-search-forward (format "@unnumberedsec \\(%d.0: .*\\)" x))
(let ((line (match-string 1)))
- (search-backward "@menu")
+ (re-search-backward "^@menu")
(forward-line 1)
- (unless (looking-at "[0-9].0:")
+ (unless (looking-at "[0-9]+.0:")
(insert line)
(insert "\n"))
(goto-char (point-min))
- (search-forward "@menu")
+ (re-search-forward "^@menu")
(search-forward (format "Q%d.0.1:" x))
(forward-line -1)
- (unless (looking-at "[0-9].0:")
- (insert line)
- (insert "\n"))))))
+ (unless (looking-at "[0-9]+.0:")
+ (insert "\n")
+ (insert line))))))
*****************************************
***** Other work *****
@@ -180,10 +181,12 @@ library directory>/info/}. For example i
@menu
* Introduction:: Introduction, Policy, Credits.
* Installation:: Installation and Troubleshooting.
-* Display Subsystems:: Basic Display-Related Subsystems.
+* Editing:: Editing Functions.
+* Display:: Display Functions.
* External Subsystems:: Interfacing with the OS and External Devices.
* Internet:: Connecting to the Internet.
* Advanced:: Advanced Customization Using XEmacs Lisp.
+* Other Packages:: Other External Packages.
* Current Events:: What the Future Holds.
* Legacy Versions:: New information about old XEmacsen.
@@ -192,335 +195,374 @@ library directory>/info/}. For example i
1 Introduction, Policy, Credits
-1.0: Introduction
+1.0: What is XEmacs?
* Q1.0.1:: What is XEmacs?
* Q1.0.2:: What is the current version of XEmacs?
-* Q1.0.3:: Where can I find it?
-* Q1.0.4:: Are binaries available?
-* Q1.0.5:: How does XEmacs differ from GNU Emacs?
-* Q1.0.6:: How much does XEmacs differ?
-* Q1.0.7:: Is XEmacs "GNU"?
-* Q1.0.8:: What is the correct way to refer to XEmacs and GNU Emacs?
-* Q1.0.9:: Why haven't XEmacs and GNU Emacs merged?
-* Q1.0.10:: Where can I get help?
-* Q1.0.11:: Where are the mailing lists archived?
-* Q1.0.12:: How do you pronounce XEmacs?
-* Q1.0.13:: What does XEmacs look like?
-* Q1.0.14:: Where can I obtain a printed copy of the XEmacs User's Manual?
-
-1.1: Versions for Different Operating Systems
-* Q1.1.1:: Do I need X11 to run XEmacs?
-* Q1.1.2:: Is there a port of XEmacs to Microsoft Windows?
-* Q1.1.3:: Can I build XEmacs on MS Windows with X support? Do I need to?
-* Q1.1.4:: What are Cygwin and MinGW, and do I need them to run XEmacs?
-* Q1.1.5:: What are the differences between the various MS Windows emacsen?
-* Q1.1.6:: Is there a port of XEmacs to the Macintosh?
-* Q1.1.7:: Is there a port of XEmacs to NextStep?
-* Q1.1.8:: Is there a port of XEmacs to OS/2?
-* Q1.1.9:: How does the port cope with differences in the Windows user interface?
-
-1.2: Policies
-* Q1.2.1:: What is the FAQ editorial policy?
-* Q1.2.2:: How do I become a beta tester?
-* Q1.2.3:: How do I contribute to XEmacs itself?
-
-1.3: Credits
-* Q1.3.1:: Who wrote XEmacs?
-* Q1.3.2:: Who contributed to this version of the FAQ?
-* Q1.3.3:: Who contributed to the FAQ in the past?
-
-1.4: Internationalization
-* Q1.4.1:: What is the status of internationalization support aka MULE (including
Asian language support?
-* Q1.4.2:: How can I help with internationalization?
-* Q1.4.3:: How do I type non-ASCII characters?
-* Q1.4.4:: Can XEmacs messages come out in a different language?
-* Q1.4.5:: Please explain the various input methods in MULE/XEmacs
-* Q1.4.6:: How do I portably code for MULE/XEmacs?
-* Q1.4.7:: How about Cyrillic modes?
-* Q1.4.8:: Does XEmacs support Unicode?
-* Q1.4.9:: How does XEmacs display Unicode?
-
-1.5: Getting Started
-* Q1.5.1:: What is an @file{init.el} or @file{.emacs} and is there a sample one?
-* Q1.5.2:: Where do I put my @file{init.el} file?
-* Q1.5.3:: Can I use the same @file{init.el} with the other Emacs?
-* Q1.5.4:: Any good XEmacs tutorials around?
-* Q1.5.5:: May I see an example of a useful XEmacs Lisp function?
-* Q1.5.6:: And how do I bind it to a key?
-* Q1.5.7:: What's the difference between a macro and a function?
-* Q1.5.8:: What is @code{Custom}?
+* Q1.0.3:: How do you pronounce XEmacs?
+* Q1.0.4:: What does XEmacs look like?
+* Q1.0.5:: Who wrote XEmacs?
+* Q1.0.6:: Who wrote the FAQ?
+
+1.1: Getting XEmacs
+* Q1.1.1:: Where can I find XEmacs?
+* Q1.1.2:: Are binaries available?
+* Q1.1.3:: How do I get the bleeding-edge sources?
+* Q1.1.4:: Where can I obtain a printed copy of the XEmacs User's Manual?
+
+1.2: Versions for Different Operating Systems
+* Q1.2.1:: Do I need X11 to run XEmacs?
+* Q1.2.2:: What versions of Unix does XEmacs run on?
+* Q1.2.3:: Is there a port of XEmacs to Microsoft Windows?
+* Q1.2.4:: Can I build XEmacs on MS Windows with X support? Do I need to?
+* Q1.2.5:: What are Cygwin and MinGW, and do I need them to run XEmacs?
+* Q1.2.6:: What are the differences between the various MS Windows emacsen?
+* Q1.2.7:: How does the port cope with differences in the Windows user interface?
+* Q1.2.8:: Is there a port of XEmacs to the Macintosh?
+* Q1.2.9:: Is there a port of XEmacs to MS-DOS?
+* Q1.2.10:: Is there a port of XEmacs to OS/2?
+* Q1.2.11:: Is there a port of XEmacs to NextStep?
+* Q1.2.12:: Is there a port of XEmacs to VMS?
+
+1.3: Getting Started
+* Q1.3.1:: What is an @file{init.el} or @file{.emacs} and is there a sample one?
+* Q1.3.2:: Where do I put my @file{init.el} file?
+* Q1.3.3:: Can I use the same @file{init.el} with the other Emacs?
+* Q1.3.4:: Any good XEmacs tutorials around?
+* Q1.3.5:: May I see an example of a useful XEmacs Lisp function?
+* Q1.3.6:: And how do I bind it to a key?
+* Q1.3.7:: What's the difference between a macro and a function?
+* Q1.3.8:: What is @code{Custom}?
+
+1.4: Getting Help
+* Q1.4.1:: Where can I get help?
+* Q1.4.2:: Which mailing lists are there?
+* Q1.4.3:: Where are the mailing lists archived?
+* Q1.4.4:: How can I get two instances of info?
+* Q1.4.5:: How do I add new Info directories?
+
+1.5: Contributing to XEmacs
+* Q1.5.1:: How do I submit changes to the FAQ?
+* Q1.5.2:: How do I become a beta tester?
+* Q1.5.3:: How do I contribute to XEmacs itself?
+* Q1.5.4:: How do I get started developing XEmacs?
+* Q1.5.5:: What's the basic layout of the code?
+
+1.6: Politics (XEmacs vs. GNU Emacs)
+* Q1.6.1:: What is GNU Emacs?
+* Q1.6.2:: How does XEmacs differ from GNU Emacs?
+* Q1.6.3:: How much does XEmacs differ?
+* Q1.6.4:: Is XEmacs "GNU"?
+* Q1.6.5:: What is the correct way to refer to XEmacs and GNU Emacs?
+* Q1.6.6:: Why haven't XEmacs and GNU Emacs merged?
+
+1.7: External Packages
+* Q1.7.1:: What is the package system?
+* Q1.7.2:: Which external packages are there?
+* Q1.7.3:: Do I need to have the packages to run XEmacs?
+* Q1.7.4:: Is there a way to find which package has particular functionality?
+
+1.8: Internationalization
+* Q1.8.1:: What is the status of internationalization support aka MULE (including
Asian language support)?
+* Q1.8.2:: How can I help with internationalization?
+* Q1.8.3:: How do I type non-ASCII characters?
+* Q1.8.4:: Can XEmacs messages come out in a different language?
+* Q1.8.5:: Please explain the various input methods in MULE/XEmacs
+* Q1.8.6:: How do I portably code for MULE/XEmacs?
+* Q1.8.7:: How about Cyrillic modes?
+* Q1.8.8:: Does XEmacs support Unicode?
+* Q1.8.9:: How does XEmacs display Unicode?
2 Installation and Troubleshooting
-2.0: Installation (General), Packages
-* Q2.0.1:: How do I install the packages?
-* Q2.0.2:: I don't need no steenkin' packages. Do I?
-* Q2.0.3:: Where do I find external libraries?
-* Q2.0.4:: How do I specify the paths that XEmacs uses for finding files?
-* Q2.0.5:: Running XEmacs without installing
-* Q2.0.6:: XEmacs is too big
-* Q2.0.7:: EFS fails with "500 AUTH not understood" (NEW)
-
-2.1: Unix/Mac OS Installation (Also Relevant to Cygwin, MinGW)
-* Q2.1.1:: Libraries in non-standard locations
-* Q2.1.2:: Why can't I strip XEmacs?
-* Q2.1.3:: Compiling XEmacs with Netaudio.
-* Q2.1.4:: Problems with Linux and ncurses.
-
-2.2: Windows Installation (Windows, Cygwin, MinGW)
-* Q2.2.1:: What exactly are all the different ways to build XEmacs under Windows?
-* Q2.2.2:: What compiler/libraries do I need to compile XEmacs?
-* Q2.2.3:: How do I compile the native port?
-* Q2.2.4:: What do I need for Cygwin?
-* Q2.2.5:: How do I compile under Cygwin?
-* Q2.2.6:: How do I compile using MinGW (aka @samp{the -mno-cygwin flag to gcc})?
-* Q2.2.7:: How do I compile with X support?
-* Q2.2.8:: Cygwin XEmacs won't start -- cygXpm-noX4.dll was not found (NEW)
-
-2.3: General Troubleshooting
-* Q2.3.1:: Help! XEmacs just crashed on me!
-* Q2.3.2:: XEmacs crashes and I compiled it myself.
-* Q2.3.3:: How to debug an XEmacs problem with a debugger
-* Q2.3.4:: I get a cryptic error message when trying to do something.
-* Q2.3.5:: XEmacs hangs when I try to do something.
-* Q2.3.6:: I get an error message when XEmacs is running in batch mode.
-* Q2.3.7:: The keyboard or mouse is not working properly, or I have some other
event-related problem.
-* Q2.3.8:: @kbd{C-g} doesn't work for me. Is it broken?
-* Q2.3.9:: How do I debug process-related problems?
-* Q2.3.10:: XEmacs is outputting lots of X errors.
-* Q2.3.11:: After upgrading, XEmacs won't do `foo' any more!
-
-2.4: Startup-Related Problems
-* Q2.4.1:: XEmacs cannot connect to my X Terminal!
-* Q2.4.2:: XEmacs won't start on Windows.
-* Q2.4.3:: XEmacs won't start without network.
-* Q2.4.4:: Startup warnings about deducing proper fonts?
-* Q2.4.5:: Warnings from incorrect key modifiers.
-* Q2.4.6:: XEmacs 21.1 on Windows used to spawn an ugly console window on every
startup. Has that been fixed?
+2.0: Installation (General)
+* Q2.0.1:: How do I build and install XEmacs?
+* Q2.0.2:: Where do I find external libraries?
+* Q2.0.3:: How do I specify the paths that XEmacs uses for finding files?
+* Q2.0.4:: Running XEmacs without installing
+* Q2.0.5:: XEmacs is too big
+
+2.1: Package Installation
+* Q2.1.1:: How do I install the packages?
+* Q2.1.2:: Can I install the packages individually?
+* Q2.1.3:: Can I install the packages automatically?
+* Q2.1.4:: Can I upgrade or remove packages?
+* Q2.1.5:: Which packages to install?
+* Q2.1.6:: Can you describe the package location process in more detail?
+* Q2.1.7:: EFS fails with "500 AUTH not understood"
+
+2.2: Unix/Mac OS X Installation (Also Relevant to Cygwin, MinGW)
+* Q2.2.1:: Libraries in non-standard locations
+* Q2.2.2:: Why can't I strip XEmacs?
+
+2.3: Windows Installation (Windows, Cygwin, MinGW)
+* Q2.3.1:: What exactly are all the different ways to build XEmacs under Windows?
+* Q2.3.2:: What compiler/libraries do I need to compile XEmacs?
+* Q2.3.3:: How do I compile the native port?
+* Q2.3.4:: What do I need for Cygwin?
+* Q2.3.5:: How do I compile under Cygwin?
+* Q2.3.6:: How do I compile using MinGW (aka @samp{the -mno-cygwin flag to gcc})?
+* Q2.3.7:: How do I compile with X support?
+* Q2.3.8:: Cygwin XEmacs won't start -- cygXpm-noX4.dll was not found (NEW)
+
+2.4: General Troubleshooting
+* Q2.4.1:: How do I deal with bugs or with problems building, installing, or
running?
+* Q2.4.2:: Help! XEmacs just crashed on me!
+* Q2.4.3:: XEmacs crashes and I compiled it myself.
+* Q2.4.4:: How to debug an XEmacs problem with a debugger
+* Q2.4.5:: I get a cryptic error message when trying to do something.
+* Q2.4.6:: XEmacs hangs when I try to do something.
+* Q2.4.7:: I get an error message when XEmacs is running in batch mode.
+* Q2.4.8:: The keyboard or mouse is not working properly, or I have some other
event-related problem.
+* Q2.4.9:: @kbd{C-g} doesn't work for me. Is it broken?
+* Q2.4.10:: How do I debug process-related problems?
+* Q2.4.11:: XEmacs is outputting lots of X errors.
+* Q2.4.12:: After upgrading, XEmacs won't do `foo' any more!
+
+2.5: Startup-Related Problems
+* Q2.5.1:: XEmacs cannot connect to my X Terminal!
+* Q2.5.2:: Startup problems related to paths or package locations.
+* Q2.5.3:: XEmacs won't start without network.
+* Q2.5.4:: Startup warnings about deducing proper fonts?
+* Q2.5.5:: Warnings from incorrect key modifiers.
+* Q2.5.6:: XEmacs 21.1 on Windows used to spawn an ugly console window on every
startup. Has that been fixed?
-3 Basic Display-Related Subsystems
+3 Editing Functions
3.0: The Keyboard
-* Q3.0.1:: How can I bind complex functions (or macros) to keys?
-* Q3.0.2:: How do I bind C-. and C-; to scroll one line up and down?
-* Q3.0.3:: Globally binding @kbd{Delete}?
-* Q3.0.4:: How to map @kbd{Help} key alone on Sun type4 keyboard?
-* Q3.0.5:: How can you type in special characters in XEmacs?
-* Q3.0.6:: Can I turn on @dfn{sticky} modifier keys?
-* Q3.0.7:: How do I map the arrow keys?
-* Q3.0.8:: HP Alt key as Meta.
-* Q3.0.9:: Why does edt emulation not work?
-* Q3.0.10:: How can I emulate VI and use it as my default mode?
+* Q3.0.1:: How can I customize the keyboard?
+* Q3.0.2:: How can I bind complex functions (or macros) to keys?
+* Q3.0.3:: How do I bind C-. and C-; to scroll one line up and down?
+* Q3.0.4:: Globally binding @kbd{Delete}?
+* Q3.0.5:: How to map @kbd{Help} key alone on Sun type4 keyboard?
+* Q3.0.6:: How can you type in special characters in XEmacs?
+* Q3.0.7:: Can I turn on @dfn{sticky} modifier keys?
+* Q3.0.8:: How do I map the arrow keys?
+* Q3.0.9:: HP Alt key as Meta.
+* Q3.0.10:: Why does edt emulation not work?
+* Q3.0.11:: How can I emulate VI and use it as my default mode?
3.1: The Mouse
* Q3.1.1:: How can I turn off Mouse pasting?
* Q3.1.2:: How do I set control/meta/etc modifiers on mouse buttons?
* Q3.1.3:: Clicking the left button does not do anything in buffer list.
* Q3.1.4:: How can I get a list of buffers when I hit mouse button 3?
-* Q3.1.5:: How I can set XEmacs up so that it pastes where the text cursor is?
-
-3.2: Textual Fonts and Colors
-* Q3.2.1:: How do I specify a font?
-* Q3.2.2:: How do I set the text, menu and modeline fonts?
-* Q3.2.3:: How can I set color options from @file{init.el}?
-* Q3.2.4:: How can I set the colors when highlighting a region?
-* Q3.2.5:: How can I limit color map usage?
-* Q3.2.6:: My tty supports color, but XEmacs doesn't use them.
-* Q3.2.7:: Can I have pixmap backgrounds in XEmacs?
-* Q3.2.8:: How do I display non-ASCII characters?
-* Q3.2.9:: Font selections in don't get saved after @code{Save Options}.
-
-3.3: The Menubar and Toolbar
-* Q3.3.1:: How do I get rid of the menu (or menubar)?
-* Q3.3.2:: Can I customize the basic menubar?
-* Q3.3.3:: How do I control how many buffers are listed in the menu @code{Buffers
List}?
-* Q3.3.4:: Resources like @code{Emacs*menubar*font} are not working?
-* Q3.3.5:: How can I bind a key to a function to toggle the toolbar?
-* Q3.3.6:: @samp{Can't instantiate image error...} in toolbar
-
-3.4: Scrollbars and Scrolling
-* Q3.4.1:: How can I disable the scrollbar?
-* Q3.4.2:: How can one use resources to change scrollbar colors?
-* Q3.4.3:: Moving the scrollbar can move the point; can I disable this?
-* Q3.4.4:: Scrolling one line at a time.
-* Q3.4.5:: How can I turn off automatic horizontal scrolling in specific modes?
-* Q3.4.6:: I find auto-show-mode disconcerting. How do I turn it off?
-
-3.5: The Modeline
-* Q3.5.1:: How can I make the modeline go away?
-* Q3.5.2:: How do you have XEmacs display the line number in the modeline?
-* Q3.5.3:: How do I get XEmacs to put the time of day on the modeline?
-* Q3.5.4:: How can one change the modeline color based on the mode used?
-
-3.6: 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 block cursor?
-* Q3.6.3:: Can I make the cursor blink?
-
-3.7: Text Selections
-* Q3.7.1:: How do I select a rectangular region?
-* Q3.7.2:: How can I turn off or change highlighted selections?
-* Q3.7.3:: How do I get that typing on an active region removes it?
-* Q3.7.4:: Can I turn off the highlight during isearch?
-* Q3.7.5:: How do I turn off highlighting after @kbd{C-x C-p} (mark-page)?
-* Q3.7.6:: The region disappears when I hit the end of buffer while scrolling.
-* Q3.7.7:: Why is killing so slow?
-* Q3.7.8:: Why does @kbd{M-w} take so long?
-
-3.8: Buffers, Text Editing
-* Q3.8.1:: Can I have the end of the buffer delimited in some way?
-* Q3.8.2:: How do I insert today's date into a buffer?
-* Q3.8.3:: How do I get a single minibuffer frame?
-* Q3.8.4:: How can I enable auto-indent and/or Filladapt?
-* Q3.8.5:: How can I get XEmacs to come up in text/auto-fill mode by default?
-
-3.9: Editing Source Code
-* Q3.9.1:: How can I do source code highlighting using font-lock?
-* Q3.9.2:: How do I get @samp{More} Syntax Highlighting on by default?
-* Q3.9.3:: Where do I get the latest CC Mode?
-* Q3.9.4:: I do not like cc-mode. How do I use the old c-mode?
-* Q3.9.5:: How do you make XEmacs indent CL if-clauses correctly?
-
-4 Interfacing with the Operating System and External Devices
-
-4.0: X Window System and Resources
-* Q4.0.1:: Where is a list of X resources?
-* Q4.0.2:: How can I detect a color display?
-* Q4.0.3:: How can I get the icon to just say @samp{XEmacs}?
-* Q4.0.4:: How can I have the window title area display the full path?
-* Q4.0.5:: @samp{xemacs -name junk} doesn't work?
-* Q4.0.6:: @samp{-iconic} doesn't work.
-
-4.1: Microsoft Windows
-* Q4.1.1:: Does XEmacs rename all the @samp{win32-*} symbols to @samp{w32-*}?
-* Q4.1.2:: How do I get Windows Explorer to associate a file type with XEmacs?
-
-4.2: Printing
-* Q4.2.1:: What do I need to change to make printing work?
-* Q4.2.2:: How can I print WYSIWYG a font-locked buffer?
-* Q4.2.3:: Getting @kbd{M-x lpr} to work with postscript printer.
-* Q4.2.4:: Can you print under MS Windows?
-
-4.3: Sound
-* Q4.3.1:: How do I turn off the sound?
-* Q4.3.2:: How do I get funky sounds instead of a boring beep?
-* Q4.3.3:: What's NAS, how do I get it?
-* Q4.3.4:: Sunsite sounds don't play.
-
-4.4: Running an Interior Shell, Invoking Subprocesses
-* Q4.4.1:: What is an interior shell?
-* Q4.4.2:: How do I start up a second shell buffer?
-* Q4.4.3:: Telnet from shell filters too much
-* Q4.4.4:: Strange things are happening in Shell Mode.
-* Q4.4.5:: XEmacs complains "No such file or directory, diff"
-
-4.5: Multiple Device Support
-* Q4.5.1:: How do I open a frame on another screen of my multi-headed display?
-* Q4.5.2:: Can I really connect to a running XEmacs after calling up over a modem?
How?
-* Q4.5.3:: How do I disable gnuserv from opening a new frame?
-* Q4.5.4:: How do I start gnuserv so that each subsequent XEmacs is a client?
-* Q4.5.5:: Is there a way to start a new XEmacs if there's no gnuserv running,
and otherwise use gnuclient?
-
-4.6: TeX
-* Q4.6.1:: Is there something better than LaTeX mode?
-* Q4.6.2:: What is AUCTeX? Where do you get it?
-* Q4.6.3:: Problems installing AUCTeX.
-* Q4.6.4:: How do I turn off current chapter from AUCTeX modeline?
-
-4.7: Other Unbundled Packages
-* Q4.7.1:: Is there a reason for an Emacs package not to be included in XEmacs?
-* Q4.7.2:: Are there any Emacs Lisp Spreadsheets?
-* Q4.7.3:: Is there a MatLab mode?
-
-4.8: Environments Built Around XEmacs
-* Q4.8.1:: What are SPARCworks, EOS, and WorkShop?
-* Q4.8.2:: How do I start the Sun Workshop support in XEmacs 21?
-* Q4.8.3:: What is/was Energize?
-* Q4.8.4:: What is Infodock?
-
-5 Connecting to the Internet
-
-5.0: General Mail and News
-* Q5.0.1:: What are the various packages for reading mail?
-* Q5.0.2:: How can I send mail?
-* Q5.0.3:: How do I get my outgoing mail archived?
-* Q5.0.4:: How can I read and/or compose MIME messages?
-* Q5.0.5:: How do I customize the From line?
-* Q5.0.6:: How do I get my MUA to filter mail for me?
-* Q5.0.7:: Remote mail reading with an MUA.
-* Q5.0.8:: An MUA gets an error incorporating new mail.
-* Q5.0.9:: Why isn't @file{movemail} working?
-* Q5.0.10:: How do I make my MUA display graphical smilies?
-* Q5.0.11:: How can I get those oh-so-neat X-Face lines?
-
-5.1: Reading Mail with VM
-* Q5.1.1:: How do I set up VM to retrieve mail from a remote site using POP?
-* Q5.1.2:: How can I get VM to automatically check for new mail?
-* Q5.1.3:: I have various addresses at which I receive mail. How can I tell VM to
ignore them when doing a "reply-all"?
-* Q5.1.4:: Is there a mailing list or FAQ for VM?
-* Q5.1.5:: How do I make VM stay in a single frame?
-* Q5.1.6:: Customization of VM not covered in the manual, or here.
-
-5.2: Reading Netnews and Mail with Gnus
-* Q5.2.1:: GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus, Quassia Gnus, argh!
-* Q5.2.2:: How do I make Gnus stay within a single frame?
-
-5.3: FTP Access
-* Q5.3.1:: Can I edit files on other hosts?
-* Q5.3.2:: What is EFS?
-
-5.4: Web Browsing with W3
-* Q5.4.1:: What is W3?
-* Q5.4.2:: How do I run W3 from behind a firewall?
-* Q5.4.3:: Is it true that W3 supports style sheets and tables?
-
-6 Advanced Customization Using XEmacs Lisp
-
-6.0: Online Help
-* Q6.0.1:: How can I get two instances of info?
-* Q6.0.2:: How do I add new Info directories?
-
-6.1: Emacs Lisp and @file{init.el}
-* Q6.1.1:: What version of Emacs am I running?
-* Q6.1.2:: How can I evaluate Emacs-Lisp expressions?
-* Q6.1.3:: @code{(setq tab-width 6)} behaves oddly.
-* Q6.1.4:: How can I add directories to the @code{load-path}?
-* Q6.1.5:: How to check if a lisp function is defined?
-* Q6.1.6:: Can I force the output of @code{(face-list)} to a buffer?
-
-6.2: Emacs Lisp Programming Techniques
-* Q6.2.1:: What is the difference in key sequences between XEmacs and GNU Emacs?
-* Q6.2.2:: Can I generate "fake" keyboard events?
-* Q6.2.3:: Could you explain @code{read-kbd-macro} in more detail?
-* Q6.2.4:: What is the performance hit of @code{let}?
-* Q6.2.5:: What is the recommended use of @code{setq}?
-* Q6.2.6:: What is the typical misuse of @code{setq}?
-* Q6.2.7:: I like the @code{do} form of cl, does it slow things down?
-* Q6.2.8:: I like recursion, does it slow things down?
-* Q6.2.9:: How do I put a glyph as annotation in a buffer?
-* Q6.2.10:: @code{map-extents} won't traverse all of my extents!
-* Q6.2.11:: My elisp program is horribly slow. Is there
-
-6.3: Mathematics
-* Q6.3.1:: What are bignums, ratios, and bigfloats in Lisp?
-* Q6.3.2:: XEmacs segfaults when I use very big numbers!
-* Q6.3.3:: Bignums are really slow!
-* Q6.3.4:: Equal bignums don't compare as equal! What gives?
-
-7 What the Future Holds
-
-7.0: Changes
-* Q7.0.1:: What new features will be in XEmacs soon?
-* Q7.0.2:: What's new in XEmacs 21.4?
-* Q7.0.3:: What's new in XEmacs 21.1?
-* Q7.0.4:: What's new in XEmacs 20.4?
-* Q7.0.5:: What's new in XEmacs 20.3?
-* Q7.0.6:: What's new in XEmacs 20.2?
-
-8 New information about old XEmacsen
+* Q3.1.5:: How can I set XEmacs up so that it pastes where the text cursor is?
-8.0: XEmacs 21.1
-* Q8.0.1:: Gnus 5.10 won't display smileys in XEmacs 21.1.
+3.2: Buffers, Text Editing
+* Q3.2.1:: Can I have the end of the buffer delimited in some way?
+* Q3.2.2:: How do I insert today's date into a buffer?
+* Q3.2.3:: How do I get a single minibuffer frame?
+* Q3.2.4:: How can I enable auto-indent and/or Filladapt?
+* Q3.2.5:: How can I get XEmacs to come up in text/auto-fill mode by default?
+
+3.3: Text Selections
+* Q3.3.1:: How do I select a rectangular region?
+* Q3.3.2:: How can I turn off or change highlighted selections?
+* Q3.3.3:: How do I cause typing on an active region to remove it?
+* Q3.3.4:: Can I turn off the highlight during isearch?
+* Q3.3.5:: Why is killing so slow?
+* Q3.3.6:: Why does @kbd{M-w} take so long?
+
+3.4: Editing Source Code
+* Q3.4.1:: I do not like cc-mode. How do I use the old c-mode?
+* Q3.4.2:: How do you make XEmacs indent CL if-clauses correctly?
+
+4 Display Functions
+
+4.0: Textual Fonts and Colors
+* Q4.0.1:: How do I specify a font?
+* Q4.0.2:: How do I set the text, menu and modeline fonts?
+* Q4.0.3:: How can I set color options from @file{init.el}?
+* Q4.0.4:: How can I set the colors when highlighting a region?
+* Q4.0.5:: How can I limit color map usage?
+* Q4.0.6:: My tty supports color, but XEmacs doesn't use them.
+* Q4.0.7:: Can I have pixmap backgrounds in XEmacs?
+* Q4.0.8:: How do I display non-ASCII characters?
+* Q4.0.9:: Font selections in don't get saved after @code{Save Options}.
+
+4.1: Syntax Highlighting (Font Lock)
+* Q4.1.1:: How can I do source code highlighting using font-lock?
+* Q4.1.2:: How do I get @samp{More} Syntax Highlighting on by default?
+
+4.2: The Modeline
+* Q4.2.1:: How can I make the modeline go away?
+* Q4.2.2:: How do you have XEmacs display the line number in the modeline?
+* Q4.2.3:: How do I get XEmacs to put the time of day on the modeline?
+* Q4.2.4:: How can I change the modeline color based on the mode used?
+
+4.3: The Cursor
+* Q4.3.1:: Is there a way to make the bar cursor thicker?
+* Q4.3.2:: Is there a way to get back the block cursor?
+* Q4.3.3:: Can I make the cursor blink?
+
+4.4: The Menubar
+* Q4.4.1:: How do I get rid of the menubar?
+* Q4.4.2:: How can I customize the menubar?
+* Q4.4.3:: How do I enable use of the keyboard (@kbd{Alt}) to access menu items?
+* Q4.4.4:: How do I control how many buffers are listed in the menu @code{Buffers
List}?
+* Q4.4.5:: Resources like @code{Emacs*menubar*font} are not working?
+
+4.5: The Toolbar
+* Q4.5.1:: How do I get rid of the toolbar?
+* Q4.5.2:: How can I customize the toolbar?
+* Q4.5.3:: How can I bind a key to a function to toggle the toolbar?
+* Q4.5.4:: @samp{Can't instantiate image error...} in toolbar
+
+4.6: Scrollbars and Scrolling
+* Q4.6.1:: How can I disable the scrollbar?
+* Q4.6.2:: How can I change the scrollbar width?
+* Q4.6.3:: How can I use resources to change scrollbar colors?
+* Q4.6.4:: Moving the scrollbar can move the point; can I disable this?
+* Q4.6.5:: Scrolling one line at a time.
+* Q4.6.6:: How can I turn off automatic horizontal scrolling in specific modes?
+* Q4.6.7:: I find auto-show-mode disconcerting. How do I turn it off?
+
+4.7: The Gutter Tabs, The Progress Bar, Widgets
+* Q4.7.1:: How can I disable the gutter tabs?
+* Q4.7.2:: How can I disable the progress bar?
+* Q4.7.3:: There are bugs in the gutter or widgets.
+* Q4.7.4:: How can I customize the gutter or gutter tabs?
+
+5 Interfacing with the Operating System and External Devices
+
+5.0: X Window System and Resources
+* Q5.0.1:: Where is a list of X resources?
+* Q5.0.2:: How can I detect a color display?
+* Q5.0.3:: How can I get the icon to just say @samp{XEmacs}?
+* Q5.0.4:: How can I have the window title area display the full path?
+* Q5.0.5:: @samp{xemacs -name junk} doesn't work?
+* Q5.0.6:: @samp{-iconic} doesn't work.
+
+5.1: Microsoft Windows
+* Q5.1.1:: Does XEmacs rename all the @samp{win32-*} symbols to @samp{w32-*}?
+* Q5.1.2:: How do I get Windows Explorer to associate a file type with XEmacs?
+
+5.2: Printing
+* Q5.2.1:: What do I need to change to make printing work?
+* Q5.2.2:: How can I print WYSIWYG a font-locked buffer?
+* Q5.2.3:: Getting @kbd{M-x lpr} to work with postscript printer.
+* Q5.2.4:: Can you print under MS Windows?
+
+5.3: Sound
+* Q5.3.1:: How do I turn off the sound?
+* Q5.3.2:: How do I get funky sounds instead of a boring beep?
+* Q5.3.3:: What are NAS and ESD (EsounD)?
+* Q5.3.4:: Sunsite sounds don't play.
+
+5.4: Running an Interior Shell, Invoking Subprocesses
+* Q5.4.1:: What is an interior shell?
+* Q5.4.2:: How do I start up a second shell buffer?
+* Q5.4.3:: Telnet from shell filters too much
+* Q5.4.4:: Strange things are happening in Shell Mode.
+* Q5.4.5:: XEmacs complains "No such file or directory, diff"
+* Q5.4.6:: Cygwin error "fork_copy: linked dll/bss pass 0 failed"
+
+5.5: Multiple Device Support
+* Q5.5.1:: How do I open a frame on another screen of my multi-headed display?
+* Q5.5.2:: Can I really connect to a running XEmacs after calling up over a modem?
How?
+* Q5.5.3:: How do I disable gnuserv from opening a new frame?
+* Q5.5.4:: How do I start gnuserv so that each subsequent XEmacs is a client?
+* Q5.5.5:: Is there a way to start a new XEmacs if there's no gnuserv running,
and otherwise use gnuclient?
+
+6 Connecting to the Internet
+
+6.0: General Mail and News
+* Q6.0.1:: What are the various packages for reading mail?
+* Q6.0.2:: How can I send mail?
+* Q6.0.3:: How do I get my outgoing mail archived?
+* Q6.0.4:: How can I read and/or compose MIME messages?
+* Q6.0.5:: How do I customize the From line?
+* Q6.0.6:: How do I get my MUA to filter mail for me?
+* Q6.0.7:: Remote mail reading with an MUA.
+* Q6.0.8:: An MUA gets an error incorporating new mail.
+* Q6.0.9:: Why isn't @file{movemail} working?
+* Q6.0.10:: How do I make my MUA display graphical smilies?
+* Q6.0.11:: How can I get those oh-so-neat X-Face lines?
+
+6.1: Reading Mail with VM
+* Q6.1.1:: How do I set up VM to retrieve mail from a remote site using POP?
+* Q6.1.2:: How can I get VM to automatically check for new mail?
+* Q6.1.3:: I have various addresses at which I receive mail. How can I tell VM to
ignore them when doing a "reply-all"?
+* Q6.1.4:: Is there a mailing list or FAQ for VM?
+* Q6.1.5:: How do I make VM stay in a single frame?
+* Q6.1.6:: Customization of VM not covered in the manual, or here.
+
+6.2: Reading Netnews and Mail with Gnus
+* Q6.2.1:: GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus, Quassia Gnus, argh!
+* Q6.2.2:: How do I make Gnus stay within a single frame?
+
+6.3: FTP Access
+* Q6.3.1:: Can I edit files on other hosts?
+* Q6.3.2:: What is EFS?
+
+6.4: Web Browsing with W3
+* Q6.4.1:: What is W3?
+* Q6.4.2:: How do I run W3 from behind a firewall?
+* Q6.4.3:: Is it true that W3 supports style sheets and tables?
+
+7 Advanced Customization Using XEmacs Lisp
+
+7.0: Emacs Lisp and @file{init.el}
+* Q7.0.1:: What version of Emacs am I running?
+* Q7.0.2:: How can I evaluate Emacs-Lisp expressions?
+* Q7.0.3:: @code{(setq tab-width 6)} behaves oddly.
+* Q7.0.4:: How can I add directories to the @code{load-path}?
+* Q7.0.5:: How to check if a lisp function is defined?
+* Q7.0.6:: Can I force the output of @code{(face-list)} to a buffer?
+
+7.1: Emacs Lisp Programming Techniques
+* Q7.1.1:: What is the difference in key sequences between XEmacs and GNU Emacs?
+* Q7.1.2:: Can I generate "fake" keyboard events?
+* Q7.1.3:: Could you explain @code{read-kbd-macro} in more detail?
+* Q7.1.4:: What is the performance hit of @code{let}?
+* Q7.1.5:: What is the recommended use of @code{setq}?
+* Q7.1.6:: What is the typical misuse of @code{setq}?
+* Q7.1.7:: I like the @code{do} form of cl, does it slow things down?
+* Q7.1.8:: I like recursion, does it slow things down?
+* Q7.1.9:: How do I put a glyph as annotation in a buffer?
+* Q7.1.10:: @code{map-extents} won't traverse all of my extents!
+* Q7.1.11:: My elisp program is horribly slow. Is there an easy way to find out
where it spends time?
+
+7.2: Mathematics
+* Q7.2.1:: What are bignums, ratios, and bigfloats in Lisp?
+* Q7.2.2:: XEmacs segfaults when I use very big numbers!
+* Q7.2.3:: Bignums are really slow!
+* Q7.2.4:: Equal bignums don't compare as equal! What gives?
+
+8 Other External Packages
+
+8.0: TeX
+* Q8.0.1:: Is there something better than LaTeX mode?
+* Q8.0.2:: What is AUCTeX? Where do you get it?
+* Q8.0.3:: Problems installing AUCTeX.
+* Q8.0.4:: How do I turn off current chapter from AUCTeX modeline?
+
+8.1: Other Unbundled Packages
+* Q8.1.1:: Is there a reason for an Emacs package not to be included in XEmacs?
+* Q8.1.2:: Are there any Emacs Lisp Spreadsheets?
+* Q8.1.3:: Is there a MatLab mode?
+
+8.2: Environments Built Around XEmacs
+* Q8.2.1:: What are SPARCworks, EOS, and WorkShop?
+* Q8.2.2:: How do I start the Sun Workshop support in XEmacs 21?
+* Q8.2.3:: What is/was Energize?
+* Q8.2.4:: What is Infodock?
+
+9 What the Future Holds
+
+9.0: Changes
+* Q9.0.1:: What new features will be in XEmacs soon?
+* Q9.0.2:: What's new in XEmacs 21.4?
+* Q9.0.3:: What's new in XEmacs 21.1?
+* Q9.0.4:: What's new in XEmacs 20.4?
+* Q9.0.5:: What's new in XEmacs 20.3?
+* Q9.0.6:: What's new in XEmacs 20.2?
+
+10 New information about old XEmacsen
+
+10.0: XEmacs 21.1
+* Q10.0.1:: Gnus 5.10 won't display smileys in XEmacs 21.1.
+* Q10.0.2:: XEmacs won't start on Windows in XEmacs 21.1.
@end detailmenu
@end menu
@@ -558,66 +600,85 @@ this FAQ please send email to @email{xem
Include @samp{XEmacs FAQ} on the Subject: line.
@menu
-1.0: Introduction
+1.0: What is XEmacs?
* Q1.0.1:: What is XEmacs?
* Q1.0.2:: What is the current version of XEmacs?
-* Q1.0.3:: Where can I find it?
-* Q1.0.4:: Are binaries available?
-* Q1.0.5:: How does XEmacs differ from GNU Emacs?
-* Q1.0.6:: How much does XEmacs differ?
-* Q1.0.7:: Is XEmacs "GNU"?
-* Q1.0.8:: What is the correct way to refer to XEmacs and GNU Emacs?
-* Q1.0.9:: Why haven't XEmacs and GNU Emacs merged?
-* Q1.0.10:: Where can I get help?
-* Q1.0.11:: Where are the mailing lists archived?
-* Q1.0.12:: How do you pronounce XEmacs?
-* Q1.0.13:: What does XEmacs look like?
-* Q1.0.14:: Where can I obtain a printed copy of the XEmacs User's Manual?
-
-1.1: Versions for Different Operating Systems
-* Q1.1.1:: Do I need X11 to run XEmacs?
-* Q1.1.2:: Is there a port of XEmacs to Microsoft Windows?
-* Q1.1.3:: Can I build XEmacs on MS Windows with X support? Do I need to?
-* Q1.1.4:: What are Cygwin and MinGW, and do I need them to run XEmacs?
-* Q1.1.5:: What are the differences between the various MS Windows emacsen?
-* Q1.1.6:: Is there a port of XEmacs to the Macintosh?
-* Q1.1.7:: Is there a port of XEmacs to NextStep?
-* Q1.1.8:: Is there a port of XEmacs to OS/2?
-* Q1.1.9:: How does the port cope with differences in the Windows user interface?
-
-1.2: Policies
-* Q1.2.1:: What is the FAQ editorial policy?
-* Q1.2.2:: How do I become a beta tester?
-* Q1.2.3:: How do I contribute to XEmacs itself?
-
-1.3: Credits
-* Q1.3.1:: Who wrote XEmacs?
-* Q1.3.2:: Who contributed to this version of the FAQ?
-* Q1.3.3:: Who contributed to the FAQ in the past?
-
-1.4: Internationalization
-* Q1.4.1:: What is the status of internationalization support aka MULE (including
Asian language support?
-* Q1.4.2:: How can I help with internationalization?
-* Q1.4.3:: How do I type non-ASCII characters?
-* Q1.4.4:: Can XEmacs messages come out in a different language?
-* Q1.4.5:: Please explain the various input methods in MULE/XEmacs
-* Q1.4.6:: How do I portably code for MULE/XEmacs?
-* Q1.4.7:: How about Cyrillic modes?
-* Q1.4.8:: Does XEmacs support Unicode?
-* Q1.4.9:: How does XEmacs display Unicode?
-
-1.5: Getting Started
-* Q1.5.1:: What is an @file{init.el} or @file{.emacs} and is there a sample one?
-* Q1.5.2:: Where do I put my @file{init.el} file?
-* Q1.5.3:: Can I use the same @file{init.el} with the other Emacs?
-* Q1.5.4:: Any good XEmacs tutorials around?
-* Q1.5.5:: May I see an example of a useful XEmacs Lisp function?
-* Q1.5.6:: And how do I bind it to a key?
-* Q1.5.7:: What's the difference between a macro and a function?
-* Q1.5.8:: What is @code{Custom}?
+* Q1.0.3:: How do you pronounce XEmacs?
+* Q1.0.4:: What does XEmacs look like?
+* Q1.0.5:: Who wrote XEmacs?
+* Q1.0.6:: Who wrote the FAQ?
+
+1.1: Getting XEmacs
+* Q1.1.1:: Where can I find XEmacs?
+* Q1.1.2:: Are binaries available?
+* Q1.1.3:: How do I get the bleeding-edge sources?
+* Q1.1.4:: Where can I obtain a printed copy of the XEmacs User's Manual?
+
+1.2: Versions for Different Operating Systems
+* Q1.2.1:: Do I need X11 to run XEmacs?
+* Q1.2.2:: What versions of Unix does XEmacs run on?
+* Q1.2.3:: Is there a port of XEmacs to Microsoft Windows?
+* Q1.2.4:: Can I build XEmacs on MS Windows with X support? Do I need to?
+* Q1.2.5:: What are Cygwin and MinGW, and do I need them to run XEmacs?
+* Q1.2.6:: What are the differences between the various MS Windows emacsen?
+* Q1.2.7:: How does the port cope with differences in the Windows user interface?
+* Q1.2.8:: Is there a port of XEmacs to the Macintosh?
+* Q1.2.9:: Is there a port of XEmacs to MS-DOS?
+* Q1.2.10:: Is there a port of XEmacs to OS/2?
+* Q1.2.11:: Is there a port of XEmacs to NextStep?
+* Q1.2.12:: Is there a port of XEmacs to VMS?
+
+1.3: Getting Started
+* Q1.3.1:: What is an @file{init.el} or @file{.emacs} and is there a sample one?
+* Q1.3.2:: Where do I put my @file{init.el} file?
+* Q1.3.3:: Can I use the same @file{init.el} with the other Emacs?
+* Q1.3.4:: Any good XEmacs tutorials around?
+* Q1.3.5:: May I see an example of a useful XEmacs Lisp function?
+* Q1.3.6:: And how do I bind it to a key?
+* Q1.3.7:: What's the difference between a macro and a function?
+* Q1.3.8:: What is @code{Custom}?
+
+1.4: Getting Help
+* Q1.4.1:: Where can I get help?
+* Q1.4.2:: Which mailing lists are there?
+* Q1.4.3:: Where are the mailing lists archived?
+* Q1.4.4:: How can I get two instances of info?
+* Q1.4.5:: How do I add new Info directories?
+
+1.5: Contributing to XEmacs
+* Q1.5.1:: How do I submit changes to the FAQ?
+* Q1.5.2:: How do I become a beta tester?
+* Q1.5.3:: How do I contribute to XEmacs itself?
+* Q1.5.4:: How do I get started developing XEmacs?
+* Q1.5.5:: What's the basic layout of the code?
+
+1.6: Politics (XEmacs vs. GNU Emacs)
+* Q1.6.1:: What is GNU Emacs?
+* Q1.6.2:: How does XEmacs differ from GNU Emacs?
+* Q1.6.3:: How much does XEmacs differ?
+* Q1.6.4:: Is XEmacs "GNU"?
+* Q1.6.5:: What is the correct way to refer to XEmacs and GNU Emacs?
+* Q1.6.6:: Why haven't XEmacs and GNU Emacs merged?
+
+1.7: External Packages
+* Q1.7.1:: What is the package system?
+* Q1.7.2:: Which external packages are there?
+* Q1.7.3:: Do I need to have the packages to run XEmacs?
+* Q1.7.4:: Is there a way to find which package has particular functionality?
+
+1.8: Internationalization
+* Q1.8.1:: What is the status of internationalization support aka MULE (including
Asian language support)?
+* Q1.8.2:: How can I help with internationalization?
+* Q1.8.3:: How do I type non-ASCII characters?
+* Q1.8.4:: Can XEmacs messages come out in a different language?
+* Q1.8.5:: Please explain the various input methods in MULE/XEmacs
+* Q1.8.6:: How do I portably code for MULE/XEmacs?
+* Q1.8.7:: How about Cyrillic modes?
+* Q1.8.8:: Does XEmacs support Unicode?
+* Q1.8.9:: How does XEmacs display Unicode?
@end menu
-@unnumberedsec 1.0: Introduction
+@unnumberedsec 1.0: What is XEmacs?
@node Q1.0.1, Q1.0.2, Introduction, Introduction
@unnumberedsubsec Q1.0.1: What is XEmacs?
@@ -651,400 +712,338 @@ XEmacs 19.16, released in November, 1997
and was also the last version without international language support.
@node Q1.0.3, Q1.0.4, Q1.0.2, Introduction
-@unnumberedsubsec Q1.0.3: Where can I find it?
+@unnumberedsubsec Q1.0.3: How do you pronounce XEmacs?
-The canonical source and binaries can be found via anonymous FTP at:
-
-@example
-@uref{ftp://ftp.xemacs.org/pub/xemacs/}
-@end example
+The most common pronounciation is @samp{Eks eemax}.
@node Q1.0.4, Q1.0.5, Q1.0.3, Introduction
-@unnumberedsubsec Q1.0.4: Are binaries available?
+@unnumberedsubsec Q1.0.4: What does XEmacs look like?
-MS Windows binaries are available at
-@uref{http://www.xemacs.org/Download/win32/} for the native versions
-of 21.4 and 21.1. Cygwin binaries are now available as part of the
-standard Cygwin installation process. XEmacs also comes pre-built as
-part of many Linux distributions, such as Red Hat and SuSE.
-
-Otherwise, you will need to build XEmacs yourself or get your system
-administrator to do it. Generally, this is not a difficult process
-under Unix and Mac OS X, as XEmacs has been tested under all of the
-common Unix versions and under Mac OS X and comes with an extensive
-configure script that is able to automatically detect most aspects of
-the configuration of your particular system.
+Screen snapshots are available at
+@uref{http://www.xemacs.org/About/Screenshots/index.html}
+as part of the XEmacs website.
@node Q1.0.5, Q1.0.6, Q1.0.4, Introduction
-@unnumberedsubsec Q1.0.5: How does XEmacs differ from GNU Emacs?
-
-For a detailed description of the differences between GNU Emacs and
-XEmacs and a detailed history of XEmacs, check out the
-@example
-@uref{http://www.xemacs.org/About/XEmacsVsGNUemacs.html, NEWS file}
-@end example
+@unnumberedsubsec Q1.0.5: Who wrote XEmacs?
-@table @strong
-@item User-Visible Editing Features
-XEmacs in general tries hard to conform to exist user-interface
-standards, and to work "out-of-the-box" without the need for obscure
-customization changes. GNU Emacs, particularly version 21, has gotten
-better about this (in many cases by copying the XEmacs behavior!), but
-still has some weirdnesses. For example, the standard method of
-selecting text using the Shift key works out-of-the-box in XEmacs.
+XEmacs is the result of the time and effort of many people, and the
+active developers have changed over time. There are two major
+components of the XEmacs effort -- writing the code itself and providing
+all the support work (testing the code, releasing beta and final
+versions, handling patches, reading bug reports, maintaining the web
+site, managing the mailing lists, etc. etc.). Neither component would
+work without the other.
-XEmacs has a built-in toolbar. Four toolbars can actually be configured
-simultaneously: top, bottom, left, and right toolbars.
+@subheading CODING
-XEmacs has vertical and horizontal scrollbars. Unlike in GNU Emacs 19
-(which provides a primitive form of vertical scrollbar), these are true
-toolkit scrollbars. A look-alike Motif scrollbar is provided for those
-who don't have Motif. (Even for those who do, the look-alike may be
-preferable as it is faster.)
+The primary code contributor over the years has been Ben Wing (active
+since late 1992). Between 1991 and 1995, large amounts of coding was
+contributed by Jamie Zawinski and Chuck Thompson. Many other people
+have authored major subsystems or otherwise contributed large amounts of
+code, including Andy Piper, Hrvoje Niksic, Jerry James, Jonathan Harris,
+Kyle Jones, Martin Buchholz, Michael Sperber, Olivier Galibert, Richard
+Mlynarik, Stig, William Perry and plenty of others.
-XEmacs has buffer tabs along the top of the frame (although the
-position can be changed) that make it very easy to switch buffers.
+Primary XEmacs-specific subsystems and their authors:
-The menubar under XEmacs is better-designed, with more thought put into
-it.
+@table @asis
+@item Objects
+@itemize @minus
+@item
+Conversion from 26-bit to 28-bit pointers and integers, lrecords, lcrecords: Richard
Mlynarik, 1994
+@item
+Conversion to 32-bit pointers and 31-bit integers: Kyle Jones, Martin Buchholz
+@item
+Portable dumper, object descriptions: Olivier Galibert
+@item
+KKCC (new garbage collector), ephemerons, weak boxes: Michael Sperber and students
+@item
+Random object work (object equal and hash methods, weak lists, lcrecord lists, bit
vectors, dynarr, blocktype, opaque, string resizing): Ben Wing
+@item
+Profiling: Ben Wing
+@item
+Some byte-compilation and hash-table improvements: Martin Buchholz
+@item
+Bignum: Jerry James
+@end itemize
-XEmacs can ask questions using popup dialog boxes. Any command executed
-from a menu will ask yes/no questions with dialog boxes, while commands
-executed via the keyboard will use the minibuffer.
+@item Internationalization/Mule
+@itemize @minus
+@item
+mostly Ben Wing; many ideas for future work, Stephen Turnbull
+@end itemize
-XEmacs under MS Windows provides uses the standard file-dialog box for
-opening and saving files. Standard menu-accelerator behavior can easily
-be enabled using the Options menu, and integrates well into the existing
-keymap.
+@item I/O
+@itemize @minus
+@item
+Basic event/event-stream implementation: Jamie Zawinski
+@item
+Most event work since 1994: Ben Wing
+@item
+Asynchronous stuff (async timeouts, signals, quit-checking): Ben Wing
+@item
+Process method abstraction, Windows process work: Kirill Katsnelson
+@item
+Misc-user events, async timeouts, most quit-checking and signal code, most other work
since 1994: Ben Wing
+@item
+Lstreams: Ben Wing
+@end itemize
-XEmacs has (still experimental) support for widgets of various sorts --
-buttons, text boxes, sliders, progress bars, etc. A progress bar is
-used in font lock to show the progress.
+@item Display
+@itemize @minus
+@item
+Redisplay mechanism: implementation, Chuck Thompson; additional work, lots of people
+@item
+Glyphs: mostly Ben Wing
+@item
+Specifiers: Ben Wing
+@item
+Extents: initial implementation, someone at Lucid; rewrite, 1994, Ben Wing
+@item
+Widgets: Andy Piper
+@item
+JPEG/PNG/TIFF image converters: Ben Wing, William Perry, Jareth Hein, others (see
comment in @file{glyphs-eimage.c})
+@item
+Menus: Jamie Zawinski, someone at Lucid (Lucid menus)
+@item
+Scrollbars: Chuck Thompson, ??? (Lucid scrollbar)
+@item
+Multi-device/device-independence work (console/device/etc methods): Ben Wing, prototype
by chuck thompson
+@item
+Faces: first implementation, Jamie Zawinski; second, chuck; third, Ben Wing
+@item
+Fonts/colors: first implementation, Jamie Zawinski; further work, Ben Wing
+@item
+Toolbars: implementation, chuck, much interface work, Ben Wing
+@item
+Gutters, tabs: andy piper
+@end itemize
-Experimental support for drag-and-drop protocols is provided from
-XEmacs 21.
+@item Device subsystems
+@itemize @minus
+@item
+X Windows: Jamie Zawinksi, Ben Wing, others
+@item
+GTK: William Perry, Malcolm Purvis
+@item
+MS Windows: initial implementation, Jonathan Harris; some more work, Andy Piper, Ben
Wing
+@item
+TTY: Chuck Thompson, Ben Wing
+@item
+Cygwin: Andy Piper
+@end itemize
-@item General Platform Support
-If you're running on a machine with audio hardware, you can specify
-sound files for XEmacs to play instead of the default X beep. See the
-documentation of the function load-sound-file and the variable
-sound-alist. XEmacs also supports the network sound protocols NAS and
-EsounD.
+@item Misc
+@itemize @minus
+@item
+Configure: initial porting from fsf, Chuck Thompson; conversion to autoconf 2, much
rewriting, Martin Buchholz
+@item
+Most initialization-related code: Ben Wing
+@item
+Internals manual, much of Lisp manual: Ben Wing
+@item
+FSF synching: initial sync with FSF 19, Richard Mlynarik, further work, Ben Wing
+@end itemize
+@end table
-XEmacs 21 supports database protocols with LISP bindings, currently
-including Berkeley DB, LDAP, and PostgreSQL (21.2 only).
+@subheading SUPPORT
-XEmacs 20 and 21 support the Canna, Wnn, and SJ3 Japanese input method
-servers directly, as well as through the X Input Method (XIM)
-protocol. GNU Emacs 20 supports only the XIM protocol. Both Emacsen
-support the Quail family of input methods (implemented in LISP) for many
-languages.
+Currently, support duties are handled by many different people.
-XEmacs provides support for ToolTalk on systems that have
-it.
+Release managers have been
-@item Packaged LISP Libraries
-Many more packages are provided standard with XEmacs than with GNU Emacs
-19 or 20.
+@itemize @minus
+@item
+Stephen Turnbull (April 2001 - January 2003, March 2004 - present, 21.2.47 - 21.4.12,
21.5.2 - 21.5.7, 21.5.17 - present)
+@item
+Vin Shelton (May 2003 - present, 21.4.13 - present)
+@item
+Steve Youngs (July 2002 - September 2003, 21.5.8 - 21.5.16)
+@item
+Martin Buchholz (December 1998, November 1999 - May 2001, 21.2.7 - 21.2.8, 21.2.21 -
21.2.46, 21.5.0 - 21.5.1)
+@item
+Steve Baur (early 1997 - December 1998, February 1999 - November 1999, 19.15 - 21.2.5,
21.2.9 - 21.2.20)
+@item
+Andy Piper (December 1998, 21.2.6)
+@item
+Chuck Thompson (June 1994 - September 1996, 19.11 - 19.14)
+@item
+Jamie Zawinski (April 1991 - June 1994, 19.0 - 19.10)
+@end itemize
-XEmacs 21 supports an integrated package management system which uses
-EFS to download, then automatically install prebuilt LISP
-libraries. This allows XEmacs users much more straightforward access to
-the "latest and greatest" version of any given library.
+The recent overlapping dates are intentional, since two or three trees
+are maintained simultaneously at any point.
-We are working on a standard method for enabling, disabling and
-otherwise controlling packages, which should make them very easy to use.
+Other major support work:
-@item LISP Programming
-From XEmacs 20 on, characters are a separate type. Characters can be
-converted to integers (and many integers can be converted to
-characters), but characters are not integers. GNU Emacs 19, XEmacs 19,
-Mule 2.3 (an extensive patch to GNU Emacs 18.55 and 19.x), and GNU Emacs
-20 (incorporating Mule 3 and later Mule 4) represent them as integers.
+@itemize @minus
+@item
+Adrian Aichner wrote and maintains the web site.
+@item
+Stephen Turnbull has produced many of the beta and semi-stable releases
+and has attempted to be the "face" of XEmacs on the newsgroups and
+mailing lists.
+@item
+Steve Youngs currently produces the beta releases (???).
+@item
+Steve Youngs, Ville Skytta, and now Norbert Koch have taken turns
+maintaining the packages.
+@item
+Vin Shelton maintains the stable releases.
+@item
+Testing - #### Norbert, Adrian, ???
+@end itemize
-From XEmacs 20 on, the buffer is treated as an array of characters, and
-the representation of buffer text is not exposed to LISP. The GNU Emacs
-20 functions like buffer-as-multibyte are not supported.
+Portraits and email of some of the major developers:
-In XEmacs, events are first-class objects. GNU Emacs 19 represents them
-as integers, which obscures the differences between a key gesture and
-the ancient ASCII code used to represent a particular overlapping subset
-of them.
+@itemize @bullet
+@item @email{andy@(a)xemacs.org, Andy Piper}
+@html
+<br><img src="piper.png" alt="Portrait of Andy
Piper"><br>
+@end html
-In XEmacs, keymaps are first-class opaque objects. GNU Emacs 19
-represents them as complicated combinations of association lists and
-vectors. If you use the advertised functional interface to manipulation
-of keymaps, the same code will work in XEmacs, GNU Emacs 18, and GNU
-Emacs 19; if your code depends on the underlying implementation of
-keymaps, it will not.
+@item @email{ben@(a)xemacs.org, Ben Wing}
+@html
+<br><img src="ben.png" alt="Portrait of Ben
Wing"><br>
+@end html
-XEmacs uses "extents" to represent all non-textual aspects of buffers;
-GNU Emacs 19 uses two distinct objects, "text properties" and
-"overlays", which divide up the functionality between them. Extents are
-a superset of the union of the functionality of the two GNU Emacs data
-types. The full GNU Emacs 19 interface to text properties and overlays
-is supported in XEmacs (with extents being the underlying
-representation).
+@item @email{cthomp@(a)xemacs.org, Chuck Thompson}
+@html
+<br><img src="cthomp.png" alt="Portrait of Chuck
Thompson"><br>
+@end html
-Extents can be made to be copied into strings, and then restored, by
-kill and yank. Thus, one can specify this behavior on either "extents"
-or "text properties", whereas in GNU Emacs 19 text properties always
-have this behavior and overlays never do.
+@item @email{hniksic@(a)xemacs.org, Hrvoje Niksic}
-@item Window System Programming Interface
-XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which makes
-it be a more well-behaved X citizen (and also improves portability). A
-result of this is that it is possible to include other Xt "Widgets" in
-the XEmacs window. Also, XEmacs understands the standard Xt command-line
-arguments.
+@html
+<br><img src="hniksic.png" alt="Portrait of Hrvoje
Niksic"><br>
+@end html
-XEmacs supports Motif applications, generic Xt (e.g. Athena)
-applications, and raw Xlib applications. An XEmacs variant which
-supports GTK+ is available (integration as an option in the XEmacs
-mainline is planned for XEmacs 22), although code to take advantage of
-the support is as yet scarce.
+@item @email{jwz@(a)jwz.org, Jamie Zawinski}
+@html
+<br><img src="jwz.png" alt="Portrait of Jamie
Zawinski"><br>
+@end html
-An XEmacs frame can be placed within an "external client widget" managed
-by another application. This allows an application to use an XEmacs
-frame as its text pane rather than the standard Text widget that is
-provided with Motif or Athena.
+@item @email{martin@(a)xemacs.org, Martin Buchholz}
+@html
+<br><img src="martin.png" alt="Portrait of Martin
Buchholz"><br>
+@end html
-@item Community Participation
-Starting with XEmacs 20, joining the XEmacs development team is
-simple. Mail to @email{xemacs-beta@(a)xemacs.org, XEmacs Developers}, and
-you're in! (If you want to be, of course. You're also welcome to just
-post development-related questions and bug reports.) The GNU Emacs
-development team and internal mailing lists are still by invitation
-only.
+@item @email{mly@(a)adoc.xerox.com, Richard Mlynarik}
+@html
+<br><img src="mly.png" alt="Portrait of Richard
Mlynarik"><br>
+@end html
-The "bleeding edge" of mainline XEmacs development is available by
-anonymous CVS as are some subsidiary branches (check out the xemacs-gtk
-module for the latest in GUI features!)
+@item @email{stephen@(a)xemacs.org, Stephen Turnbull}
-Development and maintenance of Lisp libraries is separated from the core
-editor development at a fairly low level. This provides better
-modularization and a better division of responsibility between external
-library maintainers and the XEmacs core development team. Even for
-packages the size of Gnus, XEmacs users normally have access to a
-pre-built version within a few weeks of a major release, and minor
-updates often within days.
+@item @email{steve@(a)xemacs.org, Steve Baur}
+@html
+<br><img src="slb.png" alt="Portrait of Steve
Baur"><br>
+@end html
+@end itemize
-CVS commit authority is broadly dispersed. Recognized maintainers of
-LISP libraries who are willing to maintain XEmacs packaged versions
-automatically qualify for CVS accounts for their packages.
-@end table
+Many other people have contributed to XEmacs; this is partially
+enumerated in the @samp{About XEmacs} option in the Help menu.
-@node Q1.0.6, Q1.0.7, Q1.0.5, Introduction
-@unnumberedsubsec Q1.0.6: How much does XEmacs differ?
+@node Q1.0.6, Q1.1.1, Q1.0.5, Introduction
+@unnumberedsubsec Q1.0.6: Who wrote the FAQ?
-RMS has asserted at times that XEmacs is merely a "patch" on top of
-GNU Emacs (@pxref{Q1.0.7}). In fact, probably not more than 5% of the
-code, if that, remains unchanged, and nearly 14 years of work has gone
-into XEmacs at this point. (GNU Emacs itself is only than 20 years
-old, and thus XEmacs has existed as a separate product for over 2/3 of
-the lifespan of GNU Emacs.) As a point of comparison, XEmacs 21.5 has
-perhaps 65,000 more lines of C code than GNU Emacs 21.2.
+The current version of this FAQ was created by @email{ben@(a)xemacs.org,
+Ben Wing}.
-However, the XEmacs developers strive to keep their code compatible with
-GNU Emacs, especially on the Lisp level. Much effort goes into
-"synching" the XEmacs Elisp code with recent GNU Emacs releases so as to
-benefit from GNU Emacs development work. (In contrast, almost no code
-from XEmacs has made it into GNU Emacs, and in fact the GNU Emacs
-developers are instructed by RMS not to even look at XEmacs source code!
-This stems from self-imposed licensing restrictions on the part of GNU
-Emacs -- and almost certainly out of hostility, as well.)
+Previous contributors to the FAQ include
-@node Q1.0.7, Q1.0.8, Q1.0.6, Introduction
-@unnumberedsubsec Q1.0.7: Is XEmacs "GNU"?
+@itemize @bullet
+@item @email{steve@(a)xemacs.org, SL Baur}
-RMS insists on the term "GNU XEmacs" and maintains that
+@item @email{hniksic@(a)xemacs.org, Hrvoje Niksic}
-@quotation
-XEmacs is GNU software because it's a modified version of a
-GNU program. And it is GNU software because the FSF is the copyright
-holder for most of it, and therefore the legal responsibility for
-protecting its free status falls on us whether we want it or not. This
-is why the term "GNU XEmacs" is legitimate.
-@end quotation
+@item @email{binge@(a)aloft.att.com, Curtis.N.Bingham}
-In fact, FSF is @emph{not} the copyright holder for most of the code,
-as very little unmodified FSF code remains (@pxref{Q1.0.6}).
+@item @email{bruncott@(a)dormeur.inria.fr, Georges Brun-Cottan}
-Furthermore, RMS's assertion that XEmacs is "GNU" seems rather bizarre
-to the XEmacs developers given RMS's hostility and general lack of
-interest in cooperation. "GNU" software in general is part of the GNU
-Project, is distributed by it on their FTP site, and receives support
-(or at least cooperation), as well as implicit endorsement, from it.
-The GNU Project, however, has never supported XEmacs and never
-distributed XEmacs, and RMS's hostility is the farthest thing possible
-from an endorsement. In fact, the GNU Project distributes a number of
-non-GNU software projects on the FSF web site, but again XEmacs is not
-one of them.
+@item @email{rjc@(a)cogsci.ed.ac.uk, Richard Caley}
-@node Q1.0.8, Q1.0.9, Q1.0.7, Introduction
-@unnumberedsubsec Q1.0.8: What is the correct way to refer to XEmacs and GNU Emacs?
+@item @email{cognot@(a)ensg.u-nancy.fr, Richard Cognot}
-Unfortunately even the naming of these two applications has become
-politicized. Much of this stems from RMS, who has a history of
-politicizing similar issues. (Compare the controversy over "Lignux"
-and "GNU/Linux".) We would prefer that the terms "XEmacs" and
"GNU
-Emacs" be used, which are neutral and acceptable to most people. RMS,
-however, is not willing to accept these terms. He insists that, if
-his product is called "GNU Emacs", then ours must be called "GNU
-XEmacs". (For our opinion of this term, @xref{Q1.0.7}.) On the other
-hand, if our product is to be called "XEmacs", as we prefer, then his
-product must simply be called "Emacs". The intent of this seems
-clear: RMS wants to make sure the names reflect his view that his
-version is the "real" Emacs and ours is merely a derivative,
-second-class product (@pxref{Q1.0.6}).
+@item @email{daku@(a)nortel.ca, Mark Daku}
-The XEmacs developers hope that you will use the neutral terms
-"XEmacs" and "GNU Emacs" for these two specific products.
"Emacs", on
-the other hand, is a generic term for a class of programmable text
-editors with a similar look-and-feel, and usually a Lisp-based
-extension language. These trace themselves back to early editors such
-as EINE, ZWEI, ZMACS and Multics Emacs. @xref{A History of Emacs,,,
-internals, XEmacs Internals Manual}.
+@item @email{wgd@(a)martigny.ai.mit.edu, William G. Dubuque}
-We also call upon RMS, in the spirit of furthering cooperation, to
-stop politicizing this issue and use the neutral terms "XEmacs" and
-"GNU Emacs". We have already acceded to RMS' wishes in this respect,
-and we expect him to do the same. (In the past, the XEmacs developers
-often used the terms "FSF Emacs" or "FSFmacs" or
"RMSmacs" in
-reference to GNU Emacs; these terms were apparently modeled after RMS'
-own usage of "Gosmacs" and "Gosling Emacs" in reference to
Unipress
-Emacs, produced by James Gosling. RMS, however, considers such terms
-to be insulting, so we refrain from using them as much as possible in
-preference to GNU Emacs.)
+@item @email{eeide@(a)cs.utah.edu, Eric Eide}
-@node Q1.0.9, Q1.0.10, Q1.0.8, Introduction
-@unnumberedsubsec Q1.0.9: Why haven't XEmacs and GNU Emacs merged?
+@item @email{af@(a)biomath.jussieu.fr, Alain Fauconnet}
-There are currently irreconcilable differences in the views about
-technical, programming, design, organizational and legal matters
-between Richard Stallman (RMS), the author and leader of the GNU Emacs
-project, and the XEmacs development team which provide little hope for
-a merge to take place in the short-term future. There have been
-repeated attempts at merging by all of the major XEmacs developers,
-starting from the early days of Lucid Emacs (in 1991), but they have
-all failed. RMS has very strong views about how GNU Emacs should be
-structured and how his project should be run, and during the repeated
-merge efforts has never demonstrated any realistic interest in
-sufficiently compromising or ceding control to allow a middle ground
-to be found. The basic problem seems to be the very different goals
-of RMS and the XEmacs project. The primary goals of the XEmacs
-project are technical and organizational -- we want to create the best
-editor possible, and to make it as easy as possible for people around
-the world to contribute. The primary goals of RMS, on the other hand,
-are political, and GNU Emacs, and any potential merge efforts with
-XEmacs, are strictly subservient to these goals. In fact, in many
-ways RMS sees GNU Emacs as the "poster child" of his aims, the one
-program in the GNU project that above all others must set an example
-to the world. (This has to do with the fact that GNU Emacs was the
-first program in the GNU project, and the only one that he is still
-personally involved with on a day-to-day basis.) Given his goals, his
-position is completely reasonable -- but unfortunately, makes any
-merge impossible.
+@item @email{cflatter@(a)nrao.edu, Chris Flatters}
-From the XEmacs perspective, the most intractable issues appear to be
-legal and organizational, specifically:
+@item @email{ginsparg@(a)adra.com, Evelyn Ginsparg}
-@itemize @bullet
-@item
-RMS requires "legal papers" to be signed for all contributions of code
-to GNU Emacs over 10 lines or so, transferring the copyright and all
-legal rights to the code to the Free Software Foundation. XEmacs does
-not and has never required this, since it has the practical effect of
-discouraging individual and in particular corporate contributions --
-corporations will almost never sign away their legal rights to code
-since it makes it impossible to reuse the code in any product that
-whose license is not compatible with the GNU General Public License.
-Since RMS has shown no inclination to compromise on this issue, a
-merge would require that most of the existing XEmacs code would need
-to be thrown away and rewritten -- something the XEmacs developers are
-understandably reluctant to do.
+@item @email{hall@(a)aplcenmp.apl.jhu.edu, Marty Hall}
-@item
-A repeated stumbling block in the merge talks has been the issue of
-organizational control over the resulting product. RMS has made it
-clear that he intends to have final say over design issues in a merged
-Emacs. Unfortunately, RMS and the XEmacs developers have repeatedly
-clashed over design decisions, and RMS' insistence on getting his way
-in such disagreements was the very reason for the split in the first
-place. This same issue has come up again and again in merge talks and
-we have never been able to come to a satisfactory resolution. To the
-extent that RMS is willing to compromise at all, it appears to be of a
-purely political rather than technical nature -- "If we support this
-feature of yours, we also get to support this other feature of mine."
-The XEmacs developers cannot see how such a process would lead to
-anything but a mess of incompatible things hodgepodged together.
+@item @email{dkindred@(a)cmu.edu, Darrell Kindred}
-@item
-Because of the years of separate development, distinct and
-incompatible interfaces have developed and merging would be extremely
-difficult even with the above non-technical issues resolved. The
-problem has been exacerbated by the issue of legal papers -- because
-XEmacs code is not "kosher" from RMS' perspective, he discourages
-developers from even looking at it out of legal concerns. Although it
-is still possible to read the XEmacs documentation and run the
-program, the practical effect of this prohibition has been to strongly
-discourage code-sharing and cooperative development -- although a
-great deal of GNU Emacs code has been incorporated into XEmacs,
-practically none has gone the other direction.
-@end itemize
+@item @email{dmoore@(a)ucsd.edu, David Moore}
-If you have a comment to add regarding the merge, it is a good idea to
-avoid posting to the newsgroups, because of the very heated flamewars
-that often result. Mail your questions to
-@email{xemacs-beta@(a)xemacs.org} and @email{emacs-devel@(a)gnu.org}.
+@item @email{arup+@(a)cmu.edu, Arup Mukherjee}
-@node Q1.0.10, Q1.0.11, Q1.0.9, Introduction
-@unnumberedsubsec Q1.0.10: Where can I get help?
+@item @email{nickel@(a)prz.tu-berlin.de, Juergen Nickelsen}
-Probably the easiest way, if everything is installed, is to use Info, by
-pressing @kbd{C-h i}, or looking for an Info item on the
-Help Menu. @kbd{M-x apropos} can be used to look for particular commands.
+@item @email{powell@(a)csl.ncsa.uiuc.edu, Kevin R. Powell}
-For items not found in the manual, try reading this FAQ
-@comment , examining the regular GNU Emacs FAQ (which can be
-@comment found with the Emacs 19 distribution) as well as at
-@comment @uref{http://www.eecs.nwu.edu/emacs/faq/}
-and reading the Usenet group comp.emacs.xemacs.
+@item @email{dworkin@(a)ccs.neu.edu, Justin Sheehy}
-If you choose to post to a newsgroup, @strong{please use
-comp.emacs.xemacs}. Please do not post XEmacs related questions to
-gnu.emacs.help.
+@item @email{stig@(a)hackvan.com, Stig}
-If you cannot post or read Usenet news, there is a corresponding mailing
-list @email{xemacs-news@(a)xemacs.org} which is available. It can be
-subscribed to via the Mailman Web interface or by sending mail to to
-@email{xemacs-news-request@(a)xemacs.org} with @samp{subscribe} in the
-body of the message. See also
-@uref{http://www.xemacs.org/Lists/#xemacs-news}. To cancel a
-subscription, you may use the @email{xemacs-news-request@(a)xemacs.org}
-address or the Web interface. Send a message with a subject of
-@samp{unsubscribe} to be removed.
+@item @email{Aki.Vehtari@(a)hut.fi, Aki Vehtari}
+@end itemize
-@node Q1.0.11, Q1.0.12, Q1.0.10, Introduction
-@unnumberedsubsec Q1.0.11: Where are the mailing lists archived?
+@unnumberedsec 1.1: Getting XEmacs
-The archives can be found at @uref{http://list-archive.xemacs.org}
+@node Q1.1.1, Q1.1.2, Q1.0.6, Introduction
+@unnumberedsubsec Q1.1.1: Where can I find XEmacs?
-@node Q1.0.12, Q1.0.13, Q1.0.11, Introduction
-@unnumberedsubsec Q1.0.12: How do you pronounce XEmacs?
+To download XEmacs, visit the XEmacs WWW page at
+@uref{http://www.xemacs.org/Download/}. The most up-to-date list of
+distribution sites can always be found there. Try to pick a site that
+is networkologically close to you. If you know of other mirrors of
+the XEmacs archives, please send e-mail to
+@uref{mailto:webmaster@@xemacs.org} and we will list them here as well.
+
+The canonical distribution point is
ftp.xemacs.org, available either
+through HTTP (@uref{http://ftp.xemacs.org/}) or anonymous FTP
+(@uref{ftp://ftp.xemacs.org/pub/xemacs/}).
-The most common pronounciation is @samp{Eks eemax}.
+@node Q1.1.2, Q1.1.3, Q1.1.1, Introduction
+@unnumberedsubsec Q1.1.2: Are binaries available?
-@node Q1.0.13, Q1.0.14, Q1.0.12, Introduction
-@unnumberedsubsec Q1.0.13: What does XEmacs look like?
+MS Windows binaries are available at
+@uref{http://www.xemacs.org/Download/win32/} for the native versions
+of 21.4 and 21.1. Cygwin binaries are now available as part of the
+standard Cygwin installation process. XEmacs also comes pre-built as
+part of many Linux distributions, such as Red Hat and SuSE.
-Screen snapshots are available at
-@uref{http://www.xemacs.org/About/Screenshots/index.html}
-as part of the XEmacs website.
+Otherwise, you will need to build XEmacs yourself or get your system
+administrator to do it. Generally, this is not a difficult process
+under Unix and Mac OS X, as XEmacs has been tested under all of the
+common Unix versions and under Mac OS X and comes with an extensive
+configure script that is able to automatically detect most aspects of
+the configuration of your particular system.
+
+@node Q1.1.3, Q1.1.4, Q1.1.2, Introduction
+@unnumberedsubsec Q1.1.3: How do I get the bleeding-edge sources?
+
+If you are interested in developing XEmacs, or getting the absolutely most
+recent, up-to-the-moment, bleeding-edge source code, you can directly
+access the master CVS source tree (read-only, of course, until you ask for
+and are granted permission to directly modify portions of the source tree)
+at
cvs.xemacs.org. Directions on how to access the source tree are located
+at @uref{http://www.xemacs.org/Develop/cvsaccess.html}.
-@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 User's
Manual?
+Nightly CVS snapshots are available at
+@uref{http://www.dk.xemacs.org/Download/CVS-snapshots/}.
+@node Q1.1.4, Q1.2.1, Q1.1.3, Introduction
+@unnumberedsubsec Q1.1.4: Where can I obtain a printed copy of the XEmacs User's
Manual?
+
Pre-printed manuals are not available. If you are familiar with
TeX, you can generate your own manual from the XEmacs sources.
@@ -1052,18 +1051,82 @@ HTML and Postscript versions of XEmacs m
XEmacs web site at
@uref{http://www.xemacs.org/Documentation/index.html}.
-@unnumberedsec 1.1: Versions for Different Operating Systems
+@unnumberedsec 1.2: Versions for Different Operating Systems
-@node Q1.1.1, Q1.1.2, Q1.0.14, Introduction
-@unnumberedsubsec Q1.1.1: Do I need X11 to run XEmacs?
+@node Q1.2.1, Q1.2.2, Q1.1.4, Introduction
+@unnumberedsubsec Q1.2.1: Do I need X11 to run XEmacs?
No. The name @dfn{XEmacs} is unfortunate in the sense that it is
@strong{not} an X Window System-only version of Emacs. XEmacs has
full color support on a color-capable character terminal.
-@node Q1.1.2, Q1.1.3, Q1.1.1, Introduction
-@unnumberedsubsec Q1.1.2: Is there a port of XEmacs to Microsoft Windows?
+@node Q1.2.2, Q1.2.3, Q1.2.1, Introduction
+@unnumberedsubsec Q1.2.2: What versions of Unix does XEmacs run on?
+
+XEmacs is regularly tested on Linux, Solaris, SunOS, HP/UX, FreeBSD,
+OpenBSD, BSD/OS aka BSDI, Tru64 aka DEC/OSF, SCO5, and probably
+others. It should work on all versions of Unix created in the last 10
+years or so, perhaps with a bit of work on more obscure platforms to
+correct bit-rot. It uses a sophisticated configuration system to
+auto-detect zillions of features that are implemented differently in
+different versions of Unix, so it will probably work on your vendor's
+version, possibly with a bit of tweaking, even if we've never heard of
+it.
+
+For problems with particular machines and versions of Unix, see the
+@file{PROBLEMS} file.
+
+Much effort has gone into making XEmacs work on as many different
+machines, configurations, and compilers as possible.
+
+Much effort has gone into making XEmacs 64-bit clean.
+
+Much effort has gone into removing system-specific code, and replacing
+such code with autodetection at configure time.
+
+The XEmacs core should build "out of the box" on most Unix-like systems.
+
+XEmacs 21.2 was tested and @samp{make check} succeeded on these Unix
+configurations as of 2001-02-10:
+
+@example
+alphaev56-dec-osf4.0e (both Compaq C and gcc)
+i386-unknown-freebsd4.2
+i386-unknown-netbsdelf1.5
+i586-sco-sysv5uw7.0.1 (both SCO's cc and gcc)
+i686-pc-linux-gnu
+hppa2.0-hp-hpux10.20 (both HP's ANSI cc and gcc)
+mips-sgi-irix6.5 (both MIPSpro cc and gcc)
+rs6000-ibm-aix4.3.0.0 (both IBM's xlc and gcc)
+sparc-sun-solaris2.6 (both Sun's Forte C and gcc)
+sparc-sun-solaris2.7 (both Sun's Forte C and gcc)
+sparc-sun-sunos4.1.4 (gcc)
+@end example
+
+Some systems have a dual mode 32-bit/64-bit compiler. On most of these,
+XEmacs requires the @samp{--pdump} (in XEmacs 21.5,
+@samp{--enable-pdump}) configure option to build correctly with the
+64-bit version of the compiler.
+
+@example
+mips-sgi-irix6.5, CC="gcc -mabi=64"
+mips-sgi-irix6.5, CC="cc -64"
+rs6000-ibm-aix4.3.0.0, CC="cc -q64"
+@end example
+
+On most of these systems, XEmacs also builds with a C++ compiler,
+but not "out of the box". This feature is only for use by the
+maintainers.
+
+XEmacs 21.2 is known @emph{not} to work on any machines with m680x0
+processors. Sorry, all you sun3 and Unix PC nostalgia buffs out there.
+VMS has never been supported by XEmacs. In fact, all the old VMS code
+inherited from Emacs has been removed. Sorry, all you VMS fans out there.
+
+@node Q1.2.3, Q1.2.4, Q1.2.2, Introduction
+@unnumberedsubsec Q1.2.3: Is there a port of XEmacs to Microsoft Windows?
+
Yes. Beginning with release 21.0, XEmacs has worked under MS Windows
and is fully-featured and actively developed. A group of dedicated
developers actively maintains and improves the Windows-specific
@@ -1087,15 +1150,15 @@ features. In addition, under Cygwin it
to use an X server (and XFree86 is available as part of the standard
Cygwin installation).
-@node Q1.1.3, Q1.1.4, Q1.1.2, Introduction
-@unnumberedsubsec Q1.1.3: Can I build XEmacs on MS Windows with X support? Do I need
to?
+@node Q1.2.4, Q1.2.5, Q1.2.3, Introduction
+@unnumberedsubsec Q1.2.4: Can I build XEmacs on MS Windows with X support? Do I need
to?
Yes, you can, but no you do not need to. In fact, we recommend that you
use a native-GUI version unless you have a specific need for an X
version.
-@node Q1.1.4, Q1.1.5, Q1.1.3, Introduction
-@unnumberedsubsec Q1.1.4: What are Cygwin and MinGW, and do I need them to run XEmacs?
+@node Q1.2.5, Q1.2.6, Q1.2.4, Introduction
+@unnumberedsubsec Q1.2.5: What are Cygwin and MinGW, and do I need them to run XEmacs?
To answer the second part of the question: No, you, you don't need
Cygwin or MinGW to build or to run XEmacs. But if you have them and
@@ -1119,7 +1182,7 @@ Win32 GUI, and can be built with support
If you build with Win32 GUI support then the Cygwin version uses the
majority of the Windows-specific code, which is mostly related to
display. If you want to build with X support you need X libraries (and
-an X server to display XEmacs on); see @ref{Q2.2.7}. TTY and Win32 GUI
+an X server to display XEmacs on); see @ref{Q2.3.7}. TTY and Win32 GUI
require no additional libraries beyond what comes standard with Cygwin.
The advantages of the Cygwin version are that it integrates well with
@@ -1133,7 +1196,7 @@ whereas the native port requires only a
Also, it follows the Unix filesystem and process model very closely
(some will undoubtedly view this as an advantage).
-See @uref{http://sources.redhat.com/cygwin/} for more information on
+See @uref{http://www.cygwin.com/} for more information on
Cygwin.
MinGW is a collection of header files and import libraries that allow
@@ -1154,8 +1217,8 @@ irrelevant for XEmacs since it's already
See @uref{http://www.mingw.org/} for more information on MinGW.
-@node Q1.1.5, Q1.1.6, Q1.1.4, Introduction
-@unnumberedsubsec Q1.1.5: What are the differences between the various MS Windows
emacsen?
+@node Q1.2.6, Q1.2.7, Q1.2.5, Introduction
+@unnumberedsubsec Q1.2.6: What are the differences between the various MS Windows
emacsen?
XEmacs, Win-Emacs, DOS Emacs, NT Emacs, this is all very confusing.
Could you briefly explain the differences between them?
@@ -1235,7 +1298,7 @@ GNU Emacs compiled with Win32
@itemize @minus
@item
-Starting with version 19.30, it has been possible to compile GNU Emacs
+Starting with GNU Emacs 19.30, it has been possible to compile GNU Emacs
under MS Windows using the DJGPP compiler and X libraries. The result
is very similar to GNU Emacs compiled under MS DOS, only it works
somewhat better because it runs in 32-bit mode, makes use of all the
@@ -1243,37 +1306,9 @@ system memory, supports long file names,
@end itemize
@end itemize
-
-@node Q1.1.6, Q1.1.7, Q1.1.5, Introduction
-@unnumberedsubsec Q1.1.6: Is there a port of XEmacs to the Macintosh?
-
-Yes.
-
-XEmacs 21.5 (perhaps 21.4 also?) works on MacOS X, although it certainly
-will not feel very much like a Mac application as it has no Mac-specific
-code in it.
-
-There is also a port of XEmacs 19.14 that works on all recent versions
-of MacOS, from 8.1 through MacOS X, by @email{pjarvis@(a)ispchannel.com,
-Pitts Jarvis} (recently deceased). It runs in an equivalent of TTY
-mode only (one single Macintosh window, 25 colors), but has a large
-number of Mac-specific additions. It's available at
-@uref{http://homepage.mac.com/pjarvis/xemacs.html}.
-
-@node Q1.1.7, Q1.1.8, Q1.1.6, Introduction
-@unnumberedsubsec Q1.1.7: Is there a port of XEmacs to NextStep?
-
-Carl Edman, apparently no longer at @email{cedman@(a)princeton.edu}, did
-the port of GNU Emacs to NeXTstep and expressed interest in doing the
-XEmacs port, but never went any farther.
-
-@node Q1.1.8, Q1.1.9, Q1.1.7, Introduction
-@unnumberedsubsec Q1.1.8: Is there a port of XEmacs to OS/2?
-
-No, but Alexander Nikolaev <avn_1251@(a)mail.ru> is working on it.
-@node Q1.1.9, Q1.2.1, Q1.1.8, Introduction
-@unnumberedsubsec Q1.1.9: How does the port cope with differences in the Windows user
interface?
+@node Q1.2.7, Q1.2.8, Q1.2.6, Introduction
+@unnumberedsubsec Q1.2.7: How does the port cope with differences in the Windows user
interface?
The XEmacs (and Emacs in general) user interface is pretty different
from what is expected of a typical MS Windows program. How does the MS
@@ -1296,2663 +1331,4093 @@ you will get all these behaviors automat
In future versions, some of these features might be turned on by
default in the MS Windows environment.
-@unnumberedsec 1.2: Policies
+@node Q1.2.8, Q1.2.9, Q1.2.7, Introduction
+@unnumberedsubsec Q1.2.8: Is there a port of XEmacs to the Macintosh?
-@node Q1.2.1, Q1.2.2, Q1.1.9, Introduction
-@unnumberedsubsec Q1.2.1: What is the FAQ editorial policy?
+Yes.
-The FAQ is actively maintained and modified regularly. All links should
-be up to date. Unfortunately, some of the information is out of date --
-a situation which the FAQ maintainer is working on. All submissions are
-welcome, please e-mail submissions to @email{faq@(a)xemacs.org, XEmacs FAQ
-maintainers}.
+XEmacs 21.5 (perhaps 21.4 also?) works on MacOS X, although it certainly
+will not feel very much like a Mac application as it has no Mac-specific
+code in it.
-Please make sure that @samp{XEmacs FAQ} appears on the Subject: line.
-If you think you have a better way of answering a question, or think a
-question should be included, we'd like to hear about it. Questions and
-answers included into the FAQ will be edited for spelling and grammar
-and will be attributed. Answers appearing without attribution are
-either from versions of the FAQ dated before May 1996 or are from
-previous FAQ maintainers. Answers quoted from Usenet news articles will
-always be attributed, regardless of the author.
+There is also a port of XEmacs 19.14 that works on all recent versions
+of MacOS, from 8.1 through MacOS X, by @email{pjarvis@(a)ispchannel.com,
+Pitts Jarvis} (recently deceased). It runs in an equivalent of TTY
+mode only (one single Macintosh window, 25 colors), but has a large
+number of Mac-specific additions. It's available at
+@uref{http://homepage.mac.com/pjarvis/xemacs.html}.
-@node Q1.2.2, Q1.2.3, Q1.2.1, Introduction
-@unnumberedsubsec Q1.2.2: How do I become a beta tester?
+@node Q1.2.9, Q1.2.10, Q1.2.8, Introduction
+@unnumberedsubsec Q1.2.9: Is there a port of XEmacs to MS-DOS?
-Send an email message to @email{xemacs-beta-request@(a)xemacs.org} with
-the line @samp{subscribe} in the body of the message.
+No. We have never supported running on MS-DOS or Windows 3.1, and in
+fact have long since deleted all MS-DOS-related code. We're not
+particularly interested in patches for these platforms, as they would
+introduce huge amounts of code clutter due to the woefully
+underfeatured nature of these systems. (See GNU Emacs for a port to
+MS-DOS.)
-Be prepared to get your hands dirty, as beta testers are expected to
-identify problems as best they can.
+@node Q1.2.10, Q1.2.11, Q1.2.9, Introduction
+@unnumberedsubsec Q1.2.10: Is there a port of XEmacs to OS/2?
-@node Q1.2.3, Q1.3.1, Q1.2.2, Introduction
-@unnumberedsubsec Q1.2.3: How do I contribute to XEmacs itself?
+No, but Alexander Nikolaev <avn_1251@(a)mail.ru> was at one point
+working on it.
-It depends on the knowledge and time you possess. If you are able, by
-all means become a beta tester (@pxref{Q1.2.2}). If you are a
-programmer, try to build XEmacs and see if you can improve it.
+@node Q1.2.11, Q1.2.12, Q1.2.10, Introduction
+@unnumberedsubsec Q1.2.11: Is there a port of XEmacs to NextStep?
-Otherwise, you can still help by using XEmacs as your everyday editor
-(for pre-built binary versions, @pxref{Q1.0.4}) and reporting bugs you
-find to the mailing list.
+Carl Edman, apparently no longer at @email{cedman@(a)princeton.edu}, did
+the port of GNU Emacs to NeXTstep and expressed interest in doing the
+XEmacs port, but never went any farther.
-Another area where we need help is the documentation: We need good
-documentation for building XEmacs and for using it. This FAQ is a
-small step in that direction.
+@node Q1.2.12, Q1.3.1, Q1.2.11, Introduction
+@unnumberedsubsec Q1.2.12: Is there a port of XEmacs to VMS?
-Ben Wing @email{ben@(a)xemacs.org} writes:
+VMS has never been supported by XEmacs. In fact, all the old VMS code
+inherited from GNU Emacs has been removed. Sorry, all you VMS fans
+out there.
-@quotation
-BTW if you have a wish list of things that you want added, you have to
-speak up about it! More specifically, you can do the following if you
-want a feature added (in increasing order of usefulness):
+@unnumberedsec 1.3: Getting Started
-@itemize @bullet
-@item
-Make a posting about a feature you want added.
+@node Q1.3.1, Q1.3.2, Q1.2.12, Introduction
+@unnumberedsubsec Q1.3.1: What is an @file{init.el} or @file{.emacs} and is there a
sample one?
-@item
-Become a beta tester and make more postings about those same features.
+The @file{init.el} or @file{.emacs} file is used to customize XEmacs to
+your tastes. Starting in 21.4, the preferred location for the init file
+is @file{~/.xemacs/init.el}; in previous versions, it was
+(a)file{~/.emacs}. 21.4 still accepts the old location, but the first
+time you run it, it will ask to migrate your file to the new location.
+If you answer yes, the file will be moved, and a "compatibility"
+(a)file{.emacs} file will be placed in the old location so that you can
+still run older versions of XEmacs, and versions of GNU Emacs, which
+expect the old location. The @file{.emacs} file present is just a stub
+that loads the real file in @file{~/.xemacs/init.el}.
-@item
-Convince us that you're going to use the features in some cool and
-useful way.
+No two init files are alike, nor are they expected to be alike, but
+that's the point. The XEmacs distribution contains an excellent starter
+example in the @file{etc/} directory called @file{sample.init.el}
+(starting in 21.4) or @file{sample.emacs} in older versions. Copy this
+file from there to @file{~/.xemacs/init.el} (starting in 21.4) or
+(a)file{~/.emacs} in older versions, where @samp{~} means your home
+directory, of course. Then edit it to suit.
-@item
-Come up with a clear and well-thought-out API concerning the features.
+You may bring the @file{sample.init.el} or @file{sample.emacs} file into
+an XEmacs buffer from the menubar. (The menu entry for it is always
+under the @samp{Help} menu, but its location under that has changed in
+various versions. Recently, look under the @samp{Samples} submenu.) To
+determine the location of the @file{etc/} directory type the command
+@kbd{C-h v data-directory @key{RET}}.
-@item
-Write the code to implement a feature and send us a patch.
-@end itemize
+@node Q1.3.2, Q1.3.3, Q1.3.1, Introduction
+@unnumberedsubsec Q1.3.2: Where do I put my @file{init.el} file?
-(not that we're necessarily requiring you to write the code, but we can
-always hope :)
-@end quotation
+(a)file{init.el} is the name of the init file starting with 21.4, and is
+located in the subdirectory @file{.xemacs/} of your home directory. In
+prior versions, the init file is called @file{.emacs} and is located in
+your home directory.
-@unnumberedsec 1.3: Credits
+Your home directory under Windows is determined by the @samp{HOME}
+environment variable. If this is not set, it defaults to @samp{C:\}.
+To set this variable, modify @file{AUTOEXEC.BAT} under Windows 95/98, or
+select @samp{Control Panel->System->Advanced->Environment Variables...}
+under Windows NT/2000.
-@node Q1.3.1, Q1.3.2, Q1.2.3, Introduction
-@unnumberedsubsec Q1.3.1: Who wrote XEmacs?
+@node Q1.3.3, Q1.3.4, Q1.3.2, Introduction
+@unnumberedsubsec Q1.3.3: Can I use the same @file{init.el} with the other Emacs?
-XEmacs is the result of the time and effort of many people, and the
-active developers have changed over time. There are two major
-components of the XEmacs effort -- writing the code itself and providing
-all the support work (testing the code, releasing beta and final
-versions, handling patches, reading bug reports, maintaining the web
-site, managing the mailing lists, etc. etc.). Neither component would
-work without the other.
+Yes. The sample @file{init.el} included in the XEmacs
+distribution will show you how to handle different versions and flavors
+of Emacs.
-@subheading CODING
+@node Q1.3.4, Q1.3.5, Q1.3.3, Introduction
+@unnumberedsubsec Q1.3.4: Any good XEmacs tutorials around?
-The primary code contributor over the years has been Ben Wing (active
-since late 1992). Between 1991 and 1995, large amounts of coding was
-contributed by Jamie Zawinski and Chuck Thompson. Many other people
-have authored major subsystems or otherwise contributed large amounts of
-code, including Andy Piper, Hrvoje Niksic, Jerry James, Jonathan Harris,
-Kyle Jones, Martin Buchholz, Michael Sperber, Olivier Galibert, Richard
-Mlynarik, Stig, William Perry and plenty of others.
+There's the XEmacs tutorial available from the Help Menu under
+@samp{Help->Tutorials}, or by typing @kbd{C-h t}. To check whether
+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}.
-Primary XEmacs-specific subsystems and their authors:
+@comment There's an Emacs Lisp tutorial at
+@comment
+@comment @example
+@comment @uref{ftp://prep.ai.mit.edu/pub/gnu/emacs-lisp-intro-1.04.tar.gz}.
+@comment @end example
+@comment
+@comment @email{erik@(a)petaxp.rug.ac.be, Erik Sundermann} has made a tutorial web
+@comment page at
+@comment @iftex
+@comment @*
+@comment @end iftex
+@comment @uref{http://petaxp.rug.ac.be/~erik/xemacs/}.
-@table @asis
-@item Objects
-@itemize @minus
-@item
-Conversion from 26-bit to 28-bit pointers and integers, lrecords, lcrecords: Richard
Mlynarik, 1994
-@item
-Conversion to 32-bit pointers and 31-bit integers: Kyle Jones, Martin Buchholz
-@item
-Portable dumper, object descriptions: Olivier Galibert
-@item
-KKCC (new garbage collector), ephemerons, weak boxes: Michael Sperber and students
-@item
-Random object work (object equal and hash methods, weak lists, lcrecord lists, bit
vectors, dynarr, blocktype, opaque, string resizing): Ben Wing
-@item
-Profiling: Ben Wing
-@item
-Some byte-compilation and hash-table improvements: Martin Buchholz
-@item
-Bignum: Jerry James
-@end itemize
+@node Q1.3.5, Q1.3.6, Q1.3.4, Introduction
+@unnumberedsubsec Q1.3.5: May I see an example of a useful XEmacs Lisp function?
-@item Internationalization/Mule
-@itemize @minus
-@item
-mostly Ben Wing; many ideas for future work, Stephen Turnbull
-@end itemize
+The following function does a little bit of everything useful. It does
+something with the prefix argument, it examines the text around the
+cursor, and it's interactive so it may be bound to a key. It inserts
+copies of the current word the cursor is sitting on at the cursor. If
+you give it a prefix argument: @kbd{C-u 3 M-x double-word} then it will
+insert 3 copies.
-@item I/O
-@itemize @minus
-@item
-Basic event/event-stream implementation: Jamie Zawinski
-@item
-Most event work since 1994: Ben Wing
-@item
-Asynchronous stuff (async timeouts, signals, quit-checking): Ben Wing
-@item
-Process method abstraction, Windows process work: Kirill Katsnelson
-@item
-Misc-user events, async timeouts, most quit-checking and signal code, most other work
since 1994: Ben Wing
-@item
-Lstreams: Ben Wing
-@end itemize
+@lisp
+(defun double-word (count)
+ "Insert a copy of the current word underneath the cursor"
+ (interactive "*p")
+ (let (here there string)
+ (save-excursion
+ (forward-word -1)
+ (setq here (point))
+ (forward-word 1)
+ (setq there (point))
+ (setq string (buffer-substring here there)))
+ (while (>= count 1)
+ (insert string)
+ (decf count))))
+@end lisp
-@item Display
-@itemize @minus
-@item
-Redisplay mechanism: implementation, Chuck Thompson; additional work, lots of people
+The best way to see what is going on here is to let XEmacs tell you.
+Put the code into an XEmacs buffer, and do a @kbd{C-h f} with the cursor
+sitting just to the right of the function you want explained. Eg. move
+the cursor to the SPACE between @code{interactive} and @samp{"*p"} and
+hit @kbd{C-h f} to see what the function @code{interactive} does. Doing
+this will tell you that the @code{*} requires a writable buffer, and
+@code{p} converts the prefix argument to a number, and
+@code{interactive} allows you to execute the command with @kbd{M-x}.
+
+@node Q1.3.6, Q1.3.7, Q1.3.5, Introduction
+@unnumberedsubsec Q1.3.6: And how do I bind it to a key?
+
+To bind to a key do:
+
+@lisp
+(global-set-key "\C-cd" 'double-word)
+@end lisp
+
+Or interactively, @kbd{M-x global-set-key} and follow the prompts.
+
+@node Q1.3.7, Q1.3.8, Q1.3.6, Introduction
+@unnumberedsubsec Q1.3.7: What's the difference between a macro and a function?
+
+Quoting from the Lisp Reference (a.k.a @dfn{Lispref}) Manual:
+
+@dfn{Macros} enable you to define new control constructs and other
+language features. A macro is defined much like a function, but instead
+of telling how to compute a value, it tells how to compute another Lisp
+expression which will in turn compute the value. We call this
+expression the @dfn{expansion} of the macro.
+
+Macros can do this because they operate on the unevaluated expressions
+for the arguments, not on the argument values as functions do. They can
+therefore construct an expansion containing these argument expressions
+or parts of them.
+
+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.3.8, Q1.4.1, Q1.3.7, Introduction
+@unnumberedsubsec Q1.3.8: What is @code{Custom}?
+
+@code{Custom} is a system for customizing XEmacs options.
+
+You can access @code{Advanced (Customize)} from the @code{Options} menu
+or invoking one of customize commands by typing eg.
+@kbd{M-x customize}, @kbd{M-x customize-face},
+@kbd{M-x customize-variable} or @kbd{M-x customize-apropos}.
+
+There is also new @samp{browser} mode for Customize.
+Try it out with @kbd{M-x customize-browse}
+
+@unnumberedsec 1.4: Getting Help
+
+@node Q1.4.1, Q1.4.2, Q1.3.8, Introduction
+@unnumberedsubsec Q1.4.1: Where can I get help?
+
+Probably the easiest way, if everything is installed, is to use Info, by
+pressing @kbd{C-h i}, or looking for an Info item on the
+Help Menu. @kbd{M-x apropos} can be used to look for particular commands.
+
+For items not found in the manual, try reading this FAQ
+and reading the Usenet group comp.emacs.xemacs.
+
+If you choose to post to a newsgroup, @strong{please use
+comp.emacs.xemacs}. Please do not post XEmacs related questions to
+gnu.emacs.help.
+
+If you cannot post or read Usenet news, there is a corresponding mailing
+list @email{xemacs-news@(a)xemacs.org} which is available. It can be
+subscribed to via the Mailman Web interface or by sending mail to to
+@email{xemacs-news-request@(a)xemacs.org} with @samp{subscribe} in the
+body of the message. See also
+@uref{http://www.xemacs.org/Lists/#xemacs-news}. To cancel a
+subscription, you may use the @email{xemacs-news-request@(a)xemacs.org}
+address or the Web interface. Send a message with a subject of
+@samp{unsubscribe} to be removed.
+
+@node Q1.4.2, Q1.4.3, Q1.4.1, Introduction
+@unnumberedsubsec Q1.4.2: Which mailing lists are there?
+
+For complete, up-to-date info on the lists and how to subscribe, see
+@uref{http://www.xemacs.org/Lists/}.
+
+@table @samp
+
+@item comp.emacs.xemacs
+is a Usenet newsgroup
+for XEmacs users to discuss problems and issues that arise
+for them. It's not generally an appropriate place to ask
+about apparent bugs (use @samp{xemacs-beta}), or future plans
+(use @samp{xemacs-design}).
+
+@item xemacs-announce
+is a read-only, low
+volume list for announcements concerning the XEmacs project
+and new releases of the XEmacs software.
+
+@item xemacs-beta
+is an open list for bug reports about beta versions of XEmacs. This
+includes the bug reports themselves, by both users and developers, as
+well as queries, follow-ups, and discussions further determining their
+nature and status. This is the primary channel for this kind of
+discussion; related code changes will usually not be applied until
+they have been discussed here. When such discussions touch on
+significant changes to the code (in particular, structural changes),
+or on changes to API's or external functionality, they should be moved
+to @samp{xemacs-design}. Requests and proposals for non-bug-related
+changes do not belong on @samp{xemacs-beta}, and should be sent to
+@samp{xemacs-design} instead.
+
+@item xemacs-beta-ja
+is an open list for bug
+reports and design discussion related to Mule features,
+including Japanese handling, in beta versions of XEmacs.
+Japanese is the preferred language of discussion. For most
+timely presentation to reviewers, please consider sending
+appropriate discussion to @samp{xemacs-mule} or
+@samp{xemacs-design} in English when convenient for
+the participants in discussion. When possible, bug reports
+not related to Mule (including Japanese) should be reported on
+@samp{xemacs-beta} in English.
+
+@item xemacs-buildreports
+is an open list for
+submission of build-reports on beta versions of XEmacs. For
+information on what the build-reports should contain, please
+see the `etc/BETA' file which is included in each beta
+distribution.
+
+@item xemacs-cvs
+is a read-only list for notices
+and information on what has been committed to the XEmacs CVS
+trees, by whom, and for what.
+
+@item xemacs-design
+is an open list for
+discussing the design of XEmacs. This includes discussion
+about planned and ongoing changes to functionality and API
+changes and additions as well as requests for them. This is
+the primary channel for this kind of discussion; related code
+changes will usually not be applied until they have been
+discussed here. This does not include bug reports, which go
+to @samp{xemacs-beta}.
+
+@item xemacs-mule
+is an open mailing list for
+discussion of International extensions to XEmacs including
+Mule, XIM, I18n issues, etc, and is not confined to
+developmental issues. This list is not restricted to
+English, postings in all languages are welcome.
+
+@item xemacs-news
+is an open list for discussion
+and bug reporting for XEmacs. This mailing list is
+bi-directionally gatewayed with the USENET newsgroup
+comp.emacs.xemacs.
+
+@item xemacs-nt
+is a developers-only mailing
+list and is intended for people who wish to work actively on
+the porting of XEmacs to Microsoft Windows NT and Microsoft
+Windows '95.
+
+@item xemacs-patches
+is an open, moderated
+list for submission of patches to the XEmacs distribution
+and its packages. Anyone may subscribe or submit to
+xemacs-patches, but all submissions are reviewed by the list
+moderator before they are distributed to the
+list. Discussion is not appropriate on xemacs-patches.
+
+@item xemacs-users-ja
+is an open list for
+discussion and bug reporting for XEmacs. Japanese is the
+preferred language of discussion. It is not gated to
+comp.emacs.xemacs or the @samp{xemacs} list. For
+fastest response, bugs not specifically related to Japanese
+or Mule features should be reported on
+@samp{xemacs-beta} (in English).
+
+@item xemacs-users-ru
+is an open list for
+discussion and bug reporting for XEmacs. Russian is the
+preferred language of discussion. It is not gated to
+comp.emacs.xemacs or the @samp{xemacs} list. For
+fastest response, bugs not specifically related to Russian
+or Mule features should be reported on
+@samp{xemacs-beta} (in English).
+@end table
+
+@node Q1.4.3, Q1.4.4, Q1.4.2, Introduction
+@unnumberedsubsec Q1.4.3: Where are the mailing lists archived?
+
+The archives can be found at @uref{http://list-archive.xemacs.org}
+
+@node Q1.4.4, Q1.4.5, Q1.4.3, Introduction
+@unnumberedsubsec Q1.4.4: How can I get two instances of info?
+
+Before 21.4, you can't. The @code{info} package does not provide for
+multiple info buffers. In 21.4, this should be fixed. #### how?
+
+@node Q1.4.5, Q1.5.1, Q1.4.4, Introduction
+@unnumberedsubsec Q1.4.5: How do I add new Info directories?
+
+You use something like:
+
+@lisp
+(setq Info-directory-list (cons
+ (expand-file-name "~/info")
+ Info-default-directory-list))
+@end lisp
+
+@email{davidm@(a)prism.kla.com, David Masterson} writes:
+
+@quotation
+Emacs Info and XEmacs Info do many things differently. If you're trying to
+support a number of versions of Emacs, here are some notes to remember:
+
+@enumerate
@item
-Glyphs: mostly Ben Wing
+Emacs Info scans @code{Info-directory-list} from right-to-left while
+XEmacs Info reads it from left-to-right, so append to the @emph{correct}
+end of the list.
+
@item
-Specifiers: Ben Wing
+Use @code{Info-default-directory-list} to initialize
+@code{Info-directory-list} @emph{if} it is available at startup, but not
+all Emacsen define it.
+
@item
-Extents: initial implementation, someone at Lucid; rewrite, 1994, Ben Wing
+Emacs Info looks for a standard @file{dir} file in each of the
+directories scanned from #1 and magically concatenates them together.
+
@item
-Widgets: Andy Piper
+XEmacs Info looks for a @file{localdir} file (which consists of just the
+menu entries from a @file{dir} file) in each of the directories scanned
+from #1 (except the first), does a simple concatenation of them, and
+magically attaches the resulting list to the end of the menu in the
+@file{dir} file in the first directory.
+@end enumerate
+
+Another alternative is to convert the documentation to HTML with
+texi2html and read it from a web browser like Lynx or W3.
+@end quotation
+
+@unnumberedsec 1.5: Contributing to XEmacs
+
+@node Q1.5.1, Q1.5.2, Q1.4.5, Introduction
+@unnumberedsubsec Q1.5.1: How do I submit changes to the FAQ?
+
+The FAQ is actively maintained and modified regularly. All links should
+be up to date. Unfortunately, some of the information is out of date --
+a situation which the FAQ maintainer is working on. All submissions are
+welcome, please e-mail submissions to @email{faq@(a)xemacs.org, XEmacs FAQ
+maintainers}.
+
+Please make sure that @samp{XEmacs FAQ} appears on the Subject: line.
+If you think you have a better way of answering a question, or think a
+question should be included, we'd like to hear about it. Questions and
+answers included into the FAQ will be edited for spelling and grammar
+and will be attributed. Answers appearing without attribution are
+either from versions of the FAQ dated before May 1996 or are from
+previous FAQ maintainers. Answers quoted from Usenet news articles will
+always be attributed, regardless of the author.
+
+@node Q1.5.2, Q1.5.3, Q1.5.1, Introduction
+@unnumberedsubsec Q1.5.2: How do I become a beta tester?
+
+Send an email message to @email{xemacs-beta-request@(a)xemacs.org} with
+the line @samp{subscribe} in the body of the message.
+
+Be prepared to get your hands dirty, as beta testers are expected to
+identify problems as best they can.
+
+@node Q1.5.3, Q1.5.4, Q1.5.2, Introduction
+@unnumberedsubsec Q1.5.3: How do I contribute to XEmacs itself?
+
+It depends on the knowledge and time you possess. If you are able, by
+all means become a beta tester (@pxref{Q1.5.2}). If you are a
+programmer, try to build XEmacs and see if you can improve it.
+
+Otherwise, you can still help by using XEmacs as your everyday editor
+(for pre-built binary versions, @pxref{Q1.1.2}) and reporting bugs you
+find to the mailing list.
+
+Another area where we need help is the documentation: We need good
+documentation for building XEmacs and for using it. This FAQ is a
+small step in that direction.
+
+Ben Wing @email{ben@(a)xemacs.org} writes:
+
+@quotation
+BTW if you have a wish list of things that you want added, you have to
+speak up about it! More specifically, you can do the following if you
+want a feature added (in increasing order of usefulness):
+
+@itemize @bullet
@item
-JPEG/PNG/TIFF image converters: Ben Wing, William Perry, Jareth Hein, others (see
comment in @file{glyphs-eimage.c})
+Make a posting about a feature you want added.
+
@item
-Menus: Jamie Zawinski, someone at Lucid (Lucid menus)
+Become a beta tester and make more postings about those same features.
+
@item
-Scrollbars: Chuck Thompson, ??? (Lucid scrollbar)
+Convince us that you're going to use the features in some cool and
+useful way.
+
@item
-Multi-device/device-independence work (console/device/etc methods): Ben Wing, prototype
by chuck thompson
+Come up with a clear and well-thought-out API concerning the features.
+
@item
-Faces: first implementation, Jamie Zawinski; second, chuck; third, Ben Wing
+Write the code to implement a feature and send us a patch.
+@end itemize
+
+(not that we're necessarily requiring you to write the code, but we can
+always hope :)
+@end quotation
+
+@node Q1.5.4, Q1.5.5, Q1.5.3, Introduction
+@unnumberedsubsec Q1.5.4: How do I get started developing XEmacs?
+
+First, get yourself set up under CVS so that you can access the CVS
+repositories containing the XEmacs sources and the XEmacs packages.
+
+Next, set up your layout. This is important, as a good layout will
+facilitate getting things done efficiently, while a bad layout will could
+lead to disaster, as you can't figure out which code is the most recent,
+which can be thrown away, etc. We suggest the following layout: (feel free
+to make changes)
+
+@itemize @bullet
@item
-Fonts/colors: first implementation, Jamie Zawinski; further work, Ben Wing
+Everything goes under @file{/src/xemacs} (use a different directory if
+you want). From now, instead of saying @file{/src/xemacs}, we use
+@file{<xsrc-top>}, to make it easier in case someone picked a
+different directory.
+
@item
-Toolbars: implementation, chuck, much interface work, Ben Wing
+Package source is in @file{<xsrc-top>/package-src}.
+
@item
-Gutters, tabs: andy piper
-@end itemize
+Installed packages go under @file{<xsrc-top>/xemacs-packages}, and
+@file{<xsrc-top>/mule-packages}.
-@item Device subsystems
-@itemize @minus
@item
-X Windows: Jamie Zawinksi, Ben Wing, others
+A "workspace" is a complete copy of the sources, in which you do work of
+a particular kind. Workspaces can be differentiated by which branch of
+the source tree they extend off of -- usually either the stable or
+experimental, unless other branches have been created (for example, Ben
+created a branch for his Mule work because (1) the project was long-term
+and involved an enormous number of changes, (2) people wanted to be able
+to look at what his work in progress, and (3) he wanted to be able to
+check things in and in general use source-code control, since it was a
+long-term project). Workspaces are also differentiated in what their
+purpose is -- general working workspace, workspace for particular
+projects, workspace keeping the latest copy of the code in one of the
+branches without mods, etc.
+
@item
-GTK: William Perry, Malcolm Purvis
+Various workspaces are subdirectories under @file{<xsrc-top>}, e.g.:
+
+@itemize @bullet
@item
-MS Windows: initial implementation, Jonathan Harris; some more work, Andy Piper, Ben
Wing
+@file{<xsrc-top>/working} (the workspace you're actively working on,
+periodically synched up with the latest trunk)
+
@item
-TTY: Chuck Thompson, Ben Wing
+@file{<xsrc-top>/stable} (for making changes to the stable version of
+XEmacs, which sits on a branch)
+
@item
-Cygwin: Andy Piper
-@end itemize
+@file{<xsrc-top>/unsigned-removal} (a workspace for a specific, difficult
+task that's going to affect lots of source and take a long time, and
+so best done in its own workspace without the interference of other
+work you're doing. Also, you can commit just this one large change,
+separate from all the other changes).
-@item Misc
-@itemize @minus
@item
-Configure: initial porting from fsf, Chuck Thompson; conversion to autoconf 2, much
rewriting, Martin Buchholz
+@file{<xsrc-top>/latest} (a copy of the latest sources on the trunk,
+i.e. the experimental version of XEmacs, with no patches in it;
+either update it periodically, by hand, or set up a cron job to do it
+automatically). Set it up so it can be built, and build it so you
+have a working XEmacs. (Building it might also go into the cron job.)
+
+This workspace serves a number of purposes:
+@enumerate
@item
-Most initialization-related code: Ben Wing
+You always have a recent version of XEmacs you can compare
+against when something you're working on breaks. It's true
+that you can do this with cvs diff, but when you need to do
+some serious investigation, this method just fails.
+@item
+You (almost) always have a working, up-to-date executable that
+can be used when your executable is crashing and you need to
+keep developing it, or when you need an `xemacs' to build
+packages, etc.
+@item
+When creating new workspaces, you can just copy the `latest'
+workspace using GNU @code{cp -a}. You have all the .elc's built,
+everything else probably configured, any spare files in place
+(e.g. some annoying xpm.dll under Windows, etc.).
+@end enumerate
+
@item
-Internals manual, much of Lisp manual: Ben Wing
+@file{<xsrc-top>/latest-stable/} (equivalent to @file{<xsrc-top>/latest/},
but
+for the Stable branch of XEmacs, rather than the Experimental branch
+of XEmacs). This may or may not be necessary depending on how much
+development you do of the stable branch.
+@end itemize
+
@item
-FSF synching: initial sync with FSF 19, Richard Mlynarik, further work, Ben Wing
+@file{<xsrc-top>/xemacsweb} is a workspace for working on the XEmacs
+web site.
+
+@item
+@file{<xsrc-top>/in-patches} for patches received from email and saved
+to files.
+
+@item
+@file{<xsrc-top>/out-patches} for locally-generated patches to be sent
+to @email{xemacs-patches@(a)xemacs.org}. Less useful now that the
+patcher util has been developed.
+
+@item
+@file{<xsrc-top>/build}, for build trees when compiling and testing XEmacs with
+various configuration options turned off and on. The scripts in
+xemacs-builds/ben (see below) can be used to automate building XEmacs
+workspaces with many different configuration options and automatically
+filtering out the normal output so that you see only the abnormal
+output.
+
+@item
+@file{<xsrc-top>/xemacs-builds}, for the xemacs-builds module, which you need
+to check out separately in CVS. This contains scripts used for building
+XEmacs, automating and simplifying using CVS, etc. Under various
+people's directories are their own build and other scripts. The
+currently most-maintained scripts are under ben/, where there are easily
+configurable scripts that can be used to easily build any workspace
+(esp. if you've more or less followed the layout presented above)
+unattended, with one or more configuration states (there's a
+pre-determined list of the most useful, but it's easy to change). The
+output is filtered and split up in various ways so that you can identify
+which output came from where, and you can see the output either full or
+with all "normal" output except occasional status messages filtered so
+that you only see the abnormal ones.
@end itemize
-@end table
-@subheading SUPPORT
+@node Q1.5.5, Q1.6.1, Q1.5.4, Introduction
+@unnumberedsubsec Q1.5.5: What's the basic layout of the code?
-Currently, support duties are handled by many different people.
+The file @file{configure} is a shell script to acclimate XEmacs to the
+oddities of your processor and operating system. It will create a
+file named @file{Makefile} (a script for the @file{make} program), which helps
+automate the process of building and installing emacs. See INSTALL
+for more detailed information.
+
+The file @file{configure.in} is the input used by the autoconf program to
+construct the @file{configure} script. Since XEmacs has configuration
+requirements that autoconf can't meet, @file{configure.in} uses an unholy
+marriage of custom-baked configuration code and autoconf macros; it
+may be wise to avoid rebuilding @file{configure} from @file{configure.in} when
+possible.
-Release managers have been
+The file @file{Makefile.in} is a template used by @file{configure} to create
+@file{Makefile}.
-@itemize @minus
+There are several subdirectories:
+
+@enumerate
@item
-Stephen Turnbull (April 2001 - present, 21.x - 21.x?)
+@file{src} holds the C code for XEmacs (the XEmacs Lisp interpreter and its
+primitives, the redisplay code, and some basic editing functions).
@item
-Vin Shelton?
+@file{lisp} holds the XEmacs Lisp code for XEmacs (most everything else).
@item
-Steve Youngs (July 2002 - present??, 21.x - 21.x?)
+@file{lib-src} holds the source code for some utility programs for use by
+or with XEmacs, like movemail and etags.
@item
-Martin Buchholz (December 1998 - May 2001, 21.x - 21.x?)
+@file{etc} holds miscellaneous architecture-independent data files
+XEmacs uses, like the tutorial text. The contents of the @file{lisp},
+@file{info} and @file{man} subdirectories are architecture-independent too.
@item
-Steve Baur (early 1997 - November 1998, 19.15 - 21.0)
+@file{lwlib} holds the C code for the X toolkit objects used by XEmacs.
@item
-Chuck Thompson (June 1994 - September 1996, 19.11 - 19.14)
+@file{info} holds the Info documentation tree for XEmacs.
@item
-Jamie Zawinski (April 1991 - June 1994, 19.0 - 19.10)
-@end itemize
+@file{man} holds the source code for the XEmacs online documentation.
+@item
+@file{nt} holds files used compiling XEmacs under Microsoft Windows.
+@end enumerate
-The recent overlapping dates are intentional, since two or three trees
-are maintained simultaneously at any point.
+@unnumberedsec 1.6: Politics (XEmacs vs. GNU Emacs)
-Other major support work:
+@node Q1.6.1, Q1.6.2, Q1.5.5, Introduction
+@unnumberedsubsec Q1.6.1: What is GNU Emacs?
-@itemize @minus
-@item
-Adrian Aichner wrote and maintains the web site.
-@item
-Stephen Turnbull has produced many of the beta and semi-stable releases
-and has attempted to be the "face" of XEmacs on the newsgroups and
-mailing lists.
+GNU Emacs and XEmacs are related open-source text editors. Both
+derive from GNU Emacs version 18; the split between the two happened
+in 1991 (for comparison, the oldest versions of GNU Emacs date from
+1984). For information on GNU Emacs, see
+@uref{http://www.gnu.org/software/emacs/emacs.html}.
+
+@node Q1.6.2, Q1.6.3, Q1.6.1, Introduction
+@unnumberedsubsec Q1.6.2: How does XEmacs differ from GNU Emacs?
+
+For a detailed description of the differences between GNU Emacs and
+XEmacs and a detailed history of XEmacs, check out the
+@example
+@uref{http://www.xemacs.org/About/XEmacsVsGNUemacs.html, NEWS file}
+@end example
+
+@table @strong
+@item User-Visible Editing Features
+XEmacs in general tries hard to conform to exist user-interface
+standards, and to work "out-of-the-box" without the need for obscure
+customization changes. GNU Emacs, particularly version 21, has gotten
+better about this (in many cases by copying the XEmacs behavior!), but
+still has some weirdnesses. For example, the standard method of
+selecting text using the Shift key works out-of-the-box in XEmacs.
+
+XEmacs has a built-in toolbar. Four toolbars can actually be configured
+simultaneously: top, bottom, left, and right toolbars.
+
+XEmacs has vertical and horizontal scrollbars. Unlike in GNU Emacs 19
+(which provides a primitive form of vertical scrollbar), these are true
+toolkit scrollbars. A look-alike Motif scrollbar is provided for those
+who don't have Motif. (Even for those who do, the look-alike may be
+preferable as it is faster.)
+
+XEmacs has buffer tabs along the top of the frame (although the
+position can be changed) that make it very easy to switch buffers.
+
+The menubar under XEmacs is better-designed, with more thought put into
+it.
+
+XEmacs can ask questions using popup dialog boxes. Any command executed
+from a menu will ask yes/no questions with dialog boxes, while commands
+executed via the keyboard will use the minibuffer.
+
+XEmacs under MS Windows provides uses the standard file-dialog box for
+opening and saving files. Standard menu-accelerator behavior can easily
+be enabled using the Options menu, and integrates well into the existing
+keymap.
+
+XEmacs has (still experimental) support for widgets of various sorts --
+buttons, text boxes, sliders, progress bars, etc. A progress bar is
+used in font lock to show the progress.
+
+Experimental support for drag-and-drop protocols is provided from
+XEmacs 21.
+
+@item General Platform Support
+If you're running on a machine with audio hardware, you can specify
+sound files for XEmacs to play instead of the default X beep. See the
+documentation of the function load-sound-file and the variable
+sound-alist. XEmacs also supports the network sound protocols NAS and
+EsounD.
+
+XEmacs 21 supports database protocols with LISP bindings, currently
+including Berkeley DB, LDAP, and PostgreSQL (21.2 only).
+
+XEmacs 20 and 21 support the Canna, Wnn, and SJ3 Japanese input method
+servers directly, as well as through the X Input Method (XIM)
+protocol. GNU Emacs 20 supports only the XIM protocol. Both Emacsen
+support the Quail family of input methods (implemented in LISP) for many
+languages.
+
+XEmacs provides support for ToolTalk on systems that have
+it.
+
+@item Packaged LISP Libraries
+Many more packages are provided standard with XEmacs than with GNU Emacs
+19 or 20.
+
+XEmacs 21 supports an integrated package management system which uses
+EFS to download, then automatically install prebuilt LISP
+libraries. This allows XEmacs users much more straightforward access to
+the "latest and greatest" version of any given library.
+
+We are working on a standard method for enabling, disabling and
+otherwise controlling packages, which should make them very easy to use.
+
+@item LISP Programming
+From XEmacs 20 on, characters are a separate type. Characters can be
+converted to integers (and many integers can be converted to
+characters), but characters are not integers. GNU Emacs 19, XEmacs 19,
+Mule 2.3 (an extensive patch to GNU Emacs 18.55 and 19.x), and GNU Emacs
+20 (incorporating Mule 3 and later Mule 4) represent them as integers.
+
+From XEmacs 20 on, the buffer is treated as an array of characters, and
+the representation of buffer text is not exposed to LISP. The GNU Emacs
+20 functions like buffer-as-multibyte are not supported.
+
+In XEmacs, events are first-class objects. GNU Emacs 19 represents them
+as integers, which obscures the differences between a key gesture and
+the ancient ASCII code used to represent a particular overlapping subset
+of them.
+
+In XEmacs, keymaps are first-class opaque objects. GNU Emacs 19
+represents them as complicated combinations of association lists and
+vectors. If you use the advertised functional interface to manipulation
+of keymaps, the same code will work in XEmacs, GNU Emacs 18, and GNU
+Emacs 19; if your code depends on the underlying implementation of
+keymaps, it will not.
+
+XEmacs uses "extents" to represent all non-textual aspects of buffers;
+GNU Emacs 19 uses two distinct objects, "text properties" and
+"overlays", which divide up the functionality between them. Extents are
+a superset of the union of the functionality of the two GNU Emacs data
+types. The full GNU Emacs 19 interface to text properties and overlays
+is supported in XEmacs (with extents being the underlying
+representation).
+
+Extents can be made to be copied into strings, and then restored, by
+kill and yank. Thus, one can specify this behavior on either "extents"
+or "text properties", whereas in GNU Emacs 19 text properties always
+have this behavior and overlays never do.
+
+@item Window System Programming Interface
+XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which makes
+it be a more well-behaved X citizen (and also improves portability). A
+result of this is that it is possible to include other Xt "Widgets" in
+the XEmacs window. Also, XEmacs understands the standard Xt command-line
+arguments.
+
+XEmacs supports Motif applications, generic Xt (e.g. Athena)
+applications, and raw Xlib applications. An XEmacs variant which
+supports GTK+ is available (integration as an option in the XEmacs
+mainline is planned for XEmacs 22), although code to take advantage of
+the support is as yet scarce.
+
+An XEmacs frame can be placed within an "external client widget" managed
+by another application. This allows an application to use an XEmacs
+frame as its text pane rather than the standard Text widget that is
+provided with Motif or Athena.
+
+@item Community Participation
+Joining the XEmacs development team is simple. Mail to
+@email{xemacs-beta@(a)xemacs.org, XEmacs Developers}, and you're in! (If
+you want to be, of course. You're also welcome to just post
+development-related questions and bug reports.) The GNU Emacs
+development team and internal mailing lists are still by invitation
+only.
+
+The "bleeding edge" of mainline XEmacs development is available by
+anonymous CVS as are some subsidiary branches (check out the xemacs-gtk
+module for the latest in GUI features!)
+
+Development and maintenance of Lisp libraries is separated from the core
+editor development at a fairly low level. This provides better
+modularization and a better division of responsibility between external
+library maintainers and the XEmacs core development team. Even for
+packages the size of Gnus, XEmacs users normally have access to a
+pre-built version within a few weeks of a major release, and minor
+updates often within days.
+
+CVS commit authority is broadly dispersed. Recognized maintainers of
+LISP libraries who are willing to maintain XEmacs packaged versions
+automatically qualify for CVS accounts for their packages.
+@end table
+
+@node Q1.6.3, Q1.6.4, Q1.6.2, Introduction
+@unnumberedsubsec Q1.6.3: How much does XEmacs differ?
+
+RMS has asserted at times that XEmacs is merely a "patch" on top of
+GNU Emacs (@pxref{Q1.6.4}). In fact, probably not more than 5% of the
+code, if that, remains unchanged, and nearly 14 years of work has gone
+into XEmacs at this point. (GNU Emacs itself is only than 20 years
+old, and thus XEmacs has existed as a separate product for over 2/3 of
+the lifespan of GNU Emacs.) As a point of comparison, XEmacs 21.5 has
+perhaps 65,000 more lines of C code than GNU Emacs 21.2.
+
+However, the XEmacs developers strive to keep their code compatible with
+GNU Emacs, especially on the Lisp level. Much effort goes into
+"synching" the XEmacs Elisp code with recent GNU Emacs releases so as to
+benefit from GNU Emacs development work. (In contrast, almost no code
+from XEmacs has made it into GNU Emacs, and in fact the GNU Emacs
+developers are instructed by RMS not to even look at XEmacs source code!
+This stems from self-imposed licensing restrictions on the part of GNU
+Emacs -- and almost certainly out of hostility, as well.)
+
+@node Q1.6.4, Q1.6.5, Q1.6.3, Introduction
+@unnumberedsubsec Q1.6.4: Is XEmacs "GNU"?
+
+RMS insists on the term "GNU XEmacs" and maintains that
+
+@quotation
+XEmacs is GNU software because it's a modified version of a
+GNU program. And it is GNU software because the FSF is the copyright
+holder for most of it, and therefore the legal responsibility for
+protecting its free status falls on us whether we want it or not. This
+is why the term "GNU XEmacs" is legitimate.
+@end quotation
+
+In fact, FSF is @emph{not} the copyright holder for most of the code,
+as very little unmodified FSF code remains (@pxref{Q1.6.3}).
+
+Furthermore, RMS's assertion that XEmacs is "GNU" seems rather bizarre
+to the XEmacs developers given RMS's hostility and general lack of
+interest in cooperation. "GNU" software in general is part of the GNU
+Project, is distributed by it on their FTP site, and receives support
+(or at least cooperation), as well as implicit endorsement, from it.
+The GNU Project, however, has never supported XEmacs and never
+distributed XEmacs, and RMS's hostility is the farthest thing possible
+from an endorsement. In fact, the GNU Project distributes a number of
+non-GNU software projects on the FSF web site, but again XEmacs is not
+one of them.
+
+@node Q1.6.5, Q1.6.6, Q1.6.4, Introduction
+@unnumberedsubsec Q1.6.5: What is the correct way to refer to XEmacs and GNU Emacs?
+
+Unfortunately even the naming of these two applications has become
+politicized. Much of this stems from RMS, who has a history of
+politicizing similar issues. (Compare the controversy over "Lignux"
+and "GNU/Linux".) We would prefer that the terms "XEmacs" and
"GNU
+Emacs" be used, which are neutral and acceptable to most people. RMS,
+however, is not willing to accept these terms. He insists that, if
+his product is called "GNU Emacs", then ours must be called "GNU
+XEmacs". (For our opinion of this term, @xref{Q1.6.4}.) On the other
+hand, if our product is to be called "XEmacs", as we prefer, then his
+product must simply be called "Emacs". The intent of this seems
+clear: RMS wants to make sure the names reflect his view that his
+version is the "real" Emacs and ours is merely a derivative,
+second-class product (@pxref{Q1.6.3}).
+
+The XEmacs developers hope that you will use the neutral terms
+"XEmacs" and "GNU Emacs" for these two specific products.
"Emacs", on
+the other hand, is a generic term for a class of programmable text
+editors with a similar look-and-feel, and usually a Lisp-based
+extension language. These trace themselves back to early editors such
+as EINE, ZWEI, ZMACS and Multics Emacs. @xref{A History of Emacs,,,
+internals, XEmacs Internals Manual}.
+
+We also call upon RMS, in the spirit of furthering cooperation, to
+stop politicizing this issue and use the neutral terms "XEmacs" and
+"GNU Emacs". We have already acceded to RMS' wishes in this respect,
+and we expect him to do the same. (In the past, the XEmacs developers
+often used the terms "FSF Emacs" or "FSFmacs" or
"RMSmacs" in
+reference to GNU Emacs; these terms were apparently modeled after RMS'
+own usage of "Gosmacs" and "Gosling Emacs" in reference to
Unipress
+Emacs, produced by James Gosling. RMS, however, considers such terms
+to be insulting, so we refrain from using them as much as possible in
+preference to GNU Emacs.)
+
+@node Q1.6.6, Q1.7.1, Q1.6.5, Introduction
+@unnumberedsubsec Q1.6.6: Why haven't XEmacs and GNU Emacs merged?
+
+There are currently irreconcilable differences in the views about
+technical, programming, design, organizational and legal matters
+between Richard Stallman (RMS), the author and leader of the GNU Emacs
+project, and the XEmacs development team which provide little hope for
+a merge to take place in the short-term future. There have been
+repeated attempts at merging by all of the major XEmacs developers,
+starting from the early days of Lucid Emacs (in 1991), but they have
+all failed. RMS has very strong views about how GNU Emacs should be
+structured and how his project should be run, and during the repeated
+merge efforts has never demonstrated any realistic interest in
+sufficiently compromising or ceding control to allow a middle ground
+to be found. The basic problem seems to be the very different goals
+of RMS and the XEmacs project. The primary goals of the XEmacs
+project are technical and organizational -- we want to create the best
+editor possible, and to make it as easy as possible for people around
+the world to contribute. The primary goals of RMS, on the other hand,
+are political, and GNU Emacs, and any potential merge efforts with
+XEmacs, are strictly subservient to these goals. In fact, in many
+ways RMS sees GNU Emacs as the "poster child" of his aims, the one
+program in the GNU project that above all others must set an example
+to the world. (This has to do with the fact that GNU Emacs was the
+first program in the GNU project, and the only one that he is still
+personally involved with on a day-to-day basis.) Given his goals, his
+position is completely reasonable -- but unfortunately, makes any
+merge impossible.
+
+From the XEmacs perspective, the most intractable issues appear to be
+legal and organizational, specifically:
+
+@itemize @bullet
+@item
+RMS requires "legal papers" to be signed for all contributions of code
+to GNU Emacs over 10 lines or so, transferring the copyright and all
+legal rights to the code to the Free Software Foundation. XEmacs does
+not and has never required this, since it has the practical effect of
+discouraging individual and in particular corporate contributions --
+corporations will almost never sign away their legal rights to code
+since it makes it impossible to reuse the code in any product that
+whose license is not compatible with the GNU General Public License.
+Since RMS has shown no inclination to compromise on this issue, a
+merge would require that most of the existing XEmacs code would need
+to be thrown away and rewritten -- something the XEmacs developers are
+understandably reluctant to do.
+
+@item
+A repeated stumbling block in the merge talks has been the issue of
+organizational control over the resulting product. RMS has made it
+clear that he intends to have final say over design issues in a merged
+Emacs. Unfortunately, RMS and the XEmacs developers have repeatedly
+clashed over design decisions, and RMS' insistence on getting his way
+in such disagreements was the very reason for the split in the first
+place. This same issue has come up again and again in merge talks and
+we have never been able to come to a satisfactory resolution. To the
+extent that RMS is willing to compromise at all, it appears to be of a
+purely political rather than technical nature -- "If we support this
+feature of yours, we also get to support this other feature of mine."
+The XEmacs developers cannot see how such a process would lead to
+anything but a mess of incompatible things hodgepodged together.
+
+@item
+Because of the years of separate development, distinct and
+incompatible interfaces have developed and merging would be extremely
+difficult even with the above non-technical issues resolved. The
+problem has been exacerbated by the issue of legal papers -- because
+XEmacs code is not "kosher" from RMS' perspective, he discourages
+developers from even looking at it out of legal concerns. Although it
+is still possible to read the XEmacs documentation and run the
+program, the practical effect of this prohibition has been to strongly
+discourage code-sharing and cooperative development -- although a
+great deal of GNU Emacs code has been incorporated into XEmacs,
+practically none has gone the other direction.
+@end itemize
+
+If you have a comment to add regarding the merge, it is a good idea to
+avoid posting to the newsgroups, because of the very heated flamewars
+that often result. Mail your questions to
+@email{xemacs-beta@(a)xemacs.org} and @email{emacs-devel@(a)gnu.org}.
+
+@unnumberedsec 1.7: External Packages
+
+@node Q1.7.1, Q1.7.2, Q1.6.6, Introduction
+@unnumberedsubsec Q1.7.1: What is the package system?
+
+In order to reduce the size and increase the maintainability of
+XEmacs, the majority of the Elisp packages that came with previous
+releases 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
+the right place. On startup XEmacs will find them, set up the load
+path correctly, install autoloads, etc, etc.
+
+(a)xref{Q2.1.1}, for more info on how to download and install the packages.
+
+@node Q1.7.2, Q1.7.3, Q1.7.1, Introduction
+@unnumberedsubsec Q1.7.2: Which external packages are there?
+
+@subheading Normal Packages
+
+A very broad collection of elisp packages.
+
+@table @asis
+@item Sun
+Support for Sparcworks.
+
+@item ada
+Ada language support.
+
+@item apel
+A Portable Emacs Library. Used by XEmacs MIME support.
+
+@item auctex
+Basic TeX/LaTeX support.
+
+@item bbdb
+The Big Brother Data Base: a rolodex-like database program.
+
+@item build
+Build XEmacs from within (UNIX, Windows).
+
+@item c-support
+Basic single-file add-ons for editing C code.
+
+@item calc
+Emacs calculator.
+
+@item calendar
+Calendar and diary support.
+
+@item cc-mode
+C, C++, Objective-C, Java, CORBA IDL, Pike and AWK language support.
+
+@item clearcase
+New Clearcase Version Control for XEmacs (UNIX, Windows).
+
+@item clearcase
+Support for the Clearcase version control system.
+
+@item cookie
+"Fortune cookie"-style messages. Includes Spook (suspicious phrases)
+and Yow (Zippy quotes).
+
+@item crisp
+Crisp/Brief emulation.
+
+@item debug
+GUD, gdb, dbx debugging support.
+
+@item dictionary
+Interface to RFC2229 dictionary servers.
+
+@item dired
+The DIRectory EDitor is for manipulating, and running commands on
+files in a directory.
+
+@item docbookide
+DocBook editing support.
+
+@item ecb
+Emacs source code browser.
+
+@item ecrypto
+Crypto functionality in Emacs Lisp.
+
+@item edebug
+An Emacs Lisp debugger.
+
+@item ediff
+Interface over GNU patch.
+
+@item edit-utils
+Miscellaneous editor extensions, you probably need this.
+
+@item edt
+DEC EDIT/EDT emulation.
+
+@item efs
+Treat files on remote systems the same as local files.
+
+@item eieio
+Enhanced Implementation of Emacs Interpreted Objects.
+
+@item elib
+Portable Emacs Lisp utilities library.
+
+@item emerge
+Another interface over GNU patch.
+
+@item erc
+ERC is an Emacs InternetRelayChat client.
+
+@item escreen
+Multiple editing sessions withing a single frame (like screen).
+
+@item eshell
+Command shell implemented entirely in Emacs Lisp.
+
+@item ess
+ESS: Emacs Speaks Statistics.
+
+@item eterm
+Terminal emulation.
+
+@item eudc
+Emacs Unified Directory Client (LDAP, PH).
+
+@item footnote
+Footnoting in mail message editing modes.
+
+@item forms
+Forms editing support (obsolete, use Widget instead).
+
+@item fortran-modes
+Fortran support.
+
+@item fortran-modes
+Fortran language support.
+
+@item frame-icon
+Set up mode-specific icons for each frame under XEmacs.
+
+@item fsf-compat
+GNU Emacs compatibility files.
+
+@item games
+Tetris, Sokoban, and Snake.
+
+@item general-docs
+General documentation. Presently, empty.
+
+@item gnats
+XEmacs bug reports.
+
+@item gnus
+The Gnus Newsreader and Mailreader.
+
+@item haskell-mode
+Haskell editing support.
+
+@item hm--html-menus
+HTML editing.
+
+@item hyperbole
+Hyperbole: The Everyday Info Manager.
+
+@item ibuffer
+Advanced replacement for buffer-menu.
+
+@item idlwave
+Editing and Shell mode for the Interactive Data Language.
+
+@item igrep
+Enhanced front-end for Grep.
+
+@item ilisp
+Front-end for interacting with Inferior Lisp (external lisps).
+
+@item ispell
+Spell-checking with GNU ispell.
+
+@item jde
+Integrated Development Environment for Java.
+
+@item liece
+IRC (Internet Relay Chat) client for Emacs. Note, this package is
+deprecated and will be removed, use riece instead.
+
+@item mail-lib
+Fundamental lisp files for providing email support.
+
+@item mailcrypt
+Support for messaging encryption with PGP.
+
+@item mew
+Messaging in an Emacs World; a MIME-based email program.
+
+@item mh-e
+The XEmacs Interface to the MH Mail System.
+
+@item mine
+Elisp implementation of the game 'Minehunt'.
+
+@item misc-games
+Other amusements and diversions.
+
+@item mmm-mode
+Support for Multiple Major Modes within a single buffer.
+
+@item net-utils
+Miscellaneous Networking Utilities.
+
+@item ocaml
+Objective Caml editing support.
+
+@item oo-browser
+OO-Browser: The Multi-Language Object-Oriented Code Browser.
+
+@item ocaml
+Objective Caml editing support.
+
+@item os-utils
+Miscellaneous single-file O/S utilities, for printing, archiving,
+compression, remote shells, etc.
+
+@item pc
+PC style interface emulation.
+
+@item pcl-cvs
+CVS frontend.
+
+@item pcomplete
+Provides programmatic completion.
+
+@item perl-modes
+Perl support.
+
+@item pgg
+Emacs interface to various PGP implementations.
+
+@item prog-modes
+Support for various programming languages.
+
+@item ps-print
+Printing functions and utilities.
+
+@item psgml
+Validated HTML/SGML editing.
+
+@item psgml-dtds
+A collection of DTDs for psgml. Note that this package is deprecated
+and will be removed in the future, most likely Q2/2003. Instead of using
+this, you should install needed DTDs yourself.
+
+@item python-modes
+Python language support.
+
+@item reftex
+Emacs support for LaTeX cross-references, citations.
+
+@item riece
+IRC (Internet Relay Chat) client for Emacs.
+
+@item rmail
+An obsolete Emacs mailer. If you do not already use it don't start.
+
+@item ruby-modes
+Ruby support.
+
+@item sasl
+Simple Authentication and Security Layer (SASL) library.
+
+@item scheme
+Front-end support for Inferior Scheme.
+
+@item semantic
+Semantic bovinator (Yacc/Lex for XEmacs). Includes Senator.
+
+@item sgml
+SGML/Linuxdoc-SGML editing.
+
+@item sh-script
+Support for editing shell scripts.
+
+@item sieve
+Manage Sieve email filtering scripts.
+
+@item slider
+User interface tool.
+
+@item sml-mode
+SML editing support.
+
+@item sounds-au
+XEmacs Sun sound files.
+
+@item sounds-wav
+XEmacs Microsoft sound files.
+
+@item speedbar
+Provides a separate frame with convenient references.
+
+@item strokes
+Mouse enhancement utility.
+
+@item supercite
+An Emacs citation tool for News & Mail messages.
+
+@item texinfo
+XEmacs TeXinfo support.
+
+@item text-modes
+Miscellaneous support for editing text files.
+
+@item textools
+Miscellaneous TeX support.
+
+@item time
+Display time & date on the modeline.
+
+@item tm
+Emacs MIME support. Not needed for gnus >= 5.8.0.
+
+@item tooltalk
+Support for building with Tooltalk.
+
+@item tpu
+DEC EDIT/TPU support.
+
+@item tramp
+Remote shell-based file editing. This is similar to EFS or Ange-FTP,
+but works with rsh/ssh and rcp/scp.
+
+@item vc
+Version Control for Free systems.
+
+@item vc-cc
+Version Control for ClearCase (UnFree) systems.
+
+@item vhdl
+Support for VHDL.
+
+@item view-process
+A Unix process browsing tool.
+
+@item viper
+VI emulation support.
+
+@item vm
+An Emacs mailer.
+
+@item w3
+A Web browser.
+
+@item x-symbol
+Semi WYSIWYG for LaTeX, HTML, etc, using additional fonts.
+
+@item xemacs-base
+Fundamental XEmacs support, you almost certainly need this.
+
+@item xemacs-devel
+XEmacs Lisp developer support. This package contains utilities for
+supporting Lisp development. It is a single-file package so it may be
+tailored.
+
+@item xlib
+Emacs interface to X server.
+
+@item xslide
+XSL editing support.
+
+@item xslt-process
+A minor mode for (X)Emacs which allows running an XSLT processor on a
+buffer.
+
+@item xwem
+X Emacs Window Manager.
+
+@item zenirc
+ZENIRC IRC Client.
+@end table
+
+@subheading Mule Support (mule)
+
+MULti-lingual Enhancement. Support for world scripts such as
+Latin, Arabic, Cyrillic, Chinese, Japanese, Greek, Hebrew etc.
+To use these packages your XEmacs must be compiled with Mule
+support.
+
+@table @asis
+@item edict
+MULE: Lisp Interface to EDICT, Kanji Dictionary.
+
+@item egg-its
+MULE: Wnn (4.2 and 6) support. SJ3 support.
+
+@item latin-unity
+MULE: find single ISO 8859 character set to encode a buffer.
+
+@item latin-unity
+Unify character sets in a buffer. When characters belong to disjoint
+character sets, this attempts to translate the characters so
+that they belong to one character set. If the buffer coding system is
+not sufficient, this suggests different coding systems.
+
+@item leim
+MULE: Quail. All non-English and non-Japanese language support.
+
+@item locale
+MULE: Localized menubars and localized splash screens.
+
+@item lookup
+Dictionary support. (This isn't an English dictionary program)
+
+@item mule-base
+MULE: Basic Mule support, required for building with Mule.
+
+@item mule-ucs
+MULE: Extended coding systems (including Unicode) for XEmacs.
+
+@item mule-ucs
+Extended coding systems (including Unicode) for XEmacs.
+
+@item skk
+Another Japanese Language Input Method. Can be used without a
+separate process running as a dictionary server.
+@end table
+
+@node Q1.7.3, Q1.7.4, Q1.7.2, Introduction
+@unnumberedsubsec Q1.7.3: Do I need to have the packages to run XEmacs?
+
+Strictly speaking, 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_.
+
+@node Q1.7.4, Q1.8.1, Q1.7.3, Introduction
+@unnumberedsubsec Q1.7.4: Is there a way to find which package has particular
functionality?
+
+If you want to find out which package contains the functionality you
+are looking for, use @kbd{M-x package-get-package-provider}, and give it a
+symbol that is likely to be in that package.
+
+For example, if some code you want to use has a @code{(require 'thingatpt)}
+in it:
+
+@example
+ M-x package-get-package-provider RET thingatpt RET
+@end example
+
+which will return something like: @samp{(fsf-compat "1.08").}
+
+@unnumberedsec 1.8: Internationalization
+
+@node Q1.8.1, Q1.8.2, Q1.7.4, Introduction
+@unnumberedsubsec Q1.8.1: What is the status of internationalization support aka MULE
(including Asian language support)?
+
+Both the stable and development versions of XEmacs include
+internationalization support (aka MULE). MULE currently (21.4) works on
+UNIX and Linux systems. It is possible to build with MULE on Windows
+systems, but if you really need MULE on Windows, it is recommended that
+you build and use the development (21.5) version, and deal with the
+instability of the development tree. Binaries compiled without MULE
+support run faster than MULE capable XEmacsen.
+
+@node Q1.8.2, Q1.8.3, Q1.8.1, Introduction
+@unnumberedsubsec Q1.8.2: How can I help with internationalization?
+
+If you would like to help, you may want to join the
+@email{xemacs-mule@(a)xemacs.org} mailing list. Especially needed are
+people who speak/write languages other than English, who are willing to
+use XEmacs/MULE regularly, and have some experience with Elisp.
+
+Translations of the TUTORIAL and man page are welcome, and XEmacs does
+support multilingual menus, but we have few current translations.
+
+(a)xref{Q1.5.2, How do I become a Beta Tester?}.
+
+@node Q1.8.3, Q1.8.4, Q1.8.2, Introduction
+@unnumberedsubsec Q1.8.3: How do I type non-ASCII characters?
+
+(a)xref{Q3.0.6, How can you type in special characters in XEmacs?}, in
+part 3 of this FAQ, for some simple methods that also work in non-MULE
+builds of XEmacs (but only for one-octet coded character sets, and
+mostly for ISO 8859/1). Many of the methods available for Cyrillic
+((a)pxref{Q1.8.7, How about Cyrillic modes?}) work without MULE. MULE
+has more general capabilities. @xref{Q1.8.5, Please explain the
+various input methods in MULE/XEmacs}.
+
+(a)xref{Q4.0.8, How do I display non-ASCII characters?}, which covers
+display of non-ASCII characters.
+
+@node Q1.8.4, Q1.8.5, Q1.8.3, Introduction
+@unnumberedsubsec Q1.8.4: Can XEmacs messages come out in a different language?
+
+The message-catalog support was written but is badly bit-rotted. XEmacs
+20 and 21 did @emph{not} support it, and early releases of XEmacs 22
+will not either.
+
+However, menubar localization @emph{does} work. To enable it, add to
+your @file{Emacs} file entries like this:
+
+@example
+Emacs*XlwMenu.resourceLabels: True
+Emacs*XlwMenu.file.labelString: Fichier
+Emacs*XlwMenu.openInOtherWindow.labelString: In anderem Fenster oeffnen
+@end example
+
+The name of the resource is derived from the non-localized entry by
+removing punctuation and capitalizing as above.
+
+@node Q1.8.5, Q1.8.6, Q1.8.4, Introduction
+@unnumberedsubsec Q1.8.5: Please explain the various input methods in MULE/XEmacs
+
+Mule supports a wide variety of input methods. There are three basic
+classes: Lisp implementations, generic platform support, and library
+interfaces.
+
+@emph{Lisp implementations} include Quail, which provides table-driven input
+methods for almost all the character sets that Mule supports (including
+all of the ISO 8859 family, the Indic languages, Thai, and so on), and
+SKK, for Japanese. (SKK also supports an interface to an external
+"dictionary server" process.) Quail supports both typical
"dead-key"
+methods (eg, in the "latin-1-prefix" method, @kbd{" a} produces ä,
LATIN
+SMALL LETTER A WITH DIAERESIS), and the complex dictionary-based phonetic
+methods used for Asian ideographic languages like Chinese.
+
+Lisp implementations can be less powerful (but they are not perceptibly
+inefficient), and of course are not portable to non-Emacs applications.
+The incompatibility can be very annoying. On the other hand, they
+require no special platform support or external libraries, so if you can
+display the characters, Mule can input them for you and you can edit,
+anywhere.
+
+@emph{Generic platform support} is currently limited to the X Input
+Method (XIM) framework, although support for MSIME (for MS Windows) is
+planned, and IIIMF (Sun's Internet-Intranet Input Method Framework)
+support is extremely desirable. XIM is enabled at build time by use of
+the @samp{--with-xim} flag to @code{configure}. For use of XIM, see
+your platform documentation. However, normally the input method you use
+is specified via the @samp{LANG} and @samp{XMODIFIERS} environment
+variables.
+
+Of course, input skills are portable across most applications. However,
+especially in modern GUI systems the habit of using bucky bits has
+fallen into sad disuse, and many XIM systems are poorly configured for
+use with Emacs. For example, the kinput2 input manager (a separate
+process providing an interface between Japanese dictionary servers such
+as Canna and Wnn, and the application) tends to gobble up keystrokes
+generating Meta characters. This means that to edit while using an XIM
+input method, you must toggle the input method off every time you want
+to use @kbd{M-f}. Your mileage may vary.
+
+@emph{Library interfaces} are most common for Japanese, although Wnn
+supports Chinese (traditional and simplified) and Korean. There are
+Chinese and Korean input servers available, but we do not know of any
+patches for XEmacs to use them directly. You can use them via
+IM-enabled terminals, by manipulating the terminal coding systems. We
+describe only the Japanese-oriented systems here. The advantage of
+these systems is that they are very powerful, and on platforms where
+they are available there is typically a wide range of applications that
+support them. Thus your input skills are portable across applications.
+
+Mule provides built-in interfaces to the following input methods: Wnn4,
+Wnn6, Canna, and SJ3. These can be configured at build time. There are
+patches available (no URL, sorry) to support the SKK server, as well.
+Wnn and SJ3 use the @code{egg} user interface. The interface for Canna
+is specialized to Canna.
+
+Wnn supports Japanese, Chinese and Korean. It is made by OMRON and Kyôto
+University. It is a powerful and complex system. Wnn4 is free and Wnn6
+is not. Wnn uses grammatical hints and probability of word association,
+so in principle Wnn can be cleverer than other methods.
+
+Canna, made by NEC, supports only Japanese. It is a simple and powerful
+system. Canna uses only grammar, but its grammar and dictionary are
+quite sophisticated. So for standard modern Japanese, Canna seems
+cleverer than Wnn4. In addition, the UNIX version of Canna is free (now
+there is a Microsoft Windows version).
+
+SJ3, by Sony, supports only Japanese.
+
+Egg consists of following parts:
+
+@enumerate
@item
-Steve Youngs currently produces the beta releases (???).
+Input character Translation System (ITS) layer.
+It translates ASCII inputs to Kana/PinYin/Hangul characters.
+
@item
-Steve Youngs, Ville Skytta, and now Norbert Koch have taken turns
-maintaining the packages.
+Kana/PinYin/Hangul to Kanji transfer layer.
+The interface layer to network Kana-Kanji server (Wnn and Sj3).
+@end enumerate
+
+These input methods are modal. They have a raw (alphabet) mode, a
+phonetic input mode, and Kana-Kanji transfer mode. However there are
+mode-less input methods for Egg and Canna. @samp{boiled-egg} is a
+mode-less input method running on Egg. For Canna, @samp{canna.el} has a
+tiny boiled-egg-like command, @code{(canna-boil)}, and there are some
+boiled-egg-like utilities.
+
+Much of this information was provided by @email{morioka@(a)jaist.ac.jp,
+MORIOKA Tomohiko}.
+
+@node Q1.8.6, Q1.8.7, Q1.8.5, Introduction
+@unnumberedsubsec Q1.8.6: How do I portably code for MULE/XEmacs?
+
+MULE has evolved rapidly over the last few years, and the original third
+party patch (for GNU Emacs 19), GNU Emacs 20+, and XEmacs 20+ have quite
+different implementations. The APIs also vary although recent versions
+of XEmacs have tended to converge to the GNU Emacs standard.
+
+MULE implementations are going to continue to evolve. Both GNU Emacs
+and XEmacs are working hard on Unicode support, which will involve new
+APIs and probably variations on old ones. For XEmacs 22, the old ISO
+2022-based system for recognizing encodings will be replaced by a much
+more flexible system, which should improve accuracy of automatic coding
+detections, but will also involve new APIs.
+
+@email{morioka@(a)jaist.ac.jp, MORIOKA Tomohiko} writes:
+
+@quotation
+The application implementor must write separate code for these mule
+variants. [Please don't hesitate to report these variants to us; they
+are not, strictly speaking, bugs, but they give third-party developers
+the same kind of creepy-crawly feeling. We'll do what we can. -- Ed.]
+
+MULE and the next version of Emacs are similar but the symbols are very
+different---requiring separate code as well.
+
+Namely we must support 3 kinds of mule variants and 4 or 5 or 6 kinds of
+emacs variants... (;_;) I'm shocked, so I wrote a wrapper package called
+@code{emu} to provide a common interface. [There is an XEmacs package
+of APEL which provides much more comprehensive coverage. Be careful,
+however; APEL has problems of its own. -- Ed.]
+
+I have the following suggestions about dealing with mule variants:
+
+@itemize @bullet
@item
-Vin Shelton maintains the stable releases.
+@code{(featurep 'mule)} @code{t} on all mule variants
+
@item
-Testing - #### Norbert, Adrian, ???
+@code{(boundp 'MULE)} is @code{t} on only MULE. Maybe the next version
+of Emacs will not have this symbol.
+
+@item
+MULE has a variable @code{mule-version}. Perhaps the next version of
+Emacs will have this variable as well.
@end itemize
-Portraits and email of some of the major developers:
+Following is a sample to distinguish mule variants:
-@itemize @bullet
-@item @email{andy@(a)xemacs.org, Andy Piper}
-@html
-<br><img src="piper.png" alt="Portrait of Andy
Piper"><br>
-@end html
+@lisp
+(if (featurep 'mule)
+ (cond ((boundp 'MULE)
+ ;; for original Mule
+ )
+ ((string-match "XEmacs" emacs-version)
+ ;; for XEmacs with Mule
+ )
+ (t
+ ;; for next version of Emacs
+ ))
+ ;; for old emacs variants
+ )
+@end lisp
+@end quotation
-@item @email{ben@(a)xemacs.org, Ben Wing}
-@html
-<br><img src="ben.png" alt="Portrait of Ben
Wing"><br>
-@end html
+@node Q1.8.7, Q1.8.8, Q1.8.6, Introduction
+@unnumberedsubsec Q1.8.7: How about Cyrillic modes?
-@item @email{cthomp@(a)xemacs.org, Chuck Thompson}
-@html
-<br><img src="cthomp.png" alt="Portrait of Chuck
Thompson"><br>
-@end html
+@email{ilya@(a)math.ohio-state.edu, Ilya Zakharevich} writes:
-@item @email{hniksic@(a)xemacs.org, Hrvoje Niksic}
+@quotation
+There is a cyrillic mode in the file @file{mysetup.zip} in
+@iftex
+@*
+@end iftex
+@uref{ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs/}. This is a
+modification to @email{ava@(a)math.jhu.ed, Valery Alexeev's} @file{russian.el}
+which can be obtained from
+@end quotation
-@html
-<br><img src="hniksic.png" alt="Portrait of Hrvoje
Niksic"><br>
-@end html
+@uref{http://www.math.uga.edu/~valery/russian.el}.
-@item @email{jwz@(a)jwz.org, Jamie Zawinski}
-@html
-<br><img src="jwz.png" alt="Portrait of Jamie
Zawinski"><br>
-@end html
+@email{d.barsky@(a)ee.surrey.ac.uk, Dima Barsky} writes:
-@item @email{martin@(a)xemacs.org, Martin Buchholz}
-@html
-<br><img src="martin.png" alt="Portrait of Martin
Buchholz"><br>
-@end html
+@quotation
+There is another cyrillic mode for both GNU Emacs and XEmacs by
+@email{manin@(a)camelot.mssm.edu, Dmitrii
+(Mitya) Manin} at
+@iftex
-@item @email{mly@(a)adoc.xerox.com, Richard Mlynarik}
-@html
-<br><img src="mly.png" alt="Portrait of Richard
Mlynarik"><br>
-@end html
+@end iftex
+@uref{http://kulichki-lat.rambler.ru/centrolit/manin/cyr.el}.
+@c Link above, <
URL:http://camelot.mssm.edu/~manin/cyr.el> was dead.
+@c Changed to russian host instead
+@end quotation
-@item @email{stephen@(a)xemacs.org, Stephen Turnbull}
+@email{rebecca.ore@(a)op.net, Rebecca Ore} writes:
-@item @email{steve@(a)xemacs.org, Steve Baur}
-@html
-<br><img src="slb.png" alt="Portrait of Steve
Baur"><br>
-@end html
-@end itemize
+@quotation
+The fullest resource I found on Russian language use (in and out of
+XEmacs) is @uref{http://www.ibiblio.org/sergei/Software/Software.html}
+@end quotation
-Many other people have contributed to XEmacs; this is partially
-enumerated in the @samp{About XEmacs} option in the Help menu.
+@node Q1.8.8, Q1.8.9, Q1.8.7, Introduction
+@unnumberedsubsec Q1.8.8: Does XEmacs support Unicode?
-@node Q1.3.2, Q1.3.3, Q1.3.1, Introduction
-@unnumberedsubsec Q1.3.2: Who contributed to this version of the FAQ?
+To get Unicode support, you need a Mule-enabled XEmacs.
-The current version of this FAQ was created by @email{ben@(a)xemacs.org,
-Ben Wing}.
+21.5 has internal support for Unicode and supports it fully, although we
+don't yet use it as the internal encoding.
+
+21.4 supports Unicode partially -- as an external encoding for files,
+processes, and terminals, but without font support. @xref{Q1.8.9, How
+does XEmacs display Unicode?}. To get Unicode support in 21.4,
+install Mule-UCS from packages in the usual way, and put
+
+@example
+(require 'un-define)
+(set-coding-priority-list '(utf-8))
+(set-coding-category-system 'utf-8 'utf-8)
+@end example
+
+in your init file to enable the UTF-8 coding system. You may wish to
+view the documentation of @code{set-coding-priority-list} if you find
+that files that are not UTF-8 are being mis-recognized as UTF-8.
-@node Q1.3.3, Q1.4.1, Q1.3.2, Introduction
-@unnumberedsubsec Q1.3.3: Who contributed to the FAQ in the past?
+Install standard national fonts (not Unicode fonts) for all character
+sets you use. @xref{Q1.8.9, How does XEmacs display Unicode??}.
-This is only a partial list, as many names were lost in a hard disk
-crash some time ago.
+Mule-UCS also supports 16-bit forms of Unicode (UTF-16). It does not
+support 31-bit forms of Unicode (UTF-32 or UCS-4).
-@itemize @bullet
-@item @email{steve@(a)xemacs.org, SL Baur}
+@node Q1.8.9, , Q1.8.8, Introduction
+@unnumberedsubsec Q1.8.9: How does XEmacs display Unicode?
+
+Mule doesn't have a Unicode charset internally, so there's nothing to
+bind a Unicode registry to. It would not be straightforward to create,
+either, because Unicode is not ISO 2022-compatible. You'd have to
+translate it to multiple 96x96 pages.
+
+This means that Mule-UCS uses ordinary national fonts for display. This
+is not really a problem, except for those languages that use the Unified
+Han characters. The problem here is that Mule-UCS maps from Unicode
+code points to national character sets in a deterministic way. By
+default, this means that Japanese fonts are tried first, then Chinese,
+then Korean. To change the priority ordering, use the command
+`un-define-change-charset-order'.
+
+It also means you can't use Unicode fonts directly, at least not without
+extreme hackery. You can run -nw with (set-terminal-coding-system
+'utf-8) if you really want a Unicode font for some reason.
-@item @email{hniksic@(a)xemacs.org, Hrvoje Niksic}
+Real Unicode support will be introduced in XEmacs 22.0.
-@item @email{binge@(a)aloft.att.com, Curtis.N.Bingham}
+@node Installation, Editing, Introduction, Top
+@unnumbered 2 Installation and Troubleshooting
-@item @email{bruncott@(a)dormeur.inria.fr, Georges Brun-Cottan}
+This is part 2 of the XEmacs Frequently Asked Questions list. This
+section is devoted to Installation, Maintenance and Troubleshooting.
-@item @email{rjc@(a)cogsci.ed.ac.uk, Richard Caley}
+@menu
+2.0: Installation (General)
+* Q2.0.1:: How do I build and install XEmacs?
+* Q2.0.2:: Where do I find external libraries?
+* Q2.0.3:: How do I specify the paths that XEmacs uses for finding files?
+* Q2.0.4:: Running XEmacs without installing
+* Q2.0.5:: XEmacs is too big
+
+2.1: Package Installation
+* Q2.1.1:: How do I install the packages?
+* Q2.1.2:: Can I install the packages individually?
+* Q2.1.3:: Can I install the packages automatically?
+* Q2.1.4:: Can I upgrade or remove packages?
+* Q2.1.5:: Which packages to install?
+* Q2.1.6:: Can you describe the package location process in more detail?
+* Q2.1.7:: EFS fails with "500 AUTH not understood"
+
+2.2: Unix/Mac OS X Installation (Also Relevant to Cygwin, MinGW)
+* Q2.2.1:: Libraries in non-standard locations
+* Q2.2.2:: Why can't I strip XEmacs?
+
+2.3: Windows Installation (Windows, Cygwin, MinGW)
+* Q2.3.1:: What exactly are all the different ways to build XEmacs under Windows?
+* Q2.3.2:: What compiler/libraries do I need to compile XEmacs?
+* Q2.3.3:: How do I compile the native port?
+* Q2.3.4:: What do I need for Cygwin?
+* Q2.3.5:: How do I compile under Cygwin?
+* Q2.3.6:: How do I compile using MinGW (aka @samp{the -mno-cygwin flag to gcc})?
+* Q2.3.7:: How do I compile with X support?
+* Q2.3.8:: Cygwin XEmacs won't start -- cygXpm-noX4.dll was not found (NEW)
+
+2.4: General Troubleshooting
+* Q2.4.1:: How do I deal with bugs or with problems building, installing, or
running?
+* Q2.4.2:: Help! XEmacs just crashed on me!
+* Q2.4.3:: XEmacs crashes and I compiled it myself.
+* Q2.4.4:: How to debug an XEmacs problem with a debugger
+* Q2.4.5:: I get a cryptic error message when trying to do something.
+* Q2.4.6:: XEmacs hangs when I try to do something.
+* Q2.4.7:: I get an error message when XEmacs is running in batch mode.
+* Q2.4.8:: The keyboard or mouse is not working properly, or I have some other
event-related problem.
+* Q2.4.9:: @kbd{C-g} doesn't work for me. Is it broken?
+* Q2.4.10:: How do I debug process-related problems?
+* Q2.4.11:: XEmacs is outputting lots of X errors.
+* Q2.4.12:: After upgrading, XEmacs won't do `foo' any more!
+
+2.5: Startup-Related Problems
+* Q2.5.1:: XEmacs cannot connect to my X Terminal!
+* Q2.5.2:: Startup problems related to paths or package locations.
+* Q2.5.3:: XEmacs won't start without network.
+* Q2.5.4:: Startup warnings about deducing proper fonts?
+* Q2.5.5:: Warnings from incorrect key modifiers.
+* Q2.5.6:: XEmacs 21.1 on Windows used to spawn an ugly console window on every
startup. Has that been fixed?
+@end menu
-@item @email{cognot@(a)ensg.u-nancy.fr, Richard Cognot}
+@unnumberedsec 2.0: Installation (General)
-@item @email{daku@(a)nortel.ca, Mark Daku}
+@node Q2.0.1, Q2.0.2, Installation, Installation
+@unnumberedsubsec Q2.0.1: How do I build and install XEmacs?
-@item @email{wgd@(a)martigny.ai.mit.edu, William G. Dubuque}
+See the file @file{etc/NEWS} for information on new features and other
+user-visible changes since the last version of XEmacs.
-@item @email{eeide@(a)cs.utah.edu, Eric Eide}
+The file @file{INSTALL} in the top-level directory says how to bring
+up XEmacs on Unix and Cygwin, once you have loaded the entire subtree
+of this directory.
-@item @email{af@(a)biomath.jussieu.fr, Alain Fauconnet}
+See the file @file{nt/README} for instructions on building XEmacs for
+Microsoft Windows.
-@item @email{cflatter@(a)nrao.edu, Chris Flatters}
+(a)xref{Q2.1.1}, for the installation of (essential) add on packages.
-@item @email{ginsparg@(a)adra.com, Evelyn Ginsparg}
+@node Q2.0.2, Q2.0.3, Q2.0.1, Installation
+@unnumberedsubsec Q2.0.2: Where do I find external libraries?
-@item @email{hall@(a)aplcenmp.apl.jhu.edu, Marty Hall}
+All external libraries used by XEmacs can be found on the XEmacs web
+site
+@iftex
+@*
+@end iftex
+@uref{http://www.xemacs.org/Download/optLibs.html}.
-@item @email{dkindred@(a)cmu.edu, Darrell Kindred}
+The library versions available here are known to work with XEmacs.
+(Newer versions will probably work as well but we can't guarantee it.)
+We try to keep the libraries up-to-date but may not always succeed.
+Check the above page for the canonical locations of the external libraries,
+allowing you to download the latest, bleeding-edge versions.
-@item @email{dmoore@(a)ucsd.edu, David Moore}
+@node Q2.0.3, Q2.0.4, Q2.0.2, Installation
+@unnumberedsubsec Q2.0.3: How do I specify the paths that XEmacs uses for finding
files?
-@item @email{arup+@(a)cmu.edu, Arup Mukherjee}
+You can specify what paths to use by using a number of different flags
+when running configure. See the section MAKE VARIABLES in the top-level
+file INSTALL in the XEmacs distribution for a listing of those flags.
-@item @email{nickel@(a)prz.tu-berlin.de, Juergen Nickelsen}
+Most of the time, however, the simplest fix is: @strong{do not} specify
+paths as you might for GNU Emacs. XEmacs can generally determine the
+necessary paths dynamically at run time. The only path that generally
+needs to be specified is the root directory to install into. That can
+be specified by passing the @code{--prefix} flag to configure. For a
+description of the XEmacs install tree, please consult the @file{NEWS}
+file.
-@item @email{powell@(a)csl.ncsa.uiuc.edu, Kevin R. Powell}
+@node Q2.0.4, Q2.0.5, Q2.0.3, Installation
+@unnumberedsubsec Q2.0.4: Running XEmacs without installing
-@item @email{dworkin@(a)ccs.neu.edu, Justin Sheehy}
+How can I just try XEmacs without installing it?
-@item @email{stig@(a)hackvan.com, Stig}
+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.
-@item @email{Aki.Vehtari@(a)hut.fi, Aki Vehtari}
-@end itemize
+A good method is to make a shell alias for xemacs:
-@unnumberedsec 1.4: Internationalization
+@example
+alias xemacs=/src/xemacs-21.5/src/xemacs
+@end example
-@node Q1.4.1, Q1.4.2, Q1.3.3, Introduction
-@unnumberedsubsec Q1.4.1: What is the status of internationalization support aka MULE
(including Asian language support?
+(You will obviously use whatever directory you downloaded the source
+tree to instead of @file{/src/xemacs-21.5}).
-Both the stable and development versions of XEmacs include
-internationalization support (aka MULE). MULE currently (21.4) works on
-UNIX and Linux systems. It is possible to build with MULE on Windows
-systems, but if you really need MULE on Windows, it is recommended that
-you build and use the development (21.5) version, and deal with the
-instability of the development tree. Binaries compiled without MULE
-support run faster than MULE capable XEmacsen.
+This will let you run XEmacs without massive copying.
-@node Q1.4.2, Q1.4.3, Q1.4.1, Introduction
-@unnumberedsubsec Q1.4.2: How can I help with internationalization?
+@node Q2.0.5, Q2.1.1, Q2.0.4, Installation
+@unnumberedsubsec Q2.0.5: XEmacs is too big
-If you would like to help, you may want to join the
-@email{xemacs-mule@(a)xemacs.org} mailing list. Especially needed are
-people who speak/write languages other than English, who are willing to
-use XEmacs/MULE regularly, and have some experience with Elisp.
+The space required by the installation directories can be
+reduced dramatically if desired. Gzip all the .el files. Remove all
+the packages you'll never want to use. Remove the TexInfo manuals.
+Remove the Info (and use just hardcopy versions of the manual). Remove
+most of the stuff in etc. Remove or gzip all the source code. Gzip or
+remove the C source code. Configure it so that copies are not made of
+the support lisp.
-Translations of the TUTORIAL and man page are welcome, and XEmacs does
-support multilingual menus, but we have few current translations.
+These are all Emacs Lisp source code and bytecompiled object code. You
+may safely gzip everything named *.el here. You may remove any package
+you don't use. @emph{Nothing bad will happen if you delete a package
+that you do not use}. You must be sure you do not use it though, so be
+conservative at first.
-(a)xref{Q1.2.2, How do I become a Beta Tester?}.
+Any package with the possible exceptions of xemacs-base, and EFS are
+candidates for removal. Ask yourself, @emph{Do I ever want to use this
+package?} If the answer is no, then it is a candidate for removal.
-@node Q1.4.3, Q1.4.4, Q1.4.2, Introduction
-@unnumberedsubsec Q1.4.3: How do I type non-ASCII characters?
+First, gzip all the .el files. Then go about package by package and
+start gzipping the .elc files. Then run XEmacs and do whatever it is
+you normally do. If nothing bad happens, then remove the package. You
+can remove a package via the PUI interface
+(@code{M-x pui-list-packages}, then press @kbd{d} to mark the packages
+you wish to delete, and then @kbd{x} to delete them.
-(a)xref{Q3.0.5, How can you type in special characters in XEmacs?}, in
-part 3 of this FAQ, for some simple methods that also work in non-MULE
-builds of XEmacs (but only for one-octet coded character sets, and
-mostly for ISO 8859/1). Many of the methods available for Cyrillic
-((a)pxref{Q1.4.7, How about Cyrillic modes?}) work without MULE. MULE
-has more general capabilities. @xref{Q1.4.5, Please explain the
-various input methods in MULE/XEmacs}.
+Another method is to do @code{M-x package-get-delete-package}.
-(a)xref{Q3.2.8, How do I display non-ASCII characters?}, which covers
-display of non-ASCII characters.
+@unnumberedsec 2.1: Package Installation
-@node Q1.4.4, Q1.4.5, Q1.4.3, Introduction
-@unnumberedsubsec Q1.4.4: Can XEmacs messages come out in a different language?
+@node Q2.1.1, Q2.1.2, Q2.0.5, Installation
+@unnumberedsubsec Q2.1.1: How do I install the packages?
-The message-catalog support was written but is badly bit-rotted. XEmacs
-20 and 21 did @emph{not} support it, and early releases of XEmacs 22
-will not either.
+There are three ways to install the packages.
-However, menubar localization @emph{does} work. To enable it, add to
-your @file{Emacs} file entries like this:
+@enumerate
+@item
+Manually, all at once, using the 'Sumo Tarball'.
+@item
+Manually, using individual package tarballs.
+@item
+Automatically, using the package tools from XEmacs.
+@end enumerate
-@example
-Emacs*XlwMenu.resourceLabels: True
-Emacs*XlwMenu.file.labelString: Fichier
-Emacs*XlwMenu.openInOtherWindow.labelString: In anderem Fenster oeffnen
-@end example
+If you don't want to mess with the packages, it is easiest to just
+grab them manually, all at once. (For the other two ways,
+(a)xref{Q2.1.2}, and @xref{Q2.1.3}.) Download the file
-The name of the resource is derived from the non-localized entry by
-removing punctuation and capitalizing as above.
+(a)file{xemacs-sumo.tar.gz}
-@node Q1.4.5, Q1.4.6, Q1.4.4, Introduction
-@unnumberedsubsec Q1.4.5: Please explain the various input methods in MULE/XEmacs
+For an XEmacs compiled with Mule you also need
-Mule supports a wide variety of input methods. There are three basic
-classes: Lisp implementations, generic platform support, and library
-interfaces.
+(a)file{xemacs-mule-sumo.tar.gz}
-@emph{Lisp implementations} include Quail, which provides table-driven input
-methods for almost all the character sets that Mule supports (including
-all of the ISO 8859 family, the Indic languages, Thai, and so on), and
-SKK, for Japanese. (SKK also supports an interface to an external
-"dictionary server" process.) Quail supports both typical
"dead-key"
-methods (eg, in the "latin-1-prefix" method, @kbd{" a} produces ä,
LATIN
-SMALL LETTER A WITH DIAERESIS), and the complex dictionary-based phonetic
-methods used for Asian ideographic languages like Chinese.
+These are in the @file{packages} directory on your XEmacs mirror
+archive: @uref{ftp://ftp.xemacs.org/pub/xemacs/packages} or its
+mirrors. N.B. They are called 'Sumo Tarballs' for good reason. They
+are currently about 19MB and 4.5MB (gzipped) respectively.
-Lisp implementations can be less powerful (but they are not perceptibly
-inefficient), and of course are not portable to non-Emacs applications.
-The incompatibility can be very annoying. On the other hand, they
-require no special platform support or external libraries, so if you can
-display the characters, Mule can input them for you and you can edit,
-anywhere.
+Install them on Unix and Mac OS X using the shell/Terminal command
-@emph{Generic platform support} is currently limited to the X Input
-Method (XIM) framework, although support for MSIME (for MS Windows) is
-planned, and IIIMF (Sun's Internet-Intranet Input Method Framework)
-support is extremely desirable. XIM is enabled at build time by use of
-the @samp{--with-xim} flag to @code{configure}. For use of XIM, see
-your platform documentation. However, normally the input method you use
-is specified via the @samp{LANG} and @samp{XMODIFIERS} environment
-variables.
+@code{cd $prefix/lib/xemacs ; gunzip -c <tarballname> | tar xf -}
-Of course, input skills are portable across most applications. However,
-especially in modern GUI systems the habit of using bucky bits has
-fallen into sad disuse, and many XIM systems are poorly configured for
-use with Emacs. For example, the kinput2 input manager (a separate
-process providing an interface between Japanese dictionary servers such
-as Canna and Wnn, and the application) tends to gobble up keystrokes
-generating Meta characters. This means that to edit while using an XIM
-input method, you must toggle the input method off every time you want
-to use @kbd{M-f}. Your mileage may vary.
+Where @samp{$prefix} is what you gave to the @samp{--prefix} flag to
+@file{configure}, and defaults to @file{/usr/local}.
-@emph{Library interfaces} are most common for Japanese, although Wnn
-supports Chinese (traditional and simplified) and Korean. There are
-Chinese and Korean input servers available, but we do not know of any
-patches for XEmacs to use them directly. You can use them via
-IM-enabled terminals, by manipulating the terminal coding systems. We
-describe only the Japanese-oriented systems here. The advantage of
-these systems is that they are very powerful, and on platforms where
-they are available there is typically a wide range of applications that
-support them. Thus your input skills are portable across applications.
+If you have GNU tar you can use:
-Mule provides built-in interfaces to the following input methods: Wnn4,
-Wnn6, Canna, and SJ3. These can be configured at build time. There are
-patches available (no URL, sorry) to support the SKK server, as well.
-Wnn and SJ3 use the @code{egg} user interface. The interface for Canna
-is specialized to Canna.
+@code{cd $prefix/lib/xemacs ; tar zxvf <tarballname>}
-Wnn supports Japanese, Chinese and Korean. It is made by OMRON and Kyôto
-University. It is a powerful and complex system. Wnn4 is free and Wnn6
-is not. Wnn uses grammatical hints and probability of word association,
-so in principle Wnn can be cleverer than other methods.
+If you have the packages somewhere nonstandard and don't want to bother
+with @samp{$prefix} (for example, you're a developer and are compiling
+the packages yourself, and want your own private copy of everything),
+you can also directly specify this using @file{configure}. To do this
+with 21.5 and above use the @samp{--with-package-prefix} parameter to
+specify the directory under which you untarred the above tarballs.
+Under 21.4 and previous you need to use @samp{--package-path}. Using
+these options looks something like this:
-Canna, made by NEC, supports only Japanese. It is a simple and powerful
-system. Canna uses only grammar, but its grammar and dictionary are
-quite sophisticated. So for standard modern Japanese, Canna seems
-cleverer than Wnn4. In addition, the UNIX version of Canna is free (now
-there is a Microsoft Windows version).
+@example
+ configure
--package-path="~/.xemacs::/src/xemacs/site-packages:/src/xemacs/xemacs-packages:/src/xemacs/mule-packages"
...
+@end example
-SJ3, by Sony, supports only Japanese.
+Under Windows, you need to place the above @samp{tar.gz} files in the
+directory specified using the @samp{PACKAGE_PREFIX} value in
+(a)file{nt/config.inc} and by default is @file{\Program Files\XEmacs}.
+(To untar a @samp{tar.gz} file you will need to use a utility such as
+WinZip, unless you have Cygwin or a similar environment installed, in
+which case the above Unix shell command should work fine.) If you want
+the packages somewhere else, just change @samp{PACKAGE_PREFIX}.
-Egg consists of following parts:
+Note that XEmacs finds the packages automatically anywhere underneath
+the directory tree where it expects to find the packages. All you
+need to do is put stuff there; you don't need to run any program to
+tell XEmacs to find the packges, or do anything of that sort.
-@enumerate
-@item
-Input character Translation System (ITS) layer.
-It translates ASCII inputs to Kana/PinYin/Hangul characters.
+However, XEmacs will only notice newly installed packages when it
+starts up, so you will have to restart if you are already running
+XEmacs.
-@item
-Kana/PinYin/Hangul to Kanji transfer layer.
-The interface layer to network Kana-Kanji server (Wnn and Sj3).
-@end enumerate
+For more details, @xref{Startup Paths,,,xemacs, the XEmacs User's
+Manual}, and @xref{Packages,,,xemacs, the XEmacs User's Manual}.
-These input methods are modal. They have a raw (alphabet) mode, a
-phonetic input mode, and Kana-Kanji transfer mode. However there are
-mode-less input methods for Egg and Canna. @samp{boiled-egg} is a
-mode-less input method running on Egg. For Canna, @samp{canna.el} has a
-tiny boiled-egg-like command, @code{(canna-boil)}, and there are some
-boiled-egg-like utilities.
+As the Sumo tarballs are not regenerated as often as the individual
+packages, it is recommended that you use the automatic package tools
+afterwards to pick up any recent updates.
-Much of this information was provided by @email{morioka@(a)jaist.ac.jp,
-MORIOKA Tomohiko}.
+@emph{NOTE}: For detailed information about how the package
+hierarchies work, @xref{Package Overview,,,lispref, the XEmacs Lisp
+Reference Manual}.
-@node Q1.4.6, Q1.4.7, Q1.4.5, Introduction
-@unnumberedsubsec Q1.4.6: How do I portably code for MULE/XEmacs?
+@node Q2.1.2, Q2.1.3, Q2.1.1, Installation
+@unnumberedsubsec Q2.1.2: Can I install the packages individually?
-MULE has evolved rapidly over the last few years, and the original third
-party patch (for GNU Emacs 19), GNU Emacs 20+, and XEmacs 20+ have quite
-different implementations. The APIs also vary although recent versions
-of XEmacs have tended to converge to the GNU Emacs standard.
+Yes, you can download individual packages from the FTP site (@pxref{Q2.1.1}). Since
packages are automatically noticed at startup, you just have to put them in the right
place.
-MULE implementations are going to continue to evolve. Both GNU Emacs
-and XEmacs are working hard on Unicode support, which will involve new
-APIs and probably variations on old ones. For XEmacs 22, the old ISO
-2022-based system for recognizing encodings will be replaced by a much
-more flexible system, which should improve accuracy of automatic coding
-detections, but will also involve new APIs.
+Note: If you are upgrading packages already installed, it's best to
+remove the old package first (@pxref{Q2.1.4}).
-@email{morioka@(a)jaist.ac.jp, MORIOKA Tomohiko} writes:
+For example if we are installing the @samp{xemacs-base}
+package (version 1.48):
-@quotation
-The application implementor must write separate code for these mule
-variants. [Please don't hesitate to report these variants to us; they
-are not, strictly speaking, bugs, but they give third-party developers
-the same kind of creepy-crawly feeling. We'll do what we can. -- Ed.]
+@example
+ mkdir $prefix/lib/xemacs/xemacs-packages RET # if it does not exist yet
+ cd $prefix/lib/xemacs/xemacs-packages RET
+ gunzip -c /path/to/xemacs-base-1.48-pkg.tar.gz | tar xvf - RET
+@end example
-MULE and the next version of Emacs are similar but the symbols are very
-different---requiring separate code as well.
+Or if you have GNU tar, the last step can be:
-Namely we must support 3 kinds of mule variants and 4 or 5 or 6 kinds of
-emacs variants... (;_;) I'm shocked, so I wrote a wrapper package called
-@code{emu} to provide a common interface. [There is an XEmacs package
-of APEL which provides much more comprehensive coverage. Be careful,
-however; APEL has problems of its own. -- Ed.]
+@example
+ tar zxvf /path/to/xemacs-base-1.48-pkg.tar.gz RET
+@end example
-I have the following suggestions about dealing with mule variants:
+For MULE related packages, it is best to untar into the @samp{mule-packages}
+hierarchy, i.e. for the @samp{mule-base} package, version 1.37:
-@itemize @bullet
-@item
-@code{(featurep 'mule)} @code{t} on all mule variants
+@example
+ mkdir $prefix/lib/xemacs/mule-packages RET # if it does not exist yet
+ cd $prefix/lib/xemacs/mule-packages RET
+ gunzip -c /path/to/mule-base-1.37-pkg.tar.gz | tar xvf - RET
+@end example
-@item
-@code{(boundp 'MULE)} is @code{t} on only MULE. Maybe the next version
-of Emacs will not have this symbol.
+Or if you have GNU tar, the last step can be:
-@item
-MULE has a variable @code{mule-version}. Perhaps the next version of
-Emacs will have this variable as well.
-@end itemize
+@example
+ tar zxvf /path/to/mule-base-1.37-pkg.tar.gz RET
+@end example
-Following is a sample to distinguish mule variants:
+@node Q2.1.3, Q2.1.4, Q2.1.2, Installation
+@unnumberedsubsec Q2.1.3: Can I install the packages automatically?
-@lisp
-(if (featurep 'mule)
- (cond ((boundp 'MULE)
- ;; for original Mule
- )
- ((string-match "XEmacs" emacs-version)
- ;; for XEmacs with Mule
- )
- (t
- ;; for next version of Emacs
- ))
- ;; for old emacs variants
- )
-@end lisp
-@end quotation
+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.
-@node Q1.4.7, Q1.4.8, Q1.4.6, Introduction
-@unnumberedsubsec Q1.4.7: How about Cyrillic modes?
+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:
-@email{ilya@(a)math.ohio-state.edu, Ilya Zakharevich} writes:
+@example
+ efs - To fetch the files from the FTP site or mirrors.
+ xemacs-base - Needed by efs.
+@end example
-@quotation
-There is a cyrillic mode in the file @file{mysetup.zip} in
-@iftex
-@*
-@end iftex
-@uref{ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs/}. This is a
-modification to @email{ava@(a)math.jhu.ed, Valery Alexeev's} @file{russian.el}
-which can be obtained from
-@end quotation
+and optionally:
-@uref{http://www.math.uga.edu/~valery/russian.el}.
+@example
+ mailcrypt - For PGP verification of the package-index file.
+@end example
-@email{d.barsky@(a)ee.surrey.ac.uk, Dima Barsky} writes:
+After installing these by hand, fire up XEmacs and follow these
+steps.
-@quotation
-There is another cyrillic mode for both GNU Emacs and XEmacs by
-@email{manin@(a)camelot.mssm.edu, Dmitrii
-(Mitya) Manin} at
-@iftex
+@enumerate
+@item
+Choose a download site.
+@itemize @bullet
+@item
+via menu: Tools -> Packages -> Set Download Site
+@item
+via keyb: M-x customize-variable RET package-get-remote RET
+(put in the details of remote host and directory)
+@end itemize
-@end iftex
-@uref{http://kulichki-lat.rambler.ru/centrolit/manin/cyr.el}.
-@c Link above, <
URL:http://camelot.mssm.edu/~manin/cyr.el> was dead.
-@c Changed to russian host instead
-@end quotation
+If the package tarballs _AND_ the package-index file are in a
+local directory, you can: M-x pui-set-local-package-get-directory RET
-@email{rebecca.ore@(a)op.net, Rebecca Ore} writes:
+@item
+Obtain a list of packages and display the list in a buffer named
+"*Packages*".
+@itemize @bullet
+@item
+menu: Tools -> Packages -> List & Install
+@item
+keyb: M-x pui-list-packages RET
+@end itemize
-@quotation
-The fullest resource I found on Russian language use (in and out of
-XEmacs) is @uref{http://www.ibiblio.org/sergei/Software/Software.html}
-@end quotation
+XEmacs will now connect to the remote site and download the
+latest package-index file.
-@node Q1.4.8, Q1.4.9, Q1.4.7, Introduction
-@unnumberedsubsec Q1.4.8: Does XEmacs support Unicode?
+The resulting buffer, "*Packages*" has brief instructions at the
+end of the buffer.
-To get Unicode support, you need a Mule-enabled XEmacs.
+@item
+Choose the packages you wish to install.
+@itemize @bullet
+@item
+mouse: Click button 2 on the package name.
+@item
+keyb: RET on the package name
+@end itemize
-21.5 has internal support for Unicode and supports it fully, although we
-don't yet use it as the internal encoding.
+@item
+Make sure you have everything you need.
+@itemize @bullet
+@item
+menu: Packages -> Add Required
+@item
+keyb: r
+@end itemize
-21.4 supports Unicode partially -- as an external encoding for files,
-processes, and terminals, but without font support. @xref{Q1.4.9, How
-does XEmacs display Unicode?}. To get Unicode support in 21.4,
-install Mule-UCS from packages in the usual way, and put
+XEmacs will now search for packages that are required by the
+ones that you have chosen to install and offer to select
+those packages also.
-@example
-(require 'un-define)
-(set-coding-priority-list '(utf-8))
-(set-coding-category-system 'utf-8 'utf-8)
-@end example
+For novices and gurus alike, this step can save your bacon.
+It's easy to forget to install a critical package.
-in your init file to enable the UTF-8 coding system. You may wish to
-view the documentation of @code{set-coding-priority-list} if you find
-that files that are not UTF-8 are being mis-recognized as UTF-8.
+@item
+Download and install the packages.
+@itemize @bullet
+@item
+menu: Packages -> Install/Remove Selected
+@item
+keyb: x
+@end itemize
+@end enumerate
-Install standard national fonts (not Unicode fonts) for all character
-sets you use. @xref{Q1.4.9, How does XEmacs display Unicode??}.
+@node Q2.1.4, Q2.1.5, Q2.1.3, Installation
+@unnumberedsubsec Q2.1.4: Can I upgrade or remove packages?
-Mule-UCS also supports 16-bit forms of Unicode (UTF-16). It does not
-support 31-bit forms of Unicode (UTF-32 or UCS-4).
+As the exact files and their locations contained in a package may
+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
+remove a package using this file.
-@node Q1.4.9, Q1.5.1, Q1.4.8, Introduction
-@unnumberedsubsec Q1.4.9: How does XEmacs display Unicode?
+Note that the interactive package tools included with XEmacs already do
+this for you.
-Mule doesn't have a Unicode charset internally, so there's nothing to
-bind a Unicode registry to. It would not be straightforward to create,
-either, because Unicode is not ISO 2022-compatible. You'd have to
-translate it to multiple 96x96 pages.
+@node Q2.1.5, Q2.1.6, Q2.1.4, Installation
+@unnumberedsubsec Q2.1.5: Which packages to install?
-This means that Mule-UCS uses ordinary national fonts for display. This
-is not really a problem, except for those languages that use the Unified
-Han characters. The problem here is that Mule-UCS maps from Unicode
-code points to national character sets in a deterministic way. By
-default, this means that Japanese fonts are tried first, then Chinese,
-then Korean. To change the priority ordering, use the command
-`un-define-change-charset-order'.
+Unless you are an advanced user, just install everything.
-It also means you can't use Unicode fonts directly, at least not without
-extreme hackery. You can run -nw with (set-terminal-coding-system
-'utf-8) if you really want a Unicode font for some reason.
+If you really want to install only what's absolutely needed, a good
+minimal set of packages for XEmacs-latin1 would be
-Real Unicode support will be introduced in XEmacs 22.0.
+@example
+xemacs-base, xemacs-devel, c-support, cc-mode, debug, dired, efs,
+edit-utils, fsf-compat, mail-lib, net-utils, os-utils, prog-modes,
+text-modes, time, mailcrypt
+@end example
-@unnumberedsec 1.5: Getting Started
+If you are using the XEmacs package tools, don't forget to do:
-@node Q1.5.1, Q1.5.2, Q1.4.9, Introduction
-@unnumberedsubsec Q1.5.1: What is an @file{init.el} or @file{.emacs} and is there a
sample one?
+@example
+ Packages -> Add Required
+@end example
-The @file{init.el} or @file{.emacs} file is used to customize XEmacs to
-your tastes. Starting in 21.4, the preferred location for the init file
-is @file{~/.xemacs/init.el}; in previous versions, it was
-(a)file{~/.emacs}. 21.4 still accepts the old location, but the first
-time you run it, it will ask to migrate your file to the new location.
-If you answer yes, the file will be moved, and a "compatibility"
-(a)file{.emacs} file will be placed in the old location so that you can
-still run older versions of XEmacs, and versions of GNU Emacs, which
-expect the old location. The @file{.emacs} file present is just a stub
-that loads the real file in @file{~/.xemacs/init.el}.
+To make sure you have everything that the packages you have chosen to
+install need.
-No two init files are alike, nor are they expected to be alike, but
-that's the point. The XEmacs distribution contains an excellent starter
-example in the @file{etc/} directory called @file{sample.init.el}
-(starting in 21.4) or @file{sample.emacs} in older versions. Copy this
-file from there to @file{~/.xemacs/init.el} (starting in 21.4) or
-(a)file{~/.emacs} in older versions, where @samp{~} means your home
-directory, of course. Then edit it to suit.
+(a)xref{Q1.7.2}, for a description of the various packages.
-You may bring the @file{sample.init.el} or @file{sample.emacs} file into
-an XEmacs buffer from the menubar. (The menu entry for it is always
-under the @samp{Help} menu, but its location under that has changed in
-various versions. Recently, look under the @samp{Samples} submenu.) To
-determine the location of the @file{etc/} directory type the command
-@kbd{C-h v data-directory @key{RET}}.
+@node Q2.1.6, Q2.1.7, Q2.1.5, Installation
+@unnumberedsubsec Q2.1.6: Can you describe the package location process in more
detail?
-@node Q1.5.2, Q1.5.3, Q1.5.1, Introduction
-@unnumberedsubsec Q1.5.2: Where do I put my @file{init.el} file?
+On startup XEmacs looks for packages in so-called package hierarchies.
+Normally, there are three system wide hierarchies, like this:
-(a)file{init.el} is the name of the init file starting with 21.4, and is
-located in the subdirectory @file{.xemacs/} of your home directory. In
-prior versions, the init file is called @file{.emacs} and is located in
-your home directory.
+@example
+$prefix/lib/xemacs/xemacs-packages/
+ Normal packages go here.
-Your home directory under Windows is determined by the @samp{HOME}
-environment variable. If this is not set, it defaults to @samp{C:\}.
-To set this variable, modify @file{AUTOEXEC.BAT} under Windows 95/98, or
-select @samp{Control Panel->System->Advanced->Environment Variables...}
-under Windows NT/2000.
+$prefix/lib/xemacs/mule-packages/
+ Mule packages go here and are only searched by MULE-enabled XEmacsen.
-@node Q1.5.3, Q1.5.4, Q1.5.2, Introduction
-@unnumberedsubsec Q1.5.3: Can I use the same @file{init.el} with the other Emacs?
+$prefix/lib/xemacs/site-packages/
+ Local and 3rd party packages go here.
+@end example
-Yes. The sample @file{init.el} included in the XEmacs
-distribution will show you how to handle different versions and flavors
-of Emacs.
+This is what you get when you untar the SUMO tarballs under
+@file{$prefix/lib/xemacs}.
-@node Q1.5.4, Q1.5.5, Q1.5.3, Introduction
-@unnumberedsubsec Q1.5.4: Any good XEmacs tutorials around?
+@file{$prefix} is specified using the @samp{--prefix} parameter to
+@file{configure}, and defaults to @file{usr/local}.
-There's the XEmacs tutorial available from the Help Menu under
-@samp{Help->Tutorials}, or by typing @kbd{C-h t}. To check whether
-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}.
+If the package path is not explicitly specified, XEmacs looks for the
+package directory @file{xemacs-packages} (and @file{mule-packages} and
+@file{site-packages}) first under @samp{~/.xemacs}, then for a sister
+directory @file{lib/xemacs-VERSION} of the directory in which the
+XEmacs executable is located, then for a sister directory
+@file{lib/xemacs}. The XEmacs executable (under Unix at least) is
+installed by default in @file{/usr/local/bin}; this explains why
+XEmacs in its default installation will find packages that you put
+under @file{/usr/local/lib/xemacs}.
-@comment There's an Emacs Lisp tutorial at
-@comment
-@comment @example
-@comment @uref{ftp://prep.ai.mit.edu/pub/gnu/emacs-lisp-intro-1.04.tar.gz}.
-@comment @end example
-@comment
-@comment @email{erik@(a)petaxp.rug.ac.be, Erik Sundermann} has made a tutorial web
-@comment page at
-@comment @iftex
-@comment @*
-@comment @end iftex
-@comment @uref{http://petaxp.rug.ac.be/~erik/xemacs/}.
+You can specify where exactly XEmacs looks for packages by using the
+@samp{--with-package-prefix} or @samp{--with-package-path} parameters to
+@file{configure} (or the equivalent settings in @file{config.inc}, under
+Windows), or setting the @samp{EMACSPACKAGEPATH} environment variable
+(which has the same format as @samp{--with-package-path}). @xref{Q2.1.1}.
-@node Q1.5.5, Q1.5.6, Q1.5.4, Introduction
-@unnumberedsubsec Q1.5.5: May I see an example of a useful XEmacs Lisp function?
+See @file{configure.usage} for more info about the format of these
+@file{configure} parameters.
-The following function does a little bit of everything useful. It does
-something with the prefix argument, it examines the text around the
-cursor, and it's interactive so it may be bound to a key. It inserts
-copies of the current word the cursor is sitting on at the cursor. If
-you give it a prefix argument: @kbd{C-u 3 M-x double-word} then it will
-insert 3 copies.
+In addition to the system wide packages, each user can have his own
+packages installed under @file{~/.xemacs/}. If you want to install
+packages there using the interactive tools, you need to set
+@code{package-get-install-to-user-init-directory} to @code{t}.
-@lisp
-(defun double-word (count)
- "Insert a copy of the current word underneath the cursor"
- (interactive "*p")
- (let (here there string)
- (save-excursion
- (forward-word -1)
- (setq here (point))
- (forward-word 1)
- (setq there (point))
- (setq string (buffer-substring here there)))
- (while (>= count 1)
- (insert string)
- (decf count))))
-@end lisp
+The site-packages hierarchy replaces the old @file{site-lisp}
+directory. XEmacs no longer looks into a @file{site-lisp} directly by
+default. A good place to put @file{site-start.el} would be in
+@file{$prefix/lib/xemacs/site-packages/lisp/}.
-The best way to see what is going on here is to let XEmacs tell you.
-Put the code into an XEmacs buffer, and do a @kbd{C-h f} with the cursor
-sitting just to the right of the function you want explained. Eg. move
-the cursor to the SPACE between @code{interactive} and @samp{"*p"} and
-hit @kbd{C-h f} to see what the function @code{interactive} does. Doing
-this will tell you that the @code{*} requires a writable buffer, and
-@code{p} converts the prefix argument to a number, and
-@code{interactive} allows you to execute the command with @kbd{M-x}.
+@node Q2.1.7, Q2.2.1, Q2.1.6, Installation
+@unnumberedsubsec Q2.1.7: EFS fails with "500 AUTH not understood" (NEW)
-@node Q1.5.6, Q1.5.7, Q1.5.5, Introduction
-@unnumberedsubsec Q1.5.6: And how do I bind it to a key?
+A typical error: FTP Error: USER request failed; 500 AUTH not understood.
-To bind to a key do:
+Thanks to giacomo boffi @email{giacomo.boffi@(a)polimi.it} who recommends
+on comp.emacs.xemacs:
-@lisp
-(global-set-key "\C-cd" 'double-word)
-@end lisp
+ tell your ftp client to not attempt AUTH authentication (or do not
+ use FTP servers that don't understand AUTH)
-Or interactively, @kbd{M-x global-set-key} and follow the prompts.
+and notes that you need to add an element (often "-u") to
+`efs-ftp-program-args'. Use M-x customize-variable, and verify the
+needed flag with `man ftp' or other local documentation.
-@node Q1.5.7, Q1.5.8, Q1.5.6, Introduction
-@unnumberedsubsec Q1.5.7: What's the difference between a macro and a function?
+@unnumberedsec 2.2: Unix/Mac OS X Installation (Also Relevant to Cygwin, MinGW)
-Quoting from the Lisp Reference (a.k.a @dfn{Lispref}) Manual:
+@node Q2.2.1, Q2.2.2, Q2.1.7, Installation
+@unnumberedsubsec Q2.2.1: Libraries in non-standard locations
-@dfn{Macros} enable you to define new control constructs and other
-language features. A macro is defined much like a function, but instead
-of telling how to compute a value, it tells how to compute another Lisp
-expression which will in turn compute the value. We call this
-expression the @dfn{expansion} of the macro.
+If your libraries are in a non-standard location, you can specify the location
+using the following flags to @file{configure}. Under 21.4 or earlier:
-Macros can do this because they operate on the unevaluated expressions
-for the arguments, not on the argument values as functions do. They can
-therefore construct an expansion containing these argument expressions
-or parts of them.
+@example
+--site-libraries=WHATEVER
+--site-includes=WHATEVER
+@end example
-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.
+Under 21.5 or later:
-@node Q1.5.8, , Q1.5.7, Introduction
-@unnumberedsubsec Q1.5.8: What is @code{Custom}?
+@example
+--with-site-libraries=WHATEVER
+--with-site-includes=WHATEVER
+@end example
-@code{Custom} is a system for customizing XEmacs options.
+If you have multiple paths to specify, use the following syntax:
-You can access @code{Advanced (Customize)} from the @code{Options} menu
-or invoking one of customize commands by typing eg.
-@kbd{M-x customize}, @kbd{M-x customize-face},
-@kbd{M-x customize-variable} or @kbd{M-x customize-apropos}.
+@example
+--site-libraries='/path/one /path/two /path/etc'
+@end example
-There is also new @samp{browser} mode for Customize.
-Try it out with @kbd{M-x customize-browse}
+If the libraries and headers reside in the directories @samp{lib} and
+@samp{include} of a common root (say @samp{/sw}) then both can be
+specified with a single option:
-@node Installation, Display Subsystems, Introduction, Top
-@unnumbered 2 Installation and Troubleshooting
+@example
+--site-prefixes=WHATEVER
+@end example
-This is part 2 of the XEmacs Frequently Asked Questions list. This
-section is devoted to Installation, Maintenance and Troubleshooting.
+or for 21.5:
+
+@example
+--with-site-prefixes=WHATEVER
+@end example
-@menu
-2.0: Installation (General), Packages
-* Q2.0.1:: How do I install the packages?
-* Q2.0.2:: I don't need no steenkin' packages. Do I?
-* Q2.0.3:: Where do I find external libraries?
-* Q2.0.4:: How do I specify the paths that XEmacs uses for finding files?
-* Q2.0.5:: Running XEmacs without installing
-* Q2.0.6:: XEmacs is too big
-* Q2.0.7:: EFS fails with "500 AUTH not understood" (NEW)
-
-2.1: Unix/Mac OS X Installation (Also Relevant to Cygwin, MinGW)
-* Q2.1.1:: Libraries in non-standard locations
-* Q2.1.2:: Why can't I strip XEmacs?
-* Q2.1.3:: Compiling XEmacs with Netaudio.
-* Q2.1.4:: Problems with Linux and ncurses.
-
-2.2: Windows Installation (Windows, Cygwin, MinGW)
-* Q2.2.1:: What exactly are all the different ways to build XEmacs under Windows?
-* Q2.2.2:: What compiler/libraries do I need to compile XEmacs?
-* Q2.2.3:: How do I compile the native port?
-* Q2.2.4:: What do I need for Cygwin?
-* Q2.2.5:: How do I compile under Cygwin?
-* Q2.2.6:: How do I compile using MinGW (aka @samp{the -mno-cygwin flag to gcc})?
-* Q2.2.7:: How do I compile with X support?
-* Q2.2.8:: Cygwin XEmacs won't start -- cygXpm-noX4.dll was not found (NEW)
-
-2.3: General Troubleshooting
-* Q2.3.1:: Help! XEmacs just crashed on me!
-* Q2.3.2:: XEmacs crashes and I compiled it myself.
-* Q2.3.3:: How to debug an XEmacs problem with a debugger
-* Q2.3.4:: I get a cryptic error message when trying to do something.
-* Q2.3.5:: XEmacs hangs when I try to do something.
-* Q2.3.6:: I get an error message when XEmacs is running in batch mode.
-* Q2.3.7:: The keyboard or mouse is not working properly, or I have some other
event-related problem.
-* Q2.3.8:: @kbd{C-g} doesn't work for me. Is it broken?
-* Q2.3.9:: How do I debug process-related problems?
-* Q2.3.10:: XEmacs is outputting lots of X errors.
-* Q2.3.11:: After upgrading, XEmacs won't do `foo' any more!
-
-2.4: Startup-Related Problems
-* Q2.4.1:: XEmacs cannot connect to my X Terminal!
-* Q2.4.2:: XEmacs won't start on Windows.
-* Q2.4.3:: XEmacs won't start without network.
-* Q2.4.4:: Startup warnings about deducing proper fonts?
-* Q2.4.5:: Warnings from incorrect key modifiers.
-* Q2.4.6:: XEmacs 21.1 on Windows used to spawn an ugly console window on every
startup. Has that been fixed?
-@end menu
+@node Q2.2.2, Q2.3.1, Q2.2.1, Installation
+@unnumberedsubsec Q2.2.2: Why can't I strip XEmacs?
-@unnumberedsec 2.0: Installation (General), Packages
+@email{cognot@(a)fronsac.ensg.u-nancy.fr, Richard Cognot} writes:
-@node Q2.0.1, Q2.0.2, Installation, Installation
-@unnumberedsubsec Q2.0.1: How do I install the packages?
+@quotation
+Because of the way XEmacs (and every other Emacsen, AFAIK) is built. The
+link gives you a bare-boned emacs (called temacs). temacs is then run,
+preloading some of the lisp files. The result is then dumped into a new
+executable, named xemacs, which will contain all of the preloaded lisp
+functions and data.
-Many people really liked the old way that packages were bundled and do
-not want to mess with packages at all. You can grab all the packages at
-once like you used to with old XEmacs versions. Download the file
+Now, during the dump itself, the executable (code+data+symbols) is
+written on disk using a special unexec() function. This function is
+obviously heavily system dependent. And on some systems, it leads to an
+executable which, although valid, cannot be stripped without damage. If
+memory serves, this is especially the case for AIX binaries. On other
+architectures it might work OK.
-(a)file{xemacs-sumo.tar.gz}
+The Right Way to strip the emacs binary is to strip temacs prior to
+dumping xemacs. This will always work, although you can do that only if
+you install from sources (as temacs is @file{not} part of the binary
+kits).
+@end quotation
-For an XEmacs compiled with Mule you also need
+@email{nat@(a)nataa.fr.eu.org, Nat Makarevitch} writes:
-(a)file{xemacs-mule-sumo.tar.gz}
+@quotation
+Here is the trick:
-These are in the @file{packages} directory on your XEmacs mirror
-archive. N.B. They are called 'Sumo Tarballs' for good reason. They
-are currently about 15MB and 2.3MB (gzipped) respectively.
+@enumerate
+@item
+[ ./configure; make ]
-Install them on Unix and Mac OS X using the shell/Terminal command
+@item
+rm src/xemacs
-@code{cd $prefix/lib/xemacs ; gunzip -c <tarballname> | tar xf -}
+@item
+strip src/temacs
-Where @samp{$prefix} is what you gave to the @samp{--prefix} flag to
-@file{configure}, and defaults to @file{/usr/local}.
+@item
+make
-If you have the packages somewhere nonstandard and don't want to
-bother with @samp{$prefix} (for example, you're a developer and are
-compiling the packages yourself, and want your own private copy of
-everything), you can also directly specify this using @file{configure}.
-To do this under 21.5 and above use the @samp{--package-prefix} parameter
-to specify the directory under which you untarred the above tarballs.
-Under 21.4 and previous you need to use @samp{--package-path},
-something like this:
+@item
+cp src/xemacs /usr/local/bin/xemacs
-@example
- configure
--package-path="~/.xemacs::/src/xemacs/site-packages:/src/xemacs/xemacs-packages:/src/xemacs/mule-packages"
...
-@end example
+@item
+cp lib-src/DOC-19.16-XEmacs
+@iftex
+\ @*
+@end iftex
+/usr/local/lib/xemacs-19.16/i586-unknown-linuxaout
+@end enumerate
+@end quotation
-Under Windows, you need to place the above @samp{tar.gz} files in the
-directory specified using the @samp{PACKAGE_PREFIX} value in
-(a)file{nt/config.inc} and by default is @file{\Program Files\XEmacs}.
-(To untar a @samp{tar.gz} file you will need to use a utility such as
-WinZip, unless you have Cygwin or a similar environment installed, in
-which case the above Unix shell command should work fine.) If you want
-the packages somewhere else, just change @samp{PACKAGE_PREFIX}.
+@unnumberedsec 2.3: Windows Installation (Windows, Cygwin, MinGW)
-Note that XEmacs finds the packages automatically anywhere underneath
-the directory tree where it expects to find the packages. All you
-need to do is put stuff there; you don't need to run any program to
-tell XEmacs to find the packges, or do anything of that sort.
+@node Q2.3.1, Q2.3.2, Q2.2.2, Installation
+@unnumberedsubsec Q2.3.1: What exactly are all the different ways to build XEmacs under
Windows?
-See @file{README.packages} in the top-level source directory for more
-detailed installation instructions.
+XEmacs can be built in several ways in the MS Windows environment.
-As the Sumo tarballs are not regenerated as often as the individual
-packages, it is recommended that you use the automatic package tools
-afterwards to pick up any recent updates.
+The standard way is what we call the "native" port. It uses the Win32
+API and has no connection with X whatsoever -- it does not require X
+libraries to build, nor does it require an X server to run. The native
+port is the most reliable version and provides the best graphical
+support. Almost all development is geared towards this version, and
+there is little reason not to use it.
-@emph{More detailed info}: If the package path is not explicitly
-specified, XEmacs looks for the package directory
-@file{xemacs-packages} (and @file{mule-packages}, etc.) first under
-(a)samp{~/.xemacs}, then for a sister directory
-@file{lib/xemacs-VERSION} of the directory in which the XEmacs
-executable is located, then for a sister directory @file{lib/xemacs}.
-The XEmacs executable (under Unix at least) is installed by default in
-@file{/usr/local/bin}; this explains why XEmacs in its default
-installation will find packages that you put under
-@file{/usr/local/lib/xemacs}.
-
-#### I'm not sure what exactly happens when the package path is
-specifically given, as is the case when the @samp{--package-prefix} or
-@samp{--package-path} options are given to @file{configure}, and
-always under Microsoft Windows.
+The second way to build is the Cygwin port. It takes advantage of
+Cygnus emulation library under Win32. @xref{Q1.2.5, What are Cygwin
+and MinGW, and do I need them to run XEmacs?}, for more information.
-@emph{NOTE}: For detailed information about how the package
-hierarchies work, @xref{Package Overview,,,lispref, the XEmacs Lisp
-Reference Manual}.
+A third way is the MinGW port. It uses the Cygwin environment to
+build but does not require it at runtime. @xref{Q1.2.5, What are
+Cygwin and MinGW, and do I need them to run XEmacs?}, for more
+information.
-@node Q2.0.2, Q2.0.3, Q2.0.1, Installation
-@unnumberedsubsec Q2.0.2: I don't need no steenkin' packages. Do I?
+Finally, you might also be able to build the non-Cygwin, non-MinGW "X"
+port. This was actually the first version of XEmacs that ran under MS
+Windows, and although the code is still in XEmacs, it's essentially
+orphaned and it's unlikely it will compile without a lot of work. If
+you want an MS Windows versin of XEmacs that supports X, use the Cygwin
+version. (The X support there is actively maintained, so that Windows
+developers can test the X support in XEmacs.)
-Strictly speaking, 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_.
+@node Q2.3.2, Q2.3.3, Q2.3.1, Installation
+@unnumberedsubsec Q2.3.2: What compiler/libraries do I need to compile XEmacs?
-@node Q2.0.3, Q2.0.4, Q2.0.2, Installation
-@unnumberedsubsec Q2.0.3: Where do I find external libraries?
+You need Visual C++ 4.2, 5.0, or 6.0 for the native version. (We have
+some beta testers currently trying to compile with
VC.NET, aka version
+7.0, but we can't yet report complete success.) For the Cygwin and
+MinGW versions, you need the Cygwin environment, which comes with GCC,
+the compiler used for those versions. @xref{Q1.2.5, What are Cygwin
+and MinGW, and do I need them to run XEmacs?}, for more information on
+Cygwin and MinGW.
-All external libraries used by XEmacs can be found at the XEmacs FTP
-site
-@iftex
-@*
-@end iftex
-@uref{http://ftp.xemacs.org/pub/aux/}.
+@node Q2.3.3, Q2.3.4, Q2.3.2, Installation
+@unnumberedsubsec Q2.3.3: How do I compile the native port?
-The library versions available here are known to work with XEmacs.
-(Newer versions will probably work as well but we can't guarantee it.)
-We try to keep the libraries up-to-date but may not always succeed.
-If you want to make sure of getting the latest version, check the
-canonical locations below.
+Please read the file @file{nt/README} in the XEmacs distribution, which
+contains the full description.
-The canonical locations (at the time of this writing) are as follows:
+@node Q2.3.4, Q2.3.5, Q2.3.3, Installation
+@unnumberedsubsec Q2.3.4: What do I need for Cygwin?
-@subheading Databases:
+You can find the Cygwin tools and compiler at:
-These DBM implementations are supported by XEmacs:
-native dbm (provided by OS), GDBM, and Berkeley DB version 1, 2 and 3.
+@uref{http://www.cygwin.com/}
-@example
-GDBM is the GNU DBM library, compatible with the Unix dbm library.
-gdbm-1.8.3.tar.gz
-ftp://ftp.gnu.org/pub/gnu/gdbm/
-http://www.gnu.org/software/gdbm/gdbm.html
-configure flag: --with-database=gnudbm
+Click on the @samp{Install or update now!} link, which will download a
+file @file{setup.exe}, which you can use to download everything
+else. (You will need to pick a mirror site; @samp{mirrors.rcn.net} is
+probably the best.) You should go ahead and install everything --
+you'll get various ancillary libraries that XEmacs needs or likes,
+e.g. XPM, PNG, JPEG, TIFF, etc. You can also get X Windows here, if you
+want to compile under X.
+
+If you want to compile without X, you will need the @file{xpm-nox}
+library, which must be specifically selected in the Cygwin netinstaller;
+it is not selected by default. The package has had various names.
+Currently it is called @file{cygXpm-noX4.dll}.
-Berkeley DB is provided by Sleepycat Software.
-db-4.1.25.tar.gz
-http://www.sleepycat.com/
-configure flag: --with-database=berkdb
+@node Q2.3.5, Q2.3.6, Q2.3.4, Installation
+@unnumberedsubsec Q2.3.5: How do I compile under Cygwin?
-OpenLDAP is an implementation of the LDAP X.500 Directory protocol.
-openldap-2.1.12.tgz
-http://www.openldap.org/
-configure flag: --with-ldap
-@end example
+Similar as on Unix; use the usual `configure' and `make' process.
+Some problems to watch out for:
-@subheading Image Format Libraries:
+@itemize @bullet
+@item
+make sure HOME is set. This controls where you
+(a)file{init.el} file comes from;
-@example
-`compface' is an old library for viewing X-Faces in messages.
-It is no longer being maintained and has been frozen for 10 years or
-so, but still works. It should be compiled with the same options that
-X11 was compiled with on your system. The version of this library at
-xemacs.org includes the `xbm2xface.pl' script, written by
-@email{stig@(a)hackvan.com, Stig}, which may be useful when generating
-your own xface.
-compface.tar.gz
-ftp://ftp.cs.indiana.edu/pub/faces/compface/
-configure flag: --with-xface
+@item
+@samp{CYGWIN} needs to be set to @samp{tty} for process support to work;
-The JPEG image format library
-jpegsrc.v6b.tar.gz
-ftp://ftp.uu.net/graphics/jpeg/
-http://www.ijg.org/
-configure flag: --with-jpeg
+@item
+picking up some other grep or other UNIX-like tools can kill configure;
-The TIFF image format library
-tiff-v3.4-tar.gz
-ftp://ftp.sgi.com/graphics/tiff/
-configure flag: --with-tiff
+@item
+static heap too small, adjust @file{src/sheap-adjust.h} to a more positive
+number;
-The XPM image format library
-xpm-3.4k.tar.gz
-ftp://koala.inria.fr/pub/xpm/
-http://www.inria.fr/koala/lehors/xpm.html
-configure flag: --with-xpm
+@item
+(Unconfirmed) The Cygwin version doesn't understand
+@file{//machine/path} type paths so you will need to manually mount a
+directory of this form under a unix style directory for a build to work
+on the directory;
-The PNG image format library
-libpng-1.2.15.tar.gz
-http://www.libpng.org/pub/png/
-configure flag: --with-png
+@item
+If you're building @strong{WITHOUT} X11, don't forget to change symlinks
+(a)file{/usr/lib/libXpm.a} and @file{/usr/lib/libXpm.dll.a} to point to
+the non-X versions of these libraries. By default they point to the X
+versions. So:
-The ZLIB compression library is used by the PNG library.
-A GZIP coding system is also available, in XEmacs 21.5 and onward.
-zlib-1.1.4.tar.gz
-http://www.gzip.org/zlib/
+@example
+/usr/lib/libXpm.a -> /usr/lib/libXpm-noX.a
+/usr/lib/libXpm.dll.a -> /usr/lib/libXpm-noX.dll.a
@end example
+
+(This advice may now be obsolete because of the availability of the
+cygXpm-noX4.dll package from Cygwin. Send confirmation to
+@email{faq@(a)xemacs.org}.)
-@subheading Other Multimedia:
+@item
+Other problems are listed in the @file{PROBLEMS} file, in the top-level
+directory of the XEmacs sources.
-@example
-Network Audio System (NAS) is a client-server sound library for X.
-nas-1.6.src.tar.gz
-ftp://ftp.x.org/contrib/audio/nas/
-http://radscan.com/nas.html
-configure flag: --with-nas
+@end itemize
-Enlightened Sound Daemon (ESD) is yet another sound system.
-esound-0.2.8.tar.gz
-http://www.tux.org/~ricdude/EsounD.html
-Netpbm is a collection of programs that XEmacs might use at runtime.
-netpbm-1mar1994.tar.gz
-netpbm-9.2.tar.gz
-ftp://metalab.unc.edu/pub/Linux/apps/graphics/convert/
+@node Q2.3.6, Q2.3.7, Q2.3.5, Installation
+@unnumberedsubsec Q2.3.6: How do I compile using MinGW (aka @samp{the -mno-cygwin flag
to gcc})?
-Xaw3d is designed to be a drop-in replacement for the Athena widget
-library that `looks cooler'.
-Xaw3d-1.5.tar.gz
-ftp://ftp.x.org/contrib/widgets/Xaw3d/
-@end example
+Similar to the method for Unix. Things to remember:
-@subheading Internationalization:
+@itemize @bullet
+@item
+Specify the target host on the command line for @file{./configure}, e.g.
+(a)samp{./configure i586-pc-mingw32}.
-@example
-Canna is a Japanese language input method.
-Canna has not been updated since 1996.
-Canna35b2.tar.gz
-cfw35f1p.exe (Canna on W95)
-http://www.nec.co.jp/canna/ (in Japanese)
-http://www.nec.co.jp/canna/c-down.html (download site, for those not able
- to read Japanese)
-configure flag: --with-canna
+@item
+Be sure that your build directory is mounted such that it has the
+same path either as a cygwin path (@file{/build/xemacs}) or as a Windows
+path (@file{c:\build\xemacs}).
-Wnn is a multi-language mule input method.
-Wnn4 is the free version, while Wnn6 is the commercial version.
-Wnn4.2.tar.gz
-ftp://ftp.omronsoft.co.jp/pub/Wnn6/ (commercial version)
+@item
+Build @samp{gcc -mno-cygwin} versions of the extra libs, i.e. @file{libpng},
+@file{compface}, etc.
-Wnn4 appears completely orphaned; searches on google turn up XEmacs' own
-site first. However, here is a (very old) site with some info on WNN:
-http://web.kyoto-inet.or.jp/people/tomoko-y/biwa/root/wnn_e.html
+@item
+Specify the target location of the extra libs on the command line
+to @file{configure}, e.g.for 21.4 or earlier
+(a)samp{./configure --site-prefixes=/build/libs i586-pc-mingw32} and for
+21.5 or later
+(a)samp{./configure --with-site-prefixes=/build/libs i586-pc-mingw32}.
+@end itemize
-configure flag: --with-wnn
+@node Q2.3.7, Q2.3.8, Q2.3.6, Installation
+@unnumberedsubsec Q2.3.7: How do I compile with X support?
-Mew is a multi-lingual mailreader.
-mew-1.94.2.tar.gz
-http://www.mew.org/
+To compile under Cygwin, all you need to do is install XFree86, which
+is available as part of the standard Cygwin installation.
+@uref{http://www.cygwin.com/}. Once installed, @file{configure}
+should automatically find the X libraries and compile with X support.
-kterm is a multi-lingual terminal emulator with special support for
-Asian languages with large character sets.
-kterm-6.2.0.tar.gz
-ftp://ftp.x.org/contrib/applications/
+As noted above, the non-Cygwin X support is basically orphaned, and
+probably won't work. But if it want to try, it's described in
+@file{nt/README} in some detail. Basically, you need to get X11
+libraries from @uref{http://ftp.x.org}, and compile them. If the
+precompiled versions are available somewhere, we don't know of it.
-ispell is a spelling checker with support for multiple languages.
-ispell-3.2.06.tar.gz
-http://ficus-www.cs.ucla.edu/ficus-members/geoff/ispell.html
-http://www.kdstevens.com/~stevens/ispell-page.html
+@node Q2.3.8, Q2.4.1, Q2.3.7, Installation
+@unnumberedsubsec Q2.3.8: Cygwin XEmacs won't start -- cygXpm-noX4.dll was not
found (NEW)
-SKK (Simple Kana-to-Kanji) is a simple input method for Japanese.
-It has been modified to work with XEmacs.
-skk-8.6x.tar.gz
+The Cygwin binary distributed with the netinstaller uses an external DLL
+to handle XPM images (such as toolbar buttons). You may get an error like
-X11 fonts for numerous languages.
-intlfonts-1.2.tar.gz
-http://www.gnu.org/directory/localization/intlfonts.html
+@example
+This application has failed to start because cygXpm-noX4.dll was not found.
+Re-installing the application may fix this problem.
@end example
-@subheading Miscellaneous:
+Andy Piper <andy@(a)xemacs.org> sez:
@example
-ncurses is the standard free software curses library.
-ncurses-5.3.tar.gz
-http://dickey.his.com/ncurses/ncurses.html
-ftp://dickey.his.com/ncurses/
+cygXpm-noX4 is part of the cygwin distribution under libraries or
+graphics, but is not installed by default. You need to run the
+cygwin setup again and select this package.
@end example
-@subheading Developer Tools:
+Ie, reinstalling XEmacs won't help because it is not part of the XEmacs
+distribution.
-@example
-CVS is the version control system used by XEmacs to manage the sources.
-cvs-1.11.5.tar.gz
-http:/www.cvshome.org/
+@unnumberedsec 2.4: General Troubleshooting
-bzip2 is a compressor that compresses much better than gzip.
-bzip2-1.0.2.tar.gz
-http://sources.redhat.com/bzip2/
+@node Q2.4.1, Q2.4.2, Q2.3.8, Installation
+@unnumberedsubsec Q2.4.1: How do I deal with bugs or with problems building,
installing, or running?
-texi2html is a script that converts Texinfo pages to HTML.
-texi2html-1.64.tar.gz
-http://www.mathematik.uni-kl.de/~obachman/Texi2html/
+The file @file{PROBLEMS} contains information on many common problems that
+occur in building, installing and running XEmacs.
-Gnats is a bug tracking system. Red Hat recommends using GNATS 4.0 for any
-new installations (see the beta below).
-gnats-3.113.tar.gz
-gnats-3.999.2.tar.gz
-cern_wwwgnats_v2.0-beta.tar.gz (WWW front end to Gnats)
-http://sources.redhat.com/gnats/
+Reports of bugs in XEmacs should be sent to
+@email{xemacs-beta@(a)xemacs.org}. You can also post to the newsgroup
+comp.emacs.xemacs (or equivalentlt, send to the mailing list
+@email{xemacs@(a)xemacs.org}), but it is less likely that the developers
+will see it in a timely fashion. @xref{Bugs,,, xemacs, the XEmacs
+User's Manual}, for more information on how to report bugs.
+(a)xref{Q1.4.2}, for more information on mailing lists relating to
+XEmacs.
-Use autoconf to generate `configure' from `configure.in'.
-NOTE: There is a more recent series, 2.5x, that XEmacs doesn't currently
-work with.
-autoconf-2.13.tar.gz
-http://www.gnu.org/software/autoconf/
+There are three ways to read the Bugs section.
-Use the `applypatch' program from the makepatch package
-to apply patches to upgrade from one beta release to another.
-Use this if you have a slow or expensive connection to the Net.
-makepatch-2.00_09.tar.gz
-http://www.squirrel.nl/people/jvromans/
-@end example
+@enumerate
+@item
+In a printed copy of the XEmacs manual.
-@node Q2.0.4, Q2.0.5, Q2.0.3, Installation
-@unnumberedsubsec Q2.0.4: How do I specify the paths that XEmacs uses for finding
files?
+@item
+With Info. First, start XEmacs. From the menu, select
+@samp{Help->Info (Online Docs)->Info Contents} to enter Info, then
+click on @samp{XEmacs}, then on @samp{Bugs}. Or, use the keyboard: do
+@kbd{C-h i} to enter Info, then @kbd{m XEmacs RET} to get to the Emacs
+manual, then @kbd{m Bugs RET} to get to the section on bugs. Or use
+standalone Info in a like manner. (Standalone Info is part of the
+Texinfo distribution, not part of the XEmacs distribution.)
-You can specify what paths to use by using a number of different flags
-when running configure. See the section MAKE VARIABLES in the top-level
-file INSTALL in the XEmacs distribution for a listing of those flags.
+@item
+By hand. Do
+@example
+cat info/xemacs* | more "+/^File: xemacs.info, Node: Bugs,"
+@end example
+@end enumerate
-Most of the time, however, the simplest fix is: @strong{do not} specify
-paths as you might for GNU Emacs. XEmacs can generally determine the
-necessary paths dynamically at run time. The only path that generally
-needs to be specified is the root directory to install into. That can
-be specified by passing the @code{--prefix} flag to configure. For a
-description of the XEmacs install tree, please consult the @file{NEWS}
-file.
+@node Q2.4.2, Q2.4.3, Q2.4.1, Installation
+@unnumberedsubsec Q2.4.2: Help! XEmacs just crashed on me!
-@node Q2.0.5, Q2.0.6, Q2.0.4, Installation
-@unnumberedsubsec Q2.0.5: Running XEmacs without installing
+First of all, don't panic. Whenever XEmacs crashes, it tries extremely
+hard to auto-save all of your files before dying. (The main time that
+this will not happen is if the machine physically lost power or if you
+killed the XEmacs process using @code{kill -9}). The next time you try
+to edit those files, you will be informed that a more recent auto-save
+file exists. You can use @kbd{M-x recover-file} to retrieve the
+auto-saved version of the file.
-How can I just try XEmacs without installing it?
+You can use the command @kbd{M-x recover-session} after a crash to pick
+up where you left off.
-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.
+Now, XEmacs is not perfect, and there may occasionally be times, or
+particular sequences of actions, that cause it to crash. If you can
+come up with a reproducible way of doing this (or even if you have a
+pretty good memory of exactly what you were doing at the time), the
+maintainers would be very interested in knowing about it. The best
+way to report a bug is using @kbd{M-x report-emacs-bug} (or by
+selecting @samp{Send Bug Report...} from the Help menu). If that
+won't work (e.g. you can't get XEmacs working at all), send ordinary
+mail to @email{xemacs-beta@(a)xemacs.org}. @emph{MAKE SURE} to include
+the output from the crash, especially including the Lisp backtrace, as
+well as the XEmacs configuration from @kbd{M-x describe-installation}
+(or equivalently, the file @file{Installation} in the top of the build
+tree). Note that the developers do @emph{not} usually follow
+(a)samp{comp.emacs.xemacs} on a regular basis; thus, this is better for
+general questions about XEmacs than bug reports.
-A good method is to make a shell alias for xemacs:
+If at all possible, include a C stack backtrace of the core dump that
+was produced. This shows where exactly things went wrong, and makes
+it much easier to diagnose problems. To do this under Unix and Mac OS
+X, you need to locate the core file (it's called @file{core}, and is
+usually sitting in the directory that you started XEmacs from, or your
+home directory if that other directory was not writable). Then, go to
+that directory and execute a command like:
@example
-alias xemacs=/i/xemacs-20.2/src/xemacs
+gdb `which xemacs` core
@end example
-(You will obviously use whatever directory you downloaded the source
-tree to instead of @file{/i/xemacs-20.2}).
+and then issue the command @samp{where} to get the stack backtrace. You
+might have to use @code{dbx} or some similar debugger in place of
+@code{gdb}. If you don't have any such debugger available, complain to
+your system administrator.
-This will let you run XEmacs without massive copying.
+It's possible that a core file didn't get produced or the stack trace
+from gdb is garbage, in which case you're out of luck unless you can
+reproduce the bug. A nonexistent core file can happen in some
+circumstances on some operating systems, depending on what exactly
+triggered the crash. It's also possible, however, that your limits
+are set to turn them off. You may be able to reenable them using a
+command like @samp{unlimit coredumpsize} or @samp{ulimit -c}. (To find
+out how your limits are set, use the command @samp{limit}.) However, if
+you didn't explicitly set your limits this way, go complain to your
+system administrator and tell him not to disable core files by
+default.
-@node Q2.0.6, Q2.0.7, Q2.0.5, Installation
-@unnumberedsubsec Q2.0.6: XEmacs is too big
+A garbaged stack trace can happen for various reasons. Some versions
+of gdb are broken on certain operating systems and aren't able to read
+the core file. It's also possible that the stack got overwritten
+during the crash. A very simple reason, however, is that your version
+of XEmacs was compiled without debugging information or had the
+debugging information stripped. A compilation with optimization can
+also result in partly or completely garbaged stack trace. In such
+cases, you will need to recompile XEmacs with debugging information
+and without optimization; @xref{Q2.4.4, How to debug an XEmacs problem
+with a debugger}. Note also that core files currently don't work at
+all under Cygwin, and the only way to get a backtrace is to run XEmacs
+from gdb.
-The space required by the installation directories can be
-reduced dramatically if desired. Gzip all the .el files. Remove all
-the packages you'll never want to use. Remove the TexInfo manuals.
-Remove the Info (and use just hardcopy versions of the manual). Remove
-most of the stuff in etc. Remove or gzip all the source code. Gzip or
-remove the C source code. Configure it so that copies are not made of
-the support lisp.
+If you cannot get a backtrace from the core dump, but can reproduce
+the problem, try running XEmacs under gdb. The goal is to get clean C
+and Lisp backtraces and submit a bug report including full
+configuration information as described above, as this will greatly
+assist in the process of tracking down the bug. However, even partial
+information is better than none. The process of getting backtraces
+from gdb is described in detail in @ref{Q2.4.4, How to debug an XEmacs
+problem with a debugger}.
-These are all Emacs Lisp source code and bytecompiled object code. You
-may safely gzip everything named *.el here. You may remove any package
-you don't use. @emph{Nothing bad will happen if you delete a package
-that you do not use}. You must be sure you do not use it though, so be
-conservative at first.
+If you're under Microsoft Windows, you're out of luck unless you happen
+to have a debugging aid installed on your system, for example Visual
+C++. In this case, the crash will result in a message giving you the
+option to enter a debugger (for example, by pressing @samp{Cancel}). Do
+this and locate the stack-trace window. (If your XEmacs was built
+without debugging information, the stack trace may not be very useful.)
-Any package with the possible exceptions of xemacs-base, and EFS are
-candidates for removal. Ask yourself, @emph{Do I ever want to use this
-package?} If the answer is no, then it is a candidate for removal.
+When making a problem report make sure that:
-First, gzip all the .el files. Then go about package by package and
-start gzipping the .elc files. Then run XEmacs and do whatever it is
-you normally do. If nothing bad happens, then remove the package. You
-can remove a package via the PUI interface
-(@code{M-x pui-list-packages}, then press @kbd{d} to mark the packages
-you wish to delete, and then @kbd{x} to delete them.
+@enumerate
+@item
+Report @strong{all} of the information output by XEmacs during the
+crash.
-Another method is to do @code{M-x package-get-delete-package}.
+@item
+You mention what O/S and Hardware you are running XEmacs on.
-@node Q2.0.7, Q2.1.1, Q2.0.6, Installation
-@unnumberedsubsec Q2.0.7: EFS fails with "500 AUTH not understood" (NEW)
+@item
+What version of XEmacs you are running.
-A typical error: FTP Error: USER request failed; 500 AUTH not understood.
+@item
+What build options you are using.
-Thanks to giacomo boffi @email{giacomo.boffi@(a)polimi.it} who recommends
-on comp.emacs.xemacs:
+@item
+If the problem is related to graphics and you are running Unix or Mac
+OS X, we will also need to know what version of the X Window System
+you are running, and what window manager you are using.
- tell your ftp client to not attempt AUTH authentication (or do not
- use FTP servers that don't understand AUTH)
+@item
+If the problem happened on a TTY, please include the terminal type.
-and notes that you need to add an element (often "-u") to
-`efs-ftp-program-args'. Use M-x customize-variable, and verify the
-needed flag with `man ftp' or other local documentation.
+@item
+Try very hard to get both C and Lisp backtraces, as described above.
+@end enumerate
-@unnumberedsec 2.1: Unix/Mac OS X Installation (Also Relevant to Cygwin, MinGW)
+Much of the information above is automatically generated by @kbd{M-x
+report-emacs-bug}. Even more, and often useful, information can be
+generated by redirecting the output of @code{make} and @code{make check}
+to a file (@file{beta.err} is the default used by @code{build-report}),
+and executing @kbd{M-x build-report}.
-@node Q2.1.1, Q2.1.2, Q2.0.7, Installation
-@unnumberedsubsec Q2.1.1: Libraries in non-standard locations
-I have x-faces, jpeg, xpm etc. all in different places. I've tried
-space-separated, comma-separated, several --site-libraries, all to no
-avail.
+@node Q2.4.3, Q2.4.4, Q2.4.2, Installation
+@unnumberedsubsec Q2.4.3: XEmacs crashes and I compiled it myself.
-@example
---site-libraries='/path/one /path/two /path/etc'
-@end example
+There have been a variety of reports of crashes due to compilers with
+buggy optimizers. If you are compiling with optimization, consider
+turning it off (@pxref{Q2.4.4, How to debug an XEmacs problem with a
+debugger}) and recompiling.
-@node Q2.1.2, Q2.1.3, Q2.1.1, Installation
-@unnumberedsubsec Q2.1.2: Why can't I strip XEmacs?
+Please see the @file{PROBLEMS} file that comes with XEmacs (it's in
+the top-level source directory) to read what it says about your
+platform.
-@email{cognot@(a)fronsac.ensg.u-nancy.fr, Richard Cognot} writes:
+If you compiled XEmacs 21.4 or ealier using @samp{--use-union-type}, or
+21.5 or later using @samp{--enable-union-type} (or in either case used
+the option @samp{USE_UNION_TYPE} in @file{config.inc} under Windows),
+try recompiling again without it. The union type has been known to
+trigger compiler errors in a number of cases.
-@quotation
-Because of the way XEmacs (and every other Emacsen, AFAIK) is built. The
-link gives you a bare-boned emacs (called temacs). temacs is then run,
-preloading some of the lisp files. The result is then dumped into a new
-executable, named xemacs, which will contain all of the preloaded lisp
-functions and data.
+@node Q2.4.4, Q2.4.5, Q2.4.3, Installation
+@unnumberedsubsec Q2.4.4: How to debug an XEmacs problem with a debugger
-Now, during the dump itself, the executable (code+data+symbols) is
-written on disk using a special unexec() function. This function is
-obviously heavily system dependent. And on some systems, it leads to an
-executable which, although valid, cannot be stripped without damage. If
-memory serves, this is especially the case for AIX binaries. On other
-architectures it might work OK.
+If XEmacs does crash on you, one of the most productive things you can
+do to help get the bug fixed is to poke around a bit with the debugger.
+Here are some hints:
-The Right Way to strip the emacs binary is to strip temacs prior to
-dumping xemacs. This will always work, although you can do that only if
-you install from sources (as temacs is @file{not} part of the binary
-kits).
-@end quotation
+@itemize @bullet
+@item
+First of all, if the crash is at all reproducible, consider very
+strongly recompiling your XEmacs with debugging symbols and with no
+optimization (e.g. with GCC use the compiler flags @samp{-g -O0} --
+that's an "oh" followed by a zero), and with the configure options
+@samp{--debug=yes} and @samp{--error-checking=all}
+(@samp{--enable-debug=yes} and @samp{--enable-error-checking=all} on
+XEmacs 21.5 or later). This will make your XEmacs run somewhat slower,
+but you are a lot more likely to catch the problem earlier (closer to
+its source). It makes it a lot easier to determine what's going on with
+a debugger. The way to control the compiler flags is with the
+configuration option @samp{--cflags} (@samp{--with-cflags} in 21.5). If
+you have a recent version of 21.5, you should use
+@samp{--without-optimization} in preference to directly setting
+@samp{--cflags}.
-@email{nat@(a)nataa.fr.eu.org, Nat Makarevitch} writes:
+@item
+If it's not a true crash (@emph{i.e.}, XEmacs is hung, or a zombie
+process), or it's inconvenient to run XEmacs again because XEmacs is
+already running or is running in batch mode as part of a bunch of
+scripts, you may be able to attach to the existing process with your
+debugger. Under Unix and Mac OS X, the typical way to do this is to
+first use some variant of the @samp{ps} command to figure out the
+process ID of XEmacs, for example @samp{ps -auxww | grep xemacs} under
+a BSD variant, @samp{ps -elf | grep xemacs} under Linux or System V,
+or @samp{ps -aW | grep xemacs} under Cygwin. Then run
-@quotation
-Here is the trick:
+@example
+gdb /path/to/xemacs/xemacs ####
+@end example
-@enumerate
-@item
-[ ./configure; make ]
+Where @code{####} is the process id of your XEmacs. (If you're not
+sure, try using @samp{which xemacs}.) When gdb attaches, the xemacs
+will stop and you can type @samp{where} in gdb to get a stack trace as
+usual. To get things moving again, you can just type @samp{quit} in
+gdb. It'll tell you the program is running and ask if you want to
+quit anyways. Say @samp{y} and it'll quit and have your emacs
+continue from where it was at.
-@item
-rm src/xemacs
+If you're running another debugger, a similar method may work, or you
+may have to run the debugger first and then use the @code{attach}
+command or something similar.
-@item
-strip src/temacs
+Under Microsoft Windows, use the menu item @samp{Build->Start
+Debug->Attach to Process...} and select the XEmacs process from the list
+given.
@item
-make
+If you're able to run XEmacs under a debugger and reproduce the crash,
+here are some things you can do:
@item
-cp src/xemacs /usr/local/bin/xemacs
+If XEmacs is hitting an assertion failure, put a breakpoint on
+@code{assert_failed()}.
@item
-cp lib-src/DOC-19.16-XEmacs
-@iftex
-\ @*
-@end iftex
-/usr/local/lib/xemacs-19.16/i586-unknown-linuxaout
-@end enumerate
-@end quotation
+If XEmacs is hitting some weird Lisp error that's causing it to crash
+(e.g. during startup), put a breakpoint on @code{signal_1()}---this is
+declared static in @file{eval.c}.
-@node Q2.1.3, Q2.1.4, Q2.1.2, Installation
-@unnumberedsubsec Q2.1.3: Compiling XEmacs with Netaudio.
+@item
+If XEmacs is outputting lots of X errors, put a breakpoint on
+@code{x_error_handler()}; that will tell you which call is causing
+them. Note that the result may not be very useful by default because
+X Windows normally operates asynchronously: A bunch of commands are
+buffered up and then sent to the server all at once. This greatly
+improves performance over a network but means that an error may not be
+reported until the server receives the commands, which can be long
+after XEmacs made the erroneous calls. For best results, you need to
+make the X server synchronous before getting the backtrace. This can
+be done by starting XEmacs with the @samp{-sync} option or executing
+the Lisp code @code{(x-debug-mode t)}.
-What is the best way to compile XEmacs with the netaudio system, since I
-have got the netaudio system compiled but installed at a weird place, I
-am not root. Also in the READMEs it does not say anything about
-compiling with the audioserver?
-
-You should only need to add some stuff to the configure command line.
-To tell it to compile in netaudio support: @samp{--with-sound=both}, or
-@samp{--with-sound=nas} if you don't want native sound support for some
-reason.) To tell it where to find the netaudio includes and libraries:
+@item
+Internally, you will probably see lots of variables that hold objects of
+type @code{Lisp_Object}. These are references to Lisp objects.
+Printing them out with the debugger probably won't be too
+useful---you'll likely just see a number. To decode them, do this:
@example
---site-libraries=WHATEVER
---site-includes=WHATEVER
+call debug_print (OBJECT)
@end example
+
+where @var{OBJECT} is whatever you want to decode (it can be a variable,
+a function call, etc.). This uses the Lisp printing routines to out a
+readable representation on the TTY from which the xemacs process was
+invoked.
-Then (fingers crossed) it should compile and it will use netaudio if you
-have a server running corresponding to the X server. The netaudio server
-has to be there when XEmacs starts. If the netaudio server goes away and
-another is run, XEmacs should cope (fingers crossed, error handling in
-netaudio isn't perfect).
-
-BTW, netaudio has been renamed as it has a name clash with something
-else, so if you see references to NAS or Network Audio System, it's the
-same thing. It also might be found at
-@uref{ftp://ftp.x.org/contrib/audio/nas/}.
-
-@node Q2.1.4, Q2.2.1, Q2.1.3, Installation
-@unnumberedsubsec Q2.1.4: Problems with Linux and ncurses.
+Under 21.5 and later, @code{dp} is defined as an easier-to-type equivalent
+of @code{debug_print}. You can also try @code{dpa} if you can't see
+the output from @code{debug_print} (this will return a string containing
+the output), or use @code{debug_p3} if @code{debug_print} itself triggers
+a crash (this is a less comprehensive but super-safe way to print out
+a Lisp object).
-On Linux 1.3.98 with termcap 2.0.8 and the ncurses that came with libc
-5.2.18, XEmacs 20.0b20 is unable to open a tty device:
+@item
+If you want to get a Lisp backtrace showing the Lisp call
+stack, do this:
@example
-src/xemacs -nw -q
-Initialization error:
-@iftex
-@*
-@end iftex
-Terminal type `xterm' undefined (or can't access database?)
+call debug_backtrace ()
@end example
-
-@email{ben@(a)xemacs.org, Ben Wing} writes:
-
-@quotation
-Your ncurses configuration is messed up. Your /usr/lib/terminfo is a
-bad pointer, perhaps to a CD-ROM that is not inserted.
-@end quotation
-
-@unnumberedsec 2.2: Windows Installation (Windows, Cygwin, MinGW)
-
-@node Q2.2.1, Q2.2.2, Q2.1.4, Installation
-@unnumberedsubsec Q2.2.1: What exactly are all the different ways to build XEmacs under
Windows?
-
-XEmacs can be built in several ways in the MS Windows environment.
-
-The standard way is what we call the "native" port. It uses the Win32
-API and has no connection with X whatsoever -- it does not require X
-libraries to build, nor does it require an X server to run. The native
-port is the most reliable version and provides the best graphical
-support. Almost all development is geared towards this version, and
-there is little reason not to use it.
-
-The second way to build is the Cygwin port. It takes advantage of
-Cygnus emulation library under Win32. @xref{Q1.1.4, What are Cygwin
-and MinGW, and do I need them to run XEmacs?}, for more information.
-
-A third way is the MinGW port. It uses the Cygwin environment to
-build but does not require it at runtime. @xref{Q1.1.4, What are
-Cygwin and MinGW, and do I need them to run XEmacs?}, for more
-information.
-Finally, you might also be able to build the non-Cygwin, non-MinGW "X"
-port. This was actually the first version of XEmacs that ran under MS
-Windows, and although the code is still in XEmacs, it's essentially
-orphaned and it's unlikely it will compile without a lot of work. If
-you want an MS Windows versin of XEmacs that supports X, use the Cygwin
-version. (The X support there is actively maintained, so that Windows
-developers can test the X support in XEmacs.)
+Under 21.5 and later, @code{db} is defined as an easier-to-type equivalent
+of @code{debug_backtrace}.
-@node Q2.2.2, Q2.2.3, Q2.2.1, Installation
-@unnumberedsubsec Q2.2.2: What compiler/libraries do I need to compile XEmacs?
+@item
+Using @code{debug_print} and @code{debug_backtrace} has two
+disadvantages - they can only be used with a running (including hung
+or zombie) xemacs process, and they do not display the internal C
+structure of a Lisp Object. Even if all you've got is a core dump,
+all is not lost.
-You need Visual C++ 4.2, 5.0, or 6.0 for the native version. (We have
-some beta testers currently trying to compile with
VC.NET, aka version
-7.0, but we can't yet report complete success.) For the Cygwin and
-MinGW versions, you need the Cygwin environment, which comes with GCC,
-the compiler used for those versions. @xref{Q1.1.4, What are Cygwin
-and MinGW, and do I need them to run XEmacs?}, for more information on
-Cygwin and MinGW.
+If you're using GDB, there are some macros in the file
+(a)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:
-@node Q2.2.3, Q2.2.4, Q2.2.2, Installation
-@unnumberedsubsec Q2.2.3: How do I compile the native port?
+@table @code
+@item pobj
+Usage: pobj lisp_object @*
+Print the internal C representation of a lisp object.
-Please read the file @file{nt/README} in the XEmacs distribution, which
-contains the full description.
+@item xtype
+Usage: xtype lisp_object @*
+Print the Lisp type of a lisp object.
-@node Q2.2.4, Q2.2.5, Q2.2.3, Installation
-@unnumberedsubsec Q2.2.4: What do I need for Cygwin?
+@item lbt
+Usage: lbt @*
+Print the current Lisp stack trace.
+Requires a running xemacs process. (It works by calling the db
+routine described above.)
-You can find the Cygwin tools and compiler at:
+@item ldp
+Usage: ldp lisp_object @*
+Print a Lisp Object value using the Lisp printer.
+Requires a running xemacs process. (It works by calling the dp
+routine described above.)
-@uref{http://www.cygwin.com/}
+@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.
-Click on the @samp{Install or update now!} link, which will download a
-file @file{setup.exe}, which you can use to download everything
-else. (You will need to pick a mirror site; @samp{mirrors.rcn.net} is
-probably the best.) You should go ahead and install everything --
-you'll get various ancillary libraries that XEmacs needs or likes,
-e.g. XPM, PNG, JPEG, TIFF, etc. You can also get X Windows here, if you
-want to compile under X.
+@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.
-If you want to compile without X, you will need the @file{xpm-nox}
-library, which must be specifically selected in the Cygwin netinstaller;
-it is not selected by default. The package has had various names.
-Currently it is called @file{cygXpm-noX4.dll}.
+@item check-xemacs
+Usage: check-xemacs @*
+Run the test suite. Equivalent to 'make check'.
-@node Q2.2.5, Q2.2.6, Q2.2.4, Installation
-@unnumberedsubsec Q2.2.5: How do I compile under Cygwin?
+@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
-Similar as on Unix; use the usual `configure' and `make' process.
-Some problems to watch out for:
+If you are using Sun's @file{dbx} debugger, there is an equivalent file
+(a)file{src/.dbxrc}, which defines the same commands for dbx.
-@itemize @bullet
@item
-make sure HOME is set. This controls where you
-(a)file{init.el} file comes from;
+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 may be due to
+dynamic linking. (This happens especially under Linux.) Consider
+reconfiguring with @samp{--dynamic=no} (@samp{--with-dynamic=no} in 21.5
+or later). Also, sometimes (again under Linux), stack backtraces of
+core dumps will have the frame where the fatal signal occurred mangled;
+if you can obtain a stack trace while running the XEmacs process under a
+debugger, the stack trace should be clean.
+
+@email{1CMC3466@(a)ibm.mtsac.edu, Curtiss} suggests upgrading to ld.so
+version 1.8 if dynamic linking and debugging is a problem on Linux.
@item
-@samp{CYGWIN} needs to be set to @samp{tty} for process support to work;
+If you're using a debugger to get a C stack backtrace and you're
+getting a completely mangled and bogus stack trace, it's probably due to
+one of the following:
+@enumerate a
@item
-picking up some other grep or other UNIX-like tools can kill configure;
+Your executable has been stripped. Bad news. Tell your sysadmin not to
+do this---it doesn't accomplish anything except to save a bit of disk
+space, and makes debugging much much harder.
@item
-static heap too small, adjust @file{src/sheap-adjust.h} to a more positive
-number;
+Your stack is getting trashed. Debugging this is hard; you have to do a
+binary-search type of narrowing down where the crash occurs, until you
+figure out exactly which line is causing the problem. Of course, this
+only works if the bug is highly reproducible. Also, in many cases if
+you run XEmacs from the debugger, the debugger can protect the stack
+somewhat. However, if the stack is being smashed, it is typically the
+case that there is a wild pointer somewhere in the program, often quite
+far from where the crash occurs.
@item
-(Unconfirmed) The Cygwin version doesn't understand
-@file{//machine/path} type paths so you will need to manually mount a
-directory of this form under a unix style directory for a build to work
-on the directory;
+If your stack trace has exactly one frame in it, with address 0x0, this
+could simply mean that XEmacs attempted to execute code at that address,
+e.g. through jumping to a null function pointer. Unfortunately, under
+those circumstances, GDB under Linux doesn't know how to get a stack
+trace. (Yes, this is the fourth Linux-related problem I've mentioned. I
+have no idea why GDB under Linux is so bogus. Complain to the GDB
+authors, or to comp.os.linux.development.system.) Again, you'll have to
+use the narrowing-down process described above.
@item
-If you're building @strong{WITHOUT} X11, don't forget to change symlinks
-(a)file{/usr/lib/libXpm.a} and @file{/usr/lib/libXpm.dll.a} to point to
-the non-X versions of these libraries. By default they point to the X
-versions. So:
+You will get a Lisp backtrace output when XEmacs crashes, so you'll have
+something useful.
-@example
-/usr/lib/libXpm.a -> /usr/lib/libXpm-noX.a
-/usr/lib/libXpm.dll.a -> /usr/lib/libXpm-noX.dll.a
-@end example
+@end enumerate
-(This advice may now be obsolete because of the availability of the
-cygXpm-noX4.dll package from Cygwin. Send confirmation to
-@email{faq@(a)xemacs.org}.)
+@item
+If you compile with the newer gcc variants gcc-2.8 or egcs, you will
+also need gdb 4.17 or above. Earlier releases of gdb can't handle the
+debug information generated by the newer compilers.
@item
-Other problems are listed in the @file{PROBLEMS} file, in the top-level
-directory of the XEmacs sources.
+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.
+@item
+If you are running Microsoft Windows, the the file @file{nt/README} for
+further information about debugging XEmacs.
+
@end itemize
+@node Q2.4.5, Q2.4.6, Q2.4.4, Installation
+@unnumberedsubsec Q2.4.5: I get a cryptic error message when trying to do something.
-@node Q2.2.6, Q2.2.7, Q2.2.5, Installation
-@unnumberedsubsec Q2.2.6: How do I compile using MinGW (aka @samp{the -mno-cygwin flag
to gcc})?
+When I try to use some particular option of some particular package, I
+get a cryptic error message in the minibuffer.
-Similar to the method for Unix. Things to remember:
+If the message went by too quickly, use @samp{Help->Recent Messages}
+from the menubar (or type @kbd{C-h l}) to see recent messages.
-@itemize @bullet
-@item
-Specify the target host on the command line for @file{./configure}, e.g.
-(a)samp{./configure i586-pc-mingw32}.
+If you can't figure out what's going on, select
+@samp{Options->Troubleshooting->Debug on Error} from the menubar (or
+type @kbd{M-:} then @kbd{(setq debug-on-error t)}) then try and make
+the error happen again. This will put in the debugger (you can get
+out of this and continue what you were doing before by typing @kbd{c})
+and give you a backtrace that may be enlightening. If not, try
+reading through this FAQ; if that fails, you could try posting to
+(a)samp{comp.emacs.xemacs} (making sure to include the backtrace) and
+someone may be able to help. If you can identify which XEmacs Lisp
+source file the error is coming from you can get a more detailed stack
+backtrace by doing the following:
+@enumerate
@item
-Be sure that your build directory is mounted such that it has the
-same path either as a cygwin path (@file{/build/xemacs}) or as a Windows
-path (@file{c:\build\xemacs}).
+Visit the .el file in an XEmacs buffer.
@item
-Build @samp{gcc -mno-cygwin} versions of the extra libs, i.e. @file{libpng},
-@file{compface}, etc.
+Issue the command @kbd{M-x eval-current-buffer}.
@item
-Specify the target location of the extra libs on the command line
-to @file{configure}, e.g.
-(a)samp{./configure --site-prefixes=/build/libs i586-pc-mingw32}.
-@end itemize
-
-@node Q2.2.7, Q2.2.8, Q2.2.6, Installation
-@unnumberedsubsec Q2.2.7: How do I compile with X support?
-
-To compile under Cygwin, all you need to do is install XFree86, which
-is available as part of the standard Cygwin installation.
-@uref{http://www.cygwin.com/}. Once installed, @file{configure}
-should automatically find the X libraries and compile with X support.
-
-As noted above, the non-Cygwin X support is basically orphaned, and
-probably won't work. But if it want to try, it's described in
-@file{nt/README} in some detail. Basically, you need to get X11
-libraries from @uref{ftp://ftp.x.org}, and compile them. If the
-precompiled versions are available somewhere, we don't know of it.
-
-@node Q2.2.8, Q2.3.1, Q2.2.7, Installation
-@unnumberedsubsec Q2.2.8: Cygwin XEmacs won't start -- cygXpm-noX4.dll was not
found (NEW)
-
-The Cygwin binary distributed with the netinstaller uses an external DLL
-to handle XPM images (such as toolbar buttons). You may get an error like
+Reproduce the error.
+@end enumerate
- This application has failed to start because cygXpm-noX4.dll was not found.
- Re-installing the application may fix this problem.
+For more information on debugging Lisp code, @xref{Debugging,,,
+lispref, XEmacs Lisp Reference Manual}.
-Andy Piper <andy@(a)xemacs.org> sez:
+@node Q2.4.6, Q2.4.7, Q2.4.5, Installation
+@unnumberedsubsec Q2.4.6: XEmacs hangs when I try to do something.
- cygXpm-noX4 is part of the cygwin distribution under libraries or
- graphics, but is not installed by default. You need to run the
- cygwin setup again and select this package.
+XEmacs might just be slow; some operations take a long time. XEmacs
+may also be waiting on a response from the network, for example when
+you are trying to send mail.
-Ie, reinstalling XEmacs won't help because it is not part of the XEmacs
-distribution.
+You can usually interrupt XEmacs by typing @kbd{C-g}. If not (for
+example, Lisp code explicitly disabled this by setting
+@code{inhibit-quit}), you can use the "critical quit" mechanism by
+typing @kbd{Control-Shift-G}. This should also pop you into the
+debugger and give you a backtrace, which can tell you where the
+problem is (@pxref{Q2.4.4, How to debug an XEmacs problem with a
+debugger}). (Note that setting @code{debug-on-quit} or selecting
+@samp{Options->Troubleshooting->Debug on Quit} will also cause regular
+@kbd{C-g} to enter the debugger and give you a backtrace.)
-@unnumberedsec 2.3: General Troubleshooting
+If you can't interrupt XEmacs this way, or for some reason XEmacs is
+not talking to the keyboard, you can try sending the @samp{SIGINT}
+signal using the @samp{kill} command.
-@node Q2.3.1, Q2.3.2, Q2.2.8, Installation
-@unnumberedsubsec Q2.3.1: Help! XEmacs just crashed on me!
+If the Lisp backtrace isn't enlightening, or if XEmacs is so hung that
+you can't interrupt it at all, you could try attaching to the process
+and getting a C stack backtrace. @xref{Q2.4.4, How to debug an XEmacs
+problem with a debugger}.
-First of all, don't panic. Whenever XEmacs crashes, it tries extremely
-hard to auto-save all of your files before dying. (The main time that
-this will not happen is if the machine physically lost power or if you
-killed the XEmacs process using @code{kill -9}). The next time you try
-to edit those files, you will be informed that a more recent auto-save
-file exists. You can use @kbd{M-x recover-file} to retrieve the
-auto-saved version of the file.
+@node Q2.4.7, Q2.4.8, Q2.4.6, Installation
+@unnumberedsubsec Q2.4.7: I get an error message when XEmacs is running in batch mode.
-You can use the command @kbd{M-x recover-session} after a crash to pick
-up where you left off.
+Typically this happens when you are trying to compile some Elisp code.
+If you are doing this as part of XEmacs or the XEmacs packages, you
+should automatically get a backtrace, which can help you determine the
+source of the problem. In other cases, you can get equivalent results
+by setting the environment variable @samp{XEMACSDEBUG} to @samp{(setq
+stack-trace-on-error t load-always-display-messages t
+load-ignore-out-of-date-elc-files t load-show-full-path-in-messages
+t)} (this needs to be all on one line; to set an environment variable,
+use @samp{export XEMACSDEBUG='FOO'} under @samp{bash}, @samp{zsh},
+etc. or @samp{setenv XEMACSDEBUG 'FOO'} under @samp{csh} and
+@samp{tcsh}). @samp{XEMACSDEBUG} specifies Lisp code that will be
+executed at startup time.
-Now, XEmacs is not perfect, and there may occasionally be times, or
-particular sequences of actions, that cause it to crash. If you can
-come up with a reproducible way of doing this (or even if you have a
-pretty good memory of exactly what you were doing at the time), the
-maintainers would be very interested in knowing about it. The best
-way to report a bug is using @kbd{M-x report-emacs-bug} (or by
-selecting @samp{Send Bug Report...} from the Help menu). If that
-won't work (e.g. you can't get XEmacs working at all), send ordinary
-mail to @email{xemacs-beta@(a)xemacs.org}. @emph{MAKE SURE} to include
-the output from the crash, especially including the Lisp backtrace, as
-well as the XEmacs configuration from @kbd{M-x describe-installation}
-(or equivalently, the file @file{Installation} in the top of the build
-tree). Note that the developers do @emph{not} usually follow
-(a)samp{comp.emacs.xemacs} on a regular basis; thus, this is better for
-general questions about XEmacs than bug reports.
+If the backtrace is not sufficiently useful in helping you diagnose
+the problem, you should consider using a debugger such as GDB.
+(a)xref{Q2.4.4, How to debug an XEmacs problem with a debugger}. You
+probably want to set a breakpoint on @code{signal_1}. Since such
+errors often occur during compiling, which is often triggered by a
+complex command run from a make suite, it may be easier to attach to
+the process once it's running.
-If at all possible, include a C stack backtrace of the core dump that
-was produced. This shows where exactly things went wrong, and makes
-it much easier to diagnose problems. To do this under Unix and Mac OS
-X, you need to locate the core file (it's called @file{core}, and is
-usually sitting in the directory that you started XEmacs from, or your
-home directory if that other directory was not writable). Then, go to
-that directory and execute a command like:
+Under Microsoft Windows (and perhaps other operating systems), there is
+another useful trick you can do if you have configured with debugging
+support (configure option @samp{--debug} (@samp{--with-debug} in 21.5)
+or setting @samp{DEBUG_XEMACS} in @file{nt/config.inc}). Set the
+environment variable @samp{XEMACSDEBUG} (as described above) to
+@samp{(setq debug-on-error t)}. Then, when an error occurs
+noninteractively, instead of trying to invoke the Lisp debugger (which
+obviously won't work), XEmacs will break out to a C debugger using
+@code{(force-debugging-signal t)}. @emph{NOTE}: This runs
+@code{abort()}!!! (As well as and after executing INT 3 under MS
+Windows, which should invoke a debugger if it's active.) This is
+guaranteed to kill XEmacs! (But in this situation, XEmacs is about to
+die anyway, and if no debugger is present, this will usefully dump
+core.)
-@example
-gdb `which xemacs` core
-@end example
+@node Q2.4.8, Q2.4.9, Q2.4.7, Installation
+@unnumberedsubsec Q2.4.8: The keyboard or mouse is not working properly, or I have some
other event-related problem.
-and then issue the command @samp{where} to get the stack backtrace. You
-might have to use @code{dbx} or some similar debugger in place of
-@code{gdb}. If you don't have any such debugger available, complain to
-your system administrator.
+XEmacs has various facilities for debugging event handling.
-It's possible that a core file didn't get produced or the stack trace
-from gdb is garbage, in which case you're out of luck unless you can
-reproduce the bug. A nonexistent core file can happen in some
-circumstances on some operating systems, depending on what exactly
-triggered the crash. It's also possible, however, that your limits
-are set to turn them off. You may be able to reenable them using a
-command like @samp{unlimit coredumpsize} or @samp{ulimit -c}. (To find
-out how your limits are set, use the command @samp{limit}.) However, if
-you didn't explicitly set your limits this way, go complain to your
-system administrator and tell him not to disable core files by
-default.
+First, try setting the variable @code{debug-emacs-events} to non-zero.
+This will output various information showing which events are being
+received and how they are being translated. This may show you, for
+example, that a key command is getting intercepted using
+@code{key-translation-map}; this problem can otherwise be very tricky
+to debug.
-A garbaged stack trace can happen for various reasons. Some versions
-of gdb are broken on certain operating systems and aren't able to read
-the core file. It's also possible that the stack got overwritten
-during the crash. A very simple reason, however, is that your version
-of XEmacs was compiled without debugging information or had the
-debugging information stripped. A compilation with optimization can
-also result in partly or completely garbaged stack trace. In such
-cases, you will need to recompile XEmacs with debugging information
-and without optimization; @xref{Q2.3.3, How to debug an XEmacs problem
-with a debugger}. Note also that core files currently don't work at
-all under Cygwin, and the only way to get a backtrace is to run XEmacs
-from gdb.
+Under X, you can see exactly which events are being received from the
+window system by setting @code{x-debug-events} to non-zero. (The value
+@samp{1} gives you regular output, and @samp{2} gives you verbose
+output, including all parameters.)
-If you cannot get a backtrace from the core dump, but can reproduce
-the problem, try running XEmacs under gdb. The goal is to get clean C
-and Lisp backtraces and submit a bug report including full
-configuration information as described above, as this will greatly
-assist in the process of tracking down the bug. However, even partial
-information is better than none. The process of getting backtraces
-from gdb is described in detail in @ref{Q2.3.3, How to debug an XEmacs
-problem with a debugger}.
+A similar facility exists under MS Windows: Set
+@code{debug-mswindows-events} to non-zero. (The value @samp{1} gives
+you regular output. The value @samp{2} gives you verbose output,
+including all parameters. The value @samp{3} gives you
+super-gorily-detailed output.)
-If you're under Microsoft Windows, you're out of luck unless you happen
-to have a debugging aid installed on your system, for example Visual
-C++. In this case, the crash will result in a message giving you the
-option to enter a debugger (for example, by pressing @samp{Cancel}). Do
-this and locate the stack-trace window. (If your XEmacs was built
-without debugging information, the stack trace may not be very useful.)
+@node Q2.4.9, Q2.4.10, Q2.4.8, Installation
+@unnumberedsubsec Q2.4.9: @kbd{C-g} doesn't work for me. Is it broken?
-When making a problem report make sure that:
+@kbd{C-g} does work for most people in most circumstances. If it
+doesn't, there are two possible explanations:
@enumerate
@item
-Report @strong{all} of the information output by XEmacs during the
-crash.
+XEmacs is hung in a way that prevents @kbd{C-g} from working. This
+can happen when code is wrapped with a binding of @code{inhibit-quit}
+to @code{t}; you should still be able interrupt XEmacs using "critical
+quit". On the other hand, XEmacs may be seriously wedged. (If you're
+lucky, sending @samp{SIGINT} to the XEmacs process will interrupt it.)
+(a)xref{Q2.4.6, XEmacs hangs when I try to do something.}.
@item
-You mention what O/S and Hardware you are running XEmacs on.
+@kbd{C-g} is indeed broken on your system. To test, try executing
+@code{(while t)} from the @samp{*scratch*} buffer. If @kbd{C-g}
+doesn't interrupt, then it's broken. This used to happen with systems
+where @samp{SIGIO} was broken, but @samp{BROKEN_SIGIO} wasn't defined.
+However, there may not be very many such systems nowadays.
+@end enumerate
-@item
-What version of XEmacs you are running.
+@node Q2.4.10, Q2.4.11, Q2.4.9, Installation
+@unnumberedsubsec Q2.4.10: How do I debug process-related problems?
-@item
-What build options you are using.
+Under MS Windows, you can set the variable
+@code{debug-mswindows-process-command-lines} to non-@samp{nil} to get
+information on exactly what is getting passed to a process. This can
+be useful in determining problems with quoting. (Under Unix, a process
+receives each argument separately, but under MS Windows a single
+command line is received, and arguments with spaces or other special
+characters in them must be quoted. Unfortunately this means that each
+process, potentially at least, has its own quoting conventions, and
+the code to process quoting conventions in @file{cmd.exe}, the Visual
+C++ startup code and the like is baroque and poorly documented.
+XEmacs uses the variable
+@code{mswindows-construct-process-command-line-alist} to construct a
+command line from a list of arguments based on the command to be run,
+but it is (and cannot be) a perfect solution.)
-@item
-If the problem is related to graphics and you are running Unix or Mac
-OS X, we will also need to know what version of the X Window System
-you are running, and what window manager you are using.
+@node Q2.4.11, Q2.4.12, Q2.4.10, Installation
+@unnumberedsubsec Q2.4.11: XEmacs is outputting lots of X errors.
-@item
-If the problem happened on a TTY, please include the terminal type.
+If this is happening, we would very much like to know what's causing
+them. To find this out, see @ref{Q2.4.4, How to debug an XEmacs
+problem with a debugger}. Try to get both a C and Lisp backtrace, and
+send them along with the full error output to
+@email{xemacs-beta@(a)xemacs.org}.
-@item
-Try very hard to get both C and Lisp backtraces, as described above.
-@end enumerate
+@node Q2.4.12, Q2.5.1, Q2.4.11, Installation
+@unnumberedsubsec Q2.4.12: After upgrading, XEmacs won't do `foo' any more!
-Much of the information above is automatically generated by @kbd{M-x
-report-emacs-bug}. Even more, and often useful, information can be
-generated by redirecting the output of @code{make} and @code{make check}
-to a file (@file{beta.err} is the default used by @code{build-report}),
-and executing @kbd{M-x build-report}.
+You have been used to doing `foo', but now when you invoke it (or
+click the toolbar button or select the menu item), nothing (or an
+error) happens. The simplest explanation is that you are missing a
+package that is essential to you. You can either track it down and
+install it (there is a list of packages and brief descriptions of
+their contents in @file{etc/PACKAGES}), or install the `Sumo Tarball'
+((a)pxref{Q2.1.2, How do I figure out which packages to install?}).
+@c #### should xref to XEmacs manual here
-@node Q2.3.2, Q2.3.3, Q2.3.1, Installation
-@unnumberedsubsec Q2.3.2: XEmacs crashes and I compiled it myself.
+@unnumberedsec 2.5: Startup-Related Problems
-There have been a variety of reports of crashes due to compilers with
-buggy optimizers. If you are compiling with optimization, consider
-turning it off (@pxref{Q2.3.3, How to debug an XEmacs problem with a
-debugger}) and recompiling.
+@node Q2.5.1, Q2.5.2, Q2.4.12, Installation
+@unnumberedsubsec Q2.5.1: XEmacs cannot connect to my X Terminal!
-Please see the @file{PROBLEMS} file that comes with XEmacs (it's in
-the top-level source directory) to read what it says about your
-platform.
+Help! I can not get XEmacs to display on my Envizex X-terminal!
-If you compiled XEmacs using @samp{--use-union-type} (or the option
-@samp{USE_UNION_TYPE} in @file{config.inc} under Windows), try
-recompiling again without it. The union type has been known to trigger
-compiler errors in a number of cases.
+Try setting the @code{DISPLAY} variable using the numeric IP address of
+the host you are running XEmacs from.
-@node Q2.3.3, Q2.3.4, Q2.3.2, Installation
-@unnumberedsubsec Q2.3.3: How to debug an XEmacs problem with a debugger
+@node Q2.5.2, Q2.5.3, Q2.5.1, Installation
+@unnumberedsubsec Q2.5.2 Startup problems related to paths or package locations.
-If XEmacs does crash on you, one of the most productive things you can
-do to help get the bug fixed is to poke around a bit with the debugger.
-Here are some hints:
+First of all, if XEmacs can't find the packages, check to make sure
+that you put the packages in the right place, or that you told XEmacs
+where to look for the packages when you compiled it. @xref{Q2.1.1}.
+
+If something is still going wrong, or you get a startup warning about
+not being able to deduce some paths, you can get detailed information
+on the path-searching process at startup by setting the environment
+variable @samp{EMACSDEBUGPATHS} to a non-null value. One thing to
+look for if you're having package problems is the value of
+@samp{configure-package-path}. This corresponds to what was compiled
+into XEmacs using the @samp{--package-prefix} or @samp{--package-path}
+parameter (@pxref{Q2.1.1}). If this has the value of @samp{nil},
+this means that no value was compiled into XEmacs using these parameters.
-@itemize @bullet
-@item
-First of all, if the crash is at all reproducible, consider very
-strongly recompiling your XEmacs with debugging symbols and with no
-optimization (e.g. with GCC use the compiler flags @samp{-g -O0} --
-that's an "oh" followed by a zero), and with the configure options
-@samp{--debug=yes} and @samp{--error-checking=all}. This will make
-your XEmacs run somewhat slower, but you are a lot more likely to
-catch the problem earlier (closer to its source). It makes it a lot
-easier to determine what's going on with a debugger. The way to
-control the compiler flags is with the configuration option
-@samp{--cflags}. If you have a recent version of 21.5, you should use
-@samp{--without-optimization} in preference to directly setting
-@samp{--cflags}.
+@node Q2.5.3, Q2.5.4, Q2.5.2, Installation
+@unnumberedsubsec Q2.5.3: XEmacs won't start without network.
-@item
-If it's not a true crash (@emph{i.e.}, XEmacs is hung, or a zombie
-process), or it's inconvenient to run XEmacs again because XEmacs is
-already running or is running in batch mode as part of a bunch of
-scripts, you may be able to attach to the existing process with your
-debugger. Under Unix and Mac OS X, the typical way to do this is to
-first use some variant of the @samp{ps} command to figure out the
-process ID of XEmacs, for example @samp{ps -auxww | grep xemacs} under
-a BSD variant, @samp{ps -elf | grep xemacs} under Linux or System V,
-or @samp{ps -aW | grep xemacs} under Cygwin. Then run
+If XEmacs starts when you're on the network, but fails when you're not
+on the network, you may be missing a "localhost" entry in your
+@file{/etc/hosts} file. The file should contain an entry like:
@example
-gdb /path/to/xemacs/xemacs ####
+127.0.0.1 localhost
@end example
-Where @code{####} is the process id of your XEmacs. (If you're not
-sure, try using @samp{which xemacs}.) When gdb attaches, the xemacs
-will stop and you can type @samp{where} in gdb to get a stack trace as
-usual. To get things moving again, you can just type @samp{quit} in
-gdb. It'll tell you the program is running and ask if you want to
-quit anyways. Say @samp{y} and it'll quit and have your emacs
-continue from where it was at.
+Add that line, and XEmacs will be happy.
-If you're running another debugger, a similar method may work, or you
-may have to run the debugger first and then use the @code{attach}
-command or something similar.
+@node Q2.5.4, Q2.5.5, Q2.5.3, Installation
+@unnumberedsubsec Q2.5.4: Startup warnings about deducing proper fonts?
-Under Microsoft Windows, use the menu item @samp{Build->Start
-Debug->Attach to Process...} and select the XEmacs process from the list
-given.
+How can I avoid the startup warnings about deducing proper fonts?
-@item
-If you're able to run XEmacs under a debugger and reproduce the crash,
-here are some things you can do:
+This is highly dependent on your installation, but try with the
+following font as your base font for XEmacs and see what it does:
-@item
-If XEmacs is hitting an assertion failure, put a breakpoint on
-@code{assert_failed()}.
+@format
+-adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1
+@end format
-@item
-If XEmacs is hitting some weird Lisp error that's causing it to crash
-(e.g. during startup), put a breakpoint on @code{signal_1()}---this is
-declared static in @file{eval.c}.
+More precisely, do the following in your resource file:
-@item
-If XEmacs is outputting lots of X errors, put a breakpoint on
-@code{x_error_handler()}; that will tell you which call is causing
-them. Note that the result may not be very useful by default because
-X Windows normally operates asynchronously: A bunch of commands are
-buffered up and then sent to the server all at once. This greatly
-improves performance over a network but means that an error may not be
-reported until the server receives the commands, which can be long
-after XEmacs made the erroneous calls. For best results, you need to
-make the X server synchronous before getting the backtrace. This can
-be done by starting XEmacs with the @samp{-sync} option or executing
-the Lisp code @code{(x-debug-mode t)}.
+@format
+Emacs.default.attributeFont: \
+-adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1
+@end format
-@item
-Internally, you will probably see lots of variables that hold objects of
-type @code{Lisp_Object}. These are references to Lisp objects.
-Printing them out with the debugger probably won't be too
-useful---you'll likely just see a number. To decode them, do this:
+If you just don't want to see the @samp{*Warnings*} buffer at startup
+time, you can set this:
+
+@lisp
+(setq display-warning-minimum-level 'error)
+@end lisp
+
+The buffer still exists; it just isn't in your face.
+
+@node Q2.5.5, Q2.5.6, Q2.5.4, Installation
+@unnumberedsubsec Q2.5.5: Warnings from incorrect key modifiers.
+
+The following information comes from the @file{PROBLEMS} file that comes
+with XEmacs.
+
+If you're having troubles with HP/UX it is because HP/UX defines the
+modifiers wrong in X. Here is a shell script to fix the problem; be
+sure that it is run after VUE configures the X server.
@example
-call debug_print (OBJECT)
+#! /bin/sh
+xmodmap 2> /dev/null - << EOF
+keysym Alt_L = Meta_L
+keysym Alt_R = Meta_R
+EOF
+
+xmodmap - << EOF
+clear mod1
+keysym Mode_switch = NoSymbol
+add mod1 = Meta_L
+keysym Meta_R = Mode_switch
+add mod2 = Mode_switch
+EOF
@end example
+
+@node Q2.5.6, , Q2.5.5, Installation
+@unnumberedsubsec Q2.5.6: XEmacs 21.1 on Windows used to spawn an ugly console window
on every startup. Has that been fixed?
+
+Yes.
-where @var{OBJECT} is whatever you want to decode (it can be a variable,
-a function call, etc.). This uses the Lisp printing routines to out a
-readable representation on the TTY from which the xemacs process was
-invoked.
+The console was there because @file{temacs} (and in turn, @file{xemacs})
+was a console application, and Windows typically creates a new
+console for a console process unless the creating process requests that
+one isn't created. This used to be fixed with @file{runemacs}, a small
+Windows application that existed merely to start @file{xemacs}, stating
+that it didn't want a console.
-Under 21.5 and later, @code{dp} is defined as an easier-to-type equivalent
-of @code{debug_print}. You can also try @code{dpa} if you can't see
-the output from @code{debug_print} (this will return a string containing
-the output), or use @code{debug_p3} if @code{debug_print} itself triggers
-a crash (this is a less comprehensive but super-safe way to print out
-a Lisp object).
+XEmacs 21.4 fixes this cleanly by the virtue of being a true "GUI"
+application. The explanation of what that means is included for
+educational value.
-@item
-If you want to get a Lisp backtrace showing the Lisp call
-stack, do this:
+When building an application to be run in a Win32 environment, you must
+state which sub-system it is to run in. Valid subsystems include
+"console" and "gui". The subsystem you use affects the run time
+libraries linked into your application, the start up function that is
+run before control is handed over to your application, the entry point
+to your program, and how Windows normally invokes your program. (Console
+programs automatically get a console created for them at startup if
+their stdin/stdout don't point anywhere useful, which is the case when
+run from the GUI. This is a stupid design, of course -- instead, the
+console should get created only when the first I/O actually occurs!
+GUI programs have an equally stupid design: When called from
+@file{CMD.EXE}/(a)file{COMMAND.COM}, their stdin/stdout will be set to
+point nowhere useful, even though the command shell has its own
+stdin/stdout. It's as if someone who had learned a bit about stdio but
+had no actual knowledge of interprocess communication designed the
+scheme; unfortunately, the whole process-communication aspect of the
+Win32 API is equally badly designed.) For example, the entry point for a
+console app is "main" (which is what you'd expect for a C/C++ program),
+but the entry point for a "gui" app is "WinMain". This confuses
and
+annoys a lot of programmers who've grown up on Unix systems, where the
+kernel doesn't really care whether your application is a gui program or
+not.
-@example
-call debug_backtrace ()
-@end example
+For reasons not altogether clear, and are lost in the mists of time and
+tradition, XEmacs on Win32 started out as a console application, and
+therefore a console was automatically created for it. (It may have been
+made a console application partly because a console is needed in some
+circumstances, especially under Win95, to interrupt, terminate, or send
+signals to a child process, and because of the bogosity mentioned above
+with GUI programs and the standard command shell. Currently, XEmacs
+just creates and immediately hides a console when necessary, and
+works around the "no useful stdio" problem by creating its own console
+window as necessary to display messages in.)
-Under 21.5 and later, @code{db} is defined as an easier-to-type equivalent
-of @code{debug_backtrace}.
+@node Editing, Display, Installation, Top
+@unnumbered 3 Editing Functions
-@item
-Using @code{debug_print} and @code{debug_backtrace} has two
-disadvantages - they can only be used with a running (including hung
-or zombie) xemacs process, and they do not display the internal C
-structure of a Lisp Object. Even if all you've got is a core dump,
-all is not lost.
+This is part 3 of the XEmacs Frequently Asked Questions list. This
+section is devoted to the editing-related capabilities of XEmacs (the
+keyboard, mouse, buffers, text selections, etc.) and how to customize
+them.
-If you're using GDB, there are some macros in the file
-(a)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:
+@menu
+3.0: The Keyboard
+* Q3.0.1:: How can I customize the keyboard?
+* Q3.0.2:: How can I bind complex functions (or macros) to keys?
+* Q3.0.3:: How do I bind C-. and C-; to scroll one line up and down?
+* Q3.0.4:: Globally binding @kbd{Delete}?
+* Q3.0.5:: How to map @kbd{Help} key alone on Sun type4 keyboard?
+* Q3.0.6:: How can you type in special characters in XEmacs?
+* Q3.0.7:: Can I turn on @dfn{sticky} modifier keys?
+* Q3.0.8:: How do I map the arrow keys?
+* Q3.0.9:: HP Alt key as Meta.
+* Q3.0.10:: Why does edt emulation not work?
+* Q3.0.11:: How can I emulate VI and use it as my default mode?
-@table @code
-@item pobj
-Usage: pobj lisp_object @*
-Print the internal C representation of a lisp object.
+3.1: The Mouse
+* Q3.1.1:: How can I turn off Mouse pasting?
+* Q3.1.2:: How do I set control/meta/etc modifiers on mouse buttons?
+* Q3.1.3:: Clicking the left button does not do anything in buffer list.
+* Q3.1.4:: How can I get a list of buffers when I hit mouse button 3?
+* Q3.1.5:: How can I set XEmacs up so that it pastes where the text cursor is?
-@item xtype
-Usage: xtype lisp_object @*
-Print the Lisp type of a lisp object.
+3.2: Buffers, Text Editing
+* Q3.2.1:: Can I have the end of the buffer delimited in some way?
+* Q3.2.2:: How do I insert today's date into a buffer?
+* Q3.2.3:: How do I get a single minibuffer frame?
+* Q3.2.4:: How can I enable auto-indent and/or Filladapt?
+* Q3.2.5:: How can I get XEmacs to come up in text/auto-fill mode by default?
+
+3.3: Text Selections
+* Q3.3.1:: How do I select a rectangular region?
+* Q3.3.2:: How can I turn off or change highlighted selections?
+* Q3.3.3:: How do I cause typing on an active region to remove it?
+* Q3.3.4:: Can I turn off the highlight during isearch?
+* Q3.3.5:: Why is killing so slow?
+* Q3.3.6:: Why does @kbd{M-w} take so long?
+
+3.4: Editing Source Code
+* Q3.4.1:: I do not like cc-mode. How do I use the old c-mode?
+* Q3.4.2:: How do you make XEmacs indent CL if-clauses correctly?
+@end menu
-@item lbt
-Usage: lbt @*
-Print the current Lisp stack trace.
-Requires a running xemacs process. (It works by calling the db
-routine described above.)
+@unnumberedsec 3.0: The Keyboard
-@item ldp
-Usage: ldp lisp_object @*
-Print a Lisp Object value using the Lisp printer.
-Requires a running xemacs process. (It works by calling the dp
-routine described above.)
+@node Q3.0.1, Q3.0.2, Editing, Editing
+@unnumberedsubsec Q3.0.1: How can I customize the keyboard?
-@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.
+#### Write me.
-@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.
+@node Q3.0.2, Q3.0.3, Q3.0.1, Editing
+@unnumberedsubsec Q3.0.2: How can I bind complex functions (or macros) to keys?
-@item check-xemacs
-Usage: check-xemacs @*
-Run the test suite. Equivalent to 'make check'.
+As an example, say you want the @kbd{paste} key on a Sun keyboard to
+insert the current Primary X selection at point. You can accomplish this
+with:
-@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
+@lisp
+(define-key global-map [f18] 'x-insert-selection)
+@end lisp
-If you are using Sun's @file{dbx} debugger, there is an equivalent file
-(a)file{src/.dbxrc}, which defines the same commands for dbx.
+However, this only works if there is a current X selection (the
+selection will be highlighted). The functionality I like is for the
+@kbd{paste} key to insert the current X selection if there is one,
+otherwise insert the contents of the clipboard. To do this you need to
+pass arguments to @code{x-insert-selection}. This is done by wrapping
+the call in a 'lambda form:
-@item
-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 may be due to
-dynamic linking. (This happens especially under Linux.) Consider
-reconfiguring with @samp{--dynamic=no}. Also, sometimes (again under
-Linux), stack backtraces of core dumps will have the frame where the
-fatal signal occurred mangled; if you can obtain a stack trace while
-running the XEmacs process under a debugger, the stack trace should be
-clean.
+@lisp
+(global-set-key [f18]
+ (lambda () (interactive) (x-insert-selection t nil)))
+@end lisp
-@email{1CMC3466@(a)ibm.mtsac.edu, Curtiss} suggests upgrading to ld.so
-version 1.8 if dynamic linking and debugging is a problem on Linux.
+This binds the f18 key to a @dfn{generic} functional object. The
+interactive spec is required because only interactive functions can be
+bound to keys.
-@item
-If you're using a debugger to get a C stack backtrace and you're
-getting a completely mangled and bogus stack trace, it's probably due to
-one of the following:
+For the FAQ example you could use:
-@enumerate a
-@item
-Your executable has been stripped. Bad news. Tell your sysadmin not to
-do this---it doesn't accomplish anything except to save a bit of disk
-space, and makes debugging much much harder.
+@lisp
+(global-set-key [(control ?.)]
+ (lambda () (interactive) (scroll-up 1)))
+(global-set-key [(control ?;)]
+ (lambda () (interactive) (scroll-up -1)))
+@end lisp
-@item
-Your stack is getting trashed. Debugging this is hard; you have to do a
-binary-search type of narrowing down where the crash occurs, until you
-figure out exactly which line is causing the problem. Of course, this
-only works if the bug is highly reproducible. Also, in many cases if
-you run XEmacs from the debugger, the debugger can protect the stack
-somewhat. However, if the stack is being smashed, it is typically the
-case that there is a wild pointer somewhere in the program, often quite
-far from where the crash occurs.
+This is fine if you only need a few functions within the lambda body.
+If you're doing more it's cleaner to define a separate function.
+(a)xref{Q3.0.3, How do I bind C-. and C-; to scroll one line up and
+down?}.
-@item
-If your stack trace has exactly one frame in it, with address 0x0, this
-could simply mean that XEmacs attempted to execute code at that address,
-e.g. through jumping to a null function pointer. Unfortunately, under
-those circumstances, GDB under Linux doesn't know how to get a stack
-trace. (Yes, this is the fourth Linux-related problem I've mentioned. I
-have no idea why GDB under Linux is so bogus. Complain to the GDB
-authors, or to comp.os.linux.development.system.) Again, you'll have to
-use the narrowing-down process described above.
+@node Q3.0.3, Q3.0.4, Q3.0.2, Editing
+@unnumberedsubsec Q3.0.3: How do I bind C-. and C-; to scroll one line up and down?
-@item
-You will get a Lisp backtrace output when XEmacs crashes, so you'll have
-something useful.
+Add the following (Thanks to @email{mly@(a)adoc.xerox.com, Richard Mlynarik} and
+@email{wayne@(a)zen.cac.stratus.com, Wayne Newberry}) to @file{.emacs}:
-@end enumerate
+@lisp
+(defun scroll-up-one-line ()
+ (interactive)
+ (scroll-up 1))
-@item
-If you compile with the newer gcc variants gcc-2.8 or egcs, you will
-also need gdb 4.17 or above. Earlier releases of gdb can't handle the
-debug information generated by the newer compilers.
+(defun scroll-down-one-line ()
+ (interactive)
+ (scroll-down 1))
-@item
-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.
+(global-set-key [(control ?.)] 'scroll-up-one-line) ; C-.
+(global-set-key [(control ?;)] 'scroll-down-one-line) ; C-;
+@end lisp
-@item
-If you are running Microsoft Windows, the the file @file{nt/README} for
-further information about debugging XEmacs.
+The key point is that you can only bind simple functions to keys; you
+can not bind a key to a function that you're also passing arguments
+to. (@pxref{Q3.0.2, How can I bind complex functions (or macros) to
+keys?} for a better answer).
-@end itemize
+@node Q3.0.4, Q3.0.5, Q3.0.3, Editing
+@unnumberedsubsec Q3.0.4: Globally binding @kbd{Delete}?
-@node Q2.3.4, Q2.3.5, Q2.3.3, Installation
-@unnumberedsubsec Q2.3.4: I get a cryptic error message when trying to do something.
+I cannot manage to globally bind my @kbd{Delete} key to something other
+than the default. How does one do this?
-When I try to use some particular option of some particular package, I
-get a cryptic error message in the minibuffer.
+Answer: The problem is that many modes explicitly bind @kbd{Delete}. To
+get around this, try the following:
-If the message went by too quickly, use @samp{Help->Recent Messages}
-from the menubar (or type @kbd{C-h l}) to see recent messages.
+@lisp
+(defun foo ()
+ (interactive)
+ (message "You hit DELETE"))
-If you can't figure out what's going on, select
-@samp{Options->Troubleshooting->Debug on Error} from the menubar (or
-type @kbd{M-:} then @kbd{(setq debug-on-error t)}) then try and make
-the error happen again. This will put in the debugger (you can get
-out of this and continue what you were doing before by typing @kbd{c})
-and give you a backtrace that may be enlightening. If not, try
-reading through this FAQ; if that fails, you could try posting to
-(a)samp{comp.emacs.xemacs} (making sure to include the backtrace) and
-someone may be able to help. If you can identify which XEmacs Lisp
-source file the error is coming from you can get a more detailed stack
-backtrace by doing the following:
+(define-key key-translation-map 'delete 'redirected-delete)
+(global-set-key 'redirected-delete 'foo)
+@end lisp
-@enumerate
-@item
-Visit the .el file in an XEmacs buffer.
+@node Q3.0.5, Q3.0.6, Q3.0.4, Editing
+@unnumberedsubsec Q3.0.5: How to map @kbd{Help} key alone on Sun type4 keyboard?
-@item
-Issue the command @kbd{M-x eval-current-buffer}.
+The following works in GNU Emacs 19:
-@item
-Reproduce the error.
-@end enumerate
+@lisp
+(global-set-key [help] 'help-command);; Help
+@end lisp
-For more information on debugging Lisp code, @xref{Debugging,,,
-lispref, XEmacs Lisp Reference Manual}.
+The following works in XEmacs with the addition of shift:
+
+@lisp
+(global-set-key [(shift help)] 'help-command);; Help
+@end lisp
-@node Q2.3.5, Q2.3.6, Q2.3.4, Installation
-@unnumberedsubsec Q2.3.5: XEmacs hangs when I try to do something.
+But it doesn't work alone. This is in the file @file{PROBLEMS} which
+should have come with your XEmacs installation: @emph{Emacs ignores the
+@kbd{help} key when running OLWM}.
-XEmacs might just be slow; some operations take a long time. XEmacs
-may also be waiting on a response from the network, for example when
-you are trying to send mail.
+OLWM grabs the @kbd{help} key, and retransmits it to the appropriate
+client using
+@iftex
+@*
+@end iftex
+@code{XSendEvent}. Allowing Emacs to react to synthetic
+events is a security hole, so this is turned off by default. You can
+enable it by setting the variable @code{x-allow-sendevents} to t. You
+can also cause fix this by telling OLWM to not grab the help key, with
+the null binding @code{OpenWindows.KeyboardCommand.Help:}.
-You can usually interrupt XEmacs by typing @kbd{C-g}. If not (for
-example, Lisp code explicitly disabled this by setting
-@code{inhibit-quit}), you can use the "critical quit" mechanism by
-typing @kbd{Control-Shift-G}. This should also pop you into the
-debugger and give you a backtrace, which can tell you where the
-problem is (@pxref{Q2.3.3, How to debug an XEmacs problem with a
-debugger}). (Note that setting @code{debug-on-quit} or selecting
-@samp{Options->Troubleshooting->Debug on Quit} will also cause regular
-@kbd{C-g} to enter the debugger and give you a backtrace.)
+@node Q3.0.6, Q3.0.7, Q3.0.5, Editing
+@unnumberedsubsec Q3.0.6: How can you type in special characters in XEmacs?
+One way is to use the package @code{x-compose}. Then you can use
+sequences like @kbd{Compose " a} to get ä, etc.
-If you can't interrupt XEmacs this way, or for some reason XEmacs is
-not talking to the keyboard, you can try sending the @samp{SIGINT}
-signal using the @samp{kill} command.
+Another way is to use the @code{iso-insert} package. Then you can use
+sequences like @kbd{C-x 8 " a} to get ä, etc.
-If the Lisp backtrace isn't enlightening, or if XEmacs is so hung that
-you can't interrupt it at all, you could try attaching to the process
-and getting a C stack backtrace. @xref{Q2.3.3, How to debug an XEmacs
-problem with a debugger}.
+@email{glynn@(a)sensei.co.uk, Glynn Clements} writes:
-@node Q2.3.6, Q2.3.7, Q2.3.5, Installation
-@unnumberedsubsec Q2.3.6: I get an error message when XEmacs is running in batch mode.
+@quotation
+It depends upon your X server.
-Typically this happens when you are trying to compile some Elisp code.
-If you are doing this as part of XEmacs or the XEmacs packages, you
-should automatically get a backtrace, which can help you determine the
-source of the problem. In other cases, you can get equivalent results
-by setting the environment variable @samp{XEMACSDEBUG} to @samp{(setq
-stack-trace-on-error t load-always-display-messages t
-load-ignore-out-of-date-elc-files t load-show-full-path-in-messages
-t)} (this needs to be all on one line; to set an environment variable,
-use @samp{export XEMACSDEBUG='FOO'} under @samp{bash}, @samp{zsh},
-etc. or @samp{setenv XEMACSDEBUG 'FOO'} under @samp{csh} and
-@samp{tcsh}). @samp{XEMACSDEBUG} specifies Lisp code that will be
-executed at startup time.
+Generally, the simplest way is to define a key as Multi_key with
+xmodmap, e.g.
+@c hey, show some respect, willya -- there's xkeycaps, isn't there? --
+@c chr ;)
+@example
+ xmodmap -e 'keycode 0xff20 = Multi_key'
+@end example
-If the backtrace is not sufficiently useful in helping you diagnose
-the problem, you should consider using a debugger such as GDB.
-(a)xref{Q2.3.3, How to debug an XEmacs problem with a debugger}. You
-probably want to set a breakpoint on @code{signal_1}. Since such
-errors often occur during compiling, which is often triggered by a
-complex command run from a make suite, it may be easier to attach to
-the process once it's running.
+You will need to pick an appropriate keycode. Use xev to find out the
+keycodes for each key.
-Under Microsoft Windows (and perhaps other operating systems), there
-is another useful trick you can do if you have configured with
-debugging support (configure option @samp{--debug} or setting
-@samp{DEBUG_XEMACS} in @file{nt/config.inc}). Set the environment
-variable @samp{XEMACSDEBUG} (as described above) to @samp{(setq
-debug-on-error t)}. Then, when an error occurs noninteractively,
-instead of trying to invoke the Lisp debugger (which obviously won't
-work), XEmacs will break out to a C debugger using
-@code{(force-debugging-signal t)}. @emph{NOTE}: This runs
-@code{abort()}!!! (As well as and after executing INT 3 under MS
-Windows, which should invoke a debugger if it's active.) This is
-guaranteed to kill XEmacs! (But in this situation, XEmacs is about to
-die anyway, and if no debugger is present, this will usefully dump
-core.)
+[NB: On a `Windows' keyboard, recent versions of XFree86 automatically
+define the right `Windows' key as Multi_key'.]
-@node Q2.3.7, Q2.3.8, Q2.3.6, Installation
-@unnumberedsubsec Q2.3.7: The keyboard or mouse is not working properly, or I have some
other event-related problem.
+Once you have Multi_key defined, you can use e.g.
+@example
+ Multi a ' => á
+ Multi e " => ë
+ Multi c , => ç
+@end example
-XEmacs has various facilities for debugging event handling.
+etc.
-First, try setting the variable @code{debug-emacs-events} to non-zero.
-This will output various information showing which events are being
-received and how they are being translated. This may show you, for
-example, that a key command is getting intercepted using
-@code{key-translation-map}; this problem can otherwise be very tricky
-to debug.
+Also, recent versions of XFree86 define various AltGr-<key>
+combinations as dead keys, i.e.
+@example
+ AltGr [ => dead_diaeresis
+ AltGr ] => dead_tilde
+ AltGr ; => dead_acute
+@end example
+etc.
-Under X, you can see exactly which events are being received from the
-window system by setting @code{x-debug-events} to non-zero. (The value
-@samp{1} gives you regular output, and @samp{2} gives you verbose
-output, including all parameters.)
+Running @samp{xmodmap -pk} will list all of the defined keysyms.
+@end quotation
-A similar facility exists under MS Windows: Set
-@code{debug-mswindows-events} to non-zero. (The value @samp{1} gives
-you regular output. The value @samp{2} gives you verbose output,
-including all parameters. The value @samp{3} gives you
-super-gorily-detailed output.)
+For the related problem of @emph{displaying} non-ASCII characters in a
+non-Mule XEmacs, @xref{Q4.0.8, How do I display non-ASCII characters?}.
-@node Q2.3.8, Q2.3.9, Q2.3.7, Installation
-@unnumberedsubsec Q2.3.8: @kbd{C-g} doesn't work for me. Is it broken?
+@node Q3.0.7, Q3.0.8, Q3.0.6, Editing
+@unnumberedsubsec Q3.0.7: Can I turn on @dfn{sticky} modifier keys?
-@kbd{C-g} does work for most people in most circumstances. If it
-doesn't, there are two possible explanations:
+Yes, with @code{(setq modifier-keys-are-sticky t)}. This will give the
+effect of being able to press and release Shift and have the next
+character typed come out in upper case. This will affect all the other
+modifier keys like Control and Meta as well.
-@enumerate
-@item
-XEmacs is hung in a way that prevents @kbd{C-g} from working. This
-can happen when code is wrapped with a binding of @code{inhibit-quit}
-to @code{t}; you should still be able interrupt XEmacs using "critical
-quit". On the other hand, XEmacs may be seriously wedged. (If you're
-lucky, sending @samp{SIGINT} to the XEmacs process will interrupt it.)
-(a)xref{Q2.3.5, XEmacs hangs when I try to do something.}.
+@email{ben@(a)xemacs.org, Ben Wing} writes:
-@item
-@kbd{C-g} is indeed broken on your system. To test, try executing
-@code{(while t)} from the @samp{*scratch*} buffer. If @kbd{C-g}
-doesn't interrupt, then it's broken. This used to happen with systems
-where @samp{SIGIO} was broken, but @samp{BROKEN_SIGIO} wasn't defined.
-However, there may not be very many such systems nowadays.
-@end enumerate
+@quotation
+One thing about the sticky modifiers is that if you move the mouse out
+of the frame and back in, it cancels all currently ``stuck'' modifiers.
+@end quotation
-@node Q2.3.9, Q2.3.10, Q2.3.8, Installation
-@unnumberedsubsec Q2.3.9: How do I debug process-related problems?
+@node Q3.0.8, Q3.0.9, Q3.0.7, Editing
+@unnumberedsubsec Q3.0.8: How do I map the arrow keys?
+@c New
+Say you want to map @kbd{C-@key{right}} to forward-word:
-Under MS Windows, you can set the variable
-@code{debug-mswindows-process-command-lines} to non-@samp{nil} to get
-information on exactly what is getting passed to a process. This can
-be useful in determining problems with quoting. (Under Unix, a process
-receives each argument separately, but under MS Windows a single
-command line is received, and arguments with spaces or other special
-characters in them must be quoted. Unfortunately this means that each
-process, potentially at least, has its own quoting conventions, and
-the code to process quoting conventions in @file{cmd.exe}, the Visual
-C++ startup code and the like is baroque and poorly documented.
-XEmacs uses the variable
-@code{mswindows-construct-process-command-line-alist} to construct a
-command line from a list of arguments based on the command to be run,
-but it is (and cannot be) a perfect solution.)
+@email{sds@(a)usa.net, Sam Steingold} writes:
-@node Q2.3.10, Q2.3.11, Q2.3.9, Installation
-@unnumberedsubsec Q2.3.10: XEmacs is outputting lots of X errors.
+@quotation
+@lisp
+; both XEmacs and Emacs
+(define-key global-map [(control right)] 'forward-word)
+@end lisp
+or
+@lisp
+; Emacs only
+(define-key global-map [C-right] 'forward-word)
+@end lisp
+or
+@lisp
+; ver > 20, both
+(define-key global-map (kbd "C-<right>") 'forward-word)
+@end lisp
+@end quotation
-If this is happening, we would very much like to know what's causing
-them. To find this out, see @ref{Q2.3.3, How to debug an XEmacs
-problem with a debugger}. Try to get both a C and Lisp backtrace, and
-send them along with the full error output to
-@email{xemacs-beta@(a)xemacs.org}.
+@node Q3.0.9, Q3.0.10, Q3.0.8, Editing
+@unnumberedsubsec Q3.0.9: HP Alt key as Meta.
-@node Q2.3.11, Q2.4.1, Q2.3.10, Installation
-@unnumberedsubsec Q2.3.11: After upgrading, XEmacs won't do `foo' any more!
+How can I make XEmacs recognize the Alt key of my HP workstation as a
+Meta key?
-You have been used to doing `foo', but now when you invoke it (or
-click the toolbar button or select the menu item), nothing (or an
-error) happens. The simplest explanation is that you are missing a
-package that is essential to you. You can either track it down and
-install it (there is a list of packages and brief descriptions of
-their contents in @file{etc/PACKAGES}), or install the `Sumo Tarball'
-((a)pxref{Q2.0.2, How do I figure out which packages to install?}).
+Put the following line into a file and load it with xmodmap(1) before
+starting XEmacs:
-@c #### should xref to XEmacs manual here
+@example
+remove Mod1 = Mode_switch
+@end example
-@unnumberedsec 2.4: Startup-Related Problems
+@node Q3.0.10, Q3.0.11, Q3.0.9, Editing
+@unnumberedsubsec Q3.0.10: Why does edt emulation not work?
-@node Q2.4.1, Q2.4.2, Q2.3.11, Installation
-@unnumberedsubsec Q2.4.1: XEmacs cannot connect to my X Terminal!
+We don't know, but you can use tpu-edt emulation instead, which works
+fine and is a little fancier than the standard edt emulation. To do
+this, add the following line to your @file{init.el}:
-Help! I can not get XEmacs to display on my Envizex X-terminal!
+@lisp
+(tpu-edt)
+@end lisp
-Try setting the @code{DISPLAY} variable using the numeric IP address of
-the host you are running XEmacs from.
+If you don't want it to replace @kbd{C-h} with an edt-style help menu
+add this as well:
-@node Q2.4.2, Q2.4.3, Q2.4.1, Installation
-@unnumberedsubsec Q2.4.2: XEmacs won't start on Windows.
+@lisp
+(global-set-key [(control h)] 'help-for-help)
+@end lisp
-XEmacs relies on a process called "dumping" to generate a working
-executable. Under MS-Windows this process effectively fixes the memory
-addresses of information in the executable. When XEmacs starts up it tries
-to reserve these memory addresses so that the dumping process can be
-reversed -- putting the information back at the correct addresses.
-Unfortunately some .DLLs (for instance the soundblaster driver) occupy
-memory addresses that can conflict with those needed by the dumped XEmacs
-executable. In this instance XEmacs will fail to start without any
-explanation. Note that this is extremely machine specific.
+@node Q3.0.11, Q3.1.1, Q3.0.10, Editing
+@unnumberedsubsec Q3.0.11: How can I emulate VI and use it as my default mode?
-21.1.10 includes a fix for this that makes more intelligent guesses
-about which memory addresses will be free, and this should cure the
-problem for most people. 21.4 implements "portable dumping", which
-eliminates the problem altogether. We recommend you use the 21.4
-binaries, but you can use the 21.1 binaries if you are very paranoid
-about stability. @xref{Q1.0.4, Are binaries available?}.
+Our recommended VI emulator is viper. To make viper-mode the default,
+add this to your @file{init.el}:
-@node Q2.4.3, Q2.4.4, Q2.4.2, Installation
-@unnumberedsubsec Q2.4.3: XEmacs won't start without network.
+@lisp
+(viper-mode)
+@end lisp
-If XEmacs starts when you're on the network, but fails when you're not
-on the network, you may be missing a "localhost" entry in your
-@file{/etc/hosts} file. The file should contain an entry like:
+@email{kifer@(a)CS.SunySB.EDU, Michael Kifer} writes:
-@example
-127.0.0.1 localhost
-@end example
+@quotation
+This should be added as close to the top of @file{init.el} as you can get
+it, otherwise some minor modes may not get viper-ized.
+@end quotation
-Add that line, and XEmacs will be happy.
+@unnumberedsec 3.1: The Mouse
-@node Q2.4.4, Q2.4.5, Q2.4.3, Installation
-@unnumberedsubsec Q2.4.4: Startup warnings about deducing proper fonts?
+@node Q3.1.1, Q3.1.2, Q3.0.11, Editing
+@unnumberedsubsec Q3.1.1: How can I turn off Mouse pasting?
-How can I avoid the startup warnings about deducing proper fonts?
+I keep hitting the middle mouse button by accident and getting stuff
+pasted into my buffer so how can I turn this off?
-This is highly dependent on your installation, but try with the
-following font as your base font for XEmacs and see what it does:
+Here is an alternative binding, whereby the middle mouse button selects
+(but does not cut) the expression under the mouse. Clicking middle on a
+left or right paren will select to the matching one. Note that you can
+use @code{define-key} or @code{global-set-key}.
-@format
--adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1
-@end format
+@lisp
+(defun mouse-set-point-and-select (event)
+ "Sets the point at the mouse location, then marks following form"
+ (interactive "@@e")
+ (mouse-set-point event)
+ (mark-sexp 1))
+(define-key global-map [button2] 'mouse-set-point-and-select)
+@end lisp
-More precisely, do the following in your resource file:
+@node Q3.1.2, Q3.1.3, Q3.1.1, Editing
+@unnumberedsubsec Q3.1.2: How do I set control/meta/etc modifiers on mouse buttons?
-@format
-Emacs.default.attributeFont: \
--adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1
-@end format
+Use, for instance, @code{[(meta button1)]}. For example, here is a common
+setting for Common Lisp programmers who use the bundled @code{ilisp}
+package, whereby meta-button1 on a function name will find the file where
+the function name was defined, and put you at that location in the source
+file.
-If you just don't want to see the @samp{*Warnings*} buffer at startup
-time, you can set this:
+[Inside a function that gets called by the lisp-mode-hook and
+ilisp-mode-hook]
@lisp
-(setq display-warning-minimum-level 'error)
+(local-set-key [(meta button1)] 'edit-definitions-lisp)
@end lisp
-The buffer still exists; it just isn't in your face.
+@node Q3.1.3, Q3.1.4, Q3.1.2, Editing
+@unnumberedsubsec Q3.1.3: Clicking the left button does not do anything in buffer
list.
-@node Q2.4.5, Q2.4.6, Q2.4.4, Installation
-@unnumberedsubsec Q2.4.5: Warnings from incorrect key modifiers.
+I do @kbd{C-x C-b} to get a list of buffers and the entries get
+highlighted when I move the mouse over them but clicking the left mouse
+does not do anything.
-The following information comes from the @file{PROBLEMS} file that comes
-with XEmacs.
+Use the middle mouse button.
-If you're having troubles with HP/UX it is because HP/UX defines the
-modifiers wrong in X. Here is a shell script to fix the problem; be
-sure that it is run after VUE configures the X server.
+@node Q3.1.4, Q3.1.5, Q3.1.3, Editing
+@unnumberedsubsec Q3.1.4: How can I get a list of buffers when I hit mouse button 3?
-@example
-#! /bin/sh
-xmodmap 2> /dev/null - << EOF
-keysym Alt_L = Meta_L
-keysym Alt_R = Meta_R
-EOF
+The following code will replace the default popup on button3:
-xmodmap - << EOF
-clear mod1
-keysym Mode_switch = NoSymbol
-add mod1 = Meta_L
-keysym Meta_R = Mode_switch
-add mod2 = Mode_switch
-EOF
-@end example
+@lisp
+(global-set-key [button3] 'popup-buffer-menu)
+@end lisp
-@node Q2.4.6, , Q2.4.5, Installation
-@unnumberedsubsec Q2.4.6: XEmacs 21.1 on Windows used to spawn an ugly console window
on every startup. Has that been fixed?
+@node Q3.1.5, Q3.2.1, Q3.1.4, Editing
+@unnumberedsubsec Q3.1.5: How can I set XEmacs up so that it pastes where the text
cursor is?
-Yes.
+By default XEmacs pastes X selections where the mouse pointer is. How
+do I disable this?
-The console was there because @file{temacs} (and in turn, @file{xemacs})
-was a console application, and Windows typically creates a new
-console for a console process unless the creating process requests that
-one isn't created. This used to be fixed with @file{runemacs}, a small
-Windows application that existed merely to start @file{xemacs}, stating
-that it didn't want a console.
+Examine the function @code{mouse-yank}, by typing @kbd{C-h f mouse-yank
+@key{RET}}.
-XEmacs 21.4 fixes this cleanly by the virtue of being a true "GUI"
-application. The explanation of what that means is included for
-educational value.
+To get XEmacs to paste at the text cursor, add this your @file{init.el}:
-When building an application to be run in a Win32 environment, you must
-state which sub-system it is to run in. Valid subsystems include
-"console" and "gui". The subsystem you use affects the run time
-libraries linked into your application, the start up function that is
-run before control is handed over to your application, the entry point
-to your program, and how Windows normally invokes your program. (Console
-programs automatically get a console created for them at startup if
-their stdin/stdout don't point anywhere useful, which is the case when
-run from the GUI. This is a stupid design, of course -- instead, the
-console should get created only when the first I/O actually occurs!
-GUI programs have an equally stupid design: When called from
-@file{CMD.EXE}/(a)file{COMMAND.COM}, their stdin/stdout will be set to
-point nowhere useful, even though the command shell has its own
-stdin/stdout. It's as if someone who had learned a bit about stdio but
-had no actual knowledge of interprocess communication designed the
-scheme; unfortunately, the whole process-communication aspect of the
-Win32 API is equally badly designed.) For example, the entry point for a
-console app is "main" (which is what you'd expect for a C/C++ program),
-but the entry point for a "gui" app is "WinMain". This confuses
and
-annoys a lot of programmers who've grown up on Unix systems, where the
-kernel doesn't really care whether your application is a gui program or
-not.
+@lisp
+(setq mouse-yank-at-point t)
+@end lisp
-For reasons not altogether clear, and are lost in the mists of time and
-tradition, XEmacs on Win32 started out as a console application, and
-therefore a console was automatically created for it. (It may have been
-made a console application partly because a console is needed in some
-circumstances, especially under Win95, to interrupt, terminate, or send
-signals to a child process, and because of the bogosity mentioned above
-with GUI programs and the standard command shell. Currently, XEmacs
-just creates and immediately hides a console when necessary, and
-works around the "no useful stdio" problem by creating its own console
-window as necessary to display messages in.)
+You can also change this with Customize. Select from the
+@code{Options} menu @code{Advanced
+(Customize)->Emacs->Editing->Mouse->Yank At Point...} or type @kbd{M-x
+customize @key{RET} mouse @key{RET}}.
-@node Display Subsystems, External Subsystems, Installation, Top
-@unnumbered 3 Basic Display-Related Subsystems
+@unnumberedsec 3.2: Buffers, Text Editing
-This is part 3 of the XEmacs Frequently Asked Questions list. This
-section is devoted to the basic display-related capabilities of
-XEmacs, such as the keyboard, the mouse, fonts, colors, the modeline,
-etc.
+@node Q3.2.1, Q3.2.2, Q3.1.5, Editing
+@unnumberedsubsec Q3.2.1: Can I have the end of the buffer delimited in some way?
-@menu
-3.0: The Keyboard
-* Q3.0.1:: How can I bind complex functions (or macros) to keys?
-* Q3.0.2:: How do I bind C-. and C-; to scroll one line up and down?
-* Q3.0.3:: Globally binding @kbd{Delete}?
-* Q3.0.4:: How to map @kbd{Help} key alone on Sun type4 keyboard?
-* Q3.0.5:: How can you type in special characters in XEmacs?
-* Q3.0.6:: Can I turn on @dfn{sticky} modifier keys?
-* Q3.0.7:: How do I map the arrow keys?
-* Q3.0.8:: HP Alt key as Meta.
-* Q3.0.9:: Why does edt emulation not work?
-* Q3.0.10:: How can I emulate VI and use it as my default mode?
+Say, with: @samp{[END]}?
-3.1: The Mouse
-* Q3.1.1:: How can I turn off Mouse pasting?
-* Q3.1.2:: How do I set control/meta/etc modifiers on mouse buttons?
-* Q3.1.3:: Clicking the left button does not do anything in buffer list.
-* Q3.1.4:: How can I get a list of buffers when I hit mouse button 3?
-* Q3.1.5:: How I can set XEmacs up so that it pastes where the text cursor is?
+Try this:
-3.2: Textual Fonts and Colors
-* Q3.2.1:: How do I specify a font?
-* Q3.2.2:: How do I set the text, menu and modeline fonts?
-* Q3.2.3:: How can I set color options from @file{init.el}?
-* Q3.2.4:: How can I set the colors when highlighting a region?
-* Q3.2.5:: How can I limit color map usage?
-* Q3.2.6:: My tty supports color, but XEmacs doesn't use them.
-* Q3.2.7:: Can I have pixmap backgrounds in XEmacs?
-* Q3.2.8:: How do I display non-ASCII characters?
-* Q3.2.9:: Font selections in don't get saved after @code{Save Options}.
-
-3.3: The Menubar and Toolbar
-* Q3.3.1:: How do I get rid of the menu (or menubar)?
-* Q3.3.2:: Can I customize the basic menubar?
-* Q3.3.3:: How do I control how many buffers are listed in the menu @code{Buffers
List}?
-* Q3.3.4:: Resources like @code{Emacs*menubar*font} are not working?
-* Q3.3.5:: How can I bind a key to a function to toggle the toolbar?
-* Q3.3.6:: @samp{Can't instantiate image error...} in toolbar
-
-3.4: Scrollbars and Scrolling
-* Q3.4.1:: How can I disable the scrollbar?
-* Q3.4.2:: How can one use resources to change scrollbar colors?
-* Q3.4.3:: Moving the scrollbar can move the point; can I disable this?
-* Q3.4.4:: Scrolling one line at a time.
-* Q3.4.5:: How can I turn off automatic horizontal scrolling in specific modes?
-* Q3.4.6:: I find auto-show-mode disconcerting. How do I turn it off?
-
-3.5: The Modeline
-* Q3.5.1:: How can I make the modeline go away?
-* Q3.5.2:: How do you have XEmacs display the line number in the modeline?
-* Q3.5.3:: How do I get XEmacs to put the time of day on the modeline?
-* Q3.5.4:: How can one change the modeline color based on the mode used?
-
-3.6: 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 block cursor?
-* Q3.6.3:: Can I make the cursor blink?
-
-3.7: Text Selections
-* Q3.7.1:: How do I select a rectangular region?
-* Q3.7.2:: How can I turn off or change highlighted selections?
-* Q3.7.3:: How do I get that typing on an active region removes it?
-* Q3.7.4:: Can I turn off the highlight during isearch?
-* Q3.7.5:: How do I turn off highlighting after @kbd{C-x C-p} (mark-page)?
-* Q3.7.6:: The region disappears when I hit the end of buffer while scrolling.
-* Q3.7.7:: Why is killing so slow?
-* Q3.7.8:: Why does @kbd{M-w} take so long?
-
-3.8: Buffers, Text Editing
-* Q3.8.1:: Can I have the end of the buffer delimited in some way?
-* Q3.8.2:: How do I insert today's date into a buffer?
-* Q3.8.3:: How do I get a single minibuffer frame?
-* Q3.8.4:: How can I enable auto-indent and/or Filladapt?
-* Q3.8.5:: How can I get XEmacs to come up in text/auto-fill mode by default?
-
-3.9: Editing Source Code
-* Q3.9.1:: How can I do source code highlighting using font-lock?
-* Q3.9.2:: How do I get @samp{More} Syntax Highlighting on by default?
-* Q3.9.3:: Where do I get the latest CC Mode?
-* Q3.9.4:: I do not like cc-mode. How do I use the old c-mode?
-* Q3.9.5:: How do you make XEmacs indent CL if-clauses correctly?
-@end menu
+@lisp
+(let ((ext (make-extent (point-min) (point-max))))
+ (set-extent-property ext 'start-closed t)
+ (set-extent-property ext 'end-closed t)
+ (set-extent-property ext 'detachable nil)
+ (set-extent-end-glyph ext (make-glyph [string :data "[END]"])))
+@end lisp
-@unnumberedsec 3.0: The Keyboard
+Since this is XEmacs, you can specify an icon to be shown on
+window-system devices. To do so, change the @code{make-glyph} call to
+something like this:
-@node Q3.0.1, Q3.0.2, Display Subsystems, Display Subsystems
-@unnumberedsubsec Q3.0.1: How can I bind complex functions (or macros) to keys?
+@lisp
+(make-glyph '([xpm :file "~/something.xpm"]
+ [string :data "[END]"]))
+@end lisp
-As an example, say you want the @kbd{paste} key on a Sun keyboard to
-insert the current Primary X selection at point. You can accomplish this
-with:
+You can inline the @sc{xpm} definition yourself by specifying
+@code{:data} instead of @code{:file}. Here is such a full-featured
+version that works on both X and TTY devices:
@lisp
-(define-key global-map [f18] 'x-insert-selection)
+(let ((ext (make-extent (point-min) (point-max))))
+ (set-extent-property ext 'start-closed t)
+ (set-extent-property ext 'end-closed t)
+ (set-extent-property ext 'detachable nil)
+ (set-extent-end-glyph ext (make-glyph '([xpm :data "\
+/* XPM */
+static char* eye = @{
+\"20 11 7 2\",
+\"__ c None\"
+\"_` c #7f7f7f\",
+\"_a c #fefefe\",
+\"_b c #7f0000\",
+\"_c c #fefe00\",
+\"_d c #fe0000\",
+\"_e c #bfbfbf\",
+\"___________`_`_`___b_b_b_b_________`____\",
+\"_________`_`_`___b_c_c_c_b_b____________\",
+\"_____`_`_`_e___b_b_c_c_c___b___b_______`\",
+\"___`_`_e_a___b_b_d___b___b___b___b______\",
+\"_`_`_e_a_e___b_b_d_b___b___b___b___b____\",
+\"_`_`_a_e_a___b_b_d___b___b___b___b___b__\",
+\"_`_`_e_a_e___b_b_d_b___b___b___b___b_b__\",
+\"___`_`_e_a___b_b_b_d_c___b___b___d_b____\",
+\"_____`_`_e_e___b_b_b_d_c___b_b_d_b______\",
+\"_`_____`_`_`_`___b_b_b_d_d_d_d_b________\",
+\"___`_____`_`_`_`___b_b_b_b_b_b__________\",
+@} ;"]
+ [string :data "[END]"]))))
@end lisp
-However, this only works if there is a current X selection (the
-selection will be highlighted). The functionality I like is for the
-@kbd{paste} key to insert the current X selection if there is one,
-otherwise insert the contents of the clipboard. To do this you need to
-pass arguments to @code{x-insert-selection}. This is done by wrapping
-the call in a 'lambda form:
+Note that you might want to make this a function, and put it to a hook.
+We leave that as an exercise for the reader.
+@node Q3.2.2, Q3.2.3, Q3.2.1, Editing
+@unnumberedsubsec Q3.2.2: How do I insert today's date into a buffer?
+
+Like this:
+
@lisp
-(global-set-key [f18]
- (lambda () (interactive) (x-insert-selection t nil)))
+(insert (current-time-string))
@end lisp
-This binds the f18 key to a @dfn{generic} functional object. The
-interactive spec is required because only interactive functions can be
-bound to keys.
+@node Q3.2.3, Q3.2.4, Q3.2.2, Editing
+@unnumberedsubsec Q3.2.3: How do I get a single minibuffer frame?
-For the FAQ example you could use:
+@email{acs@(a)acm.org, Vin Shelton} writes:
@lisp
-(global-set-key [(control ?.)]
- (lambda () (interactive) (scroll-up 1)))
-(global-set-key [(control ?;)]
- (lambda () (interactive) (scroll-up -1)))
+(setq initial-frame-plist '(minibuffer nil))
+(setq default-frame-plist '(minibuffer nil))
+(setq default-minibuffer-frame
+ (make-frame
+ '(minibuffer only
+ width 86
+ height 1
+ menubar-visible-p nil
+ default-toolbar-visible-p nil
+ name "minibuffer"
+ top -2
+ left -2
+ has-modeline-p nil)))
+(frame-notice-user-settings)
@end lisp
-This is fine if you only need a few functions within the lambda body.
-If you're doing more it's cleaner to define a separate function.
-(a)xref{Q3.0.2, How do I bind C-. and C-; to scroll one line up and
-down?}.
+@strong{Please note:} The single minibuffer frame may not be to everyone's
+taste, and there any number of other XEmacs options settings that may
+make it difficult or inconvenient to use.
-@node Q3.0.2, Q3.0.3, Q3.0.1, Display Subsystems
-@unnumberedsubsec Q3.0.2: How do I bind C-. and C-; to scroll one line up and down?
+@node Q3.2.4, Q3.2.5, Q3.2.3, Editing
+@unnumberedsubsec Q3.2.4: How can I enable auto-indent and/or Filladapt?
-Add the following (Thanks to @email{mly@(a)adoc.xerox.com, Richard Mlynarik} and
-@email{wayne@(a)zen.cac.stratus.com, Wayne Newberry}) to @file{.emacs}:
+Put the following line in your @file{init.el}:
@lisp
-(defun scroll-up-one-line ()
- (interactive)
- (scroll-up 1))
+(setq indent-line-function 'indent-relative-maybe)
+@end lisp
-(defun scroll-down-one-line ()
- (interactive)
- (scroll-down 1))
+If you want to get fancy, try the @code{filladapt} package available
+standard with XEmacs. Put this into your @file{init.el}:
-(global-set-key [(control ?.)] 'scroll-up-one-line) ; C-.
-(global-set-key [(control ?;)] 'scroll-down-one-line) ; C-;
+@lisp
+(require 'filladapt)
+(setq-default filladapt-mode t)
+(add-hook 'c-mode-hook 'turn-off-filladapt-mode)
@end lisp
-
-The key point is that you can only bind simple functions to keys; you
-can not bind a key to a function that you're also passing arguments
-to. (@pxref{Q3.0.1, How can I bind complex functions (or macros) to
-keys?} for a better answer).
-@node Q3.0.3, Q3.0.4, Q3.0.2, Display Subsystems
-@unnumberedsubsec Q3.0.3: Globally binding @kbd{Delete}?
+This will enable Filladapt for all modes except C mode, where it doesn't
+work well. To turn Filladapt on only in particular major modes, remove
+the @code{(setq-default ...)} line and use
+@code{turn-on-filladapt-mode}, like this:
-I cannot manage to globally bind my @kbd{Delete} key to something other
-than the default. How does one do this?
+@lisp
+(add-hook 'text-mode-hook 'turn-on-filladapt-mode)
+@end lisp
-Answer: The problem is that many modes explicitly bind @kbd{Delete}. To
-get around this, try the following:
+You can customize filling and adaptive filling with Customize.
+Select from the @code{Options} menu
+@code{Advanced (Customize)->Emacs->Editing->Fill->Fill...}
+or type @kbd{M-x customize @key{RET} fill @key{RET}}.
-@lisp
-(defun foo ()
- (interactive)
- (message "You hit DELETE"))
+Note that well-behaving text-lookalike modes will run
+@code{text-mode-hook} by default (e.g. that's what Message does). For
+the nasty ones, you'll have to provide the @code{add-hook}s yourself.
-(define-key key-translation-map 'delete 'redirected-delete)
-(global-set-key 'redirected-delete 'foo)
-@end lisp
+Please note that the @code{fa-extras} package is no longer useful.
-@node Q3.0.4, Q3.0.5, Q3.0.3, Display Subsystems
-@unnumberedsubsec Q3.0.4: How to map @kbd{Help} key alone on Sun type4 keyboard?
+@node Q3.2.5, Q3.3.1, Q3.2.4, Editing
+@unnumberedsubsec Q3.2.5: How can I get XEmacs to come up in text/auto-fill mode by
default?
-The following works in GNU Emacs 19:
+Try the following lisp in your @file{init.el}:
@lisp
-(global-set-key [help] 'help-command);; Help
+(setq default-major-mode 'text-mode)
+(add-hook 'text-mode-hook 'turn-on-auto-fill)
@end lisp
-The following works in XEmacs with the addition of shift:
+@strong{WARNING}: note that changing the value of
+@code{default-major-mode} from @code{fundamental-mode} can break a large
+amount of built-in code that expects newly created buffers to be in
+@code{fundamental-mode}. (Changing from @code{fundamental-mode} to
+@code{text-mode} might not wreak too much havoc, but changing to
+something more exotic like a lisp-mode would break many Emacs packages).
+
+Note that Emacs by default starts up in buffer @code{*scratch*} in
+@code{initial-major-mode}, which defaults to
+@code{lisp-interaction-mode}. Thus adding the following form to your
+Emacs init file will cause the initial @code{*scratch*} buffer to be put
+into auto-fill'ed @code{text-mode}:
@lisp
-(global-set-key [(shift help)] 'help-command);; Help
+(setq initial-major-mode
+ (lambda ()
+ (text-mode)
+ (turn-on-auto-fill)))
@end lisp
-But it doesn't work alone. This is in the file @file{PROBLEMS} which
-should have come with your XEmacs installation: @emph{Emacs ignores the
-@kbd{help} key when running OLWM}.
+Note that after your init file is loaded, if
+@code{inhibit-startup-message} is @code{nil} (the default) and the
+startup buffer is @code{*scratch*} then the startup message will be
+inserted into @code{*scratch*}; it will be removed after a timeout by
+erasing the entire @code{*scratch*} buffer. Keep in mind this default
+usage of @code{*scratch*} if you desire any prior manipulation of
+@code{*scratch*} from within your Emacs init file. In particular,
+anything you insert into @code{*scratch*} from your init file will be
+later erased. Also, if you change the mode of the @code{*scratch*}
+buffer, be sure that this will not interfere with possible later
+insertion of the startup message (e.g. if you put @code{*scratch*} into
+a nonstandard mode that has automatic font lock rules, then the startup
+message might get fontified in a strange foreign manner, e.g. as code in
+some programming language).
-OLWM grabs the @kbd{help} key, and retransmits it to the appropriate
-client using
-@iftex
-@*
-@end iftex
-@code{XSendEvent}. Allowing Emacs to react to synthetic
-events is a security hole, so this is turned off by default. You can
-enable it by setting the variable @code{x-allow-sendevents} to t. You
-can also cause fix this by telling OLWM to not grab the help key, with
-the null binding @code{OpenWindows.KeyboardCommand.Help:}.
+@unnumberedsec 3.3: Text Selections
-@node Q3.0.5, Q3.0.6, Q3.0.4, Display Subsystems
-@unnumberedsubsec Q3.0.5: How can you type in special characters in XEmacs?
-One way is to use the package @code{x-compose}. Then you can use
-sequences like @kbd{Compose " a} to get ä, etc.
+@node Q3.3.1, Q3.3.2, Q3.2.5, Editing
+@unnumberedsubsec Q3.3.1: How do I select a rectangular region?
-Another way is to use the @code{iso-insert} package. Then you can use
-sequences like @kbd{C-x 8 " a} to get ä, etc.
+Just select the region normally, then use the rectangle commands (e.g.
+@code{kill-rectangle} on it. The region does not highlight as a
+rectangle, but the commands work just fine.
-@email{glynn@(a)sensei.co.uk, Glynn Clements} writes:
+To actually sweep out rectangular regions with the mouse you can use
+@code{mouse-track-do-rectangle} which is assigned to @kbd{M-button1}.
+Then use rectangle commands.
-@quotation
-It depends upon your X server.
+You can also do the following to change default behavior to sweep out
+rectangular regions:
-Generally, the simplest way is to define a key as Multi_key with
-xmodmap, e.g.
-@c hey, show some respect, willya -- there's xkeycaps, isn't there? --
-@c chr ;)
-@example
- xmodmap -e 'keycode 0xff20 = Multi_key'
-@end example
+@lisp
+(setq mouse-track-rectangle-p t)
+@end lisp
-You will need to pick an appropriate keycode. Use xev to find out the
-keycodes for each key.
+You can also change this with Customize.
+Select from the @code{Options} menu
+@code{Advanced (Customize)->Emacs->Editing->Mouse->Track Rectangle...} or
type
+@kbd{M-x customize @key{RET} mouse @key{RET}}.
-[NB: On a `Windows' keyboard, recent versions of XFree86 automatically
-define the right `Windows' key as Multi_key'.]
-Once you have Multi_key defined, you can use e.g.
@example
- Multi a ' => á
- Multi e " => ë
- Multi c , => ç
+ mouse-track-do-rectangle: (event)
+ -- an interactive compiled Lisp function.
+ Like `mouse-track' but selects rectangles instead of regions.
@end example
-etc.
-
-Also, recent versions of XFree86 define various AltGr-<key>
-combinations as dead keys, i.e.
-@example
- AltGr [ => dead_diaeresis
- AltGr ] => dead_tilde
- AltGr ; => dead_acute
-@end example
-etc.
+@node Q3.3.2, Q3.3.3, Q3.3.1, Editing
+@unnumberedsubsec Q3.3.2: How can I turn off or change highlighted selections?
-Running @samp{xmodmap -pk} will list all of the defined keysyms.
-@end quotation
+The @code{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 @file{init.el} file:
-For the related problem of @emph{displaying} non-ASCII characters in a
-non-Mule XEmacs, @xref{Q3.2.8, How do I display non-ASCII characters?}.
+@lisp
+(setq zmacs-regions nil)
+@end lisp
-@node Q3.0.6, Q3.0.7, Q3.0.5, Display Subsystems
-@unnumberedsubsec Q3.0.6: Can I turn on @dfn{sticky} modifier keys?
+You can also change this with Customize. Select from the
+@code{Options} menu
+@code{Advanced (Customize)->Emacs->Editing->Basics->Zmacs Regions}
+or type @kbd{M-x customize @key{RET} editing-basics @key{RET}}.
-Yes, with @code{(setq modifier-keys-are-sticky t)}. This will give the
-effect of being able to press and release Shift and have the next
-character typed come out in upper case. This will affect all the other
-modifier keys like Control and Meta as well.
+To change the face for selection, look at @code{Options->Advanced (Customize)}
+on the menubar.
-@email{ben@(a)xemacs.org, Ben Wing} writes:
+@node Q3.3.3, Q3.3.4, Q3.3.2, Editing
+@unnumberedsubsec Q3.3.3: How do I cause typing on an active region to remove it?
-@quotation
-One thing about the sticky modifiers is that if you move the mouse out
-of the frame and back in, it cancels all currently ``stuck'' modifiers.
-@end quotation
+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.
-@node Q3.0.7, Q3.0.8, Q3.0.6, Display Subsystems
-@unnumberedsubsec Q3.0.7: How do I map the arrow keys?
-@c New
-Say you want to map @kbd{C-@key{right}} to forward-word:
+You want to use something called @dfn{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.
-@email{sds@(a)usa.net, Sam Steingold} writes:
+To get this behavior, ensure that you have the @file{pc} package
+installed, and add the following lines to your
+(a)file{init.el}:
-@quotation
-@lisp
-; both XEmacs and Emacs
-(define-key global-map [(control right)] 'forward-word)
-@end lisp
-or
-@lisp
-; Emacs only
-(define-key global-map [C-right] 'forward-word)
-@end lisp
-or
@lisp
-; ver > 20, both
-(define-key global-map (kbd "C-<right>") 'forward-word)
+(cond
+ ((fboundp 'turn-on-pending-delete)
+ (turn-on-pending-delete))
+ ((fboundp 'pending-delete-on)
+ (pending-delete-on t)))
@end lisp
-@end quotation
-
-@node Q3.0.8, Q3.0.9, Q3.0.7, Display Subsystems
-@unnumberedsubsec Q3.0.8: HP Alt key as Meta.
-
-How can I make XEmacs recognize the Alt key of my HP workstation as a
-Meta key?
-Put the following line into a file and load it with xmodmap(1) before
-starting XEmacs:
+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.
-@example
-remove Mod1 = Mode_switch
-@end example
+@node Q3.3.4, Q3.3.5, Q3.3.3, Editing
+@unnumberedsubsec Q3.3.4: Can I turn off the highlight during isearch?
-@node Q3.0.9, Q3.0.10, Q3.0.8, Display Subsystems
-@unnumberedsubsec Q3.0.9: Why does edt emulation not work?
+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?
-We don't know, but you can use tpu-edt emulation instead, which works
-fine and is a little fancier than the standard edt emulation. To do
-this, add the following line to your @file{init.el}:
+Put the following in your @file{init.el}:
@lisp
-(tpu-edt)
+(setq isearch-highlight nil)
@end lisp
-If you don't want it to replace @kbd{C-h} with an edt-style help menu
-add this as well:
+You can also change this with Customize. Type
+@kbd{M-x customize-variable @key{RET} isearch-highlight @key{RET}}.
-@lisp
-(global-set-key [(control h)] 'help-for-help)
-@end lisp
+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 @code{isearch} face.
-@node Q3.0.10, Q3.1.1, Q3.0.9, Display Subsystems
-@unnumberedsubsec Q3.0.10: How can I emulate VI and use it as my default mode?
+@node Q3.3.5, Q3.3.6, Q3.3.4, Editing
+@unnumberedsubsec Q3.3.5: Why is killing so slow?
-Our recommended VI emulator is viper. To make viper-mode the default,
-add this to your @file{init.el}:
+This actually is an X Windows question, although you'll notice it with
+keyboard operations as well as while using the GUI. Basically, there
+are four ways to communicate interprogram via the X server:
-@lisp
-(viper-mode)
-@end lisp
+@table @strong
+@item Primary selection
+a transient selection that gets replaced every time a new selection is made
-@email{kifer@(a)CS.SunySB.EDU, Michael Kifer} writes:
+@item Secondary selection
+for "exchanging" with the primary selection
-@quotation
-This should be added as close to the top of @file{init.el} as you can get
-it, otherwise some minor modes may not get viper-ized.
-@end quotation
+@item Cut buffers
+a clipboard internal to the X server (deprecated)
-@unnumberedsec 3.1: The Mouse
+@item Clipboard selection
+a selection with a notification protocol that allows a separate app to
+manage the clipboard
+@end table
-@node Q3.1.1, Q3.1.2, Q3.0.10, Display Subsystems
-@unnumberedsubsec Q3.1.1: How can I turn off Mouse pasting?
+The cut buffers are deprecated because managing them is even more
+inefficient than the clipboard notification protocol. The primary
+selection works fine for many users and applications, but is not very
+robust under intensive or sophisticated use.
-I keep hitting the middle mouse button by accident and getting stuff
-pasted into my buffer so how can I turn this off?
+In Motif and MS Windows, a clipboard has become the primary means for
+managing cut and paste. These means that "modern" applications tend to
+be oriented toward a true clipboard, rather than the primary selection.
+(On Windows, there is nothing equivalent to the primary selection.)
+It's not that XEmacs doesn't support the simple primary selection
+method, it's that more and more other applications don't.
-Here is an alternative binding, whereby the middle mouse button selects
-(but does not cut) the expression under the mouse. Clicking middle on a
-left or right paren will select to the matching one. Note that you can
-use @code{define-key} or @code{global-set-key}.
+So the slowdown occurs because XEmacs now engages in the clipboard
+notification protocol on @emph{every} kill. This is especially slow on
+Motif.
-@lisp
-(defun mouse-set-point-and-select (event)
- "Sets the point at the mouse location, then marks following form"
- (interactive "@@e")
- (mouse-set-point event)
- (mark-sexp 1))
-(define-key global-map [button2] 'mouse-set-point-and-select)
-@end lisp
+With most people running most clients and server on the same host, and
+many of the rest working over very fast communication, you may expect
+that the situation is not going to improve.
-@node Q3.1.2, Q3.1.3, Q3.1.1, Display Subsystems
-@unnumberedsubsec Q3.1.2: How do I set control/meta/etc modifiers on mouse buttons?
+There are a number of workarounds. The most effective is to use a
+special command to do selection ownership only when you intend to paste
+to another application. Useful commands are @code{kill-primary-selection}
+and @code{copy-primary-selection}. These work only on text selected
+with the mouse (probably; experiment), and are bound by default to the
+@kbd{Cut} and @kbd{Copy}, respectively, buttons on the toolbar.
+@code{copy-primary-selection} is also bound to @kbd{C-Insert}. You can
+yank the clipboard contents with @code{yank-primary-selection}, bound to
+the @kbd{Paste} toolbar button and @kbd{Sh-Insert}.
+
+If you are communicating by cut and paste with applications that use the
+primary selection, then you can customize
+@code{interprogram-cut-function} to @code{nil}, restoring the XEmacs
+version 20 behavior. How can you tell if a program will support this?
+Motifly-correct programs require the clipboard; you lose. For others,
+only by trying it. You also need to customize the complementary
+@code{interprogram-paste-function} to @code{nil}. (Otherwise
+XEmacs-to-XEmacs pastes will not work correctly.)
-Use, for instance, @code{[(meta button1)]}. For example, here is a common
-setting for Common Lisp programmers who use the bundled @code{ilisp}
-package, whereby meta-button1 on a function name will find the file where
-the function name was defined, and put you at that location in the source
-file.
+You may get some relief on Motif by setting
+@code{x-selection-strict-motif-ownership} to nil, but this means you will
+only intermittently be able to paste XEmacs kills to Motif applications.
-[Inside a function that gets called by the lisp-mode-hook and
-ilisp-mode-hook]
+Thanks to Jeff Mincy and Glynn Clements for corrections.
-@lisp
-(local-set-key [(meta button1)] 'edit-definitions-lisp)
-@end lisp
+@node Q3.3.6, Q3.4.1, Q3.3.5, Editing
+@unnumberedsubsec Q3.3.6: Why does @kbd{M-w} take so long?
-@node Q3.1.3, Q3.1.4, Q3.1.2, Display Subsystems
-@unnumberedsubsec Q3.1.3: Clicking the left button does not do anything in buffer
list.
+It actually doesn't. It leaves the region visible for a second so that
+you can see what area is being yanked. If you start working, though, it
+will immediately complete its operation. In other words, it will only
+delay for a second if you let it.
-I do @kbd{C-x C-b} to get a list of buffers and the entries get
-highlighted when I move the mouse over them but clicking the left mouse
-does not do anything.
+@unnumberedsec 3.4: Editing Source Code
-Use the middle mouse button.
+@node Q3.4.1, Q3.4.2, Q3.3.6, Editing
+@unnumberedsubsec Q3.4.1: I do not like cc-mode. How do I use the old c-mode?
-@node Q3.1.4, Q3.1.5, Q3.1.3, Display Subsystems
-@unnumberedsubsec Q3.1.4: How can I get a list of buffers when I hit mouse button 3?
+Well, first off, consider if you really want to do this. cc-mode is
+much more powerful than the old c-mode. If you're having trouble
+getting your old offsets to work, try using @code{c-set-offset} instead.
+You might also consider using the package @code{cc-compat}.
-The following code will replace the default popup on button3:
+But, if you still insist, add the following lines to your @file{init.el}:
@lisp
-(global-set-key [button3] 'popup-buffer-menu)
+(fmakunbound 'c-mode)
+(makunbound 'c-mode-map)
+(fmakunbound 'c++-mode)
+(makunbound 'c++-mode-map)
+(makunbound 'c-style-alist)
+(load-library "old-c-mode")
+(load-library "old-c++-mode")
@end lisp
-@node Q3.1.5, Q3.2.1, Q3.1.4, Display Subsystems
-@unnumberedsubsec Q3.1.5: How I can set XEmacs up so that it pastes where the text
cursor is?
+This must be done before any other reference is made to either c-mode or
+c++-mode.
-By default XEmacs pastes X selections where the mouse pointer is. How
-do I disable this?
+@node Q3.4.2, , Q3.4.1, Editing
+@unnumberedsubsec Q3.4.2: How do you make XEmacs indent CL if-clauses correctly?
-Examine the function @code{mouse-yank}, by typing @kbd{C-h f mouse-yank
-@key{RET}}.
+I'd like XEmacs to indent all the clauses of a Common Lisp @code{if} the
+same amount instead of indenting the 3rd clause differently from the
+first two.
-To get XEmacs to paste at the text cursor, add this your @file{init.el}:
+The package @code{cl-indent} that comes with XEmacs sets up this kind
+of indentation by default. @code{cl-indent} also knows about many
+other CL-specific forms. To use @code{cl-indent}, one can do this:
@lisp
-(setq mouse-yank-at-point t)
+(setq lisp-indent-function 'common-lisp-indent-function)
@end lisp
-Starting with XEmacs-20.2 you can also change this with Customize.
-Select from the @code{Options} menu
-@code{Advanced (Customize)->Emacs->Editing->Mouse->Yank At Point...} or
type
-@kbd{M-x customize @key{RET} mouse @key{RET}}.
+One can also customize @file{cl-indent.el} so it mimics the default
+@code{if} indentation @code{then} indented more than the @code{else}.
+Here's how:
+
+@lisp
+(put 'if 'common-lisp-indent-function '(nil nil &body))
+@end lisp
+
+@node Display, External Subsystems, Editing, Top
+@unnumbered 4 Display Functions
+
+This is part 4 of the XEmacs Frequently Asked Questions list. This
+section is devoted to the display-related capabilities of XEmacs
+(fonts, colors, modeline, menubar, toolbar, scrollbar, etc.) and how
+to customize them.
+
+@menu
+4.0: Textual Fonts and Colors
+* Q4.0.1:: How do I specify a font?
+* Q4.0.2:: How do I set the text, menu and modeline fonts?
+* Q4.0.3:: How can I set color options from @file{init.el}?
+* Q4.0.4:: How can I set the colors when highlighting a region?
+* Q4.0.5:: How can I limit color map usage?
+* Q4.0.6:: My tty supports color, but XEmacs doesn't use them.
+* Q4.0.7:: Can I have pixmap backgrounds in XEmacs?
+* Q4.0.8:: How do I display non-ASCII characters?
+* Q4.0.9:: Font selections in don't get saved after @code{Save Options}.
+
+4.1: Syntax Highlighting (Font Lock)
+* Q4.1.1:: How can I do source code highlighting using font-lock?
+* Q4.1.2:: How do I get @samp{More} Syntax Highlighting on by default?
+
+4.2: The Modeline
+* Q4.2.1:: How can I make the modeline go away?
+* Q4.2.2:: How do you have XEmacs display the line number in the modeline?
+* Q4.2.3:: How do I get XEmacs to put the time of day on the modeline?
+* Q4.2.4:: How can I change the modeline color based on the mode used?
+
+4.3: The Cursor
+* Q4.3.1:: Is there a way to make the bar cursor thicker?
+* Q4.3.2:: Is there a way to get back the block cursor?
+* Q4.3.3:: Can I make the cursor blink?
+
+4.4: The Menubar
+* Q4.4.1:: How do I get rid of the menubar?
+* Q4.4.2:: How can I customize the menubar?
+* Q4.4.3:: How do I enable use of the keyboard (@kbd{Alt}) to access menu items?
+* Q4.4.4:: How do I control how many buffers are listed in the menu @code{Buffers
List}?
+* Q4.4.5:: Resources like @code{Emacs*menubar*font} are not working?
+
+4.5: The Toolbar
+* Q4.5.1:: How do I get rid of the toolbar?
+* Q4.5.2:: How can I customize the toolbar?
+* Q4.5.3:: How can I bind a key to a function to toggle the toolbar?
+* Q4.5.4:: @samp{Can't instantiate image error...} in toolbar
+
+4.6: Scrollbars and Scrolling
+* Q4.6.1:: How can I disable the scrollbar?
+* Q4.6.2:: How can I change the scrollbar width?
+* Q4.6.3:: How can I use resources to change scrollbar colors?
+* Q4.6.4:: Moving the scrollbar can move the point; can I disable this?
+* Q4.6.5:: Scrolling one line at a time.
+* Q4.6.6:: How can I turn off automatic horizontal scrolling in specific modes?
+* Q4.6.7:: I find auto-show-mode disconcerting. How do I turn it off?
+
+4.7: The Gutter Tabs, The Progress Bar, Widgets
+* Q4.7.1:: How can I disable the gutter tabs?
+* Q4.7.2:: How can I disable the progress bar?
+* Q4.7.3:: There are bugs in the gutter or widgets.
+* Q4.7.4:: How can I customize the gutter or gutter tabs?
+@end menu
-@unnumberedsec 3.2: Textual Fonts and Colors
+@unnumberedsec 4.0: Textual Fonts and Colors
-@node Q3.2.1, Q3.2.2, Q3.1.5, Display Subsystems
-@unnumberedsubsec Q3.2.1: How do I specify a font?
+@node Q4.0.1, Q4.0.2, Display, Display
+@unnumberedsubsec Q4.0.1: How do I specify a font?
#### Update me.
@@ -3964,8 +5429,8 @@ You can also do it in your init file, e.
(set-face-font 'modeline "MS Sans Serif:Regular:10")
@end display
-@node Q3.2.2, Q3.2.3, Q3.2.1, Display Subsystems
-@unnumberedsubsec Q3.2.2: How do I set the text, menu and modeline fonts?
+@node Q4.0.2, Q4.0.3, Q4.0.1, Display
+@unnumberedsubsec Q4.0.2: How do I set the text, menu and modeline fonts?
#### Update me.
@@ -3991,8 +5456,8 @@ resource @samp{font}. With Motif it @em
configurations with Mule it @emph{is} necessary to use @samp{fontSet}
instead of @samp{font}. (Sorry, there just is no simple recipe here.)
-@node Q3.2.3, Q3.2.4, Q3.2.2, Display Subsystems
-@unnumberedsubsec Q3.2.3: How can I set color options from @file{init.el}?
+@node Q4.0.3, Q4.0.4, Q4.0.2, Display
+@unnumberedsubsec Q4.0.3: How can I set color options from @file{init.el}?
How can I set the most commonly used color options from my
@file{init.el} instead of from my @file{.Xresources}?
@@ -4023,8 +5488,8 @@ Like this:
; want ptr/crsr
@end lisp
-@node Q3.2.4, Q3.2.5, Q3.2.3, Display Subsystems
-@unnumberedsubsec Q3.2.4: How can I set the colors when highlighting a region?
+@node Q4.0.4, Q4.0.5, Q4.0.3, Display
+@unnumberedsubsec Q4.0.4: How can I set the colors when highlighting a region?
How can I set the background/foreground colors when highlighting a
region?
@@ -4044,8 +5509,8 @@ or in your @file{init.el}:
(set-face-foreground 'zmacs-region "yellow")
@end lisp
-@node Q3.2.5, Q3.2.6, Q3.2.4, Display Subsystems
-@unnumberedsubsec Q3.2.5: How can I limit color map usage?
+@node Q4.0.5, Q4.0.6, Q4.0.4, Display
+@unnumberedsubsec Q4.0.5: How can I limit color map usage?
I'm using Netscape (or another color grabber like XEmacs);
is there any way to limit the number of available colors in the color map?
@@ -4059,8 +5524,8 @@ map).
If you have the money, another solution would be to use a truecolor or
direct color video.
-@node Q3.2.6, Q3.2.7, Q3.2.5, Display Subsystems
-@unnumberedsubsec Q3.2.6: My tty supports color, but XEmacs doesn't use them.
+@node Q4.0.6, Q4.0.7, Q4.0.5, Display
+@unnumberedsubsec Q4.0.6: My tty supports color, but XEmacs doesn't use them.
XEmacs tries to automatically determine whether your tty supports color,
but sometimes guesses wrong. In that case, you can make XEmacs Do The
@@ -4071,8 +5536,8 @@ Right Thing using this Lisp code:
(set-device-class nil 'color))
@end lisp
-@node Q3.2.7, Q3.2.8, Q3.2.6, Display Subsystems
-@unnumberedsubsec Q3.2.7: Can I have pixmap backgrounds in XEmacs?
+@node Q4.0.7, Q4.0.8, Q4.0.6, Display
+@unnumberedsubsec Q4.0.7: Can I have pixmap backgrounds in XEmacs?
@c New
@email{jvillaci@(a)wahnsinnig.extreme.indiana.edu, Juan Villacis} writes:
@@ -4099,301 +5564,99 @@ and so on. You can also do this interac
@end quotation
-@node Q3.2.8, Q3.2.9, Q3.2.7, Display Subsystems
-@unnumberedsubsec Q3.2.8: How do I display non-ASCII characters?
+@node Q4.0.8, Q4.0.9, Q4.0.7, Display
+@unnumberedsubsec Q4.0.8: How do I display non-ASCII characters?
@c New
If you're using a Mule-enabled XEmacs, then display is automatic. If
you're not seeing the characters you expect, either (1) you don't have
appropriate fonts available or (2) XEmacs did not correctly detect the
-coding system (@pxref{Recognize Coding, , , xemacs}). In case (1),
-install fonts as is customary for your platform. In case (2), you
-need to tell XEmacs explicitly what coding systems you're using.
-@ref{Specify Coding, , , xemacs}.
-
-If your XEmacs is not Mule-enabled, and for some reason getting a
-Mule-enabled XEmacs seems like the wrong thing to do, all is not lost.
-You can arrange it by brute force. In @file{event-Xt.c} (suppress the
-urge to look in this file---play Doom instead, because you'll survive
-longer), it is written:
-
-@quotation
-In a non-Mule world, a user can still have a multi-lingual editor, by
-doing @code{(set-face-font "-*-iso8859-2" (current-buffer))} for all
-their Latin-2 buffers, etc.
-@end quotation
-
-For the related problem of @emph{inputting} non-ASCII characters in a
-non-Mule XEmacs, @xref{Q3.0.5, How can you type in special characters
-in XEmacs?}.
-
-@node Q3.2.9, Q3.3.1, Q3.2.8, Display Subsystems
-@unnumberedsubsec Q3.2.9: Font selections in don't get saved after @code{Save
Options}.
-
-@email{mannj@(a)ll.mit.edu, John Mann} writes:
-
-@quotation
-You have to go to @samp{Options->Menubars} and unselect
-@samp{Frame-Local Font Menu}. If this option is selected, font changes
-are only applied to the @emph{current} frame and do @emph{not} get saved
-when you save options.
-@end quotation
-
-Also, set the following in your @file{init.el}:
-
-@lisp
-(setq options-save-faces t)
-@end lisp
-
-@unnumberedsec 3.3: The Menubar and Toolbar
-
-@node Q3.3.1, Q3.3.2, Q3.2.9, Display Subsystems
-@unnumberedsubsec Q3.3.1: How do I get rid of the menu (or menubar)?
-
-@lisp
-(set-specifier menubar-visible-p nil)
-@end lisp
-
-@node Q3.3.2, Q3.3.3, Q3.3.1, Display Subsystems
-@unnumberedsubsec Q3.3.2: Can I customize the basic menubar?
-
-For an extensive menubar, add this line to your @file{init.el}:
-
-@lisp
-(load "big-menubar")
-@end lisp
-
-If you'd like to write your own, this file provides as good a set of
-examples as any to start from. The file is located in edit-utils
-package.
-
-@node Q3.3.3, Q3.3.4, Q3.3.2, Display Subsystems
-@unnumberedsubsec Q3.3.3: How do I control how many buffers are listed in the menu
@code{Buffers List}?
-
-Add the following to your @file{init.el} (suit to fit):
-
-@lisp
-(setq buffers-menu-max-size 20)
-@end lisp
-
-For no limit, use an argument of @samp{nil}.
-
-Starting with XEmacs-20.3 you can also change this with Customize.
-Select from the @code{Options} menu
-@code{Advanced (Customize)->Emacs->Environment->Menu->Buffers Menu->Max
Size...} or
-type @kbd{M-x customize @key{RET} buffers-menu @key{RET}}.
-
-@node Q3.3.4, Q3.3.5, Q3.3.3, Display Subsystems
-@unnumberedsubsec Q3.3.4: Resources like @code{Emacs*menubar*font} are not working?
-
-I am trying to use a resource like @code{Emacs*menubar*font} to set the
-font of the menubar but it's not working.
-
-In Motif, the use of @samp{font} resources is obsoleted in order to
-support internationalization. If you are using the real Motif menubar,
-this resource is not recognized at all; you have to say:
-
-@example
-Emacs*menubar*fontList: FONT
-@end example
-
-If you are using the Lucid menubar, for backward compatibility with
-existing user configurations, the @samp{font} resource is recognized.
-Since this is not supported by Motif itself, the code is a kludge and
-the @samp{font} resource will be recognized only if the @samp{fontList}
-resource resource is unset. This means that the resource
-
-@example
-*fontList: FONT
-@end example
-
-will override
-
-@example
-Emacs*menubar*font: FONT
-@end example
-
-even though the latter is more specific.
-
-In non-Motif configurations using @samp{--with-mule} and
-@samp{--with-xfs} it @emph{is} necessary to use the @code{fontSet}
-resource @emph{instead of} the @code{font} resource. The backward
-compatibility kludge was never implemented for non-Motif builds.
-Example:
-
-@example
-*fontSet: FONT
-@end example
-
-@node Q3.3.5, Q3.3.6, Q3.3.4, Display Subsystems
-@unnumberedsubsec Q3.3.5: How can I bind a key to a function to toggle the toolbar?
-
-Try something like:
-
-@lisp
-(defun my-toggle-toolbar ()
- (interactive)
- (set-specifier default-toolbar-visible-p
- (not (specifier-instance default-toolbar-visible-p))))
-(global-set-key "\C-xT" 'my-toggle-toolbar)
-@end lisp
-
-There are redisplay bugs in 19.14 that may make the preceding result in
-a messed-up display, especially for frames with multiple windows. You
-may need to resize the frame before XEmacs completely realizes the
-toolbar is really gone.
-
-Thanks to @email{martin@(a)xemacs.org, Martin Buchholz} for the correct
-code.
-
-@node Q3.3.6, Q3.4.1, Q3.3.5, Display Subsystems
-@unnumberedsubsec Q3.3.6: @samp{Can't instantiate image error...} in toolbar
-@c New
-
-@email{expt@(a)alanine.ram.org, Dr. Ram Samudrala} writes:
-
-I just installed the XEmacs (20.4-2) RPMS that I downloaded from
-@uref{http://www.xemacs.org/}. Everything works fine, except that when
-I place my mouse over the toolbar, it beeps and gives me this message:
-
-@example
- Can't instantiate image (probably cached):
- [xbm :mask-file "/usr/include/X11/bitmaps/leftptrmsk :mask-data
- (16 16 <strange control characters> ...
-@end example
-
-@email{kyle_jones@(a)wonderworks.com, Kyle Jones} writes:
-@quotation
-This is problem specific to some Chips and Technologies video
-chips, when running XFree86. Putting
-
-@code{Option "sw_cursor"}
-
-in @file{XF86Config} gets rid of the problem.
-@end quotation
-
-@unnumberedsec 3.4: Scrollbars
-
-@node Q3.4.1, Q3.4.2, Q3.3.6, Display Subsystems
-@unnumberedsubsec Q3.4.1: How can I disable the scrollbar?
-
-To disable them for all frames, add the following line to
-your @file{.Xresources}:
-
-@example
-Emacs.scrollBarWidth: 0
-@end example
-
-Or select @samp{Options->Display->Scrollbars}.
-Remember to save options.
-
-To turn the scrollbar off on a per-frame basis, use the following
-function:
-
-@lisp
-(set-specifier scrollbar-width 0 (selected-frame))
-@end lisp
-
-You can actually turn the scrollbars on at any level you want by
-substituting for (selected-frame) in the above command. For example, to
-turn the scrollbars off only in a single buffer:
-
-@lisp
-(set-specifier scrollbar-width 0 (current-buffer))
-@end lisp
-
-@node Q3.4.2, Q3.4.3, Q3.4.1, Display Subsystems
-@unnumberedsubsec Q3.4.2: How can one use resources to change scrollbar colors?
-
-Here's a recap of how to use resources to change your scrollbar colors:
-
-@example
-! Motif scrollbars
-
-Emacs*XmScrollBar.Background: skyblue
-Emacs*XmScrollBar.troughColor: lightgray
-
-! Athena scrollbars
-
-Emacs*Scrollbar.Foreground: skyblue
-Emacs*Scrollbar.Background: lightgray
-@end example
-
-Note the capitalization of @code{Scrollbar} for the Athena widget.
+coding system (@pxref{Recognize Coding, , , xemacs}). In case (1),
+install fonts as is customary for your platform. In case (2), you
+need to tell XEmacs explicitly what coding systems you're using.
+@ref{Specify Coding, , , xemacs}.
-@node Q3.4.3, Q3.4.4, Q3.4.2, Display Subsystems
-@unnumberedsubsec Q3.4.3: Moving the scrollbar can move the point; can I disable this?
+If your XEmacs is not Mule-enabled, and for some reason getting a
+Mule-enabled XEmacs seems like the wrong thing to do, all is not lost.
+You can arrange it by brute force. In @file{event-Xt.c} (suppress the
+urge to look in this file---play Doom instead, because you'll survive
+longer), it is written:
-When I move the scrollbar in an XEmacs window, it moves the point as
-well, which should not be the default behavior. Is this a bug or a
-feature? Can I disable it?
+@quotation
+In a non-Mule world, a user can still have a multi-lingual editor, by
+doing @code{(set-face-font "-*-iso8859-2" (current-buffer))} for all
+their Latin-2 buffers, etc.
+@end quotation
-The current behavior is a feature, not a bug. Point remains at the same
-buffer position as long as that position does not scroll off the screen.
-In that event, point will end up in either the upper-left or lower-left
-hand corner.
+For the related problem of @emph{inputting} non-ASCII characters in a
+non-Mule XEmacs, @xref{Q3.0.6, How can you type in special characters
+in XEmacs?}.
-This cannot be changed.
+@node Q4.0.9, Q4.1.1, Q4.0.8, Display
+@unnumberedsubsec Q4.0.9: Font selections in don't get saved after @code{Save
Options}.
-@node Q3.4.4, Q3.4.5, Q3.4.3, Display Subsystems
-@unnumberedsubsec Q3.4.4: Scrolling one line at a time.
+@email{mannj@(a)ll.mit.edu, John Mann} writes:
-Can the cursor keys scroll the screen a line at a time, rather than the
-default half page jump? I tend it to find it disorienting.
+@quotation
+You have to go to @samp{Options->Menubars} and unselect
+@samp{Frame-Local Font Menu}. If this option is selected, font changes
+are only applied to the @emph{current} frame and do @emph{not} get saved
+when you save options.
+@end quotation
-Use the following:
+Also, set the following in your @file{init.el}:
@lisp
-(setq scroll-step 1)
+(setq options-save-faces t)
@end lisp
-
-You can also change this with Customize. Select from the
-@code{Options} menu @code{Advanced
-(Customize)->Emacs->Environment->Windows->Scroll Step...} or type
-@kbd{M-x customize @key{RET} windows @key{RET}}.
-@node Q3.4.5, Q3.4.6, Q3.4.4, Display Subsystems
-@unnumberedsubsec Q3.4.5: How can I turn off automatic horizontal scrolling in specific
modes?
+@unnumberedsec 4.1: Syntax Highlighting (Font Lock)
-Do @code{(setq truncate-lines t)} in the mode-hooks for any modes
-in which you want lines truncated.
+@node Q4.1.1, Q4.1.2, Q4.0.9, Display
+@unnumberedsubsec Q4.1.1: How can I do source code highlighting using font-lock?
-More precisely: If @code{truncate-lines} is nil, horizontal scrollbars
-will never appear. Otherwise, they will appear only if the value of
-@code{scrollbar-height} for that buffer/window/etc. is non-zero. If you
-do
+For most modes, font-lock is already set up and just needs to be turned
+on. This can be done by adding the line:
@lisp
-(set-specifier scrollbar-height 0)
+(require 'font-lock)
@end lisp
-then horizontal scrollbars will not appear in truncated buffers unless
-the package specifically asked for them.
+to your @file{init.el}. (You can turn it on for the
+current buffer and session only by @kbd{M-x font-lock-mode}.) See the
+file @file{etc/sample.init.el} (@file{etc/sample.emacs} in XEmacs
+versions prior to 21.4) for more information.
-@node Q3.4.6, Q3.5.1, Q3.4.5, Display Subsystems
-@unnumberedsubsec Q3.4.6: I find auto-show-mode disconcerting. How do I turn it off?
+@c the old way:
+@c (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock)
+@c (add-hook 'dired-mode-hook 'turn-on-font-lock)
-@code{auto-show-mode} controls whether or not a horizontal scrollbar
-magically appears when a line is too long to be displayed. This is
-enabled by default. To turn it off, put the following in your
-(a)file{init.el}:
+See also @code{Syntax Highlighting} from the @code{Options} menu.
+Remember to save options.
+
+@node Q4.1.2, Q4.2.1, Q4.1.1, Display
+@unnumberedsubsec Q4.1.2: How do I get @samp{More} Syntax Highlighting on by default?
+
+Use the following code in your @file{init.el}:
@lisp
-(setq auto-show-mode nil)
-(setq-default auto-show-mode nil)
+(setq-default font-lock-maximum-decoration t)
@end lisp
+
+See also @code{Syntax Highlighting} from the @code{Options} menu.
+Remember to save options.
-@unnumberedsec 3.5: The Modeline
+@unnumberedsec 4.2: The Modeline
-@node Q3.5.1, Q3.5.2, Q3.4.6, Display Subsystems
-@unnumberedsubsec Q3.5.1: How can I make the modeline go away?
+@node Q4.2.1, Q4.2.2, Q4.1.2, Display
+@unnumberedsubsec Q4.2.1: How can I make the modeline go away?
@lisp
(set-specifier has-modeline-p nil)
@end lisp
-@node Q3.5.2, Q3.5.3, Q3.5.1, Display Subsystems
-@unnumberedsubsec Q3.5.2: How do you have XEmacs display the line number in the
modeline?
+@node Q4.2.2, Q4.2.3, Q4.2.1, Display
+@unnumberedsubsec Q4.2.2: How do you have XEmacs display the line number in the
modeline?
Add the following line to your @file{init.el} file to
display the line number:
@@ -4421,8 +5684,8 @@ and/or
Or type @kbd{M-x customize @key{RET} editing-basics @key{RET}}.
-@node Q3.5.3, Q3.5.4, Q3.5.2, Display Subsystems
-@unnumberedsubsec Q3.5.3: How do I get XEmacs to put the time of day on the modeline?
+@node Q4.2.3, Q4.2.4, Q4.2.2, Display
+@unnumberedsubsec Q4.2.3: How do I get XEmacs to put the time of day on the modeline?
Add the following line to your @file{init.el} file to
display the time:
@@ -4433,8 +5696,8 @@ display the time:
See @code{Customize} from the @code{Options} menu for customization.
-@node Q3.5.4, Q3.6.1, Q3.5.3, Display Subsystems
-@unnumberedsubsec Q3.5.4: How can one change the modeline color based on the mode
used?
+@node Q4.2.4, Q4.3.1, Q4.2.3, Display
+@unnumberedsubsec Q4.2.4: How can I change the modeline color based on the mode used?
You can use something like the following:
@@ -4476,10 +5739,10 @@ There are additional modeline faces, @co
@code{modeline-mousable}, and @code{modeline-mousable-minor-mode}, which
you may want to customize.
-@unnumberedsec 3.6: The Cursor
+@unnumberedsec 4.3: The Cursor
-@node Q3.6.1, Q3.6.2, Q3.5.4, Display Subsystems
-@unnumberedsubsec Q3.6.1: Is there a way to make the bar cursor thicker?
+@node Q4.3.1, Q4.3.2, Q4.2.4, Display
+@unnumberedsubsec Q4.3.1: Is there a way to make the bar cursor thicker?
I'd like to have the bar cursor a little thicker, as I tend to "lose" it
often.
@@ -4496,7 +5759,7 @@ For a 2 pixel bar cursor, use:
(setq bar-cursor 'anything-else)
@end lisp
-Starting with XEmacs-20.3 you can also change these with Customize.
+You can also change these with Customize.
Select from the @code{Options} menu
@code{Advanced (Customize)->Emacs->Environment->Display->Bar Cursor...} or
type
@kbd{M-x customize @key{RET} display @key{RET}}.
@@ -4507,20 +5770,20 @@ You can use a color to make it stand out
Emacs*cursorColor: Red
@end example
-@node Q3.6.2, Q3.6.3, Q3.6.1, Display Subsystems
-@unnumberedsubsec Q3.6.2: Is there a way to get back the block cursor?
+@node Q4.3.2, Q4.3.3, Q4.3.1, Display
+@unnumberedsubsec Q4.3.2: Is there a way to get back the block cursor?
@lisp
(setq bar-cursor nil)
@end lisp
-Starting with XEmacs 20.3 you can also change this with Customize.
+You can also change this with Customize.
Select from the @code{Options} menu
@code{Advanced (Customize)->Emacs->Environment->Display->Bar Cursor...} or
type
@kbd{M-x customize @key{RET} display @key{RET}}.
-@node Q3.6.3, Q3.7.1, Q3.6.2, Display Subsystems
-@unnumberedsubsec Q3.6.3: Can I make the cursor blink?
+@node Q4.3.3, Q4.4.1, Q4.3.2, Display
+@unnumberedsubsec Q4.3.3: Can I make the cursor blink?
Yes, like this:
@@ -4531,579 +5794,344 @@ Yes, like this:
This function toggles between a steady cursor and a blinking cursor.
You may also set this mode from the menu bar by selecting
@samp{Options->Display->Blinking Cursor}. Remember to save options.
-
-@unnumberedsec 3.7: Text Selections
-
-@node Q3.7.1, Q3.7.2, Q3.6.3, Display Subsystems
-@unnumberedsubsec Q3.7.1: How do I select a rectangular region?
-
-Just select the region normally, then use the rectangle commands (e.g.
-@code{kill-rectangle} on it. The region does not highlight as a
-rectangle, but the commands work just fine.
-
-To actually sweep out rectangular regions with the mouse you can use
-@code{mouse-track-do-rectangle} which is assigned to @kbd{M-button1}.
-Then use rectangle commands.
-
-You can also do the following to change default behavior to sweep out
-rectangular regions:
-
-@lisp
-(setq mouse-track-rectangle-p t)
-@end lisp
-
-Starting with XEmacs-20.2 you can also change this with Customize.
-Select from the @code{Options} menu
-@code{Advanced (Customize)->Emacs->Editing->Mouse->Track Rectangle...} or
type
-@kbd{M-x customize @key{RET} mouse @key{RET}}.
-
-
-@example
- mouse-track-do-rectangle: (event)
- -- an interactive compiled Lisp function.
- Like `mouse-track' but selects rectangles instead of regions.
-@end example
-
-@node Q3.7.2, Q3.7.3, Q3.7.1, Display Subsystems
-@unnumberedsubsec Q3.7.2: How can I turn off or change highlighted selections?
-
-The @code{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 @file{init.el} file:
-
-@lisp
-(setq zmacs-regions nil)
-@end lisp
-
-You can also change this with Customize. Select from the
-@code{Options} menu
-@code{Advanced (Customize)->Emacs->Editing->Basics->Zmacs Regions}
-or type @kbd{M-x customize @key{RET} editing-basics @key{RET}}.
-
-To change the face for selection, look at @code{Options->Advanced (Customize)}
-on the menubar.
-
-@node Q3.7.3, Q3.7.4, Q3.7.2, Display Subsystems
-@unnumberedsubsec Q3.7.3: 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 @dfn{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, ensure that you have the @file{pc} package
-installed, and add the following lines to your
-(a)file{init.el}:
-
-@lisp
-(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. This code is a
-tad more complicated than it has to be for XEmacs in order to make it
-more portable.
-
-@node Q3.7.4, Q3.7.5, Q3.7.3, Display Subsystems
-@unnumberedsubsec Q3.7.4: 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?
+@unnumberedsec 4.4: The Menubar
-Put the following in your @file{init.el}:
+@node Q4.4.1, Q4.4.2, Q4.3.3, Display
+@unnumberedsubsec Q4.4.1: How do I get rid of the menubar?
@lisp
-(setq isearch-highlight nil)
+(set-specifier menubar-visible-p nil)
@end lisp
-
-Starting with XEmacs-20.2 you can also change this with Customize. Type
-@kbd{M-x customize-variable @key{RET} isearch-highlight @key{RET}}.
-
-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 @code{isearch} face.
-@node Q3.7.5, Q3.7.6, Q3.7.4, Display Subsystems
-@unnumberedsubsec Q3.7.5: How do I turn off highlighting after @kbd{C-x C-p}
(mark-page)?
+@node Q4.4.2, Q4.4.3, Q4.4.1, Display
+@unnumberedsubsec Q4.4.2: How can I customize the menubar?
-Put this in your @code{.emacs}:
+For an extensive menubar, add this line to your @file{init.el}:
@lisp
-(setq zmacs-regions nil)
+(load "big-menubar")
@end lisp
-@strong{Warning: This command turns off all region highlighting.}
+If you'd like to write your own, this file provides as good a set of
+examples as any to start from. The file is located in edit-utils
+package.
-(a)xref{Q3.7.2, How can I turn off or change highlighted selections?}.
+@node Q4.4.3, Q4.4.4, Q4.4.2, Display
+@unnumberedsubsec Q4.4.3: How do I enable use of the keyboard (@kbd{Alt}) to access
menu items?
-@node Q3.7.6, Q3.7.7, Q3.7.5, Display Subsystems
-@unnumberedsubsec Q3.7.6: The region disappears when I hit the end of buffer while
scrolling.
+#### Write me.
-This has been fixed by default starting with XEmacs-20.3.
+@node Q4.4.4, Q4.4.5, Q4.4.3, Display
+@unnumberedsubsec Q4.4.4: How do I control how many buffers are listed in the menu
@code{Buffers List}?
-With older versions you can turn this feature (if it indeed is a feature)
-off like this:
+Add the following to your @file{init.el} (suit to fit):
@lisp
-(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)))
+(setq buffers-menu-max-size 20)
@end lisp
-
-Thanks to @email{raman@(a)adobe.com, T. V. Raman} for assistance in deriving this
-answer.
-
-@node Q3.7.7, Q3.7.8, Q3.7.6, Display Subsystems
-@unnumberedsubsec Q3.7.7: Why is killing so slow?
-
-This actually is an X Windows question, although you'll notice it with
-keyboard operations as well as while using the GUI. Basically, there
-are four ways to communicate interprogram via the X server:
-
-@table @strong
-@item Primary selection
-a transient selection that gets replaced every time a new selection is made
-@item Secondary selection
-for "exchanging" with the primary selection
+For no limit, use an argument of @samp{nil}.
-@item Cut buffers
-a clipboard internal to the X server (deprecated)
+You can also change this with Customize. Select from the
+@code{Options} menu
+@code{Advanced (Customize)->Emacs->Environment->Menu->Buffers Menu->Max
Size...}
+or type @kbd{M-x customize @key{RET} buffers-menu @key{RET}}.
-@item Clipboard selection
-a selection with a notification protocol that allows a separate app to
-manage the clipboard
-@end table
+@node Q4.4.5, Q4.5.1, Q4.4.4, Display
+@unnumberedsubsec Q4.4.5: Resources like @code{Emacs*menubar*font} are not working?
-The cut buffers are deprecated because managing them is even more
-inefficient than the clipboard notification protocol. The primary
-selection works fine for many users and applications, but is not very
-robust under intensive or sophisticated use.
+I am trying to use a resource like @code{Emacs*menubar*font} to set the
+font of the menubar but it's not working.
-In Motif and MS Windows, a clipboard has become the primary means for
-managing cut and paste. These means that "modern" applications tend to
-be oriented toward a true clipboard, rather than the primary selection.
-(On Windows, there is nothing equivalent to the primary selection.)
-It's not that XEmacs doesn't support the simple primary selection
-method, it's that more and more other applications don't.
+In Motif, the use of @samp{font} resources is obsoleted in order to
+support internationalization. If you are using the real Motif menubar,
+this resource is not recognized at all; you have to say:
-So the slowdown occurs because XEmacs now engages in the clipboard
-notification protocol on @emph{every} kill. This is especially slow on
-Motif.
+@example
+Emacs*menubar*fontList: FONT
+@end example
-With most people running most clients and server on the same host, and
-many of the rest working over very fast communication, you may expect
-that the situation is not going to improve.
+If you are using the Lucid menubar, for backward compatibility with
+existing user configurations, the @samp{font} resource is recognized.
+Since this is not supported by Motif itself, the code is a kludge and
+the @samp{font} resource will be recognized only if the @samp{fontList}
+resource resource is unset. This means that the resource
-There are a number of workarounds. The most effective is to use a
-special command to do selection ownership only when you intend to paste
-to another application. Useful commands are @code{kill-primary-selection}
-and @code{copy-primary-selection}. These work only on text selected
-with the mouse (probably; experiment), and are bound by default to the
-@kbd{Cut} and @kbd{Copy}, respectively, buttons on the toolbar.
-@code{copy-primary-selection} is also bound to @kbd{C-Insert}. You can
-yank the clipboard contents with @code{yank-primary-selection}, bound to
-the @kbd{Paste} toolbar button and @kbd{Sh-Insert}.
+@example
+*fontList: FONT
+@end example
-If you are communicating by cut and paste with applications that use the
-primary selection, then you can customize
-@code{interprogram-cut-function} to @code{nil}, restoring the XEmacs
-version 20 behavior. How can you tell if a program will support this?
-Motifly-correct programs require the clipboard; you lose. For others,
-only by trying it. You also need to customize the complementary
-@code{interprogram-paste-function} to @code{nil}. (Otherwise
-XEmacs-to-XEmacs pastes will not work correctly.)
+will override
-You may get some relief on Motif by setting
-@code{x-selection-strict-motif-ownership} to nil, but this means you will
-only intermittently be able to paste XEmacs kills to Motif applications.
+@example
+Emacs*menubar*font: FONT
+@end example
-Thanks to Jeff Mincy and Glynn Clements for corrections.
+even though the latter is more specific.
-@node Q3.7.8, Q3.8.1, Q3.7.7, Display Subsystems
-@unnumberedsubsec Q3.7.8: Why does @kbd{M-w} take so long?
+In non-Motif configurations using @samp{--with-mule} and
+@samp{--with-xfs} it @emph{is} necessary to use the @code{fontSet}
+resource @emph{instead of} the @code{font} resource. The backward
+compatibility kludge was never implemented for non-Motif builds.
+Example:
-It actually doesn't. It leaves the region visible for a second so that
-you can see what area is being yanked. If you start working, though, it
-will immediately complete its operation. In other words, it will only
-delay for a second if you let it.
+@example
+*fontSet: FONT
+@end example
-@unnumberedsec 3.8: Buffers, Text Editing
+@unnumberedsec 4.5: The Toolbar
-@node Q3.8.1, Q3.8.2, Q3.7.8, Display Subsystems
-@unnumberedsubsec Q3.8.1: Can I have the end of the buffer delimited in some way?
+@node Q4.5.1, Q4.5.2, Q4.4.5, Display
+@unnumberedsubsec Q4.5.1: How do I get rid of the toolbar?
-Say, with: @samp{[END]}?
+#### Write me.
-Try this:
+@node Q4.5.2, Q4.5.3, Q4.5.1, Display
+@unnumberedsubsec Q4.5.2: How can I customize the toolbar?
-@lisp
-(let ((ext (make-extent (point-min) (point-max))))
- (set-extent-property ext 'start-closed t)
- (set-extent-property ext 'end-closed t)
- (set-extent-property ext 'detachable nil)
- (set-extent-end-glyph ext (make-glyph [string :data "[END]"])))
-@end lisp
+#### Write me.
-Since this is XEmacs, you can specify an icon to be shown on
-window-system devices. To do so, change the @code{make-glyph} call to
-something like this:
+@node Q4.5.3, Q4.5.4, Q4.5.2, Display
+@unnumberedsubsec Q4.5.3: How can I bind a key to a function to toggle the toolbar?
+Try something like:
+
@lisp
-(make-glyph '([xpm :file "~/something.xpm"]
- [string :data "[END]"]))
+(defun my-toggle-toolbar ()
+ (interactive)
+ (set-specifier default-toolbar-visible-p
+ (not (specifier-instance default-toolbar-visible-p))))
+(global-set-key "\C-xT" 'my-toggle-toolbar)
@end lisp
-You can inline the @sc{xpm} definition yourself by specifying
-@code{:data} instead of @code{:file}. Here is such a full-featured
-version that works on both X and TTY devices:
+@ignore
+@c Probably not relevant any more
+There are redisplay bugs in 19.14 that may make the preceding result in
+a messed-up display, especially for frames with multiple windows. You
+may need to resize the frame before XEmacs completely realizes the
+toolbar is really gone.
+@end ignore
-@lisp
-(let ((ext (make-extent (point-min) (point-max))))
- (set-extent-property ext 'start-closed t)
- (set-extent-property ext 'end-closed t)
- (set-extent-property ext 'detachable nil)
- (set-extent-end-glyph ext (make-glyph '([xpm :data "\
-/* XPM */
-static char* eye = @{
-\"20 11 7 2\",
-\"__ c None\"
-\"_` c #7f7f7f\",
-\"_a c #fefefe\",
-\"_b c #7f0000\",
-\"_c c #fefe00\",
-\"_d c #fe0000\",
-\"_e c #bfbfbf\",
-\"___________`_`_`___b_b_b_b_________`____\",
-\"_________`_`_`___b_c_c_c_b_b____________\",
-\"_____`_`_`_e___b_b_c_c_c___b___b_______`\",
-\"___`_`_e_a___b_b_d___b___b___b___b______\",
-\"_`_`_e_a_e___b_b_d_b___b___b___b___b____\",
-\"_`_`_a_e_a___b_b_d___b___b___b___b___b__\",
-\"_`_`_e_a_e___b_b_d_b___b___b___b___b_b__\",
-\"___`_`_e_a___b_b_b_d_c___b___b___d_b____\",
-\"_____`_`_e_e___b_b_b_d_c___b_b_d_b______\",
-\"_`_____`_`_`_`___b_b_b_d_d_d_d_b________\",
-\"___`_____`_`_`_`___b_b_b_b_b_b__________\",
-@} ;"]
- [string :data "[END]"]))))
-@end lisp
+Thanks to @email{martin@(a)xemacs.org, Martin Buchholz} for the correct
+code.
-Note that you might want to make this a function, and put it to a hook.
-We leave that as an exercise for the reader.
+@node Q4.5.4, Q4.6.1, Q4.5.3, Display
+@unnumberedsubsec Q4.5.4: @samp{Can't instantiate image error...} in toolbar
-@node Q3.8.2, Q3.8.3, Q3.8.1, Display Subsystems
-@unnumberedsubsec Q3.8.2: How do I insert today's date into a buffer?
+@email{expt@(a)alanine.ram.org, Dr. Ram Samudrala} writes:
-Like this:
+I just installed the XEmacs (20.4-2) RPMS that I downloaded from
+@uref{http://www.xemacs.org/}. Everything works fine, except that when
+I place my mouse over the toolbar, it beeps and gives me this message:
-@lisp
-(insert (current-time-string))
-@end lisp
+@example
+ Can't instantiate image (probably cached):
+ [xbm :mask-file "/usr/include/X11/bitmaps/leftptrmsk :mask-data
+ (16 16 <strange control characters> ...
+@end example
-@node Q3.8.3, Q3.8.4, Q3.8.2, Display Subsystems
-@unnumberedsubsec Q3.8.3: How do I get a single minibuffer frame?
+@email{kyle_jones@(a)wonderworks.com, Kyle Jones} writes:
+@quotation
+This is problem specific to some Chips and Technologies video
+chips, when running XFree86. Putting
-@email{acs@(a)acm.org, Vin Shelton} writes:
+@code{Option "sw_cursor"}
-@lisp
-(setq initial-frame-plist '(minibuffer nil))
-(setq default-frame-plist '(minibuffer nil))
-(setq default-minibuffer-frame
- (make-frame
- '(minibuffer only
- width 86
- height 1
- menubar-visible-p nil
- default-toolbar-visible-p nil
- name "minibuffer"
- top -2
- left -2
- has-modeline-p nil)))
-(frame-notice-user-settings)
-@end lisp
+in @file{XF86Config} gets rid of the problem.
+@end quotation
-@strong{Please note:} The single minibuffer frame may not be to everyone's
-taste, and there any number of other XEmacs options settings that may
-make it difficult or inconvenient to use.
+@unnumberedsec 4.6: Scrollbars and Scrolling
-@node Q3.8.4, Q3.8.5, Q3.8.3, Display Subsystems
-@unnumberedsubsec Q3.8.4: How can I enable auto-indent and/or Filladapt?
+@node Q4.6.1, Q4.6.2, Q4.5.4, Display
+@unnumberedsubsec Q4.6.1: How can I disable the scrollbar?
-Put the following line in your @file{init.el}:
+To disable them for all frames, add the following line to
+your @file{.Xresources}:
-@lisp
-(setq indent-line-function 'indent-relative-maybe)
-@end lisp
+@example
+Emacs.scrollBarWidth: 0
+@end example
-If you want to get fancy, try the @code{filladapt} package available
-standard with XEmacs. Put this into your @file{init.el}:
+Or select @samp{Options->Display->Scrollbars}.
+Remember to save options.
+
+To turn the scrollbar off on a per-frame basis, use the following
+function:
@lisp
-(require 'filladapt)
-(setq-default filladapt-mode t)
-(add-hook 'c-mode-hook 'turn-off-filladapt-mode)
+(set-specifier scrollbar-width 0 (selected-frame))
@end lisp
-This will enable Filladapt for all modes except C mode, where it doesn't
-work well. To turn Filladapt on only in particular major modes, remove
-the @code{(setq-default ...)} line and use
-@code{turn-on-filladapt-mode}, like this:
+You can actually turn the scrollbars on at any level you want by
+substituting for (selected-frame) in the above command. For example, to
+turn the scrollbars off only in a single buffer:
@lisp
-(add-hook 'text-mode-hook 'turn-on-filladapt-mode)
+(set-specifier scrollbar-width 0 (current-buffer))
@end lisp
-
-You can customize filling and adaptive filling with Customize.
-Select from the @code{Options} menu
-@code{Advanced (Customize)->Emacs->Editing->Fill->Fill...}
-or type @kbd{M-x customize @key{RET} fill @key{RET}}.
-
-Note that well-behaving text-lookalike modes will run
-@code{text-mode-hook} by default (e.g. that's what Message does). For
-the nasty ones, you'll have to provide the @code{add-hook}s yourself.
-
-Please note that the @code{fa-extras} package is no longer useful.
-@node Q3.8.5, Q3.9.1, Q3.8.4, Display Subsystems
-@unnumberedsubsec Q3.8.5: How can I get XEmacs to come up in text/auto-fill mode by
default?
+@node Q4.6.2, Q4.6.3, Q4.6.1, Display
+@unnumberedsubsec Q4.6.2: How can I change the scrollbar width?
-Try the following lisp in your @file{init.el}:
+#### Write me.
-@lisp
-(setq default-major-mode 'text-mode)
-(setq text-mode-hook 'turn-on-auto-fill)
-@end lisp
+@node Q4.6.3, Q4.6.4, Q4.6.2, Display
+@unnumberedsubsec Q4.6.3: How can I use resources to change scrollbar colors?
-@strong{WARNING}: note that changing the value of
-@code{default-major-mode} from @code{fundamental-mode} can break a large
-amount of built-in code that expects newly created buffers to be in
-@code{fundamental-mode}. (Changing from @code{fundamental-mode} to
-@code{text-mode} might not wreak too much havoc, but changing to
-something more exotic like a lisp-mode would break many Emacs packages).
+Here's a recap of how to use resources to change your scrollbar colors:
-Note that Emacs by default starts up in buffer @code{*scratch*} in
-@code{initial-major-mode}, which defaults to
-@code{lisp-interaction-mode}. Thus adding the following form to your
-Emacs init file will cause the initial @code{*scratch*} buffer to be put
-into auto-fill'ed @code{text-mode}:
+@example
+! Motif scrollbars
-@lisp
-(setq initial-major-mode
- (lambda ()
- (text-mode)
- (turn-on-auto-fill)))
-@end lisp
+Emacs*XmScrollBar.Background: skyblue
+Emacs*XmScrollBar.troughColor: lightgray
-Note that after your init file is loaded, if
-@code{inhibit-startup-message} is @code{nil} (the default) and the
-startup buffer is @code{*scratch*} then the startup message will be
-inserted into @code{*scratch*}; it will be removed after a timeout by
-erasing the entire @code{*scratch*} buffer. Keep in mind this default
-usage of @code{*scratch*} if you desire any prior manipulation of
-@code{*scratch*} from within your Emacs init file. In particular,
-anything you insert into @code{*scratch*} from your init file will be
-later erased. Also, if you change the mode of the @code{*scratch*}
-buffer, be sure that this will not interfere with possible later
-insertion of the startup message (e.g. if you put @code{*scratch*} into
-a nonstandard mode that has automatic font lock rules, then the startup
-message might get fontified in a strange foreign manner, e.g. as code in
-some programming language).
+! Athena scrollbars
-@unnumberedsec 3.9: Editing Source Code
+Emacs*Scrollbar.Foreground: skyblue
+Emacs*Scrollbar.Background: lightgray
+@end example
-@node Q3.9.1, Q3.9.2, Q3.8.5, Display Subsystems
-@unnumberedsubsec Q3.9.1: How can I do source code highlighting using font-lock?
+Note the capitalization of @code{Scrollbar} for the Athena widget.
-For most modes, font-lock is already set up and just needs to be turned
-on. This can be done by adding the line:
+@node Q4.6.4, Q4.6.5, Q4.6.3, Display
+@unnumberedsubsec Q4.6.4: Moving the scrollbar can move the point; can I disable this?
-@lisp
-(require 'font-lock)
-@end lisp
+When I move the scrollbar in an XEmacs window, it moves the point as
+well, which should not be the default behavior. Is this a bug or a
+feature? Can I disable it?
-to your @file{init.el}. (You can turn it on for the
-current buffer and session only by @kbd{M-x font-lock-mode}.) See the
-file @file{etc/sample.init.el} (@file{etc/sample.emacs} in XEmacs
-versions prior to 21.4) for more information.
+The current behavior is a feature, not a bug. Point remains at the same
+buffer position as long as that position does not scroll off the screen.
+In that event, point will end up in either the upper-left or lower-left
+hand corner.
-@c the old way:
-@c (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock)
-@c (add-hook 'dired-mode-hook 'turn-on-font-lock)
+This cannot be changed.
-See also @code{Syntax Highlighting} from the @code{Options} menu.
-Remember to save options.
+@node Q4.6.5, Q4.6.6, Q4.6.4, Display
+@unnumberedsubsec Q4.6.5: Scrolling one line at a time.
-@node Q3.9.2, Q3.9.3, Q3.9.1, Display Subsystems
-@unnumberedsubsec Q3.9.2: How do I get @samp{More} Syntax Highlighting on by default?
+Can the cursor keys scroll the screen a line at a time, rather than the
+default half page jump? I tend it to find it disorienting.
-Use the following code in your @file{init.el}:
+Use the following:
@lisp
-(setq-default font-lock-maximum-decoration t)
+(setq scroll-step 1)
@end lisp
-See also @code{Syntax Highlighting} from the @code{Options} menu.
-Remember to save options.
+You can also change this with Customize. Select from the
+@code{Options} menu
+@code{Advanced (Customize)->Emacs->Environment->Windows->Scroll Step...}
+or type @kbd{M-x customize @key{RET} windows @key{RET}}.
-@node Q3.9.3, Q3.9.4, Q3.9.2, Display Subsystems
-@unnumberedsubsec Q3.9.3: Where do I get the latest CC Mode?
+@node Q4.6.6, Q4.6.7, Q4.6.5, Display
+@unnumberedsubsec Q4.6.6: How can I turn off automatic horizontal scrolling in specific
modes?
-@email{bwarsaw@(a)cnri.reston.va.us, Barry A. Warsaw} writes:
+Do @code{(setq truncate-lines t)} in the mode-hooks for any modes
+in which you want lines truncated.
-@quotation
-This can be had from @uref{http://www.python.org/emacs/}.
-@end quotation
+More precisely: If @code{truncate-lines} is nil, horizontal scrollbars
+will never appear. Otherwise, they will appear only if the value of
+@code{scrollbar-height} for that buffer/window/etc. is non-zero. If you
+do
-@node Q3.9.4, Q3.9.5, Q3.9.3, Display Subsystems
-@unnumberedsubsec Q3.9.4: I do not like cc-mode. How do I use the old c-mode?
+@lisp
+(set-specifier scrollbar-height 0)
+@end lisp
-Well, first off, consider if you really want to do this. cc-mode is
-much more powerful than the old c-mode. If you're having trouble
-getting your old offsets to work, try using @code{c-set-offset} instead.
-You might also consider using the package @code{cc-compat}.
+then horizontal scrollbars will not appear in truncated buffers unless
+the package specifically asked for them.
-But, if you still insist, add the following lines to your @file{init.el}:
+@node Q4.6.7, Q4.7.1, Q4.6.6, Display
+@unnumberedsubsec Q4.6.7: I find auto-show-mode disconcerting. How do I turn it off?
-@lisp
-(fmakunbound 'c-mode)
-(makunbound 'c-mode-map)
-(fmakunbound 'c++-mode)
-(makunbound 'c++-mode-map)
-(makunbound 'c-style-alist)
-(load-library "old-c-mode")
-(load-library "old-c++-mode")
-@end lisp
+@code{auto-show-mode} controls whether or not a horizontal scrollbar
+magically appears when a line is too long to be displayed. This is
+enabled by default. To turn it off, put the following in your
+(a)file{init.el}:
-This must be done before any other reference is made to either c-mode or
-c++-mode.
+@lisp
+(setq auto-show-mode nil)
+(setq-default auto-show-mode nil)
+@end lisp
-@node Q3.9.5, , Q3.9.4, Display Subsystems
-@unnumberedsubsec Q3.9.5: How do you make XEmacs indent CL if-clauses correctly?
+@unnumberedsec 4.7: The Gutter Tabs, The Progress Bar, Widgets
-I'd like XEmacs to indent all the clauses of a Common Lisp @code{if} the
-same amount instead of indenting the 3rd clause differently from the
-first two.
+@node Q4.7.1, Q4.7.2, Q4.6.7, Display
+@unnumberedsubsec Q4.7.1: How can I disable the gutter tabs?
-One way is to add, to @file{init.el}:
+#### Write me.
-@lisp
-(put 'if 'lisp-indent-function nil)
-@end lisp
+@node Q4.7.2, Q4.7.3, Q4.7.1, Display
+@unnumberedsubsec Q4.7.2: How can I disable the progress bar?
-However, note that the package @code{cl-indent} that comes with
-XEmacs sets up this kind of indentation by default. @code{cl-indent}
-also knows about many other CL-specific forms. To use @code{cl-indent},
-one can do this:
+#### Write me.
-@lisp
-(load "cl-indent")
-(setq lisp-indent-function (function common-lisp-indent-function))
-@end lisp
+@node Q4.7.3, Q4.7.4, Q4.7.2, Display
+@unnumberedsubsec Q4.7.3: There are bugs in the gutter or widgets.
-One can also customize @file{cl-indent.el} so it mimics the default
-@code{if} indentation @code{then} indented more than the @code{else}.
-Here's how:
+#### Write me.
-@lisp
-(put 'if 'common-lisp-indent-function '(nil nil &body))
-@end lisp
+@node Q4.7.4, , Q4.7.3, Display
+@unnumberedsubsec Q4.7.4: How can I customize the gutter or gutter tabs?
-Also, a new version (1.2) of @file{cl-indent.el} was posted to
-comp.emacs.xemacs on 12/9/94. This version includes more documentation
-than previous versions. This may prove useful if you need to customize
-any indent-functions.
+#### Write me.
-@node External Subsystems, Internet, Display Subsystems, Top
-@unnumbered 4 Interfacing with the Operating System and External Devices
+@node External Subsystems, Internet, Display, Top
+@unnumbered 5 Interfacing with the Operating System and External Devices
-This is part 4 of the XEmacs Frequently Asked Questions list. This
+This is part 5 of the XEmacs Frequently Asked Questions list. This
section is devoted to the various ways that XEmacs interfaces with the
operating system, with other processes and with external devices such
as speakers and the printer.
@menu
-4.0: X Window System and Resources
-* Q4.0.1:: Where is a list of X resources?
-* Q4.0.2:: How can I detect a color display?
-* Q4.0.3:: How can I get the icon to just say @samp{XEmacs}?
-* Q4.0.4:: How can I have the window title area display the full path?
-* Q4.0.5:: @samp{xemacs -name junk} doesn't work?
-* Q4.0.6:: @samp{-iconic} doesn't work.
-
-4.1: Microsoft Windows
-* Q4.1.1:: Does XEmacs rename all the @samp{win32-*} symbols to @samp{w32-*}?
-* Q4.1.2:: How do I get Windows Explorer to associate a file type with XEmacs?
-
-4.2: Printing
-* Q4.2.1:: What do I need to change to make printing work?
-* Q4.2.2:: How can I print WYSIWYG a font-locked buffer?
-* Q4.2.3:: Getting @kbd{M-x lpr} to work with postscript printer.
-* Q4.2.4:: Can you print under MS Windows?
-
-4.3: Sound
-* Q4.3.1:: How do I turn off the sound?
-* Q4.3.2:: How do I get funky sounds instead of a boring beep?
-* Q4.3.3:: What's NAS, how do I get it?
-* Q4.3.4:: Sunsite sounds don't play.
-
-4.4: Running an Interior Shell, Invoking Subprocesses
-* Q4.4.1:: What is an interior shell?
-* Q4.4.2:: How do I start up a second shell buffer?
-* Q4.4.3:: Telnet from shell filters too much
-* Q4.4.4:: Strange things are happening in Shell Mode.
-* Q4.4.5:: XEmacs complains "No such file or directory, diff"
-
-4.5: Multiple Device Support
-* Q4.5.1:: How do I open a frame on another screen of my multi-headed display?
-* Q4.5.2:: Can I really connect to a running XEmacs after calling up over a modem?
How?
-* Q4.5.3:: How do I disable gnuserv from opening a new frame?
-* Q4.5.4:: How do I start gnuserv so that each subsequent XEmacs is a client?
-* Q4.5.5:: Is there a way to start a new XEmacs if there's no gnuserv running,
and otherwise use gnuclient?
-
-4.6: TeX
-* Q4.6.1:: Is there something better than LaTeX mode?
-* Q4.6.2:: What is AUCTeX? Where do you get it?
-* Q4.6.3:: Problems installing AUCTeX.
-* Q4.6.4:: How do I turn off current chapter from AUCTeX modeline?
-
-4.7: Other Unbundled Packages
-* Q4.7.1:: Is there a reason for an Emacs package not to be included in XEmacs?
-* Q4.7.2:: Are there any Emacs Lisp Spreadsheets?
-* Q4.7.3:: Is there a MatLab mode?
-
-4.8: Environments Built Around XEmacs
-* Q4.8.1:: What are SPARCworks, EOS, and WorkShop?
-* Q4.8.2:: How do I start the Sun Workshop support in XEmacs 21?
-* Q4.8.3:: What is/was Energize?
-* Q4.8.4:: What is Infodock?
+5.0: X Window System and Resources
+* Q5.0.1:: Where is a list of X resources?
+* Q5.0.2:: How can I detect a color display?
+* Q5.0.3:: How can I get the icon to just say @samp{XEmacs}?
+* Q5.0.4:: How can I have the window title area display the full path?
+* Q5.0.5:: @samp{xemacs -name junk} doesn't work?
+* Q5.0.6:: @samp{-iconic} doesn't work.
+
+5.1: Microsoft Windows
+* Q5.1.1:: Does XEmacs rename all the @samp{win32-*} symbols to @samp{w32-*}?
+* Q5.1.2:: How do I get Windows Explorer to associate a file type with XEmacs?
+
+5.2: Printing
+* Q5.2.1:: What do I need to change to make printing work?
+* Q5.2.2:: How can I print WYSIWYG a font-locked buffer?
+* Q5.2.3:: Getting @kbd{M-x lpr} to work with postscript printer.
+* Q5.2.4:: Can you print under MS Windows?
+
+5.3: Sound
+* Q5.3.1:: How do I turn off the sound?
+* Q5.3.2:: How do I get funky sounds instead of a boring beep?
+* Q5.3.3:: What are NAS and ESD (EsounD)?
+* Q5.3.4:: Sunsite sounds don't play.
+
+5.4: Running an Interior Shell, Invoking Subprocesses
+* Q5.4.1:: What is an interior shell?
+* Q5.4.2:: How do I start up a second shell buffer?
+* Q5.4.3:: Telnet from shell filters too much
+* Q5.4.4:: Strange things are happening in Shell Mode.
+* Q5.4.5:: XEmacs complains "No such file or directory, diff"
+* Q5.4.6:: Cygwin error "fork_copy: linked dll/bss pass 0 failed"
+
+5.5: Multiple Device Support
+* Q5.5.1:: How do I open a frame on another screen of my multi-headed display?
+* Q5.5.2:: Can I really connect to a running XEmacs after calling up over a modem?
How?
+* Q5.5.3:: How do I disable gnuserv from opening a new frame?
+* Q5.5.4:: How do I start gnuserv so that each subsequent XEmacs is a client?
+* Q5.5.5:: Is there a way to start a new XEmacs if there's no gnuserv running,
and otherwise use gnuclient?
@end menu
-@unnumberedsec 4.0: X Window System and Resources
+@unnumberedsec 5.0: X Window System and Resources
-@node Q4.0.1, Q4.0.2, External Subsystems, External Subsystems
-@unnumberedsubsec Q4.0.1: Where is a list of X resources?
+@node Q5.0.1, Q5.0.2, External Subsystems, External Subsystems
+@unnumberedsubsec Q5.0.1: Where is a list of X resources?
Search through the @file{NEWS} file for @samp{X Resources}. A fairly
comprehensive list is given after it.
@@ -5116,8 +6144,8 @@ as @file{etc/Emacs.ad}, but a few entrie
installing the contents of this file into your @file{.Xresources} (or
legacy @file{.Xdefaults}) file if you use GNU Emacs under X11 as well.
-@node Q4.0.2, Q4.0.3, Q4.0.1, External Subsystems
-@unnumberedsubsec Q4.0.2: How can I detect a color display?
+@node Q5.0.2, Q5.0.3, Q5.0.1, External Subsystems
+@unnumberedsubsec Q5.0.2: How can I detect a color display?
You can test the return value of the function @code{(device-class)}, as
in:
@@ -5130,8 +6158,8 @@ in:
)
@end lisp
-@node Q4.0.3, Q4.0.4, Q4.0.2, External Subsystems
-@unnumberedsubsec Q4.0.3: How can I get the icon to just say @samp{XEmacs}?
+@node Q5.0.3, Q5.0.4, Q5.0.2, External Subsystems
+@unnumberedsubsec Q5.0.3: How can I get the icon to just say @samp{XEmacs}?
I'd like the icon to just say @samp{XEmacs}, and not include the name of
the current file in it.
@@ -5142,8 +6170,8 @@ Add the following line to your @file{ini
(setq frame-icon-title-format "XEmacs")
@end lisp
-@node Q4.0.4, Q4.0.5, Q4.0.3, External Subsystems
-@unnumberedsubsec Q4.0.4: How can I have the window title area display the full path?
+@node Q5.0.4, Q5.0.5, Q5.0.3, External Subsystems
+@unnumberedsubsec Q5.0.4: How can I have the window title area display the full path?
I'd like to have the window title area display the full directory/name
of the current buffer file and not just the name.
@@ -5164,8 +6192,8 @@ A more sophisticated title might be:
That is, use the file name, or the dired-directory, or the buffer name.
-@node Q4.0.5, Q4.0.6, Q4.0.4, External Subsystems
-@unnumberedsubsec Q4.0.5: @samp{xemacs -name junk} doesn't work?
+@node Q5.0.5, Q5.0.6, Q5.0.4, External Subsystems
+@unnumberedsubsec Q5.0.5: @samp{xemacs -name junk} doesn't work?
When I run @samp{xterm -name junk}, I get an xterm whose class name
according to xprop, is @samp{junk}. This is the way it's supposed to
@@ -5215,8 +6243,8 @@ To make a frame with a particular name u
(make-frame '((name . "the-name")))
@end lisp
-@node Q4.0.6, Q4.1.1, Q4.0.5, External Subsystems
-@unnumberedsubsec Q4.0.6: @samp{-iconic} doesn't work.
+@node Q5.0.6, Q5.1.1, Q5.0.5, External Subsystems
+@unnumberedsubsec Q5.0.6: @samp{-iconic} doesn't work.
When I start up XEmacs using @samp{-iconic} it doesn't work right.
Using @samp{-unmapped} on the command line, and setting the
@@ -5230,10 +6258,10 @@ getting it to work. The principal probl
bugs...
@end quotation
-@unnumberedsec 4.1: Microsoft Windows
+@unnumberedsec 5.1: Microsoft Windows
-@node Q4.1.1, Q4.1.2, Q4.0.6, External Subsystems
-@unnumberedsubsec Q4.1.1: Does XEmacs rename all the @samp{win32-*} symbols to
@samp{w32-*}?
+@node Q5.1.1, Q5.1.2, Q5.0.6, External Subsystems
+@unnumberedsubsec Q5.1.1: Does XEmacs rename all the @samp{win32-*} symbols to
@samp{w32-*}?
In his flavor of Emacs 20, Richard Stallman has renamed all the @samp{win32-*}
symbols to @samp{w32-*}. Does XEmacs do the same?
@@ -5260,8 +6288,8 @@ provide generic interfaces that apply to
@c with our convention, but we provide the GNU Emacs names as
@c compatibility aliases.
-@node Q4.1.2, Q4.2.1, Q4.1.1, External Subsystems
-@unnumberedsubsec Q4.1.2: How do I get Windows Explorer to associate a file type with
XEmacs?
+@node Q5.1.2, Q5.2.1, Q5.1.1, External Subsystems
+@unnumberedsubsec Q5.1.2: How do I get Windows Explorer to associate a file type with
XEmacs?
@unnumberedsubsubsec Associating a new file type with XEmacs.
@@ -5314,10 +6342,10 @@ it and pressing @samp{Set Default}.
Note for Windows 2000 users: Under Windows 2000, get to @samp{File Types}
using @samp{Control Panel->Folder Options->File Types}.
-@unnumberedsec 4.2: Printing
+@unnumberedsec 5.2: Printing
-@node Q4.2.1, Q4.2.2, Q4.1.2, External Subsystems
-@unnumberedsubsec Q4.2.1: What do I need to change to make printing work?
+@node Q5.2.1, Q5.2.2, Q5.1.2, External Subsystems
+@unnumberedsubsec Q5.2.1: What do I need to change to make printing work?
For regular printing there are two variables that can be customized.
@@ -5360,8 +6388,8 @@ NOTE: It is an undocumented limitation i
printing (the @code{Pretty Print Buffer} menu item) @strong{requires} a
window system environment. It cannot be used outside of X11.
-@node Q4.2.2, Q4.2.3, Q4.2.1, External Subsystems
-@unnumberedsubsec Q4.2.2: How can I print WYSIWYG a font-locked buffer?
+@node Q5.2.2, Q5.2.3, Q5.2.1, External Subsystems
+@unnumberedsubsec Q5.2.2: How can I print WYSIWYG a font-locked buffer?
Font-lock looks nice. How can I print (WYSIWYG) the highlighted
document?
@@ -5372,8 +6400,8 @@ on its use, in
@file{$prefix/lib/xemacs/xemacs-packages/lisp/ps-print/ps-print.el},
being the default location of an installed ps-print package.
-@node Q4.2.3, Q4.2.4, Q4.2.2, External Subsystems
-@unnumberedsubsec Q4.2.3: Getting @kbd{M-x lpr} to work with postscript printer.
+@node Q5.2.3, Q5.2.4, Q5.2.2, External Subsystems
+@unnumberedsubsec Q5.2.3: Getting @kbd{M-x lpr} to work with postscript printer.
My printer is a Postscript printer and @code{lpr} only works for
Postscript files, so how do I get @kbd{M-x lpr-region} and @kbd{M-x
@@ -5390,8 +6418,8 @@ If you don't use a2ps to convert ASCII t
free?), replace with the command you do use. Note also that some
versions of a2ps require a @samp{-Pprinter} to ensure spooling.
-@node Q4.2.4, Q4.3.1, Q4.2.3, External Subsystems
-@unnumberedsubsec Q4.2.4: Can you print under MS Windows?
+@node Q5.2.4, Q5.3.1, Q5.2.3, External Subsystems
+@unnumberedsubsec Q5.2.4: Can you print under MS Windows?
As of 21.4, printing works on Windows, using simply
@samp{File->Print BUFFER...}, and can be configured with
@@ -5399,601 +6427,328 @@ As of 21.4, printing works on Windows, u
Prior to 21.4, there is no built-in support, but there are some clever
hacks out there. If you know how, please let us know and we'll put it
-here.
-
-@unnumberedsec 4.3: Sound
-
-@node Q4.3.1, Q4.3.2, Q4.2.4, External Subsystems
-@unnumberedsubsec Q4.3.1: How do I turn off the sound?
-
-Add the following line to your @file{init.el}:
-
-@lisp
-(setq bell-volume 0)
-(setq sound-alist nil)
-@end lisp
-
-That will make your XEmacs totally silent---even the default ding sound
-(TTY beep on TTY-s) will be gone.
-
-You can also change these with Customize. Select from the
-@code{Options} menu @code{Advanced
-(Customize)->Emacs->Environment->Sound->Sound...} or type @kbd{M-x
-customize @key{RET} sound @key{RET}}.
-
-
-@node Q4.3.2, Q4.3.3, Q4.3.1, External Subsystems
-@unnumberedsubsec Q4.3.2: How do I get funky sounds instead of a boring beep?
-
-Make sure your XEmacs was compiled with sound support, and then put this
-in your @file{init.el}:
-
-@lisp
-(load-default-sounds)
-@end lisp
-
-@node Q4.3.3, Q4.3.4, Q4.3.2, External Subsystems
-@unnumberedsubsec Q4.3.3: What's NAS, how do I get it?
-
-(a)xref{Q2.1.3, Compiling XEmacs with Netaudio}, for an explanation of
-the @dfn{Network Audio System}.
-
-@node Q4.3.4, Q4.4.1, Q4.3.3, External Subsystems
-@unnumberedsubsec Q4.3.4: Sunsite sounds don't play.
-
-I'm having some trouble with sounds I've downloaded from sunsite. They
-play when I run them through @code{showaudio} or cat them directly to
-@file{/dev/audio}, but XEmacs refuses to play them.
-
-@email{gutschk@(a)uni-muenster.de, Markus Gutschke} writes:
-
-@quotation
-[Many of] These files have an (erroneous) 24byte header that tells about
-the format that they have been recorded in. If you cat them to
-@file{/dev/audio}, the header will be ignored and the default behavior
-for /dev/audio will be used. This happens to be 8kHz uLaw. It is
-probably possible to fix the header by piping through @code{sox} and
-passing explicit parameters for specifying the sampling format; you then
-need to perform a 'null' conversion from SunAudio to SunAudio.
-@end quotation
-
-@unnumberedsec 4.4: Running an Interior Shell, Invoking Subprocesses
-
-@node Q4.4.1, Q4.4.2, Q4.3.4, External Subsystems
-@unnumberedsubsec Q4.4.1: What is an interior shell?
-
-#### Write me.
-
-@node Q4.4.2, Q4.4.3, Q4.4.1, External Subsystems
-@unnumberedsubsec Q4.4.2: How do I start up a second shell buffer?
-
-In the @code{*shell*} buffer:
-
-@lisp
-M-x rename-buffer @key{RET} *shell-1* @key{RET}
-M-x shell RET
-@end lisp
-
-This will then start a second shell. The key is that no buffer named
-@samp{*shell*} can exist. It might be preferable to use @kbd{M-x
-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,
-a new shell is made
-
-@node Q4.4.3, Q4.4.4, Q4.4.2, External Subsystems
-@unnumberedsubsec Q4.4.3: Telnet from shell filters too much
-
-I'm using the Emacs @kbd{M-x shell} function, and I would like to invoke
-and use a telnet session within it. Everything works fine except that
-now all @samp{^M}'s are filtered out by Emacs. Fixes?
-
-Use @kbd{M-x rsh} or @kbd{M-x telnet} to open remote sessions rather
-than doing rsh or telnet within the local shell buffer. You can also
-use @kbd{M-x ssh} to open secure remote session if you have @code{ssh}
-installed.
-
-@node Q4.4.4, Q4.4.5, Q4.4.3, External Subsystems
-@unnumberedsubsec Q4.4.4: Strange things are happening in Shell Mode.
-
-Sometimes (i.e. it's not repeatable, and I can't work out why it
-happens) when I'm typing into shell mode, I hit return and only a
-portion of the command is given to the shell, and a blank prompt is
-returned. If I hit return again, the rest of the previous command is
-given to the shell.
-
-@email{martin@(a)xemacs.org, Martin Buchholz} writes:
-
-@quotation
-There is a known problem with interaction between @code{csh} and the
-@code{filec} option and XEmacs. You should add the following to your
-(a)file{.cshrc}:
-
-@example
-if ( "$TERM" == emacs || "$TERM" == unknown ) unset filec
-@end example
-@end quotation
-
-@node Q4.4.5, Q4.5.1, Q4.4.4, External Subsystems
-@unnumberedsubsec Q4.4.5: XEmacs complains "No such file or directory, diff"
-
-or "ispell" or other commands that seem related to whatever you just
-tried to do (M-x ediff or M-$, for example).
-
-There are a large number of common (in the sense that "everyone has
-these, they really do") Unix utilities that are not provided with
-XEmacs. The GNU Project's implementations are available for Windows in
-the the Cygwin distribution (@uref{http://www.cygwin.com/}), which also
-provides a complete Unix emulation environment (and thus makes ports of
-Unix utilities nearly trivial). Another implementation is that from
-MinGW (@uref{http://www.mingw.org/msys.shtml}). If you know of others,
-please let us know!
-
-@unnumberedsec 4.5: Multiple Device Support
-
-@node Q4.5.1, Q4.5.2, Q4.4.5, External Subsystems
-@unnumberedsubsec Q4.5.1: How do I open a frame on another screen of my multi-headed
display?
-
-Use the command @kbd{M-x make-frame-on-display}. This command is also
-on the File menu in the menubar.
-
-The command @code{make-frame-on-tty} also exists, which will establish a
-connection to any tty-like device. Opening the TTY devices should be
-left to @code{gnuclient}, though.
-
-@node Q4.5.2, Q4.5.3, Q4.5.1, External Subsystems
-@unnumberedsubsec Q4.5.2: Can I really connect to a running XEmacs after calling up
over a modem? How?
-
-Yes. Use @code{gnuclient -nw}. (Prior to 20.3, use the @code{gnuattach}
-program supplied with XEmacs instead.)
-
-Also see @ref{Q4.5.3, How do I disable gnuserv from opening a new frame?}.
-
-@node Q4.5.3, Q4.5.4, Q4.5.2, External Subsystems
-@unnumberedsubsec Q4.5.3: How do I disable gnuserv from opening a new frame?
-
-If you set the @code{gnuserv-frame} variable to the frame that should be
-used to display buffers that are pulled up, a new frame will not be
-created. For example, you could put
-
-@lisp
-(setq gnuserv-frame (selected-frame))
-@end lisp
-
-early on in your @file{init.el}, to ensure that the first frame created
-is the one used for your gnuserv buffers.
-
-There is an option to set the gnuserv target to the current frame. See
-@code{Options->Display->"Other Window" Location->Make Current Frame
Gnuserv Target}
-
-You can also change this with Customize. Select from the
-@code{Options} menu @code{Advanced
-(Customize)->Emacs->Environment->Gnuserv->Gnuserv Frame...} or type
-@kbd{M-x customize @key{RET} gnuserv @key{RET}}.
-
-
-@node Q4.5.4, Q4.5.5, Q4.5.3, External Subsystems
-@unnumberedsubsec Q4.5.4: How do I start gnuserv so that each subsequent XEmacs is a
client?
-
-Put the following in your @file{init.el} file to start the server:
-
-@lisp
-(gnuserv-start)
-@end lisp
-
-Start your first XEmacs as usual. After that, you can do:
-
-@example
-gnuclient randomfilename
-@end example
-
-from the command line to get your existing XEmacs process to open a new
-frame and visit randomfilename in that window. When you're done editing
-randomfilename, hit @kbd{C-x #} to kill the buffer and get rid of the
-frame.
-
-See also man page of gnuclient.
-
-@node Q4.5.5, Q4.6.1, Q4.5.4, External Subsystems
-@unnumberedsubsec Q4.5.5: Is there a way to start a new XEmacs if there's no
gnuserv running, and otherwise use gnuclient?
-
-@email{vroonhof@(a)math.ethz.ch, Jan Vroonhof} writes:
-@quotation
-Here is one of the solutions, we have this in a script called
-(a)file{etc/editclient.sh}.
-@example
- #!/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
-@end example
-
-Note that there is a known problem when running XEmacs and 'gnuclient
--nw' on the same TTY.
-@end quotation
-
-@unnumberedsec 4.6: TeX
-
-@node Q4.6.1, Q4.6.2, Q4.5.5, External Subsystems
-@unnumberedsubsec Q4.6.1: Is there something better than LaTeX mode?
-
-@email{dak@(a)fsnif.neuroinformatik.ruhr-uni-bochum.de, David Kastrup} writes:
-
-@quotation
-The standard TeX modes leave much to be desired, and are somewhat
-leniently maintained. Serious TeX users use AUCTeX (@pxref{Q4.6.2,
-What is AUCTeX? Where do you get it?}).
-@end quotation
-
-@node Q4.6.2, Q4.6.3, Q4.6.1, External Subsystems
-@unnumberedsubsec Q4.6.2: What is AUCTeX? Where do you get it?
-
-AUCTeX is a complex and sophisticated editing package dedicated to TeX
-and related text formatting languages, including LaTeX and Texinfo.
-It provides support for running TeX on a file or part of a file,
-include files, and of course shortcuts for entering common TeX macros,
-LaTeX environments, etc, and for fontlock.
-
-AUCTeX is a standard package provided by XEmacs. You can get it as
-usual through the @kbd{M-x list-packages} interface. It is also
-included in the (non-Mule) SUMO package. The AUCTeX XEmacs package is
-maintained by Uwe Brauer <GET MAIL ADDRESS>.
-
-AUCTeX is extremely complicated, and its developers primarily
-use GNU Emacs. Not all features of the bleeding edge version
-of AUCTeX are immediately ported to XEmacs; if you need
-these, you may be better off getting the most recent versions
-from the GNU AUCTeX project on @uref{http://savannah.gnu.org}.
-
-@node Q4.6.3, Q4.6.4, Q4.6.2, External Subsystems
-@unnumberedsubsec Q4.6.3: Problems installing AUCTeX.
-
-@email{vroonhof@(a)math.ethz.ch, Jan Vroonhof} writes:
-
-@quotation
-AUCTeX works fine on both stock Emacs and XEmacs has been doing so for
-a very very long time. This is mostly due to the work of
-@email{abraham@(a)dina.kvl.dk, Per Abrahamsen} (clap clap) in particular his
@file{easymenu}
-package. Which leads to what is probably the problem...
-@end quotation
-
-Most problems with AUCTeX are one of two things:
-
-@itemize @bullet
-@item
-The TeX-lisp-directory in @file{tex-site.el} and the makefile don't
-match.
+here.
-Fix: make sure you configure AUCTeX properly @strong{before} installing.
+@unnumberedsec 5.3: Sound
-@item
-You have an old version of easymenu.el in your path.
+@node Q5.3.1, Q5.3.2, Q5.2.4, External Subsystems
+@unnumberedsubsec Q5.3.1: How do I turn off the sound?
-Fix: use @code{locate-library} and remove old versions to make sure it
-@strong{only} finds the one that came with XEmacs.
-@end itemize
+Add the following line to your @file{init.el}:
-@node Q4.6.4, Q4.7.1, Q4.6.3, External Subsystems
-@unnumberedsubsec Q4.6.4: How do I turn off current chapter from AUCTeX modeline?
+@lisp
+(setq bell-volume 0)
+(setq sound-alist nil)
+@end lisp
-With AUCTeX, fast typing is hard because the current chapter, section
-etc. are given in the modeline. How can I turn this off?
+That will make your XEmacs totally silent---even the default ding sound
+(TTY beep on TTY-s) will be gone.
-It's not AUCTeX, it comes from @code{func-menu} in @file{func-menu.el}.
+You can also change these with Customize. Select from the
+@code{Options} menu @code{Advanced
+(Customize)->Emacs->Environment->Sound->Sound...} or type @kbd{M-x
+customize @key{RET} sound @key{RET}}.
-@c Add this code to your @file{init.el} to turn it off:
-@c
-@c @lisp
-@c (setq fume-display-in-modeline-p nil)
-@c @end lisp
-@c
-@c Or just add a hook to @code{TeX-mode-hook} to turn it off only for TeX
-@c mode:
-@c
-@c @lisp
-@c (add-hook 'TeX-mode-hook
-@c '(lambda () (setq fume-display-in-modeline-p nil)))
-@c @end lisp
-@c
-@email{dhughes@(a)origin-at.co.uk, David Hughes} writes:
-@quotation
-Try this; you'll still get the function name displayed in the modeline,
-but it won't attempt to keep track when you modify the file. To refresh
-when it gets out of synch, you simply need click on the @samp{Rescan
-Buffer} option in the function-menu.
+@node Q5.3.2, Q5.3.3, Q5.3.1, External Subsystems
+@unnumberedsubsec Q5.3.2: How do I get funky sounds instead of a boring beep?
+
+Make sure your XEmacs was compiled with sound support, and then put this
+in your @file{init.el}:
@lisp
-(setq-default fume-auto-rescan-buffer-p nil)
+(load-default-sounds)
@end lisp
-@end quotation
-@unnumberedsec 4.7: Other Unbundled Packages
+@node Q5.3.3, Q5.3.4, Q5.3.2, External Subsystems
+@unnumberedsubsec Q5.3.3: What are NAS and ESD (EsounD)?
-@node Q4.7.1, Q4.7.2, Q4.6.4, External Subsystems
-@unnumberedsubsec Q4.7.1: Is there a reason for an Emacs package not to be included in
XEmacs?
+@dfn{Network Audio System} (NAS) is a client-server sound library for X.
-The reason for an Emacs package not to be included in XEmacs is
-usually one or more of the following:
+@uref{http://radscan.com/nas.html}.
-@enumerate
-@item
-The package has not been ported to XEmacs. This will typically happen
-when it uses GNU-Emacs-specific features, which make it fail under
-XEmacs.
+To build XEmacs with it, use the @file{configure} flag
+@samp{--with-sound=nas} (@samp{--enable-sound=nas} in 21.5 or later).
-Porting a package to XEmacs can range from a trivial amount of change to
-a partial or full rewrite. Fortunately, the authors of modern packages
-usually choose to support both Emacsen themselves.
+@dfn{Enlightened Sound Daemon} (ESD or EsounD) is yet another sound system.
-@item
-The package has been decided not to be appropriate for XEmacs. It may
-have an equivalent or better replacement within XEmacs, in which case
-the developers may choose not to burden themselves with supporting an
-additional package.
+@uref{http://www.tux.org/~ricdude/EsounD.html}.
-Each package bundled with XEmacs means more work for the maintainers,
-whether they want it or not. If you are ready to take over the
-maintenance responsibilities for the package you port, be sure to say
-so---we will more likely include it.
+To build XEmacs with it, use the @file{configure} flag
+@samp{--with-sound=esd} (@samp{--enable-sound=esd} in 21.5 or later).
-@item
-The package simply hasn't been noted by the XEmacs development. If
-that's the case, the messages like yours are very useful for attracting
-our attention.
+You can specify support for both with a flag like
+@samp{--with-sound=nas,esd} (@samp{--enable-sound=nas,esd} in 21.5 or
+later).
-@item
-The package was noted by the developers, but they simply haven't yet
-gotten around to including/porting it. Wait for the next release or,
-even better, offer your help. It will be gladly accepted and
-appreciated.
-@end enumerate
+@node Q5.3.4, Q5.4.1, Q5.3.3, External Subsystems
+@unnumberedsubsec Q5.3.4: Sunsite sounds don't play.
-@node Q4.7.2, Q4.7.3, Q4.7.1, External Subsystems
-@unnumberedsubsec Q4.7.2: Are there any Emacs Lisp Spreadsheets?
+I'm having some trouble with sounds I've downloaded from sunsite. They
+play when I run them through @code{showaudio} or cat them directly to
+@file{/dev/audio}, but XEmacs refuses to play them.
-Yes. Check out @dfn{dismal} (which stands for Dis' Mode Ain't Lotus) at
-@iftex
-@*
-@end iftex
-@uref{ftp://cs.nyu.edu/pub/local/fox/dismal/}.
+@email{gutschk@(a)uni-muenster.de, Markus Gutschke} writes:
-@node Q4.7.3, Q4.8.1, Q4.7.2, External Subsystems
-@unnumberedsubsec Q4.7.3: Is there a MatLab mode?
+@quotation
+[Many of] These files have an (erroneous) 24byte header that tells about
+the format that they have been recorded in. If you cat them to
+@file{/dev/audio}, the header will be ignored and the default behavior
+for /dev/audio will be used. This happens to be 8kHz uLaw. It is
+probably possible to fix the header by piping through @code{sox} and
+passing explicit parameters for specifying the sampling format; you then
+need to perform a 'null' conversion from SunAudio to SunAudio.
+@end quotation
-Yes, a matlab mode and other items are available at the
-@uref{ftp://ftp.mathworks.com/pub/contrib/emacs_add_ons,
-MathWorks' emacs_add_ons ftp directory}.
+@unnumberedsec 5.4: Running an Interior Shell, Invoking Subprocesses
-@unnumberedsec 4.8: Environments Built Around XEmacs
+@node Q5.4.1, Q5.4.2, Q5.3.4, External Subsystems
+@unnumberedsubsec Q5.4.1: What is an interior shell?
-@node Q4.8.1, Q4.8.2, Q4.7.3, External Subsystems
-@unnumberedsubsec Q4.8.1: What are SPARCworks, EOS, and WorkShop?
+#### Write me.
-SPARCworks was a development environment from Sun (circa 1993-1996)
-and consisted of compilers (C, C++, FORTRAN 77, Fortran 90, Ada, and
-Pascal), a debugger, and other tools such as TeamWare (for
-configuration management), MakeTool, etc.
+@node Q5.4.2, Q5.4.3, Q5.4.1, External Subsystems
+@unnumberedsubsec Q5.4.2: How do I start up a second shell buffer?
-EOS is the integration of XEmacs with the SPARCworks debugger. It
-allows one to use an XEmacs frame to view code (complete with
-fontification, etc.), set breakpoints, print variables, etc., while
-using the SPARCworks debugger.
+In the @code{*shell*} buffer:
-EOS stands for "Era on SPARCworks"; Era stood for "Emacs Rewritten
-Again" and was the name used by Sun for its modified version of Lucid
-Emacs (later XEmacs) in the early-mid 90's. This is documented in
-more detail in the history section of the XEmacs About page.
+@lisp
+M-x rename-buffer @key{RET} *shell-1* @key{RET}
+M-x shell RET
+@end lisp
-EOS was replaced around 1996 with a newer graphical development
-environment called Sun WorkShop. The current status of this is
-unknown.
+This will then start a second shell. The key is that no buffer named
+@samp{*shell*} can exist. It might be preferable to use @kbd{M-x
+rename-uniquely} to rename the @code{*shell*} buffer instead of @kbd{M-x
+rename-buffer}.
-@node Q4.8.2, Q4.8.3, Q4.8.1, External Subsystems
-@unnumberedsubsec Q4.8.2: How do I start the Sun Workshop support in XEmacs 21?
+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,
+a new shell is made
-Add the switch ---with-workshop to the configure command when building
-XEmacs and put the following in one of your startup files
-(e.g. site-start.el or .emacs):
+@node Q5.4.3, Q5.4.4, Q5.4.2, External Subsystems
+@unnumberedsubsec Q5.4.3: Telnet from shell filters too much
-@lisp
-(when (featurep 'tooltalk)
- (load "tooltalk-macros")
- (load "tooltalk-util")
- (load "tooltalk-init"))
-(when (featurep 'sparcworks)
- (load "sunpro-init")
- (load "ring")
- (load "comint")
- (load "annotations")
- (sunpro-startup))
-@end lisp
+I'm using the Emacs @kbd{M-x shell} function, and I would like to invoke
+and use a telnet session within it. Everything works fine except that
+now all @samp{^M}'s are filtered out by Emacs. Fixes?
-If you are not using the latest Workshop (5.0) you have to apply the
-following patch:
+Use @kbd{M-x rsh} or @kbd{M-x telnet} to open remote sessions rather
+than doing rsh or telnet within the local shell buffer. You can also
+use @kbd{M-x ssh} to open secure remote session if you have @code{ssh}
+installed.
-@format
---- /opt/SUNWspro/lib/eserve.el.ORIG Fri May 14 15:23:26 1999
-+++ /opt/SUNWspro/lib/eserve.el Fri May 14 15:24:54 1999
-@@@@ -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")
+@node Q5.4.4, Q5.4.5, Q5.4.3, External Subsystems
+@unnumberedsubsec Q5.4.4: Strange things are happening in Shell Mode.
--(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
+Sometimes (i.e. it's not repeatable, and I can't work out why it
+happens) when I'm typing into shell mode, I hit return and only a
+portion of the command is given to the shell, and a blank prompt is
+returned. If I hit return again, the rest of the previous command is
+given to the shell.
-@node Q4.8.3, Q4.8.4, Q4.8.2, External Subsystems
-@unnumberedsubsec Q4.8.3: What is/was Energize?
+@email{martin@(a)xemacs.org, Martin Buchholz} writes:
-The "Energize Programming System" was a C and C++ development environment
-sold by Lucid, Inc. It was the reason why Lucid Emacs, now XEmacs, was
-created in the first place. Unfortunately, Lucid went out of business in
-1994. The rights to sell it in Japan were purchased by INS
-Engineering (which briefly employed Stig Hackvan aka Jonathan
-Stigelman to work on Japanese support for XEmacs, in late 1994 and
-early 1995) and Tartan bought the rights to sell it in the rest of the
-world. However, INS is not selling Energize at this point and may or
-may not have ever done so; Tartan certainly never did.
+@quotation
+There is a known problem with interaction between @code{csh} and the
+@code{filec} option and XEmacs. You should add the following to your
+(a)file{.cshrc}:
-@node Q4.8.4, , Q4.8.3, External Subsystems
-@unnumberedsubsec Q4.8.4: What is Infodock?
+@example
+if ( "$TERM" == emacs || "$TERM" == unknown ) unset filec
+@end example
+@end quotation
-@uref{http://sourceforge.net/projects/infodock/, InfoDock} is an
-integrated productivity toolset, mainly aimed at technical people,
-hosted at SourceForge.
+@node Q5.4.5, Q5.4.6, Q5.4.4, External Subsystems
+@unnumberedsubsec Q5.4.5: XEmacs complains "No such file or directory, diff"
-InfoDock is built atop the XEmacs variant of GNU Emacs and so has all of
-the power of Emacs, but with an easier to use and more comprehensive
-menu-based user interface. The bottom portion of this text describes
-how it differs from XEmacs and GNU Emacs from the Free Software
-Foundation.
+or "ispell" or other commands that seem related to whatever you just
+tried to do (M-x ediff or M-$, for example).
-InfoDock is aimed at people who want a free, turn-key productivity
-environment. Although InfoDock is customizable, it is not intended for
-people who like basic versions of Emacs which need to be customized
-extensively for local use; standard Emacs distributions are better for
-such uses. InfoDock is for those people who want a complete,
-pre-customized environment in one package, which they need not touch
-more than once or twice a year to update to new revisions.
+There are a large number of common (in the sense that "everyone has
+these, they really do") Unix utilities that are not provided with
+XEmacs. The GNU Project's implementations are available for Windows in
+the the Cygwin distribution (@uref{http://www.cygwin.com/}), which also
+provides a complete Unix emulation environment (and thus makes ports of
+Unix utilities nearly trivial). Another implementation is that from
+MinGW (@uref{http://www.mingw.org/msys.shtml}). If you know of others,
+please let us know!
-InfoDock is pre-built for SPARC SunOS/Solaris systems, PA-RISC HP-UX,
-and Intel Linux systems. It is intended for use on a color display,
-although most features will work on monochrome monitors. Simply unpack
-InfoDock according to the instructions in the ID-INSTALL file and you
-are ready to run.
+@node Q5.4.6, Q5.5.1, Q5.4.5, External Subsystems
+@unnumberedsubsec Q5.4.6: Cygwin error "fork_copy: linked dll/bss pass 0
failed"
-The InfoDock Manual is concise, yet sufficient as a user guide for users
-who have never used an Emacs-type editor before. For users who are
-already familiar with Emacs, it supplements the information in the GNU
-Emacs Manual.
+If you are getting an error like
-InfoDock menus are much more extensive and more mature than standard
-Emacs menus. Each menu offers a @samp{Manual} item which displays
-documentation associated with the menu's functions.
+@example
+17797832 [main] bash 3468 fork_copy: linked dll/bss pass 0 failed,
+0x675000..0x6756A0, done 0, windows pid 2708, Win 32 error 487
+bash: fork: resource temporarily unavailable
+@end example
-@noindent
-Four types of menubars are provided:
+when trying to run bash using @kbd{M-x shell}, then you need to rebase
+your Cygwin DLL's. This is a known problem with Cygwin. To fix:
+
@enumerate
-@item
-An extensive menubar providing access to global InfoDock commands.
@item
-Mode-specific menubars tailored to the current major mode.
+Download the @file{rebase} utility from Cygwin setup (it's under
+@samp{System}).
@item
-A simple menubar for basic editing to help novices get started with InfoDock.
+Kill @strong{all} of your Cygwin processes, including all of your
+shells and all background processes. Use @code{ps -a} to list all the
+processes you need to kill.
+@item
+From a DOS prompt, run @file{ash} (@strong{not} @file{bash},
+@file{tcsh} or @file{zsh}). Do not try to be clever and @code{exec
+/bin/ash} from your last shell; it won't work.
@item
-The standard XEmacs menubar.
+Type @code{/bin/rebaseall -v}.
@end enumerate
-Most modes also include mode-specific popup menus. Additionally, region and
-rectangle popup menus are included.
+The problem should now be fixed -- at least, until you install another
+Cygwin package with DLL's, in which case you may have to repeat the
+procedure.
+
+@unnumberedsec 5.5: Multiple Device Support
+
+@node Q5.5.1, Q5.5.2, Q5.4.6, External Subsystems
+@unnumberedsubsec Q5.5.1: How do I open a frame on another screen of my multi-headed
display?
+
+Use the command @kbd{M-x make-frame-on-display}. This command is also
+on the File menu in the menubar.
+
+The command @code{make-frame-on-tty} also exists, which will establish a
+connection to any tty-like device. Opening the TTY devices should be
+left to @code{gnuclient}, though.
+
+@node Q5.5.2, Q5.5.3, Q5.5.1, External Subsystems
+@unnumberedsubsec Q5.5.2: Can I really connect to a running XEmacs after calling up
over a modem? How?
+
+Yes. Use @code{gnuclient -nw}.
+
+Also see @ref{Q5.5.3, How do I disable gnuserv from opening a new frame?}.
+
+@node Q5.5.3, Q5.5.4, Q5.5.2, External Subsystems
+@unnumberedsubsec Q5.5.3: How do I disable gnuserv from opening a new frame?
+
+If you set the @code{gnuserv-frame} variable to the frame that should be
+used to display buffers that are pulled up, a new frame will not be
+created. For example, you could put
+
+@lisp
+(setq gnuserv-frame (selected-frame))
+@end lisp
+
+early on in your @file{init.el}, to ensure that the first frame created
+is the one used for your gnuserv buffers.
+
+There is an option to set the gnuserv target to the current frame. See
+@code{Options->Display->"Other Window" Location->Make Current Frame
Gnuserv Target}
-@samp{Hyperbole}, the everyday information manager, is a core part of
-InfoDock. This provides context-sensitive mouse keys, a rolodex-type
-contact manager, programmable hypertext buttons, and an autonumbered
-outliner with embedded hyperlink anchors.
+You can also change this with Customize. Select from the
+@code{Options} menu @code{Advanced
+(Customize)->Emacs->Environment->Gnuserv->Gnuserv Frame...} or type
+@kbd{M-x customize @key{RET} gnuserv @key{RET}}.
-The @samp{OO-Browser}, a multi-language object-oriented code browser, is a
-standard part of InfoDock.
-InfoDock saves a more extensive set of user options than other Emacs
-versions.
+@node Q5.5.4, Q5.5.5, Q5.5.3, External Subsystems
+@unnumberedsubsec Q5.5.4: How do I start gnuserv so that each subsequent XEmacs is a
client?
-InfoDock inserts a useful file header in many file types, showing the
-author, summary, and last modification time of each file. A summary
-program can then be used to summarize all of the files in a directory,
-for easy MANIFEST file creation.
+Put the following in your @file{init.el} file to start the server:
-Your working set of buffers is automatically saved and restored (if you
-answer yes to a prompt) between InfoDock sessions.
+@lisp
+(gnuserv-start)
+@end lisp
-Refined color choices for code highlighting are provided for both dark and
-light background display frames.
+Start your first XEmacs as usual. After that, you can do:
-The @kbd{C-z} key prefix performs frame-based commands which parallel the
-@kbd{C-x} key prefix for window-based commands.
+@example
+gnuclient randomfilename
+@end example
-The Smart Menu system is included for producing command menus on dumb
-terminals.
+from the command line to get your existing XEmacs process to open a new
+frame and visit randomfilename in that window. When you're done editing
+randomfilename, hit @kbd{C-x #} to kill the buffer and get rid of the
+frame.
-Lisp libraries are better categorized according to function.
+See also man page of gnuclient.
-Extensions and improvements to many areas of Emacs are included, such as:
-paragraph filling, mail reading with Rmail, shell handling, outlining, code
-highlighting and browsing, and man page browsing.
+@node Q5.5.5, , Q5.5.4, External Subsystems
+@unnumberedsubsec Q5.5.5: Is there a way to start a new XEmacs if there's no
gnuserv running, and otherwise use gnuclient?
-InfoDock questions, answers and discussion should go to the mail list
-@iftex
-@*
-@end iftex
-@email{infodock@(a)infodock.com}. Use
-@email{infodock-request@(a)infodock.com} to be added or removed from the
-list. Always include your InfoDock version number when sending help
-requests.
+@email{vroonhof@(a)math.ethz.ch, Jan Vroonhof} writes:
+@quotation
+Here is one of the solutions, we have this in a script called
+(a)file{etc/editclient.sh}.
+@example
+ #!/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
+@end example
+
+Note that there is a known problem when running XEmacs and 'gnuclient
+-nw' on the same TTY.
+@end quotation
@node Internet, Advanced, External Subsystems, Top
-@unnumbered 5 Connecting to the Internet
+@unnumbered 6 Connecting to the Internet
-This is part 5 of the XEmacs Frequently Asked Questions list. This
+This is part 6 of the XEmacs Frequently Asked Questions list. This
section is devoted connecting to the Internet.
@menu
-5.0: General Mail and News
-* Q5.0.1:: What are the various packages for reading mail?
-* Q5.0.2:: How can I send mail?
-* Q5.0.3:: How do I get my outgoing mail archived?
-* Q5.0.4:: How can I read and/or compose MIME messages?
-* Q5.0.5:: How do I customize the From line?
-* Q5.0.6:: How do I get my MUA to filter mail for me?
-* Q5.0.7:: Remote mail reading with an MUA.
-* Q5.0.8:: An MUA gets an error incorporating new mail.
-* Q5.0.9:: Why isn't @file{movemail} working?
-* Q5.0.10:: How do I make my MUA display graphical smilies?
-* Q5.0.11:: How can I get those oh-so-neat X-Face lines?
-
-5.1: Reading Mail with VM
-* Q5.1.1:: How do I set up VM to retrieve mail from a remote site using POP?
-* Q5.1.2:: How can I get VM to automatically check for new mail?
-* Q5.1.3:: I have various addresses at which I receive mail. How can I tell VM to
ignore them when doing a "reply-all"?
-* Q5.1.4:: Is there a mailing list or FAQ for VM?
-* Q5.1.5:: How do I make VM stay in a single frame?
-* Q5.1.6:: Customization of VM not covered in the manual, or here.
-
-5.2: Reading Netnews and Mail with Gnus
-* Q5.2.1:: GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus, Quassia Gnus, argh!
-* Q5.2.2:: How do I make Gnus stay within a single frame?
-
-5.3: FTP Access
-* Q5.3.1:: Can I edit files on other hosts?
-* Q5.3.2:: What is EFS?
-
-5.4: Web Browsing with W3
-* Q5.4.1:: What is W3?
-* Q5.4.2:: How do I run W3 from behind a firewall?
-* Q5.4.3:: Is it true that W3 supports style sheets and tables?
+6.0: General Mail and News
+* Q6.0.1:: What are the various packages for reading mail?
+* Q6.0.2:: How can I send mail?
+* Q6.0.3:: How do I get my outgoing mail archived?
+* Q6.0.4:: How can I read and/or compose MIME messages?
+* Q6.0.5:: How do I customize the From line?
+* Q6.0.6:: How do I get my MUA to filter mail for me?
+* Q6.0.7:: Remote mail reading with an MUA.
+* Q6.0.8:: An MUA gets an error incorporating new mail.
+* Q6.0.9:: Why isn't @file{movemail} working?
+* Q6.0.10:: How do I make my MUA display graphical smilies?
+* Q6.0.11:: How can I get those oh-so-neat X-Face lines?
+
+6.1: Reading Mail with VM
+* Q6.1.1:: How do I set up VM to retrieve mail from a remote site using POP?
+* Q6.1.2:: How can I get VM to automatically check for new mail?
+* Q6.1.3:: I have various addresses at which I receive mail. How can I tell VM to
ignore them when doing a "reply-all"?
+* Q6.1.4:: Is there a mailing list or FAQ for VM?
+* Q6.1.5:: How do I make VM stay in a single frame?
+* Q6.1.6:: Customization of VM not covered in the manual, or here.
+
+6.2: Reading Netnews and Mail with Gnus
+* Q6.2.1:: GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus, Quassia Gnus, argh!
+* Q6.2.2:: How do I make Gnus stay within a single frame?
+
+6.3: FTP Access
+* Q6.3.1:: Can I edit files on other hosts?
+* Q6.3.2:: What is EFS?
+
+6.4: Web Browsing with W3
+* Q6.4.1:: What is W3?
+* Q6.4.2:: How do I run W3 from behind a firewall?
+* Q6.4.3:: Is it true that W3 supports style sheets and tables?
@end menu
-@unnumberedsec 5.0: General Mail and News
+@unnumberedsec 6.0: General Mail and News
-@node Q5.0.1, Q5.0.2, Internet, Internet
-@unnumberedsubsec Q5.0.1: What are the various packages for reading mail?
+@node Q6.0.1, Q6.0.2, Internet, Internet
+@unnumberedsubsec Q6.0.1: What are the various packages for reading mail?
#### Write me.
-@node Q5.0.2, Q5.0.3, Q5.0.1, Internet
-@unnumberedsubsec Q5.0.2: How can I send mail?
+@node Q6.0.2, Q6.0.3, Q6.0.1, Internet
+@unnumberedsubsec Q6.0.2: How can I send mail?
Under Unix and Mac OS X, the @samp{sendmail} package is normally used
for this.
@@ -6047,23 +6802,23 @@ require logging in to send mail, don't u
The other settings may be useful in specific cases, but you should know what
you're doing before enabling them.
-@node Q5.0.3, Q5.0.4, Q5.0.2, Internet
-@unnumberedsubsec Q5.0.3: How do I get my outgoing mail archived?
+@node Q6.0.3, Q6.0.4, Q6.0.2, Internet
+@unnumberedsubsec Q6.0.3: How do I get my outgoing mail archived?
@lisp
(setq mail-archive-file-name "~/outbox")
@end lisp
-@node Q5.0.4, Q5.0.5, Q5.0.3, Internet
-@unnumberedsubsec Q5.0.4: How can I read and/or compose MIME messages?
+@node Q6.0.4, Q6.0.5, Q6.0.3, Internet
+@unnumberedsubsec Q6.0.4: How can I read and/or compose MIME messages?
VM, MH-E and GNUS support MIME natively. Other MUAs may or may not
have MIME support; refer to their documentation and other resources,
such as web pages and mailing lists. Packages like SEMI/WEMI may be
useful in connection with MUAs like mew and Wanderlust.
-@node Q5.0.5, Q5.0.6, Q5.0.4, Internet
-@unnumberedsubsec Q5.0.5: How do I customize the From line?
+@node Q6.0.5, Q6.0.6, Q6.0.4, Internet
+@unnumberedsubsec Q6.0.5: How do I customize the From line?
How do I change the @samp{From:} line? I have set gnus-user-from-line
to
@@ -6086,25 +6841,22 @@ Set @code{user-mail-address} to @samp{ga
@code{mail-host-address} to @samp{sybase.com}.
@end quotation
-@node Q5.0.6, Q5.0.7, Q5.0.5, Internet
-@unnumberedsubsec Q5.0.6: How do I get my MUA to filter mail for me?
+@node Q6.0.6, Q6.0.7, Q6.0.5, Internet
+@unnumberedsubsec Q6.0.6: How do I get my MUA to filter mail for me?
One possibility is to use procmail to split your mail before it gets to
the MUA. I prefer this personally, since there are many strange and
wonderful things one can do with procmail. Procmail may be found at
-@uref{ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/}.
+@uref{http://www.procmail.org/}.
Also see the Mail Filtering FAQ at:
@iftex
@*
@end iftex
-@uref{ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/filtering-faq}.
-@c Link above,
-@c
<
URL:http://www.cis.ohio-state.edu/hypertext/faq/usenet/mail/filtering-faq...
-@c was dead.
+@uref{http://www.faqs.org/faqs/mail/filtering-faq/}.
-@node Q5.0.7, Q5.0.8, Q5.0.6, Internet
-@unnumberedsubsec Q5.0.7: Remote mail reading with an MUA.
+@node Q6.0.7, Q6.0.8, Q6.0.6, Internet
+@unnumberedsubsec Q6.0.7: Remote mail reading with an MUA.
My mailbox lives at the office on a big honkin server. My regular INBOX
lives on my honkin desktop machine. I now can PPP to the office from
@@ -6141,8 +6893,8 @@ just use ange-ftp or NFS to get to your
the time back at IU.
@end quotation
-@node Q5.0.8, Q5.0.9, Q5.0.7, Internet
-@unnumberedsubsec Q5.0.8: An MUA gets an error incorporating new mail.
+@node Q6.0.8, Q6.0.9, Q6.0.7, Internet
+@unnumberedsubsec Q6.0.8: An MUA gets an error incorporating new mail.
rmail and VM, and probably other MUA's as well, get new mail from
your mailbox (called @file{/var/mail/$USER} or @file{/var/spool/mail/$USER}
@@ -6151,7 +6903,8 @@ This program interlocks with @code{/bin/
defined by @code{/bin/mail}.
There are various different protocols in general use, which you need to
-specify using the @samp{--mail-locking} option to @file{configure}:
+specify using the @samp{--mail-locking} option
+(@samp{--with-mail-locking} in 21.5 or later) to @file{configure}:
@table @samp
@item lockf
@@ -6202,18 +6955,18 @@ The installed copy of @file{movemail} is
the group and mode of the installed copy; changing the group and mode
of the build directory copy is ineffective.
-@node Q5.0.9, Q5.0.10, Q5.0.8, Internet
-@unnumberedsubsec Q5.0.9: Why isn't @file{movemail} working?
+@node Q6.0.9, Q6.0.10, Q6.0.8, Internet
+@unnumberedsubsec Q6.0.9: Why isn't @file{movemail} working?
-(a)xref{Q5.0.8}.
+(a)xref{Q6.0.8}.
Note also that older versions of Mozilla came with a @file{movemail}
program that is @strong{not} compatible with XEmacs. Do not use it.
Always use the @file{movemail} installed with your XEmacs. Failure to
do so can result in lost mail.
-@node Q5.0.10, Q5.0.11, Q5.0.9, Internet
-@unnumberedsubsec Q5.0.10: How do I make my MUA display graphical smilies?
+@node Q6.0.10, Q6.0.11, Q6.0.9, Internet
+@unnumberedsubsec Q6.0.10: How do I make my MUA display graphical smilies?
For mh-e use the following:
@lisp
@@ -6238,12 +6991,12 @@ For tm use the following:
(add-hook 'mime-viewer/plain-text-preview-hook 'smiley-buffer)
@end lisp
-@node Q5.0.11, Q5.1.1, Q5.0.10, Internet
-@unnumberedsubsec Q5.0.11: How can I get those oh-so-neat X-Face lines?
+@node Q6.0.11, Q6.1.1, Q6.0.10, Internet
+@unnumberedsubsec Q6.0.11: How can I get those oh-so-neat X-Face lines?
Firstly there is an ftp site which describes X-faces and has the
associated tools mentioned below, at
-@uref{ftp://ftp.cs.indiana.edu:/pub/faces/}.
+@uref{http://ftp.cs.indiana.edu/pub/faces/}.
Then the steps are
@@ -6309,10 +7062,8 @@ Some people have also found that if one
method, one should NOT quote the face string using the sed script .
It might also be helpful to use @email{stig@(a)hackvan.com, Stig's} script
-(included in the compface distribution at
XEmacs.org) to do the
+xbm2face (included in the compface distribution at
XEmacs.org) to do the
conversion.
-@comment For convenience xbm2xface is available for anonymous FTP at
-@comment @uref{ftp://ftp.miranova.com/pub/xemacs/xbm2xface.pl}.
Contributors for this item:
@@ -6325,10 +7076,10 @@ Peter Arius,
Paul Harrison, and
Vegard Vesterheim
-@unnumberedsec 5.1: Reading Mail with VM
+@unnumberedsec 6.1: Reading Mail with VM
-@node Q5.1.1, Q5.1.2, Q5.0.11, Internet
-@unnumberedsubsec Q5.1.1: How do I set up VM to retrieve mail from a remote site using
POP?
+@node Q6.1.1, Q6.1.2, Q6.0.11, Internet
+@unnumberedsubsec Q6.1.1: How do I set up VM to retrieve mail from a remote site using
POP?
Use @code{vm-spool-files}, like this for example:
@@ -6339,8 +7090,8 @@ Use @code{vm-spool-files}, like this for
Of course substitute your actual password for MYPASS.
-@node Q5.1.2, Q5.1.3, Q5.1.1, Internet
-@unnumberedsubsec Q5.1.2: How can I get VM to automatically check for new mail?
+@node Q6.1.2, Q6.1.3, Q6.1.1, Internet
+@unnumberedsubsec Q6.1.2: How can I get VM to automatically check for new mail?
@email{turner@(a)lanl.gov, John Turner} writes:
@@ -6352,8 +7103,8 @@ Use the following:
@end lisp
@end quotation
-@node Q5.1.3, Q5.1.4, Q5.1.2, Internet
-@unnumberedsubsec Q5.1.3: I have various addresses at which I receive mail. How can I
tell VM to ignore them when doing a "reply-all"?
+@node Q6.1.3, Q6.1.4, Q6.1.2, Internet
+@unnumberedsubsec Q6.1.3: I have various addresses at which I receive mail. How can I
tell VM to ignore them when doing a "reply-all"?
Set @code{vm-reply-ignored-addresses} to a list, like
@@ -6365,15 +7116,15 @@ Set @code{vm-reply-ignored-addresses} to
Note that each string is a regular expression.
-@node Q5.1.4, Q5.1.5, Q5.1.3, Internet
-@unnumberedsubsec Q5.1.4: Is there a mailing list or FAQ for VM?
+@node Q6.1.4, Q6.1.5, Q6.1.3, Internet
+@unnumberedsubsec Q6.1.4: Is there a mailing list or FAQ for VM?
A FAQ for VM exists at @uref{http://www.wonderworks.com/vm/FAQ.html}.
VM has its own newsgroups gnu.emacs.vm.info and gnu.emacs.vm.bug.
-@node Q5.1.5, Q5.1.6, Q5.1.4, Internet
-@unnumberedsubsec Q5.1.5: How do I make VM stay in a single frame?
+@node Q6.1.5, Q6.1.6, Q6.1.4, Internet
+@unnumberedsubsec Q6.1.5: How do I make VM stay in a single frame?
John.@email{Cooper@(a)Eng.Sun.COM, John S Cooper} writes:
@@ -6387,8 +7138,8 @@ John.@email{Cooper@(a)Eng.Sun.COM, John S
@end lisp
@end quotation
-@node Q5.1.6, Q5.2.1, Q5.1.5, Internet
-@unnumberedsubsec Q5.1.6: Customization of VM not covered in the manual, or here.
+@node Q6.1.6, Q6.2.1, Q6.1.5, Internet
+@unnumberedsubsec Q6.1.6: Customization of VM not covered in the manual, or here.
@email{boffi@(a)hp735.stru.polimi.it, giacomo boffi} writes:
@@ -6410,786 +7161,1075 @@ some keywords, maybe the first you conju
appropriate variables, copy and experiment.
@end quotation
-@unnumberedsec 5.2: Reading Netnews and Mail with Gnus
+@unnumberedsec 6.2: Reading Netnews and Mail with Gnus
-@node Q5.2.1, Q5.2.2, Q5.1.6, Internet
-@unnumberedsubsec Q5.2.1: GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus, Quassia
Gnus, argh!
+@node Q6.2.1, Q6.2.2, Q6.1.6, Internet
+@unnumberedsubsec Q6.2.1: GNUS, (ding) Gnus, Gnus 5, September Gnus, Red Gnus, Quassia
Gnus, argh!
The Gnus numbering issues are not meant for mere mortals to know them.
If you feel you @emph{must} enter the muddy waters of Gnus, visit the
excellent FAQ, maintained by Justin Sheehy, at:
@example
-@uref{http://www.ccs.neu.edu/software/contrib/gnus/}
+@uref{http://my.gnus.org/FAQ/}
@end example
See also Gnus home page
@example
@uref{http://www.gnus.org/}
@end example
+
+@node Q6.2.2, Q6.3.1, Q6.2.1, Internet
+@unnumberedsubsec Q6.2.2: How do I make Gnus stay within a single frame?
+
+The toolbar code to start Gnus opens the new frame---and it's a feature
+rather than a bug. If you don't like it, but would still like to click
+on the seemly icon, use the following code:
+
+@lisp
+(defun toolbar-news ()
+ (gnus))
+@end lisp
+
+It will redefine the callback function of the icon to just call
+@code{gnus}, without all the fancy frame stuff.
+
+@unnumberedsec 6.3: FTP Access
+
+@node Q6.3.1, Q6.3.2, Q6.2.2, Internet
+@unnumberedsubsec Q6.3.1: Can I edit files on other hosts?
+
+Yes. Of course XEmacs can use any network file system (such as NFS or
+Windows file sharing) you have available, and includes some
+optimizations and safety features appropriate to those environments.
+
+It is also possible to transparently edit files via FTP, ssh, or rsh. That
+is, XEmacs makes a local copy using the transport in the background, and
+automatically refreshes the remote original from that copy when you save
+it. XEmacs also is capable of doing file system manipulations like
+creating and removing directories and files. The FTP interface is
+provided by the standard @samp{efs} package @ref{Top, EFS, , efs}. The
+ssh/rsh interface is provided by the optional @samp{tramp} package
+@ref{Top, TRAMP, , tramp}.
+
+@node Q6.3.2, Q6.4.1, Q6.3.1, Internet
+@unnumberedsubsec Q6.3.2: What is EFS?
+
+#### Write me.
+
+@unnumberedsec 6.4: Web Browsing with W3
+
+@node Q6.4.1, Q6.4.2, Q6.3.2, Internet
+@unnumberedsubsec Q6.4.1: What is W3?
+
+W3 is an advanced graphical browser written in Emacs lisp that runs on
+XEmacs. It has full support for cascaded style sheets, and more...
+
+It has a home web page at
+@uref{http://www.cs.indiana.edu/elisp/w3/docs.html}.
+
+@node Q6.4.2, Q6.4.3, Q6.4.1, Internet
+@unnumberedsubsec Q6.4.2: How do I run W3 from behind a firewall?
+
+There is a long, well-written, detailed section in the W3 manual that
+describes how to do this. Look in the section entitled "Firewalls".
+
+@node Q6.4.3, , Q6.4.2, Internet
+@unnumberedsubsec Q6.4.3: Is it true that W3 supports style sheets and tables?
+
+Yes, and much more. W3, as distributed with the latest XEmacs is a
+full-featured web browser.
+
+@node Advanced, Other Packages, Internet, Top
+@unnumbered 7 Advanced Customization Using XEmacs Lisp
+
+This is part 7 of the XEmacs Frequently Asked Questions list. This
+section is devoted to advanced customization using XEmacs Lisp.
+
+@menu
+7.0: Emacs Lisp and @file{init.el}
+* Q7.0.1:: What version of Emacs am I running?
+* Q7.0.2:: How can I evaluate Emacs-Lisp expressions?
+* Q7.0.3:: @code{(setq tab-width 6)} behaves oddly.
+* Q7.0.4:: How can I add directories to the @code{load-path}?
+* Q7.0.5:: How to check if a lisp function is defined?
+* Q7.0.6:: Can I force the output of @code{(face-list)} to a buffer?
+
+7.1: Emacs Lisp Programming Techniques
+* Q7.1.1:: What is the difference in key sequences between XEmacs and GNU Emacs?
+* Q7.1.2:: Can I generate "fake" keyboard events?
+* Q7.1.3:: Could you explain @code{read-kbd-macro} in more detail?
+* Q7.1.4:: What is the performance hit of @code{let}?
+* Q7.1.5:: What is the recommended use of @code{setq}?
+* Q7.1.6:: What is the typical misuse of @code{setq}?
+* Q7.1.7:: I like the @code{do} form of cl, does it slow things down?
+* Q7.1.8:: I like recursion, does it slow things down?
+* Q7.1.9:: How do I put a glyph as annotation in a buffer?
+* Q7.1.10:: @code{map-extents} won't traverse all of my extents!
+* Q7.1.11:: My elisp program is horribly slow. Is there an easy way to find out
where it spends time?
+
+7.2: Mathematics
+* Q7.2.1:: What are bignums, ratios, and bigfloats in Lisp?
+* Q7.2.2:: XEmacs segfaults when I use very big numbers!
+* Q7.2.3:: Bignums are really slow!
+* Q7.2.4:: Equal bignums don't compare as equal! What gives?
+@end menu
+
+@unnumberedsec 7.0: Emacs Lisp and @file{init.el}
-@node Q5.2.2, Q5.3.1, Q5.2.1, Internet
-@unnumberedsubsec Q5.2.2: How do I make Gnus stay within a single frame?
+@node Q7.0.1, Q7.0.2, Advanced, Advanced
+@unnumberedsubsec Q7.0.1: What version of Emacs am I running?
+
+How can @file{init.el} 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 @file{etc/sample.init.el} (@file{etc/sample.emacs} in
+XEmacs versions prior to 21.4). There are other nifty things in there
+as well!
+
+For all new code, all you really need to do is:
+
+@lisp
+(defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))
+@end lisp
+
+@node Q7.0.2, Q7.0.3, Q7.0.1, Advanced
+@unnumberedsubsec Q7.0.2: How can I evaluate Emacs-Lisp expressions?
+
+I know I can evaluate Elisp expressions from @code{*scratch*} buffer
+with @kbd{C-j} after the expression. How do I do it from another
+buffer?
+
+Press @kbd{M-:} (the default binding of @code{eval-expression}), and
+enter the expression to the minibuffer.
+
+@node Q7.0.3, Q7.0.4, Q7.0.2, Advanced
+@unnumberedsubsec Q7.0.3: @code{(setq tab-width 6)} behaves oddly.
+
+If you put @code{(setq tab-width 6)} in your
+(a)file{init.el} 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 @code{setq-default} instead, since @code{tab-width} is
+all-buffer-local.
+
+@node Q7.0.4, Q7.0.5, Q7.0.3, Advanced
+@unnumberedsubsec Q7.0.4: How can I add directories to the @code{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:
+
+@lisp
+;;; 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")))
+@end lisp
+
+@email{keithh@(a)nortel.ca, keith (k.p.) hanlan} writes:
+
+@quotation
+To add directories using Unix shell metacharacters use
+@file{expand-file-name} like this:
+
+@lisp
+(push (expand-file-name "~keithh/.emacsdir") load-path)
+@end lisp
+@end quotation
+
+@node Q7.0.5, Q7.0.6, Q7.0.4, Advanced
+@unnumberedsubsec Q7.0.5: How to check if a lisp function is defined?
+
+Use the following elisp:
+
+@lisp
+(fboundp 'foo)
+@end lisp
+
+It's almost always a mistake to test @code{emacs-version} or any similar
+variables.
+
+Instead, use feature-tests, such as @code{featurep}, @code{boundp},
+@code{fboundp}, or even simple behavioral tests, eg.:
+
+@lisp
+(defvar foo-old-losing-code-p
+ (condition-case nil (progn (losing-code t) nil)
+ (wrong-number-of-arguments t)))
+@end lisp
+
+There is an incredible amount of broken code out there which could work
+much better more often in more places if it did the above instead of
+trying to divine its environment from the value of one variable.
+
+@node Q7.0.6, Q7.1.1, Q7.0.5, Advanced
+@unnumberedsubsec Q7.0.6: Can I force the output of @code{(face-list)} to a buffer?
+
+It would be good having it in a buffer, as the output of
+@code{(face-list)} is too wide to fit to a minibuffer.
+
+Evaluate the expression in the @samp{*scratch*} buffer with point after
+the rightmost paren and typing @kbd{C-j}.
+
+If the minibuffer smallness is the only problem you encounter, you can
+simply press @kbd{C-h l} to get the former minibuffer contents in a
+buffer.
+
+@unnumberedsec 7.1: Emacs Lisp Programming Techniques
+
+@node Q7.1.1, Q7.1.2, Q7.0.6, Advanced
+@unnumberedsubsec Q7.1.1: What is the difference in key sequences between XEmacs and
GNU Emacs?
+
+@email{clerik@(a)naggum.no, Erik Naggum} writes;
+
+@quotation
+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 @kbd{M-C-a}, you would say
+@code{[(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 @samp{\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 @code{[(meta control A)]} differs from @code{[(meta
+control a)]} because the case differs, @samp{\M-\C-a} and @samp{\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.
+@end quotation
+
+Another (even safer) way to be sure of the key-sequences is to use the
+@code{read-kbd-macro} function, which takes a string like @samp{C-c
+<up>}, and converts it to the internal key representation of the Emacs
+you use. The function is available both on XEmacs and GNU Emacs.
+
+@node Q7.1.2, Q7.1.3, Q7.1.1, Advanced
+@unnumberedsubsec Q7.1.2: Can I generate "fake" keyboard events?
+
+I wonder if there is an interactive function that can generate
+@dfn{fake} keyboard events. This way, I could simply map them inside
+XEmacs.
-The toolbar code to start Gnus opens the new frame---and it's a feature
-rather than a bug. If you don't like it, but would still like to click
-on the seemly icon, use the following code:
+This seems to work:
@lisp
-(defun toolbar-news ()
- (gnus))
+(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)))
@end lisp
-It will redefine the callback function of the icon to just call
-@code{gnus}, without all the fancy frame stuff.
+@node Q7.1.3, Q7.1.4, Q7.1.2, Advanced
+@unnumberedsubsec Q7.1.3: Could you explain @code{read-kbd-macro} in more detail?
-@unnumberedsec 5.3: FTP Access
+The @code{read-kbd-macro} function returns the internal Emacs
+representation of a human-readable string (which is its argument).
+Thus:
-@node Q5.3.1, Q5.3.2, Q5.2.2, Internet
-@unnumberedsubsec Q5.3.1: Can I edit files on other hosts?
+@lisp
+(read-kbd-macro "C-c C-a")
+@result{} [(control ?c) (control ?a)]
-Yes. Of course XEmacs can use any network file system (such as NFS or
-Windows file sharing) you have available, and includes some
-optimizations and safety features appropriate to those environments.
+(read-kbd-macro "C-c C-. <up>")
+@result{} [(control ?c) (control ?.) up]
+@end lisp
-It is also possible to transparently edit files via FTP, ssh, or rsh. That
-is, XEmacs makes a local copy using the transport in the background, and
-automatically refreshes the remote original from that copy when you save
-it. XEmacs also is capable of doing file system manipulations like
-creating and removing directories and files. The FTP interface is
-provided by the standard @samp{efs} package @ref{Top, EFS, , efs}. The
-ssh/rsh interface is provided by the optional @samp{tramp} package
-@ref{Top, TRAMP, , tramp}.
+In GNU Emacs the same forms will be evaluated to what GNU Emacs
+understands internally---the sequences @code{"\C-x\C-c"} and @code{[3
+67108910 up]}, respectively.
-@node Q5.3.2, Q5.4.1, Q5.3.1, Internet
-@unnumberedsubsec Q5.3.2: What is EFS?
+The exact @dfn{human-readable} syntax is defined in the docstring of
+@code{edmacro-mode}. I'll repeat it here, for completeness.
-#### Write me.
+@quotation
+Format of keyboard macros during editing:
-@unnumberedsec 5.4: Web Browsing with W3
+Text is divided into @dfn{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
+@kbd{foo @key{SPC} bar @key{RET}}.
-@node Q5.4.1, Q5.4.2, Q5.3.2, Internet
-@unnumberedsubsec Q5.4.1: What is W3?
+@itemize @bullet
+@item
+The special words @kbd{RET}, @kbd{SPC}, @kbd{TAB}, @kbd{DEL}, @kbd{LFD},
+@kbd{ESC}, and @kbd{NUL} represent special control characters. The
+words must be written in uppercase.
-W3 is an advanced graphical browser written in Emacs lisp that runs on
-XEmacs. It has full support for cascaded style sheets, and more...
+@item
+A word in angle brackets, e.g., @code{<return>}, @code{<down>}, or
+@code{<f1>}, represents a function key. (Note that in the standard
+configuration, the function key @code{<return>} and the control key
+@key{RET} are synonymous.) You can use angle brackets on the words
+@key{RET}, @key{SPC}, etc., but they are not required there.
-It has a home web page at
-@uref{http://www.cs.indiana.edu/elisp/w3/docs.html}.
+@item
+Keys can be written by their @sc{ascii} code, using a backslash followed
+by up to six octal digits. This is the only way to represent keys with
+codes above \377.
-@node Q5.4.2, Q5.4.3, Q5.4.1, Internet
-@unnumberedsubsec Q5.4.2: How do I run W3 from behind a firewall?
+@item
+One or more prefixes @kbd{M-} (meta), @kbd{C-} (control), @kbd{S-}
+(shift), @kbd{A-} (alt), @kbd{H-} (hyper), and @kbd{s-} (super) may
+precede a character or key notation. For function keys, the prefixes
+may go inside or outside of the brackets: @code{C-<down>} @equiv{}
+@code{<C-down>}. The prefixes may be written in any order: @kbd{M-C-x}
+@equiv{} @kbd{C-M-x}.
-There is a long, well-written, detailed section in the W3 manual that
-describes how to do this. Look in the section entitled "Firewalls".
+Prefixes are not allowed on multi-key words, e.g., @kbd{C-abc}, except
+that the Meta prefix is allowed on a sequence of digits and optional
+minus sign: @kbd{M--123} @equiv{} @kbd{M-- M-1 M-2 M-3}.
-@node Q5.4.3, , Q5.4.2, Internet
-@unnumberedsubsec Q5.4.3: Is it true that W3 supports style sheets and tables?
+@item
+The @code{^} notation for control characters also works: @kbd{^M}
+@equiv{} @kbd{C-m}.
-Yes, and much more. W3, as distributed with the latest XEmacs is a
-full-featured web browser.
+@item
+Double angle brackets enclose command names: @code{<<next-line>>} is
+shorthand for @kbd{M-x next-line @key{RET}}.
-@node Advanced, Current Events, Internet, Top
-@unnumbered 6 Advanced Customization Using XEmacs Lisp
+@item
+Finally, @code{REM} or @code{;;} causes the rest of the line to be
+ignored as a comment.
+@end itemize
-This is part 6 of the XEmacs Frequently Asked Questions list. This
-section is devoted to advanced customization using XEmacs Lisp.
+Any word may be prefixed by a multiplier in the form of a decimal number
+and @code{*}: @code{3*<right>} @equiv{} @code{<right> <right>
<right>},
+and @code{10*foo} @equiv{}
+@iftex
+@*
+@end iftex
+@code{foofoofoofoofoofoofoofoofoofoo}.
-@menu
-6.0: Online Help
-* Q6.0.1:: How can I get two instances of info?
-* Q6.0.2:: How do I add new Info directories?
-
-6.1: Emacs Lisp and @file{init.el}
-* Q6.1.1:: What version of Emacs am I running?
-* Q6.1.2:: How can I evaluate Emacs-Lisp expressions?
-* Q6.1.3:: @code{(setq tab-width 6)} behaves oddly.
-* Q6.1.4:: How can I add directories to the @code{load-path}?
-* Q6.1.5:: How to check if a lisp function is defined?
-* Q6.1.6:: Can I force the output of @code{(face-list)} to a buffer?
-
-6.2: Emacs Lisp Programming Techniques
-* Q6.2.1:: What is the difference in key sequences between XEmacs and GNU Emacs?
-* Q6.2.2:: Can I generate "fake" keyboard events?
-* Q6.2.3:: Could you explain @code{read-kbd-macro} in more detail?
-* Q6.2.4:: What is the performance hit of @code{let}?
-* Q6.2.5:: What is the recommended use of @code{setq}?
-* Q6.2.6:: What is the typical misuse of @code{setq}?
-* Q6.2.7:: I like the @code{do} form of cl, does it slow things down?
-* Q6.2.8:: I like recursion, does it slow things down?
-* Q6.2.9:: How do I put a glyph as annotation in a buffer?
-* Q6.2.10:: @code{map-extents} won't traverse all of my extents!
-* Q6.2.11:: My elisp program is horribly slow. Is there
-
-6.3: Mathematics
-* Q6.3.1:: What are bignums, ratios, and bigfloats in Lisp?
-* Q6.3.2:: XEmacs segfaults when I use very big numbers!
-* Q6.3.3:: Bignums are really slow!
-* Q6.3.4:: Equal bignums don't compare as equal! What gives?
-@end menu
+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: @code{; ; ;} is a keyboard macro with three semicolons,
+but @code{;;;} is a comment. Likewise, @code{\ 1 2 3} is four keys but
+@code{\123} is a single key written in octal, and @code{< right >} is
+seven keys but @code{<right>} is a single function key. When in doubt,
+use whitespace.
+@end quotation
-@unnumberedsec 6.0: Online Help
+@node Q7.1.4, Q7.1.5, Q7.1.3, Advanced
+@unnumberedsubsec Q7.1.4: What is the performance hit of @code{let}?
-@node Q6.0.1, Q6.0.2, Advanced, Advanced
-@unnumberedsubsec Q6.0.1: How can I get two instances of info?
+In most cases, not noticeable. Besides, there's no avoiding
+@code{let}---you have to bind your local variables, after all. Some
+pose a question whether to nest @code{let}s, or use one @code{let} per
+function. I think because of clarity and maintenance (and possible
+future implementation), @code{let}-s should be used (nested) in a way to
+provide the clearest code.
-Before 21.4, you can't. The @code{info} package does not provide for
-multiple info buffers. In 21.4, this should be fixed. #### how?
+@node Q7.1.5, Q7.1.6, Q7.1.4, Advanced
+@unnumberedsubsec Q7.1.5: What is the recommended use of @code{setq}?
-@node Q6.0.2, Q6.1.1, Q6.0.1, Advanced
-@unnumberedsubsec Q6.0.2: How do I add new Info directories?
+@itemize @bullet
+@item Global variables
-You use something like:
+You will typically @code{defvar} your global variable to a default
+value, and use @code{setq} to set it later.
+
+It is never a good practice to @code{setq} user variables (like
+@code{case-fold-search}, etc.), as it ignores the user's choice
+unconditionally. Note that @code{defvar} doesn't change the value of a
+variable if it was bound previously. If you wish to change a
+user-variable temporarily, use @code{let}:
@lisp
-(setq Info-directory-list (cons
- (expand-file-name "~/info")
- Info-default-directory-list))
+(let ((case-fold-search nil))
+ ... ; code with searches that must be
case-sensitive
+ ...)
@end lisp
-
-@email{davidm@(a)prism.kla.com, David Masterson} writes:
-
-@quotation
-Emacs Info and XEmacs Info do many things differently. If you're trying to
-support a number of versions of Emacs, here are some notes to remember:
-
-@enumerate
-@item
-Emacs Info scans @code{Info-directory-list} from right-to-left while
-XEmacs Info reads it from left-to-right, so append to the @emph{correct}
-end of the list.
-
-@item
-Use @code{Info-default-directory-list} to initialize
-@code{Info-directory-list} @emph{if} it is available at startup, but not
-all Emacsen define it.
-@item
-Emacs Info looks for a standard @file{dir} file in each of the
-directories scanned from #1 and magically concatenates them together.
+You will notice the user-variables by their docstrings beginning with an
+asterisk (a convention).
-@item
-XEmacs Info looks for a @file{localdir} file (which consists of just the
-menu entries from a @file{dir} file) in each of the directories scanned
-from #1 (except the first), does a simple concatenation of them, and
-magically attaches the resulting list to the end of the menu in the
-@file{dir} file in the first directory.
-@end enumerate
+@item Local variables
-Another alternative is to convert the documentation to HTML with
-texi2html and read it from a web browser like Lynx or W3.
-@end quotation
+Bind them with @code{let}, which will unbind them (or restore their
+previous value, if they were bound) after exiting from the @code{let}
+form. Change the value of local variables with @code{setq} or whatever
+you like (e.g. @code{incf}, @code{setf} and such). The @code{let} form
+can even return one of its local variables.
-@unnumberedsec 6.1: Emacs Lisp and @file{init.el}
+Typical usage:
-@node Q6.1.1, Q6.1.2, Q6.0.2, Advanced
-@unnumberedsubsec Q6.1.1: What version of Emacs am I running?
+@lisp
+;; iterate through the elements of the list returned by
+;; `hairy-function-that-returns-list'
+(let ((l (hairy-function-that-returns-list)))
+ (while l
+ ... do something with (car l) ...
+ (setq l (cdr l))))
+@end lisp
-How can @file{init.el} determine which of the family of
-Emacsen I am using?
+Another typical usage includes building a value simply to work with it.
-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 @file{etc/sample.init.el} (@file{etc/sample.emacs} in
-XEmacs versions prior to 21.4). There are other nifty things in there
-as well!
+@lisp
+;; Build the mode keymap out of the key-translation-alist
+(let ((inbox (file-truename (expand-file-name box)))
+ (i 0))
+ ... code dealing with inbox ...
+ inbox)
+@end lisp
-For all new code, all you really need to do is:
+This piece of code uses the local variable @code{inbox}, which becomes
+unbound (or regains old value) after exiting the form. The form also
+returns the value of @code{inbox}, which can be reused, for instance:
@lisp
-(defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version))
+(setq foo-processed-inbox
+ (let .....))
@end lisp
-
-@node Q6.1.2, Q6.1.3, Q6.1.1, Advanced
-@unnumberedsubsec Q6.1.2: How can I evaluate Emacs-Lisp expressions?
+@end itemize
-I know I can evaluate Elisp expressions from @code{*scratch*} buffer
-with @kbd{C-j} after the expression. How do I do it from another
-buffer?
+@node Q7.1.6, Q7.1.7, Q7.1.5, Advanced
+@unnumberedsubsec Q7.1.6: What is the typical misuse of @code{setq}?
-Press @kbd{M-:} (the default binding of @code{eval-expression}), and
-enter the expression to the minibuffer.
+A typical misuse is probably @code{setq}ing a variable that was meant to
+be local. Such a variable will remain bound forever, never to be
+garbage-collected. For example, the code doing:
-@node Q6.1.3, Q6.1.4, Q6.1.2, Advanced
-@unnumberedsubsec Q6.1.3: @code{(setq tab-width 6)} behaves oddly.
+@lisp
+(defun my-function (whatever)
+ (setq a nil)
+ ... build a large list ...
+ ... and exit ...)
+@end lisp
-If you put @code{(setq tab-width 6)} in your
-(a)file{init.el} file it does not work! Is there a reason
-for this? If you do it at the EVAL prompt it works fine!! How strange.
+does a bad thing, as @code{a} will keep consuming memory, never to be
+unbound. The correct thing is to do it like this:
-Use @code{setq-default} instead, since @code{tab-width} is
-all-buffer-local.
+@lisp
+(defun my-function (whatever)
+ (let (a) ; default initialization is to nil
+ ... build a large list ...
+ ... and exit, unbinding `a' in the process ...)
+@end lisp
-@node Q6.1.4, Q6.1.5, Q6.1.3, Advanced
-@unnumberedsubsec Q6.1.4: How can I add directories to the @code{load-path}?
+Not only is this prettier syntactically, but it makes it possible for
+Emacs to garbage-collect the objects which @code{a} used to reference.
-Here are two ways to do that, one that puts your directories at the
-front of the load-path, the other at the end:
+Note that even global variables should not be @code{setq}ed without
+@code{defvar}ing them first, because the byte-compiler issues warnings.
+The reason for the warning is the following:
@lisp
-;;; Add things at the beginning of the load-path, do not add
-;;; duplicate directories:
-(pushnew "bar" load-path :test 'equal)
+(defun flurgoze nil) ; ok, global internal variable
+...
-(pushnew "foo" load-path :test 'equal)
+(setq flurghoze t) ; ops! a typo, but semantically correct.
+ ; however, the byte-compiler warns.
-;;; Add things at the end, unconditionally
-(setq load-path (nconc load-path '("foo" "bar")))
+While compiling toplevel forms:
+** assignment to free variable flurghoze
@end lisp
-@email{keithh@(a)nortel.ca, keith (k.p.) hanlan} writes:
+@node Q7.1.7, Q7.1.8, Q7.1.6, Advanced
+@unnumberedsubsec Q7.1.7: I like the @code{do} form of cl, does it slow things down?
+
+It shouldn't. Here is what Dave Gillespie has to say about cl.el
+performance:
@quotation
-To add directories using Unix shell metacharacters use
-@file{expand-file-name} like this:
+Many of the advanced features of this package, such as @code{defun*},
+@code{loop}, and @code{setf}, are implemented as Lisp macros. In
+byte-compiled code, these complex notations will be expanded into
+equivalent Lisp code which is simple and efficient. For example, the
+forms
@lisp
-(push (expand-file-name "~keithh/.emacsdir") load-path)
+(incf i n)
+(push x (car p))
@end lisp
-@end quotation
-
-@node Q6.1.5, Q6.1.6, Q6.1.4, Advanced
-@unnumberedsubsec Q6.1.5: How to check if a lisp function is defined?
-Use the following elisp:
+are expanded at compile-time to the Lisp forms
@lisp
-(fboundp 'foo)
+(setq i (+ i n))
+(setcar p (cons x (car p)))
@end lisp
-It's almost always a mistake to test @code{emacs-version} or any similar
-variables.
+which are the most efficient ways of doing these respective operations
+in Lisp. Thus, there is no performance penalty for using the more
+readable @code{incf} and @code{push} forms in your compiled code.
-Instead, use feature-tests, such as @code{featurep}, @code{boundp},
-@code{fboundp}, or even simple behavioral tests, eg.:
+@emph{Interpreted} code, on the other hand, must expand these macros
+every time they are executed. For this reason it is strongly
+recommended that code making heavy use of macros be compiled. (The
+features labelled @dfn{Special Form} instead of @dfn{Function} in this
+manual are macros.) A loop using @code{incf} a hundred times will
+execute considerably faster if compiled, and will also garbage-collect
+less because the macro expansion will not have to be generated, used,
+and thrown away a hundred times.
-@lisp
-(defvar foo-old-losing-code-p
- (condition-case nil (progn (losing-code t) nil)
- (wrong-number-of-arguments t)))
-@end lisp
+You can find out how a macro expands by using the @code{cl-prettyexpand}
+function.
+@end quotation
-There is an incredible amount of broken code out there which could work
-much better more often in more places if it did the above instead of
-trying to divine its environment from the value of one variable.
+@node Q7.1.8, Q7.1.9, Q7.1.7, Advanced
+@unnumberedsubsec Q7.1.8: I like recursion, does it slow things down?
-@node Q6.1.6, Q6.2.1, Q6.1.5, Advanced
-@unnumberedsubsec Q6.1.6: Can I force the output of @code{(face-list)} to a buffer?
+Yes. The Emacs byte-compiler cannot do much to optimize recursion. But
+think well whether this is a real concern in Emacs. Much of the Emacs
+slowness comes from internal mechanisms such as redisplay, or from the
+fact that it is an interpreter.
-It would be good having it in a buffer, as the output of
-@code{(face-list)} is too wide to fit to a minibuffer.
+Please try not to make your code much uglier to gain a very small speed
+gain. It's not usually worth it.
-Evaluate the expression in the @samp{*scratch*} buffer with point after
-the rightmost paren and typing @kbd{C-j}.
+@node Q7.1.9, Q7.1.10, Q7.1.8, Advanced
+@unnumberedsubsec Q7.1.9: How do I put a glyph as annotation in a buffer?
-If the minibuffer smallness is the only problem you encounter, you can
-simply press @kbd{C-h l} to get the former minibuffer contents in a
-buffer.
+Here is a solution that will insert the glyph annotation at the
+beginning of buffer:
-@unnumberedsec 6.2: Emacs Lisp Programming Techniques
+@lisp
+(make-annotation (make-glyph '([FORMAT :file FILE]
+ [string :data "fallback-text"]))
+ (point-min)
+ 'text
+ (current-buffer))
+@end lisp
-@node Q6.2.1, Q6.2.2, Q6.1.6, Advanced
-@unnumberedsubsec Q6.2.1: What is the difference in key sequences between XEmacs and
GNU Emacs?
+Replace @samp{FORMAT} with an unquoted symbol representing the format of
+the image (e.g. @code{xpm}, @code{xbm}, @code{gif}, @code{jpeg}, etc.)
+Instead of @samp{FILE}, use the image file name
+(e.g.
+@iftex
+@*
+@end iftex
+(a)file{/usr/local/lib/xemacs-21.4/etc/recycle.xpm}).
-@email{clerik@(a)naggum.no, Erik Naggum} writes;
+You can turn this to a function (that optionally prompts you for a file
+name), and inserts the glyph at @code{(point)} instead of
+@code{(point-min)}.
-@quotation
-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 @kbd{M-C-a}, you would say
-@code{[(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 @samp{\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 @code{[(meta control A)]} differs from @code{[(meta
-control a)]} because the case differs, @samp{\M-\C-a} and @samp{\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.
-@end quotation
+@node Q7.1.10, Q7.1.11, Q7.1.9, Advanced
+@unnumberedsubsec Q7.1.10: @code{map-extents} won't traverse all of my extents!
-Another (even safer) way to be sure of the key-sequences is to use the
-@code{read-kbd-macro} function, which takes a string like @samp{C-c
-<up>}, and converts it to the internal key representation of the Emacs
-you use. The function is available both on XEmacs and GNU Emacs.
+I tried to use @code{map-extents} to do an operation on all the extents
+in a region. However, it seems to quit after processing a random number
+of extents. Is it buggy?
-@node Q6.2.2, Q6.2.3, Q6.2.1, Advanced
-@unnumberedsubsec Q6.2.2: Can I generate "fake" keyboard events?
+No. The documentation of @code{map-extents} states that it will iterate
+across the extents as long as @var{function} returns @code{nil}.
+Unexperienced programmers often forget to return @code{nil} explicitly,
+which results in buggy code. For instance, the following code is
+supposed to delete all the extents in a buffer, and issue as many
+@samp{fubar!} messages.
-I wonder if there is an interactive function that can generate
-@dfn{fake} keyboard events. This way, I could simply map them inside
-XEmacs.
+@lisp
+(map-extents (lambda (ext ignore)
+ (delete-extent ext)
+ (message "fubar!")))
+@end lisp
-This seems to work:
+Instead, it will delete only the first extent, and stop right there --
+because @code{message} will return a non-nil value. The correct code
+is:
@lisp
-(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)))
+(map-extents (lambda (ext ignore)
+ (delete-extent ext)
+ (message "fubar!")
+ nil))
@end lisp
-@node Q6.2.3, Q6.2.4, Q6.2.2, Advanced
-@unnumberedsubsec Q6.2.3: Could you explain @code{read-kbd-macro} in more detail?
+@node Q7.1.11, Q7.2.1, Q7.1.10, Advanced
+@unnumberedsubsec Q7.1.11: My elisp program is horribly slow. Is there an easy way to
find out where it spends time?
+@c New
-The @code{read-kbd-macro} function returns the internal Emacs
-representation of a human-readable string (which is its argument).
-Thus:
+@email{hniksic@(a)xemacs.org, Hrvoje Niksic} writes:
+@quotation
+Under XEmacs 20.4 and later you can use @kbd{M-x profile-key-sequence},
+press a key (say @key{RET} in the Gnus Group buffer), and get the
+results using @kbd{M-x profile-results}. It should give you an idea of
+where the time is being spent.
+@end quotation
-@lisp
-(read-kbd-macro "C-c C-a")
-@result{} [(control ?c) (control ?a)]
+@unnumberedsec 7.2: Mathematics
-(read-kbd-macro "C-c C-. <up>")
-@result{} [(control ?c) (control ?.) up]
-@end lisp
+@node Q7.2.1, Q7.2.2, Q7.1.11, Advanced
+@unnumberedsubsec Q7.2.1: What are bignums, ratios, and bigfloats in Lisp?
-In GNU Emacs the same forms will be evaluated to what GNU Emacs
-understands internally---the sequences @code{"\C-x\C-c"} and @code{[3
-67108910 up]}, respectively.
+Thanks to @email{james@(a)xemacs.org, Jerry James}, XEmacs 21.5.18 and
+later can use the capabilities of multiple-precision libraries that may
+be available for your platform. The GNU Multiple Precision (GMP) and
+BSD Multiple Precision (MP) libraries are partially supported. GMP
+gives you @dfn{bignums} (arbitrary precision integers), @dfn{ratios}
+(arbitrary precision fractions), and @dfn{bigfloats} (arbitrary
+precision floating point numbers). GNU MP is better-supported by XEmacs
+at the time of writing (2004-04-06). BSD MP support does not include
+ratios or bigfloats, and it throws errors that aren't understood.
-The exact @dfn{human-readable} syntax is defined in the docstring of
-@code{edmacro-mode}. I'll repeat it here, for completeness.
+In most cases, bignum support should be transparent to users and Lisp
+programmers. A bignum-enabled XEmacs will automatically convert from
+fixnums to bignums and back in pure integer arithmetic, and for GNU MP,
+from floats to bigfloats. (Bigfloats must be explicitly coerced to
+other types, even if they are exactly representable by less precise
+types.) The Lisp reader and printer have been enhanced to handle
+bignums, as have the mathematical functions. Rationals (fixnums,
+bignums, and ratios) are printed using the @samp{%d}, @samp{%o},
+@samp{%x}, and @samp{%u} format conversions. The read syntax for ratios
+is @samp{3/5}.
-@quotation
-Format of keyboard macros during editing:
+User-visible changes in behavior include (in probable order of annoyance)
-Text is divided into @dfn{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
-@kbd{foo @key{SPC} bar @key{RET}}.
+@itemize
+@item
+Arithmetic can cause a segfault, depending on your MP library
+(a)ref{Q7.2.2, XEmacs segfaults when I use very big numbers!}.
-@itemize @bullet
@item
-The special words @kbd{RET}, @kbd{SPC}, @kbd{TAB}, @kbd{DEL}, @kbd{LFD},
-@kbd{ESC}, and @kbd{NUL} represent special control characters. The
-words must be written in uppercase.
+Terminology is not Common-Lisp-conforming. For example, ``integer'' for
+Emacs Lisp means what Common Lisp calls ``fixnum''. This issue is being
+investigated, but the use of ``integer'' for fixnum is pervasive and may
+cause backward-compatibility and GNU-Emacs-compatibility problems.
@item
-A word in angle brackets, e.g., @code{<return>}, @code{<down>}, or
-@code{<f1>}, represents a function key. (Note that in the standard
-configuration, the function key @code{<return>} and the control key
-@key{RET} are synonymous.) You can use angle brackets on the words
-@key{RET}, @key{SPC}, etc., but they are not required there.
+Many operations that used to cause a range error now succeed, with
+intermediate results and return values coerced to bignums as needed.
@item
-Keys can be written by their @sc{ascii} code, using a backslash followed
-by up to six octal digits. This is the only way to represent keys with
-codes above \377.
+An atom with ratio read syntax now returns a number, not a symbol.
@item
-One or more prefixes @kbd{M-} (meta), @kbd{C-} (control), @kbd{S-}
-(shift), @kbd{A-} (alt), @kbd{H-} (hyper), and @kbd{s-} (super) may
-precede a character or key notation. For function keys, the prefixes
-may go inside or outside of the brackets: @code{C-<down>} @equiv{}
-@code{<C-down>}. The prefixes may be written in any order: @kbd{M-C-x}
-@equiv{} @kbd{C-M-x}.
+The @samp{%u} format conversion will now give an error if its argument
+is negative. (Without MP, it prints a number which Lisp can't read.)
+@end itemize
-Prefixes are not allowed on multi-key words, e.g., @kbd{C-abc}, except
-that the Meta prefix is allowed on a sequence of digits and optional
-minus sign: @kbd{M--123} @equiv{} @kbd{M-- M-1 M-2 M-3}.
+@emph{Surgeon General's Warning}: The automatic conversions cannot be
+disabled at runtime. New functions have been added which produce
+ratios, so there should be few surprises with type conflicts, but they
+can't be ruled out. ``Arbitrary'' precision means precisely what it
+says. If you work with extremely large numbers, your machine may
+arbitrarily decide to hand you an unpleasant surprise rather than a
+bignum @ref{Q7.2.2, XEmacs segfaults when I use very big numbers!}.
-@item
-The @code{^} notation for control characters also works: @kbd{^M}
-@equiv{} @kbd{C-m}.
+To configure with GNU MP, add @samp{--use-number-lib=gmp}
+(@samp{--enable-bignum=gmp} in 21.5 or later) to your invocation of
+@file{configure}. For BSD MP, use @samp{--use-number-lib=mp}
+(@samp{--enable-bignum=mp} for 21.5).
-@item
-Double angle brackets enclose command names: @code{<<next-line>>} is
-shorthand for @kbd{M-x next-line @key{RET}}.
+If you would like to help with bignum support, especially on BSD MP,
+please subscribe to the @uref{http://www.xemacs.org/Lists/#xemacs-beta,
+XEmacs Beta mailing list}, and book up on @file{number-gmp.h} and
+(a)file{number-mp.h}. Jerry has promised to write internals documentation
+eventually, but if your skills run more to analysis and documentation
+than to writing new code, feel free to fill in the gap!
-@item
-Finally, @code{REM} or @code{;;} causes the rest of the line to be
-ignored as a comment.
-@end itemize
-Any word may be prefixed by a multiplier in the form of a decimal number
-and @code{*}: @code{3*<right>} @equiv{} @code{<right> <right>
<right>},
-and @code{10*foo} @equiv{}
-@iftex
-@*
-@end iftex
-@code{foofoofoofoofoofoofoofoofoofoo}.
+@node Q7.2.2, Q7.2.3, Q7.2.1, Advanced
+@unnumberedsubsec Q7.2.2: XEmacs segfaults when I use very big numbers!
+
+GMP by default allocates temporaries on the stack. If you run out of
+stack space, you're dead; there is no way that we know of to reliably
+detect this condition, because @samp{alloca} is typically implemented to
+be @emph{fast} rather than robust. If you just need a little more
+oomph, use a bigger stack (@emph{e.g.}, the @file{ulimit -s} command in
+bash(1)). If you want robustness at the cost of speed, configure GMP
+with @samp{--disable-alloca} and rebuild the GMP library.
-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: @code{; ; ;} is a keyboard macro with three semicolons,
-but @code{;;;} is a comment. Likewise, @code{\ 1 2 3} is four keys but
-@code{\123} is a single key written in octal, and @code{< right >} is
-seven keys but @code{<right>} is a single function key. When in doubt,
-use whitespace.
-@end quotation
+We do not know whether BSD MP uses @samp{alloca} or not. Please send
+any information you have as a bug report (@kbd{M-x report-xemacs-bug
+@key{RET}}), which will give us platform information. (We do know that
+BSD MP implementations vary across vendors, but how much, we do not know
+yet.)
-@node Q6.2.4, Q6.2.5, Q6.2.3, Advanced
-@unnumberedsubsec Q6.2.4: What is the performance hit of @code{let}?
-In most cases, not noticeable. Besides, there's no avoiding
-@code{let}---you have to bind your local variables, after all. Some
-pose a question whether to nest @code{let}s, or use one @code{let} per
-function. I think because of clarity and maintenance (and possible
-future implementation), @code{let}-s should be used (nested) in a way to
-provide the clearest code.
+@node Q7.2.3, Q7.2.4, Q7.2.2, Advanced
+@unnumberedsubsec Q7.2.3: Bignums are really slow!
-@node Q6.2.5, Q6.2.6, Q6.2.4, Advanced
-@unnumberedsubsec Q6.2.5: What is the recommended use of @code{setq}?
+Many Linux distributions compile all their packages for the i386, and
+this is costly. An optimized version can give you two or three orders
+of magnitude better performance for a Pentium III or IV. (Yes, really.
+See @uref{http://www.swox.com/gmp/gmp-speed.html}.)
-@itemize @bullet
-@item Global variables
-You will typically @code{defvar} your global variable to a default
-value, and use @code{setq} to set it later.
+@node Q7.2.4, , Q7.2.3, Advanced
+@unnumberedsubsec Q7.2.4: Equal bignums don't compare as equal! What gives?
-It is never a good practice to @code{setq} user variables (like
-@code{case-fold-search}, etc.), as it ignores the user's choice
-unconditionally. Note that @code{defvar} doesn't change the value of a
-variable if it was bound previously. If you wish to change a
-user-variable temporarily, use @code{let}:
+Ah, Grasshopper, I see you are using @code{(eq x y)}. The Bodhisattva
+CLTL2 warned of the illusion that equal numbers would be @samp{eq}!
+Meditate on the deeper truths of @samp{eql}, in which numbers of the same
+type which have equal values compare equal, and @samp{=}, which does any
+necessary type coercions before comparing for equality.
-@lisp
-(let ((case-fold-search nil))
- ... ; code with searches that must be
case-sensitive
- ...)
-@end lisp
+Yeah, yeah, it has always worked for integer types, because fixnums and
+characters have an immediate representation. Sorry about that;
+arbitrary precision obviously requires consing new objects because the
+objects are ``large'' and of variable size, and the definition of
+@samp{eq} does not permit different objects to compare as equal.
-You will notice the user-variables by their docstrings beginning with an
-asterisk (a convention).
+@node Other Packages, Current Events, Advanced, Top
+@unnumbered 8 Other External Packages
-@item Local variables
+This is part 8 of the XEmacs Frequently Asked Questions list. This
+section is devoted to miscellaneous external packages not covered
+elsewhere in XEmacs.
-Bind them with @code{let}, which will unbind them (or restore their
-previous value, if they were bound) after exiting from the @code{let}
-form. Change the value of local variables with @code{setq} or whatever
-you like (e.g. @code{incf}, @code{setf} and such). The @code{let} form
-can even return one of its local variables.
+@menu
+8.0: TeX
+* Q8.0.1:: Is there something better than LaTeX mode?
+* Q8.0.2:: What is AUCTeX? Where do you get it?
+* Q8.0.3:: Problems installing AUCTeX.
+* Q8.0.4:: How do I turn off current chapter from AUCTeX modeline?
+
+8.1: Other Unbundled Packages
+* Q8.1.1:: Is there a reason for an Emacs package not to be included in XEmacs?
+* Q8.1.2:: Are there any Emacs Lisp Spreadsheets?
+* Q8.1.3:: Is there a MatLab mode?
+
+8.2: Environments Built Around XEmacs
+* Q8.2.1:: What are SPARCworks, EOS, and WorkShop?
+* Q8.2.2:: How do I start the Sun Workshop support in XEmacs 21?
+* Q8.2.3:: What is/was Energize?
+* Q8.2.4:: What is Infodock?
+@end menu
-Typical usage:
+@unnumberedsec 8.0: TeX
-@lisp
-;; iterate through the elements of the list returned by
-;; `hairy-function-that-returns-list'
-(let ((l (hairy-function-that-returns-list)))
- (while l
- ... do something with (car l) ...
- (setq l (cdr l))))
-@end lisp
+@node Q8.0.1, Q8.0.2, Other Packages, Other Packages
+@unnumberedsubsec Q8.0.1: Is there something better than LaTeX mode?
-Another typical usage includes building a value simply to work with it.
+@email{dak@(a)fsnif.neuroinformatik.ruhr-uni-bochum.de, David Kastrup} writes:
-@lisp
-;; Build the mode keymap out of the key-translation-alist
-(let ((inbox (file-truename (expand-file-name box)))
- (i 0))
- ... code dealing with inbox ...
- inbox)
-@end lisp
+@quotation
+The standard TeX modes leave much to be desired, and are somewhat
+leniently maintained. Serious TeX users use AUCTeX (@pxref{Q8.0.2,
+What is AUCTeX? Where do you get it?}).
+@end quotation
-This piece of code uses the local variable @code{inbox}, which becomes
-unbound (or regains old value) after exiting the form. The form also
-returns the value of @code{inbox}, which can be reused, for instance:
+@node Q8.0.2, Q8.0.3, Q8.0.1, Other Packages
+@unnumberedsubsec Q8.0.2: What is AUCTeX? Where do you get it?
-@lisp
-(setq foo-processed-inbox
- (let .....))
-@end lisp
-@end itemize
+AUCTeX is a complex and sophisticated editing package dedicated to TeX
+and related text formatting languages, including LaTeX and Texinfo.
+It provides support for running TeX on a file or part of a file,
+include files, and of course shortcuts for entering common TeX macros,
+LaTeX environments, etc, and for fontlock.
-@node Q6.2.6, Q6.2.7, Q6.2.5, Advanced
-@unnumberedsubsec Q6.2.6: What is the typical misuse of @code{setq}?
+AUCTeX is a standard package provided by XEmacs. You can get it as
+usual through the @kbd{M-x list-packages} interface. It is also
+included in the (non-Mule) SUMO package. The AUCTeX XEmacs package is
+maintained by Uwe Brauer <GET MAIL ADDRESS>.
-A typical misuse is probably @code{setq}ing a variable that was meant to
-be local. Such a variable will remain bound forever, never to be
-garbage-collected. For example, the code doing:
+AUCTeX is extremely complicated, and its developers primarily
+use GNU Emacs. Not all features of the bleeding edge version
+of AUCTeX are immediately ported to XEmacs; if you need
+these, you may be better off getting the most recent versions
+from the GNU AUCTeX project on @uref{http://savannah.gnu.org}.
+
+@node Q8.0.3, Q8.0.4, Q8.0.2, Other Packages
+@unnumberedsubsec Q8.0.3: Problems installing AUCTeX.
-@lisp
-(defun my-function (whatever)
- (setq a nil)
- ... build a large list ...
- ... and exit ...)
-@end lisp
+@email{vroonhof@(a)math.ethz.ch, Jan Vroonhof} writes:
-does a bad thing, as @code{a} will keep consuming memory, never to be
-unbound. The correct thing is to do it like this:
+@quotation
+AUCTeX works fine on both stock Emacs and XEmacs has been doing so for
+a very very long time. This is mostly due to the work of
+@email{abraham@(a)dina.kvl.dk, Per Abrahamsen} (clap clap) in particular his
@file{easymenu}
+package. Which leads to what is probably the problem...
+@end quotation
-@lisp
-(defun my-function (whatever)
- (let (a) ; default initialization is to nil
- ... build a large list ...
- ... and exit, unbinding `a' in the process ...)
-@end lisp
+Most problems with AUCTeX are one of two things:
-Not only is this prettier syntactically, but it makes it possible for
-Emacs to garbage-collect the objects which @code{a} used to reference.
+@itemize @bullet
+@item
+The TeX-lisp-directory in @file{tex-site.el} and the makefile don't
+match.
-Note that even global variables should not be @code{setq}ed without
-@code{defvar}ing them first, because the byte-compiler issues warnings.
-The reason for the warning is the following:
+Fix: make sure you configure AUCTeX properly @strong{before} installing.
-@lisp
-(defun flurgoze nil) ; ok, global internal variable
-...
+@item
+You have an old version of easymenu.el in your path.
-(setq flurghoze t) ; ops! a typo, but semantically correct.
- ; however, the byte-compiler warns.
+Fix: use @code{locate-library} and remove old versions to make sure it
+@strong{only} finds the one that came with XEmacs.
+@end itemize
-While compiling toplevel forms:
-** assignment to free variable flurghoze
-@end lisp
+@node Q8.0.4, Q8.1.1, Q8.0.3, Other Packages
+@unnumberedsubsec Q8.0.4: How do I turn off current chapter from AUCTeX modeline?
-@node Q6.2.7, Q6.2.8, Q6.2.6, Advanced
-@unnumberedsubsec Q6.2.7: I like the @code{do} form of cl, does it slow things down?
+With AUCTeX, fast typing is hard because the current chapter, section
+etc. are given in the modeline. How can I turn this off?
-It shouldn't. Here is what Dave Gillespie has to say about cl.el
-performance:
+It's not AUCTeX, it comes from @code{func-menu} in @file{func-menu.el}.
+
+@c Add this code to your @file{init.el} to turn it off:
+@c
+@c @lisp
+@c (setq fume-display-in-modeline-p nil)
+@c @end lisp
+@c
+@c Or just add a hook to @code{TeX-mode-hook} to turn it off only for TeX
+@c mode:
+@c
+@c @lisp
+@c (add-hook 'TeX-mode-hook
+@c '(lambda () (setq fume-display-in-modeline-p nil)))
+@c @end lisp
+@c
+@email{dhughes@(a)origin-at.co.uk, David Hughes} writes:
@quotation
-Many of the advanced features of this package, such as @code{defun*},
-@code{loop}, and @code{setf}, are implemented as Lisp macros. In
-byte-compiled code, these complex notations will be expanded into
-equivalent Lisp code which is simple and efficient. For example, the
-forms
+Try this; you'll still get the function name displayed in the modeline,
+but it won't attempt to keep track when you modify the file. To refresh
+when it gets out of synch, you simply need click on the @samp{Rescan
+Buffer} option in the function-menu.
@lisp
-(incf i n)
-(push x (car p))
+(setq-default fume-auto-rescan-buffer-p nil)
@end lisp
-
-are expanded at compile-time to the Lisp forms
+@end quotation
-@lisp
-(setq i (+ i n))
-(setcar p (cons x (car p)))
-@end lisp
+@unnumberedsec 8.1: Other Unbundled Packages
-which are the most efficient ways of doing these respective operations
-in Lisp. Thus, there is no performance penalty for using the more
-readable @code{incf} and @code{push} forms in your compiled code.
+@node Q8.1.1, Q8.1.2, Q8.0.4, Other Packages
+@unnumberedsubsec Q8.1.1: Is there a reason for an Emacs package not to be included in
XEmacs?
-@emph{Interpreted} code, on the other hand, must expand these macros
-every time they are executed. For this reason it is strongly
-recommended that code making heavy use of macros be compiled. (The
-features labelled @dfn{Special Form} instead of @dfn{Function} in this
-manual are macros.) A loop using @code{incf} a hundred times will
-execute considerably faster if compiled, and will also garbage-collect
-less because the macro expansion will not have to be generated, used,
-and thrown away a hundred times.
+The reason for an Emacs package not to be included in XEmacs is
+usually one or more of the following:
-You can find out how a macro expands by using the @code{cl-prettyexpand}
-function.
-@end quotation
+@enumerate
+@item
+The package has not been ported to XEmacs. This will typically happen
+when it uses GNU-Emacs-specific features, which make it fail under
+XEmacs.
-@node Q6.2.8, Q6.2.9, Q6.2.7, Advanced
-@unnumberedsubsec Q6.2.8: I like recursion, does it slow things down?
+Porting a package to XEmacs can range from a trivial amount of change to
+a partial or full rewrite. Fortunately, the authors of modern packages
+usually choose to support both Emacsen themselves.
-Yes. The Emacs byte-compiler cannot do much to optimize recursion. But
-think well whether this is a real concern in Emacs. Much of the Emacs
-slowness comes from internal mechanisms such as redisplay, or from the
-fact that it is an interpreter.
+@item
+The package has been decided not to be appropriate for XEmacs. It may
+have an equivalent or better replacement within XEmacs, in which case
+the developers may choose not to burden themselves with supporting an
+additional package.
-Please try not to make your code much uglier to gain a very small speed
-gain. It's not usually worth it.
+Each package bundled with XEmacs means more work for the maintainers,
+whether they want it or not. If you are ready to take over the
+maintenance responsibilities for the package you port, be sure to say
+so---we will more likely include it.
-@node Q6.2.9, Q6.2.10, Q6.2.8, Advanced
-@unnumberedsubsec Q6.2.9: How do I put a glyph as annotation in a buffer?
+@item
+The package simply hasn't been noted by the XEmacs development. If
+that's the case, the messages like yours are very useful for attracting
+our attention.
-Here is a solution that will insert the glyph annotation at the
-beginning of buffer:
+@item
+The package was noted by the developers, but they simply haven't yet
+gotten around to including/porting it. Wait for the next release or,
+even better, offer your help. It will be gladly accepted and
+appreciated.
+@end enumerate
-@lisp
-(make-annotation (make-glyph '([FORMAT :file FILE]
- [string :data "fallback-text"]))
- (point-min)
- 'text
- (current-buffer))
-@end lisp
+@node Q8.1.2, Q8.1.3, Q8.1.1, Other Packages
+@unnumberedsubsec Q8.1.2: Are there any Emacs Lisp Spreadsheets?
-Replace @samp{FORMAT} with an unquoted symbol representing the format of
-the image (e.g. @code{xpm}, @code{xbm}, @code{gif}, @code{jpeg}, etc.)
-Instead of @samp{FILE}, use the image file name
-(e.g.
+Yes. Check out @dfn{dismal} (which stands for Dis' Mode Ain't Lotus) at
@iftex
@*
@end iftex
-(a)file{/usr/local/lib/xemacs-21.4/etc/recycle.xpm}).
+@uref{http://acs.ist.psu.edu/dismal/dismal.html}.
-You can turn this to a function (that optionally prompts you for a file
-name), and inserts the glyph at @code{(point)} instead of
-@code{(point-min)}.
+@node Q8.1.3, Q8.2.1, Q8.1.2, Other Packages
+@unnumberedsubsec Q8.1.3: Is there a MatLab mode?
-@node Q6.2.10, Q6.2.11, Q6.2.9, Advanced
-@unnumberedsubsec Q6.2.10: @code{map-extents} won't traverse all of my extents!
+Yes, a matlab mode and other items are available at the
+@uref{http://www.mathworks.com/matlabcentral/files/104/matlab.el}.
-I tried to use @code{map-extents} to do an operation on all the extents
-in a region. However, it seems to quit after processing a random number
-of extents. Is it buggy?
+@unnumberedsec 8.2: Environments Built Around XEmacs
-No. The documentation of @code{map-extents} states that it will iterate
-across the extents as long as @var{function} returns @code{nil}.
-Unexperienced programmers often forget to return @code{nil} explicitly,
-which results in buggy code. For instance, the following code is
-supposed to delete all the extents in a buffer, and issue as many
-@samp{fubar!} messages.
+@node Q8.2.1, Q8.2.2, Q8.1.3, Other Packages
+@unnumberedsubsec Q8.2.1: What are SPARCworks, EOS, and WorkShop?
-@lisp
-(map-extents (lambda (ext ignore)
- (delete-extent ext)
- (message "fubar!")))
-@end lisp
+SPARCworks was a development environment from Sun (circa 1993-1996)
+and consisted of compilers (C, C++, FORTRAN 77, Fortran 90, Ada, and
+Pascal), a debugger, and other tools such as TeamWare (for
+configuration management), MakeTool, etc.
-Instead, it will delete only the first extent, and stop right there --
-because @code{message} will return a non-nil value. The correct code
-is:
+EOS is the integration of XEmacs with the SPARCworks debugger. It
+allows one to use an XEmacs frame to view code (complete with
+fontification, etc.), set breakpoints, print variables, etc., while
+using the SPARCworks debugger.
+
+EOS stands for "Era on SPARCworks"; Era stood for "Emacs Rewritten
+Again" and was the name used by Sun for its modified version of Lucid
+Emacs (later XEmacs) in the early-mid 90's. This is documented in
+more detail in the history section of the XEmacs About page.
+
+EOS was replaced around 1996 with a newer graphical development
+environment called Sun WorkShop. The current status of this is
+unknown.
+
+@node Q8.2.2, Q8.2.3, Q8.2.1, Other Packages
+@unnumberedsubsec Q8.2.2: How do I start the Sun Workshop support in XEmacs 21?
+Add the switch ---with-workshop to the configure command when building
+XEmacs and put the following in one of your startup files
+(e.g. site-start.el or .emacs):
+
@lisp
-(map-extents (lambda (ext ignore)
- (delete-extent ext)
- (message "fubar!")
- nil))
+(when (featurep 'tooltalk)
+ (load "tooltalk-macros")
+ (load "tooltalk-util")
+ (load "tooltalk-init"))
+(when (featurep 'sparcworks)
+ (load "sunpro-init")
+ (load "ring")
+ (load "comint")
+ (load "annotations")
+ (sunpro-startup))
@end lisp
-
-@node Q6.2.11, Q6.3.1, Q6.2.10, Advanced
-@unnumberedsubsec Q6.2.11: My elisp program is horribly slow. Is there
-an easy way to find out where it spends time?
-@c New
-@email{hniksic@(a)xemacs.org, Hrvoje Niksic} writes:
-@quotation
-Under XEmacs 20.4 and later you can use @kbd{M-x profile-key-sequence},
-press a key (say @key{RET} in the Gnus Group buffer), and get the
-results using @kbd{M-x profile-results}. It should give you an idea of
-where the time is being spent.
-@end quotation
+If you are not using the latest Workshop (5.0) you have to apply the
+following patch:
-@unnumberedsec 6.3: Mathematics
+@format
+--- /opt/SUNWspro/lib/eserve.el.ORIG Fri May 14 15:23:26 1999
++++ /opt/SUNWspro/lib/eserve.el Fri May 14 15:24:54 1999
+@@@@ -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")
-@node Q6.3.1, Q6.3.2, Q6.2.11, Advanced
-@unnumberedsubsec Q6.3.1: What are bignums, ratios, and bigfloats in Lisp?
+-(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
-Thanks to @email{james@(a)xemacs.org, Jerry James}, XEmacs 21.5.18 and
-later can use the capabilities of multiple-precision libraries that may
-be available for your platform. The GNU Multiple Precision (GMP) and
-BSD Multiple Precision (MP) libraries are partially supported. GMP
-gives you @dfn{bignums} (arbitrary precision integers), @dfn{ratios}
-(arbitrary precision fractions), and @dfn{bigfloats} (arbitrary
-precision floating point numbers). GNU MP is better-supported by XEmacs
-at the time of writing (2004-04-06). BSD MP support does not include
-ratios or bigfloats, and it throws errors that aren't understood.
+@node Q8.2.3, Q8.2.4, Q8.2.2, Other Packages
+@unnumberedsubsec Q8.2.3: What is/was Energize?
-In most cases, bignum support should be transparent to users and Lisp
-programmers. A bignum-enabled XEmacs will automatically convert from
-fixnums to bignums and back in pure integer arithmetic, and for GNU MP,
-from floats to bigfloats. (Bigfloats must be explicitly coerced to
-other types, even if they are exactly representable by less precise
-types.) The Lisp reader and printer have been enhanced to handle
-bignums, as have the mathematical functions. Rationals (fixnums,
-bignums, and ratios) are printed using the @samp{%d}, @samp{%o},
-@samp{%x}, and @samp{%u} format conversions. The read syntax for ratios
-is @samp{3/5}.
+The "Energize Programming System" was a C and C++ development environment
+sold by Lucid, Inc. It was the reason why Lucid Emacs, now XEmacs, was
+created in the first place. Unfortunately, Lucid went out of business in
+1994. The rights to sell it in Japan were purchased by INS
+Engineering (which briefly employed Stig Hackvan aka Jonathan
+Stigelman to work on Japanese support for XEmacs, in late 1994 and
+early 1995) and Tartan bought the rights to sell it in the rest of the
+world. However, INS is not selling Energize at this point and may or
+may not have ever done so; Tartan certainly never did.
-User-visible changes in behavior include (in probable order of annoyance)
+@node Q8.2.4, , Q8.2.3, Other Packages
+@unnumberedsubsec Q8.2.4: What is Infodock?
-@itemize
-@item
-Arithmetic can cause a segfault, depending on your MP library
-(a)ref{Q6.3.2, XEmacs segfaults when I use very big numbers!}.
+@uref{http://sourceforge.net/projects/infodock/, InfoDock} is an
+integrated productivity toolset, mainly aimed at technical people,
+hosted at SourceForge.
-@item
-Terminology is not Common-Lisp-conforming. For example, ``integer'' for
-Emacs Lisp means what Common Lisp calls ``fixnum''. This issue is being
-investigated, but the use of ``integer'' for fixnum is pervasive and may
-cause backward-compatibility and GNU-Emacs-compatibility problems.
+InfoDock is built atop the XEmacs variant of GNU Emacs and so has all of
+the power of Emacs, but with an easier to use and more comprehensive
+menu-based user interface. The bottom portion of this text describes
+how it differs from XEmacs and GNU Emacs from the Free Software
+Foundation.
-@item
-Many operations that used to cause a range error now succeed, with
-intermediate results and return values coerced to bignums as needed.
+InfoDock is aimed at people who want a free, turn-key productivity
+environment. Although InfoDock is customizable, it is not intended for
+people who like basic versions of Emacs which need to be customized
+extensively for local use; standard Emacs distributions are better for
+such uses. InfoDock is for those people who want a complete,
+pre-customized environment in one package, which they need not touch
+more than once or twice a year to update to new revisions.
-@item
-An atom with ratio read syntax now returns a number, not a symbol.
+InfoDock is pre-built for SPARC SunOS/Solaris systems, PA-RISC HP-UX,
+and Intel Linux systems. It is intended for use on a color display,
+although most features will work on monochrome monitors. Simply unpack
+InfoDock according to the instructions in the ID-INSTALL file and you
+are ready to run.
-@item
-The @samp{%u} format conversion will now give an error if its argument
-is negative. (Without MP, it prints a number which Lisp can't read.)
-@end itemize
+The InfoDock Manual is concise, yet sufficient as a user guide for users
+who have never used an Emacs-type editor before. For users who are
+already familiar with Emacs, it supplements the information in the GNU
+Emacs Manual.
-@emph{Surgeon General's Warning}: The automatic conversions cannot be
-disabled at runtime. New functions have been added which produce
-ratios, so there should be few surprises with type conflicts, but they
-can't be ruled out. ``Arbitrary'' precision means precisely what it
-says. If you work with extremely large numbers, your machine may
-arbitrarily decide to hand you an unpleasant surprise rather than a
-bignum @ref{Q6.3.2, XEmacs segfaults when I use very big numbers!}.
+InfoDock menus are much more extensive and more mature than standard
+Emacs menus. Each menu offers a @samp{Manual} item which displays
+documentation associated with the menu's functions.
-To configure with GNU MP, add
-@samp{--use-number-lib=gmp}
-to your invocation of @file{configure}. For BSD MP, use
-@samp{--use-number-lib=mp}.
+@noindent
+Four types of menubars are provided:
+@enumerate
+@item
+An extensive menubar providing access to global InfoDock commands.
+@item
+Mode-specific menubars tailored to the current major mode.
+@item
+A simple menubar for basic editing to help novices get started with InfoDock.
+@item
+The standard XEmacs menubar.
+@end enumerate
-If you would like to help with bignum support, especially on BSD MP,
-please subscribe to the @uref{http://www.xemacs.org/Lists/#xemacs-beta,
-XEmacs Beta mailing list}, and book up on @file{number-gmp.h} and
-(a)file{number-mp.h}. Jerry has promised to write internals documentation
-eventually, but if your skills run more to analysis and documentation
-than to writing new code, feel free to fill in the gap!
+Most modes also include mode-specific popup menus. Additionally, region and
+rectangle popup menus are included.
+@samp{Hyperbole}, the everyday information manager, is a core part of
+InfoDock. This provides context-sensitive mouse keys, a rolodex-type
+contact manager, programmable hypertext buttons, and an autonumbered
+outliner with embedded hyperlink anchors.
-@node Q6.3.2, Q6.3.3, Q6.3.1, Advanced
-@unnumberedsubsec Q6.3.2: XEmacs segfaults when I use very big numbers!
+The @samp{OO-Browser}, a multi-language object-oriented code browser, is a
+standard part of InfoDock.
-GMP by default allocates temporaries on the stack. If you run out of
-stack space, you're dead; there is no way that we know of to reliably
-detect this condition, because @samp{alloca} is typically implemented to
-be @emph{fast} rather than robust. If you just need a little more
-oomph, use a bigger stack (@emph{e.g.}, the @file{ulimit -s} command in
-bash(1)). If you want robustness at the cost of speed, configure GMP
-with @samp{--disable-alloca} and rebuild the GMP library.
+InfoDock saves a more extensive set of user options than other Emacs
+versions.
-We do not know whether BSD MP uses @samp{alloca} or not. Please send
-any information you have as a bug report (@kbd{M-x report-xemacs-bug
-@key{RET}}), which will give us platform information. (We do know that
-BSD MP implementations vary across vendors, but how much, we do not know
-yet.)
+InfoDock inserts a useful file header in many file types, showing the
+author, summary, and last modification time of each file. A summary
+program can then be used to summarize all of the files in a directory,
+for easy MANIFEST file creation.
+Your working set of buffers is automatically saved and restored (if you
+answer yes to a prompt) between InfoDock sessions.
-@node Q6.3.3, Q6.3.4, Q6.3.2, Advanced
-@unnumberedsubsec Q6.3.3: Bignums are really slow!
+Refined color choices for code highlighting are provided for both dark and
+light background display frames.
-Many Linux distributions compile all their packages for the i386, and
-this is costly. An optimized version can give you two or three orders
-of magnitude better performance for a Pentium III or IV. (Yes, really.
-See @uref{http://www.swox.com/gmp/gmp-speed.html}.)
+The @kbd{C-z} key prefix performs frame-based commands which parallel the
+@kbd{C-x} key prefix for window-based commands.
+The Smart Menu system is included for producing command menus on dumb
+terminals.
-@node Q6.3.4, , Q6.3.3, Advanced
-@unnumberedsubsec Q6.3.4: Equal bignums don't compare as equal! What gives?
+Lisp libraries are better categorized according to function.
-Ah, Grasshopper, I see you are using @code{(eq x y)}. The Bodhisattva
-CLTL2 warned of the illusion that equal numbers would be @samp{eq}!
-Meditate on the deeper truths of @samp{eql}, in which numbers of the same
-type which have equal values compare equal, and @samp{=}, which does any
-necessary type coercions before comparing for equality.
+Extensions and improvements to many areas of Emacs are included, such as:
+paragraph filling, mail reading with Rmail, shell handling, outlining, code
+highlighting and browsing, and man page browsing.
-Yeah, yeah, it has always worked for integer types, because fixnums and
-characters have an immediate representation. Sorry about that;
-arbitrary precision obviously requires consing new objects because the
-objects are ``large'' and of variable size, and the definition of
-@samp{eq} does not permit different objects to compare as equal.
+InfoDock questions, answers and discussion should go to the mail list
+@iftex
+@*
+@end iftex
+@email{infodock@(a)infodock.com}. Use
+@email{infodock-request@(a)infodock.com} to be added or removed from the
+list. Always include your InfoDock version number when sending help
+requests.
-@node Current Events, Legacy Versions, Advanced, Top
-@unnumbered 7 What the Future Holds
+@node Current Events, Legacy Versions, Other Packages, Top
+@unnumbered 9 What the Future Holds
-This is part 7 of the XEmacs Frequently Asked Questions list. This
+This is part 9 of the XEmacs Frequently Asked Questions list. This
section will change frequently, and (in theory) should contain any
interesting items that have transpired recently. (But in practice it's
not getting updated like this.)
@@ -7204,26 +8244,25 @@ menu.
Information on older versions of XEmacs can be find in @file{ONEWS} in
the same directory, or @file{OONEWS} for really old versions.
-
@menu
-7.0: Changes
-* Q7.0.1:: What new features will be in XEmacs soon?
-* Q7.0.2:: What's new in XEmacs 21.4?
-* Q7.0.3:: What's new in XEmacs 21.1?
-* Q7.0.4:: What's new in XEmacs 20.4?
-* Q7.0.5:: What's new in XEmacs 20.3?
-* Q7.0.6:: What's new in XEmacs 20.2?
+9.0: Changes
+* Q9.0.1:: What new features will be in XEmacs soon?
+* Q9.0.2:: What's new in XEmacs 21.4?
+* Q9.0.3:: What's new in XEmacs 21.1?
+* Q9.0.4:: What's new in XEmacs 20.4?
+* Q9.0.5:: What's new in XEmacs 20.3?
+* Q9.0.6:: What's new in XEmacs 20.2?
@end menu
-@unnumberedsec 7.0: Changes
+@unnumberedsec 9.0: Changes
-@node Q7.0.1, Q7.0.2, Current Events, Current Events
-@unnumberedsubsec Q7.0.1: What new features will be in XEmacs soon?
+@node Q9.0.1, Q9.0.2, Current Events, Current Events
+@unnumberedsubsec Q9.0.1: What new features will be in XEmacs soon?
#### Write me.
-@node Q7.0.2, Q7.0.3, Q7.0.1, Current Events
-@unnumberedsubsec Q7.0.2: What's new in XEmacs 21.4?
+@node Q9.0.2, Q9.0.3, Q9.0.1, Current Events
+@unnumberedsubsec Q9.0.2: What's new in XEmacs 21.4?
21.4 was the "stable" version of the 21.2 series, which was considered
"experimental" throughout its life; thus there were no "official"
@@ -7344,11 +8383,11 @@ Not yet written.
@c @itemize @bullet
@c @end itemize
-@node Q7.0.3, Q7.0.4, Q7.0.2, Current Events
-@unnumberedsubsec Q7.0.3: What's new in XEmacs 21.1?
+@node Q9.0.3, Q9.0.4, Q9.0.2, Current Events
+@unnumberedsubsec Q9.0.3: What's new in XEmacs 21.1?
21.1 was the "stable" version of "experimental" 21.0 series.
-(a)xref{Q7.0.2, What's new in XEmacs 21.4?}.
+(a)xref{Q9.0.2, What's new in XEmacs 21.4?}.
The following lists summarizes the essential changes made in this
version. For a fuller list, see the @file{NEWS} in the @file{etc}
@@ -7360,7 +8399,7 @@ directory of the XEmacs distribution, or
@itemize @bullet
@item
-XEmacs is now supported under Microsoft Windows 95/98/ME and Windows
+XEmacs is now supported under Microsoft Windows 95/98 and Windows
NT/2000/XP operating systems. To discuss Windows-specific issues,
subscribe to the mailing list at
@email{xemacs-winnt-request@(a)xemacs.org}.
@@ -7483,14 +8522,14 @@ longer on the load-path by default.
@end itemize
-@node Q7.0.4, Q7.0.5, Q7.0.3, Current Events
-@unnumberedsubsec Q7.0.4: What's new in XEmacs 20.4?
+@node Q9.0.4, Q9.0.5, Q9.0.3, Current Events
+@unnumberedsubsec Q9.0.4: What's new in XEmacs 20.4?
XEmacs 20.4 is a bugfix release with no user-visible changes.
@c Filled in from NEWS file of 20.5-b33
-@node Q7.0.5, Q7.0.6, Q7.0.4, Current Events
-@unnumberedsubsec Q7.0.5: What's new in XEmacs 20.3?
+@node Q9.0.5, Q9.0.6, Q9.0.4, Current Events
+@unnumberedsubsec Q9.0.5: What's new in XEmacs 20.3?
XEmacs 20.3 was released in November 1997. It contains many bugfixes,
and a number of new features, including Autoconf 2 based configuration,
@@ -7509,8 +8548,8 @@ the default) is definitely faster than X
XEmacs 20.3 is the first non-beta v20 release, and will be the
basis for all further development.
-@node Q7.0.6, , Q7.0.5, Current Events
-@unnumberedsubsec Q7.0.6: What's new in XEmacs 20.2?
+@node Q9.0.6, , Q9.0.5, Current Events
+@unnumberedsubsec Q9.0.6: What's new in XEmacs 20.2?
The biggest changes in 20.2 include integration of EFS (the next
generation of ange-ftp) and AUC Tex (the Emacs subsystem that includes a
@@ -7526,9 +8565,9 @@ For older news, see the file @file{ONEWS
the XEmacs distribution.
@node Legacy Versions, , Current Events, Top
-@unnumbered 8 New information about old XEmacsen
+@unnumbered 10 New information about old XEmacsen
-This is part 8 of the XEmacs Frequently Asked Questions list. It will
+This is part 10 of the XEmacs Frequently Asked Questions list. It will
occasionally be updated to reflect new information about versions which
are no longer being revised by the XEmacs Project. The primary purpose
is advice on compatibility of older XEmacsen with new packages and
@@ -7536,13 +8575,15 @@ updated versions of packages, but bug fi
to released XEmacsen, but users can apply themselves) are also accepted.
@menu
-* Q8.0.1:: Gnus 5.10 won't display smileys in XEmacs 21.1.
+10.0: XEmacs 21.1
+* Q10.0.1:: Gnus 5.10 won't display smileys in XEmacs 21.1.
+* Q10.0.2:: XEmacs won't start on Windows in XEmacs 21.1.
@end menu
-@unnumberedsec 8.0: XEmacs 21.1
+@unnumberedsec 10.0: XEmacs 21.1
-@node Q8.0.1, , Legacy Versions, Legacy Versions
-@unnumberedsubsec Q8.0.1: Gnus 5.10 won't display smileys in XEmacs 21.1.
+@node Q10.0.1, Q10.0.2, Legacy Versions, Legacy Versions
+@unnumberedsubsec Q10.0.1: Gnus 5.10 won't display smileys in XEmacs 21.1.
@email{eeide@(a)cs.utah.edu, Eric Eide} wrote:
@@ -7578,5 +8619,25 @@ Do this:
The image-mode stuff is gone from format-alist in the 21.4
branch, praise be.
@end quotation
+
+@node Q10.0.2, , Q10.0.1, Legacy Versions
+@unnumberedsubsec Q10.0.2: XEmacs won't start on Windows in XEmacs 21.1.
+
+XEmacs relies on a process called "dumping" to generate a working
+executable. Under MS-Windows this process effectively fixes the memory
+addresses of information in the executable. When XEmacs starts up it tries
+to reserve these memory addresses so that the dumping process can be
+reversed -- putting the information back at the correct addresses.
+Unfortunately some .DLLs (for instance the soundblaster driver) occupy
+memory addresses that can conflict with those needed by the dumped XEmacs
+executable. In this instance XEmacs will fail to start without any
+explanation. Note that this is extremely machine specific.
+
+21.1.10 includes a fix for this that makes more intelligent guesses
+about which memory addresses will be free, and this should cure the
+problem for most people. 21.4 implements "portable dumping", which
+eliminates the problem altogether. We recommend you use the 21.4
+binaries, but you can use the 21.1 binaries if you are very paranoid
+about stability. @xref{Q1.1.2, Are binaries available?}.
@bye
1.52.2.9 +75 -59 XEmacs/xemacs/man/internals/internals.texi
Index: internals.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/internals/internals.texi,v
retrieving revision 1.52.2.8
retrieving revision 1.52.2.9
diff -u -p -r1.52.2.8 -r1.52.2.9
--- internals.texi 2005/09/27 16:28:59 1.52.2.8
+++ internals.texi 2005/11/06 16:14:15 1.52.2.9
@@ -470,7 +470,7 @@ Multilingual Support
* Encodings::
* Internal Mule Encodings::
* Byte/Character Types; Buffer Positions; Other Typedefs::
-* Internal Text API's::
+* Internal Text APIs::
* Coding for Mule::
* CCL::
* Microsoft Windows-Related Multilingual Issues::
@@ -495,9 +495,9 @@ Byte/Character Types; Buffer Positions;
* Usage of the Various Representations::
* Working With the Various Representations::
-Internal Text API's
+Internal Text APIs
-* Basic internal-format API's::
+* Basic internal-format APIs::
* The DFC API::
* The Eistring API::
@@ -4499,6 +4499,8 @@ some of the important features:
@item
Selectively enabling debugging, error checking, and tracing.
@item
+Specifying options by either @code{--with} or @code{--enable}.
+@item
Complex options, which are set-valued (@i{i.e.}, unordered; ordered
lists of options, for example ``take the first available from the
list,'' are neither used currently nor given special support).
@@ -4572,6 +4574,29 @@ Generate the appropriate shared library
implemented in the file @file{aclocal.m4}.
@end table
+@heading XEmacs merged option support
+
+Autoconf 2.59 divides the @file{configure} options into those that
+specify features (@samp{--enable}) and those that specify external
+libraries (@samp{--with}). Many XEmacs options to not fall neatly into
+either of these catagories and so as a matter of policy all options can
+be specified by either method.
+
+These merged options are declared with the @code{XE_MERGED_ARG} macro.
+The arguments to the option are the same as @code{AC_ARG_WITH} and
+@code{AC_ARG_ENABLE} and code that worked with either of these macros
+will worked unchanged with @code{XE_MERGED_ARG}. The option value is
+stored in both @code{with_FEATURE} and @code{enable_FEATURE} shell
+variables.
+
+@table @code
+@item XE_MERGED_ARG(package, help-string, action-if-true, action-if-false)
+Declare an option that can be selected by either @samp{--enable} or
+@samp{--with}. The value of the option is stored in both
+@code{with_FEATURE} and @code{enable_FEATURE}.
+
+@end table
+
@heading XEmacs keyword option support
A @dfn{keyword} option is one that accepts one of a number of
@@ -4579,19 +4604,19 @@ pre-defined values (if support for sets
``complex options'' below). For example,
@samp{--with-mail-locking=flock}.
-Keyword options are defined with expanded forms of
-@samp{AC_ARG_[WITH|ENABLE]} called @samp{XE_KEYWORD_ARG_[WITH|ENABLE]},
-both taking 5 parameters. The first 4 parameters of these macros are
-the same as original macros with the exception that all four parameters
-are @strong{required}. The @var{action-if-true} code is run after the
-argument list has been parsed.
+Keyword options are defined with an expanded form of
+@samp{XE_MERGED_ARG} called @samp{XE_KEYWORD_ARG}, which taks 5
+parameters. The first 4 parameters are the same as original macro with
+the exception that all of these four parameters are @strong{required}.
+The @var{action-if-true} code is run after the argument list has been
+parsed.
The 5th parameter is a list of supported keywords. The whole list must
be quoted but the individual keywords should not. Here is how the
@samp{mail-locking} flag is defined:
@example
-XE_KEYWORD_ARG_WITH([mail-locking],
+XE_KEYWORD_ARG([mail-locking],
AC_HELP_STRING([--with-mail-locking],[Specify the locking to be
used by movemail to prevent concurrent updates
of mail spool files. Valid types are `lockf',
@@ -4615,13 +4640,8 @@ Macros labeled @dfn{internal} are not ex
higher-level features.
@table @code
-@item XE_KEYWORD_ARG_WITH(package, help-string, action-if-true, action-if-false,
[keyword1, keyword2, ....])
-Expanded version of @code{AC_ARG_WITH} for keyword options. All the
-parameters are required. The last argument is a comma-separated list of
-supported keywords, @file{m4}-quoted with @samp{[]}.
-
-@item XE_KEYWORD_ARG_ENABLE(feature, help-string, action-if-true, action-if-false,
[keyword1, keyword2, ....])
-Expanded version of @code{AC_ARG_ENABLE} for keyword options. All the
+@item XE_KEYWORD_ARG(package, help-string, action-if-true, action-if-false, [keyword1,
keyword2, ....])
+Expanded version of @code{XE_MERGED_ARG} for keyword options. All the
parameters are required. The last argument is a comma-separated list of
supported keywords, @file{m4}-quoted with @samp{[]}.
@@ -4641,12 +4661,12 @@ A @dfn{complex option} is one that takes
a set. For example, we might use @code{--with-sound=native,nas} to play
sounds using the native libraries and via NAS.
-Complex options are defined with expanded forms of
-@samp{AC_ARG_[WITH|ENABLE]} called @samp{XE_COMPLEX_ARG_[WITH|ENABLE]},
-both taking 5 parameters. The first 4 parameters of these macros are
-the same as original macros with the exception that all four parameters
-are @strong{required}. The @var{action-if-true} code is run after the
-argument list has been parsed.
+Complex options are defined with an expanded form of
+@samp{XE_MERGED_ARG} called @samp{XE_COMPLEX_ARG}, taking 5 parameters.
+The first 4 parameters are the same as original macro with the exception
+that all four parameters are @strong{required}. The
+@var{action-if-true} code is run after the argument list has been
+parsed.
The 5th parameter is a list of @code{XE_COMPLEX_OPTION} macro calls that
define the valid components and their default values. The list must be
@@ -4654,7 +4674,7 @@ quoted but the individual macro calls sh
@samp{sound} flag is defined:
@example
-XE_COMPLEX_ARG_ENABLE([sound],
+XE_COMPLEX_ARG([sound],
AC_HELP_STRING([--enable-sound],[Compile with sound support.
Valid types are `native', `nas' and `esd'.
Prefix a type with 'no' to disable.
@@ -4722,13 +4742,9 @@ Format a boilerplate help string for com
This was originally written for the Xft option, and doesn't read so well
for options based on alternative libraries like sound. Hackers beware:
the API may be enhanced to deal with this in the future.
-
-@item XE_COMPLEX_ARG_WITH(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE,
[XE_COMPLEX_OPTION(a,yes), ....])
-Extended version of @code{AC_ARG_WITH} for complex options. All the
-parameters are required.
-@item XE_COMPLEX_ARG_ENABLE(FEATURE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE,
[XE_COMPLEX_OPTION(a,yes), ....])
-Expanded version of @code{AC_ARG_ENABLE} for complex options. All the
+@item XE_COMPLEX_ARG(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE,
[XE_COMPLEX_OPTION(a,yes), ....])
+Extended version of @code{XE_MERGED_ARG} for complex options. All the
parameters are required.
@item XE_EXPAND_COMPLEX_OPTION(prefix, component, yesno)
@@ -5816,7 +5832,7 @@ regular quantity of any sort. The only
When there's a reasonable possibility you will actually need all 32 or
64 bits to store the quantity.
@item
-When calling existing API's that require unsigned types. In this case,
+When calling existing APIs that require unsigned types. In this case,
you should still do all manipulation using signed types, and do the
conversion at the very threshold of the API call.
@item
@@ -10168,7 +10184,7 @@ integrated.
@emph{NOTE}: The information at the top of the source file
@file{text.c} is more complete than the following, and there is also a
list of all other places to look for text/I18N-related info. Also look in
-(a)file{text.h} for info about the DFC and Eistring API's.
+(a)file{text.h} for info about the DFC and Eistring APIs.
Recall that there are two primary ways that text is represented in
XEmacs. The @dfn{buffer} representation sees the text as a series of
@@ -10191,7 +10207,7 @@ representation is that it's compact and
* Encodings::
* Internal Mule Encodings::
* Byte/Character Types; Buffer Positions; Other Typedefs::
-* Internal Text API's::
+* Internal Text APIs::
* Coding for Mule::
* CCL::
* Microsoft Windows-Related Multilingual Issues::
@@ -11161,7 +11177,7 @@ always corresponds to the last byte in t
character. (This is important because the Boyer-Moore algorithm works by
looking at the last byte of the search string and &&#### finish this.
-@node Byte/Character Types; Buffer Positions; Other Typedefs, Internal Text API's,
Internal Mule Encodings, Multilingual Support
+@node Byte/Character Types; Buffer Positions; Other Typedefs, Internal Text APIs,
Internal Mule Encodings, Multilingual Support
@section Byte/Character Types; Buffer Positions; Other Typedefs
@cindex byte/character types; buffer positions; other typedefs
@cindex byte/character types
@@ -11211,7 +11227,7 @@ h) [Chbyte] null-semantics @code{char *}
Types (b), (c), (f) and (h) are defined as @code{char}, while the others are
@code{unsigned char}. This is for maximum safety (signed characters are
dangerous to work with) while maintaining as much compatibility with
-external API's and string constants as possible.
+external APIs and string constants as possible.
We also provide versions of the above types defined with different
underlying C types, for API compatibility. These use the following
@@ -11226,7 +11242,7 @@ S = signed
(Formerly I had a comment saying that type (e) "should be replaced with
void *". However, there are in fact many places where an unsigned char
* might be used -- e.g. for ease in pointer computation, since void *
-doesn't allow this, and for compatibility with external API's.)
+doesn't allow this, and for compatibility with external APIs.)
Note that these typedefs are purely for documentation purposes; from
the C code's perspective, they are exactly equivalent to @code{char *},
@@ -11532,27 +11548,27 @@ MAX_BYTEBPOS_GAP_SIZE_3 is a multiple of
65535 is a multiple of 3, but this may not always be the
case. #### unfinished
-@node Internal Text API's, Coding for Mule, Byte/Character Types; Buffer Positions;
Other Typedefs, Multilingual Support
-@section Internal Text API's
-@cindex internal text API's
-@cindex text API's, internal
-@cindex API's, text, internal
+@node Internal Text APIs, Coding for Mule, Byte/Character Types; Buffer Positions;
Other Typedefs, Multilingual Support
+@section Internal Text APIs
+@cindex internal text APIs
+@cindex text APIs, internal
+@cindex APIs, text, internal
-@strong{NOTE}: The most current documentation for these API's is in
+@strong{NOTE}: The most current documentation for these APIs is in
@file{text.h}. In case of error, assume that file is correct and this
one wrong.
@menu
-* Basic internal-format API's::
+* Basic internal-format APIs::
* The DFC API::
* The Eistring API::
@end menu
-@node Basic internal-format API's, The DFC API, Internal Text API's, Internal
Text API's
-@subsection Basic internal-format API's
-@cindex basic internal-format API's
-@cindex internal-format API's, basic
-@cindex API's, basic internal-format
+@node Basic internal-format APIs, The DFC API, Internal Text APIs, Internal Text APIs
+@subsection Basic internal-format APIs
+@cindex basic internal-format APIs
+@cindex internal-format APIs, basic
+@cindex APIs, basic internal-format
These are simple functions and macros to convert between text
representation and characters, move forward and back in text, etc.
@@ -11581,7 +11597,7 @@ a Lisp character. Stuff working with Li
"char", so we consistently use "Ichar" when that's what
we're working
with.
-@node The DFC API, The Eistring API, Basic internal-format API's, Internal Text
API's
+@node The DFC API, The Eistring API, Basic internal-format APIs, Internal Text APIs
@subsection The DFC API
@cindex DFC API
@cindex API, DFC
@@ -11804,13 +11820,13 @@ this appears to cause no problems -- so
switching, and feel no compunctions about writing further such function-
like @code{alloca()} routines in lieu of statement-like ones. --ben
-@node The Eistring API, , The DFC API, Internal Text API's
+@node The Eistring API, , The DFC API, Internal Text APIs
@subsection The Eistring API
@cindex Eistring API
@cindex API, Eistring
(This API is currently under-used) When doing simple things with
-internal text, the basic internal-format API's are enough. But to do
+internal text, the basic internal-format APIs are enough. But to do
things like delete or replace a substring, concatenate various strings,
etc. is difficult to do cleanly because of the allocation issues.
The Eistring API is designed to deal with this, and provides a clean
@@ -12268,7 +12284,7 @@ void eiupr (Eistring *eistr);
Convert all characters in the Eistring to uppercase.
@end example
-@node Coding for Mule, CCL, Internal Text API's, Multilingual Support
+@node Coding for Mule, CCL, Internal Text APIs, Multilingual Support
@section Coding for Mule
@cindex coding for Mule
@cindex Mule, coding for
@@ -12665,7 +12681,7 @@ input or output is a Lisp_Object of type
A source type of @code{C_STRING} or a sink type of
@code{C_STRING_ALLOCA} or @code{C_STRING_MALLOC} is appropriate where
the external API is not '\0'-byte-clean -- i.e. it expects strings to be
-terminated with a null byte. For external API's that are in fact
+terminated with a null byte. For external APIs that are in fact
'\0'-byte-clean, we should of course not use these.
The sinks to be specified must be lvalues, unless they are the lisp
@@ -13373,7 +13389,7 @@ Qmswindows_tstr as the external conversi
qxe...() Unicode-split version of library functions, and doing other things
in certain cases, e.g. when a qxe() function is not present.
-Unicode support also requires that the various Windows API's be
+Unicode support also requires that the various Windows APIs be
"Unicode-encapsulated", so that they automatically call the ANSI or
Unicode version of the API call appropriately and handle the size
differences in structures. What this means is:
@@ -13381,7 +13397,7 @@ differences in structures. What this me
@itemize @bullet
@item
first, note that Windows already provides a sort of encapsulation
-of all API's that deal with text. All such API's are underlyingly
+of all APIs that deal with text. All such APIs are underlyingly
provided in two versions, with an A or W suffix (ANSI or "wide"
i.e. Unicode), and the compile-time constant UNICODE controls which is
selected by the unsuffixed API. Same thing happens with structures, and
@@ -13611,7 +13627,7 @@ NOTE:
@item
wsetargv.obj uses routines that were buggily left out of MSVCRT; anyway,
from looking at the source, it does NOT correctly work under Win 9x as
-it blindly calls the Unicode version of Unicode-split API's such as
+it blindly calls the Unicode version of Unicode-split APIs such as
FindFirstFile)
@item
@@ -18955,7 +18971,7 @@ started and I'll be doing more work to m
IV. GUTTER ETC.
This stuff needs to be "stable" and generally free from bugs. Any
-API's we create need to be well-reviewed or marked clearly as
+APIs we create need to be well-reviewed or marked clearly as
experimental.
V. PORTABLE DUMPER
@@ -19510,7 +19526,7 @@ Author: @uref{mailto:ben@@xemacs.org,Ben
NOTE: These changes are partly motivated by the various user-interface
changes elsewhere in this document, and partly for Mule support. In
-general the various API's in this document would benefit greatly from
+general the various APIs in this document would benefit greatly from
built-in keywords.
I would like to make keyword parameters an integral part of Elisp. The
@@ -21909,7 +21925,7 @@ API is set-unicode-mapping:
each byte. (Most common values are 128, for codepoints given with
the high bit set, or -32, for codepoints given as 1-94 or 0-95.)
-Other API's:
+Other APIs:
@example
(write-unicode-mapping file charset)
1.6.4.2 +1 -1 XEmacs/xemacs/man/lispref/compile.texi
Index: compile.texi
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/man/lispref/compile.texi,v
retrieving revision 1.6.4.1
retrieving revision 1.6.4.2
diff -u -p -r1.6.4.1 -r1.6.4.2
--- compile.texi 2005/09/27 16:29:06 1.6.4.1
+++ compile.texi 2005/11/06 16:14:20 1.6.4.2
@@ -503,7 +503,7 @@ Default: @code{nil} when Emacs version i
@defvar byte-compile-print-gensym
When non-@code{nil}, the compiler may generate code that creates unique
symbols at run-time. This is achieved by printing uninterned symbols
-using the @code{#:@var{SYMBOL}} notation, so that they will be read
+using the @code{#:@var{symbol}} notation, so that they will be read
uninterned when run.
With this feature, code that uses uninterned symbols in macros will
1.36.2.6 +58 -0 XEmacs/xemacs/modules/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/modules/ChangeLog,v
retrieving revision 1.36.2.5
retrieving revision 1.36.2.6
diff -u -p -r1.36.2.5 -r1.36.2.6
--- ChangeLog 2005/09/27 16:29:10 1.36.2.5
+++ ChangeLog 2005/11/06 16:14:22 1.36.2.6
@@ -1,3 +1,61 @@
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
+
+2005-10-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ Warning elimination:
+
+ * ldap/eldap.c (Fldap_add): Remove declaration of `current', which
+ is now declared by EXTERNAL_LIST_LOOP_2.
+ (Fldap_modify): Remove redundant variable `gcpro2',
+
+2005-10-25 Ben Wing <ben(a)xemacs.org>
+
+ * postgresql/postgresql.c (allocate_pgconn):
+ * postgresql/postgresql.c (allocate_pgresult):
+ * postgresql/postgresql.h (struct Lisp_PGconn):
+ * postgresql/postgresql.h (struct Lisp_PGresult):
+ MC-Alloc refactoring.
+
+2005-10-25 Ben Wing <ben(a)xemacs.org>
+
+ * ldap/eldap.c (allocate_ldap):
+ * ldap/eldap.h (struct Lisp_LDAP):
+ MC-Alloc refactoring.
+
+2005-10-21 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ UNDO:
+ * canna/canna-api.c:
+ * canna/Makefile.in.in (MODNAME,SRCS):
+ Rename module from canna_api to canna-api.
+
+2005-10-21 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * canna/configure: Create and CVS add.
+
+2005-10-04 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * canna/Makefile.in.in (MODVER): Bump to 0.5.
+
+ * canna/canna-api.c:
+ * canna/Makefile.in.in (MODNAME,SRCS):
+ Rename module from canna_api to canna-api.
+
+2005-09-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * canna: New module.
+
+ * canna/canna_api.c: Move from $srcdir/src/mule-canna.c. Add module
+ initialization function and some boilerplate. Change name to
+ canna_api to reflect changed role.
+
+ * canna/configure.ac:
+ * canna/Makefile.in.in:
+ * canna/install-sh:
+ Standard module boilerplate, adapted to Canna.
+
2005-09-14 Stephen J. Turnbull <stephen(a)xemacs.org>
* XEmacs 21.5.22 "cucumber" is released.
1.1.2.2 +1 -1 XEmacs/xemacs/modules/canna/Makefile.in.in
Index: Makefile.in.in
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/modules/canna/Makefile.in.in,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.1 -r1.1.2.2
--- Makefile.in.in 2005/09/24 14:02:25 1.1.2.1
+++ Makefile.in.in 2005/11/06 16:14:23 1.1.2.2
@@ -27,7 +27,7 @@
### Specialize this part for your module
MODNAME=canna_api
-MODVER=0.0.1
+MODVER=0.5.0
MODTITLE="Module wrapping Canna libraries for XEmacs"
CFLAGS=@CFLAGS@
LDFLAGS=@LDFLAGS@ @ld_switch_all@ @canna_libs@
1.1.2.2 +1 -1 XEmacs/xemacs/modules/canna/configure.ac
Index: configure.ac
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/modules/canna/configure.ac,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.1 -r1.1.2.2
--- configure.ac 2005/09/24 14:02:25 1.1.2.1
+++ configure.ac 2005/11/06 16:14:23 1.1.2.2
@@ -2,7 +2,7 @@
# This is only used for independent module building.
AC_INIT([Sample module], [1.0], [xemacs-beta(a)xemacs.org])
AC_PREREQ(2.53)
-AC_REVISION($Revision: 1.1.2.1 $)
+AC_REVISION($Revision: 1.1.2.2 $)
AC_COPYRIGHT([Configuration script for the sample module.
Copyright (C) 2002 Jerry James.
1.12.2.2 +2 -7 XEmacs/xemacs/modules/ldap/eldap.c
Index: eldap.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/modules/ldap/eldap.c,v
retrieving revision 1.12.2.1
retrieving revision 1.12.2.2
diff -u -p -r1.12.2.1 -r1.12.2.2
--- eldap.c 2005/07/13 04:46:01 1.12.2.1
+++ eldap.c 2005/11/06 16:14:24 1.12.2.2
@@ -141,11 +141,7 @@ print_ldap (Lisp_Object obj, Lisp_Object
static Lisp_LDAP *
allocate_ldap (void)
{
-#ifdef MC_ALLOC
- Lisp_LDAP *ldap = alloc_lrecord_type (Lisp_LDAP, &lrecord_ldap);
-#else /* not MC_ALLOC */
- Lisp_LDAP *ldap = alloc_lcrecord_type (Lisp_LDAP, &lrecord_ldap);
-#endif /* not MC_ALLOC */
+ Lisp_LDAP *ldap = ALLOC_LCRECORD_TYPE (Lisp_LDAP, &lrecord_ldap);
ldap->ld = NULL;
ldap->host = Qnil;
@@ -623,7 +619,6 @@ containing attribute/value string pairs.
int i, j;
Elemcount len;
- Lisp_Object current = Qnil;
Lisp_Object values = Qnil;
struct gcpro gcpro1;
@@ -724,7 +719,7 @@ or `replace'. ATTR is the LDAP attribute
Elemcount len;
Lisp_Object values = Qnil;
- struct gcpro gcpro1, gcpro2;
+ struct gcpro gcpro1;
/* Do all the parameter checking */
CHECK_LIVE_LDAP (ldap);
1.2.6.2 +1 -7 XEmacs/xemacs/modules/ldap/eldap.h
Index: eldap.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/modules/ldap/eldap.h,v
retrieving revision 1.2.6.1
retrieving revision 1.2.6.2
diff -u -p -r1.2.6.1 -r1.2.6.2
--- eldap.h 2005/07/13 04:46:01 1.2.6.1
+++ eldap.h 2005/11/06 16:14:24 1.2.6.2
@@ -31,13 +31,7 @@ Boston, MA 02111-1307, USA. */
struct Lisp_LDAP
{
-#ifdef MC_ALLOC
- /* lrecord header */
- struct lrecord_header header;
-#else /* not MC_ALLOC */
- /* lcrecord header */
- struct lcrecord_header header;
-#endif /* not MC_ALLOC */
+ struct LCRECORD_HEADER header;
/* The LDAP connection handle used by the LDAP API */
LDAP *ld;
/* Name of the host we connected to */
1.6.2.2 +4 -24 XEmacs/xemacs/modules/postgresql/postgresql.c
Index: postgresql.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/modules/postgresql/postgresql.c,v
retrieving revision 1.6.2.1
retrieving revision 1.6.2.2
diff -u -p -r1.6.2.1 -r1.6.2.2
--- postgresql.c 2005/07/13 04:46:02 1.6.2.1
+++ postgresql.c 2005/11/06 16:14:25 1.6.2.2
@@ -238,21 +238,11 @@ static Lisp_PGconn *
allocate_pgconn (void)
{
#ifdef RUNNING_XEMACS_21_1
-#ifdef MC_ALLOC
- Lisp_PGconn *pgconn = alloc_lrecord_type (Lisp_PGconn,
- lrecord_pgconn);
-#else /* not MC_ALLOC */
- Lisp_PGconn *pgconn = alloc_lcrecord_type (Lisp_PGconn,
+ Lisp_PGconn *pgconn = ALLOC_LCRECORD_TYPE (Lisp_PGconn,
lrecord_pgconn);
-#endif /* not MC_ALLOC */
#else
-#ifdef MC_ALLOC
- Lisp_PGconn *pgconn = alloc_lrecord_type (Lisp_PGconn,
- &lrecord_pgconn);
-#else /* not MC_ALLOC */
- Lisp_PGconn *pgconn = alloc_lcrecord_type (Lisp_PGconn,
+ Lisp_PGconn *pgconn = ALLOC_LCRECORD_TYPE (Lisp_PGconn,
&lrecord_pgconn);
-#endif /* not MC_ALLOC */
#endif
pgconn->pgconn = (PGconn *)NULL;
return pgconn;
@@ -373,21 +363,11 @@ static Lisp_PGresult *
allocate_pgresult (void)
{
#ifdef RUNNING_XEMACS_21_1
-#ifdef MC_ALLOC
- Lisp_PGresult *pgresult = alloc_lrecord_type (Lisp_PGresult,
- lrecord_pgresult);
-#else /* not MC_ALLOC */
- Lisp_PGresult *pgresult = alloc_lcrecord_type (Lisp_PGresult,
+ Lisp_PGresult *pgresult = ALLOC_LCRECORD_TYPE (Lisp_PGresult,
lrecord_pgresult);
-#endif /* not MC_ALLOC */
#else
-#ifdef MC_ALLOC
- Lisp_PGresult *pgresult = alloc_lrecord_type (Lisp_PGresult,
- &lrecord_pgresult);
-#else /* not MC_ALLOC */
- Lisp_PGresult *pgresult = alloc_lcrecord_type (Lisp_PGresult,
+ Lisp_PGresult *pgresult = ALLOC_LCRECORD_TYPE (Lisp_PGresult,
&lrecord_pgresult);
-#endif /* not MC_ALLOC */
#endif
pgresult->pgresult = (PGresult *)NULL;
return pgresult;
1.1.6.2 +2 -10 XEmacs/xemacs/modules/postgresql/postgresql.h
Index: postgresql.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/modules/postgresql/postgresql.h,v
retrieving revision 1.1.6.1
retrieving revision 1.1.6.2
diff -u -p -r1.1.6.1 -r1.1.6.2
--- postgresql.h 2005/07/13 04:46:03 1.1.6.1
+++ postgresql.h 2005/11/06 16:14:25 1.1.6.2
@@ -28,11 +28,7 @@ xemacs-patches.
*/
struct Lisp_PGconn
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* not MC_ALLOC */
- struct lcrecord_header header;
-#endif /* not MC_ALLOC */
+ struct LCRECORD_HEADER header;
PGconn *pgconn;
};
typedef struct Lisp_PGconn Lisp_PGconn;
@@ -52,11 +48,7 @@ DECLARE_LRECORD (pgconn, Lisp_PGconn);
*/
struct Lisp_PGresult
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* not MC_ALLOC */
- struct lcrecord_header header;
-#endif /* not MC_ALLOC */
+ struct LCRECORD_HEADER header;
PGresult *pgresult;
};
typedef struct Lisp_PGresult Lisp_PGresult;
1.31.2.4 +6 -2 XEmacs/xemacs/netinstall/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/netinstall/ChangeLog,v
retrieving revision 1.31.2.3
retrieving revision 1.31.2.4
diff -u -p -r1.31.2.3 -r1.31.2.4
--- ChangeLog 2005/09/20 16:05:52 1.31.2.3
+++ ChangeLog 2005/11/06 16:14:27 1.31.2.4
@@ -1,6 +1,10 @@
-2005-06-16 Stephen J. Turnbull <stephen(a)xemacs.org>
+2005-11-06 Stephen J. Turnbull <stephen(a)xemacs.org>
- * ChangeLog: Nuke the CVS revision keywords.
+ * ChangeLog: Nuke useless CVS keyword.
+
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
2005-09-14 Stephen J. Turnbull <stephen(a)xemacs.org>
1.175.2.5 +4 -0 XEmacs/xemacs/nt/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/nt/ChangeLog,v
retrieving revision 1.175.2.4
retrieving revision 1.175.2.5
diff -u -p -r1.175.2.4 -r1.175.2.5
--- ChangeLog 2005/09/27 16:29:12 1.175.2.4
+++ ChangeLog 2005/11/06 16:14:28 1.175.2.5
@@ -1,3 +1,7 @@
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
+
2005-09-26 Ben Wing <ben(a)xemacs.org>
* README:
1.20.2.5 +4 -0 XEmacs/xemacs/nt/installer/Wise/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/nt/installer/Wise/ChangeLog,v
retrieving revision 1.20.2.4
retrieving revision 1.20.2.5
diff -u -p -r1.20.2.4 -r1.20.2.5
--- ChangeLog 2005/09/20 16:05:55 1.20.2.4
+++ ChangeLog 2005/11/06 16:14:29 1.20.2.5
@@ -1,3 +1,7 @@
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
+
2005-09-14 Stephen J. Turnbull <stephen(a)xemacs.org>
* XEmacs 21.5.22 "cucumber" is released.
1.758.2.32 +553 -0 XEmacs/xemacs/src/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ChangeLog,v
retrieving revision 1.758.2.31
retrieving revision 1.758.2.32
diff -u -p -r1.758.2.31 -r1.758.2.32
--- ChangeLog 2005/09/27 16:29:18 1.758.2.31
+++ ChangeLog 2005/11/06 16:14:30 1.758.2.32
@@ -1,3 +1,556 @@
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
+
+2005-10-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * lrecord.h: Explain the EXTERNAL_LRECORD macros better.
+
+2005-10-25 Ben Wing <ben(a)xemacs.org>
+
+ * config.h.in (EXTERN_C):
+ Don't define new and catch under C++ any more.
+ (Places using new were just fixed by the last patch, places using
+ catch were fixed a couple of weeks ago.)
+
+2005-10-25 Ben Wing <ben(a)xemacs.org>
+
+ * EmacsFrame.c (EmacsFrameInitialize):
+ * EmacsFrame.c (EmacsFrameSetValues):
+ * ExternalClient.c:
+ * ExternalClient.c (externalClientInitialize):
+ * ExternalShell.c:
+ * ExternalShell.c (ExternalShellInitialize):
+ * chartab.c (copy_char_table_entry):
+ * chartab.c (Fcopy_char_table):
+ * cmdloop.c:
+ * cmdloop.c (initial_command_loop):
+ * compiler.h:
+ * console.c (Fvalid_console_type_p):
+ * database.c:
+ * device-msw.c:
+ * device-x.c:
+ * device.c (Fvalid_device_class_p):
+ * device.c (Fdevice_class):
+ * device.c (Fset_device_class):
+ * device.c (Fdomain_device_type):
+ * doc.c (Fsubstitute_command_keys):
+ * dragdrop.c:
+ * eval.c:
+ * eval.c (throw_or_bomb_out):
+ * eval.c (Fsignal):
+ * event-msw.c:
+ * event-msw.c (vars_of_event_mswindows):
+ * event-stream.c (execute_internal_event):
+ * event-stream.c (push_this_command_keys):
+ * events.c:
+ * extents.c (Fset_extent_parent):
+ * extents.c (get_char_property):
+ * extents.c (put_text_prop_mapper):
+ * file-coding.c:
+ * file-coding.c (Fvalid_coding_system_type_p):
+ * file-coding.c (Fdetect_coding_region):
+ * fns.c (Freplace_list):
+ * frame-tty.c (tty_lower_frame):
+ * frame.c:
+ * frame.c (Fframe_visible_p):
+ * gpmevent.c (Fgpm_enable):
+ * gutter.c (Fset_default_gutter_position):
+ * gutter.c (gutter_size_validate):
+ * gutter.c (specifier_vars_of_gutter):
+ * hash.c (KEYS_DIFFER_P):
+ * imgproc.c (splitbox):
+ * indent.c:
+ * keymap.c:
+ * keymap.c (copy_keymap_mapper):
+ * keymap.c (define_key_check_and_coerce_keysym):
+ * keymap.c (event_matches_key_specifier_p):
+ * keymap.c (process_event_binding_result):
+ * keymap.c (where_is_recursive_mapper):
+ * lisp-union.h:
+ * lisp-union.h (union Lisp_Object):
+ * macros.c (store_kbd_macro_event):
+ * malloc.c (realloc):
+ * marker.c (copy_marker_1):
+ * menubar-x.c (menu_move_down):
+ * menubar.c:
+ * menubar.c (vars_of_menubar):
+ * mule-charset.c:
+ * mule-charset.c (Fmake_charset):
+ * mule-charset.c (Fcharset_property):
+ * mule-charset.c (Fset_charset_ccl_program):
+ * mule-charset.c (Fset_charset_registry):
+ * number.c:
+ * process.c:
+ * profile.h:
+ * ralloc.c (obtain):
+ * redisplay.c:
+ * redisplay.c (get_display_block_from_line):
+ * redisplay.c (redisplay_frame):
+ * redisplay.c (vars_of_redisplay):
+ * redisplay.c (specifier_vars_of_redisplay):
+ * select-common.h:
+ * select.c:
+ * select.c (vars_of_select):
+ * syntax.c:
+ * syntax.c (scan_sexps_forward):
+ * sysfile.h:
+ * sysproc.h:
+ * systime.h:
+ * syswindows.h:
+ * toolbar.c (Fset_default_toolbar_position):
+ * toolbar.c (Fcheck_toolbar_button_syntax):
+ * toolbar.c (specifier_vars_of_toolbar):
+ * tooltalk.c:
+ * tooltalk.c (Freturn_tooltalk_message):
+ * tooltalk.c (Fadd_tooltalk_message_arg):
+ * tooltalk.c (Fadd_tooltalk_pattern_attribute):
+ * tparam.c (tparam1):
+ * unexaix.c (PERROR):
+ * unexaix.c (ERROR0):
+ * unexaix.c (unexec):
+ * unexaix.c (make_hdr):
+ * unexaix.c (copy_text_and_data):
+ * unexaix.c (write_segment):
+ * unexaix.c (copy_sym):
+ * unexaix.c (mark_x):
+ * unexaix.c (adjust_lnnoptrs):
+ * unexaix.c (unrelocate_symbols):
+ * unexalpha.c (unexec):
+ * unexalpha.c (update_dynamic_symbols):
+ * unexconvex.c (PERROR):
+ * unexconvex.c (ERROR0):
+ * unexconvex.c (entry_address;):
+ * unexconvex.c (make_hdr):
+ * unexconvex.c (new_;):
+ * unexconvex.c (sptr;):
+ * unexconvex.c (copy_sym):
+ * unexconvex.c (name;):
+ * unexec.c:
+ * unexec.c (PERROR):
+ * unexec.c (ERROR0):
+ * unexec.c (unexec):
+ * unexec.c (make_hdr):
+ * unexec.c (write_segment):
+ * unexec.c (copy_sym):
+ * unexec.c (mark_x):
+ * unexec.c (adjust_lnnoptrs):
+ * unexhp9k800.c:
+ * unexhp9k800.c (unexec):
+ * unexhp9k800.c (copy_file):
+ * unexhp9k800.c (copy_rest):
+ * unexmips.c (unexec):
+ * unicode.c:
+ * unicode.c (Fchar_to_unicode):
+ * window.c (make_dummy_parent):
+ * window.c (Fsplit_window):
+ * window.c (Fenlarge_window):
+ new -> new_.
+ 'foo -> `foo'.
+
+2005-10-25 Ben Wing <ben(a)xemacs.org>
+
+ * alloc.c:
+ * alloc.c (old_basic_alloc_lcrecord):
+ * alloc.c (very_old_free_lcrecord):
+ * alloc.c (disksave_object_finalization_1):
+ * alloc.c (copy_lisp_object):
+ * alloc.c (make_lcrecord_list):
+ * alloc.c (alloc_managed_lcrecord):
+ * alloc.c (old_free_lcrecord):
+ * alloc.c (GC_CHECK_NOT_FREE):
+ * alloc.c (tick_lcrecord_stats):
+ * alloc.c (sweep_lcrecords_1):
+ * buffer.c (compute_buffer_usage):
+ * buffer.c (DEFVAR_BUFFER_LOCAL_1):
+ * console.c (DEFVAR_CONSOLE_LOCAL_1):
+ * emacs.c:
+ * emacs.c (main_1):
+ * file-coding.c (allocate_coding_system):
+ * lrecord.h:
+ * lrecord.h (struct old_lcrecord_header):
+ * lrecord.h (struct free_lcrecord_header):
+ * lrecord.h (struct lrecord_implementation):
+ * lrecord.h (struct lcrecord_list):
+ * lrecord.h (old_alloc_lcrecord_type):
+ * lrecord.h (old_copy_sized_lcrecord):
+ * lrecord.h (old_zero_lcrecord):
+ * lstream.c (Lstream_new):
+ * mule-charset.c (compute_charset_usage):
+ * print.c (debug_p4):
+ * scrollbar-gtk.c (gtk_compute_scrollbar_instance_usage):
+ * scrollbar-msw.c (mswindows_compute_scrollbar_instance_usage):
+ * scrollbar-x.c (x_compute_scrollbar_instance_usage):
+ * scrollbar.c (compute_scrollbar_instance_usage):
+ * symbols.c (guts_of_unbound_marker):
+ * symeval.h (DEFVAR_SYMVAL_FWD):
+ * unicode.c (compute_from_unicode_table_size_1):
+ * unicode.c (compute_to_unicode_table_size_1):
+ * window.c (compute_window_mirror_usage):
+ * window.c (compute_window_usage):
+ * xemacs.def.in.in:
+ rename `struct lcrecord_header' to `struct old_lcrecord_header';
+ likewise for `old_basic_alloc_lcrecord', `old_free_lcrecord',
+ `old_zero_lcrecord', `old_zero_sized_lcrecord', `old_copy_lcrecord',
+ `old_copy_sized_lcrecord', `old_alloc_lcrecord_type'. Created new
+ LISPOBJ_STORAGE_SIZE() used only on objects created through allocation
+ of Lisp-Object memory instead of basic xmalloc()/xfree(). This is
+ distinguished from malloced_storage_size(), for non-Lisp-Objects.
+ The definition of LISPOBJ_STORAGE_SIZE() can reduce down to
+ malloced_storage_size() when not MC-ALLOC, but with MC-ALLOC it's
+ a different function.
+
+ The whole point other than cleaning up the use of LISPOBJ_STORAGE_SIZE
+ is to make it harder to accidentally use the old kind (lowercase) of
+ function in new code, since you get a compile error.
+
+2005-10-25 Ben Wing <ben(a)xemacs.org>
+
+ * frame-msw.c (mswindows_window_id):
+ Fix warning.
+
+2005-10-24 Ben Wing <ben(a)xemacs.org>
+
+ * frame-msw.c:
+ * frame-msw.c (decode_mswindows_frame):
+ New function, like decode_x_frame.
+
+ * frame-msw.c (mswindows_window_id):
+ * frame-msw.c (mswindows_frame_property):
+ * frame-msw.c (mswindows_internal_frame_property_p):
+ * frame-msw.c (mswindows_frame_properties):
+ * frame-msw.c (vars_of_frame_mswindows):
+ Add `window-id' property for MS Windows frames.
+
+2005-10-24 Ben Wing <ben(a)xemacs.org>
+
+ * alloc.c:
+ * alloc.c (Lisp_Free):
+ * alloc.c (Fcons):
+ * alloc.c (noseeum_cons):
+ * alloc.c (make_float):
+ * alloc.c (make_bignum):
+ * alloc.c (make_bignum_bg):
+ * alloc.c (make_ratio):
+ * alloc.c (make_ratio_bg):
+ * alloc.c (make_ratio_rt):
+ * alloc.c (make_bigfloat):
+ * alloc.c (make_bigfloat_bf):
+ * alloc.c (make_vector_internal):
+ * alloc.c (make_bit_vector_internal):
+ * alloc.c (make_compiled_function):
+ * alloc.c (Fmake_symbol):
+ * alloc.c (allocate_extent):
+ * alloc.c (allocate_event):
+ * alloc.c (make_key_data):
+ * alloc.c (make_button_data):
+ * alloc.c (make_motion_data):
+ * alloc.c (make_process_data):
+ * alloc.c (make_timeout_data):
+ * alloc.c (make_magic_data):
+ * alloc.c (make_magic_eval_data):
+ * alloc.c (make_eval_data):
+ * alloc.c (make_misc_user_data):
+ * alloc.c (Fmake_marker):
+ * alloc.c (noseeum_make_marker):
+ * buffer.c (allocate_buffer):
+ * buffer.c (compute_buffer_usage):
+ * buffer.c (nuke_all_buffer_slots):
+ * buffer.c (common_init_complex_vars_of_buffer):
+ * buffer.h (struct buffer):
+ * casetab.c (allocate_case_table):
+ * casetab.h (struct Lisp_Case_Table):
+ * charset.h (struct Lisp_Charset):
+ * chartab.c (fill_char_table):
+ * chartab.c (Fmake_char_table):
+ * chartab.c (make_char_table_entry):
+ * chartab.c (copy_char_table_entry):
+ * chartab.c (Fcopy_char_table):
+ * chartab.c (put_char_table):
+ * chartab.h (struct Lisp_Char_Table_Entry):
+ * chartab.h (struct Lisp_Char_Table):
+ * console-impl.h (struct console):
+ * console-msw-impl.h (struct Lisp_Devmode):
+ * console-msw-impl.h (struct mswindows_dialog_id):
+ * console.c (allocate_console):
+ * console.c (nuke_all_console_slots):
+ * console.c (common_init_complex_vars_of_console):
+ * data.c (make_weak_list):
+ * data.c (make_weak_box):
+ * data.c (make_ephemeron):
+ * database.c (struct Lisp_Database):
+ * database.c (allocate_database):
+ * device-impl.h (struct device):
+ * device-msw.c (allocate_devmode):
+ * device.c (nuke_all_device_slots):
+ * device.c (allocate_device):
+ * dialog-msw.c (handle_question_dialog_box):
+ * elhash.c (struct Lisp_Hash_Table):
+ * elhash.c (make_general_lisp_hash_table):
+ * elhash.c (Fcopy_hash_table):
+ * events.h (struct Lisp_Timeout):
+ * events.h (struct command_builder):
+ * extents-impl.h (struct extent_auxiliary):
+ * extents-impl.h (struct extent_info):
+ * extents.c (allocate_extent_auxiliary):
+ * extents.c (allocate_extent_info):
+ * extents.c (copy_extent):
+ * faces.c (allocate_face):
+ * faces.h (struct Lisp_Face):
+ * file-coding.c (Fcopy_coding_system):
+ * file-coding.h (struct Lisp_Coding_System):
+ * frame-impl.h (struct frame):
+ * frame.c (nuke_all_frame_slots):
+ * frame.c (allocate_frame_core):
+ * glyphs.c (allocate_image_instance):
+ * glyphs.c (Fcolorize_image_instance):
+ * glyphs.c (allocate_glyph):
+ * glyphs.h (struct Lisp_Image_Instance):
+ * glyphs.h (struct Lisp_Glyph):
+ * gui.c (allocate_gui_item):
+ * gui.h (struct Lisp_Gui_Item):
+ * keymap.c (struct Lisp_Keymap):
+ * keymap.c (make_keymap):
+ * lisp.h (struct Lisp_Vector):
+ * lisp.h (struct Lisp_Bit_Vector):
+ * lisp.h (struct weak_box):
+ * lisp.h (struct ephemeron):
+ * lisp.h (struct weak_list):
+ * lrecord.h:
+ * lrecord.h (struct toolbar_button):
+ * lstream.c (COPY_SIZED_LCRECORD):
+ * lstream.h (struct lstream):
+ * mule-charset.c (make_charset):
+ * mule-charset.c (compute_charset_usage):
+ * objects-impl.h (struct Lisp_Color_Instance):
+ * objects-impl.h (struct Lisp_Font_Instance):
+ * objects.c (Fmake_color_instance):
+ * objects.c (Fmake_font_instance):
+ * objects.c (reinit_vars_of_objects):
+ * opaque.c (make_opaque):
+ * opaque.h (Lisp_Opaque):
+ * opaque.h (Lisp_Opaque_Ptr):
+ * print.c (default_object_printer):
+ * process.c (make_process_internal):
+ * procimpl.h (struct Lisp_Process):
+ * rangetab.c (Fmake_range_table):
+ * rangetab.c (Fcopy_range_table):
+ * rangetab.h (struct Lisp_Range_Table):
+ * scrollbar-gtk.c (gtk_compute_scrollbar_instance_usage):
+ * scrollbar-msw.c (mswindows_compute_scrollbar_instance_usage):
+ * scrollbar-x.c (x_compute_scrollbar_instance_usage):
+ * scrollbar.c (create_scrollbar_instance):
+ * scrollbar.c (compute_scrollbar_instance_usage):
+ * scrollbar.h (struct scrollbar_instance):
+ * specifier.c (make_specifier_internal):
+ * specifier.h (struct Lisp_Specifier):
+ * symbols.c (Fdefvaralias):
+ * symeval.h (SYMBOL_VALUE_MAGIC_P):
+ * toolbar.c (update_toolbar_button):
+ * toolbar.h (struct toolbar_button):
+ * tooltalk.c (struct Lisp_Tooltalk_Message):
+ * tooltalk.c (make_tooltalk_message):
+ * tooltalk.c (struct Lisp_Tooltalk_Pattern):
+ * tooltalk.c (make_tooltalk_pattern):
+ * ui-gtk.c (allocate_ffi_data):
+ * ui-gtk.c (allocate_emacs_gtk_object_data):
+ * ui-gtk.c (allocate_emacs_gtk_boxed_data):
+ * ui-gtk.h:
+ * unicode.c (compute_from_unicode_table_size_1):
+ * unicode.c (compute_to_unicode_table_size_1):
+ * window-impl.h (struct window):
+ * window-impl.h (struct window_mirror):
+ * window.c (allocate_window):
+ * window.c (new_window_mirror):
+ * window.c (make_dummy_parent):
+ * window.c (compute_window_mirror_usage):
+ * window.c (compute_window_usage):
+ Eliminate the majority of #ifdef MC_ALLOC occurrences through
+ macros LCRECORD_HEADER, ALLOC_LCRECORD_TYPE, MALLOCED_STORAGE_SIZE,
+ etc. (defined in lrecord.h).
+
+2005-10-21 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * Makefile.in.in (mule_canna_objs): Revert canna-api to canna_api.
+
+2005-10-13 Ben Wing <ben(a)xemacs.org>
+
+ * config.h.in:
+ * alloc.c:
+ * alloc.c (struct):
+ * alloc.c (alloc_lrecord):
+ * alloc.c (noseeum_alloc_lrecord):
+ * alloc.c (finalize_string):
+ * alloc.c (make_uninit_string):
+ * alloc.c (make_string_nocopy):
+ * alloc.c (garbage_collect_1):
+ * alloc.c (object_memory_usage_stats):
+ * alloc.c (HACK_O_MATIC):
+ * alloc.c (Fgarbage_collect):
+ * alloc.c (Ftotal_memory_usage):
+ * alloc.c (recompute_need_to_garbage_collect):
+ * alloc.c (common_init_alloc_early):
+ * alloc.c (syms_of_alloc):
+ * alloc.c (vars_of_alloc):
+ * dumper.c (pdump_load_finish):
+ * emacs.c:
+ * emacs.c (main_1):
+ * emacs.c (shut_down_emacs):
+ * lrecord.h:
+ * lrecord.h (MC_ALLOC_CALL_FINALIZER):
+ * mc-alloc.c (remove_cell):
+ * mc-alloc.h:
+ * symbols.c (init_symbols_once_early):
+ Rename MC_ALLOC_TYPE_STATS to ALLOC_TYPE_STATS, since
+ (with refactoring) this is not really specific to mc-alloc.
+ Generalize code to implement the GC % threshold for garbage
+ collecting. Rename `lrecord-stats' to `object-memory-usage-stats'
+ (defined when not mc-alloc, too). Rename `memory-usage' to
+ `total-memory-usage' and add `object-memory-usage'. Bump
+ gc_cons_threshold to 2,000,000 (suggestion by Stephen Turnbull).
+
+ Avoid use of C++ reserved word `catch'.
+
+ Change address for crash reporting to xemacs-beta(a)xemacs.org from
+ crashes(a)xemacs.org.
+
+ new -> new_ in emacs.c.
+
+ Turn on _CRT_SECURE_NO_DEPRECATE under Visual C++ to avoid tons of
+ warnings in VC8.
+
+2005-10-10 Andrey Slusar <anrays(a)gmail.com>
+
+ * unexelf.c: define `Elfw(type)' for FreeBSD alpha and all _LP64
+ archs.
+ From Dejan Lesjak <dejan.lesjak(a)ijs.si>
+
+2005-10-04 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * Makefile.in.in (mule_canna_objs): Use correct name of .o.
+
+2005-09-22 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * Makefile.in.in (HAVE_CANNA): Handle Canna as a module.
+
+ * emacs.c (main_1): Update Canna initializers to *_canna_api names.
+
+ * mule-canna.c: Moved to modules/canna/canna_api.c.
+
+ * symsinit.h (syms_of_mule_canna):
+ (vars_of_mule_canna):
+ Rename to *_of_canna_api.
+
+2005-09-29 Ben Wing <ben(a)xemacs.org>
+
+ * alloca.c (xemacs_c_alloca):
+ Don't declare a variable `register' when it can be passed to
+ xfree(), which may take its address.
+
+ new -> new_.
+
+2005-09-26 Marcus Crestani <crestani(a)xemacs.org>
+
+ * symbols.c (check_module_subr): Fix new allocator's module
+ support: remove duplicating the subr.
+
+2005-09-27 Ben Wing <ben(a)xemacs.org>
+
+ * glyphs.c:
+ * glyphs.c (find_instantiator_differences):
+ * glyphs.c (Fvalid_image_instance_type_p):
+ * glyphs.c (Fimage_instance_type):
+ * glyphs.c (Fcolorize_image_instance):
+ * glyphs.c (Fglyph_type):
+ * glyphs.c (glyph_image_instance):
+ * glyphs.c (image_instantiator_format_create):
+ * glyphs-eimage.c:
+ * glyphs-eimage.c (jpeg_instantiate):
+ * glyphs-eimage.c (gif_instantiate):
+ * glyphs-eimage.c (png_instantiate):
+ * glyphs-eimage.c (tiff_instantiate):
+ * glyphs-x.c:
+ * glyphs-x.c (image_instance_convert_to_pointer):
+ * glyphs-x.c (init_image_instance_from_x_image):
+ * glyphs-x.c (x_init_image_instance_from_eimage):
+ * glyphs-x.c (x_xpm_instantiate):
+ * glyphs-x.c (x_colorize_image_instance):
+ * glyphs-gtk.c:
+ * glyphs-gtk.c (image_instance_convert_to_pointer):
+ * glyphs-gtk.c (init_image_instance_from_gdk_image):
+ * glyphs-gtk.c (gtk_init_image_instance_from_eimage):
+ * glyphs-gtk.c (gtk_xpm_instantiate):
+ * glyphs-msw.c:
+ * glyphs-msw.c (mswindows_init_image_instance_from_eimage):
+ * console-impl.h:
+ * console-impl.h (struct console_methods):
+ Allow all kinds of color images (GIF, JPEG, ...) to be mouse pointers.
+ new -> new_, 'foo -> `foo'.
+
+2005-09-27 Ben Wing <ben(a)xemacs.org>
+
+ * Makefile.in.in (cppflags):
+ Always include SRC, so <config.h> in lib-src always works.
+
+2005-09-27 Ben Wing <ben(a)xemacs.org>
+
+ * sysdep.c (emacs_set_tty):
+ * sysdep.c (qxe_link):
+ * sysdep.c (qxe_rename):
+ * sysdep.c (dup2):
+ Fix bit-rotted dup2 code. Also new -> new_.
+ * nt.c:
+ * nt.c (mswindows_closedir):
+ * nt.c (mswindows_link):
+ Fix possible use of uninitialized var. Also new -> new_.
+
+2005-09-27 Ben Wing <ben(a)xemacs.org>
+
+ * text.c (wcscmp_ascii):
+ * text.c (COPY_TEXT_BETWEEN_FORMATS):
+ * event-Xt.c (x_event_to_emacs_event):
+ * event-Xt.c (ShellVisualPatch):
+ * lisp.h:
+ * lisp.h (assert_with_message):
+ * number-gmp.c (bigfloat_to_string):
+ * number-gmp.h:
+ Fix compilation warnings. A couple of changes of new -> new_,
+ 'foo -> `foo'.
+
+2005-09-26 Ben Wing <ben(a)xemacs.org>
+
+ * specifier.c:
+ * specifier.c (Fvalid_specifier_type_p):
+ * specifier.c (Fvalid_specifier_locale_p):
+ * specifier.c (Fvalid_specifier_domain_p):
+ * specifier.c (Fvalid_specifier_locale_type_p):
+ * specifier.c (Fdefine_specifier_tag):
+ * specifier.c (specifier_get_external_inst_list):
+ * specifier.c (Fspecifier_specs):
+ * specifier.c (Fspecifier_fallback):
+ * specifier.c (specifier_instance_from_inst_list):
+ * specifier.c (CHECK_INSTANCE_ENTRY):
+ * specifier.c (specifier_instance_1):
+ * specifier.c (specifier_instance):
+ * specifier.c (specifier_matching_foo):
+ * specifier.c (Fspecifier_instance):
+ * specifier.c (Fspecifier_instantiator):
+ * specifier.c (Fspecifier_matching_instance):
+ * specifier.c (specifier_matching_foo_from_inst_list):
+ * specifier.c (syms_of_specifier):
+ Add `specifier-instantiator' and related primitives.
+
+2005-09-26 Ben Wing <ben(a)xemacs.org>
+
+ * rangetab.c:
+ * rangetab.c (Fmap_range_table):
+ Fix bug in handling of range endpoints when not start-closed, end-open.
+
+2005-09-17 Olivier Galibert <galibert(a)xemacs.org>
+
+ * intl.c (Fset_current_locale): setlocale return string is valid
+ only until the next setlocale call.
+
2005-09-12 Mike Alexander <mta(a)arbortext.com>
* intl-win32.c (mswindows_current_locale): Define in non-MULE
1.1.2.9 +6 -12 XEmacs/xemacs/src/Attic/ChangeLog.Xft
Index: ChangeLog.Xft
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/Attic/ChangeLog.Xft,v
retrieving revision 1.1.2.8
retrieving revision 1.1.2.9
diff -u -p -r1.1.2.8 -r1.1.2.9
--- ChangeLog.Xft 2005/09/27 16:29:28 1.1.2.8
+++ ChangeLog.Xft 2005/11/06 16:14:34 1.1.2.9
@@ -1,3 +1,9 @@
+2005-11-06 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * xft-fonts.h:
+ * xft-fonts.c:
+ Substitute new *LCRECORD* macros for #ifdef MC_ALLOC.
+
2005-09-10 Clemens Fruhwirth <clemens(a)endorphin.org>
* glyphs-x.c (update_widget_face): Wrap error checking of rf in an
@@ -11,18 +17,6 @@
2005-09-25 Stephen J. Turnbull <stephen(a)xemacs.org>
* objects-x.c (x_finalize_font_instance): Add newline to message.
-
-2005-09-22 Stephen J. Turnbull <stephen(a)xemacs.org>
-
- * Makefile.in.in (HAVE_CANNA): Handle Canna as a module.
-
- * emacs.c (main_1): Update Canna initializers to *_canna_api names.
-
- * mule-canna.c: Moved to modules/canna/canna_api.c.
-
- * symsinit.h (syms_of_mule_canna):
- (vars_of_mule_canna):
- Rename to *_of_canna_api.
2005-09-24 Stephen J. Turnbull <stephen(a)xemacs.org>
1.26.2.2 +32 -32 XEmacs/xemacs/src/EmacsFrame.c
Index: EmacsFrame.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/EmacsFrame.c,v
retrieving revision 1.26.2.1
retrieving revision 1.26.2.2
diff -u -p -r1.26.2.1 -r1.26.2.2
--- EmacsFrame.c 2005/03/15 05:23:47 1.26.2.1
+++ EmacsFrame.c 2005/11/06 16:14:34 1.26.2.2
@@ -266,10 +266,10 @@ update_various_frame_slots (EmacsFrame e
}
static void
-EmacsFrameInitialize (Widget UNUSED (request), Widget new,
+EmacsFrameInitialize (Widget UNUSED (request), Widget new_,
ArgList UNUSED (unused1), Cardinal *UNUSED (unused2))
{
- EmacsFrame ew = (EmacsFrame)new;
+ EmacsFrame ew = (EmacsFrame)new_;
struct frame *f = ew->emacs_frame.frame;
if (!f)
@@ -380,8 +380,8 @@ EmacsFrameSetValues (Widget cur_widget,
Widget new_widget, ArgList argv, Cardinal *argc)
{
EmacsFrame cur = (EmacsFrame) cur_widget;
- EmacsFrame new = (EmacsFrame) new_widget;
- struct frame *f = new->emacs_frame.frame;
+ EmacsFrame new_ = (EmacsFrame) new_widget;
+ struct frame *f = new_->emacs_frame.frame;
in_resource_setting++;
/* This function does not need to do much. Pretty much everything
interesting will get done in the resize method, which will
@@ -396,10 +396,10 @@ EmacsFrameSetValues (Widget cur_widget,
called or XtSetValues() is called.
*/
- if (cur->emacs_frame.iconic != new->emacs_frame.iconic &&
- FRAME_X_TOP_LEVEL_FRAME_P (new->emacs_frame.frame))
- x_wm_set_shell_iconic_p (FRAME_X_SHELL_WIDGET (new->emacs_frame.frame),
- new->emacs_frame.iconic);
+ if (cur->emacs_frame.iconic != new_->emacs_frame.iconic &&
+ FRAME_X_TOP_LEVEL_FRAME_P (new_->emacs_frame.frame))
+ x_wm_set_shell_iconic_p (FRAME_X_SHELL_WIDGET (new_->emacs_frame.frame),
+ new_->emacs_frame.iconic);
/* If we got here, then we were likely called as a result of
the EditRes protocol, so go ahead and change scrollbar-width
@@ -407,74 +407,74 @@ EmacsFrameSetValues (Widget cur_widget,
a change made to scrollbar-width etc. so don't do anything
special. */
if (cur->emacs_frame.internal_border_width !=
- new->emacs_frame.internal_border_width)
+ new_->emacs_frame.internal_border_width)
{
- f->internal_border_width = new->emacs_frame.internal_border_width;
+ f->internal_border_width = new_->emacs_frame.internal_border_width;
MARK_FRAME_SIZE_SLIPPED (f);
}
#ifdef HAVE_SCROLLBARS
if (cur->emacs_frame.scrollbar_width !=
- new->emacs_frame.scrollbar_width)
+ new_->emacs_frame.scrollbar_width)
Fadd_spec_to_specifier
(Vscrollbar_width,
- make_int (new->emacs_frame.scrollbar_width),
+ make_int (new_->emacs_frame.scrollbar_width),
wrap_frame (f), Qnil, Qnil);
if (cur->emacs_frame.scrollbar_height !=
- new->emacs_frame.scrollbar_height)
+ new_->emacs_frame.scrollbar_height)
Fadd_spec_to_specifier
(Vscrollbar_height,
- make_int (new->emacs_frame.scrollbar_height),
+ make_int (new_->emacs_frame.scrollbar_height),
wrap_frame (f), Qnil, Qnil);
#endif /* HAVE_SCROLLBARS */
#ifdef HAVE_TOOLBARS
if (cur->emacs_frame.top_toolbar_height !=
- new->emacs_frame.top_toolbar_height)
+ new_->emacs_frame.top_toolbar_height)
Fadd_spec_to_specifier
(Vtoolbar_size[TOP_TOOLBAR],
- make_int (new->emacs_frame.top_toolbar_height),
+ make_int (new_->emacs_frame.top_toolbar_height),
wrap_frame (f), Qnil, Qnil);
if (cur->emacs_frame.bottom_toolbar_height !=
- new->emacs_frame.bottom_toolbar_height)
+ new_->emacs_frame.bottom_toolbar_height)
Fadd_spec_to_specifier
(Vtoolbar_size[BOTTOM_TOOLBAR],
- make_int (new->emacs_frame.bottom_toolbar_height),
+ make_int (new_->emacs_frame.bottom_toolbar_height),
wrap_frame (f), Qnil, Qnil);
if (cur->emacs_frame.left_toolbar_width !=
- new->emacs_frame.left_toolbar_width)
+ new_->emacs_frame.left_toolbar_width)
Fadd_spec_to_specifier
(Vtoolbar_size[LEFT_TOOLBAR],
- make_int (new->emacs_frame.left_toolbar_width),
+ make_int (new_->emacs_frame.left_toolbar_width),
wrap_frame (f), Qnil, Qnil);
if (cur->emacs_frame.right_toolbar_width !=
- new->emacs_frame.right_toolbar_width)
+ new_->emacs_frame.right_toolbar_width)
Fadd_spec_to_specifier
(Vtoolbar_size[RIGHT_TOOLBAR],
- make_int (new->emacs_frame.right_toolbar_width),
+ make_int (new_->emacs_frame.right_toolbar_width),
wrap_frame (f), Qnil, Qnil);
if (cur->emacs_frame.top_toolbar_border_width !=
- new->emacs_frame.top_toolbar_border_width)
+ new_->emacs_frame.top_toolbar_border_width)
Fadd_spec_to_specifier
(Vtoolbar_border_width[TOP_TOOLBAR],
- make_int (new->emacs_frame.top_toolbar_border_width),
+ make_int (new_->emacs_frame.top_toolbar_border_width),
wrap_frame (f), Qnil, Qnil);
if (cur->emacs_frame.bottom_toolbar_border_width !=
- new->emacs_frame.bottom_toolbar_border_width)
+ new_->emacs_frame.bottom_toolbar_border_width)
Fadd_spec_to_specifier
(Vtoolbar_border_width[BOTTOM_TOOLBAR],
- make_int (new->emacs_frame.bottom_toolbar_border_width),
+ make_int (new_->emacs_frame.bottom_toolbar_border_width),
wrap_frame (f), Qnil, Qnil);
if (cur->emacs_frame.left_toolbar_border_width !=
- new->emacs_frame.left_toolbar_border_width)
+ new_->emacs_frame.left_toolbar_border_width)
Fadd_spec_to_specifier
(Vtoolbar_border_width[LEFT_TOOLBAR],
- make_int (new->emacs_frame.left_toolbar_border_width),
+ make_int (new_->emacs_frame.left_toolbar_border_width),
wrap_frame (f), Qnil, Qnil);
if (cur->emacs_frame.right_toolbar_border_width !=
- new->emacs_frame.right_toolbar_border_width)
+ new_->emacs_frame.right_toolbar_border_width)
Fadd_spec_to_specifier
(Vtoolbar_border_width[RIGHT_TOOLBAR],
- make_int (new->emacs_frame.right_toolbar_border_width),
+ make_int (new_->emacs_frame.right_toolbar_border_width),
wrap_frame (f), Qnil, Qnil);
#endif /* HAVE_TOOLBARS */
@@ -485,8 +485,8 @@ EmacsFrameSetValues (Widget cur_widget,
request might be issued as a result of hiding/showing menubar or
changing toolbar placement, where we rely on relayout made by the
callback, we go ahead and simulate such a call */
- if (cur->core.width == new->core.width
- && cur->core.height == new->core.height)
+ if (cur->core.width == new_->core.width
+ && cur->core.height == new_->core.height)
{
int i;
for (i = 0; i < (int) *argc; i++)
1.7.2.1 +6 -6 XEmacs/xemacs/src/ExternalClient.c
Index: ExternalClient.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ExternalClient.c,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -p -r1.7 -r1.7.2.1
--- ExternalClient.c 2004/09/22 03:04:44 1.7
+++ ExternalClient.c 2005/11/06 16:14:35 1.7.2.1
@@ -57,7 +57,7 @@ ERROR! This ought not be getting compil
extw_send_notify_3(XtDisplay((Widget)(w)), XtWindow((Widget)(w)),\
type, l0, l1, l2)
-static void externalClientInitialize (Widget req, Widget new, ArgList args,
+static void externalClientInitialize (Widget req, Widget new_, ArgList args,
Cardinal *num_args);
static void externalClientRealize (Widget widget, XtValueMask *mask,
XSetWindowAttributes *attrs);
@@ -174,13 +174,13 @@ ExternalClientClassRec externalClientCla
WidgetClass externalClientWidgetClass = (WidgetClass) &externalClientClassRec;
static void
-externalClientInitialize (Widget UNUSED (req), Widget new,
+externalClientInitialize (Widget UNUSED (req), Widget new_,
ArgList UNUSED (args), Cardinal *UNUSED (num_args))
{
- ExternalClientWidget ecw = (ExternalClientWidget) new;
+ ExternalClientWidget ecw = (ExternalClientWidget) new_;
static int error_handler_added = 0;
- extw_initialize_atoms (XtDisplay (new));
+ extw_initialize_atoms (XtDisplay (new_));
extw_which_side = extw_client_send;
#ifdef EXTW_USES_MOTIF
@@ -194,7 +194,7 @@ externalClientInitialize (Widget UNUSED
*/
- XtOverrideTranslations (new,
+ XtOverrideTranslations (new_,
XtParseTranslationTable ("None<Key>Tab:\n"
"<FocusIn>:focusIn()\n"
"<FocusOut>:focusOut()\n"
@@ -203,7 +203,7 @@ externalClientInitialize (Widget UNUSED
#endif
- XtAddEventHandler (new, 0, TRUE, EventHandler, (XtPointer) NULL);
+ XtAddEventHandler (new_, 0, TRUE, EventHandler, (XtPointer) NULL);
ecw->externalClient.shell_ready = False;
ecw->externalClient.has_focus = False;
1.7.2.1 +3 -3 XEmacs/xemacs/src/ExternalShell.c
Index: ExternalShell.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ExternalShell.c,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -p -r1.7 -r1.7.2.1
--- ExternalShell.c 2004/09/22 03:04:44 1.7
+++ ExternalShell.c 2005/11/06 16:14:35 1.7.2.1
@@ -153,7 +153,7 @@ extern void emacs_Xt_handle_focus_event
extw_send_notify_3(XtDisplay((Widget)(w)),\
(w)->externalShell.external_window, type, l0, l1, l2)
-static void ExternalShellInitialize (Widget req, Widget new, ArgList args,
+static void ExternalShellInitialize (Widget req, Widget new_, ArgList args,
Cardinal *num_args);
static void ExternalShellRealize (Widget wid, Mask *vmask, XSetWindowAttributes
*attr);
@@ -252,10 +252,10 @@ ExternalShellClassRec externalShellClass
WidgetClass externalShellWidgetClass = (WidgetClass) &externalShellClassRec;
static void
-ExternalShellInitialize (Widget req, Widget new, ArgList UNUSED (args),
+ExternalShellInitialize (Widget req, Widget new_, ArgList UNUSED (args),
Cardinal *UNUSED (num_args))
{
- XtAddEventHandler(new, 0,
+ XtAddEventHandler(new_, 0,
TRUE, EventHandler, (XtPointer) NULL);
extw_initialize_atoms(XtDisplay(req));
extw_which_side = extw_shell_send;
1.112.2.7 +1 -1 XEmacs/xemacs/src/Makefile.in.in
Index: Makefile.in.in
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/Makefile.in.in,v
retrieving revision 1.112.2.6
retrieving revision 1.112.2.7
diff -u -p -r1.112.2.6 -r1.112.2.7
--- Makefile.in.in 2005/09/27 16:29:28 1.112.2.6
+++ Makefile.in.in 2005/11/06 16:14:35 1.112.2.7
@@ -200,7 +200,7 @@ mule_objs=mule-ccl.o mule-charset.o mule
#endif
#if defined(HAVE_CANNA) && !defined(HAVE_SHLIB)
-mule_canna_objs=$(BLDMODULES)/canna/cannamod.o
+mule_canna_objs=$(BLDMODULES)/canna/canna_api.o
#endif
#ifdef HAVE_WNN
1.103.2.3 +240 -367 XEmacs/xemacs/src/alloc.c
Index: alloc.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/alloc.c,v
retrieving revision 1.103.2.2
retrieving revision 1.103.2.3
diff -u -p -r1.103.2.2 -r1.103.2.3
--- alloc.c 2005/07/13 04:46:23 1.103.2.2
+++ alloc.c 2005/11/06 16:14:35 1.103.2.3
@@ -1,7 +1,7 @@
/* Storage allocation and gc for XEmacs Lisp interpreter.
Copyright (C) 1985-1998 Free Software Foundation, Inc.
Copyright (C) 1995 Sun Microsystems, Inc.
- Copyright (C) 1995, 1996, 2001, 2002, 2003, 2004 Ben Wing.
+ Copyright (C) 1995, 1996, 2001, 2002, 2003, 2004, 2005 Ben Wing.
This file is part of XEmacs.
@@ -94,6 +94,8 @@ static Fixnum debug_allocation_backtrace
/* Number of bytes of consing done since the last gc */
static EMACS_INT consing_since_gc;
EMACS_UINT total_consing;
+EMACS_INT total_gc_usage;
+int total_gc_usage_set;
int need_to_garbage_collect;
int need_to_check_c_alloca;
@@ -510,7 +512,7 @@ allocate_lisp_storage (Bytecount size)
}
#endif /* not MC_ALLOC */
-#ifdef MC_ALLOC_TYPE_STATS
+#if defined (MC_ALLOC) && defined (ALLOC_TYPE_STATS)
static struct
{
int instances_in_use;
@@ -579,13 +581,13 @@ dec_lrecord_stats (Bytecount size_includ
DECREMENT_CONS_COUNTER (size);
}
-#endif /* not MC_ALLOC_TYPE_STATS */
+#endif /* not (MC_ALLOC && ALLOC_TYPE_STATS) */
#ifndef MC_ALLOC
/* lcrecords are chained together through their "next" field.
After doing the mark phase, GC will walk this linked list
and free any lcrecord which hasn't been marked. */
-static struct lcrecord_header *all_lcrecords;
+static struct old_lcrecord_header *all_lcrecords;
#endif /* not MC_ALLOC */
#ifdef MC_ALLOC
@@ -605,9 +607,9 @@ alloc_lrecord (Bytecount size,
gc_checking_assert (LRECORD_FREE_P (lheader));
set_lheader_implementation (lheader, implementation);
lheader->uid = lrecord_uid_counter++;
-#ifdef MC_ALLOC_TYPE_STATS
+#ifdef ALLOC_TYPE_STATS
inc_lrecord_stats (size, lheader);
-#endif /* not MC_ALLOC_TYPE_STATS */
+#endif /* ALLOC_TYPE_STATS */
INCREMENT_CONS_COUNTER (size, implementation->name);
return lheader;
}
@@ -627,9 +629,9 @@ noseeum_alloc_lrecord (Bytecount size,
gc_checking_assert (LRECORD_FREE_P (lheader));
set_lheader_implementation (lheader, implementation);
lheader->uid = lrecord_uid_counter++;
-#ifdef MC_ALLOC_TYPE_STATS
+#ifdef ALLOC_TYPE_STATS
inc_lrecord_stats (size, lheader);
-#endif /* not MC_ALLOC_TYPE_STATS */
+#endif /* ALLOC_TYPE_STATS */
NOSEEUM_INCREMENT_CONS_COUNTER (size, implementation->name);
return lheader;
}
@@ -651,10 +653,10 @@ free_lrecord (Lisp_Object lrecord)
specified size. See lrecord.h. */
void *
-basic_alloc_lcrecord (Bytecount size,
- const struct lrecord_implementation *implementation)
+old_basic_alloc_lcrecord (Bytecount size,
+ const struct lrecord_implementation *implementation)
{
- struct lcrecord_header *lcheader;
+ struct old_lcrecord_header *lcheader;
type_checking_assert
((implementation->static_size == 0 ?
@@ -665,7 +667,7 @@ basic_alloc_lcrecord (Bytecount size,
&&
(! (implementation->hash == NULL && implementation->equal !=
NULL)));
- lcheader = (struct lcrecord_header *) allocate_lisp_storage (size);
+ lcheader = (struct old_lcrecord_header *) allocate_lisp_storage (size);
set_lheader_implementation (&lcheader->lheader, implementation);
lcheader->next = all_lcrecords;
#if 1 /* mly prefers to see small ID numbers */
@@ -687,7 +689,7 @@ basic_alloc_lcrecord (Bytecount size,
* Otherwise, just let the GC do its job -- that's what it's there for
*/
void
-very_old_free_lcrecord (struct lcrecord_header *lcrecord)
+very_old_free_lcrecord (struct old_lcrecord_header *lcrecord)
{
if (all_lcrecords == lcrecord)
{
@@ -695,10 +697,10 @@ very_old_free_lcrecord (struct lcrecord_
}
else
{
- struct lrecord_header *header = all_lcrecords;
+ struct old_lcrecord_header *header = all_lcrecords;
for (;;)
{
- struct lrecord_header *next = header->next;
+ struct old_lcrecord_header *next = header->next;
if (next == lcrecord)
{
header->next = lrecord->next;
@@ -725,7 +727,7 @@ disksave_object_finalization_1 (void)
#ifdef MC_ALLOC
mc_finalize_for_disksave ();
#else /* not MC_ALLOC */
- struct lcrecord_header *header;
+ struct old_lcrecord_header *header;
for (header = all_lcrecords; header; header = header->next)
{
@@ -758,9 +760,11 @@ copy_lisp_object (Lisp_Object dst, Lisp_
(char *) XRECORD_LHEADER (src) + sizeof (struct lrecord_header),
size - sizeof (struct lrecord_header));
else
- memcpy ((char *) XRECORD_LHEADER (dst) + sizeof (struct lcrecord_header),
- (char *) XRECORD_LHEADER (src) + sizeof (struct lcrecord_header),
- size - sizeof (struct lcrecord_header));
+ memcpy ((char *) XRECORD_LHEADER (dst) +
+ sizeof (struct old_lcrecord_header),
+ (char *) XRECORD_LHEADER (src) +
+ sizeof (struct old_lcrecord_header),
+ size - sizeof (struct old_lcrecord_header));
#endif /* not MC_ALLOC */
}
@@ -809,7 +813,9 @@ dbg_eq (Lisp_Object obj1, Lisp_Object ob
}
-#ifndef MC_ALLOC
+#ifdef MC_ALLOC
+#define DECLARE_FIXED_TYPE_ALLOC(type, structture) struct __foo__
+#else
/************************************************************************/
/* Fixed-size type macros */
/************************************************************************/
@@ -1083,7 +1089,6 @@ do \
NOSEEUM_INCREMENT_CONS_COUNTER (sizeof (structtype), #type); \
} while (0)
-
/* Lisp_Free is the type to represent a free list member inside a frob
block of any lisp object type. */
typedef struct Lisp_Free
@@ -1170,18 +1175,42 @@ do { FREE_FIXED_TYPE (type, structtype,
#endif
#endif /* not MC_ALLOC */
+#ifdef MC_ALLOC
+#define ALLOCATE_FIXED_TYPE_AND_SET_IMPL(type, lisp_type, var, lrec_ptr) \
+do { \
+ (var) = alloc_lrecord_type (lisp_type, lrec_ptr); \
+} while (0)
+#define NOSEEUM_ALLOCATE_FIXED_TYPE_AND_SET_IMPL(type, lisp_type, var, \
+ lrec_ptr) \
+do { \
+ (var) = noseeum_alloc_lrecord_type (lisp_type, lrec_ptr); \
+} while (0)
+#else /* not MC_ALLOC */
+#define ALLOCATE_FIXED_TYPE_AND_SET_IMPL(type, lisp_type, var, lrec_ptr) \
+do \
+{ \
+ ALLOCATE_FIXED_TYPE (type, lisp_type, var); \
+ set_lheader_implementation (&(var)->lheader, lrec_ptr); \
+} while (0)
+#define NOSEEUM_ALLOCATE_FIXED_TYPE_AND_SET_IMPL(type, lisp_type, var, \
+ lrec_ptr) \
+do \
+{ \
+ NOSEEUM_ALLOCATE_FIXED_TYPE (type, lisp_type, var); \
+ set_lheader_implementation (&(var)->lheader, lrec_ptr); \
+} while (0)
+#endif /* MC_ALLOC */
+
/************************************************************************/
/* Cons allocation */
/************************************************************************/
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (cons, Lisp_Cons);
/* conses are used and freed so often that we set this really high */
/* #define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_cons 20000 */
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_cons 2000
-#endif /* not MC_ALLOC */
static Lisp_Object
mark_cons (Lisp_Object obj)
@@ -1235,12 +1264,7 @@ Create a new cons, give it CAR and CDR a
Lisp_Object val;
Lisp_Cons *c;
-#ifdef MC_ALLOC
- c = alloc_lrecord_type (Lisp_Cons, &lrecord_cons);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (cons, Lisp_Cons, c);
- set_lheader_implementation (&c->lheader, &lrecord_cons);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (cons, Lisp_Cons, c, &lrecord_cons);
val = wrap_cons (c);
XSETCAR (val, car);
XSETCDR (val, cdr);
@@ -1256,12 +1280,7 @@ noseeum_cons (Lisp_Object car, Lisp_Obje
Lisp_Object val;
Lisp_Cons *c;
-#ifdef MC_ALLOC
- c = noseeum_alloc_lrecord_type (Lisp_Cons, &lrecord_cons);
-#else /* not MC_ALLOC */
- NOSEEUM_ALLOCATE_FIXED_TYPE (cons, Lisp_Cons, c);
- set_lheader_implementation (&c->lheader, &lrecord_cons);
-#endif /* not MC_ALLOC */
+ NOSEEUM_ALLOCATE_FIXED_TYPE_AND_SET_IMPL (cons, Lisp_Cons, c, &lrecord_cons);
val = wrap_cons (c);
XCAR (val) = car;
XCDR (val) = cdr;
@@ -1363,27 +1382,20 @@ Return a new list of length LENGTH, with
/*** With enhanced number support, these are short floats */
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (float, Lisp_Float);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_float 1000
-#endif /* not MC_ALLOC */
Lisp_Object
make_float (double float_value)
{
Lisp_Float *f;
-#ifdef MC_ALLOC
- f = alloc_lrecord_type (Lisp_Float, &lrecord_float);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (float, Lisp_Float, f);
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (float, Lisp_Float, f, &lrecord_float);
/* Avoid dump-time `uninitialized memory read' purify warnings. */
if (sizeof (struct lrecord_header) + sizeof (double) != sizeof (*f))
- xzero (*f);
-#endif /* not MC_ALLOC */
+ zero_lrecord (f);
- set_lheader_implementation (&f->lheader, &lrecord_float);
float_data (f) = float_value;
return wrap_float (f);
}
@@ -1395,10 +1407,8 @@ make_float (double float_value)
/*** Bignum ***/
#ifdef HAVE_BIGNUM
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (bignum, Lisp_Bignum);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_bignum 250
-#endif /* not MC_ALLOC */
/* WARNING: This function returns a bignum even if its argument fits into a
fixnum. See Fcanonicalize_number(). */
@@ -1407,12 +1417,7 @@ make_bignum (long bignum_value)
{
Lisp_Bignum *b;
-#ifdef MC_ALLOC
- b = alloc_lrecord_type (Lisp_Bignum, &lrecord_bignum);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (bignum, Lisp_Bignum, b);
- set_lheader_implementation (&b->lheader, &lrecord_bignum);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (bignum, Lisp_Bignum, b, &lrecord_bignum);
bignum_init (bignum_data (b));
bignum_set_long (bignum_data (b), bignum_value);
return wrap_bignum (b);
@@ -1425,12 +1430,7 @@ make_bignum_bg (bignum bg)
{
Lisp_Bignum *b;
-#ifdef MC_ALLOC
- b = alloc_lrecord_type (Lisp_Bignum, &lrecord_bignum);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (bignum, Lisp_Bignum, b);
- set_lheader_implementation (&b->lheader, &lrecord_bignum);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (bignum, Lisp_Bignum, b, &lrecord_bignum);
bignum_init (bignum_data (b));
bignum_set (bignum_data (b), bg);
return wrap_bignum (b);
@@ -1439,22 +1439,15 @@ make_bignum_bg (bignum bg)
/*** Ratio ***/
#ifdef HAVE_RATIO
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (ratio, Lisp_Ratio);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_ratio 250
-#endif /* not MC_ALLOC */
Lisp_Object
make_ratio (long numerator, unsigned long denominator)
{
Lisp_Ratio *r;
-#ifdef MC_ALLOC
- r = alloc_lrecord_type (Lisp_Ratio, &lrecord_ratio);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (ratio, Lisp_Ratio, r);
- set_lheader_implementation (&r->lheader, &lrecord_ratio);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (ratio, Lisp_Ratio, r, &lrecord_ratio);
ratio_init (ratio_data (r));
ratio_set_long_ulong (ratio_data (r), numerator, denominator);
ratio_canonicalize (ratio_data (r));
@@ -1466,12 +1459,7 @@ make_ratio_bg (bignum numerator, bignum
{
Lisp_Ratio *r;
-#ifdef MC_ALLOC
- r = alloc_lrecord_type (Lisp_Ratio, &lrecord_ratio);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (ratio, Lisp_Ratio, r);
- set_lheader_implementation (&r->lheader, &lrecord_ratio);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (ratio, Lisp_Ratio, r, &lrecord_ratio);
ratio_init (ratio_data (r));
ratio_set_bignum_bignum (ratio_data (r), numerator, denominator);
ratio_canonicalize (ratio_data (r));
@@ -1483,12 +1471,7 @@ make_ratio_rt (ratio rat)
{
Lisp_Ratio *r;
-#ifdef MC_ALLOC
- r = alloc_lrecord_type (Lisp_Ratio, &lrecord_ratio);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (ratio, Lisp_Ratio, r);
- set_lheader_implementation (&r->lheader, &lrecord_ratio);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (ratio, Lisp_Ratio, r, &lrecord_ratio);
ratio_init (ratio_data (r));
ratio_set (ratio_data (r), rat);
return wrap_ratio (r);
@@ -1497,10 +1480,8 @@ make_ratio_rt (ratio rat)
/*** Bigfloat ***/
#ifdef HAVE_BIGFLOAT
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (bigfloat, Lisp_Bigfloat);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_bigfloat 250
-#endif /* not MC_ALLOC */
/* This function creates a bigfloat with the default precision if the
PRECISION argument is zero. */
@@ -1509,12 +1490,7 @@ make_bigfloat (double float_value, unsig
{
Lisp_Bigfloat *f;
-#ifdef MC_ALLOC
- f = alloc_lrecord_type (Lisp_Bigfloat, &lrecord_bigfloat);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (bigfloat, Lisp_Bigfloat, f);
- set_lheader_implementation (&f->lheader, &lrecord_bigfloat);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (bigfloat, Lisp_Bigfloat, f,
&lrecord_bigfloat);
if (precision == 0UL)
bigfloat_init (bigfloat_data (f));
else
@@ -1529,12 +1505,7 @@ make_bigfloat_bf (bigfloat float_value)
{
Lisp_Bigfloat *f;
-#ifdef MC_ALLOC
- f = alloc_lrecord_type (Lisp_Bigfloat, &lrecord_bigfloat);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (bigfloat, Lisp_Bigfloat, f);
- set_lheader_implementation (&f->lheader, &lrecord_bigfloat);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (bigfloat, Lisp_Bigfloat, f,
&lrecord_bigfloat);
bigfloat_init_prec (bigfloat_data (f), bigfloat_get_prec (float_value));
bigfloat_set (bigfloat_data (f), float_value);
return wrap_bigfloat (f);
@@ -1611,11 +1582,7 @@ make_vector_internal (Elemcount sizei)
Bytecount sizem = FLEXIBLE_ARRAY_STRUCT_SIZEOF (Lisp_Vector, Lisp_Object,
contents, sizei);
Lisp_Vector *p =
-#ifdef MC_ALLOC
- (Lisp_Vector *) alloc_lrecord (sizem, &lrecord_vector);
-#else /* not MC_ALLOC */
- (Lisp_Vector *) basic_alloc_lcrecord (sizem, &lrecord_vector);
-#endif /* not MC_ALLOC */
+ (Lisp_Vector *) BASIC_ALLOC_LCRECORD (sizem, &lrecord_vector);
p->size = sizei;
return p;
@@ -1772,11 +1739,7 @@ make_bit_vector_internal (Elemcount size
unsigned long,
bits, num_longs);
Lisp_Bit_Vector *p = (Lisp_Bit_Vector *)
-#ifdef MC_ALLOC
- alloc_lrecord (sizem, &lrecord_bit_vector);
-#else /* not MC_ALLOC */
- basic_alloc_lcrecord (sizem, &lrecord_bit_vector);
-#endif /* not MC_ALLOC */
+ BASIC_ALLOC_LCRECORD (sizem, &lrecord_bit_vector);
bit_vector_length (p) = sizei;
return p;
@@ -1852,22 +1815,16 @@ Each argument must be one of the integer
/* Compiled-function allocation */
/************************************************************************/
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (compiled_function, Lisp_Compiled_Function);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_compiled_function 1000
-#endif /* not MC_ALLOC */
static Lisp_Object
make_compiled_function (void)
{
Lisp_Compiled_Function *f;
-#ifdef MC_ALLOC
- f = alloc_lrecord_type (Lisp_Compiled_Function, &lrecord_compiled_function);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (compiled_function, Lisp_Compiled_Function, f);
- set_lheader_implementation (&f->lheader, &lrecord_compiled_function);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (compiled_function, Lisp_Compiled_Function,
+ f, &lrecord_compiled_function);
f->stack_depth = 0;
f->specpdl_depth = 0;
@@ -1999,10 +1956,8 @@ This is terrible behavior which is retai
/* Symbol allocation */
/************************************************************************/
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (symbol, Lisp_Symbol);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_symbol 1000
-#endif /* not MC_ALLOC */
DEFUN ("make-symbol", Fmake_symbol, 1, 1, 0, /*
Return a newly allocated uninterned symbol whose name is NAME.
@@ -2014,12 +1969,7 @@ Its value and function definition are vo
CHECK_STRING (name);
-#ifdef MC_ALLOC
- p = alloc_lrecord_type (Lisp_Symbol, &lrecord_symbol);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (symbol, Lisp_Symbol, p);
- set_lheader_implementation (&p->lheader, &lrecord_symbol);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (symbol, Lisp_Symbol, p, &lrecord_symbol);
p->name = name;
p->plist = Qnil;
p->value = Qunbound;
@@ -2033,22 +1983,15 @@ Its value and function definition are vo
/* Extent allocation */
/************************************************************************/
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (extent, struct extent);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_extent 1000
-#endif /* not MC_ALLOC */
struct extent *
allocate_extent (void)
{
struct extent *e;
-#ifdef MC_ALLOC
- e = alloc_lrecord_type (struct extent, &lrecord_extent);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (extent, struct extent, e);
- set_lheader_implementation (&e->lheader, &lrecord_extent);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (extent, struct extent, e, &lrecord_extent);
extent_object (e) = Qnil;
set_extent_start (e, -1);
set_extent_end (e, -1);
@@ -2068,221 +2011,151 @@ allocate_extent (void)
/* Event allocation */
/************************************************************************/
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (event, Lisp_Event);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_event 1000
-#endif /* not MC_ALLOC */
Lisp_Object
allocate_event (void)
{
Lisp_Event *e;
-#ifdef MC_ALLOC
- e = alloc_lrecord_type (Lisp_Event, &lrecord_event);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (event, Lisp_Event, e);
- set_lheader_implementation (&e->lheader, &lrecord_event);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (event, Lisp_Event, e, &lrecord_event);
return wrap_event (e);
}
#ifdef EVENT_DATA_AS_OBJECTS
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (key_data, Lisp_Key_Data);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_key_data 1000
-#endif /* not MC_ALLOC */
Lisp_Object
make_key_data (void)
{
Lisp_Key_Data *d;
-#ifdef MC_ALLOC
- d = alloc_lrecord_type (Lisp_Key_Data, &lrecord_key_data);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (key_data, Lisp_Key_Data, d);
- xzero (*d);
- set_lheader_implementation (&d->lheader, &lrecord_key_data);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (key_data, Lisp_Key_Data, d,
+ &lrecord_key_data);
+ zero_lrecord (d);
d->keysym = Qnil;
return wrap_key_data (d);
}
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (button_data, Lisp_Button_Data);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_button_data 1000
-#endif /* not MC_ALLOC */
Lisp_Object
make_button_data (void)
{
Lisp_Button_Data *d;
-#ifdef MC_ALLOC
- d = alloc_lrecord_type (Lisp_Button_Data, &lrecord_button_data);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (button_data, Lisp_Button_Data, d);
- xzero (*d);
- set_lheader_implementation (&d->lheader, &lrecord_button_data);
-
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (button_data, Lisp_Button_Data, d,
&lrecord_button_data);
+ zero_lrecord (d);
return wrap_button_data (d);
}
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (motion_data, Lisp_Motion_Data);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_motion_data 1000
-#endif /* not MC_ALLOC */
Lisp_Object
make_motion_data (void)
{
Lisp_Motion_Data *d;
-#ifdef MC_ALLOC
- d = alloc_lrecord_type (Lisp_Motion_Data, &lrecord_motion_data);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (motion_data, Lisp_Motion_Data, d);
- xzero (*d);
- set_lheader_implementation (&d->lheader, &lrecord_motion_data);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (motion_data, Lisp_Motion_Data, d,
&lrecord_motion_data);
+ zero_lrecord (d);
return wrap_motion_data (d);
}
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (process_data, Lisp_Process_Data);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_process_data 1000
-#endif /* not MC_ALLOC */
Lisp_Object
make_process_data (void)
{
Lisp_Process_Data *d;
-#ifdef MC_ALLOC
- d = alloc_lrecord_type (Lisp_Process_Data, &lrecord_process_data);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (process_data, Lisp_Process_Data, d);
- xzero (*d);
- set_lheader_implementation (&d->lheader, &lrecord_process_data);
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (process_data, Lisp_Process_Data, d,
&lrecord_process_data);
+ zero_lrecord (d);
d->process = Qnil;
-#endif /* not MC_ALLOC */
return wrap_process_data (d);
}
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (timeout_data, Lisp_Timeout_Data);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_timeout_data 1000
-#endif /* not MC_ALLOC */
Lisp_Object
make_timeout_data (void)
{
Lisp_Timeout_Data *d;
-#ifdef MC_ALLOC
- d = alloc_lrecord_type (Lisp_Timeout_Data, &lrecord_timeout_data);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (timeout_data, Lisp_Timeout_Data, d);
- xzero (*d);
- set_lheader_implementation (&d->lheader, &lrecord_timeout_data);
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (timeout_data, Lisp_Timeout_Data, d,
&lrecord_timeout_data);
+ zero_lrecord (d);
d->function = Qnil;
d->object = Qnil;
-#endif /* not MC_ALLOC */
return wrap_timeout_data (d);
}
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (magic_data, Lisp_Magic_Data);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_magic_data 1000
-#endif /* not MC_ALLOC */
Lisp_Object
make_magic_data (void)
{
Lisp_Magic_Data *d;
-#ifdef MC_ALLOC
- d = alloc_lrecord_type (Lisp_Magic_Data, &lrecord_magic_data);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (magic_data, Lisp_Magic_Data, d);
- xzero (*d);
- set_lheader_implementation (&d->lheader, &lrecord_magic_data);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (magic_data, Lisp_Magic_Data, d,
&lrecord_magic_data);
+ zero_lrecord (d);
return wrap_magic_data (d);
}
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (magic_eval_data, Lisp_Magic_Eval_Data);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_magic_eval_data 1000
-#endif /* not MC_ALLOC */
Lisp_Object
make_magic_eval_data (void)
{
Lisp_Magic_Eval_Data *d;
-#ifdef MC_ALLOC
- d = alloc_lrecord_type (Lisp_Magic_Eval_Data, &lrecord_magic_eval_data);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (magic_eval_data, Lisp_Magic_Eval_Data, d);
- xzero (*d);
- set_lheader_implementation (&d->lheader, &lrecord_magic_eval_data);
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (magic_eval_data, Lisp_Magic_Eval_Data, d,
&lrecord_magic_eval_data);
+ zero_lrecord (d);
d->object = Qnil;
-#endif /* not MC_ALLOC */
return wrap_magic_eval_data (d);
}
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (eval_data, Lisp_Eval_Data);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_eval_data 1000
-#endif /* not MC_ALLOC */
Lisp_Object
make_eval_data (void)
{
Lisp_Eval_Data *d;
-#ifdef MC_ALLOC
- d = alloc_lrecord_type (Lisp_Eval_Data, &lrecord_eval_data);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (eval_data, Lisp_Eval_Data, d);
- xzero (*d);
- set_lheader_implementation (&d->lheader, &lrecord_eval_data);
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (eval_data, Lisp_Eval_Data, d,
&lrecord_eval_data);
+ zero_lrecord (d);
d->function = Qnil;
d->object = Qnil;
-#endif /* not MC_ALLOC */
return wrap_eval_data (d);
}
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (misc_user_data, Lisp_Misc_User_Data);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_misc_user_data 1000
-#endif /* not MC_ALLOC */
Lisp_Object
make_misc_user_data (void)
{
Lisp_Misc_User_Data *d;
-#ifdef MC_ALLOC
- d = alloc_lrecord_type (Lisp_Misc_User_Data, &lrecord_misc_user_data);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (misc_user_data, Lisp_Misc_User_Data, d);
- xzero (*d);
- set_lheader_implementation (&d->lheader, &lrecord_misc_user_data);
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (misc_user_data, Lisp_Misc_User_Data, d,
&lrecord_misc_user_data);
+ zero_lrecord (d);
d->function = Qnil;
d->object = Qnil;
-#endif /* not MC_ALLOC */
return wrap_misc_user_data (d);
}
@@ -2293,10 +2166,8 @@ make_misc_user_data (void)
/* Marker allocation */
/************************************************************************/
-#ifndef MC_ALLOC
DECLARE_FIXED_TYPE_ALLOC (marker, Lisp_Marker);
#define MINIMUM_ALLOWED_FIXED_TYPE_CELLS_marker 1000
-#endif /* not MC_ALLOC */
DEFUN ("make-marker", Fmake_marker, 0, 0, 0, /*
Return a new marker which does not point at any place.
@@ -2305,12 +2176,7 @@ Return a new marker which does not point
{
Lisp_Marker *p;
-#ifdef MC_ALLOC
- p = alloc_lrecord_type (Lisp_Marker, &lrecord_marker);
-#else /* not MC_ALLOC */
- ALLOCATE_FIXED_TYPE (marker, Lisp_Marker, p);
- set_lheader_implementation (&p->lheader, &lrecord_marker);
-#endif /* not MC_ALLOC */
+ ALLOCATE_FIXED_TYPE_AND_SET_IMPL (marker, Lisp_Marker, p, &lrecord_marker);
p->buffer = 0;
p->membpos = 0;
marker_next (p) = 0;
@@ -2324,12 +2190,8 @@ noseeum_make_marker (void)
{
Lisp_Marker *p;
-#ifdef MC_ALLOC
- p = noseeum_alloc_lrecord_type (Lisp_Marker, &lrecord_marker);
-#else /* not MC_ALLOC */
- NOSEEUM_ALLOCATE_FIXED_TYPE (marker, Lisp_Marker, p);
- set_lheader_implementation (&p->lheader, &lrecord_marker);
-#endif /* not MC_ALLOC */
+ NOSEEUM_ALLOCATE_FIXED_TYPE_AND_SET_IMPL (marker, Lisp_Marker, p,
+ &lrecord_marker);
p->buffer = 0;
p->membpos = 0;
marker_next (p) = 0;
@@ -2356,12 +2218,10 @@ noseeum_make_marker (void)
This new method makes things somewhat bigger, but it is MUCH safer. */
-#ifndef MC_ALLOC
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
-#endif /* not MC_ALLOC */
static Lisp_Object
mark_string (Lisp_Object obj)
@@ -2492,9 +2352,9 @@ finalize_string (void *header, int for_d
{
Lisp_String *s = (Lisp_String *) header;
Bytecount size = s->size_;
-#ifdef MC_ALLOC_TYPE_STATS
+#ifdef ALLOC_TYPE_STATS
dec_lrecord_string_data_stats (size);
-#endif /* MC_ALLOC_TYPE_STATS */
+#endif /* ALLOC_TYPE_STATS */
if (BIG_STRING_SIZE_P (size))
xfree (s->data_, Ibyte *);
}
@@ -2614,9 +2474,9 @@ make_uninit_string (Bytecount length)
#ifdef MC_ALLOC
s = alloc_lrecord_type (Lisp_String, &lrecord_string);
-#ifdef MC_ALLOC_TYPE_STATS
+#ifdef ALLOC_TYPE_STATS
inc_lrecord_string_data_stats (length);
-#endif /* MC_ALLOC_TYPE_STATS */
+#endif /* ALLOC_TYPE_STATS */
#else /* not MC_ALLOC */
/* Allocate the string header */
ALLOCATE_FIXED_TYPE (string, Lisp_String, s);
@@ -3000,9 +2860,9 @@ make_string_nocopy (const Ibyte *content
#ifdef MC_ALLOC
s = alloc_lrecord_type (Lisp_String, &lrecord_string);
-#ifdef MC_ALLOC_TYPE_STATS
+#ifdef ALLOC_TYPE_STATS
inc_lrecord_string_data_stats (length);
-#endif /* MC_ALLOC_TYPE_STATS */
+#endif /* ALLOC_TYPE_STATS */
mcpro (wrap_pointer_1 (s)); /* otherwise nocopy_strings get
collected and static data is tried to
be freed. */
@@ -3029,7 +2889,7 @@ make_string_nocopy (const Ibyte *content
/************************************************************************/
/* Lcrecord lists are used to manage the allocation of particular
- sorts of lcrecords, to avoid calling basic_alloc_lcrecord() (and thus
+ sorts of lcrecords, to avoid calling BASIC_ALLOC_LCRECORD() (and thus
malloc() and garbage-collection junk) as much as possible.
It is similar to the Blocktype class.
@@ -3101,11 +2961,11 @@ Lisp_Object
make_lcrecord_list (Elemcount size,
const struct lrecord_implementation *implementation)
{
- /* Don't use alloc_lcrecord_type() avoid infinite recursion
+ /* Don't use old_alloc_lcrecord_type() avoid infinite recursion
allocating this, */
struct lcrecord_list *p = (struct lcrecord_list *)
- basic_alloc_lcrecord (sizeof (struct lcrecord_list),
- &lrecord_lcrecord_list);
+ old_basic_alloc_lcrecord (sizeof (struct lcrecord_list),
+ &lrecord_lcrecord_list);
p->implementation = implementation;
p->size = size;
@@ -3147,12 +3007,12 @@ alloc_managed_lcrecord (Lisp_Object lcre
free_header->lcheader.free = 0;
/* Put back the correct type, as we set it to lrecord_type_free. */
lheader->type = list->implementation->lrecord_type_index;
- zero_sized_lcrecord (free_header, list->size);
+ old_zero_sized_lcrecord (free_header, list->size);
return val;
}
else
- return wrap_pointer_1 (basic_alloc_lcrecord (list->size,
- list->implementation));
+ return wrap_pointer_1 (old_basic_alloc_lcrecord (list->size,
+ list->implementation));
}
/* "Free" a Lisp object LCRECORD by placing it on its associated free list
@@ -3223,7 +3083,7 @@ alloc_automanaged_lcrecord (Bytecount si
}
void
-free_lcrecord (Lisp_Object rec)
+old_free_lcrecord (Lisp_Object rec)
{
int type = XRECORD_LHEADER (rec)->type;
@@ -3759,7 +3619,7 @@ lispdesc_block_size_1 (const void *obj,
#define GC_CHECK_NOT_FREE(lheader) \
gc_checking_assert (! LRECORD_FREE_P (lheader)); \
gc_checking_assert (LHEADER_IMPLEMENTATION (lheader)->basic_p || \
- ! ((struct lcrecord_header *) lheader)->free)
+ ! ((struct old_lcrecord_header *) lheader)->free)
#endif /* MC_ALLOC */
#ifdef USE_KKCC
@@ -4290,7 +4150,7 @@ tick_lcrecord_stats (const struct lrecor
{
int type_index = h->type;
- if (((struct lcrecord_header *) h)->free)
+ if (((struct old_lcrecord_header *) h)->free)
{
gc_checking_assert (!free_p);
lcrecord_stats[type_index].instances_on_free_list++;
@@ -4317,9 +4177,9 @@ tick_lcrecord_stats (const struct lrecor
#ifndef MC_ALLOC
/* Free all unmarked records */
static void
-sweep_lcrecords_1 (struct lcrecord_header **prev, int *used)
+sweep_lcrecords_1 (struct old_lcrecord_header **prev, int *used)
{
- struct lcrecord_header *header;
+ struct old_lcrecord_header *header;
int num_used = 0;
/* int total_size = 0; */
@@ -4364,11 +4224,11 @@ sweep_lcrecords_1 (struct lcrecord_heade
}
else
{
- struct lcrecord_header *next = header->next;
+ struct old_lcrecord_header *next = header->next;
*prev = next;
tick_lcrecord_stats (h, 1);
/* used to call finalizer right here. */
- xfree (header, struct lcrecord_header *);
+ xfree (header, struct old_lcrecord_header *);
header = next;
}
}
@@ -5525,13 +5385,13 @@ garbage_collect_1 (void)
}
{
- struct catchtag *catch;
- for (catch = catchlist; catch; catch = catch->next)
+ struct catchtag *c;
+ for (c = catchlist; c; c = c->next)
{
- mark_object (catch->tag);
- mark_object (catch->val);
- mark_object (catch->actual_tag);
- mark_object (catch->backtrace);
+ mark_object (c->tag);
+ mark_object (c->val);
+ mark_object (c->actual_tag);
+ mark_object (c->backtrace);
}
}
@@ -5667,10 +5527,10 @@ garbage_collect_1 (void)
return;
}
-#ifdef MC_ALLOC
-#ifdef MC_ALLOC_TYPE_STATS
+#ifdef ALLOC_TYPE_STATS
+
static Lisp_Object
-gc_plist_hack (const Ascbyte *name, int value, Lisp_Object tail)
+gc_plist_hack (const Ascbyte *name, EMACS_INT value, Lisp_Object tail)
{
/* C doesn't have local functions (or closures, or GC, or readable syntax,
or portable numeric datatypes, or bit-vectors, or characters, or
@@ -5678,13 +5538,14 @@ gc_plist_hack (const Ascbyte *name, int
return cons3 (intern (name), make_int (value), tail);
}
-DEFUN("lrecord-stats", Flrecord_stats, 0, 0 ,"", /*
-Return statistics about lrecords in a property list.
-*/
- ())
+static Lisp_Object
+object_memory_usage_stats (int set_total_gc_usage)
{
Lisp_Object pl = Qnil;
int i;
+ EMACS_INT tgu_val = 0;
+
+#ifdef MC_ALLOC
for (i = 0; i < (countof (lrecord_implementations_table)
+ MODULE_DEFINABLE_TYPE_COUNT); i++)
@@ -5709,6 +5570,7 @@ Return statistics about lrecords in a pr
pl = gc_plist_hack (buf,
lrecord_stats[i].bytes_in_use,
pl);
+ tgu_val += lrecord_stats[i].bytes_in_use_including_overhead;
if (name[len-1] == 's')
sprintf (buf, "%ses-used", name);
@@ -5723,85 +5585,18 @@ Return statistics about lrecords in a pr
lrecord_string_data_bytes_in_use, pl);
pl = gc_plist_hack ("string-data-used",
lrecord_string_data_instances_in_use, pl);
-
- return pl;
-}
-#endif /* not MC_ALLOC_TYPE_STATS */
+ tgu_val += lrecord_string_data_bytes_in_use_including_overhead;
-DEFUN ("garbage-collect", Fgarbage_collect, 0, 0, "", /*
-Reclaim storage for Lisp objects no longer needed.
-Return info on amount of space in use:
- ((USED-CONSES . STORAGE-CONSES) (USED-SYMS . STORAGE-SYMS)
- (USED-MARKERS . STORAGE-MARKERS) USED-STRING-CHARS USED-VECTOR-SLOTS
- PLIST)
- where `PLIST' is a list of alternating keyword/value pairs providing
- more detailed information.
-Garbage collection happens automatically if you cons more than
-`gc-cons-threshold' bytes of Lisp data since previous garbage collection.
-*/
- ())
-{
- garbage_collect_1 ();
-
-#ifdef MC_ALLOC_TYPE_STATS
- /* The things we do for backwards-compatibility */
- return
- list6
- (Fcons (make_int (lrecord_stats[lrecord_type_cons].instances_in_use),
- make_int (lrecord_stats[lrecord_type_cons]
- .bytes_in_use_including_overhead)),
- Fcons (make_int (lrecord_stats[lrecord_type_symbol].instances_in_use),
- make_int (lrecord_stats[lrecord_type_symbol]
- .bytes_in_use_including_overhead)),
- Fcons (make_int (lrecord_stats[lrecord_type_marker].instances_in_use),
- make_int (lrecord_stats[lrecord_type_marker]
- .bytes_in_use_including_overhead)),
- make_int (lrecord_stats[lrecord_type_string]
- .bytes_in_use_including_overhead),
- make_int (lrecord_stats[lrecord_type_vector]
- .bytes_in_use_including_overhead),
- Flrecord_stats ());
-#else /* not MC_ALLOC_TYPE_STATS */
- return Qnil;
-#endif /* not MC_ALLOC_TYPE_STATS */
-}
#else /* not MC_ALLOC */
-/* Debugging aids. */
-static Lisp_Object
-gc_plist_hack (const Ascbyte *name, int value, Lisp_Object tail)
-{
- /* C doesn't have local functions (or closures, or GC, or readable syntax,
- or portable numeric datatypes, or bit-vectors, or characters, or
- arrays, or exceptions, or ...) */
- return cons3 (intern (name), make_int (value), tail);
-}
-
#define HACK_O_MATIC(type, name, pl) do { \
- int s = 0; \
+ EMACS_INT s = 0; \
struct type##_block *x = current_##type##_block; \
while (x) { s += sizeof (*x) + MALLOC_OVERHEAD; x = x->prev; } \
+ tgu_val += s; \
(pl) = gc_plist_hack ((name), s, (pl)); \
} while (0)
-DEFUN ("garbage-collect", Fgarbage_collect, 0, 0, "", /*
-Reclaim storage for Lisp objects no longer needed.
-Return info on amount of space in use:
- ((USED-CONSES . FREE-CONSES) (USED-SYMS . FREE-SYMS)
- (USED-MARKERS . FREE-MARKERS) USED-STRING-CHARS USED-VECTOR-SLOTS
- PLIST)
- where `PLIST' is a list of alternating keyword/value pairs providing
- more detailed information.
-Garbage collection happens automatically if you cons more than
-`gc-cons-threshold' bytes of Lisp data since previous garbage collection.
-*/
- ())
-{
- Lisp_Object pl = Qnil;
- int i;
- int gc_count_vector_total_size = 0;
- garbage_collect_1 ();
-
for (i = 0; i < lrecord_type_count; i++)
{
if (lcrecord_stats[i].bytes_in_use != 0
@@ -5811,13 +5606,10 @@ Garbage collection happens automatically
char buf [255];
const char *name = lrecord_implementations_table[i]->name;
int len = strlen (name);
- /* save this for the FSFmacs-compatible part of the summary */
- if (i == lrecord_type_vector)
- gc_count_vector_total_size =
- lcrecord_stats[i].bytes_in_use + lcrecord_stats[i].bytes_freed;
sprintf (buf, "%s-storage", name);
pl = gc_plist_hack (buf, lcrecord_stats[i].bytes_in_use, pl);
+ tgu_val += lcrecord_stats[i].bytes_in_use;
/* Okay, simple pluralization check for `symbol-value-varalias' */
if (name[len-1] == 's')
sprintf (buf, "%ses-freed", name);
@@ -5895,8 +5687,71 @@ Garbage collection happens automatically
pl = gc_plist_hack ("conses-free", gc_count_num_cons_freelist, pl);
pl = gc_plist_hack ("conses-used", gc_count_num_cons_in_use, pl);
+#undef HACK_O_MATIC
+
+#endif /* MC_ALLOC */
+
+ if (set_total_gc_usage)
+ {
+ total_gc_usage = tgu_val;
+ total_gc_usage_set = 1;
+ }
+
+ return pl;
+}
+
+DEFUN("object-memory-usage-stats", Fobject_memory_usage_stats, 0, 0
,"", /*
+Return statistics about memory usage of Lisp objects.
+*/
+ ())
+{
+ return object_memory_usage_stats (0);
+}
+
+#endif /* ALLOC_TYPE_STATS */
+
+/* Debugging aids. */
+
+DEFUN ("garbage-collect", Fgarbage_collect, 0, 0, "", /*
+Reclaim storage for Lisp objects no longer needed.
+Return info on amount of space in use:
+ ((USED-CONSES . FREE-CONSES) (USED-SYMS . FREE-SYMS)
+ (USED-MARKERS . FREE-MARKERS) USED-STRING-CHARS USED-VECTOR-SLOTS
+ PLIST)
+ where `PLIST' is a list of alternating keyword/value pairs providing
+ more detailed information.
+Garbage collection happens automatically if you cons more than
+`gc-cons-threshold' bytes of Lisp data since previous garbage collection.
+*/
+ ())
+{
+ /* Record total usage for purposes of determining next GC */
+ garbage_collect_1 ();
+
+ /* This will get set to 1, and total_gc_usage computed, as part of the
+ call to object_memory_usage_stats() -- if ALLOC_TYPE_STATS is enabled. */
+ total_gc_usage_set = 0;
+#ifdef ALLOC_TYPE_STATS
/* The things we do for backwards-compatibility */
+#ifdef MC_ALLOC
return
+ list6
+ (Fcons (make_int (lrecord_stats[lrecord_type_cons].instances_in_use),
+ make_int (lrecord_stats[lrecord_type_cons]
+ .bytes_in_use_including_overhead)),
+ Fcons (make_int (lrecord_stats[lrecord_type_symbol].instances_in_use),
+ make_int (lrecord_stats[lrecord_type_symbol]
+ .bytes_in_use_including_overhead)),
+ Fcons (make_int (lrecord_stats[lrecord_type_marker].instances_in_use),
+ make_int (lrecord_stats[lrecord_type_marker]
+ .bytes_in_use_including_overhead)),
+ make_int (lrecord_stats[lrecord_type_string]
+ .bytes_in_use_including_overhead),
+ make_int (lrecord_stats[lrecord_type_vector]
+ .bytes_in_use_including_overhead),
+ object_memory_usage_stats (1));
+#else /* not MC_ALLOC */
+ return
list6 (Fcons (make_int (gc_count_num_cons_in_use),
make_int (gc_count_num_cons_freelist)),
Fcons (make_int (gc_count_num_symbol_in_use),
@@ -5904,11 +5759,14 @@ Garbage collection happens automatically
Fcons (make_int (gc_count_num_marker_in_use),
make_int (gc_count_num_marker_freelist)),
make_int (gc_count_string_total_size),
- make_int (gc_count_vector_total_size),
- pl);
-}
-#undef HACK_O_MATIC
+ make_int (lcrecord_stats[lrecord_type_vector].bytes_in_use +
+ lcrecord_stats[lrecord_type_vector].bytes_freed),
+ object_memory_usage_stats (1));
#endif /* not MC_ALLOC */
+#else /* not ALLOC_TYPE_STATS */
+ return Qnil;
+#endif /* ALLOC_TYPE_STATS */
+}
DEFUN ("consing-since-gc", Fconsing_since_gc, 0, 0, "", /*
Return the number of bytes consed since the last garbage collection.
@@ -5934,15 +5792,30 @@ The value is divided by 1024 to make sur
}
#endif
-DEFUN ("memory-usage", Fmemory_usage, 0, 0, 0, /*
+DEFUN ("total-memory-usage", Ftotal_memory_usage, 0, 0, 0, /*
Return the total number of bytes used by the data segment in XEmacs.
This may be helpful in debugging XEmacs's memory usage.
+NOTE: This may or may not be accurate! It is hard to determine this
+value in a system-independent fashion. On Windows, for example, the
+returned number tends to be much greater than reality.
*/
())
{
return make_int (total_data_usage ());
}
+#ifdef ALLOC_TYPE_STATS
+DEFUN ("object-memory-usage", Fobject_memory_usage, 0, 0, 0, /*
+Return total number of bytes used for object storage in XEmacs.
+This may be helpful in debugging XEmacs's memory usage.
+See also `consing-since-gc' and `object-memory-usage-stats'.
+*/
+ ())
+{
+ return make_int (total_gc_usage + consing_since_gc);
+}
+#endif /* ALLOC_TYPE_STATS */
+
void
recompute_funcall_allocation_flag (void)
{
@@ -5961,11 +5834,15 @@ recompute_need_to_garbage_collect (void)
else
need_to_garbage_collect =
(consing_since_gc > gc_cons_threshold
-#if 0 /* #### implement this better */
&&
+#if 0 /* #### implement this better */
(100 * consing_since_gc) / total_data_usage () >=
gc_cons_percentage
-#endif /* 0 */
+#else
+ (!total_gc_usage_set ||
+ (100 * consing_since_gc) / total_gc_usage >=
+ gc_cons_percentage)
+#endif
);
recompute_funcall_allocation_flag ();
}
@@ -6216,13 +6093,12 @@ common_init_alloc_early (void)
funcall_alloca_count = 0;
#if 1
- gc_cons_threshold = 500000; /* XEmacs change */
+ gc_cons_threshold = 2000000; /* XEmacs change */
#else
gc_cons_threshold = 15000; /* debugging */
#endif
- gc_cons_percentage = 0; /* #### 20; Don't have an accurate measure of
- memory usage on Windows; not verified on other
- systems */
+ gc_cons_percentage = 40; /* #### what is optimal? */
+ total_gc_usage_set = 0;
lrecord_uid_counter = 259;
#ifndef MC_ALLOC
debug_string_purity = 0;
@@ -6347,14 +6223,15 @@ syms_of_alloc (void)
DEFSUBR (Fmake_symbol);
DEFSUBR (Fmake_marker);
DEFSUBR (Fpurecopy);
-#ifdef MC_ALLOC_TYPE_STATS
- DEFSUBR (Flrecord_stats);
-#endif /* MC_ALLOC_TYPE_STATS */
+#ifdef ALLOC_TYPE_STATS
+ DEFSUBR (Fobject_memory_usage_stats);
+ DEFSUBR (Fobject_memory_usage);
+#endif /* ALLOC_TYPE_STATS */
DEFSUBR (Fgarbage_collect);
#if 0
DEFSUBR (Fmemory_limit);
#endif
- DEFSUBR (Fmemory_usage);
+ DEFSUBR (Ftotal_memory_usage);
DEFSUBR (Fconsing_since_gc);
}
@@ -6386,26 +6263,22 @@ effective way to check GCPRO problems, b
will be unusable! You almost certainly won't have the patience to wait
long enough to be able to set it back.
-See also `consing-since-gc'.
+See also `consing-since-gc' and `gc-cons-percentage'.
*/ );
DEFVAR_INT ("gc-cons-percentage", &gc_cons_percentage /*
*Percentage of memory allocated between garbage collections.
Garbage collection will happen if this percentage of the total amount of
-memory used for data has been allocated since the last garbage collection.
-However, it will not happen if less than `gc-cons-threshold' bytes have
-been allocated -- this sets an absolute minimum in case very little data
-has been allocated or the percentage is set very low. Set this to 0 to
-have garbage collection always happen after `gc-cons-threshold' bytes have
-been allocated, regardless of current memory usage.
-
-Garbage collection happens automatically when `eval' or `funcall' are
-called. (Note that `funcall' is called implicitly as part of evaluation.)
-By binding this temporarily to a large number, you can effectively
-prevent garbage collection during a part of the program.
+memory used for data (see `lisp-object-memory-usage') has been allocated
+since the last garbage collection. However, it will not happen if less
+than `gc-cons-threshold' bytes have been allocated -- this sets an absolute
+minimum in case very little data has been allocated or the percentage is
+set very low. Set this to 0 to have garbage collection always happen after
+`gc-cons-threshold' bytes have been allocated, regardless of current memory
+usage.
-See also `consing-since-gc'.
+See also `consing-since-gc' and `gc-cons-threshold'.
*/ );
#ifdef DEBUG_XEMACS
1.8.2.2 +7 -7 XEmacs/xemacs/src/alloca.c
Index: alloca.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/alloca.c,v
retrieving revision 1.8.2.1
retrieving revision 1.8.2.2
diff -u -p -r1.8.2.1 -r1.8.2.2
--- alloca.c 2005/03/15 05:23:49 1.8.2.1
+++ alloca.c 2005/11/06 16:14:36 1.8.2.2
@@ -143,7 +143,7 @@ xemacs_c_alloca (unsigned int size)
was allocated from deeper in the stack than currently. */
{
- register header *hp; /* Traverses linked list. */
+ header *hp; /* Traverses linked list. */
for (hp = last_alloca_header; hp != NULL;)
if ((STACK_DIR > 0 && hp->h.deep > depth)
@@ -177,20 +177,20 @@ xemacs_c_alloca (unsigned int size)
{
#ifdef emacs
- register pointer new = xmalloc (sizeof (header) + size);
+ register pointer new_ = xmalloc (sizeof (header) + size);
#else
- register pointer new = malloc (sizeof (header) + size);
+ register pointer new_ = malloc (sizeof (header) + size);
#endif
/* Address of header. */
- ((header *) new)->h.next = last_alloca_header;
- ((header *) new)->h.deep = depth;
+ ((header *) new_)->h.next = last_alloca_header;
+ ((header *) new_)->h.deep = depth;
- last_alloca_header = (header *) new;
+ last_alloca_header = (header *) new_;
/* User storage begins just after header. */
- return (pointer) ((char *) new + sizeof (header));
+ return (pointer) ((char *) new_ + sizeof (header));
}
}
1.67.2.4 +7 -26 XEmacs/xemacs/src/buffer.c
Index: buffer.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/buffer.c,v
retrieving revision 1.67.2.3
retrieving revision 1.67.2.4
diff -u -p -r1.67.2.3 -r1.67.2.4
--- buffer.c 2005/07/13 04:46:24 1.67.2.3
+++ buffer.c 2005/11/06 16:14:36 1.67.2.4
@@ -587,15 +587,9 @@ get_truename_buffer (REGISTER Lisp_Objec
static struct buffer *
allocate_buffer (void)
{
-#ifdef MC_ALLOC
- struct buffer *b = alloc_lrecord_type (struct buffer, &lrecord_buffer);
-
- copy_lrecord (b, XBUFFER (Vbuffer_defaults));
-#else /* not MC_ALLOC */
- struct buffer *b = alloc_lcrecord_type (struct buffer, &lrecord_buffer);
+ struct buffer *b = ALLOC_LCRECORD_TYPE (struct buffer, &lrecord_buffer);
- copy_lcrecord (b, XBUFFER (Vbuffer_defaults));
-#endif /* not MC_ALLOC */
+ COPY_LCRECORD (b, XBUFFER (Vbuffer_defaults));
return b;
}
@@ -1763,11 +1757,7 @@ compute_buffer_usage (struct buffer *b,
struct overhead_stats *ovstats)
{
xzero (*stats);
-#ifdef MC_ALLOC
- stats->other += mc_alloced_storage_size (sizeof (*b), ovstats);
-#else /* not MC_ALLOC */
- stats->other += malloced_storage_size (b, sizeof (*b), ovstats);
-#endif /* not MC_ALLOC */
+ stats->other += LISPOBJ_STORAGE_SIZE (b, sizeof (*b), ovstats);
stats->text += compute_buffer_text_usage (b, ovstats);
stats->markers += compute_buffer_marker_usage (b, ovstats);
stats->extents += compute_buffer_extent_usage (b, ovstats);
@@ -2156,7 +2146,7 @@ do { \
static const struct symbol_value_forward I_hate_C = \
{ /* struct symbol_value_forward */ \
{ /* struct symbol_value_magic */ \
- { /* struct lcrecord_header */ \
+ { /* struct old_lcrecord_header */ \
{ /* struct lrecord_header */ \
lrecord_type_symbol_value_forward, /* lrecord_type_index */ \
1, /* mark bit */ \
@@ -2204,11 +2194,7 @@ do { \
static void
nuke_all_buffer_slots (struct buffer *b, Lisp_Object zap)
{
-#ifdef MC_ALLOC
- zero_lrecord (b);
-#else /* not MC_ALLOC */
- zero_lcrecord (b);
-#endif /* not MC_ALLOC */
+ ZERO_LCRECORD (b);
b->extent_info = Qnil;
b->indirect_children = Qnil;
@@ -2223,13 +2209,8 @@ common_init_complex_vars_of_buffer (void
{
/* Make sure all markable slots in buffer_defaults
are initialized reasonably, so mark_buffer won't choke. */
-#ifdef MC_ALLOC
- struct buffer *defs = alloc_lrecord_type (struct buffer, &lrecord_buffer);
- struct buffer *syms = alloc_lrecord_type (struct buffer, &lrecord_buffer);
-#else /* not MC_ALLOC */
- struct buffer *defs = alloc_lcrecord_type (struct buffer, &lrecord_buffer);
- struct buffer *syms = alloc_lcrecord_type (struct buffer, &lrecord_buffer);
-#endif /* not MC_ALLOC */
+ struct buffer *defs = ALLOC_LCRECORD_TYPE (struct buffer, &lrecord_buffer);
+ struct buffer *syms = ALLOC_LCRECORD_TYPE (struct buffer, &lrecord_buffer);
staticpro_nodump (&Vbuffer_defaults);
staticpro_nodump (&Vbuffer_local_symbols);
1.31.2.2 +1 -5 XEmacs/xemacs/src/buffer.h
Index: buffer.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/buffer.h,v
retrieving revision 1.31.2.1
retrieving revision 1.31.2.2
diff -u -p -r1.31.2.1 -r1.31.2.2
--- buffer.h 2005/07/13 04:46:25 1.31.2.1
+++ buffer.h 2005/11/06 16:14:37 1.31.2.2
@@ -140,11 +140,7 @@ struct buffer_text
struct buffer
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
/* This structure holds the coordinates of the buffer contents
in ordinary buffers. In indirect buffers, this is not used. */
1.15.2.2 +1 -5 XEmacs/xemacs/src/casetab.c
Index: casetab.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/casetab.c,v
retrieving revision 1.15.2.1
retrieving revision 1.15.2.2
diff -u -p -r1.15.2.1 -r1.15.2.2
--- casetab.c 2005/07/13 04:46:26 1.15.2.1
+++ casetab.c 2005/11/06 16:14:37 1.15.2.2
@@ -116,11 +116,7 @@ static Lisp_Object
allocate_case_table (int init_tables)
{
Lisp_Case_Table *ct =
-#ifdef MC_ALLOC
- alloc_lrecord_type (Lisp_Case_Table, &lrecord_case_table);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (Lisp_Case_Table, &lrecord_case_table);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (Lisp_Case_Table, &lrecord_case_table);
if (init_tables)
{
1.5.8.2 +1 -5 XEmacs/xemacs/src/casetab.h
Index: casetab.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/casetab.h,v
retrieving revision 1.5.8.1
retrieving revision 1.5.8.2
diff -u -p -r1.5.8.1 -r1.5.8.2
--- casetab.h 2005/07/13 04:46:26 1.5.8.1
+++ casetab.h 2005/11/06 16:14:37 1.5.8.2
@@ -25,11 +25,7 @@ Boston, MA 02111-1307, USA. */
struct Lisp_Case_Table
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object downcase_table;
Lisp_Object upcase_table;
Lisp_Object case_canon_table;
1.9.2.3 +1 -5 XEmacs/xemacs/src/charset.h
Index: charset.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/charset.h,v
retrieving revision 1.9.2.2
retrieving revision 1.9.2.3
diff -u -p -r1.9.2.2 -r1.9.2.3
--- charset.h 2005/07/13 04:46:27 1.9.2.2
+++ charset.h 2005/11/06 16:14:38 1.9.2.3
@@ -181,11 +181,7 @@ leading_byte_prefix_p (Ibyte lb)
struct Lisp_Charset
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
int id;
Lisp_Object name;
1.32.2.3 +17 -41 XEmacs/xemacs/src/chartab.c
Index: chartab.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/chartab.c,v
retrieving revision 1.32.2.2
retrieving revision 1.32.2.3
diff -u -p -r1.32.2.2 -r1.32.2.3
--- chartab.c 2005/07/13 04:46:27 1.32.2.2
+++ chartab.c 2005/11/06 16:14:38 1.32.2.3
@@ -476,11 +476,7 @@ fill_char_table (Lisp_Char_Table *ct, Li
if (!EQ (ct->level1[i], Qnull_pointer) &&
CHAR_TABLE_ENTRYP (ct->level1[i]) &&
!OBJECT_DUMPED_P (ct->level1[1]))
-#ifdef MC_ALLOC
- free_lrecord (ct->level1[i]);
-#else /* not MC_ALLOC */
- free_lcrecord (ct->level1[i]);
-#endif /* not MC_ALLOC */
+ FREE_LCRECORD (ct->level1[i]);
ct->level1[i] = value;
}
#endif /* MULE */
@@ -596,11 +592,7 @@ sorts of values. The different char tab
Lisp_Object obj;
enum char_table_type ty = symbol_to_char_table_type (type);
-#ifdef MC_ALLOC
- ct = alloc_lrecord_type (Lisp_Char_Table, &lrecord_char_table);
-#else /* not MC_ALLOC */
- ct = alloc_lcrecord_type (Lisp_Char_Table, &lrecord_char_table);
-#endif /* not MC_ALLOC */
+ ct = ALLOC_LCRECORD_TYPE (Lisp_Char_Table, &lrecord_char_table);
ct->type = ty;
obj = wrap_char_table (ct);
if (ty == CHAR_TABLE_TYPE_SYNTAX)
@@ -633,11 +625,7 @@ make_char_table_entry (Lisp_Object initv
{
int i;
Lisp_Char_Table_Entry *cte =
-#ifdef MC_ALLOC
- alloc_lrecord_type (Lisp_Char_Table_Entry, &lrecord_char_table_entry);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (Lisp_Char_Table_Entry, &lrecord_char_table_entry);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (Lisp_Char_Table_Entry, &lrecord_char_table_entry);
for (i = 0; i < 96; i++)
cte->level2[i] = initval;
@@ -651,19 +639,15 @@ copy_char_table_entry (Lisp_Object entry
Lisp_Char_Table_Entry *cte = XCHAR_TABLE_ENTRY (entry);
int i;
Lisp_Char_Table_Entry *ctenew =
-#ifdef MC_ALLOC
- alloc_lrecord_type (Lisp_Char_Table_Entry, &lrecord_char_table_entry);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (Lisp_Char_Table_Entry, &lrecord_char_table_entry);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (Lisp_Char_Table_Entry, &lrecord_char_table_entry);
for (i = 0; i < 96; i++)
{
- Lisp_Object new = cte->level2[i];
- if (CHAR_TABLE_ENTRYP (new))
- ctenew->level2[i] = copy_char_table_entry (new);
+ Lisp_Object new_ = cte->level2[i];
+ if (CHAR_TABLE_ENTRYP (new_))
+ ctenew->level2[i] = copy_char_table_entry (new_);
else
- ctenew->level2[i] = new;
+ ctenew->level2[i] = new_;
}
return wrap_char_table_entry (ctenew);
@@ -684,11 +668,7 @@ as CHAR-TABLE. The values will not them
CHECK_CHAR_TABLE (char_table);
ct = XCHAR_TABLE (char_table);
-#ifdef MC_ALLOC
- ctnew = alloc_lrecord_type (Lisp_Char_Table, &lrecord_char_table);
-#else /* not MC_ALLOC */
- ctnew = alloc_lcrecord_type (Lisp_Char_Table, &lrecord_char_table);
-#endif /* not MC_ALLOC */
+ ctnew = ALLOC_LCRECORD_TYPE (Lisp_Char_Table, &lrecord_char_table);
ctnew->type = ct->type;
ctnew->parent = ct->parent;
ctnew->default_ = ct->default_;
@@ -697,22 +677,22 @@ as CHAR-TABLE. The values will not them
for (i = 0; i < NUM_ASCII_CHARS; i++)
{
- Lisp_Object new = ct->ascii[i];
+ Lisp_Object new_ = ct->ascii[i];
#ifdef MULE
- assert (! (CHAR_TABLE_ENTRYP (new)));
+ assert (! (CHAR_TABLE_ENTRYP (new_)));
#endif /* MULE */
- ctnew->ascii[i] = new;
+ ctnew->ascii[i] = new_;
}
#ifdef MULE
for (i = 0; i < NUM_LEADING_BYTES; i++)
{
- Lisp_Object new = ct->level1[i];
- if (CHAR_TABLE_ENTRYP (new))
- ctnew->level1[i] = copy_char_table_entry (new);
+ Lisp_Object new_ = ct->level1[i];
+ if (CHAR_TABLE_ENTRYP (new_))
+ ctnew->level1[i] = copy_char_table_entry (new_);
else
- ctnew->level1[i] = new;
+ ctnew->level1[i] = new_;
}
#endif /* MULE */
@@ -1080,11 +1060,7 @@ put_char_table (Lisp_Object table, struc
int lb = XCHARSET_LEADING_BYTE (range->charset) - MIN_LEADING_BYTE;
if (CHAR_TABLE_ENTRYP (ct->level1[lb]) &&
!OBJECT_DUMPED_P (ct->level1[lb]))
-#ifdef MC_ALLOC
- free_lrecord (ct->level1[lb]);
-#else /* not MC_ALLOC */
- free_lcrecord (ct->level1[lb]);
-#endif /* not MC_ALLOC */
+ FREE_LCRECORD (ct->level1[lb]);
ct->level1[lb] = val;
}
break;
1.14.2.2 +2 -10 XEmacs/xemacs/src/chartab.h
Index: chartab.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/chartab.h,v
retrieving revision 1.14.2.1
retrieving revision 1.14.2.2
diff -u -p -r1.14.2.1 -r1.14.2.2
--- chartab.h 2005/07/13 04:46:28 1.14.2.1
+++ chartab.h 2005/11/06 16:14:38 1.14.2.2
@@ -42,11 +42,7 @@ Boston, MA 02111-1307, USA. */
struct Lisp_Char_Table_Entry
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
/* In the interests of simplicity, we just use a fixed 96-entry
table. If we felt like being smarter, we could make this
@@ -84,11 +80,7 @@ enum char_table_type
struct Lisp_Char_Table
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object ascii[NUM_ASCII_CHARS];
Lisp_Object default_;
1.22.2.2 +6 -6 XEmacs/xemacs/src/cmdloop.c
Index: cmdloop.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/cmdloop.c,v
retrieving revision 1.22.2.1
retrieving revision 1.22.2.2
diff -u -p -r1.22.2.1 -r1.22.2.2
--- cmdloop.c 2005/03/15 05:23:52 1.22.2.1
+++ cmdloop.c 2005/11/06 16:14:38 1.22.2.2
@@ -174,18 +174,18 @@ You should almost certainly not be using
call_command_loop() is called when a macro is started and when the
minibuffer is entered; normal termination of the macro or
minibuffer causes a throw out of the recursive command loop. (To
- 'execute-kbd-macro for macros and 'exit for minibuffers. Note also
+ `execute-kbd-macro' for macros and `exit' for minibuffers. Note also
that the low-level minibuffer-entering function,
`read-minibuffer-internal', provides its own error handling and
does not need command_loop_2()'s error encapsulation; so it tells
call_command_loop() to invoke command_loop_1() directly.)
Note that both read-minibuffer-internal and recursive-edit set
- up a catch for 'exit; this is why `abort-recursive-edit', which
+ up a catch for `exit'; this is why `abort-recursive-edit', which
throws to this catch, exits out of either one.
initial_command_loop(), called from main(), sets up a catch
- for 'top-level when invoking command_loop_2(), allowing functions
+ for `top-level' when invoking command_loop_2(), allowing functions
to throw all the way to the top level if they really need to.
Before invoking command_loop_2(), initial_command_loop() calls
top_level_1(), which handles all of the startup stuff (creating
@@ -194,7 +194,7 @@ You should almost certainly not be using
is in Lisp and is pointed to by the variable `top-level';
normally this function is `normal-top-level'. top_level_1() is
just an error-handling wrapper similar to command_loop_2().
- Note also that initial_command_loop() sets up a catch for 'top-level
+ Note also that initial_command_loop() sets up a catch for `top-level'
when invoking top_level_1(), just like when it invokes
command_loop_2(). */
@@ -286,7 +286,7 @@ initial_command_loop (Lisp_Object load_m
Vtop_level = list2 (Qload, load_me);
/* First deal with startup and command-line arguments. A throw
- to 'top-level gets us back here directly (does this ever happen?).
+ to `top-level' gets us back here directly (does this ever happen?).
Otherwise, this function will return normally when all command-
line arguments have been processed, the user's initialization
file has been read in, and the first frame has been created. */
@@ -309,7 +309,7 @@ initial_command_loop (Lisp_Object load_m
command_loop_level = 0;
MARK_MODELINE_CHANGED;
/* Now invoke the command loop. It never returns; however, a
- throw to 'top-level will place us at the end of this loop. */
+ throw to `top-level' will place us at the end of this loop. */
internal_catch (Qtop_level, command_loop_2, Qnil, 0, 0, 0);
/* #### wrong with selected-console? */
/* We don't actually call clear_echo_area() here, partially
1.8.2.4 +1 -1 XEmacs/xemacs/src/compiler.h
Index: compiler.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/compiler.h,v
retrieving revision 1.8.2.3
retrieving revision 1.8.2.4
diff -u -p -r1.8.2.3 -r1.8.2.4
--- compiler.h 2005/03/15 05:23:52 1.8.2.3
+++ compiler.h 2005/11/06 16:14:38 1.8.2.4
@@ -36,7 +36,7 @@ Boston, MA 02111-1307, USA. */
#define INCLUDED_compiler_h
/* Define min() and max(). (Some compilers put them in strange places that
- won't be referenced by include files used by XEmacs, such as 'macros.h'
+ won't be referenced by include files used by XEmacs, such as `macros.h'
under Solaris.) */
#ifndef min
1.95.2.7 +18 -5 XEmacs/xemacs/src/config.h.in
Index: config.h.in
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/config.h.in,v
retrieving revision 1.95.2.6
retrieving revision 1.95.2.7
diff -u -p -r1.95.2.6 -r1.95.2.7
--- config.h.in 2005/07/13 04:46:28 1.95.2.6
+++ config.h.in 2005/11/06 16:14:39 1.95.2.7
@@ -1,6 +1,6 @@
/* XEmacs site configuration template file. -*- C -*-
Copyright (C) 1986, 1991-1994, 1998, 1999 Free Software Foundation, Inc.
- Copyright (C) 2000, 2001, 2002, 2004 Ben Wing.
+ Copyright (C) 2000, 2001, 2002, 2004, 2005 Ben Wing.
This file is part of XEmacs.
@@ -822,6 +822,13 @@ things are arranged in config.h.in. In
#endif /* WIN32_NO_CONFIGURE */
+#ifdef _MSC_VER
+/* Turn off tons of C4996 warnings in VC 8 about standard functions being
+ "deprecated" in favor of Microsoft-specific "secure" ones (!)
+ This must go *before* the inclusion of any system files. */
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+
/* alloca twiddling.
Because we might be #including alloca.h here, feature test macros
such as _XOPEN_SOURCE must be defined above.
@@ -916,6 +923,16 @@ extern "C" {
#define SYSTEM_MALLOC
#endif
+/* This enables type based information (updated during gc). The output
+ is used by show-memory-usage to print memory information for each
+ type. Since the new allocator does not distinguish between types
+ anymore, this functionality is additionally implemented and
+ consumes a lot of time. That is why this functionality can be
+ disabled; for the moment, we keep it enabled. */
+#if !defined (MC_ALLOC) || 1
+# define ALLOC_TYPE_STATS 1
+#endif
+
/* Define the return type of signal handlers if the s/xxx.h file
did not already do so. */
#define RETSIGTYPE void
@@ -1049,10 +1066,6 @@ extern "C" {
#ifndef NOT_C_CODE /* Actually means C or C++ */
# if defined (__cplusplus)
-/* Avoid C++ keywords used as ordinary C identifiers */
-# define new c_new
-# define catch c_catch
-
# define EXTERN_C extern "C"
# else /* C code */
# define EXTERN_C extern
1.7.2.5 +1 -5 XEmacs/xemacs/src/console-impl.h
Index: console-impl.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/console-impl.h,v
retrieving revision 1.7.2.4
retrieving revision 1.7.2.5
diff -u -p -r1.7.2.4 -r1.7.2.5
--- console-impl.h 2005/09/27 16:29:29 1.7.2.4
+++ console-impl.h 2005/11/06 16:14:39 1.7.2.5
@@ -412,11 +412,7 @@ struct console_methods * type##_console_
struct console
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
/* Description of this console's methods. */
struct console_methods *conmeths;
1.3.2.2 +2 -10 XEmacs/xemacs/src/console-msw-impl.h
Index: console-msw-impl.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/console-msw-impl.h,v
retrieving revision 1.3.2.1
retrieving revision 1.3.2.2
diff -u -p -r1.3.2.1 -r1.3.2.2
--- console-msw-impl.h 2005/07/13 04:46:29 1.3.2.1
+++ console-msw-impl.h 2005/11/06 16:14:39 1.3.2.2
@@ -57,11 +57,7 @@ DECLARE_CONSOLE_TYPE (msprinter);
struct Lisp_Devmode
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
/* Pointer to the DEVMODE structure */
DEVMODEW *devmode;
@@ -279,11 +275,7 @@ struct msprinter_frame
struct mswindows_dialog_id
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object frame;
Lisp_Object callbacks;
1.38.2.3 +7 -24 XEmacs/xemacs/src/console.c
Index: console.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/console.c,v
retrieving revision 1.38.2.2
retrieving revision 1.38.2.3
diff -u -p -r1.38.2.2 -r1.38.2.3
--- console.c 2005/07/13 04:46:29 1.38.2.2
+++ console.c 2005/11/06 16:14:39 1.38.2.3
@@ -194,18 +194,10 @@ static struct console *
allocate_console (Lisp_Object type)
{
Lisp_Object console;
-#ifdef MC_ALLOC
- struct console *con = alloc_lrecord_type (struct console, &lrecord_console);
-#else /* not MC_ALLOC */
- struct console *con = alloc_lcrecord_type (struct console, &lrecord_console);
-#endif /* not MC_ALLOC */
+ struct console *con = ALLOC_LCRECORD_TYPE (struct console, &lrecord_console);
struct gcpro gcpro1;
-#ifdef MC_ALLOC
- copy_lrecord (con, XCONSOLE (Vconsole_defaults));
-#else /* not MC_ALLOC */
- copy_lcrecord (con, XCONSOLE (Vconsole_defaults));
-#endif /* not MC_ALLOC */
+ COPY_LCRECORD (con, XCONSOLE (Vconsole_defaults));
console = wrap_console (con);
GCPRO1 (console);
@@ -280,7 +272,7 @@ valid_console_type_p (Lisp_Object type)
DEFUN ("valid-console-type-p", Fvalid_console_type_p, 1, 1, 0, /*
Return t if CONSOLE-TYPE is a valid console type.
-Valid types are 'x, 'tty, 'mswindows, 'msprinter, 'gtk, and
'stream.
+Valid types are `x', `tty', `mswindows', `msprinter', `gtk', and
`stream'.
*/
(console_type))
{
@@ -670,11 +662,7 @@ find_nonminibuffer_frame_not_on_console
static void
nuke_all_console_slots (struct console *con, Lisp_Object zap)
{
-#ifdef MC_ALLOC
- zero_lrecord (con);
-#else /* not MC_ALLOC */
- zero_lcrecord (con);
-#endif /* not MC_ALLOC */
+ ZERO_LCRECORD (con);
#define MARKED_SLOT(x) con->x = zap;
#include "conslots.h"
@@ -1353,7 +1341,7 @@ do { \
static const struct symbol_value_forward I_hate_C = \
{ /* struct symbol_value_forward */ \
{ /* struct symbol_value_magic */ \
- { /* struct lcrecord_header */ \
+ { /* struct old_lcrecord_header */ \
{ /* struct lrecord_header */ \
lrecord_type_symbol_value_forward, /* lrecord_type_index */ \
1, /* mark bit */ \
@@ -1405,13 +1393,8 @@ common_init_complex_vars_of_console (voi
/* Make sure all markable slots in console_defaults
are initialized reasonably, so mark_console won't choke.
*/
-#ifdef MC_ALLOC
- struct console *defs = alloc_lrecord_type (struct console, &lrecord_console);
- struct console *syms = alloc_lrecord_type (struct console, &lrecord_console);
-#else /* not MC_ALLOC */
- struct console *defs = alloc_lcrecord_type (struct console, &lrecord_console);
- struct console *syms = alloc_lcrecord_type (struct console, &lrecord_console);
-#endif /* not MC_ALLOC */
+ struct console *defs = ALLOC_LCRECORD_TYPE (struct console, &lrecord_console);
+ struct console *syms = ALLOC_LCRECORD_TYPE (struct console, &lrecord_console);
staticpro_nodump (&Vconsole_defaults);
staticpro_nodump (&Vconsole_local_symbols);
1.60.2.3 +3 -15 XEmacs/xemacs/src/data.c
Index: data.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/data.c,v
retrieving revision 1.60.2.2
retrieving revision 1.60.2.3
diff -u -p -r1.60.2.2 -r1.60.2.3
--- data.c 2005/07/13 04:46:29 1.60.2.2
+++ data.c 2005/11/06 16:14:39 1.60.2.3
@@ -2577,11 +2577,7 @@ make_weak_list (enum weak_list_type type
{
Lisp_Object result;
struct weak_list *wl =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct weak_list, &lrecord_weak_list);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (struct weak_list, &lrecord_weak_list);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (struct weak_list, &lrecord_weak_list);
wl->list = Qnil;
wl->type = type;
@@ -3056,11 +3052,7 @@ make_weak_box (Lisp_Object value)
Lisp_Object result;
struct weak_box *wb =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct weak_box, &lrecord_weak_box);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (struct weak_box, &lrecord_weak_box);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (struct weak_box, &lrecord_weak_box);
wb->value = value;
result = wrap_weak_box (wb);
@@ -3283,11 +3275,7 @@ make_ephemeron(Lisp_Object key, Lisp_Obj
struct gcpro gcpro1, gcpro2;
struct ephemeron *eph =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct ephemeron, &lrecord_ephemeron);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (struct ephemeron, &lrecord_ephemeron);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (struct ephemeron, &lrecord_ephemeron);
eph->key = Qnil;
eph->cons_chain = Qnil;
1.30.2.3 +3 -11 XEmacs/xemacs/src/database.c
Index: database.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/database.c,v
retrieving revision 1.30.2.2
retrieving revision 1.30.2.3
diff -u -p -r1.30.2.2 -r1.30.2.3
--- database.c 2005/07/13 04:46:30 1.30.2.2
+++ database.c 2005/11/06 16:14:40 1.30.2.3
@@ -1,6 +1,6 @@
/* Database access routines
Copyright (C) 1996, William M. Perry
- Copyright (C) 2001, 2002 Ben Wing.
+ Copyright (C) 2001, 2002, 2005 Ben Wing.
This file is part of XEmacs.
@@ -98,11 +98,7 @@ typedef struct
struct Lisp_Database
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object fname;
int mode;
int access_;
@@ -135,11 +131,7 @@ struct Lisp_Database
static Lisp_Database *
allocate_database (void)
{
-#ifdef MC_ALLOC
- Lisp_Database *db = alloc_lrecord_type (Lisp_Database, &lrecord_database);
-#else /* not MC_ALLOC */
- Lisp_Database *db = alloc_lcrecord_type (Lisp_Database, &lrecord_database);
-#endif /* not MC_ALLOC */
+ Lisp_Database *db = ALLOC_LCRECORD_TYPE (Lisp_Database, &lrecord_database);
db->fname = Qnil;
db->live_p = 0;
1.51.2.5 +1 -2 XEmacs/xemacs/src/depend
Index: depend
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/depend,v
retrieving revision 1.51.2.4
retrieving revision 1.51.2.5
diff -u -p -r1.51.2.4 -r1.51.2.5
--- depend 2005/09/20 16:06:01 1.51.2.4
+++ depend 2005/11/06 16:14:40 1.51.2.5
@@ -91,7 +91,6 @@ ui-gtk.o: $(LISP_H) buffer.h bufslots.h
database.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h database.h
sysfile.h
#endif
#if defined(MULE)
-mule-canna.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h
coding-system-slots.h file-coding.h
mule-ccl.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h
coding-system-slots.h file-coding.h mule-ccl.h
mule-charset.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h console.h
device.h elhash.h faces.h lstream.h mule-ccl.h objects.h
mule-coding.o: $(LISP_H) charset.h coding-system-slots.h file-coding.h mule-ccl.h
@@ -266,5 +265,5 @@ vm-limit.o: $(LISP_H) mem-limits.h
widget.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h
win32.o: $(LISP_H) backtrace.h buffer.h bufslots.h casetab.h charset.h chartab.h
console-msw.h console.h hash.h intl-auto-encap-win32.h profile.h sysfile.h sysproc.h
syssignal.h systime.h syswindows.h
window.o: $(LISP_H) buffer.h bufslots.h casetab.h charset.h chartab.h commands.h
conslots.h console-impl.h console.h device-impl.h device.h devslots.h elhash.h faces.h
frame-impl.h frame.h frameslots.h glyphs.h gutter.h objects.h redisplay.h scrollbar.h
specifier.h window-impl.h window.h winslots.h
-xft-fonts.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h conslots.h console-impl.h
console-x-impl.h console-x.h console.h device-impl.h device.h devslots.h hash.h
objects-impl.h objects-x-impl.h objects-x.h objects.h specifier.h xft-fonts.h
xintrinsic.h
+xft-fonts.o: $(LISP_H) $(LWLIB_SRCDIR)/lwlib.h conslots.h console-impl.h
console-x-impl.h console-x.h console.h device-impl.h device.h devslots.h objects-impl.h
objects-x-impl.h objects-x.h objects.h specifier.h xft-fonts.h xintrinsic.h
xmu.o: $(CONFIG_H)
1.4.2.2 +1 -5 XEmacs/xemacs/src/device-impl.h
Index: device-impl.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/device-impl.h,v
retrieving revision 1.4.2.1
retrieving revision 1.4.2.2
diff -u -p -r1.4.2.1 -r1.4.2.2
--- device-impl.h 2005/07/13 04:46:31 1.4.2.1
+++ device-impl.h 2005/11/06 16:14:40 1.4.2.2
@@ -71,11 +71,7 @@ struct pixel_to_glyph_translation_cache
struct device
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
/* Methods for this device's console. This can also be retrieved
through device->console, but it's faster this way. */
1.54.2.4 +2 -6 XEmacs/xemacs/src/device-msw.c
Index: device-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/device-msw.c,v
retrieving revision 1.54.2.3
retrieving revision 1.54.2.4
diff -u -p -r1.54.2.3 -r1.54.2.4
--- device-msw.c 2005/07/13 04:46:31 1.54.2.3
+++ device-msw.c 2005/11/06 16:14:41 1.54.2.4
@@ -1044,7 +1044,7 @@ Return value is the previously selected
}
DEFUN ("msprinter-apply-settings", Fmsprinter_apply_settings, 2, 2, 0, /*
-Apply settings from a SETTINGS object to a 'msprinter DEVICE.
+Apply settings from a SETTINGS object to a `msprinter' DEVICE.
The settings from the settings object are immediately applied to the
printer, possibly changing even the target printer itself. The SETTING
object is not modified, unlike `msprinter-select-settings', and the
@@ -1188,11 +1188,7 @@ allocate_devmode (DEVMODEW* src_devmode,
{
Lisp_Devmode *dm;
-#ifdef MC_ALLOC
- dm = alloc_lrecord_type (Lisp_Devmode, &lrecord_devmode);
-#else /* not MC_ALLOC */
- dm = alloc_lcrecord_type (Lisp_Devmode, &lrecord_devmode);
-#endif /* not MC_ALLOC */
+ dm = ALLOC_LCRECORD_TYPE (Lisp_Devmode, &lrecord_devmode);
if (d)
dm->device = wrap_device (d);
1.59.2.4 +6 -6 XEmacs/xemacs/src/device-x.c
Index: device-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/device-x.c,v
retrieving revision 1.59.2.3
retrieving revision 1.59.2.4
diff -u -p -r1.59.2.3 -r1.59.2.4
--- device-x.c 2005/09/20 16:06:02 1.59.2.3
+++ device-x.c 2005/11/06 16:14:41 1.59.2.4
@@ -1392,11 +1392,11 @@ Retrieve an X resource from the resource
The first arg is the name of the resource to retrieve, such as "font".
The second arg is the class of the resource to retrieve, such as "Font".
-The third arg must be one of the symbols 'string, 'integer, 'natnum, or
- 'boolean, specifying the type of object that the database is searched for.
+The third arg must be one of the symbols `string', `integer', `natnum', or
+ `boolean', specifying the type of object that the database is searched for.
The fourth arg is the locale to search for the resources on, and can
- currently be a buffer, a frame, a device, or 'global. If omitted, it
- defaults to 'global.
+ currently be a buffer, a frame, a device, or `global'. If omitted, it
+ defaults to `global'.
The fifth arg is the device to search for the resources on. (The resource
database for a particular device is constructed by combining non-device-
specific resources such as any command-line resources specified and any
@@ -1449,7 +1449,7 @@ is an interface to a C call something li
"Emacs.EmacsLocaleType.EmacsDevice.Foreground",
"String");
-4) If LOCALE is 'global, a call
+4) If LOCALE is `global', a call
(x-get-resource "foreground" "Foreground" 'string
'global)
@@ -1459,7 +1459,7 @@ is an interface to a C call something li
"Emacs.Foreground",
"String");
-Note that for 'global, no prefix is added other than that of the
+Note that for `global', no prefix is added other than that of the
application itself; thus, you can use this locale to retrieve
arbitrary application resources, if you really want to.
1.32.2.3 +6 -14 XEmacs/xemacs/src/device.c
Index: device.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/device.c,v
retrieving revision 1.32.2.2
retrieving revision 1.32.2.3
diff -u -p -r1.32.2.2 -r1.32.2.3
--- device.c 2005/07/13 04:46:32 1.32.2.2
+++ device.c 2005/11/06 16:14:41 1.32.2.3
@@ -169,7 +169,7 @@ valid_device_class_p (Lisp_Object class_
DEFUN ("valid-device-class-p", Fvalid_device_class_p, 1, 1, 0, /*
Given a DEVICE-CLASS, return t if it is valid.
-Valid classes are 'color, 'grayscale, and 'mono.
+Valid classes are `color', `grayscale', and `mono'.
*/
(device_class))
{
@@ -187,11 +187,7 @@ Return a list of valid device classes.
static void
nuke_all_device_slots (struct device *d, Lisp_Object zap)
{
-#ifdef MC_ALLOC
- zero_lrecord (d);
-#else /* not MC_ALLOC */
- zero_lcrecord (d);
-#endif /* not MC_ALLOC */
+ ZERO_LCRECORD (d);
#define MARKED_SLOT(x) d->x = zap;
#include "devslots.h"
@@ -201,11 +197,7 @@ static struct device *
allocate_device (Lisp_Object console)
{
Lisp_Object device;
-#ifdef MC_ALLOC
- struct device *d = alloc_lrecord_type (struct device, &lrecord_device);
-#else /* not MC_ALLOC */
- struct device *d = alloc_lcrecord_type (struct device, &lrecord_device);
-#endif /* not MC_ALLOC */
+ struct device *d = ALLOC_LCRECORD_TYPE (struct device, &lrecord_device);
struct gcpro gcpro1;
device = wrap_device (d);
@@ -981,7 +973,7 @@ If DEVICE is nil, the selected device wi
DEFUN ("device-class", Fdevice_class, 0, 1, 0, /*
Return the class (color behavior) of DEVICE.
-This will be one of 'color, 'grayscale, or 'mono.
+This will be one of `color', `grayscale', or `mono'.
*/
(device))
{
@@ -990,7 +982,7 @@ This will be one of 'color, 'grayscale,
DEFUN ("set-device-class", Fset_device_class, 2, 2, 0, /*
Set the class (color behavior) of DEVICE.
-CLASS should be one of 'color, 'grayscale, or 'mono.
+CLASS should be one of `color', `grayscale', or `mono'.
This is only allowed on device such as TTY devices, where the color
behavior cannot necessarily be determined automatically.
*/
@@ -1302,7 +1294,7 @@ window_system_pixelated_geometry (Lisp_O
}
DEFUN ("domain-device-type", Fdomain_device_type, 0, 1, 0, /*
-Return the device type symbol for a DOMAIN, e.g. 'x or 'tty.
+Return the device type symbol for a DOMAIN, e.g. `x' or `tty'.
DOMAIN can be either a window, frame, device or console.
*/
(domain))
1.31.2.3 +1 -6 XEmacs/xemacs/src/dialog-msw.c
Index: dialog-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/dialog-msw.c,v
retrieving revision 1.31.2.2
retrieving revision 1.31.2.3
diff -u -p -r1.31.2.2 -r1.31.2.3
--- dialog-msw.c 2005/07/13 04:46:33 1.31.2.2
+++ dialog-msw.c 2005/11/06 16:14:41 1.31.2.3
@@ -751,13 +751,8 @@ handle_question_dialog_box (struct frame
Lisp_Object dialog_data;
int i;
struct mswindows_dialog_id *did =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct mswindows_dialog_id,
- &lrecord_mswindows_dialog_id);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (struct mswindows_dialog_id,
+ ALLOC_LCRECORD_TYPE (struct mswindows_dialog_id,
&lrecord_mswindows_dialog_id);
-#endif /* not MC_ALLOC */
dialog_data = wrap_mswindows_dialog_id (did);
1.34.2.1 +7 -7 XEmacs/xemacs/src/doc.c
Index: doc.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/doc.c,v
retrieving revision 1.34
retrieving revision 1.34.2.1
diff -u -p -r1.34 -r1.34.2.1
--- doc.c 2004/11/04 23:06:21 1.34
+++ doc.c 2005/11/06 16:14:42 1.34.2.1
@@ -793,7 +793,7 @@ thus, \\=\\=\\=\\= puts \\=\\= into the
Bytecount strlength;
Bytecount idx;
Bytecount bsize;
- Ibyte *new;
+ Ibyte *new_;
Lisp_Object tem = Qnil;
Lisp_Object keymap = Qnil;
Lisp_Object name = Qnil;
@@ -904,9 +904,9 @@ thus, \\=\\=\\=\\= puts \\=\\= into the
if (NILP (tem)) /* but not on any keys */
{
- new = (Ibyte *) xrealloc (buf, bsize += 4);
- bufp += new - buf;
- buf = new;
+ new_ = (Ibyte *) xrealloc (buf, bsize += 4);
+ bufp += new_ - buf;
+ buf = new_;
memcpy (bufp, "M-x ", 4);
bufp += 4;
goto subst;
@@ -978,9 +978,9 @@ thus, \\=\\=\\=\\= puts \\=\\= into the
length = XSTRING_LENGTH (tem);
subst:
bsize += length;
- new = (Ibyte *) xrealloc (buf, bsize);
- bufp += new - buf;
- buf = new;
+ new_ = (Ibyte *) xrealloc (buf, bsize);
+ bufp += new_ - buf;
+ buf = new_;
memcpy (bufp, start, length);
bufp += length;
1.8.2.1 +3 -3 XEmacs/xemacs/src/dragdrop.c
Index: dragdrop.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/dragdrop.c,v
retrieving revision 1.8
retrieving revision 1.8.2.1
diff -u -p -r1.8 -r1.8.2.1
--- dragdrop.c 2004/11/04 23:06:21 1.8
+++ dragdrop.c 2005/11/06 16:14:42 1.8.2.1
@@ -34,10 +34,10 @@ Boston, MA 02111-1307, USA. */
defined in ../lisp/dragdrop.el.
The object of the misc-user-event has the following format:
( TYPE . DATA )
- TYPE is one of 'dragdrop-MIME and 'dragdrop-URL
- DATA - if TYPE is 'dragdrop-URL, DATA is a list of valid URL strings. It
+ TYPE is one of `dragdrop-MIME' and `dragdrop-URL'
+ DATA - if TYPE is `dragdrop-URL', DATA is a list of valid URL strings. It
is always a list, also if only one URL string is within it.
- - if TYPE is 'dragdrop-MIME, DATA is a list of MIME elements.
+ - if TYPE is `dragdrop-MIME', DATA is a list of MIME elements.
Each can be a string or a list.
if it is a string it is the pure MIME data complete with header
and body.
1.20.2.5 +2 -2 XEmacs/xemacs/src/dumper.c
Index: dumper.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/dumper.c,v
retrieving revision 1.20.2.4
retrieving revision 1.20.2.5
diff -u -p -r1.20.2.4 -r1.20.2.5
--- dumper.c 2005/09/20 16:06:03 1.20.2.4
+++ dumper.c 2005/11/06 16:14:42 1.20.2.5
@@ -2169,7 +2169,7 @@ pdump_load_finish (void)
if (count == 2)
{
mc_addr = (Rawbyte *) mc_alloc (real_size);
-#ifdef MC_ALLOC_TYPE_STATS
+#ifdef ALLOC_TYPE_STATS
inc_lrecord_stats (real_size,
(const struct lrecord_header *)
((char *) rdata + delta));
@@ -2178,7 +2178,7 @@ pdump_load_finish (void)
== lrecord_type_string)
inc_lrecord_string_data_stats
(((Lisp_String *) ((char *) rdata + delta))->size_);
-#endif /* not MC_ALLOC_TYPE_STATS */
+#endif /* ALLOC_TYPE_STATS */
}
else
mc_addr = (Rawbyte *) xmalloc_and_zero (real_size);
1.37.2.4 +4 -18 XEmacs/xemacs/src/elhash.c
Index: elhash.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/elhash.c,v
retrieving revision 1.37.2.3
retrieving revision 1.37.2.4
diff -u -p -r1.37.2.3 -r1.37.2.4
--- elhash.c 2005/07/13 04:46:34 1.37.2.3
+++ elhash.c 2005/11/06 16:14:42 1.37.2.4
@@ -102,11 +102,7 @@ typedef struct htentry
struct Lisp_Hash_Table
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Elemcount size;
Elemcount count;
Elemcount rehash_count;
@@ -554,11 +550,7 @@ make_general_lisp_hash_table (hash_table
enum hash_table_weakness weakness)
{
Lisp_Object hash_table;
-#ifdef MC_ALLOC
- Lisp_Hash_Table *ht = alloc_lrecord_type (Lisp_Hash_Table, &lrecord_hash_table);
-#else /* not MC_ALLOC */
- Lisp_Hash_Table *ht = alloc_lcrecord_type (Lisp_Hash_Table,
&lrecord_hash_table);
-#endif /* not MC_ALLOC */
+ Lisp_Hash_Table *ht = ALLOC_LCRECORD_TYPE (Lisp_Hash_Table,
&lrecord_hash_table);
ht->test_function = test_function;
ht->hash_function = hash_function;
@@ -975,14 +967,8 @@ The keys and values will not themselves
(hash_table))
{
const Lisp_Hash_Table *ht_old = xhash_table (hash_table);
-#ifdef MC_ALLOC
- Lisp_Hash_Table *ht = alloc_lrecord_type (Lisp_Hash_Table, &lrecord_hash_table);
-
- copy_lrecord (ht, ht_old);
-#else /* not MC_ALLOC */
- Lisp_Hash_Table *ht = alloc_lcrecord_type (Lisp_Hash_Table,
&lrecord_hash_table);
- copy_lcrecord (ht, ht_old);
-#endif /* not MC_ALLOC */
+ Lisp_Hash_Table *ht = ALLOC_LCRECORD_TYPE (Lisp_Hash_Table,
&lrecord_hash_table);
+ COPY_LCRECORD (ht, ht_old);
ht->hentries = xnew_array (htentry, ht_old->size + 1);
memcpy (ht->hentries, ht_old->hentries, (ht_old->size + 1) * sizeof
(htentry));
1.150.2.8 +19 -18 XEmacs/xemacs/src/emacs.c
Index: emacs.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/emacs.c,v
retrieving revision 1.150.2.7
retrieving revision 1.150.2.8
diff -u -p -r1.150.2.7 -r1.150.2.8
--- emacs.c 2005/09/24 14:02:34 1.150.2.7
+++ emacs.c 2005/11/06 16:14:43 1.150.2.8
@@ -2,7 +2,7 @@
Copyright (C) 1985, 1986, 1987, 1992, 1993, 1994
Free Software Foundation, Inc.
Copyright (C) 1995 Sun Microsystems, Inc.
- Copyright (C) 2000, 2001, 2002, 2003, 2004 Ben Wing.
+ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Ben Wing.
This file is part of XEmacs.
@@ -919,9 +919,9 @@ main_1 (int argc, Wexttext **argv, Wextt
if (!restart)
{
init_mc_allocator ();
-#ifdef MC_ALLOC_TYPE_STATS
+#ifdef ALLOC_TYPE_STATS
init_lrecord_stats ();
-#endif /* not MC_ALLOC_TYPE_STATS */
+#endif /* ALLOC_TYPE_STATS */
}
}
#endif /* MC_ALLOC */
@@ -1220,16 +1220,16 @@ main_1 (int argc, Wexttext **argv, Wextt
This requires inserting a new element into argv. */
if (dpy != 0 && skip_args - count_before == 1)
{
- Wexttext **new = xnew_array (Wexttext *, argc + 2);
+ Wexttext **new_ = xnew_array (Wexttext *, argc + 2);
int j;
for (j = 0; j < count_before + 1; j++)
- new[j] = argv[j];
- new[count_before + 1] = WEXTSTRING ("-d");
- new[count_before + 2] = dpy;
+ new_[j] = argv[j];
+ new_[count_before + 1] = WEXTSTRING ("-d");
+ new_[count_before + 2] = dpy;
for (j = count_before + 2; j <argc; j++)
- new[j + 1] = argv[j];
- argv = new;
+ new_[j + 1] = argv[j];
+ argv = new_;
argc++;
}
/* Change --display to -d, when its arg is separate. */
@@ -1981,7 +1981,8 @@ main_1 (int argc, Wexttext **argv, Wextt
- make_int()
- make_char()
- make_extent()
- - basic_alloc_lcrecord()
+ - BASIC_ALLOC_LCRECORD()
+ - ALLOC_LCRECORD_TYPE()
- Fcons()
- listN()
- make_lcrecord_list()
@@ -2935,7 +2936,7 @@ DEFUN_NORETURN ("run-emacs-from-temacs",
Do not call this. It will reinitialize your XEmacs. You'll be sorry.
*/
/* If this function is called from startup.el, it will be possible to run
- temacs as an editor using 'temacs -batch -l loadup.el run-temacs', instead
+ temacs as an editor using `temacs -batch -l loadup.el run-temacs', instead
of having to dump an emacs and then run that (when debugging emacs itself,
this can be much faster)). [Actually, the speed difference isn't that
much as long as your filesystem is local, and you don't end up with
@@ -3494,17 +3495,17 @@ shut_down_emacs (int sig, Lisp_Object st
"the crash anyway.\n\n"
#ifdef INFODOCK
"Please report this bug by selecting `Report-Bug' in the InfoDock menu,
or\n"
-"(last resort) by emailing `crashes(a)xemacs.org' -- note that this is for
XEmacs\n"
-"in general, not just Infodock."
+"(last resort) by emailing `xemacs-beta(a)xemacs.org' -- note that this is
for\n"
+"XEmacs in general, not just Infodock."
#else
"Please report this bug by invoking M-x report-emacs-bug, or by selecting\n"
"`Send Bug Report' from the Help menu. If that won't work, send
ordinary\n"
-"email to `crashes(a)xemacs.org'."
+"email to `xemacs-beta(a)xemacs.org'."
#endif
-" *MAKE SURE* to include this entire output\n"
-"from this crash, especially including the Lisp backtrace, as well as the\n"
-"XEmacs configuration from M-x describe-installation (or equivalently,
the\n"
-"file `Installation' in the top of the build tree).\n"
+" *MAKE SURE* to include this entire\n"
+"output from this crash, especially including the Lisp backtrace, as well
as\n"
+"the XEmacs configuration from M-x describe-installation (or
equivalently,\n"
+"the file `Installation' in the top of the build tree).\n"
#ifdef _MSC_VER
"\n"
"If you are fortunate enough to have some sort of debugging aid installed\n"
1.83.2.4 +7 -7 XEmacs/xemacs/src/eval.c
Index: eval.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/eval.c,v
retrieving revision 1.83.2.3
retrieving revision 1.83.2.4
diff -u -p -r1.83.2.3 -r1.83.2.4
--- eval.c 2005/04/11 06:13:43 1.83.2.3
+++ eval.c 2005/11/06 16:14:43 1.83.2.4
@@ -203,7 +203,7 @@ struct backtrace *backtrace_list;
array of `struct specbinding's, grown (using realloc()) as
necessary. (Note that all four of these lists behave as a stacks.)
- Catches are created by declaring a 'struct catchtag' locally,
+ Catches are created by declaring a `struct catchtag' locally,
filling the .TAG field in with the tag, and doing a setjmp() on
.JMP. Fthrow() will store the value passed to it in .VAL and
longjmp() back to .JMP, back to the function that established the
@@ -479,7 +479,7 @@ call_debugger_259 (Lisp_Object arg)
as a backtrace is displayed, so that further errors can indeed be
handled normally.
- We also establish a catch for 'debugger. If the debugger function
+ We also establish a catch for `debugger'. If the debugger function
throws to this instead of returning a value, it means that the user
pressed 'c' (pretend like the debugger was never entered). The
function then returns Qunbound. (If the user pressed 'r', for
@@ -549,7 +549,7 @@ do_debug_on_exit (Lisp_Object val)
/* Called when debug-on-call behavior is called for. Enter the debugger
with the appropriate args for this. VAL is either t for a call
- through `eval' or 'lambda for a call through `funcall'.
+ through `eval' or `lambda' for a call through `funcall'.
#### The differentiation here between EVAL and FUNCALL is bogus.
FUNCALL can be defined as
@@ -1656,14 +1656,14 @@ throw_or_bomb_out (Lisp_Object tag, Lisp
/* If bomb_out_p is t, this is being called from Fsignal as a
"last resort" when there is no handler for this error and
the debugger couldn't be invoked, so we are throwing to
- 'top-level. If this tag doesn't exist (happens during the
+ `top-level'. If this tag doesn't exist (happens during the
initialization stages) we would get in an infinite recursive
Fsignal/Fthrow loop, so instead we bomb out to the
really-early-error-handler.
Note that in fact the only time that the "last resort"
- occurs is when there's no catch for 'top-level -- the
- 'top-level catch and the catch-all error handler are
+ occurs is when there's no catch for `top-level' -- the
+ `top-level' catch and the catch-all error handler are
established at the same time, in initial_command_loop/
top_level_1.
@@ -2385,7 +2385,7 @@ user invokes the "return from signal" op
#### The only time that no handler is present is during
temacs or perhaps very early in XEmacs. In both cases,
- there is no 'top-level catch. (That's why the
+ there is no `top-level' catch. (That's why the
"bomb-out" hack was added.)
[[#### Fix this horrifitude!]]
1.100.2.4 +4 -4 XEmacs/xemacs/src/event-msw.c
Index: event-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/event-msw.c,v
retrieving revision 1.100.2.3
retrieving revision 1.100.2.4
diff -u -p -r1.100.2.3 -r1.100.2.4
--- event-msw.c 2005/09/20 16:06:04 1.100.2.3
+++ event-msw.c 2005/11/06 16:14:44 1.100.2.4
@@ -1,7 +1,7 @@
/* The mswindows event_stream interface.
Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
Copyright (C) 1995 Sun Microsystems, Inc.
- Copyright (C) 1996, 2000, 2001, 2002, 2003 Ben Wing.
+ Copyright (C) 1996, 2000, 2001, 2002, 2003, 2005 Ben Wing.
Copyright (C) 1997 Jonathan Harris.
This file is part of XEmacs.
@@ -1797,11 +1797,11 @@ dde_eval (Lisp_Object str)
/* A list of DDE advise tokens. Each token is an uninterned symbol,
* whose value is the DDE string handle for its name (stored as a float,
* as a Lisp int cannot hold a full C int).
- * The token's 'dde-data property is used to store data for a dde-advise.
+ * The token's `dde-data' property is used to store data for a dde-advise.
*/
Lisp_Object Vdde_advise_items;
-/* The symbol 'HSZ */
+/* The symbol `HSZ' */
Lisp_Object QHSZ;
DEFUN("dde-alloc-advise-item", Fdde_alloc_advise_item, 0, 1, 0, /*
@@ -5058,7 +5058,7 @@ Each item is an uninterned symbol, creat
The symbol's value is the data which is returned to the DDE client when
a request for the item is made (or a dde-advise call is made).
-The symbol also has a 'HSZ property, which holds the DDE string handle
+The symbol also has a `HSZ' property, which holds the DDE string handle
for the item, as a float. This is for internal use only, and should not
be modified.
*/ );
1.86.2.4 +4 -4 XEmacs/xemacs/src/event-stream.c
Index: event-stream.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/event-stream.c,v
retrieving revision 1.86.2.3
retrieving revision 1.86.2.4
diff -u -p -r1.86.2.3 -r1.86.2.4
--- event-stream.c 2005/09/20 16:06:05 1.86.2.3
+++ event-stream.c 2005/11/06 16:14:44 1.86.2.4
@@ -3082,7 +3082,7 @@ execute_internal_event (Lisp_Object even
continuous stream of process events for them. Since we don't
return until all process events have been flushed, we would
get stuck here, processing events on a process whose status
- was 'exit. Call this after dispatch-event, or the fds will
+ was `exit'. Call this after dispatch-event, or the fds will
have been closed before we read the last data from them.
It's safe for the filter to signal an error because
status_notify() will be called on return to top-level.
@@ -3892,10 +3892,10 @@ reset_this_command_keys (Lisp_Object con
static void
push_this_command_keys (Lisp_Object event)
{
- Lisp_Object new = Fmake_event (Qnil, Qnil);
+ Lisp_Object new_ = Fmake_event (Qnil, Qnil);
- Fcopy_event (event, new);
- enqueue_event (new, &Vthis_command_keys, &Vthis_command_keys_tail);
+ Fcopy_event (event, new_);
+ enqueue_event (new_, &Vthis_command_keys, &Vthis_command_keys_tail);
}
/* The following two functions are used in call-interactively,
1.62.2.4 +1 -1 XEmacs/xemacs/src/events.c
Index: events.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/events.c,v
retrieving revision 1.62.2.3
retrieving revision 1.62.2.4
diff -u -p -r1.62.2.3 -r1.62.2.4
--- events.c 2005/09/20 16:06:05 1.62.2.3
+++ events.c 2005/11/06 16:14:45 1.62.2.4
@@ -1418,7 +1418,7 @@ second. This function contains knowledg
arguments ``mean'' -- for example, the number 9 is converted to the
character ``Tab'', not the distinct character ``Control-I''.
-KEY-DESCRIPTION can be an integer, a character, a symbol such as 'clear,
+KEY-DESCRIPTION can be an integer, a character, a symbol such as `clear',
or a list such as '(control backspace).
If the optional second argument EVENT is an event, it is modified and
1.39.2.3 +2 -10 XEmacs/xemacs/src/events.h
Index: events.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/events.h,v
retrieving revision 1.39.2.2
retrieving revision 1.39.2.3
diff -u -p -r1.39.2.2 -r1.39.2.3
--- events.h 2005/09/20 16:06:06 1.39.2.2
+++ events.h 2005/11/06 16:14:45 1.39.2.3
@@ -660,11 +660,7 @@ DECLARE_LRECORD (magic_data, Lisp_Magic_
struct Lisp_Timeout
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
int id; /* Id we use to identify the timeout over its lifetime */
int interval_id; /* Id for this particular interval; this may
be different each time the timeout is
@@ -1113,11 +1109,7 @@ void event_stream_unixoid_delete_io_stre
*/
struct command_builder
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object console; /* back pointer to the console this command
builder is for */
#if 0
1.1.6.2 +2 -10 XEmacs/xemacs/src/extents-impl.h
Index: extents-impl.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/extents-impl.h,v
retrieving revision 1.1.6.1
retrieving revision 1.1.6.2
diff -u -p -r1.1.6.1 -r1.1.6.2
--- extents-impl.h 2005/07/13 04:46:38 1.1.6.1
+++ extents-impl.h 2005/11/06 16:14:45 1.1.6.2
@@ -103,11 +103,7 @@ struct extent
typedef struct extent_auxiliary extent_auxiliary;
struct extent_auxiliary
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object begin_glyph;
Lisp_Object end_glyph;
@@ -133,11 +129,7 @@ extern struct extent_auxiliary extent_au
struct extent_info
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
struct extent_list *extents;
struct stack_of_extents *soe;
1.53.2.4 +16 -36 XEmacs/xemacs/src/extents.c
Index: extents.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/extents.c,v
retrieving revision 1.53.2.3
retrieving revision 1.53.2.4
diff -u -p -r1.53.2.3 -r1.53.2.4
--- extents.c 2005/09/20 16:06:06 1.53.2.3
+++ extents.c 2005/11/06 16:14:46 1.53.2.4
@@ -986,17 +986,9 @@ void
allocate_extent_auxiliary (EXTENT ext)
{
Lisp_Object extent_aux;
-#ifdef MC_ALLOC
struct extent_auxiliary *data =
- alloc_lrecord_type (struct extent_auxiliary, &lrecord_extent_auxiliary);
-
- copy_lrecord (data, &extent_auxiliary_defaults);
-#else /* not MC_ALLOC */
- struct extent_auxiliary *data =
- alloc_lcrecord_type (struct extent_auxiliary, &lrecord_extent_auxiliary);
-
- copy_lcrecord (data, &extent_auxiliary_defaults);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (struct extent_auxiliary, &lrecord_extent_auxiliary);
+ COPY_LCRECORD (data, &extent_auxiliary_defaults);
extent_aux = wrap_extent_auxiliary (data);
ext->plist = Fcons (extent_aux, ext->plist);
ext->flags.has_aux = 1;
@@ -1174,11 +1166,7 @@ allocate_extent_info (void)
{
Lisp_Object extent_info;
struct extent_info *data =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct extent_info, &lrecord_extent_info);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (struct extent_info, &lrecord_extent_info);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (struct extent_info, &lrecord_extent_info);
extent_info = wrap_extent_info (data);
data->extents = allocate_extent_list ();
@@ -3745,10 +3733,10 @@ See `extent-parent'.
Dynarr_length (newprops), sizeof (Lisp_Object_pair),
compare_key_value_pairs))
{
- Lisp_Object_pair new;
- new.key = Dynarr_at (oldprops, i).key;
- new.value = Qunbound;
- Dynarr_add (newprops, new);
+ Lisp_Object_pair new_;
+ new_.key = Dynarr_at (oldprops, i).key;
+ new_.value = Qunbound;
+ Dynarr_add (newprops, new_);
}
}
for (i = 0; i < orignewlength; i++)
@@ -3759,10 +3747,10 @@ See `extent-parent'.
sizeof (Lisp_Object_pair),
compare_key_value_pairs))
{
- Lisp_Object_pair new;
- new.key = Dynarr_at (newprops, i).key;
- new.value = Qunbound;
- Dynarr_add (oldprops, new);
+ Lisp_Object_pair new_;
+ new_.key = Dynarr_at (newprops, i).key;
+ new_.value = Qunbound;
+ Dynarr_add (oldprops, new_);
}
}
qsort (Dynarr_atp (oldprops, 0), Dynarr_length (oldprops),
@@ -3909,19 +3897,11 @@ copy_extent (EXTENT original, Bytexpos f
/* also need to copy the aux struct. It won't work for
this extent to share the same aux struct as the original
one. */
-#ifdef MC_ALLOC
- struct extent_auxiliary *data =
- alloc_lrecord_type (struct extent_auxiliary,
- &lrecord_extent_auxiliary);
-
- copy_lrecord (data, XEXTENT_AUXILIARY (XCAR (original->plist)));
-#else /* not MC_ALLOC */
struct extent_auxiliary *data =
- alloc_lcrecord_type (struct extent_auxiliary,
+ ALLOC_LCRECORD_TYPE (struct extent_auxiliary,
&lrecord_extent_auxiliary);
- copy_lcrecord (data, XEXTENT_AUXILIARY (XCAR (original->plist)));
-#endif /* not MC_ALLOC */
+ COPY_LCRECORD (data, XEXTENT_AUXILIARY (XCAR (original->plist)));
XCAR (e->plist) = wrap_extent_auxiliary (data);
}
@@ -6545,7 +6525,7 @@ get_char_property (Bytexpos position, Li
Lisp_Object extent;
/* text_props_only specifies whether we only consider text-property
- extents (those with the 'text-prop property set) or all extents. */
+ extents (those with the `text-prop' property set) or all extents. */
if (!text_props_only)
extent = extent_at (position, object, prop, 0, fl, 0);
else
@@ -6685,8 +6665,8 @@ put_text_prop_mapper (EXTENT e, void *ar
extent = wrap_extent (e);
- /* Note: in some cases when the property itself is 'start-open
- or 'end-closed, the checks to set the openness may do a bit
+ /* Note: in some cases when the property itself is `start-open'
+ or `end-closed', the checks to set the openness may do a bit
of extra work; but it won't hurt because we then fix up the
openness later on in put_text_prop_openness_mapper(). */
if (!EQ (Fextent_property (extent, Qtext_prop, Qnil), closure->prop))
1.43.2.8 +1 -5 XEmacs/xemacs/src/faces.c
Index: faces.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/faces.c,v
retrieving revision 1.43.2.7
retrieving revision 1.43.2.8
diff -u -p -r1.43.2.7 -r1.43.2.8
--- faces.c 2005/09/20 16:06:06 1.43.2.7
+++ faces.c 2005/11/06 16:14:46 1.43.2.8
@@ -373,11 +373,7 @@ reset_face (Lisp_Face *f)
static Lisp_Face *
allocate_face (void)
{
-#ifdef MC_ALLOC
- Lisp_Face *result = alloc_lrecord_type (Lisp_Face, &lrecord_face);
-#else /* not MC_ALLOC */
- Lisp_Face *result = alloc_lcrecord_type (Lisp_Face, &lrecord_face);
-#endif /* not MC_ALLOC */
+ Lisp_Face *result = ALLOC_LCRECORD_TYPE (Lisp_Face, &lrecord_face);
reset_face (result);
return result;
1.12.8.4 +1 -5 XEmacs/xemacs/src/faces.h
Index: faces.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/faces.h,v
retrieving revision 1.12.8.3
retrieving revision 1.12.8.4
diff -u -p -r1.12.8.3 -r1.12.8.4
--- faces.h 2005/07/13 04:46:41 1.12.8.3
+++ faces.h 2005/11/06 16:14:46 1.12.8.4
@@ -33,11 +33,7 @@ Boston, MA 02111-1307, USA. */
struct Lisp_Face
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object name;
Lisp_Object doc_string;
1.41.2.4 +76 -85 XEmacs/xemacs/src/file-coding.c
Index: file-coding.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/file-coding.c,v
retrieving revision 1.41.2.3
retrieving revision 1.41.2.4
diff -u -p -r1.41.2.3 -r1.41.2.4
--- file-coding.c 2005/09/20 16:06:07 1.41.2.3
+++ file-coding.c 2005/11/06 16:14:46 1.41.2.4
@@ -2,7 +2,7 @@
#### rename me to coding-system.c or coding.c
Copyright (C) 1991, 1995 Free Software Foundation, Inc.
Copyright (C) 1995 Sun Microsystems, Inc.
- Copyright (C) 2000, 2001, 2002, 2003 Ben Wing.
+ Copyright (C) 2000, 2001, 2002, 2003, 2005 Ben Wing.
This file is part of XEmacs.
@@ -406,8 +406,8 @@ valid_coding_system_type_p (Lisp_Object
DEFUN ("valid-coding-system-type-p", Fvalid_coding_system_type_p, 1, 1, 0,
/*
Given a CODING-SYSTEM-TYPE, return non-nil if it is valid.
Valid types depend on how XEmacs was compiled but may include
-'undecided, 'chain, 'integer, 'ccl, 'iso2022, 'big5,
'shift-jis,
-'utf-16, 'ucs-4, 'utf-8, etc.
+`undecided', `chain', `integer', `ccl', `iso2022', `big5',
`shift-jis',
+`utf-16', `ucs-4', `utf-8', etc.
*/
(coding_system_type))
{
@@ -698,13 +698,8 @@ allocate_coding_system (struct coding_sy
{
Bytecount total_size = offsetof (Lisp_Coding_System, data) + data_size;
Lisp_Coding_System *codesys =
-#ifdef MC_ALLOC
- (Lisp_Coding_System *) alloc_lrecord (total_size,
- &lrecord_coding_system);
-#else /* not MC_ALLOC */
- (Lisp_Coding_System *) basic_alloc_lcrecord (total_size,
+ (Lisp_Coding_System *) BASIC_ALLOC_LCRECORD (total_size,
&lrecord_coding_system);
-#endif /* not MC_ALLOC */
codesys->methods = codesys_meths;
#define MARKED_SLOT(x) codesys->x = Qnil;
@@ -1049,54 +1044,54 @@ Register symbol NAME as a coding system.
TYPE describes the conversion method used and should be one of
-nil or 'undecided
+nil or `undecided'
Automatic conversion. XEmacs attempts to detect the coding system
used in the file.
-'chain
+`chain'
Chain two or more coding systems together to make a combination coding
system.
-'no-conversion
+`no-conversion'
No conversion. Use this for binary files and such. On output,
graphic characters that are not in ASCII or Latin-1 will be
replaced by a ?. (For a no-conversion-encoded buffer, these
characters will only be present if you explicitly insert them.)
-'convert-eol
+`convert-eol'
Convert CRLF sequences or CR to LF.
-'shift-jis
+`shift-jis'
Shift-JIS (a Japanese encoding commonly used in PC operating systems).
-'unicode
+`unicode'
Any Unicode encoding (UCS-4, UTF-8, UTF-16, etc.).
-'mswindows-unicode-to-multibyte
+`mswindows-unicode-to-multibyte'
(MS Windows only) Converts from Windows Unicode to Windows Multibyte
(any code page encoding) upon encoding, and the other way upon decoding.
-'mswindows-multibyte
+`mswindows-multibyte'
Converts to or from Windows Multibyte (any code page encoding).
This is resolved into a chain of `mswindows-unicode' and
`mswindows-unicode-to-multibyte'.
-'iso2022
+`iso2022'
Any ISO2022-compliant encoding. Among other things, this includes
JIS (the Japanese encoding commonly used for e-mail), EUC (the
standard Unix encoding for Japanese and other languages), and
Compound Text (the encoding used in X11). You can specify more
specific information about the conversion with the PROPS argument.
-'big5
+`big5'
Big5 (the encoding commonly used for Mandarin Chinese in Taiwan).
-'ccl
+`ccl'
The conversion is performed using a user-written pseudo-code
program. CCL (Code Conversion Language) is the name of this
pseudo-code.
-'gzip
+`gzip'
GZIP compression format.
-'internal
+`internal'
Write out or read in the raw contents of the memory representing
the buffer's text. This is primarily useful for debugging
purposes, and is only enabled when XEmacs has been compiled with
DEBUG_XEMACS defined (via the --debug configure option).
- WARNING: Reading in a file using 'internal conversion can result
+ WARNING: Reading in a file using `internal' conversion can result
in an internal inconsistency in the memory representing a
buffer's text, which will produce unpredictable results and may
cause XEmacs to crash. Under normal circumstances you should
- never use 'internal conversion.
+ never use `internal' conversion.
DESCRIPTION is a short English phrase describing the coding system,
suitable for use as a menu item. (See also the `documentation' property
@@ -1105,14 +1100,14 @@ below.)
PROPS is a property list, describing the specific nature of the
character set. Recognized properties are:
-'mnemonic
+`mnemonic'
String to be displayed in the modeline when this coding system is
active.
-'documentation
+`documentation'
Detailed documentation on the coding system.
-'eol-type
+`eol-type'
End-of-line conversion to be used. It should be one of
nil
@@ -1120,18 +1115,18 @@ character set. Recognized properties ar
or CR). Also generate subsidiary coding systems named
`NAME-unix', `NAME-dos', and `NAME-mac', that are
identical to this coding system but have an EOL-TYPE
- value of 'lf, 'crlf, and 'cr, respectively.
- 'lf
+ value of `lf', `crlf', and `cr', respectively.
+ `lf'
The end of a line is marked externally using ASCII LF.
Since this is also the way that XEmacs represents an
end-of-line internally, specifying this option results
in no end-of-line conversion. This is the standard
format for Unix text files.
- 'crlf
+ `crlf'
The end of a line is marked externally using ASCII
CRLF. This is the standard format for MS-DOS text
files.
- 'cr
+ `cr'
The end of a line is marked externally using ASCII CR.
This is the standard format for Macintosh text files.
t
@@ -1140,7 +1135,7 @@ character set. Recognized properties ar
converted to nil when stored internally, and
`coding-system-property' will return nil.)
-'post-read-conversion
+`post-read-conversion'
The value is a function to call after some text is inserted and
decoded by the coding system itself and before any functions in
`after-change-functions' are called. (#### Not actually true in
@@ -1150,7 +1145,7 @@ character set. Recognized properties ar
`after-insert-file-functions', i.e. LENGTH of the text inserted,
with point at the head of the text to be decoded.
-'pre-write-conversion
+`pre-write-conversion'
The value is a function to call after all functions in
`write-region-annotate-functions' and `buffer-file-format' are
called, and before the text is encoded by the coding system itself.
@@ -1163,21 +1158,21 @@ character set. Recognized properties ar
The following properties are allowed for FSF compatibility but currently
ignored:
-'translation-table-for-decode
+`translation-table-for-decode'
The value is a translation table to be applied on decoding. See
the function `make-translation-table' for the format of translation
table. This is not applicable to CCL-based coding systems.
-'translation-table-for-encode
+`translation-table-for-encode'
The value is a translation table to be applied on encoding. This is
not applicable to CCL-based coding systems.
-'safe-chars
+`safe-chars'
The value is a char table. If a character has non-nil value in it,
the character is safely supported by the coding system. This
overrides the specification of safe-charsets.
-'safe-charsets
+`safe-charsets'
The value is a list of charsets safely supported by the coding
system. The value t means that all charsets Emacs handles are
supported. Even if some charset is not in this list, it doesn't
@@ -1185,11 +1180,11 @@ ignored:
it just means that some other receiver of text encoded
in the coding system won't be able to handle that charset.
-'mime-charset
+`mime-charset'
The value is a symbol of which name is `MIME-charset' parameter of
the coding system.
-'valid-codes (meaningful only for a coding system based on CCL)
+`valid-codes' (meaningful only for a coding system based on CCL)
The value is a list to indicate valid byte ranges of the encoded
file. Each element of the list is an integer or a cons of integer.
In the former case, the integer value is a valid byte code. In the
@@ -1197,9 +1192,9 @@ ignored:
-The following additional property is recognized if TYPE is 'convert-eol:
+The following additional property is recognized if TYPE is `convert-eol':
-'subtype
+`subtype'
One of `lf', `crlf', `cr' or nil (for autodetection). When decoding,
the corresponding sequence will be converted to LF. When encoding,
the opposite happens. This coding system converts characters to
@@ -1207,12 +1202,12 @@ The following additional property is rec
-The following additional properties are recognized if TYPE is 'iso2022:
+The following additional properties are recognized if TYPE is `iso2022':
-'charset-g0
-'charset-g1
-'charset-g2
-'charset-g3
+`charset-g0'
+`charset-g1'
+`charset-g2'
+`charset-g3'
The character set initially designated to the G0 - G3 registers.
The value should be one of
@@ -1222,38 +1217,38 @@ The following additional properties are
the register, but may be later on; this automatically
sets the corresponding `force-g*-on-output' property)
-'force-g0-on-output
-'force-g1-on-output
-'force-g2-on-output
-'force-g2-on-output
+`force-g0-on-output'
+`force-g1-on-output'
+`force-g2-on-output'
+`force-g2-on-output'
If non-nil, send an explicit designation sequence on output before
using the specified register.
-'short
+`short'
If non-nil, use the short forms "ESC $ @", "ESC $ A", and
"ESC $ B" on output in place of the full designation sequences
"ESC $ ( @", "ESC $ ( A", and "ESC $ ( B".
-'no-ascii-eol
+`no-ascii-eol'
If non-nil, don't designate ASCII to G0 at each end of line on output.
Setting this to non-nil also suppresses other state-resetting that
normally happens at the end of a line.
-'no-ascii-cntl
+`no-ascii-cntl'
If non-nil, don't designate ASCII to G0 before control chars on output.
-'seven
+`seven'
If non-nil, use 7-bit environment on output. Otherwise, use 8-bit
environment.
-'lock-shift
+`lock-shift'
If non-nil, use locking-shift (SO/SI) instead of single-shift
or designation by escape sequence.
-'no-iso6429
+`no-iso6429'
If non-nil, don't use ISO6429's direction specification.
-'escape-quoted
+`escape-quoted'
If non-nil, literal control characters that are the same as
the beginning of a recognized ISO2022 or ISO6429 escape sequence
(in particular, ESC (0x1B), SO (0x0E), SI (0x0F), SS2 (0x8E),
@@ -1266,44 +1261,44 @@ The following additional properties are
or Control-1 character sets; this is explicitly disallowed by the
ISO2022 standard.
-'input-charset-conversion
+`input-charset-conversion'
A list of conversion specifications, specifying conversion of
characters in one charset to another when decoding is performed.
Each specification is a list of two elements: the source charset,
and the destination charset.
-'output-charset-conversion
+`output-charset-conversion'
A list of conversion specifications, specifying conversion of
characters in one charset to another when encoding is performed.
The form of each specification is the same as for
- 'input-charset-conversion.
+ `input-charset-conversion'.
The following additional properties are recognized (and required)
-if TYPE is 'ccl:
+if TYPE is `ccl':
-'decode
+`decode'
CCL program used for decoding (converting to internal format).
-'encode
+`encode'
CCL program used for encoding (converting to external format).
-The following additional properties are recognized if TYPE is 'chain:
+The following additional properties are recognized if TYPE is `chain':
-'chain
+`chain'
List of coding systems to be chained together, in decoding order.
-'canonicalize-after-coding
+`canonicalize-after-coding'
Coding system to be returned by the detector routines in place of
this coding system.
-The following additional properties are recognized if TYPE is 'unicode:
+The following additional properties are recognized if TYPE is `unicode':
-'type
+`type'
One of `utf-16', `utf-8', `ucs-4', or `utf-7' (the latter is not
yet implemented). `utf-16' is the basic two-byte encoding;
`ucs-4' is the four-byte encoding; `utf-8' is an ASCII-compatible
@@ -1312,12 +1307,12 @@ The following additional properties are
[[ This should be \"transformation format\". There should also be
`ucs-2' (or `bmp' -- no surrogates) and `utf-32' (range checked). ]]
-'little-endian
+`little-endian'
If non-nil, `utf-16' and `ucs-4' will write out the groups of two
or four bytes little-endian instead of big-endian. This is required,
for example, under Windows.
-'need-bom
+`need-bom'
If non-nil, a byte order mark (BOM, or Unicode FFFE) should be
written out at the beginning of the data. This serves both to
identify the endianness of the following data and to mark the
@@ -1327,16 +1322,16 @@ The following additional properties are
The following additional properties are recognized if TYPE is
-'mswindows-multibyte:
+`mswindows-multibyte':
-'code-page
+`code-page'
Either a number (specifying a particular code page) or one of the
symbols `ansi', `oem', `mac', or `ebcdic', specifying the ANSI,
OEM, Macintosh, or EBCDIC code page associated with a particular
locale (given by the `locale' property). NOTE: EBCDIC code pages
only exist in Windows 2000 and later.
-'locale
+`locale'
If `code-page' is a symbol, this specifies the locale whose code
page of the corresponding type should be used. This should be
one of the following: A cons of two strings, (LANGUAGE
@@ -1349,16 +1344,16 @@ The following additional properties are
-The following additional properties are recognized if TYPE is 'undecided:
+The following additional properties are recognized if TYPE is `undecided':
[[ Doesn't GNU use \"detect-*\" for the following two? ]]
-'do-eol
+`do-eol'
Do EOL detection.
-'do-coding
+`do-coding'
Do encoding detection.
-'coding-system
+`coding-system'
If encoding detection is not done, use the specified coding system
to do decoding. This is used internally when implementing coding
systems with an EOL type that specifies autodetection (the default),
@@ -1366,9 +1361,9 @@ The following additional properties are
-The following additional property is recognized if TYPE is 'gzip:
+The following additional property is recognized if TYPE is `gzip':
-'level
+`level'
Compression level: 0 through 9, or `default' (currently 6).
*/
@@ -1409,11 +1404,7 @@ Use `define-coding-system-alias' instead
{
Lisp_Coding_System *to = XCODING_SYSTEM (new_coding_system);
Lisp_Coding_System *from = XCODING_SYSTEM (old_coding_system);
-#ifdef MC_ALLOC
- copy_sized_lrecord (to, from, sizeof_coding_system (from));
-#else /* not MC_ALLOC */
- copy_sized_lcrecord (to, from, sizeof_coding_system (from));
-#endif /* not MC_ALLOC */
+ COPY_SIZED_LCRECORD (to, from, sizeof_coding_system (from));
to->name = new_name;
}
return new_coding_system;
@@ -4073,7 +4064,7 @@ detect_coding_stream (Lisp_Object stream
DEFUN ("detect-coding-region", Fdetect_coding_region, 2, 3, 0, /*
Detect coding system of the text in the region between START and END.
Return a list of possible coding systems ordered by priority.
-If only ASCII characters are found, return 'undecided or one of
+If only ASCII characters are found, return `undecided' or one of
its subsidiary coding systems according to a detected end-of-line
type. Optional arg BUFFER defaults to the current buffer.
*/
1.25.2.2 +1 -5 XEmacs/xemacs/src/file-coding.h
Index: file-coding.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/file-coding.h,v
retrieving revision 1.25.2.1
retrieving revision 1.25.2.2
diff -u -p -r1.25.2.1 -r1.25.2.2
--- file-coding.h 2005/07/13 04:46:42 1.25.2.1
+++ file-coding.h 2005/11/06 16:14:47 1.25.2.2
@@ -188,11 +188,7 @@ enum eol_type
struct Lisp_Coding_System
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
struct coding_system_methods *methods;
#define CODING_SYSTEM_SLOT_DECLARATION
1.61.2.3 +2 -2 XEmacs/xemacs/src/fns.c
Index: fns.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/fns.c,v
retrieving revision 1.61.2.2
retrieving revision 1.61.2.3
diff -u -p -r1.61.2.2 -r1.61.2.3
--- fns.c 2005/07/13 04:46:43 1.61.2.2
+++ fns.c 2005/11/06 16:14:47 1.61.2.3
@@ -3348,11 +3348,11 @@ This is like (copy-sequence NEW) except
conses in OLD as much as possible. If OLD and NEW are the same
length, no consing will take place.
*/
- (old, new))
+ (old, new_))
{
Lisp_Object oldtail = old, prevoldtail = Qnil;
- EXTERNAL_LIST_LOOP_2 (elt, new)
+ EXTERNAL_LIST_LOOP_2 (elt, new_)
{
if (!NILP (oldtail))
{
1.4.2.2 +1 -5 XEmacs/xemacs/src/frame-impl.h
Index: frame-impl.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/frame-impl.h,v
retrieving revision 1.4.2.1
retrieving revision 1.4.2.2
diff -u -p -r1.4.2.1 -r1.4.2.2
--- frame-impl.h 2005/07/13 04:46:45 1.4.2.1
+++ frame-impl.h 2005/11/06 16:14:48 1.4.2.2
@@ -41,11 +41,7 @@ Boston, MA 02111-1307, USA. */
struct frame
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
/* Methods for this frame's console. This can also be retrieved
through frame->device->console, but it's faster this way. */
1.55.2.2 +30 -1 XEmacs/xemacs/src/frame-msw.c
Index: frame-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/frame-msw.c,v
retrieving revision 1.55.2.1
retrieving revision 1.55.2.2
diff -u -p -r1.55.2.1 -r1.55.2.2
--- frame-msw.c 2005/09/20 16:06:08 1.55.2.1
+++ frame-msw.c 2005/11/06 16:14:48 1.55.2.2
@@ -102,6 +102,18 @@ const struct sized_memory_description ms
/*----- DISPLAY FRAME -----*/
/*---------------------------------------------------------------------*/
+static struct frame *
+decode_mswindows_frame (Lisp_Object frame)
+{
+ if (NILP (frame))
+ frame = wrap_frame (selected_frame ());
+ CHECK_LIVE_FRAME (frame);
+ /* this will also catch dead frames, but putting in the above check
+ results in a more useful error */
+ CHECK_MSWINDOWS_FRAME (frame);
+ return XFRAME (frame);
+}
+
HWND
mswindows_get_selected_frame_hwnd (void)
{
@@ -564,6 +576,16 @@ mswindows_set_title_from_ibyte (struct f
}
static Lisp_Object
+mswindows_window_id (Lisp_Object frame)
+{
+ Ibyte str[255];
+ struct frame *f = decode_mswindows_frame (frame);
+
+ qxesprintf (str, "%lu", (unsigned long) FRAME_MSWINDOWS_HANDLE (f));
+ return build_intstring (str);
+}
+
+static Lisp_Object
mswindows_frame_property (struct frame *f, Lisp_Object property)
{
if (EQ (Qleft, property) || EQ (Qtop, property))
@@ -572,6 +594,9 @@ mswindows_frame_property (struct frame *
GetWindowRect (FRAME_MSWINDOWS_HANDLE (f), &rc);
return make_int (EQ (Qtop, property) ? rc.top : rc.left);
}
+ if (EQ (Qwindow_id, property))
+ return mswindows_window_id (wrap_frame (f));
+
return Qunbound;
}
@@ -580,7 +605,8 @@ mswindows_internal_frame_property_p (str
Lisp_Object property)
{
return EQ (property, Qleft)
- || EQ (property, Qtop);
+ || EQ (property, Qtop)
+ || EQ (property, Qwindow_id);
/* #### frame-x.c has also this. Why?
|| STRINGP (property);
*/
@@ -595,6 +621,7 @@ mswindows_frame_properties (struct frame
props = cons3 (Qtop, make_int (rc.top), props);
props = cons3 (Qleft, make_int (rc.left), props);
+ props = cons3 (Qwindow_id, mswindows_window_id (wrap_frame (f)), props);
return props;
}
@@ -1209,6 +1236,8 @@ set at any time, except as otherwise not
outermost corner of the frame (i.e. the
upper-left of the window-manager
decorations).
+ window-id Window handle (HWND) of the frame.
+ Cannot be set.
See also `default-frame-plist', which specifies properties which apply
to all frames, not just mswindows frames.
1.14.2.1 +5 -5 XEmacs/xemacs/src/frame-tty.c
Index: frame-tty.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/frame-tty.c,v
retrieving revision 1.14
retrieving revision 1.14.2.1
diff -u -p -r1.14 -r1.14.2.1
--- frame-tty.c 2004/09/20 19:19:44 1.14
+++ frame-tty.c 2005/11/06 16:14:48 1.14.2.1
@@ -151,7 +151,7 @@ static void
tty_lower_frame (struct frame *f)
{
Lisp_Object frame_list = DEVICE_FRAME_LIST (XDEVICE (FRAME_DEVICE (f)));
- Lisp_Object tail, new;
+ Lisp_Object tail, new_;
if (!FRAME_REPAINT_P (f))
return;
@@ -169,11 +169,11 @@ tty_lower_frame (struct frame *f)
tty_make_frame_hidden (f);
if (CONSP (XCDR (tail)))
- new = XCAR (XCDR (tail));
+ new_ = XCAR (XCDR (tail));
else
- new = XCAR (frame_list);
- tty_make_frame_unhidden (XFRAME (new));
- tty_schedule_frame_select (XFRAME (new));
+ new_ = XCAR (frame_list);
+ tty_make_frame_unhidden (XFRAME (new_));
+ tty_schedule_frame_select (XFRAME (new_));
}
static void
1.65.2.3 +22 -30 XEmacs/xemacs/src/frame.c
Index: frame.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/frame.c,v
retrieving revision 1.65.2.2
retrieving revision 1.65.2.3
diff -u -p -r1.65.2.2 -r1.65.2.3
--- frame.c 2005/07/13 04:46:45 1.65.2.2
+++ frame.c 2005/11/06 16:14:48 1.65.2.3
@@ -1,6 +1,6 @@
/* Generic frame functions.
Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
- Copyright (C) 1995, 1996, 2002, 2003 Ben Wing.
+ Copyright (C) 1995, 1996, 2002, 2003, 2005 Ben Wing.
Copyright (C) 1995 Sun Microsystems, Inc.
This file is part of XEmacs.
@@ -259,11 +259,7 @@ DEFINE_LRECORD_IMPLEMENTATION ("frame",
static void
nuke_all_frame_slots (struct frame *f)
{
-#ifdef MC_ALLOC
- zero_lrecord (f);
-#else /* not MC_ALLOC */
- zero_lcrecord (f);
-#endif /* not MC_ALLOC */
+ ZERO_LCRECORD (f);
#define MARKED_SLOT(x) f->x = Qnil;
#include "frameslots.h"
@@ -279,11 +275,7 @@ allocate_frame_core (Lisp_Object device)
/* This function can GC */
Lisp_Object frame;
Lisp_Object root_window;
-#ifdef MC_ALLOC
- struct frame *f = alloc_lrecord_type (struct frame, &lrecord_frame);
-#else /* not MC_ALLOC */
- struct frame *f = alloc_lcrecord_type (struct frame, &lrecord_frame);
-#endif /* not MC_ALLOC */
+ struct frame *f = ALLOC_LCRECORD_TYPE (struct frame, &lrecord_frame);
nuke_all_frame_slots (f);
frame = wrap_frame (f);
@@ -1302,24 +1294,24 @@ returned.
Possible values for WHICH-FRAMES are
-'visible Consider only frames that are visible.
-'iconic Consider only frames that are iconic.
-'invisible Consider only frames that are invisible
- (this is different from iconic).
-'visible-iconic Consider frames that are visible or iconic.
-'invisible-iconic Consider frames that are invisible or iconic.
-'nomini Consider all frames except minibuffer-only ones.
-'visible-nomini Like `visible' but omits minibuffer-only frames.
-'iconic-nomini Like `iconic' but omits minibuffer-only frames.
-'invisible-nomini Like `invisible' but omits minibuffer-only frames.
-'visible-iconic-nomini Like `visible-iconic' but omits minibuffer-only
- frames.
-'invisible-iconic-nomini Like `invisible-iconic' but omits minibuffer-only
- frames.
-any other value Consider all frames.
+`visible' Consider only frames that are visible.
+`iconic' Consider only frames that are iconic.
+`invisible' Consider only frames that are invisible
+ (this is different from iconic).
+`visible-iconic' Consider frames that are visible or iconic.
+`invisible-iconic' Consider frames that are invisible or iconic.
+`nomini' Consider all frames except minibuffer-only ones.
+`visible-nomini' Like `visible' but omits minibuffer-only frames.
+`iconic-nomini' Like `iconic' but omits minibuffer-only frames.
+`invisible-nomini' Like `invisible' but omits minibuffer-only frames.
+`visible-iconic-nomini' Like `visible-iconic' but omits minibuffer-only
+ frames.
+`invisible-iconic-nomini' Like `invisible-iconic' but omits minibuffer-only
+ frames.
+any other value Consider all frames.
-If WHICH-FRAMES is omitted, 'nomini is used. A value for WHICH-FRAMES
-of 0 (a number) is treated like 'iconic, for backwards compatibility.
+If WHICH-FRAMES is omitted, `nomini' is used. A value for WHICH-FRAMES
+of 0 (a number) is treated like `iconic', for backwards compatibility.
If WHICH-FRAMES is a window, include only its own frame and any frame
now using that window as the minibuffer.
@@ -2103,14 +2095,14 @@ Also raises the frame so that nothing ob
return Fmake_frame_visible (frame);
}
-/* FSF returns 'icon for iconized frames. What a crock! */
+/* FSF returns `icon' for iconized frames. What a crock! */
DEFUN ("frame-visible-p", Fframe_visible_p, 0, 1, 0, /*
Return non NIL if FRAME is now "visible" (actually in use for display).
A frame that is not visible is not updated, and, if it works through a
window system, may not show at all.
N.B. Under X "visible" means Mapped. It the window is mapped but not
-actually visible on screen then `frame-visible-p' returns 'hidden.
+actually visible on screen then `frame-visible-p' returns `hidden'.
*/
(frame))
{
1.48.2.4 +3 -15 XEmacs/xemacs/src/glyphs.c
Index: glyphs.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/glyphs.c,v
retrieving revision 1.48.2.3
retrieving revision 1.48.2.4
diff -u -p -r1.48.2.3 -r1.48.2.4
--- glyphs.c 2005/09/27 16:29:33 1.48.2.3
+++ glyphs.c 2005/11/06 16:14:49 1.48.2.4
@@ -1326,11 +1326,7 @@ allocate_image_instance (Lisp_Object gov
Lisp_Object instantiator)
{
Lisp_Image_Instance *lp =
-#ifdef MC_ALLOC
- alloc_lrecord_type (Lisp_Image_Instance, &lrecord_image_instance);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (Lisp_Image_Instance, &lrecord_image_instance);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (Lisp_Image_Instance, &lrecord_image_instance);
Lisp_Object val;
/* It's not possible to simply keep a record of the domain in which
@@ -1997,11 +1993,7 @@ instance is a mono pixmap; otherwise, th
device-specific method to copy the window-system subobject. */
new_ = allocate_image_instance (XIMAGE_INSTANCE_DOMAIN (image_instance),
Qnil, Qnil);
-#ifdef MC_ALLOC
- copy_lrecord (XIMAGE_INSTANCE (new_), XIMAGE_INSTANCE (image_instance));
-#else /* not MC_ALLOC */
- copy_lcrecord (XIMAGE_INSTANCE (new_), XIMAGE_INSTANCE (image_instance));
-#endif /* not MC_ALLOC */
+ 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
freed, the other one is not hosed. */
@@ -3814,11 +3806,7 @@ allocate_glyph (enum glyph_type type,
{
/* This function can GC */
Lisp_Object obj = Qnil;
-#ifdef MC_ALLOC
- Lisp_Glyph *g = alloc_lrecord_type (Lisp_Glyph, &lrecord_glyph);
-#else /* not MC_ALLOC */
- Lisp_Glyph *g = alloc_lcrecord_type (Lisp_Glyph, &lrecord_glyph);
-#endif /* not MC_ALLOC */
+ Lisp_Glyph *g = ALLOC_LCRECORD_TYPE (Lisp_Glyph, &lrecord_glyph);
g->type = type;
g->image = Fmake_specifier (Qimage); /* This function can GC */
1.38.2.2 +2 -10 XEmacs/xemacs/src/glyphs.h
Index: glyphs.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/glyphs.h,v
retrieving revision 1.38.2.1
retrieving revision 1.38.2.2
diff -u -p -r1.38.2.1 -r1.38.2.2
--- glyphs.h 2005/07/13 04:46:47 1.38.2.1
+++ glyphs.h 2005/11/06 16:14:49 1.38.2.2
@@ -594,11 +594,7 @@ struct subwindow_image_instance
struct Lisp_Image_Instance
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object domain; /* The domain in which we were cached. */
Lisp_Object device; /* The device of the domain. Recorded
since the domain may get deleted
@@ -950,11 +946,7 @@ enum glyph_type
struct Lisp_Glyph
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
enum glyph_type type;
1.18.2.3 +1 -1 XEmacs/xemacs/src/gpmevent.c
Index: gpmevent.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/gpmevent.c,v
retrieving revision 1.18.2.2
retrieving revision 1.18.2.3
diff -u -p -r1.18.2.2 -r1.18.2.3
--- gpmevent.c 2005/09/20 16:06:08 1.18.2.2
+++ gpmevent.c 2005/11/06 16:14:49 1.18.2.3
@@ -562,7 +562,7 @@ Toggle accepting of GPM mouse events.
gpm_consolefd = fd;
/* We have to pass the virtual console manually, otherwise if you
- ** use 'gnuclient -nw' to connect to an XEmacs that is running in
+ ** use `gnuclient -nw' to connect to an XEmacs that is running in
** X, Gpm_Open() tries to use ttyname(0 | 1 | 2) to find out which
** console you are using, which is of course not correct for the
** new tty device.
1.29.2.2 +1 -5 XEmacs/xemacs/src/gui.c
Index: gui.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/gui.c,v
retrieving revision 1.29.2.1
retrieving revision 1.29.2.2
diff -u -p -r1.29.2.1 -r1.29.2.2
--- gui.c 2005/07/13 04:46:48 1.29.2.1
+++ gui.c 2005/11/06 16:14:50 1.29.2.2
@@ -197,11 +197,7 @@ gui_item_init (Lisp_Object gui_item)
Lisp_Object
allocate_gui_item (void)
{
-#ifdef MC_ALLOC
- Lisp_Gui_Item *lp = alloc_lrecord_type (Lisp_Gui_Item, &lrecord_gui_item);
-#else /* not MC_ALLOC */
- Lisp_Gui_Item *lp = alloc_lcrecord_type (Lisp_Gui_Item, &lrecord_gui_item);
-#endif /* not MC_ALLOC */
+ Lisp_Gui_Item *lp = ALLOC_LCRECORD_TYPE (Lisp_Gui_Item, &lrecord_gui_item);
Lisp_Object val;
val = wrap_gui_item (lp);
1.18.2.2 +1 -5 XEmacs/xemacs/src/gui.h
Index: gui.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/gui.h,v
retrieving revision 1.18.2.1
retrieving revision 1.18.2.2
diff -u -p -r1.18.2.1 -r1.18.2.2
--- gui.h 2005/07/13 04:46:48 1.18.2.1
+++ gui.h 2005/11/06 16:14:50 1.18.2.2
@@ -44,11 +44,7 @@ extern int popup_up_p;
menu item or submenu properties */
struct Lisp_Gui_Item
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object name; /* String */
Lisp_Object callback; /* Symbol or form */
Lisp_Object callback_ex; /* Form taking context arguments */
1.17.2.2 +16 -16 XEmacs/xemacs/src/gutter.c
Index: gutter.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/gutter.c,v
retrieving revision 1.17.2.1
retrieving revision 1.17.2.2
diff -u -p -r1.17.2.1 -r1.17.2.2
--- gutter.c 2005/03/15 05:24:23 1.17.2.1
+++ gutter.c 2005/11/06 16:14:50 1.17.2.2
@@ -739,15 +739,15 @@ decode_gutter_position (Lisp_Object posi
DEFUN ("set-default-gutter-position", Fset_default_gutter_position, 1, 1, 0,
/*
Set the position that the `default-gutter' will be displayed at.
-Valid positions are 'top, 'bottom, 'left and 'right.
+Valid positions are `top', `bottom', `left' and `right'.
See `default-gutter-position'.
*/
(position))
{
enum gutter_pos cur = decode_gutter_position (Vdefault_gutter_position);
- enum gutter_pos new = decode_gutter_position (position);
+ enum gutter_pos new_ = decode_gutter_position (position);
- if (cur != new)
+ if (cur != new_)
{
/* The following calls will automatically cause the dirty
flags to be set; we delay frame size changes to avoid
@@ -756,18 +756,18 @@ See `default-gutter-position'.
int depth = begin_hold_frame_size_changes ();
set_specifier_fallback (Vgutter[cur], list1 (Fcons (Qnil, Qnil)));
- set_specifier_fallback (Vgutter[new], Vdefault_gutter);
+ set_specifier_fallback (Vgutter[new_], Vdefault_gutter);
set_specifier_fallback (Vgutter_size[cur], list1 (Fcons (Qnil, Qzero)));
- set_specifier_fallback (Vgutter_size[new],
- new == TOP_GUTTER || new == BOTTOM_GUTTER
+ set_specifier_fallback (Vgutter_size[new_],
+ new_ == TOP_GUTTER || new_ == BOTTOM_GUTTER
? Vdefault_gutter_height
: Vdefault_gutter_width);
set_specifier_fallback (Vgutter_border_width[cur],
list1 (Fcons (Qnil, Qzero)));
- set_specifier_fallback (Vgutter_border_width[new],
+ set_specifier_fallback (Vgutter_border_width[new_],
Vdefault_gutter_border_width);
set_specifier_fallback (Vgutter_visible_p[cur], list1 (Fcons (Qnil, Qt)));
- set_specifier_fallback (Vgutter_visible_p[new], Vdefault_gutter_visible_p);
+ set_specifier_fallback (Vgutter_visible_p[new_], Vdefault_gutter_visible_p);
Vdefault_gutter_position = position;
unbind_to (depth);
@@ -1035,7 +1035,7 @@ gutter_size_validate (Lisp_Object instan
return;
if (!INTP (instantiator) && !EQ (instantiator, Qautodetect))
- invalid_argument ("Gutter size must be an integer or 'autodetect",
instantiator);
+ invalid_argument ("Gutter size must be an integer or `autodetect'",
instantiator);
}
DEFUN ("gutter-size-specifier-p", Fgutter_size_specifier_p, 1, 1, 0, /*
@@ -1235,7 +1235,7 @@ Use `set-specifier' to change this.
The position of this gutter is specified in the function
`default-gutter-position'. If the corresponding position-specific
-gutter (e.g. `top-gutter' if `default-gutter-position' is 'top)
+gutter (e.g. `top-gutter' if `default-gutter-position' is `top')
does not specify a gutter in a particular domain (usually a window),
then the value of `default-gutter' in that domain, if any, will be
used instead.
@@ -1356,21 +1356,21 @@ This is a specifier; use `set-specifier'
The position of the default gutter is specified by the function
`set-default-gutter-position'. If the corresponding position-specific
gutter thickness specifier (e.g. `top-gutter-height' if
-`default-gutter-position' is 'top) does not specify a thickness in a
+`default-gutter-position' is `top') does not specify a thickness in a
particular domain (a window or a frame), then the value of
`default-gutter-height' or `default-gutter-width' (depending on the
gutter orientation) in that domain, if any, will be used instead.
Note that `default-gutter-height' is only used when
-`default-gutter-position' is 'top or 'bottom, and
`default-gutter-width'
-is only used when `default-gutter-position' is 'left or 'right.
+`default-gutter-position' is `top' or `bottom', and
`default-gutter-width'
+is only used when `default-gutter-position' is `left' or `right'.
Note that all of the position-specific gutter thickness specifiers
have a fallback value of zero when they do not correspond to the
default gutter. Therefore, you will have to set a non-zero thickness
value if you want a position-specific gutter to be displayed.
-If you set the height to 'autodetect the size of the gutter will be
+If you set the height to `autodetect' the size of the gutter will be
calculated to be large enough to hold the contents of the gutter. This
is the default.
*/ );
@@ -1488,7 +1488,7 @@ This is a specifier; use `set-specifier'
The position of the default gutter is specified by the function
`set-default-gutter-position'. If the corresponding position-specific
gutter border width specifier (e.g. `top-gutter-border-width' if
-`default-gutter-position' is 'top) does not specify a border width in a
+`default-gutter-position' is `top') does not specify a border width in a
particular domain (a window or a frame), then the value of
`default-gutter-border-width' in that domain, if any, will be used
instead.
@@ -1579,7 +1579,7 @@ This is a specifier; use `set-specifier'
The position of the default gutter is specified by the function
`set-default-gutter-position'. If the corresponding position-specific
gutter visibility specifier (e.g. `top-gutter-visible-p' if
-`default-gutter-position' is 'top) does not specify a visible-p value
+`default-gutter-position' is `top') does not specify a visible-p value
in a particular domain (a window or a frame), then the value of
`default-gutter-visible-p' in that domain, if any, will be used
instead.
1.12.2.2 +2 -2 XEmacs/xemacs/src/hash.c
Index: hash.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/hash.c,v
retrieving revision 1.12.2.1
retrieving revision 1.12.2.2
diff -u -p -r1.12.2.1 -r1.12.2.2
--- hash.c 2005/03/15 05:24:23 1.12.2.1
+++ hash.c 2005/11/06 16:14:50 1.12.2.2
@@ -32,8 +32,8 @@ Boston, MA 02111-1307, USA. */
#define COMFORTABLE_SIZE(size) (21 * (size) / 16)
-#define KEYS_DIFFER_P(old, new, testfun) \
- (((old) != (new)) && (!(testfun) || !(testfun) ((old),(new))))
+#define KEYS_DIFFER_P(old, new_, testfun) \
+ (((old) != (new_)) && (!(testfun) || !(testfun) ((old),(new_))))
static void rehash (hentry *harray, struct hash_table *ht, Elemcount size);
1.8.2.1 +17 -17 XEmacs/xemacs/src/imgproc.c
Index: imgproc.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/imgproc.c,v
retrieving revision 1.8
retrieving revision 1.8.2.1
diff -u -p -r1.8 -r1.8.2.1
--- imgproc.c 2004/11/04 23:06:36 1.8
+++ imgproc.c 2005/11/06 16:14:51 1.8.2.1
@@ -202,7 +202,7 @@ splitbox(quant_table *qt, Colorbox* ptr)
{
int hist2[B_LEN];
int first = 0, last = 0;
- register Colorbox *new;
+ register Colorbox *new_;
register int *iptr, *histp;
register int i, j;
register int ir,ig,ib;
@@ -286,45 +286,45 @@ splitbox(quant_table *qt, Colorbox* ptr)
i++;
/* Create new box, re-allocate points */
- new = qt->freeboxes;
- qt->freeboxes = new->next;
+ new_ = qt->freeboxes;
+ qt->freeboxes = new_->next;
if (qt->freeboxes)
qt->freeboxes->prev = NULL;
if (qt->usedboxes)
- qt->usedboxes->prev = new;
- new->next = qt->usedboxes;
- qt->usedboxes = new;
+ qt->usedboxes->prev = new_;
+ new_->next = qt->usedboxes;
+ qt->usedboxes = new_;
histp = &hist2[first];
for (sum1 = 0, j = first; j < i; j++)
sum1 += *histp++;
for (sum2 = 0, j = i; j <= last; j++)
sum2 += *histp++;
- new->total = sum1;
+ new_->total = sum1;
ptr->total = sum2;
- new->rmin = ptr->rmin;
- new->rmax = ptr->rmax;
- new->gmin = ptr->gmin;
- new->gmax = ptr->gmax;
- new->bmin = ptr->bmin;
- new->bmax = ptr->bmax;
+ new_->rmin = ptr->rmin;
+ new_->rmax = ptr->rmax;
+ new_->gmin = ptr->gmin;
+ new_->gmax = ptr->gmax;
+ new_->bmin = ptr->bmin;
+ new_->bmax = ptr->bmax;
switch (axis)
{
case RED:
- new->rmax = i-1;
+ new_->rmax = i-1;
ptr->rmin = i;
break;
case GREEN:
- new->gmax = i-1;
+ new_->gmax = i-1;
ptr->gmin = i;
break;
case BLUE:
- new->bmax = i-1;
+ new_->bmax = i-1;
ptr->bmin = i;
break;
}
- shrinkbox (qt, new);
+ shrinkbox (qt, new_);
shrinkbox (qt, ptr);
}
1.19.2.2 +2 -2 XEmacs/xemacs/src/indent.c
Index: indent.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/indent.c,v
retrieving revision 1.19.2.1
retrieving revision 1.19.2.2
diff -u -p -r1.19.2.1 -r1.19.2.2
--- indent.c 2005/03/15 05:24:24 1.19.2.1
+++ indent.c 2005/11/06 16:14:51 1.19.2.2
@@ -2,7 +2,7 @@
Copyright (C) 1995 Board of Trustees, University of Illinois.
Copyright (C) 1985, 1986, 1987, 1988, 1992, 1993, 1994, 1995
Free Software Foundation, Inc.
- Copyright (C) 2002 Ben Wing.
+ Copyright (C) 2002, 2005 Ben Wing.
This file is part of XEmacs.
@@ -392,7 +392,7 @@ and horizontal scrolling has no effect.
If specified column is within a character, point goes after that character.
If it's past end of line, point goes to end of line.
-A value of 'coerce for the second (optional) argument FORCE means if
+A value of `coerce' for the second (optional) argument FORCE means if
COLUMN is in the middle of a tab character, change it to spaces.
Any other non-nil value means the same, plus if the line is too short to
reach column COLUMN, then add spaces/tabs to get there.
1.20.2.2 +4 -2 XEmacs/xemacs/src/inline.c
Index: inline.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/inline.c,v
retrieving revision 1.20.2.1
retrieving revision 1.20.2.2
diff -u -p -r1.20.2.1 -r1.20.2.2
--- inline.c 2004/11/25 12:44:14 1.20.2.1
+++ inline.c 2005/11/06 16:14:51 1.20.2.2
@@ -67,11 +67,13 @@ Boston, MA 02111-1307, USA. */
#include "syntax.h"
#include "window.h"
-#if defined (HAVE_LDAP) && !defined (HAVE_SHLIB)
+/* if we demand !define (HAVE_SHLIB) the inlines don't get instantiated */
+#if defined (HAVE_LDAP)
#include "../modules/ldap/eldap.h"
#endif
-#if defined (HAVE_POSTGRESQL) && !defined (HAVE_SHLIB)
+/* if we demand !define (HAVE_SHLIB) the inlines don't get instantiated */
+#if defined (HAVE_POSTGRESQL)
#include "../modules/postgresql/postgresql.h"
#endif
1.52.2.6 +19 -26 XEmacs/xemacs/src/keymap.c
Index: keymap.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/keymap.c,v
retrieving revision 1.52.2.5
retrieving revision 1.52.2.6
diff -u -p -r1.52.2.5 -r1.52.2.6
--- keymap.c 2005/09/20 16:06:08 1.52.2.5
+++ keymap.c 2005/11/06 16:14:51 1.52.2.6
@@ -50,7 +50,7 @@ Boston, MA 02111-1307, USA. */
table A hash table, hashing keysyms to their bindings.
It will be one of the following:
- -- a symbol, e.g. 'home
+ -- a symbol, e.g. `home'
-- a character, representing something printable
(not ?\C-c meaning C-c, for instance)
-- an integer representing a modifier combination
@@ -148,11 +148,7 @@ Boston, MA 02111-1307, USA. */
struct Lisp_Keymap
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object parents; /* Keymaps to be searched after this one.
An ordered list */
Lisp_Object prompt; /* Qnil or a string to print in the minibuffer
@@ -760,11 +756,7 @@ static Lisp_Object
make_keymap (Elemcount size)
{
Lisp_Object result;
-#ifdef MC_ALLOC
- Lisp_Keymap *keymap = alloc_lrecord_type (Lisp_Keymap, &lrecord_keymap);
-#else /* not MC_ALLOC */
- Lisp_Keymap *keymap = alloc_lcrecord_type (Lisp_Keymap, &lrecord_keymap);
-#endif /* not MC_ALLOC */
+ Lisp_Keymap *keymap = ALLOC_LCRECORD_TYPE (Lisp_Keymap, &lrecord_keymap);
result = wrap_keymap (keymap);
@@ -1185,7 +1177,7 @@ copy_keymap_mapper (Lisp_Object key, Lis
/* When we encounter a keymap which is indirected through a
symbol, we need to copy the sub-map. In v18, the form
(lookup-key (copy-keymap global-map) "\C-x")
- returned a new keymap, not the symbol 'Control-X-prefix.
+ returned a new keymap, not the symbol `Control-X-prefix'.
*/
value = get_keymap (value, 0, 1); /* #### autoload GC-safe here? */
if (KEYMAPP (value))
@@ -1305,11 +1297,12 @@ define_key_check_and_coerce_keysym (Lisp
{
Ibyte *name = XSTRING_DATA (XSYMBOL (*keysym)->name);
- /* FSFmacs uses symbols with the printed representation of keysyms in
- their names, like 'M-x, and we use the syntax '(meta x). So, to avoid
- confusion, notice the M-x syntax and signal an error - because
- otherwise it would be interpreted as a regular keysym, and would even
- show up in the list-buffers output, causing confusion to the naive.
+ /* GNU Emacs uses symbols with the printed representation of keysyms in
+ their names, like `M-x', and we use the syntax '(meta x). So, to
+ avoid confusion, notice the M-x syntax and signal an error -
+ because otherwise it would be interpreted as a regular keysym, and
+ would even show up in the list-buffers output, causing confusion
+ to the naive.
We can get away with this because none of the X keysym names contain
a hyphen (some contain underscore, however).
@@ -1582,19 +1575,19 @@ event_matches_key_specifier_p (Lisp_Obje
return 0;
/* if the specifier is an integer such as 27, then it should match
- both of the events 'escape' and 'control ['. Calling
- Fcharacter_to_event() will only match 'escape'. */
+ both of the events `escape' and `control ['. Calling
+ Fcharacter_to_event() will only match `escape'. */
if (CHAR_OR_CHAR_INTP (key_specifier))
return (XCHAR_OR_CHAR_INT (key_specifier)
== event_to_character (event, 0, 0));
/* Otherwise, we cannot call event_to_character() because we may
be dealing with non-ASCII keystrokes. In any case, if I ask
- for 'control [' then I should get exactly that, and not
- 'escape'.
+ for `control [' then I should get exactly that, and not
+ `escape'.
- However, we have to behave differently on TTY's, where 'control ['
- is silently converted into 'escape' by the keyboard driver.
+ However, we have to behave differently on TTY's, where `control ['
+ is silently converted into `escape' by the keyboard driver.
In this case, ASCII is the only thing we know about, so we have
to compare the ASCII values. */
@@ -2695,7 +2688,7 @@ static Lisp_Object
process_event_binding_result (Lisp_Object result)
{
if (EQ (result, Qundefined))
- /* The suppress-keymap function binds keys to 'undefined - special-case
+ /* The suppress-keymap function binds keys to `undefined' - special-case
that here, so that being bound to that has the same error-behavior as
not being defined at all.
*/
@@ -3746,8 +3739,8 @@ where_is_recursive_mapper (Lisp_Object m
int size = lower_keys_count + 50;
if (! c->keys_so_far_malloced)
{
- Lisp_Key_Data *new = xnew_array (Lisp_Key_Data, size);
- memcpy ((void *)new, (const void *)c->keys_so_far,
+ Lisp_Key_Data *new_ = xnew_array (Lisp_Key_Data, size);
+ memcpy ((void *)new_, (const void *)c->keys_so_far,
c->keys_so_far_total_size * sizeof (Lisp_Key_Data));
}
else
1.19.2.1 +2 -2 XEmacs/xemacs/src/lisp-union.h
Index: lisp-union.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lisp-union.h,v
retrieving revision 1.19
retrieving revision 1.19.2.1
diff -u -p -r1.19 -r1.19.2.1
--- lisp-union.h 2003/08/19 02:07:16 1.19
+++ lisp-union.h 2005/11/06 16:14:51 1.19.2.1
@@ -1,7 +1,7 @@
/* Fundamental definitions for XEmacs Lisp interpreter -- union objects.
Copyright (C) 1985, 1986, 1987, 1992, 1993, 1994
Free Software Foundation, Inc.
- Copyright (C) 2002 Ben Wing.
+ Copyright (C) 2002, 2005 Ben Wing.
This file is part of XEmacs.
@@ -73,7 +73,7 @@ union Lisp_Object
EMACS_UINT ui;
signed EMACS_INT i;
- /* This was formerly declared 'void *v' etc. but that causes
+ /* This was formerly declared `void *v' etc. but that causes
GCC to accept any (yes, any) pointer as the argument of
a function declared to accept a Lisp_Object. */
struct nosuchstruct *v;
1.116.2.7 +5 -25 XEmacs/xemacs/src/lisp.h
Index: lisp.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lisp.h,v
retrieving revision 1.116.2.6
retrieving revision 1.116.2.7
diff -u -p -r1.116.2.6 -r1.116.2.7
--- lisp.h 2005/09/27 16:29:35 1.116.2.6
+++ lisp.h 2005/11/06 16:14:52 1.116.2.7
@@ -2372,11 +2372,7 @@ DECLARE_MODULE_API_LRECORD (string, Lisp
struct Lisp_Vector
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
long size;
Lisp_Object contents[1];
};
@@ -2413,11 +2409,7 @@ DECLARE_LRECORD (vector, Lisp_Vector);
struct Lisp_Bit_Vector
{
-#ifdef MC_ALLOC
- struct lrecord_header lheader;
-#else /* MC_ALLOC */
- struct lcrecord_header lheader;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER lheader;
Elemcount size;
unsigned long bits[1];
};
@@ -2778,11 +2770,7 @@ void define_structure_type_keyword (stru
struct weak_box
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object value;
Lisp_Object next_weak_box; /* don't mark through this! */
@@ -2804,11 +2792,7 @@ DECLARE_LRECORD (weak_box, struct weak_b
struct ephemeron
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object key;
@@ -2867,11 +2851,7 @@ enum weak_list_type
struct weak_list
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object list; /* don't mark through this! */
enum weak_list_type type;
Lisp_Object next_weak; /* don't mark through this! */
1.34.2.6 +66 -59 XEmacs/xemacs/src/lrecord.h
Index: lrecord.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lrecord.h,v
retrieving revision 1.34.2.5
retrieving revision 1.34.2.6
diff -u -p -r1.34.2.5 -r1.34.2.6
--- lrecord.h 2005/08/03 06:09:32 1.34.2.5
+++ lrecord.h 2005/11/06 16:14:52 1.34.2.6
@@ -1,6 +1,6 @@
/* The "lrecord" structure (header of a compound lisp object).
Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
- Copyright (C) 1996, 2001, 2002, 2004 Ben Wing.
+ Copyright (C) 1996, 2001, 2002, 2004, 2005 Ben Wing.
This file is part of XEmacs.
@@ -67,9 +67,9 @@ Boston, MA 02111-1307, USA. */
Lcrecords are used for less common sorts of objects that don't do
their own allocation. Each such object is malloc()ed individually,
and the objects are chained together through a `next' pointer.
- Lcrecords have a `struct lcrecord_header' at the top, which
+ Lcrecords have a `struct old_lcrecord_header' at the top, which
contains a `struct lrecord_header' and a `next' pointer, and are
- allocated using alloc_lcrecord_type() or its variants.
+ allocated using old_alloc_lcrecord_type() or its variants.
Creating a new lcrecord type is fairly easy; just follow the
lead of some existing type (e.g. hash tables). Note that you
@@ -81,6 +81,27 @@ Boston, MA 02111-1307, USA. */
*/
#endif /* not MC_ALLOC */
+#ifdef MC_ALLOC
+#define ALLOC_LCRECORD_TYPE alloc_lrecord_type
+#define COPY_SIZED_LCRECORD copy_sized_lrecord
+#define COPY_LCRECORD copy_lrecord
+#define LISPOBJ_STORAGE_SIZE(ptr, size, stats) \
+ mc_alloced_storage_size (size, stats)
+#define ZERO_LCRECORD zero_lrecord
+#define LCRECORD_HEADER lrecord_header
+#define BASIC_ALLOC_LCRECORD alloc_lrecord
+#define FREE_LCRECORD free_lrecord
+#else
+#define ALLOC_LCRECORD_TYPE old_alloc_lcrecord_type
+#define COPY_SIZED_LCRECORD old_copy_sized_lcrecord
+#define COPY_LCRECORD old_copy_lcrecord
+#define LISPOBJ_STORAGE_SIZE malloced_storage_size
+#define ZERO_LCRECORD old_zero_lcrecord
+#define LCRECORD_HEADER old_lcrecord_header
+#define BASIC_ALLOC_LCRECORD old_basic_alloc_lcrecord
+#define FREE_LCRECORD old_free_lcrecord
+#endif
+
BEGIN_C_DECLS
struct lrecord_header
@@ -145,13 +166,13 @@ int lrecord_type_index (const struct lre
#endif /* not MC_ALLOC */
#ifndef MC_ALLOC
-struct lcrecord_header
+struct old_lcrecord_header
{
struct lrecord_header lheader;
/* The `next' field is normally used to chain all lcrecords together
so that the GC can find (and free) all of them.
- `basic_alloc_lcrecord' threads lcrecords together.
+ `old_basic_alloc_lcrecord' threads lcrecords together.
The `next' field may be used for other purposes as long as some
other mechanism is provided for letting the GC do its work.
@@ -159,7 +180,7 @@ struct lcrecord_header
For example, the event and marker object types allocate members
out of memory chunks, and are able to find all unmarked members
by sweeping through the elements of the list of chunks. */
- struct lcrecord_header *next;
+ struct old_lcrecord_header *next;
/* The `uid' field is just for debugging/printing convenience.
Having this slot doesn't hurt us much spacewise, since an
@@ -179,7 +200,7 @@ struct lcrecord_header
/* Used for lcrecords in an lcrecord-list. */
struct free_lcrecord_header
{
- struct lcrecord_header lcheader;
+ struct old_lcrecord_header lcheader;
Lisp_Object chain;
};
#endif /* not MC_ALLOC */
@@ -345,7 +366,8 @@ struct lrecord_implementation
/* Only one of `static_size' and `size_in_bytes_method' is non-0. */
#else /* not MC_ALLOC */
/* Only one of `static_size' and `size_in_bytes_method' is non-0.
- If both are 0, this type is not instantiable by basic_alloc_lcrecord(). */
+ If both are 0, this type is not instantiable by
+ old_basic_alloc_lcrecord(). */
#endif /* not MC_ALLOC */
Bytecount static_size;
Bytecount (*size_in_bytes_method) (const void *header);
@@ -355,7 +377,7 @@ struct lrecord_implementation
#ifndef MC_ALLOC
/* A "basic" lrecord is any lrecord that's not an lcrecord, i.e.
- one that does not have an lcrecord_header at the front and which
+ one that does not have an old_lcrecord_header at the front and which
is (usually) allocated in frob blocks. */
unsigned int basic_p :1;
#endif /* not MC_ALLOC */
@@ -377,18 +399,16 @@ extern int gc_in_progress;
#ifdef MC_ALLOC
#include "mc-alloc.h"
-#endif /* MC_ALLOC */
-#ifdef MC_ALLOC_TYPE_STATS
+#ifdef ALLOC_TYPE_STATS
void init_lrecord_stats (void);
void inc_lrecord_string_data_stats (Bytecount size);
void dec_lrecord_string_data_stats (Bytecount size);
void inc_lrecord_stats (Bytecount size, const struct lrecord_header *h);
void dec_lrecord_stats (Bytecount size_including_overhead,
const struct lrecord_header *h);
-#endif /* MC_ALLOC_TYPE_STATS */
+#endif /* ALLOC_TYPE_STATS */
-#ifdef MC_ALLOC
/* Tell mc-alloc how to call a finalizer. */
#define MC_ALLOC_CALL_FINALIZER(ptr) \
{ \
@@ -662,11 +682,7 @@ void dec_lrecord_stats (Bytecount size_i
struct Lisp_Hash_Table
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else
- struct lcrecord_header header;
-#endif
+ struct LCRECORD_HEADER header;
Elemcount size;
Elemcount count;
Elemcount rehash_count;
@@ -731,11 +747,7 @@ void dec_lrecord_stats (Bytecount size_i
struct Lisp_Specifier
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else
- struct lcrecord_header header;
-#endif
+ struct LCRECORD_HEADER header;
struct specifier_methods *methods;
...
@@ -1209,11 +1221,7 @@ extern MODULE_API Lisp_Object (*lrecord_
1. Declare the struct for your object in a header file somewhere.
Remember that it must begin with
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else
- struct lcrecord_header header;
-#endif
+ struct LCRECORD_HEADER header;
2. Put the "standard junk" (DECLARE_RECORD()/XFOO/etc.) below the
struct definition -- see below.
@@ -1247,11 +1255,7 @@ An example:
struct toolbar_button
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else
- struct lcrecord_header header;
-#endif
+ struct LCRECORD_HEADER header;
Lisp_Object next;
Lisp_Object frame;
@@ -1370,7 +1374,8 @@ enum lrecord_type
Note: Object types defined in external dynamically-loaded modules (not
part of the XEmacs main source code) should use DECLARE_EXTERNAL_LRECORD
and DEFINE_EXTERNAL_LRECORD_IMPLEMENTATION rather than DECLARE_LRECORD
-and DEFINE_LRECORD_IMPLEMENTATION.
+and DEFINE_LRECORD_IMPLEMENTATION. The EXTERNAL versions declare and
+allocate an enumerator for the type being defined.
*/
@@ -1515,7 +1520,7 @@ extern Lisp_Object Q##c_name##p
struct lcrecord_list
{
- struct lcrecord_header header;
+ struct LCRECORD_HEADER header;
Lisp_Object free;
Elemcount size;
const struct lrecord_implementation *implementation;
@@ -1536,7 +1541,7 @@ DECLARE_LRECORD (lcrecord_list, struct l
lrecords. lcrecords themselves are divided into three types: (1)
auto-managed, (2) hand-managed, and (3) unmanaged. "Managed" refers to
using a special object called an lcrecord-list to keep track of freed
- lcrecords, which can freed with free_lcrecord() or the like and later be
+ lcrecords, which can freed with FREE_LCRECORD() or the like and later be
recycled when a new lcrecord is required, rather than requiring new
malloc(). Thus, allocation of lcrecords can be very
cheap. (Technically, the lcrecord-list manager could divide up large
@@ -1550,9 +1555,9 @@ DECLARE_LRECORD (lcrecord_list, struct l
in particular dictate the various types of management:
-- "Auto-managed" means that you just go ahead and allocate the lcrecord
- whenever you want, using alloc_lcrecord_type(), and the appropriate
+ whenever you want, using old_alloc_lcrecord_type(), and the appropriate
lcrecord-list manager is automatically created. To free, you just call
- "free_lcrecord()" and the appropriate lcrecord-list manager is
+ "FREE_LCRECORD()" and the appropriate lcrecord-list manager is
automatically located and called. The limitation here of course is that
all your objects are of the same size. (#### Eventually we should have a
more sophisticated system that tracks the sizes seen and creates one
@@ -1573,7 +1578,7 @@ DECLARE_LRECORD (lcrecord_list, struct l
to hand-manage them, or (b) the objects you create are always or almost
always Lisp-visible, and thus there's no point in freeing them (and it
wouldn't be safe to do so). You just create them with
- basic_alloc_lcrecord(), and that's it.
+ BASIC_ALLOC_LCRECORD(), and that's it.
--ben
@@ -1586,9 +1591,9 @@ DECLARE_LRECORD (lcrecord_list, struct l
1) Create an lcrecord-list object using make_lcrecord_list(). This is
often done at initialization. Remember to staticpro_nodump() this
object! The arguments to make_lcrecord_list() are the same as would be
- passed to basic_alloc_lcrecord().
+ passed to BASIC_ALLOC_LCRECORD().
- 2) Instead of calling basic_alloc_lcrecord(), call alloc_managed_lcrecord()
+ 2) Instead of calling BASIC_ALLOC_LCRECORD(), call alloc_managed_lcrecord()
and pass the lcrecord-list earlier created.
3) When done with the lcrecord, call free_managed_lcrecord(). The
@@ -1599,7 +1604,7 @@ DECLARE_LRECORD (lcrecord_list, struct l
lcrecord goodbye as if it were garbage-collected. This means:
-- the contents of the freed lcrecord are undefined, and the
contents of something produced by alloc_managed_lcrecord()
- are undefined, just like for basic_alloc_lcrecord().
+ are undefined, just like for BASIC_ALLOC_LCRECORD().
-- the mark method for the lcrecord's type will *NEVER* be called
on freed lcrecords.
-- the finalize method for the lcrecord's type will be called
@@ -1607,8 +1612,8 @@ DECLARE_LRECORD (lcrecord_list, struct l
*/
/* UNMANAGED MODEL: */
-void *basic_alloc_lcrecord (Bytecount size,
- const struct lrecord_implementation *);
+void *old_basic_alloc_lcrecord (Bytecount size,
+ const struct lrecord_implementation *);
/* HAND-MANAGED MODEL: */
Lisp_Object make_lcrecord_list (Elemcount size,
@@ -1621,27 +1626,29 @@ void free_managed_lcrecord (Lisp_Object
MODULE_API void *
alloc_automanaged_lcrecord (Bytecount size,
const struct lrecord_implementation *);
-#define alloc_lcrecord_type(type, lrecord_implementation) \
+
+#define old_alloc_lcrecord_type(type, lrecord_implementation) \
((type *) alloc_automanaged_lcrecord (sizeof (type), lrecord_implementation))
-void free_lcrecord (Lisp_Object rec);
+void old_free_lcrecord (Lisp_Object rec);
/* Copy the data from one lcrecord structure into another, but don't
overwrite the header information. */
-#define copy_sized_lcrecord(dst, src, size) \
- memcpy ((Rawbyte *) (dst) + sizeof (struct lcrecord_header), \
- (Rawbyte *) (src) + sizeof (struct lcrecord_header), \
- (size) - sizeof (struct lcrecord_header))
-
-#define copy_lcrecord(dst, src) copy_sized_lcrecord (dst, src, sizeof (*(dst)))
-
-#define zero_sized_lcrecord(lcr, size) \
- memset ((Rawbyte *) (lcr) + sizeof (struct lcrecord_header), 0, \
- (size) - sizeof (struct lcrecord_header))
+#define old_copy_sized_lcrecord(dst, src, size) \
+ memcpy ((Rawbyte *) (dst) + sizeof (struct old_lcrecord_header), \
+ (Rawbyte *) (src) + sizeof (struct old_lcrecord_header), \
+ (size) - sizeof (struct old_lcrecord_header))
+
+#define old_copy_lcrecord(dst, src) \
+ old_copy_sized_lcrecord (dst, src, sizeof (*(dst)))
+
+#define old_zero_sized_lcrecord(lcr, size) \
+ memset ((Rawbyte *) (lcr) + sizeof (struct old_lcrecord_header), 0, \
+ (size) - sizeof (struct old_lcrecord_header))
-#define zero_lcrecord(lcr) zero_sized_lcrecord (lcr, sizeof (*(lcr)))
+#define old_zero_lcrecord(lcr) old_zero_sized_lcrecord (lcr, sizeof (*(lcr)))
#else /* MC_ALLOC */
@@ -1684,13 +1691,13 @@ void free_lrecord (Lisp_Object rec);
#define copy_lrecord(dst, src) copy_sized_lrecord (dst, src, sizeof (*(dst)))
+#endif /* MC_ALLOC */
+
#define zero_sized_lrecord(lcr, size) \
memset ((char *) (lcr) + sizeof (struct lrecord_header), 0, \
(size) - sizeof (struct lrecord_header))
#define zero_lrecord(lcr) zero_sized_lrecord (lcr, sizeof (*(lcr)))
-
-#endif /* MC_ALLOC */
DECLARE_INLINE_HEADER (
Bytecount
1.18.2.2 +1 -5 XEmacs/xemacs/src/lstream.h
Index: lstream.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lstream.h,v
retrieving revision 1.18.2.1
retrieving revision 1.18.2.2
diff -u -p -r1.18.2.1 -r1.18.2.2
--- lstream.h 2005/07/13 04:46:53 1.18.2.1
+++ lstream.h 2005/11/06 16:14:52 1.18.2.2
@@ -230,11 +230,7 @@ typedef struct lstream_implementation
struct lstream
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
const Lstream_implementation *imp; /* methods for this stream */
Lstream_buffering buffering; /* type of buffering in use */
Bytecount buffering_size; /* number of bytes buffered */
1.12.6.2 +3 -3 XEmacs/xemacs/src/macros.c
Index: macros.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/macros.c,v
retrieving revision 1.12.6.1
retrieving revision 1.12.6.2
diff -u -p -r1.12.6.1 -r1.12.6.2
--- macros.c 2005/03/15 05:24:30 1.12.6.1
+++ macros.c 2005/11/06 16:14:53 1.12.6.2
@@ -166,10 +166,10 @@ store_kbd_macro_event (Lisp_Object event
int i;
int old_size = XVECTOR_LENGTH (con->kbd_macro_builder);
int new_size = old_size * 2;
- Lisp_Object new = make_vector (new_size, Qnil);
+ Lisp_Object new_ = make_vector (new_size, Qnil);
for (i = 0; i < old_size; i++)
- XVECTOR_DATA (new) [i] = XVECTOR_DATA (con->kbd_macro_builder) [i];
- con->kbd_macro_builder = new;
+ XVECTOR_DATA (new_) [i] = XVECTOR_DATA (con->kbd_macro_builder) [i];
+ con->kbd_macro_builder = new_;
}
XVECTOR_DATA (con->kbd_macro_builder) [con->kbd_macro_ptr++] =
Fcopy_event (event, Qnil);
1.11.2.2 +4 -4 XEmacs/xemacs/src/malloc.c
Index: malloc.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/malloc.c,v
retrieving revision 1.11.2.1
retrieving revision 1.11.2.2
diff -u -p -r1.11.2.1 -r1.11.2.2
--- malloc.c 2005/03/15 05:24:30 1.11.2.1
+++ malloc.c 2005/11/06 16:14:53 1.11.2.2
@@ -656,13 +656,13 @@ realloc (mem, n)
if (n < tocopy)
tocopy = n;
{
- char *new;
+ char *new_;
- if ((new = malloc (n)) == 0)
+ if ((new_ = malloc (n)) == 0)
return 0;
- memcpy (new, mem, tocopy);
+ memcpy (new_, mem, tocopy);
free (mem);
- return new;
+ return new_;
}
}
1.14.2.3 +6 -6 XEmacs/xemacs/src/marker.c
Index: marker.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/marker.c,v
retrieving revision 1.14.2.2
retrieving revision 1.14.2.3
diff -u -p -r1.14.2.2 -r1.14.2.3
--- marker.c 2005/07/13 04:46:53 1.14.2.2
+++ marker.c 2005/11/06 16:14:53 1.14.2.3
@@ -397,20 +397,20 @@ set_marker_position (Lisp_Object marker,
static Lisp_Object
copy_marker_1 (Lisp_Object marker, Lisp_Object type, int noseeum)
{
- REGISTER Lisp_Object new;
+ REGISTER Lisp_Object new_;
while (1)
{
if (INTP (marker) || MARKERP (marker))
{
if (noseeum)
- new = noseeum_make_marker ();
+ new_ = noseeum_make_marker ();
else
- new = Fmake_marker ();
- Fset_marker (new, marker,
+ new_ = Fmake_marker ();
+ Fset_marker (new_, marker,
(MARKERP (marker) ? Fmarker_buffer (marker) : Qnil));
- XMARKER (new)->insertion_type = !NILP (type);
- return new;
+ XMARKER (new_)->insertion_type = !NILP (type);
+ return new_;
}
else
marker = wrong_type_argument (Qinteger_or_marker_p, marker);
1.3.2.3 +2 -2 XEmacs/xemacs/src/mc-alloc.c
Index: mc-alloc.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/mc-alloc.c,v
retrieving revision 1.3.2.2
retrieving revision 1.3.2.3
diff -u -p -r1.3.2.2 -r1.3.2.3
--- mc-alloc.c 2005/09/23 18:20:42 1.3.2.2
+++ mc-alloc.c 2005/11/06 16:14:53 1.3.2.3
@@ -1486,10 +1486,10 @@ remove_cell (void *ptr, page_header *ph)
#endif
if (PH_ON_USED_LIST_P (ph))
{
-#ifdef MC_ALLOC_TYPE_STATS
+#ifdef ALLOC_TYPE_STATS
dec_lrecord_stats (PH_CELL_SIZE (ph),
(const struct lrecord_header *) ptr);
-#endif /* MC_ALLOC_TYPE_STATS */
+#endif /* ALLOC_TYPE_STATS */
#ifdef ERROR_CHECK_GC
assert (!LRECORD_FREE_P (ptr));
deadbeef_memory (ptr, PH_CELL_SIZE (ph));
1.1.2.2 +0 -12 XEmacs/xemacs/src/mc-alloc.h
Index: mc-alloc.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/mc-alloc.h,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.1 -r1.1.2.2
--- mc-alloc.h 2005/07/13 05:48:56 1.1.2.1
+++ mc-alloc.h 2005/11/06 16:14:53 1.1.2.2
@@ -35,18 +35,6 @@ Boston, MA 02111-1307, USA. */
# endif
#endif /* MALLOC_OVERHEAD */
-
-/* This enables type based information (updated during gc). The output
- is used by show-memory-usage to print memory information for each
- type. Since the new allocator does not distinguish between types
- anymore, this functionality is additionally implemented and
- consumes a lot of time. That is why it is kept conditioned on a
- separate flag called MC_ALLOC_TYPE_STATS. */
-#if 1
-# define MC_ALLOC_TYPE_STATS 1
-#endif
-
-
/*--- prototypes -------------------------------------------------------*/
BEGIN_C_DECLS
1.44.2.2 +11 -11 XEmacs/xemacs/src/menubar-x.c
Index: menubar-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/menubar-x.c,v
retrieving revision 1.44.2.1
retrieving revision 1.44.2.2
diff -u -p -r1.44.2.1 -r1.44.2.2
--- menubar-x.c 2005/03/15 05:24:31 1.44.2.1
+++ menubar-x.c 2005/11/06 16:14:54 1.44.2.2
@@ -893,30 +893,30 @@ static void
menu_move_down (void)
{
widget_value *current = lw_get_entries (False);
- widget_value *new = current;
+ widget_value *new_ = current;
- while (new->next)
+ while (new_->next)
{
- new = new->next;
- if (new->name /*&& new->enabled*/) break;
+ new_ = new_->next;
+ if (new_->name /*&& new_->enabled*/) break;
}
- if (new==current||!(new->name/*||new->enabled*/))
+ if (new_==current||!(new_->name/*||new_->enabled*/))
{
- new = lw_get_entries (True);
- while (new!=current)
+ new_ = lw_get_entries (True);
+ while (new_!=current)
{
- if (new->name /*&& new->enabled*/) break;
- new = new->next;
+ if (new_->name /*&& new_->enabled*/) break;
+ new_ = new_->next;
}
- if (new==current&&!(new->name /*|| new->enabled*/))
+ if (new_==current&&!(new_->name /*|| new_->enabled*/))
{
lw_pop_menu ();
return;
}
}
- lw_set_item (new);
+ lw_set_item (new_);
}
static void
1.28.2.2 +2 -2 XEmacs/xemacs/src/menubar.c
Index: menubar.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/menubar.c,v
retrieving revision 1.28.2.1
retrieving revision 1.28.2.2
diff -u -p -r1.28.2.1 -r1.28.2.2
--- menubar.c 2005/03/15 05:24:31 1.28.2.1
+++ menubar.c 2005/11/06 16:14:54 1.28.2.2
@@ -1,7 +1,7 @@
/* Implements an elisp-programmable menubar.
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
Copyright (C) 1995 Tinker Systems and INS Engineering Corp.
- Copyright (C) 2001, 2002, 2003 Ben Wing.
+ Copyright (C) 2001, 2002, 2003, 2005 Ben Wing.
This file is part of XEmacs.
@@ -712,7 +712,7 @@ See also menu-accelerator-enabled and me
DEFVAR_LISP ("menu-accelerator-enabled", &Vmenu_accelerator_enabled /*
Whether menu accelerator keys can cause the menubar to become active.
-If 'menu-force or 'menu-fallback, then menu accelerator keys can
+If `menu-force' or `menu-fallback', then menu accelerator keys can
be used to activate the top level menu. Once the menubar becomes active, the
accelerator keys can be used regardless of the value of this variable.
1.40.2.3 +28 -36 XEmacs/xemacs/src/mule-charset.c
Index: mule-charset.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/mule-charset.c,v
retrieving revision 1.40.2.2
retrieving revision 1.40.2.3
diff -u -p -r1.40.2.2 -r1.40.2.3
--- mule-charset.c 2005/07/13 04:46:54 1.40.2.2
+++ mule-charset.c 2005/11/06 16:14:54 1.40.2.3
@@ -1,7 +1,7 @@
/* Functions to handle multilingual characters.
Copyright (C) 1992, 1995 Free Software Foundation, Inc.
Copyright (C) 1995 Sun Microsystems, Inc.
- Copyright (C) 2001, 2002, 2004 Ben Wing.
+ Copyright (C) 2001, 2002, 2004, 2005 Ben Wing.
This file is part of XEmacs.
@@ -197,11 +197,7 @@ make_charset (int id, Lisp_Object name,
if (!overwrite)
{
-#ifdef MC_ALLOC
- cs = alloc_lrecord_type (Lisp_Charset, &lrecord_charset);
-#else /* not MC_ALLOC */
- cs = alloc_lcrecord_type (Lisp_Charset, &lrecord_charset);
-#endif /* not MC_ALLOC */
+ cs = ALLOC_LCRECORD_TYPE (Lisp_Charset, &lrecord_charset);
obj = wrap_charset (cs);
if (final)
@@ -420,21 +416,21 @@ DOC-STRING is a string describing the ch
PROPS is a property list, describing the specific nature of the
character set. Recognized properties are:
-'short-name Short version of the charset name (ex: Latin-1)
-'long-name Long version of the charset name (ex: ISO8859-1 (Latin-1))
-'registry A regular expression matching the font registry field for
+`short-name' Short version of the charset name (ex: Latin-1)
+`long-name' Long version of the charset name (ex: ISO8859-1 (Latin-1))
+`registry' A regular expression matching the font registry field for
this character set.
-'dimension Number of octets used to index a character in this charset.
+`dimension' Number of octets used to index a character in this charset.
Either 1 or 2. Defaults to 1.
-'columns Number of columns used to display a character in this charset.
+`columns' Number of columns used to display a character in this charset.
Only used in TTY mode. (Under X, the actual width of a
character can be derived from the font used to display the
characters.) If unspecified, defaults to the dimension
(this is almost always the correct value).
-'chars Number of characters in each dimension (94 or 96).
+`chars' Number of characters in each dimension (94 or 96).
Defaults to 94. Note that if the dimension is 2, the
character set thus described is 94x94 or 96x96.
-'final Final byte of ISO 2022 escape sequence. Must be
+`final' Final byte of ISO 2022 escape sequence. Must be
supplied. Each combination of (DIMENSION, CHARS) defines a
separate namespace for final bytes. Note that ISO
2022 restricts the final byte to the range
@@ -442,22 +438,22 @@ character set. Recognized properties ar
dimension == 2. Note also that final bytes in the range
0x30 - 0x3F are reserved for user-defined (not official)
character sets.
-'graphic 0 (use left half of font on output) or 1 (use right half
+`graphic' 0 (use left half of font on output) or 1 (use right half
of font on output). Defaults to 0. For example, for
a font whose registry is ISO8859-1, the left half
(octets 0x20 - 0x7F) is the `ascii' character set, while
the right half (octets 0xA0 - 0xFF) is the `latin-1'
- character set. With 'graphic set to 0, the octets
+ character set. With `graphic' set to 0, the octets
will have their high bit cleared; with it set to 1,
the octets will have their high bit set.
-'direction 'l2r (left-to-right) or 'r2l (right-to-left).
- Defaults to 'l2r.
-'ccl-program A compiled CCL program used to convert a character in
+`direction' `l2r' (left-to-right) or `r2l' (right-to-left).
+ Defaults to `l2r'.
+`ccl-program' A compiled CCL program used to convert a character in
this charset into an index into the font. This is in
- addition to the 'graphic property. The CCL program
+ addition to the `graphic' property. The CCL program
is passed the octets of the character, with the high
bit cleared and set depending upon whether the value
- of the 'graphic property is 0 or 1.
+ of the `graphic' property is 0 or 1.
*/
(name, doc_string, props))
{
@@ -507,7 +503,7 @@ character set. Recognized properties ar
CHECK_INT (value);
dimension = XINT (value);
if (dimension < 1 || dimension > 2)
- invalid_constant ("Invalid value for 'dimension", value);
+ invalid_constant ("Invalid value for `dimension'", value);
}
else if (EQ (keyword, Qchars))
@@ -515,7 +511,7 @@ character set. Recognized properties ar
CHECK_INT (value);
chars = XINT (value);
if (chars != 94 && chars != 96)
- invalid_constant ("Invalid value for 'chars", value);
+ invalid_constant ("Invalid value for `chars'", value);
}
else if (EQ (keyword, Qcolumns))
@@ -523,7 +519,7 @@ character set. Recognized properties ar
CHECK_INT (value);
columns = XINT (value);
if (columns != 1 && columns != 2)
- invalid_constant ("Invalid value for 'columns", value);
+ invalid_constant ("Invalid value for `columns'", value);
}
else if (EQ (keyword, Qgraphic))
@@ -531,7 +527,7 @@ character set. Recognized properties ar
CHECK_INT (value);
graphic = XINT (value);
if (graphic < 0 || graphic > 1)
- invalid_constant ("Invalid value for 'graphic", value);
+ invalid_constant ("Invalid value for `graphic'", value);
}
else if (EQ (keyword, Qregistry))
@@ -547,7 +543,7 @@ character set. Recognized properties ar
else if (EQ (value, Qr2l))
direction = CHARSET_RIGHT_TO_LEFT;
else
- invalid_constant ("Invalid value for 'direction", value);
+ invalid_constant ("Invalid value for `direction'", value);
}
else if (EQ (keyword, Qfinal))
@@ -555,7 +551,7 @@ character set. Recognized properties ar
CHECK_CHAR_COERCE_INT (value);
final = XCHAR (value);
if (final < '0' || final > '~')
- invalid_constant ("Invalid value for 'final", value);
+ invalid_constant ("Invalid value for `final'", value);
}
else if (EQ (keyword, Qccl_program))
@@ -563,7 +559,7 @@ character set. Recognized properties ar
struct ccl_program test_ccl;
if (setup_ccl_program (&test_ccl, value) < 0)
- invalid_argument ("Invalid value for 'ccl-program", value);
+ invalid_argument ("Invalid value for `ccl-program'", value);
ccl_program = value;
}
else
@@ -572,7 +568,7 @@ character set. Recognized properties ar
}
if (!final)
- invalid_argument ("'final must be specified", Qunbound);
+ invalid_argument ("`final' must be specified", Qunbound);
if (dimension == 2 && final > 0x5F)
invalid_constant
("Final must be in the range 0x30 - 0x5F for dimension == 2",
@@ -791,7 +787,7 @@ Return dimension of CHARSET.
DEFUN ("charset-property", Fcharset_property, 2, 2, 0, /*
Return property PROP of CHARSET, a charset object or symbol naming a charset.
Recognized properties are those listed in `make-charset', as well as
-'name and 'doc-string.
+`name' and `doc-string'.
*/
(charset, prop))
{
@@ -836,7 +832,7 @@ Return charset identification number of
allow to be set. */
DEFUN ("set-charset-ccl-program", Fset_charset_ccl_program, 2, 2, 0, /*
-Set the 'ccl-program property of CHARSET to CCL-PROGRAM.
+Set the `ccl-program' property of CHARSET to CCL-PROGRAM.
*/
(charset, ccl_program))
{
@@ -852,7 +848,7 @@ Set the 'ccl-program property of CHARSET
/* Japanese folks may want to (set-charset-registry 'ascii "jisx0201")
*/
DEFUN ("set-charset-registry", Fset_charset_registry, 2, 2, 0, /*
-Set the 'registry property of CHARSET to REGISTRY.
+Set the `registry' property of CHARSET to REGISTRY.
*/
(charset, registry))
{
@@ -884,11 +880,7 @@ compute_charset_usage (Lisp_Object chars
{
struct Lisp_Charset *c = XCHARSET (charset);
xzero (*stats);
-#ifdef MC_ALLOC
- stats->other += mc_alloced_storage_size (sizeof (*c), ovstats);
-#else /* not MC_ALLOC */
- stats->other += malloced_storage_size (c, sizeof (*c), ovstats);
-#endif /* not MC_ALLOC */
+ stats->other += LISPOBJ_STORAGE_SIZE (c, sizeof (*c), ovstats);
stats->from_unicode += compute_from_unicode_table_size (charset, ovstats);
stats->to_unicode += compute_to_unicode_table_size (charset, ovstats);
}
1.12.2.2 +2 -2 XEmacs/xemacs/src/number.c
Index: number.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/number.c,v
retrieving revision 1.12.2.1
retrieving revision 1.12.2.2
diff -u -p -r1.12.2.1 -r1.12.2.2
--- number.c 2005/03/15 05:24:34 1.12.2.1
+++ number.c 2005/11/06 16:14:54 1.12.2.2
@@ -675,8 +675,8 @@ DEFUN ("coerce-number", Fcoerce_number,
Convert NUMBER to the indicated type, possibly losing information.
Do not call this function. Use `coerce' instead.
-TYPE is one of the symbols 'fixnum, 'integer, 'ratio, 'float, or
'bigfloat.
-Not all of these types may be supported.
+TYPE is one of the symbols `fixnum', `integer', `ratio', `float', or
+`bigfloat'. Not all of these types may be supported.
PRECISION is the number of bits of precision to use when converting to
bigfloat; it is ignored otherwise. If nil, the default precision is used.
1.3.2.3 +2 -10 XEmacs/xemacs/src/objects-impl.h
Index: objects-impl.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/objects-impl.h,v
retrieving revision 1.3.2.2
retrieving revision 1.3.2.3
diff -u -p -r1.3.2.2 -r1.3.2.3
--- objects-impl.h 2005/07/13 04:46:54 1.3.2.2
+++ objects-impl.h 2005/11/06 16:14:54 1.3.2.3
@@ -99,11 +99,7 @@ extern Lisp_Object Qface_boolean;
struct Lisp_Color_Instance
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object name;
Lisp_Object device;
@@ -123,11 +119,7 @@ struct Lisp_Color_Instance
struct Lisp_Font_Instance
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object name; /* the instantiator used to create the font instance */
Lisp_Object truename; /* used by the device-specific methods; we need to
call them to get the truename (#### in reality,
1.23.2.4 +4 -20 XEmacs/xemacs/src/objects.c
Index: objects.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/objects.c,v
retrieving revision 1.23.2.3
retrieving revision 1.23.2.4
diff -u -p -r1.23.2.3 -r1.23.2.4
--- objects.c 2005/07/13 04:46:54 1.23.2.3
+++ objects.c 2005/11/06 16:14:55 1.23.2.4
@@ -178,11 +178,7 @@ is deallocated as well.
CHECK_STRING (name);
device = wrap_device (decode_device (device));
-#ifdef MC_ALLOC
- c = alloc_lrecord_type (Lisp_Color_Instance, &lrecord_color_instance);
-#else /* not MC_ALLOC */
- c = alloc_lcrecord_type (Lisp_Color_Instance, &lrecord_color_instance);
-#endif /* not MC_ALLOC */
+ c = ALLOC_LCRECORD_TYPE (Lisp_Color_Instance, &lrecord_color_instance);
c->name = name;
c->device = device;
c->data = 0;
@@ -396,11 +392,7 @@ these objects are GCed, the underlying G
device = wrap_device (decode_device (device));
-#ifdef MC_ALLOC
- f = alloc_lrecord_type (Lisp_Font_Instance, &lrecord_font_instance);
-#else /* not MC_ALLOC */
- f = alloc_lcrecord_type (Lisp_Font_Instance, &lrecord_font_instance);
-#endif /* not MC_ALLOC */
+ f = ALLOC_LCRECORD_TYPE (Lisp_Font_Instance, &lrecord_font_instance);
f->name = name;
f->truename = Qnil;
f->device = device;
@@ -1222,11 +1214,7 @@ reinit_vars_of_objects (void)
staticpro_nodump (&Vthe_null_color_instance);
{
Lisp_Color_Instance *c =
-#ifdef MC_ALLOC
- alloc_lrecord_type (Lisp_Color_Instance, &lrecord_color_instance);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (Lisp_Color_Instance, &lrecord_color_instance);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (Lisp_Color_Instance, &lrecord_color_instance);
c->name = Qnil;
c->device = Qnil;
c->data = 0;
@@ -1237,11 +1225,7 @@ reinit_vars_of_objects (void)
staticpro_nodump (&Vthe_null_font_instance);
{
Lisp_Font_Instance *f =
-#ifdef MC_ALLOC
- alloc_lrecord_type (Lisp_Font_Instance, &lrecord_font_instance);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (Lisp_Font_Instance, &lrecord_font_instance);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (Lisp_Font_Instance, &lrecord_font_instance);
f->name = Qnil;
f->truename = Qnil;
f->device = Qnil;
1.18.2.3 +1 -5 XEmacs/xemacs/src/opaque.c
Index: opaque.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/opaque.c,v
retrieving revision 1.18.2.2
retrieving revision 1.18.2.3
diff -u -p -r1.18.2.2 -r1.18.2.3
--- opaque.c 2005/07/13 04:46:55 1.18.2.2
+++ opaque.c 2005/11/06 16:14:55 1.18.2.3
@@ -75,11 +75,7 @@ Lisp_Object
make_opaque (const void *data, Bytecount size)
{
Lisp_Opaque *p = (Lisp_Opaque *)
-#ifdef MC_ALLOC
- alloc_lrecord (aligned_sizeof_opaque (size), &lrecord_opaque);
-#else /* not MC_ALLOC */
- basic_alloc_lcrecord (aligned_sizeof_opaque (size), &lrecord_opaque);
-#endif /* not MC_ALLOC */
+ BASIC_ALLOC_LCRECORD (aligned_sizeof_opaque (size), &lrecord_opaque);
p->size = size;
if (data == OPAQUE_CLEAR)
1.9.2.2 +2 -10 XEmacs/xemacs/src/opaque.h
Index: opaque.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/opaque.h,v
retrieving revision 1.9.2.1
retrieving revision 1.9.2.2
diff -u -p -r1.9.2.1 -r1.9.2.2
--- opaque.h 2005/07/13 04:46:55 1.9.2.1
+++ opaque.h 2005/11/06 16:14:55 1.9.2.2
@@ -28,11 +28,7 @@ Boston, MA 02111-1307, USA. */
typedef struct Lisp_Opaque
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Bytecount size;
max_align_t data[1];
} Lisp_Opaque;
@@ -58,11 +54,7 @@ Lisp_Object make_opaque (const void *dat
typedef struct Lisp_Opaque_Ptr
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
void *ptr;
} Lisp_Opaque_Ptr;
1.51.2.4 +2 -8 XEmacs/xemacs/src/print.c
Index: print.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/print.c,v
retrieving revision 1.51.2.3
retrieving revision 1.51.2.4
diff -u -p -r1.51.2.3 -r1.51.2.4
--- print.c 2005/07/13 04:46:55 1.51.2.3
+++ print.c 2005/11/06 16:14:55 1.51.2.4
@@ -1453,13 +1453,7 @@ static void
default_object_printer (Lisp_Object obj, Lisp_Object printcharfun,
int UNUSED (escapeflag))
{
-#ifdef MC_ALLOC
- struct lrecord_header *header =
- (struct lrecord_header *) XPNTR (obj);
-#else /* not MC_ALLOC */
- struct lcrecord_header *header =
- (struct lcrecord_header *) XPNTR (obj);
-#endif /* not MC_ALLOC */
+ struct LCRECORD_HEADER *header = (struct LCRECORD_HEADER *) XPNTR (obj);
if (print_readably)
printing_unreadable_object
@@ -2225,7 +2219,7 @@ debug_p4 (Lisp_Object obj)
LHEADER_IMPLEMENTATION (header)->name,
LHEADER_IMPLEMENTATION (header)->basic_p ?
(EMACS_INT) header :
- ((struct lcrecord_header *) header)->uid);
+ ((struct old_lcrecord_header *) header)->uid);
#endif /* not MC_ALLOC */
}
1.65.2.3 +5 -9 XEmacs/xemacs/src/process.c
Index: process.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/process.c,v
retrieving revision 1.65.2.2
retrieving revision 1.65.2.3
diff -u -p -r1.65.2.2 -r1.65.2.3
--- process.c 2005/07/13 04:46:55 1.65.2.2
+++ process.c 2005/11/06 16:14:55 1.65.2.3
@@ -2,7 +2,7 @@
Copyright (C) 1985, 1986, 1987, 1988, 1992, 1993, 1994, 1995
Free Software Foundation, Inc.
Copyright (C) 1995 Sun Microsystems, Inc.
- Copyright (C) 1995, 1996, 2001, 2002, 2004 Ben Wing.
+ Copyright (C) 1995, 1996, 2001, 2002, 2004, 2005 Ben Wing.
This file is part of XEmacs.
@@ -483,11 +483,7 @@ make_process_internal (Lisp_Object name)
{
Lisp_Object val, name1;
int i;
-#ifdef MC_ALLOC
- Lisp_Process *p = alloc_lrecord_type (Lisp_Process, &lrecord_process);
-#else /* not MC_ALLOC */
- Lisp_Process *p = alloc_lcrecord_type (Lisp_Process, &lrecord_process);
-#endif /* not MC_ALLOC */
+ Lisp_Process *p = ALLOC_LCRECORD_TYPE (Lisp_Process, &lrecord_process);
#define MARKED_SLOT(x) p->x = Qnil;
#include "process-slots.h"
@@ -846,9 +842,9 @@ Third arg HOST (a string) is the name o
or its IP address.
Fourth arg SERVICE is the name of the service desired (a string),
or an integer specifying a port number to connect to.
-Optional fifth arg PROTOCOL is a network protocol. Currently only 'tcp
- (Transmission Control Protocol) and 'udp (User Datagram Protocol) are
- supported. When omitted, 'tcp is assumed.
+Optional fifth arg PROTOCOL is a network protocol. Currently only `tcp'
+ (Transmission Control Protocol) and `udp' (User Datagram Protocol) are
+ supported. When omitted, `tcp' is assumed.
Output via `process-send-string' and input via buffer or filter (see
`set-process-filter') are stream-oriented. That means UDP datagrams are
1.12.2.2 +1 -5 XEmacs/xemacs/src/procimpl.h
Index: procimpl.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/procimpl.h,v
retrieving revision 1.12.2.1
retrieving revision 1.12.2.2
diff -u -p -r1.12.2.1 -r1.12.2.2
--- procimpl.h 2005/07/13 04:46:56 1.12.2.1
+++ procimpl.h 2005/11/06 16:14:56 1.12.2.2
@@ -94,11 +94,7 @@ extern struct process_methods the_proces
struct Lisp_Process
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
/* Exit code if process has terminated,
signal which stopped/interrupted process
1.1.4.2 +6 -1 XEmacs/xemacs/src/profile.h
Index: profile.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/profile.h,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -p -r1.1.4.1 -r1.1.4.2
--- profile.h 2005/03/15 05:24:38 1.1.4.1
+++ profile.h 2005/11/06 16:14:56 1.1.4.2
@@ -1,5 +1,5 @@
/* Profiling.
- Copyright (C) 2003 Ben Wing.
+ Copyright (C) 2003, 2005 Ben Wing.
This file is part of XEmacs.
@@ -71,6 +71,11 @@ while (0)
function. (To do this, we always need some sort of collusion between
profile and eval; this is one way.) */
+/* Or, we could call xzero() to zero the whole thing, and avoid four
+ of the statements below; or we could create a global backtrace object,
+ uninitialized (i.e. it will be initialized to all 0), and do structure
+ copy to initialize. It's not clear it will make much difference here,
+ but someone who really cared about counting cycles could implement it. */
#define PROFILE_RECORD_ENTERING_SECTION(var) \
do \
{ \
1.18.2.3 +5 -5 XEmacs/xemacs/src/ralloc.c
Index: ralloc.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ralloc.c,v
retrieving revision 1.18.2.2
retrieving revision 1.18.2.3
diff -u -p -r1.18.2.2 -r1.18.2.3
--- ralloc.c 2005/09/20 16:06:10 1.18.2.2
+++ ralloc.c 2005/11/06 16:14:56 1.18.2.3
@@ -274,22 +274,22 @@ obtain (POINTER address, size_t size)
get more space. */
if (heap == NIL_HEAP)
{
- POINTER new = (*real_morecore)(0);
+ POINTER new_ = (*real_morecore)(0);
size_t get;
already_available = (char *)last_heap->end - (char *)address;
- if (new != last_heap->end)
+ if (new_ != last_heap->end)
{
/* Someone else called sbrk. Make a new heap. */
- heap_ptr new_heap = (heap_ptr) MEM_ROUNDUP (new);
+ heap_ptr new_heap = (heap_ptr) MEM_ROUNDUP (new_);
POINTER bloc_start = (POINTER) MEM_ROUNDUP ((POINTER)(new_heap + 1));
- if ((*real_morecore) (bloc_start - new) != new)
+ if ((*real_morecore) (bloc_start - new_) != new_)
return 0;
- new_heap->start = new;
+ new_heap->start = new_;
new_heap->end = bloc_start;
new_heap->bloc_start = bloc_start;
new_heap->free = bloc_start;
1.17.2.5 +2 -11 XEmacs/xemacs/src/rangetab.c
Index: rangetab.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/rangetab.c,v
retrieving revision 1.17.2.4
retrieving revision 1.17.2.5
diff -u -p -r1.17.2.4 -r1.17.2.5
--- rangetab.c 2005/09/27 16:29:37 1.17.2.4
+++ rangetab.c 2005/11/06 16:14:56 1.17.2.5
@@ -328,13 +328,8 @@ Range tables allow you to efficiently se
*/
(type))
{
-#ifdef MC_ALLOC
- Lisp_Range_Table *rt = alloc_lrecord_type (Lisp_Range_Table,
- &lrecord_range_table);
-#else /* not MC_ALLOC */
- Lisp_Range_Table *rt = alloc_lcrecord_type (Lisp_Range_Table,
+ Lisp_Range_Table *rt = ALLOC_LCRECORD_TYPE (Lisp_Range_Table,
&lrecord_range_table);
-#endif /* not MC_ALLOC */
rt->entries = Dynarr_new (range_table_entry);
rt->type = range_table_symbol_to_type (type);
return wrap_range_table (rt);
@@ -352,11 +347,7 @@ The values will not themselves be copied
CHECK_RANGE_TABLE (range_table);
rt = XRANGE_TABLE (range_table);
-#ifdef MC_ALLOC
- rtnew = alloc_lrecord_type (Lisp_Range_Table, &lrecord_range_table);
-#else /* not MC_ALLOC */
- rtnew = alloc_lcrecord_type (Lisp_Range_Table, &lrecord_range_table);
-#endif /* not MC_ALLOC */
+ rtnew = ALLOC_LCRECORD_TYPE (Lisp_Range_Table, &lrecord_range_table);
rtnew->entries = Dynarr_new (range_table_entry);
rtnew->type = rt->type;
1.5.8.3 +1 -5 XEmacs/xemacs/src/rangetab.h
Index: rangetab.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/rangetab.h,v
retrieving revision 1.5.8.2
retrieving revision 1.5.8.3
diff -u -p -r1.5.8.2 -r1.5.8.3
--- rangetab.h 2005/07/13 04:46:57 1.5.8.2
+++ rangetab.h 2005/11/06 16:14:57 1.5.8.3
@@ -49,11 +49,7 @@ enum range_table_type
struct Lisp_Range_Table
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
range_table_entry_dynarr *entries;
enum range_table_type type;
};
1.92.2.3 +9 -9 XEmacs/xemacs/src/redisplay.c
Index: redisplay.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/redisplay.c,v
retrieving revision 1.92.2.2
retrieving revision 1.92.2.3
diff -u -p -r1.92.2.2 -r1.92.2.3
--- redisplay.c 2005/03/15 05:24:42 1.92.2.2
+++ redisplay.c 2005/11/06 16:14:57 1.92.2.3
@@ -1,7 +1,7 @@
/* Display generation from window structure and buffer text.
Copyright (C) 1994, 1995, 1996 Board of Trustees, University of Illinois.
Copyright (C) 1995 Free Software Foundation, Inc.
- Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003 Ben Wing.
+ Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003, 2005 Ben Wing.
Copyright (C) 1995 Sun Microsystems, Inc.
Copyright (C) 1996 Chuck Thompson.
@@ -472,7 +472,7 @@ int no_redraw_on_reenter;
Lisp_Object Vwindow_system; /* nil or a symbol naming the window system
under which emacs is running
- ('x is the only current possibility) */
+ (`x' is the only current possibility) */
Lisp_Object Vinitial_window_system;
Lisp_Object Vglobal_mode_string;
@@ -715,7 +715,7 @@ get_display_block_from_line (struct disp
{
struct display_block *dbp = Dynarr_atp (dl->display_blocks, elt);
- /* 'add' the block to the list */
+ /* "add" the block to the list */
Dynarr_increment (dl->display_blocks);
/* initialize and return */
@@ -1784,7 +1784,7 @@ add_propagation_runes (prop_block_dynarr
}
}
-/* Add 'text layout glyphs at position POS_TYPE that are contained to
+/* Add `text' layout glyphs at position POS_TYPE that are contained to
the display block, but add all other types to the appropriate list
of the display line. They will be added later by different
routines. */
@@ -6868,7 +6868,7 @@ redisplay_frame (struct frame *f, int pr
/* The menubar, toolbar, and icon updates should be done before
enter_redisplay_critical_section is called and we are officially
- 'in_display'. They is because they tend to eval Lisp code, which
+ `in_display'. They is because they tend to eval Lisp code, which
needs to be carefully wrapped within the critical section (and hence
is difficult to debug). */
@@ -9913,8 +9913,8 @@ If this is zero, point is always centere
Default behavior is to flash the whole screen. On some platforms,
special effects are available using the following values:
-'display Flash the whole screen (ie, the default behavior).
-'top-bottom Flash only the top and bottom lines of the selected frame.
+`display' Flash the whole screen (ie, the default behavior).
+`top-bottom' Flash only the top and bottom lines of the selected frame.
When effects are unavailable on a platform, the visual bell is the
default, whole screen. (Currently only X supports any special effects.)
@@ -10047,7 +10047,7 @@ This is a specifier; use `set-specifier'
DEFVAR_SPECIFIER ("use-left-overflow", &Vuse_left_overflow /*
*Non-nil means use the left outside margin as extra whitespace when
-displaying 'whitespace or 'inside-margin glyphs.
+displaying `whitespace' or `inside-margin' glyphs.
This is a specifier; use `set-specifier' to change it.
*/ );
Vuse_left_overflow = Fmake_specifier (Qboolean);
@@ -10059,7 +10059,7 @@ This is a specifier; use `set-specifier'
DEFVAR_SPECIFIER ("use-right-overflow", &Vuse_right_overflow /*
*Non-nil means use the right outside margin as extra whitespace when
-displaying 'whitespace or 'inside-margin glyphs.
+displaying `whitespace' or `inside-margin' glyphs.
This is a specifier; use `set-specifier' to change it.
*/ );
Vuse_right_overflow = Fmake_specifier (Qboolean);
1.15.2.3 +0 -4 XEmacs/xemacs/src/scrollbar-gtk.c
Index: scrollbar-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/scrollbar-gtk.c,v
retrieving revision 1.15.2.2
retrieving revision 1.15.2.3
diff -u -p -r1.15.2.2 -r1.15.2.3
--- scrollbar-gtk.c 2005/07/13 04:46:57 1.15.2.2
+++ scrollbar-gtk.c 2005/11/06 16:14:58 1.15.2.3
@@ -484,11 +484,7 @@ gtk_compute_scrollbar_instance_usage (st
struct gtk_scrollbar_data *data =
(struct gtk_scrollbar_data *) inst->scrollbar_data;
-#ifdef MC_ALLOC
- total += mc_alloced_storage_size (sizeof (*data), ovstats);
-#else /* not MC_ALLOC */
total += malloced_storage_size (data, sizeof (*data), ovstats);
-#endif /* not MC_ALLOC */
inst = inst->next;
}
1.28.2.2 +0 -4 XEmacs/xemacs/src/scrollbar-msw.c
Index: scrollbar-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/scrollbar-msw.c,v
retrieving revision 1.28.2.1
retrieving revision 1.28.2.2
diff -u -p -r1.28.2.1 -r1.28.2.2
--- scrollbar-msw.c 2005/07/13 04:46:57 1.28.2.1
+++ scrollbar-msw.c 2005/11/06 16:14:58 1.28.2.2
@@ -433,11 +433,7 @@ mswindows_compute_scrollbar_instance_usa
struct mswindows_scrollbar_data *data =
(struct mswindows_scrollbar_data *) inst->scrollbar_data;
-#ifdef MC_ALLOC
- total += mc_alloced_storage_size (sizeof (*data), ovstats);
-#else /* not MC_ALLOC */
total += malloced_storage_size (data, sizeof (*data), ovstats);
-#endif /* not MC_ALLOC */
inst = inst->next;
}
1.27.2.3 +0 -5 XEmacs/xemacs/src/scrollbar-x.c
Index: scrollbar-x.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/scrollbar-x.c,v
retrieving revision 1.27.2.2
retrieving revision 1.27.2.3
diff -u -p -r1.27.2.2 -r1.27.2.3
--- scrollbar-x.c 2005/07/13 04:46:57 1.27.2.2
+++ scrollbar-x.c 2005/11/06 16:14:58 1.27.2.3
@@ -703,14 +703,9 @@ x_compute_scrollbar_instance_usage (stru
struct x_scrollbar_data *data =
(struct x_scrollbar_data *) inst->scrollbar_data;
-#ifdef MC_ALLOC
- total += mc_alloced_storage_size (sizeof (*data), ovstats);
- total += mc_alloced_storage_size (1 + strlen (data->name), ovstats);
-#else /* not MC_ALLOC */
total += malloced_storage_size (data, sizeof (*data), ovstats);
total += malloced_storage_size (data->name, 1 + strlen (data->name),
ovstats);
-#endif /* not MC_ALLOC */
inst = inst->next;
}
1.32.2.3 +2 -11 XEmacs/xemacs/src/scrollbar.c
Index: scrollbar.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/scrollbar.c,v
retrieving revision 1.32.2.2
retrieving revision 1.32.2.3
diff -u -p -r1.32.2.2 -r1.32.2.3
--- scrollbar.c 2005/07/13 04:46:58 1.32.2.2
+++ scrollbar.c 2005/11/06 16:14:58 1.32.2.3
@@ -199,13 +199,8 @@ create_scrollbar_instance (struct frame
{
struct device *d = XDEVICE (f->device);
struct scrollbar_instance *instance =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct scrollbar_instance,
- &lrecord_scrollbar_instance);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (struct scrollbar_instance,
+ ALLOC_LCRECORD_TYPE (struct scrollbar_instance,
&lrecord_scrollbar_instance);
-#endif /* not MC_ALLOC */
MAYBE_DEVMETH (d, create_scrollbar_instance, (f, vertical, instance));
@@ -277,11 +272,7 @@ compute_scrollbar_instance_usage (struct
while (inst)
{
-#ifdef MC_ALLOC
- total += mc_alloced_storage_size (sizeof (*inst), ovstats);
-#else /* not MC_ALLOC */
- total += malloced_storage_size (inst, sizeof (*inst), ovstats);
-#endif /* not MC_ALLOC */
+ total += LISPOBJ_STORAGE_SIZE (inst, sizeof (*inst), ovstats);
inst = inst->next;
}
1.5.8.2 +1 -5 XEmacs/xemacs/src/scrollbar.h
Index: scrollbar.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/scrollbar.h,v
retrieving revision 1.5.8.1
retrieving revision 1.5.8.2
diff -u -p -r1.5.8.1 -r1.5.8.2
--- scrollbar.h 2005/07/13 04:46:58 1.5.8.1
+++ scrollbar.h 2005/11/06 16:14:58 1.5.8.2
@@ -27,11 +27,7 @@ Boston, MA 02111-1307, USA. */
struct scrollbar_instance
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
/* Used by the frame caches. */
struct scrollbar_instance *next;
1.5.2.1 +1 -1 XEmacs/xemacs/src/select-common.h
Index: select-common.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/select-common.h,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -p -r1.5 -r1.5.2.1
--- select-common.h 2004/11/04 23:06:52 1.5
+++ select-common.h 2005/11/06 16:14:59 1.5.2.1
@@ -59,7 +59,7 @@ Boston, MA 02111-1307, USA. */
representation are as above.
NOTE: Under Mule, when someone shoves us a string without a type, we
- set the type to 'COMPOUND_TEXT and automatically convert to Compound
+ set the type to `COMPOUND_TEXT' and automatically convert to Compound
Text. If the string has a type, we assume that the user wants the
data sent as-is so we just do "binary" conversion.
*/
1.6.6.3 +12 -12 XEmacs/xemacs/src/select.c
Index: select.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/select.c,v
retrieving revision 1.6.6.2
retrieving revision 1.6.6.3
diff -u -p -r1.6.6.2 -r1.6.6.3
--- select.c 2005/07/13 04:46:59 1.6.6.2
+++ select.c 2005/11/06 16:14:59 1.6.6.3
@@ -107,7 +107,7 @@ get_local_selection (Lisp_Object selecti
return Qnil;
}
-/* #### Should perhaps handle 'MULTIPLE. The code below is now completely
+/* #### Should perhaps handle `MULTIPLE'. The code below is now completely
broken due to a re-organization of get_local_selection, but I've left
it here should anyone show an interest - ajh */
#if 0
@@ -861,33 +861,33 @@ For X, the return value should be one of
explicitly specifies the type that will be sent.
-- a string (If the type is not specified, then if Mule support exists,
the string will be converted to Compound Text and sent in
- the 'COMPOUND_TEXT format; otherwise (no Mule support),
- the string will be left as-is and sent in the 'STRING
+ the `COMPOUND_TEXT' format; otherwise (no Mule support),
+ the string will be left as-is and sent in the `STRING'
format. If the type is specified, the string will be
left as-is (or converted to binary format under Mule).
In all cases, 8-bit data it sent.)
-- a character (With Mule support, will be converted to Compound Text
whether or not a type is specified. If a type is not
- specified, a type of 'STRING or 'COMPOUND_TEXT will be
+ specified, a type of `STRING' or `COMPOUND_TEXT' will be
sent, as for strings.)
--- the symbol 'NULL (Indicates that there is no meaningful return value.
- Empty 32-bit data with a type of 'NULL will be sent.)
+-- the symbol `NULL' (Indicates that there is no meaningful return value.
+ Empty 32-bit data with a type of `NULL' will be sent.)
-- a symbol (Will be converted into an atom. If the type is not specified,
- a type of 'ATOM will be sent.)
+ a type of `ATOM' will be sent.)
-- an integer (Will be converted into a 16-bit or 32-bit integer depending
on the value. If the type is not specified, a type of
- 'INTEGER will be sent.)
+ `INTEGER' will be sent.)
-- a cons (HIGH . LOW) of integers (Will be converted into a 32-bit integer.
If the type is not specified, a type of
- 'INTEGER will be sent.)
+ `INTEGER' will be sent.)
-- a vector of symbols (Will be converted into a list of atoms. If the type
- is not specified, a type of 'ATOM will be sent.)
+ is not specified, a type of `ATOM' will be sent.)
-- a vector of integers (Will be converted into a list of 16-bit integers.
- If the type is not specified, a type of 'INTEGER
+ If the type is not specified, a type of `INTEGER'
will be sent.)
-- a vector of integers and/or conses (HIGH . LOW) of integers
(Will be converted into a list of 16-bit integers.
- If the type is not specified, a type of 'INTEGER
+ If the type is not specified, a type of `INTEGER'
will be sent.)
*/ );
Vselection_converter_out_alist = Qnil;
1.36.2.4 +1 -6 XEmacs/xemacs/src/specifier.c
Index: specifier.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/specifier.c,v
retrieving revision 1.36.2.3
retrieving revision 1.36.2.4
diff -u -p -r1.36.2.3 -r1.36.2.4
--- specifier.c 2005/09/27 16:29:37 1.36.2.3
+++ specifier.c 2005/11/06 16:14:59 1.36.2.4
@@ -493,13 +493,8 @@ make_specifier_internal (struct specifie
{
Lisp_Object specifier;
Lisp_Specifier *sp = (Lisp_Specifier *)
-#ifdef MC_ALLOC
- alloc_lrecord (aligned_sizeof_specifier (data_size),
- &lrecord_specifier);
-#else /* not MC_ALLOC */
- basic_alloc_lcrecord (aligned_sizeof_specifier (data_size),
+ BASIC_ALLOC_LCRECORD (aligned_sizeof_specifier (data_size),
&lrecord_specifier);
-#endif /* not MC_ALLOC */
sp->methods = spec_meths;
sp->global_specs = Qnil;
1.14.2.3 +1 -5 XEmacs/xemacs/src/specifier.h
Index: specifier.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/specifier.h,v
retrieving revision 1.14.2.2
retrieving revision 1.14.2.3
diff -u -p -r1.14.2.2 -r1.14.2.3
--- specifier.h 2005/07/13 04:47:00 1.14.2.2
+++ specifier.h 2005/11/06 16:14:59 1.14.2.3
@@ -216,11 +216,7 @@ struct specifier_methods
struct Lisp_Specifier
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
struct specifier_methods *methods;
/* we keep a chained list of all current specifiers, for GC cleanup
1.46.2.4 +47 -27 XEmacs/xemacs/src/symbols.c
Index: symbols.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/symbols.c,v
retrieving revision 1.46.2.3
retrieving revision 1.46.2.4
diff -u -p -r1.46.2.3 -r1.46.2.4
--- symbols.c 2005/07/13 04:47:01 1.46.2.3
+++ symbols.c 2005/11/06 16:15:00 1.46.2.4
@@ -2187,13 +2187,8 @@ sets it.
{
struct symbol_value_buffer_local *bfwd
-#ifdef MC_ALLOC
- = alloc_lrecord_type (struct symbol_value_buffer_local,
- &lrecord_symbol_value_buffer_local);
-#else /* not MC_ALLOC */
- = alloc_lcrecord_type (struct symbol_value_buffer_local,
+ = ALLOC_LCRECORD_TYPE (struct symbol_value_buffer_local,
&lrecord_symbol_value_buffer_local);
-#endif /* not MC_ALLOC */
Lisp_Object foo;
bfwd->magic.type = SYMVAL_BUFFER_LOCAL;
@@ -2300,13 +2295,8 @@ Use `make-local-hook' instead.
}
/* Make sure variable is set up to hold per-buffer values */
-#ifdef MC_ALLOC
- bfwd = alloc_lrecord_type (struct symbol_value_buffer_local,
- &lrecord_symbol_value_buffer_local);
-#else /* not MC_ALLOC */
- bfwd = alloc_lcrecord_type (struct symbol_value_buffer_local,
+ bfwd = ALLOC_LCRECORD_TYPE (struct symbol_value_buffer_local,
&lrecord_symbol_value_buffer_local);
-#endif /* not MC_ALLOC */
bfwd->magic.type = SYMVAL_SOME_BUFFER_LOCAL;
bfwd->current_buffer = Qnil;
@@ -3025,13 +3015,8 @@ pity, thereby invalidating your code.
valcontents = XSYMBOL (variable)->value;
if (!SYMBOL_VALUE_LISP_MAGIC_P (valcontents))
{
-#ifdef MC_ALLOC
- bfwd = alloc_lrecord_type (struct symbol_value_lisp_magic,
- &lrecord_symbol_value_lisp_magic);
-#else /* MC_ALLOC */
- bfwd = alloc_lcrecord_type (struct symbol_value_lisp_magic,
+ bfwd = ALLOC_LCRECORD_TYPE (struct symbol_value_lisp_magic,
&lrecord_symbol_value_lisp_magic);
-#endif /* not MC_ALLOC */
bfwd->magic.type = SYMVAL_LISP_MAGIC;
for (i = 0; i < MAGIC_HANDLER_MAX; i++)
{
@@ -3166,13 +3151,8 @@ has a buffer-local value in any buffer,
invalid_change ("Variable is magic and cannot be aliased", variable);
reject_constant_symbols (variable, Qunbound, 0, Qt);
-#ifdef MC_ALLOC
- bfwd = alloc_lrecord_type (struct symbol_value_varalias,
- &lrecord_symbol_value_varalias);
-#else /* not MC_ALLOC */
- bfwd = alloc_lcrecord_type (struct symbol_value_varalias,
+ bfwd = ALLOC_LCRECORD_TYPE (struct symbol_value_varalias,
&lrecord_symbol_value_varalias);
-#endif /* not MC_ALLOC */
bfwd->magic.type = SYMVAL_VARALIAS;
bfwd->aliasee = alias;
bfwd->shadowed = valcontents;
@@ -3276,7 +3256,7 @@ Lisp_Object Qnull_pointer;
/* some losing systems can't have static vars at function scope... */
static const struct symbol_value_magic guts_of_unbound_marker =
{ /* struct symbol_value_magic */
- { /* struct lcrecord_header */
+ { /* struct old_lcrecord_header */
{ /* struct lrecord_header */
lrecord_type_symbol_value_forward, /* lrecord_type_index */
1, /* mark bit */
@@ -3331,10 +3311,10 @@ init_symbols_once_early (void)
mcpro (wrap_pointer_1 (tem));
tem->value = 0;
tem->type = SYMVAL_UNBOUND_MARKER;
-#ifdef MC_ALLOC_TYPE_STATS
+#ifdef ALLOC_TYPE_STATS
inc_lrecord_stats (sizeof (struct symbol_value_magic),
(const struct lrecord_header *) tem);
-#endif /* not MC_ALLOC_TYPE_STATS */
+#endif /* ALLOC_TYPE_STATS */
#else /* not MC_ALLOC */
const struct symbol_value_magic *tem = &guts_of_unbound_marker;
#endif /* not MC_ALLOC */
@@ -3474,6 +3454,7 @@ check_sane_subr (Lisp_Subr *subr, Lisp_O
#endif
#ifdef HAVE_SHLIB
+#ifndef MC_ALLOC
/*
* If we are not in a pure undumped Emacs, we need to make a duplicate of
* the subr. This is because the only time this function will be called
@@ -3533,6 +3514,45 @@ do { \
subr = newsubr; \
} \
} while (0)
+#else /* MC_ALLOC */
+/*
+ * If we have the new allocator enabled, we do not need to make a
+ * duplicate of the subr. The new allocator already does allocate all
+ * subrs in Lisp-accessible memory rather than have it in the static
+ * subr struct.
+ *
+ * NOTE: The DOC pointer is not set here as described above.
+ */
+#define check_module_subr(subr) \
+do { \
+ if (initialized) { \
+ Lisp_Object f; \
+ \
+ if (subr->min_args < 0) \
+ signal_ferror (Qdll_error, "%s min_args (%hd) too small", \
+ subr_name (subr), subr->min_args); \
+ if (subr->min_args > SUBR_MAX_ARGS) \
+ signal_ferror (Qdll_error, "%s min_args (%hd) too big (max = %d)",
\
+ subr_name (subr), subr->min_args, SUBR_MAX_ARGS); \
+ \
+ if (subr->max_args != MANY && \
+ subr->max_args != UNEVALLED) \
+ { \
+ /* Need to fix lisp.h and eval.c if SUBR_MAX_ARGS too small */ \
+ if (subr->max_args > SUBR_MAX_ARGS) \
+ signal_ferror (Qdll_error, "%s max_args (%hd) too big (max = %d)", \
+ subr_name (subr), subr->max_args, SUBR_MAX_ARGS); \
+ if (subr->min_args > subr->max_args) \
+ signal_ferror (Qdll_error, "%s min_args (%hd) > max_args (%hd)", \
+ subr_name (subr), subr->min_args, subr->max_args); \
+ } \
+ \
+ f = XSYMBOL (sym)->function; \
+ if (!UNBOUNDP (f) && (!CONSP (f) || !EQ (XCAR (f), Qautoload))) \
+ signal_ferror (Qdll_error, "Attempt to redefine %s", subr_name (subr));
\
+ } \
+} while (0)
+#endif /* MC_ALLOC */
#else /* ! HAVE_SHLIB */
#define check_module_subr(subr)
#endif
1.12.2.3 +2 -6 XEmacs/xemacs/src/symeval.h
Index: symeval.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/symeval.h,v
retrieving revision 1.12.2.2
retrieving revision 1.12.2.3
diff -u -p -r1.12.2.2 -r1.12.2.3
--- symeval.h 2005/09/20 16:06:11 1.12.2.2
+++ symeval.h 2005/11/06 16:15:00 1.12.2.3
@@ -77,11 +77,7 @@ typedef EMACS_INT Fixnum;
struct symbol_value_magic
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header lcheader;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
void *value;
enum symbol_value_type type;
};
@@ -424,7 +420,7 @@ do \
static const struct symbol_value_forward I_hate_C = \
{ /* struct symbol_value_forward */ \
{ /* struct symbol_value_magic */ \
- { /* struct lcrecord_header */ \
+ { /* struct old_lcrecord_header */ \
{ /* struct lrecord_header */ \
lrecord_type_symbol_value_forward, /* lrecord_type_index */ \
1, /* mark bit */ \
1.22.2.2 +2 -2 XEmacs/xemacs/src/syntax.c
Index: syntax.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/syntax.c,v
retrieving revision 1.22.2.1
retrieving revision 1.22.2.2
diff -u -p -r1.22.2.1 -r1.22.2.2
--- syntax.c 2005/03/15 05:24:52 1.22.2.1
+++ syntax.c 2005/11/06 16:15:00 1.22.2.2
@@ -423,7 +423,7 @@ signal_syntax_table_extent_adjust (struc
`syntax_cache.*_change' are the next and previous positions at
which syntax_code and c_s_t will need to be recalculated.
- #### Currently this code uses 'get-char-property', which will
+ #### Currently this code uses `get-char-property', which will
return the "last smallest" extent at a given position. In cases
where overlapping extents are defined, this code will simply use
whatever is returned by get-char-property.
@@ -1828,7 +1828,7 @@ scan_sexps_forward (struct buffer *buf,
start_quoted = !NILP (tem);
/* if the eighth element of the list is nil, we are in comment style
- a; if it is t, we are in comment style b; if it is 'syntax-table,
+ a; if it is t, we are in comment style b; if it is `syntax-table',
we are in a generic comment */
oldstate = Fcdr (oldstate);
oldstate = Fcdr (oldstate);
1.18.2.3 +2 -2 XEmacs/xemacs/src/sysfile.h
Index: sysfile.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/sysfile.h,v
retrieving revision 1.18.2.2
retrieving revision 1.18.2.3
diff -u -p -r1.18.2.2 -r1.18.2.3
--- sysfile.h 2005/03/15 05:24:53 1.18.2.2
+++ sysfile.h 2005/11/06 16:15:01 1.18.2.3
@@ -391,10 +391,10 @@ Ibyte *qxe_realpath (const Ibyte *path,
int qxe_chmod (const Ibyte *path, mode_t mode);
#if defined (HAVE_LINK)
-int qxe_link (const Ibyte *existing, const Ibyte *new);
+int qxe_link (const Ibyte *existing, const Ibyte *new_);
#endif /* defined (HAVE_LINK) */
-int qxe_rename (const Ibyte *old, const Ibyte *new);
+int qxe_rename (const Ibyte *old, const Ibyte *new_);
#if defined (HAVE_SYMLINK)
int qxe_symlink (const Ibyte *name1, const Ibyte *name2);
1.15.2.2 +1 -1 XEmacs/xemacs/src/sysproc.h
Index: sysproc.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/sysproc.h,v
retrieving revision 1.15.2.1
retrieving revision 1.15.2.2
diff -u -p -r1.15.2.1 -r1.15.2.2
--- sysproc.h 2005/03/15 05:24:53 1.15.2.1
+++ sysproc.h 2005/11/06 16:15:01 1.15.2.2
@@ -102,7 +102,7 @@ Boston, MA 02111-1307, USA. */
#define EREMOTE WSAEREMOTE
#endif /* WIN32_NATIVE */
-/* On some systems, e.g. DGUX, inet_addr returns a 'struct in_addr'. */
+/* On some systems, e.g. DGUX, inet_addr returns a `struct in_addr'. */
#ifdef HAVE_BROKEN_INET_ADDR
# define IN_ADDR struct in_addr
# define NUMERIC_ADDR_ERROR (numeric_addr.s_addr == -1)
1.18.2.1 +1 -1 XEmacs/xemacs/src/systime.h
Index: systime.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/systime.h,v
retrieving revision 1.18
retrieving revision 1.18.2.1
diff -u -p -r1.18 -r1.18.2.1
--- systime.h 2003/02/20 08:19:43 1.18
+++ systime.h 2005/11/06 16:15:01 1.18.2.1
@@ -99,7 +99,7 @@ extern char *tzname[]; /* RS6000 and oth
#endif
/* EMACS_TIME is the type to use to represent temporal intervals.
- At one point this was 'struct timeval' on some systems, int on others.
+ At one point this was `struct timeval' on some systems, int on others.
But this is stupid. Other things than select() code like to
manipulate time values, and so microsecond precision should be
maintained. Separate typedefs and conversion functions are provided
1.23.2.3 +1 -1 XEmacs/xemacs/src/syswindows.h
Index: syswindows.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/syswindows.h,v
retrieving revision 1.23.2.2
retrieving revision 1.23.2.3
diff -u -p -r1.23.2.2 -r1.23.2.3
--- syswindows.h 2005/03/15 05:24:54 1.23.2.2
+++ syswindows.h 2005/11/06 16:15:01 1.23.2.3
@@ -1155,7 +1155,7 @@ DECLARE_INLINE_HEADER (int strcasecmp (c
/* in nt.c */
int mswindows_access (const Ibyte *path, int mode);
-int mswindows_link (const Ibyte *old, const Ibyte *new);
+int mswindows_link (const Ibyte *old, const Ibyte *new_);
int mswindows_rename (const Ibyte *oldname, const Ibyte *newname);
int mswindows_unlink (const Ibyte *path);
int mswindows_stat (const Ibyte *path, struct stat *buf);
1.33.2.3 +17 -21 XEmacs/xemacs/src/toolbar.c
Index: toolbar.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/toolbar.c,v
retrieving revision 1.33.2.2
retrieving revision 1.33.2.3
diff -u -p -r1.33.2.2 -r1.33.2.3
--- toolbar.c 2005/07/13 04:47:05 1.33.2.2
+++ toolbar.c 2005/11/06 16:15:01 1.33.2.3
@@ -244,34 +244,34 @@ decode_toolbar_position (Lisp_Object pos
DEFUN ("set-default-toolbar-position", Fset_default_toolbar_position, 1, 1,
0, /*
Set the position that the `default-toolbar' will be displayed at.
-Valid positions are 'top, 'bottom, 'left and 'right.
+Valid positions are `top', `bottom', `left' and `right'.
See `default-toolbar-position'.
*/
(position))
{
enum toolbar_pos cur = decode_toolbar_position (Vdefault_toolbar_position);
- enum toolbar_pos new = decode_toolbar_position (position);
+ enum toolbar_pos new_ = decode_toolbar_position (position);
- if (cur != new)
+ if (cur != new_)
{
/* The following calls will automatically cause the dirty
flags to be set; we delay frame size changes to avoid
lots of frame flickering. */
int depth = begin_hold_frame_size_changes ();
set_specifier_fallback (Vtoolbar[cur], list1 (Fcons (Qnil, Qnil)));
- set_specifier_fallback (Vtoolbar[new], Vdefault_toolbar);
+ set_specifier_fallback (Vtoolbar[new_], Vdefault_toolbar);
set_specifier_fallback (Vtoolbar_size[cur], list1 (Fcons (Qnil, Qzero)));
- set_specifier_fallback (Vtoolbar_size[new],
- new == TOP_TOOLBAR || new == BOTTOM_TOOLBAR
+ set_specifier_fallback (Vtoolbar_size[new_],
+ new_ == TOP_TOOLBAR || new_ == BOTTOM_TOOLBAR
? Vdefault_toolbar_height
: Vdefault_toolbar_width);
set_specifier_fallback (Vtoolbar_border_width[cur],
list1 (Fcons (Qnil, Qzero)));
- set_specifier_fallback (Vtoolbar_border_width[new],
+ set_specifier_fallback (Vtoolbar_border_width[new_],
Vdefault_toolbar_border_width);
set_specifier_fallback (Vtoolbar_visible_p[cur],
list1 (Fcons (Qnil, Qt)));
- set_specifier_fallback (Vtoolbar_visible_p[new],
+ set_specifier_fallback (Vtoolbar_visible_p[new_],
Vdefault_toolbar_visible_p);
Vdefault_toolbar_position = position;
unbind_to (depth);
@@ -303,11 +303,7 @@ update_toolbar_button (struct frame *f,
if (!tb)
{
-#ifdef MC_ALLOC
- tb = alloc_lrecord_type (struct toolbar_button, &lrecord_toolbar_button);
-#else /* not MC_ALLOC */
- tb = alloc_lcrecord_type (struct toolbar_button, &lrecord_toolbar_button);
-#endif /* not MC_ALLOC */
+ tb = ALLOC_LCRECORD_TYPE (struct toolbar_button, &lrecord_toolbar_button);
tb->next = Qnil;
tb->frame = wrap_frame (f);
tb->up_glyph = Qnil;
@@ -1051,7 +1047,7 @@ check_toolbar_button_keywords (Lisp_Obje
DEFUN ("check-toolbar-button-syntax", Fcheck_toolbar_button_syntax, 1, 2, 0,
/*
Verify the syntax of entry BUTTON in a toolbar description list.
If you want to verify the syntax of a toolbar description list as a
-whole, use `check-valid-instantiator' with a specifier type of 'toolbar.
+whole, use `check-valid-instantiator' with a specifier type of `toolbar'.
*/
(button, noerror))
{
@@ -1398,7 +1394,7 @@ Use `set-specifier' to change this.
The position of this toolbar is specified in the function
`default-toolbar-position'. If the corresponding position-specific
-toolbar (e.g. `top-toolbar' if `default-toolbar-position' is 'top)
+toolbar (e.g. `top-toolbar' if `default-toolbar-position' is `top')
does not specify a toolbar in a particular domain (usually a window),
then the value of `default-toolbar' in that domain, if any, will be
used instead.
@@ -1490,7 +1486,7 @@ For the first vector format:
For the other vector formats (specifying blank areas of the toolbar):
--- 2D-OR-3D should be one of the symbols '2d or '3d, indicating
+-- 2D-OR-3D should be one of the symbols `2d' or `3d', indicating
whether the area is displayed with shadows (giving it a raised,
3-d appearance) or without shadows (giving it a flat appearance).
@@ -1587,14 +1583,14 @@ This is a specifier; use `set-specifier'
The position of the default toolbar is specified by the function
`set-default-toolbar-position'. If the corresponding position-specific
toolbar thickness specifier (e.g. `top-toolbar-height' if
-`default-toolbar-position' is 'top) does not specify a thickness in a
+`default-toolbar-position' is `top') does not specify a thickness in a
particular domain (a window or a frame), then the value of
`default-toolbar-height' or `default-toolbar-width' (depending on the
toolbar orientation) in that domain, if any, will be used instead.
Note that `default-toolbar-height' is only used when
-`default-toolbar-position' is 'top or 'bottom, and
`default-toolbar-width'
-is only used when `default-toolbar-position' is 'left or 'right.
+`default-toolbar-position' is `top' or `bottom', and
`default-toolbar-width'
+is only used when `default-toolbar-position' is `left' or `right'.
Note that all of the position-specific toolbar thickness specifiers
have a fallback value of zero when they do not correspond to the
@@ -1772,7 +1768,7 @@ This is a specifier; use `set-specifier'
The position of the default toolbar is specified by the function
`set-default-toolbar-position'. If the corresponding position-specific
toolbar border width specifier (e.g. `top-toolbar-border-width' if
-`default-toolbar-position' is 'top) does not specify a border width in a
+`default-toolbar-position' is `top') does not specify a border width in a
particular domain (a window or a frame), then the value of
`default-toolbar-border-width' in that domain, if any, will be used
instead.
@@ -1886,7 +1882,7 @@ This is a specifier; use `set-specifier'
The position of the default toolbar is specified by the function
`set-default-toolbar-position'. If the corresponding position-specific
toolbar visibility specifier (e.g. `top-toolbar-visible-p' if
-`default-toolbar-position' is 'top) does not specify a visible-p value
+`default-toolbar-position' is `top') does not specify a visible-p value
in a particular domain (a window or a frame), then the value of
`default-toolbar-visible-p' in that domain, if any, will be used
instead.
1.13.6.2 +1 -5 XEmacs/xemacs/src/toolbar.h
Index: toolbar.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/toolbar.h,v
retrieving revision 1.13.6.1
retrieving revision 1.13.6.2
diff -u -p -r1.13.6.1 -r1.13.6.2
--- toolbar.h 2005/07/13 04:47:06 1.13.6.1
+++ toolbar.h 2005/11/06 16:15:02 1.13.6.2
@@ -38,11 +38,7 @@ Boston, MA 02111-1307, USA. */
struct toolbar_button
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object next;
Lisp_Object frame;
1.32.2.3 +18 -34 XEmacs/xemacs/src/tooltalk.c
Index: tooltalk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/tooltalk.c,v
retrieving revision 1.32.2.2
retrieving revision 1.32.2.3
diff -u -p -r1.32.2.2 -r1.32.2.3
--- tooltalk.c 2005/09/20 16:06:12 1.32.2.2
+++ tooltalk.c 2005/11/06 16:15:02 1.32.2.3
@@ -147,11 +147,7 @@ Lisp_Object Qtooltalk_messagep;
struct Lisp_Tooltalk_Message
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object plist_sym, callback;
Tt_message m;
};
@@ -195,11 +191,7 @@ make_tooltalk_message (Tt_message m)
{
Lisp_Object val;
Lisp_Tooltalk_Message *msg =
-#ifdef MC_ALLOC
- alloc_lrecord_type (Lisp_Tooltalk_Message, &lrecord_tooltalk_message);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (Lisp_Tooltalk_Message, &lrecord_tooltalk_message);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (Lisp_Tooltalk_Message, &lrecord_tooltalk_message);
msg->m = m;
msg->callback = Qnil;
@@ -233,11 +225,7 @@ Lisp_Object Qtooltalk_patternp;
struct Lisp_Tooltalk_Pattern
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
Lisp_Object plist_sym, callback;
Tt_pattern p;
};
@@ -280,11 +268,7 @@ static Lisp_Object
make_tooltalk_pattern (Tt_pattern p)
{
Lisp_Tooltalk_Pattern *pat =
-#ifdef MC_ALLOC
- alloc_lrecord_type (Lisp_Tooltalk_Pattern, &lrecord_tooltalk_pattern);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (Lisp_Tooltalk_Pattern, &lrecord_tooltalk_pattern);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (Lisp_Tooltalk_Pattern, &lrecord_tooltalk_pattern);
Lisp_Object val;
pat->p = p;
@@ -573,30 +557,30 @@ Return the indicated Tooltalk message at
identified by symbols with the same name (underscores and all) as the
suffix of the Tooltalk tt_message_<attribute> function that extracts the value.
String attribute values are copied, enumerated type values (except disposition)
-are converted to symbols - e.g. TT_HANDLER is 'TT_HANDLER, uid and gid are
+are converted to symbols - e.g. TT_HANDLER is `TT_HANDLER', uid and gid are
represented by fixnums (small integers), opnum is converted to a string,
and disposition is converted to a fixnum. We convert opnum (a C int) to a
string, e.g. 123 => "123" because there's no guarantee that opnums
will fit
within the range of Lisp integers.
-Use the 'plist attribute instead of the C API 'user attribute
+Use the `plist' attribute instead of the C API `user' attribute
for user defined message data. To retrieve the value of a message property
specify the indicator for argn. For example to get the value of a property
-called 'rflag, use
+called `rflag', use
(get-tooltalk-message-attribute message 'plist 'rflag)
-To get the value of a message argument use one of the 'arg_val (strings),
-'arg_ival (integers), or 'arg_bval (strings with embedded nulls), attributes.
+To get the value of a message argument use one of the `arg_val' (strings),
+`arg_ival' (integers), or `arg_bval' (strings with embedded nulls),
attributes.
For example to get the integer value of the third argument:
(get-tooltalk-message-attribute message 'arg_ival 2)
As you can see, argument numbers are zero based. The type of each argument
-can be retrieved with the 'arg_type attribute; however, Tooltalk doesn't
-define any semantics for the string value of 'arg_type. Conventionally
+can be retrieved with the `arg_type' attribute; however, Tooltalk doesn't
+define any semantics for the string value of `arg_type'. Conventionally
"string" is used for strings and "int" for 32 bit integers. Note
that
Emacs Lisp stores the lengths of strings explicitly (unlike C) so treating the
-value returned by 'arg_bval like a string is fine.
+value returned by `arg_bval' like a string is fine.
*/
(message_, attribute, argn))
{
@@ -715,7 +699,7 @@ Initialize one Tooltalk message attribut
Attribute names and values are the same as for
`get-tooltalk-message-attribute'. A property list is provided for user
-data (instead of the 'user message attribute); see
+data (instead of the `user' message attribute); see
`get-tooltalk-message-attribute'.
The value of callback should be the name of a function of one argument.
@@ -724,8 +708,8 @@ message changes. This is usually used t
changed to TT_HANDLED (or TT_FAILED), so that reply argument values
can be used.
-If one of the argument attributes is specified, 'arg_val, 'arg_ival, or
-'arg_bval then argn must be the number of an already created argument.
+If one of the argument attributes is specified, `arg_val', `arg_ival', or
+`arg_bval' then argn must be the number of an already created argument.
New arguments can be added to a message with add-tooltalk-message-arg.
*/
(value, message_, attribute, argn))
@@ -839,7 +823,7 @@ New arguments can be added to a message
DEFUN ("return-tooltalk-message", Freturn_tooltalk_message, 1, 2, 0, /*
Send a reply to this message. The second argument can be
-'reply, 'reject or 'fail; the default is 'reply. Before sending
+`reply', `reject' or `fail'; the default is `reply'. Before sending
a reply all message arguments whose mode is TT_INOUT or TT_OUT should
have been filled in - see set-tooltalk-message-attribute.
*/
@@ -929,7 +913,7 @@ Conventionally "string" is used for stri
Arguments can initialized by providing a value or with
`set-tooltalk-message-attribute'. The latter is necessary if you
want to initialize the argument with a string that can contain
-embedded nulls (use 'arg_bval).
+embedded nulls (use `arg_bval').
*/
(message_, mode, vtype, value))
{
@@ -1017,7 +1001,7 @@ This effectively unregisters the pattern
DEFUN ("add-tooltalk-pattern-attribute", Fadd_tooltalk_pattern_attribute, 3,
3, 0, /*
Add one value to the indicated pattern attribute.
-All Tooltalk pattern attributes are supported except 'user. The names
+All Tooltalk pattern attributes are supported except `user'. The names
of attributes are the same as the Tooltalk accessors used to set them
less the "tooltalk_pattern_" prefix and the "_add" ...
*/
1.7.2.1 +7 -7 XEmacs/xemacs/src/tparam.c
Index: tparam.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/tparam.c,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -p -r1.7 -r1.7.2.1
--- tparam.c 2003/09/30 15:27:00 1.7
+++ tparam.c 2005/11/06 16:15:03 1.7.2.1
@@ -100,23 +100,23 @@ tparam1 (const char *string, char *outst
/* If the buffer might be too short, make it bigger. */
if (op + 5 >= outend)
{
- char *new;
+ char *new_;
if (outlen == 0)
{
outlen = len + 40;
- new = (char *) malloc (outlen);
+ new_ = (char *) malloc (outlen);
outend += 40;
- memcpy (new, outstring, op - outstring);
+ memcpy (new_, outstring, op - outstring);
}
else
{
outend += outlen;
outlen *= 2;
- new = (char *) realloc (outstring, outlen);
+ new_ = (char *) realloc (outstring, outlen);
}
- op += new - outstring;
- outend += new - outstring;
- outstring = new;
+ op += new_ - outstring;
+ outend += new_ - outstring;
+ outstring = new_;
}
c = *p++;
if (!c)
1.20.2.3 +3 -17 XEmacs/xemacs/src/ui-gtk.c
Index: ui-gtk.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ui-gtk.c,v
retrieving revision 1.20.2.2
retrieving revision 1.20.2.3
diff -u -p -r1.20.2.2 -r1.20.2.3
--- ui-gtk.c 2005/07/13 04:47:06 1.20.2.2
+++ ui-gtk.c 2005/11/06 16:15:03 1.20.2.3
@@ -280,11 +280,7 @@ import_gtk_type (GtkType t)
static emacs_ffi_data *
allocate_ffi_data (void)
{
-#ifdef MC_ALLOC
- emacs_ffi_data *data = alloc_lrecord_type (emacs_ffi_data, &lrecord_emacs_ffi);
-#else /* not MC_ALLOC */
- emacs_ffi_data *data = alloc_lcrecord_type (emacs_ffi_data, &lrecord_emacs_ffi);
-#endif /* not MC_ALLOC */
+ emacs_ffi_data *data = ALLOC_LCRECORD_TYPE (emacs_ffi_data, &lrecord_emacs_ffi);
data->return_type = GTK_TYPE_NONE;
data->n_args = 0;
@@ -948,13 +944,8 @@ DEFINE_LRECORD_IMPLEMENTATION_WITH_PROPS
static emacs_gtk_object_data *
allocate_emacs_gtk_object_data (void)
{
-#ifdef MC_ALLOC
- emacs_gtk_object_data *data = alloc_lrecord_type (emacs_gtk_object_data,
- &lrecord_emacs_gtk_object);
-#else /* not MC_ALLOC */
- emacs_gtk_object_data *data = alloc_lcrecord_type (emacs_gtk_object_data,
+ emacs_gtk_object_data *data = ALLOC_LCRECORD_TYPE (emacs_gtk_object_data,
&lrecord_emacs_gtk_object);
-#endif /* not MC_ALLOC */
data->object = NULL;
data->alive_p = FALSE;
@@ -1162,13 +1153,8 @@ DEFINE_LRECORD_IMPLEMENTATION_WITH_PROPS
static emacs_gtk_boxed_data *
allocate_emacs_gtk_boxed_data (void)
{
-#ifdef MC_ALLOC
- emacs_gtk_boxed_data *data = alloc_lrecord_type (emacs_gtk_boxed_data,
- &lrecord_emacs_gtk_boxed);
-#else /* not MC_ALLOC */
- emacs_gtk_boxed_data *data = alloc_lcrecord_type (emacs_gtk_boxed_data,
+ emacs_gtk_boxed_data *data = ALLOC_LCRECORD_TYPE (emacs_gtk_boxed_data,
&lrecord_emacs_gtk_boxed);
-#endif /* not MC_ALLOC */
data->object = NULL;
data->object_type = GTK_TYPE_INVALID;
1.5.8.2 +3 -15 XEmacs/xemacs/src/ui-gtk.h
Index: ui-gtk.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/ui-gtk.h,v
retrieving revision 1.5.8.1
retrieving revision 1.5.8.2
diff -u -p -r1.5.8.1 -r1.5.8.2
--- ui-gtk.h 2005/07/13 04:47:06 1.5.8.1
+++ ui-gtk.h 2005/11/06 16:15:03 1.5.8.2
@@ -21,11 +21,7 @@ typedef void (*ffi_marshalling_function)
#define MAX_GTK_ARGS 100
typedef struct {
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
GtkType return_type;
GtkType args[MAX_GTK_ARGS];
gint n_args;
@@ -43,11 +39,7 @@ DECLARE_LRECORD (emacs_ffi, emacs_ffi_da
/* Encapsulate a GtkObject in Lisp */
typedef struct {
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
gboolean alive_p;
GtkObject *object;
Lisp_Object plist;
@@ -64,11 +56,7 @@ extern Lisp_Object build_gtk_object (Gtk
/* Encapsulate a GTK_TYPE_BOXED in lisp */
typedef struct {
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
GtkType object_type;
void *object;
} emacs_gtk_boxed_data;
1.12.2.1 +44 -44 XEmacs/xemacs/src/unexaix.c
Index: unexaix.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/unexaix.c,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -p -r1.12 -r1.12.2.1
--- unexaix.c 2004/09/20 19:20:04 1.12
+++ unexaix.c 2005/11/06 16:15:04 1.12.2.1
@@ -57,7 +57,7 @@ Boston, MA 02111-1307, USA. */
#define PERROR(arg) perror (arg); return -1
#else
#include <config.h>
-#define PERROR(file) report_error (file, new)
+#define PERROR(file) report_error (file, new_)
#endif
#include <a.out.h>
@@ -126,9 +126,9 @@ report_error (char *file, int fd)
}
#endif /* emacs */
-#define ERROR0(msg) report_error_1 (new, msg, 0, 0); return -1
-#define ERROR1(msg,x) report_error_1 (new, msg, x, 0); return -1
-#define ERROR2(msg,x,y) report_error_1 (new, msg, x, y); return -1
+#define ERROR0(msg) report_error_1 (new_, msg, 0, 0); return -1
+#define ERROR1(msg,x) report_error_1 (new_, msg, x, 0); return -1
+#define ERROR2(msg,x,y) report_error_1 (new_, msg, x, y); return -1
static void
report_error_1 (int fd, char *msg, int a1, int a2)
@@ -158,30 +158,30 @@ int unexec (char *new_name, char *a_name
uintptr_t bss_start,
uintptr_t entry_address)
{
- int new = -1, a_out = -1;
+ int new_ = -1, a_out = -1;
if (a_name && (a_out = open (a_name, O_RDONLY)) < 0)
{
PERROR (a_name);
}
- if ((new = creat (new_name, 0666)) < 0)
+ if ((new_ = creat (new_name, 0666)) < 0)
{
PERROR (new_name);
}
- if (make_hdr (new, a_out,
+ if (make_hdr (new_, a_out,
data_start, bss_start,
entry_address,
a_name, new_name) < 0
- || copy_text_and_data (new) < 0
- || copy_sym (new, a_out, a_name, new_name) < 0
- || adjust_lnnoptrs (new, a_out, new_name) < 0
- || unrelocate_symbols (new, a_out, a_name, new_name) < 0)
+ || copy_text_and_data (new_) < 0
+ || copy_sym (new_, a_out, a_name, new_name) < 0
+ || adjust_lnnoptrs (new_, a_out, new_name) < 0
+ || unrelocate_symbols (new_, a_out, a_name, new_name) < 0)
{
- close (new);
+ close (new_);
return -1;
}
- close (new);
+ close (new_);
if (a_out >= 0)
close (a_out);
mark_x (new_name);
@@ -195,7 +195,7 @@ int unexec (char *new_name, char *a_name
* Modify the text and data sizes.
*/
static int
-make_hdr (int new, int a_out,
+make_hdr (int new_, int a_out,
unsigned data_start, unsigned bss_start,
unsigned UNUSED (entry_address),
char *a_name, char *new_name)
@@ -391,14 +391,14 @@ make_hdr (int new, int a_out,
data_scnptr = f_dhdr->s_scnptr;
load_scnptr = f_lhdr ? f_lhdr->s_scnptr : 0;
- if (write (new, &f_hdr, sizeof (f_hdr)) != sizeof (f_hdr))
+ if (write (new_, &f_hdr, sizeof (f_hdr)) != sizeof (f_hdr))
{
PERROR (new_name);
}
if (f_hdr.f_opthdr > 0)
{
- if (write (new, &f_ohdr, sizeof (f_ohdr)) != sizeof (f_ohdr))
+ if (write (new_, &f_ohdr, sizeof (f_ohdr)) != sizeof (f_ohdr))
{
PERROR (new_name);
}
@@ -406,7 +406,7 @@ make_hdr (int new, int a_out,
for (scns = 0; scns < f_hdr.f_nscns; scns++) {
struct scnhdr *s = §ion[scns];
- if (write (new, s, sizeof (*s)) != sizeof (*s))
+ if (write (new_, s, sizeof (*s)) != sizeof (*s))
{
PERROR (new_name);
}
@@ -421,27 +421,27 @@ make_hdr (int new, int a_out,
* Copy the text and data segments from memory to the new a.out
*/
static int
-copy_text_and_data (int new)
+copy_text_and_data (int new_)
{
char *end;
char *ptr;
- lseek (new, (long) text_scnptr, SEEK_SET);
+ lseek (new_, (long) text_scnptr, SEEK_SET);
ptr = start_of_text () + text_scnptr;
end = ptr + f_ohdr.tsize;
- write_segment (new, ptr, end);
+ write_segment (new_, ptr, end);
- lseek (new, (long) data_scnptr, SEEK_SET);
+ lseek (new_, (long) data_scnptr, SEEK_SET);
ptr = (char *) f_ohdr.data_start;
end = ptr + f_ohdr.dsize;
- write_segment (new, ptr, end);
+ write_segment (new_, ptr, end);
return 0;
}
#define UnexBlockSz (1<<12) /* read/write block size */
static void
-write_segment (int new, char *ptr, char *end)
+write_segment (int new_, char *ptr, char *end)
{
int i, nwrite, ret;
char buf[80];
@@ -453,7 +453,7 @@ write_segment (int new, char *ptr, char
nwrite = (((int) ptr + UnexBlockSz) & -UnexBlockSz) - (int) ptr;
/* But not beyond specified end. */
if (nwrite > end - ptr) nwrite = end - ptr;
- ret = write (new, ptr, nwrite);
+ ret = write (new_, ptr, nwrite);
/* If write gets a page fault, it means we reached
a gap between the old text segment and the old data segment.
This gap has probably been remapped into part of the text segment.
@@ -461,13 +461,13 @@ write_segment (int new, char *ptr, char
if (ret == -1 && errno == EFAULT)
{
memset (zeros, 0, nwrite);
- write (new, zeros, nwrite);
+ write (new_, zeros, nwrite);
}
else if (nwrite != ret)
{
sprintf (buf,
"unexec write failure: addr 0x%lx, fileno %d, size 0x%x, wrote 0x%x, errno
%d",
- (unsigned long)ptr, new, nwrite, ret, errno);
+ (unsigned long)ptr, new_, nwrite, ret, errno);
PERROR (buf);
}
i += nwrite;
@@ -481,7 +481,7 @@ write_segment (int new, char *ptr, char
* Copy the relocation information and symbol table from the a.out to the new
*/
static int
-copy_sym (int new, int a_out, char *a_name, char *new_name)
+copy_sym (int new_, int a_out, char *a_name, char *new_name)
{
char page[UnexBlockSz];
int n;
@@ -499,7 +499,7 @@ copy_sym (int new, int a_out, char *a_na
while ((n = read (a_out, page, sizeof (page))) > 0)
{
- if (write (new, page, n) != n)
+ if (write (new_, page, n) != n)
{
PERROR (new_name);
}
@@ -521,7 +521,7 @@ mark_x (char *name)
{
struct stat sbuf;
int um;
- int new = 0; /* for PERROR */
+ int new_ = 0; /* for PERROR */
um = umask (777);
umask (um);
@@ -539,50 +539,50 @@ adjust_lnnoptrs (int UNUSED (writedesc),
{
int nsyms;
int naux;
- int new;
+ int new_;
struct syment symentry;
union auxent auxentry;
if (!lnnoptr || !f_hdr.f_symptr)
return 0;
- if ((new = open (new_name, O_RDWR)) < 0)
+ if ((new_ = open (new_name, O_RDWR)) < 0)
{
PERROR (new_name);
return -1;
}
- lseek (new, f_hdr.f_symptr, SEEK_SET);
+ lseek (new_, f_hdr.f_symptr, SEEK_SET);
for (nsyms = 0; nsyms < f_hdr.f_nsyms; nsyms++)
{
- read (new, &symentry, SYMESZ);
+ read (new_, &symentry, SYMESZ);
if (symentry.n_sclass == C_BINCL || symentry.n_sclass == C_EINCL)
{
symentry.n_value += bias;
- lseek (new, -SYMESZ, SEEK_CUR);
- write (new, &symentry, SYMESZ);
+ lseek (new_, -SYMESZ, SEEK_CUR);
+ write (new_, &symentry, SYMESZ);
}
for (naux = symentry.n_numaux; naux-- != 0; )
{
- read (new, &auxentry, AUXESZ);
+ read (new_, &auxentry, AUXESZ);
nsyms++;
if (naux != 0 /* skip csect auxentry (last entry) */
&& (symentry.n_sclass == C_EXT || symentry.n_sclass ==
C_HIDEXT))
{
auxentry.x_sym.x_fcnary.x_fcn.x_lnnoptr += bias;
- lseek (new, -AUXESZ, SEEK_CUR);
- write (new, &auxentry, AUXESZ);
+ lseek (new_, -AUXESZ, SEEK_CUR);
+ write (new_, &auxentry, AUXESZ);
}
}
}
- close (new);
+ close (new_);
return 0;
}
static int
-unrelocate_symbols (int new, int a_out, char *a_name, char *new_name)
+unrelocate_symbols (int new_, int a_out, char *a_name, char *new_name)
{
int i;
LDHDR ldhdr;
@@ -626,11 +626,11 @@ unrelocate_symbols (int new, int a_out,
{
ldrel.l_symndx = SYMNDX_DATA;
- lseek (new,
+ lseek (new_,
load_scnptr + LDHDRSZ + LDSYMSZ*ldhdr.l_nsyms + LDRELSZ*i,
SEEK_SET);
- if (write (new, &ldrel, LDRELSZ) != LDRELSZ)
+ if (write (new_, &ldrel, LDRELSZ) != LDRELSZ)
{
PERROR (new_name);
}
@@ -665,10 +665,10 @@ unrelocate_symbols (int new, int a_out,
if (orig_int != * p)
{
- lseek (new,
+ lseek (new_,
data_scnptr + (ldrel.l_vaddr - f_ohdr.data_start),
SEEK_SET);
- if (write (new, (void *) &orig_int, sizeof (orig_int))
+ if (write (new_, (void *) &orig_int, sizeof (orig_int))
!= sizeof (orig_int))
{
PERROR (new_name);
1.10.2.1 +16 -16 XEmacs/xemacs/src/unexalpha.c
Index: unexalpha.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/unexalpha.c,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -u -p -r1.10 -r1.10.2.1
--- unexalpha.c 2004/09/20 19:20:05 1.10
+++ unexalpha.c 2005/11/06 16:15:04 1.10.2.1
@@ -96,7 +96,7 @@ unexec (char *new_name, char *a_name,
unsigned long UNUSED (bss_start),
unsigned long entry_address)
{
- int new, old;
+ int new_, old;
char * oldptr;
struct headers ohdr, nhdr;
struct stat stat;
@@ -110,8 +110,8 @@ unexec (char *new_name, char *a_name,
if ((old = open (a_name, O_RDONLY)) < 0)
fatal_unexec ("opening %s", a_name);
- new = creat (new_name, 0666);
- if (new < 0) fatal_unexec ("creating %s", new_name);
+ new_ = creat (new_name, 0666);
+ if (new_ < 0) fatal_unexec ("creating %s", new_name);
if ((fstat (old, &stat) == -1))
fatal_unexec ("fstat %s", a_name);
@@ -290,9 +290,9 @@ unexec (char *new_name, char *a_name,
bss_section->s_scnptr = scnptr;
}
- WRITE (new, (char *)TEXT_START, nhdr.aout.tsize,
+ WRITE (new_, (char *)TEXT_START, nhdr.aout.tsize,
"writing text section to %s", new_name);
- WRITE (new, (char *)DATA_START, nhdr.aout.dsize,
+ WRITE (new_, (char *)DATA_START, nhdr.aout.dsize,
"writing data section to %s", new_name);
@@ -318,12 +318,12 @@ unexec (char *new_name, char *a_name,
symhdr->cbRfdOffset += symrel;
symhdr->cbExtOffset += symrel;
- WRITE (new, buffer, cbHDRR, "writing symbol table header of %s",
new_name);
+ WRITE (new_, buffer, cbHDRR, "writing symbol table header of %s",
new_name);
/*
* Copy the symbol table and line numbers
*/
- WRITE (new, oldptr + ohdr.fhdr.f_symptr + cbHDRR,
+ WRITE (new_, oldptr + ohdr.fhdr.f_symptr + cbHDRR,
stat.st_size - ohdr.fhdr.f_symptr - cbHDRR,
"writing symbol table of %s", new_name);
@@ -331,7 +331,7 @@ unexec (char *new_name, char *a_name,
/* Not needed for now */
- update_dynamic_symbols (oldptr, new_name, new, newsyms,
+ update_dynamic_symbols (oldptr, new_name, new_, newsyms,
((pHDRR) (oldptr + ohdr.fhdr.f_symptr))->issExtMax,
((pHDRR) (oldptr + ohdr.fhdr.f_symptr))->cbExtOffset,
((pHDRR) (oldptr + ohdr.fhdr.f_symptr))->cbSsExtOffset);
@@ -340,12 +340,12 @@ unexec (char *new_name, char *a_name,
#undef symhdr
- SEEK (new, 0, "seeking to start of header in %s", new_name);
- WRITE (new, &nhdr, sizeof (nhdr),
+ SEEK (new_, 0, "seeking to start of header in %s", new_name);
+ WRITE (new_, &nhdr, sizeof (nhdr),
"writing header of %s", new_name);
close (old);
- close (new);
+ close (new_);
mark_x (new_name);
return 0;
}
@@ -367,7 +367,7 @@ int
update_dynamic_symbols (
char *old, /* Pointer to old executable */
char *new_name, /* Name of new executable */
- int new, /* File descriptor for new executable */
+ int new_, /* File descriptor for new executable */
long newsyms, /* Offset of Symbol table in new executable */
int nsyms, /* Number of symbol table entries */
long symoff, /* Offset of External Symbols in old file */
@@ -394,9 +394,9 @@ update_dynamic_symbols (
found++;
memcpy (&n_edata, x, cbEXTR);
n_edata.asym.value = Brk;
- SEEK (new, newsyms + cbHDRR + i,
+ SEEK (new_, newsyms + cbHDRR + i,
"seeking to symbol _edata in %s", new_name);
- WRITE (new, &n_edata, cbEXTR,
+ WRITE (new_, &n_edata, cbEXTR,
"writing symbol table entry for _edata into %s", new_name);
}
else if (!strcmp(s,"_end"))
@@ -404,9 +404,9 @@ update_dynamic_symbols (
found++;
memcpy (&n_end, x, cbEXTR);
n_end.asym.value = Brk;
- SEEK (new, newsyms + cbHDRR + i,
+ SEEK (new_, newsyms + cbHDRR + i,
"seeking to symbol _end in %s", new_name);
- WRITE (new, &n_end, cbEXTR,
+ WRITE (new_, &n_end, cbEXTR,
"writing symbol table entry for _end into %s", new_name);
}
}
1.5.2.1 +30 -30 XEmacs/xemacs/src/unexconvex.c
Index: unexconvex.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/unexconvex.c,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -p -r1.5 -r1.5.2.1
--- unexconvex.c 2004/09/20 19:20:05 1.5
+++ unexconvex.c 2005/11/06 16:15:04 1.5.2.1
@@ -159,7 +159,7 @@ pointer looks like an int) but not on al
*/
#include <config.h>
-#define PERROR(file) report_error (file, new)
+#define PERROR(file) report_error (file, new_)
#include <a.out.h>
/* Define getpagesize () if the system does not.
@@ -205,9 +205,9 @@ report_error (file, fd)
build_string (file));
}
-#define ERROR0(msg) report_error_1 (new, msg, 0, 0); return -1
-#define ERROR1(msg,x) report_error_1 (new, msg, x, 0); return -1
-#define ERROR2(msg,x,y) report_error_1 (new, msg, x, y); return -1
+#define ERROR0(msg) report_error_1 (new_, msg, 0, 0); return -1
+#define ERROR1(msg,x) report_error_1 (new_, msg, x, 0); return -1
+#define ERROR2(msg,x,y) report_error_1 (new_, msg, x, y); return -1
static
report_error_1 (fd, msg, a1, a2)
@@ -228,23 +228,23 @@ unexec (new_name, a_name, data_start, bs
char *new_name, *a_name;
unsigned data_start, bss_start, entry_address;
{
- int new, a_out = -1;
+ int new_, a_out = -1;
if (a_name && (a_out = open (a_name, 0)) < 0) {
PERROR (a_name);
}
- if ((new = creat (new_name, 0666)) < 0) {
+ if ((new_ = creat (new_name, 0666)) < 0) {
PERROR (new_name);
}
- if (make_hdr (new, a_out, data_start, bss_start, entry_address, a_name, new_name)
< 0
- || copy_text_and_data (new) < 0
- || copy_sym (new, a_out, a_name, new_name) < 0 ) {
- close (new);
+ if (make_hdr (new_, a_out, data_start, bss_start, entry_address, a_name, new_name)
< 0
+ || copy_text_and_data (new_) < 0
+ || copy_sym (new_, a_out, a_name, new_name) < 0 ) {
+ close (new_);
return -1;
}
- close (new);
+ close (new_);
if (a_out >= 0)
close (a_out);
mark_x (new_name);
@@ -266,8 +266,8 @@ unsigned data_start, bss_start, entry_ad
struct scnhdr *f_tbhdr; /* Thread Bss section header */
static int
-make_hdr (new, a_out, data_start, bss_start, entry_address, a_name, new_name)
- int new, a_out;
+make_hdr (new_, a_out, data_start, bss_start, entry_address, a_name, new_name)
+ int new_, a_out;
unsigned data_start, bss_start;
unsigned UNUSED (entry_address);
char *a_name;
@@ -427,11 +427,11 @@ make_hdr (new, a_out, data_start, bss_st
f_hdr.h_strptr += bias;
}
- if (write (new, &f_hdr, sizeof (f_hdr)) != sizeof (f_hdr)) {
+ if (write (new_, &f_hdr, sizeof (f_hdr)) != sizeof (f_hdr)) {
PERROR (new_name);
}
- if (write (new, &f_ohdr, sizeof (f_ohdr)) != sizeof (f_ohdr)) {
+ if (write (new_, &f_ohdr, sizeof (f_ohdr)) != sizeof (f_ohdr)) {
PERROR (new_name);
}
@@ -453,7 +453,7 @@ make_hdr (new, a_out, data_start, bss_st
for( scns = 0; scns < f_hdr.h_nscns; scns++ ) {
- if( write( new, &stbl[scns], sizeof(*stbl)) != sizeof(*stbl)) {
+ if( write( new_, &stbl[scns], sizeof(*stbl)) != sizeof(*stbl)) {
PERROR (new_name);
}
@@ -469,19 +469,19 @@ make_hdr (new, a_out, data_start, bss_st
* Copy the text and data segments from memory to the new a.out
*/
static int
-copy_text_and_data (new)
-int new;
+copy_text_and_data (new_)
+int new_;
{
int scns;
for( scns = 0; scns < f_hdr.h_nscns; scns++ )
- write_segment( new, &stbl[scns] );
+ write_segment( new_, &stbl[scns] );
return 0;
}
-write_segment( new, sptr )
-int new;
+write_segment( new_, sptr )
+int new_;
struct scnhdr *sptr;
{
char *ptr, *end;
@@ -493,7 +493,7 @@ struct scnhdr *sptr;
if( sptr->s_scnptr == 0 )
return; /* Nothing to do */
- if( lseek( new, (long) sptr->s_scnptr, 0 ) == -1 )
+ if( lseek( new_, (long) sptr->s_scnptr, 0 ) == -1 )
PERROR( "unexecing" );
memset (zeros, 0, sizeof (zeros));
@@ -507,17 +507,17 @@ struct scnhdr *sptr;
nwrite = (((int) ptr + 128) & -128) - (int) ptr;
/* But not beyond specified end. */
if (nwrite > end - ptr) nwrite = end - ptr;
- ret = write (new, ptr, nwrite);
+ ret = write (new_, ptr, nwrite);
/* If write gets a page fault, it means we reached
a gap between the old text segment and the old data segment.
This gap has probably been remapped into part of the text segment.
So write zeros for it. */
if (ret == -1 && errno == EFAULT)
- write (new, zeros, nwrite);
+ write (new_, zeros, nwrite);
else if (nwrite != ret) {
sprintf (buf,
"unexec write failure: addr 0x%x, fileno %d, size 0x%x, wrote 0x%x, errno
%d",
- ptr, new, nwrite, ret, errno);
+ ptr, new_, nwrite, ret, errno);
PERROR (buf);
}
ptr += nwrite;
@@ -530,8 +530,8 @@ struct scnhdr *sptr;
* Copy the relocation information and symbol table from the a.out to the new
*/
static int
-copy_sym (new, a_out, a_name, new_name)
- int new, a_out;
+copy_sym (new_, a_out, a_name, new_name)
+ int new_, a_out;
char *a_name, *new_name;
{
char page[1024];
@@ -544,10 +544,10 @@ copy_sym (new, a_out, a_name, new_name)
return 0;
lseek (a_out, SYMS_START, 0); /* Position a.out to symtab. */
- lseek( new, (long)f_ohdr.o_symptr, 0 );
+ lseek( new_, (long)f_ohdr.o_symptr, 0 );
while ((n = read (a_out, page, sizeof (page))) > 0) {
- if (write (new, page, n) != n) {
+ if (write (new_, page, n) != n) {
PERROR (new_name);
}
}
@@ -568,7 +568,7 @@ char *name;
{
struct stat sbuf;
int um;
- int new = 0; /* for PERROR */
+ int new_ = 0; /* for PERROR */
um = umask (777);
umask (um);
1.10.2.1 +61 -61 XEmacs/xemacs/src/unexec.c
Index: unexec.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/unexec.c,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -u -p -r1.10 -r1.10.2.1
--- unexec.c 2004/09/20 19:20:05 1.10
+++ unexec.c 2005/11/06 16:15:04 1.10.2.1
@@ -169,7 +169,7 @@ pointer looks like an int) but not on al
#else
#define IN_UNEXEC
#include <config.h>
-#define PERROR(file) report_error (file, new)
+#define PERROR(file) report_error (file, new_)
#endif
#if __STDC__ || defined(STDC_HEADERS)
@@ -341,9 +341,9 @@ report_error (const char *file, int fd)
}
#endif /* emacs */
-#define ERROR0(msg) report_error_1 (new, msg, 0, 0); return -1
-#define ERROR1(msg,x) report_error_1 (new, msg, x, 0); return -1
-#define ERROR2(msg,x,y) report_error_1 (new, msg, x, y); return -1
+#define ERROR0(msg) report_error_1 (new_, msg, 0, 0); return -1
+#define ERROR1(msg,x) report_error_1 (new_, msg, x, 0); return -1
+#define ERROR2(msg,x,y) report_error_1 (new_, msg, x, y); return -1
static void
report_error_1 (fd, msg, a1, a2)
@@ -360,11 +360,11 @@ report_error_1 (fd, msg, a1, a2)
#endif
}
-static int make_hdr (int new, int a_out, unsigned data_start,
+static int make_hdr (int new_, int a_out, unsigned data_start,
unsigned bss_start, unsigned entry_address,
char *a_name, char *new_name);
-static int copy_text_and_data (int new, int a_out);
-static int copy_sym (int new, int a_out, char *a_name, char *new_name);
+static int copy_text_and_data (int new_, int a_out);
+static int copy_sym (int new_, int a_out, char *a_name, char *new_name);
static void mark_x (char *name);
/* ****************************************************************
@@ -377,33 +377,33 @@ unexec (new_name, a_name, data_start, bs
char *new_name, *a_name;
unsigned data_start, bss_start, entry_address;
{
- int new, a_out = -1;
+ int new_, a_out = -1;
if (a_name && (a_out = open (a_name, O_RDONLY)) < 0)
{
PERROR (a_name);
}
- if ((new = creat (new_name, 0666)) < 0)
+ if ((new_ = creat (new_name, 0666)) < 0)
{
PERROR (new_name);
}
- if (make_hdr (new, a_out, data_start, bss_start, entry_address, a_name, new_name)
< 0
- || copy_text_and_data (new, a_out) < 0
- || copy_sym (new, a_out, a_name, new_name) < 0
+ if (make_hdr (new_, a_out, data_start, bss_start, entry_address, a_name, new_name)
< 0
+ || copy_text_and_data (new_, a_out) < 0
+ || copy_sym (new_, a_out, a_name, new_name) < 0
#ifdef COFF
#ifndef COFF_BSD_SYMBOLS
- || adjust_lnnoptrs (new, a_out, new_name) < 0
+ || adjust_lnnoptrs (new_, a_out, new_name) < 0
#endif
#endif
)
{
- close (new);
+ close (new_);
/* unlink (new_name); / * Failed, unlink new a.out */
return -1;
}
- close (new);
+ close (new_);
if (a_out >= 0)
close (a_out);
mark_x (new_name);
@@ -417,7 +417,7 @@ unexec (new_name, a_name, data_start, bs
* Modify the text and data sizes.
*/
static int
-make_hdr (int new, int a_out, unsigned data_start, unsigned bss_start,
+make_hdr (int new_, int a_out, unsigned data_start, unsigned bss_start,
unsigned entry_address, char *a_name, char *new_name)
{
#ifdef COFF
@@ -618,29 +618,29 @@ make_hdr (int new, int a_out, unsigned d
ADJUST_EXEC_HEADER;
#endif /* ADJUST_EXEC_HEADER */
- if (write (new, &f_hdr, sizeof (f_hdr)) != sizeof (f_hdr))
+ if (write (new_, &f_hdr, sizeof (f_hdr)) != sizeof (f_hdr))
{
PERROR (new_name);
}
- if (write (new, &f_ohdr, sizeof (f_ohdr)) != sizeof (f_ohdr))
+ if (write (new_, &f_ohdr, sizeof (f_ohdr)) != sizeof (f_ohdr))
{
PERROR (new_name);
}
#ifndef USG_SHARED_LIBRARIES
- if (write (new, &f_thdr, sizeof (f_thdr)) != sizeof (f_thdr))
+ if (write (new_, &f_thdr, sizeof (f_thdr)) != sizeof (f_thdr))
{
PERROR (new_name);
}
- if (write (new, &f_dhdr, sizeof (f_dhdr)) != sizeof (f_dhdr))
+ if (write (new_, &f_dhdr, sizeof (f_dhdr)) != sizeof (f_dhdr))
{
PERROR (new_name);
}
- if (write (new, &f_bhdr, sizeof (f_bhdr)) != sizeof (f_bhdr))
+ if (write (new_, &f_bhdr, sizeof (f_bhdr)) != sizeof (f_bhdr))
{
PERROR (new_name);
}
@@ -671,24 +671,24 @@ make_hdr (int new, int a_out, unsigned d
if (!strcmp (scntemp.s_name, f_thdr.s_name)) /* .text */
{
- if (write (new, &f_thdr, sizeof (f_thdr)) != sizeof (f_thdr))
+ if (write (new_, &f_thdr, sizeof (f_thdr)) != sizeof (f_thdr))
PERROR (new_name);
}
else if (!strcmp (scntemp.s_name, f_dhdr.s_name)) /* .data */
{
- if (write (new, &f_dhdr, sizeof (f_dhdr)) != sizeof (f_dhdr))
+ if (write (new_, &f_dhdr, sizeof (f_dhdr)) != sizeof (f_dhdr))
PERROR (new_name);
}
else if (!strcmp (scntemp.s_name, f_bhdr.s_name)) /* .bss */
{
- if (write (new, &f_bhdr, sizeof (f_bhdr)) != sizeof (f_bhdr))
+ if (write (new_, &f_bhdr, sizeof (f_bhdr)) != sizeof (f_bhdr))
PERROR (new_name);
}
else
{
if (scntemp.s_scnptr)
scntemp.s_scnptr += bias;
- if (write (new, &scntemp, sizeof (scntemp)) != sizeof (scntemp))
+ if (write (new_, &scntemp, sizeof (scntemp)) != sizeof (scntemp))
PERROR (new_name);
}
}
@@ -780,13 +780,13 @@ make_hdr (int new, int a_out, unsigned d
coffheader.text_start = tp->s_vaddr;
coffheader.data_start = dp->s_vaddr;
}
- if (write (new, &coffheader, sizeof (coffheader)) != sizeof (coffheader))
+ if (write (new_, &coffheader, sizeof (coffheader)) != sizeof (coffheader))
{
PERROR(new_name);
}
#endif /* COFF_ENCAPSULATE */
- if (write (new, (char *) &hdr, sizeof (hdr)) != sizeof (hdr))
+ if (write (new_, (char *) &hdr, sizeof (hdr)) != sizeof (hdr))
{
PERROR (new_name);
}
@@ -813,7 +813,7 @@ static void write_segment (int, char *,
* Copy the text and data segments from memory to the new a.out
*/
static int
-copy_text_and_data (int new,
+copy_text_and_data (int new_,
#if defined (COFF) && defined (USG_SHARED_LIBRARIES)
int a_out
#else
@@ -850,17 +850,17 @@ copy_text_and_data (int new,
if (!strcmp (scntemp.s_name, ".text"))
{
- lseek (new, (long) text_scnptr, 0);
+ lseek (new_, (long) text_scnptr, 0);
ptr = (char *) f_ohdr.text_start;
end = ptr + f_ohdr.tsize;
- write_segment (new, ptr, end);
+ write_segment (new_, ptr, end);
}
else if (!strcmp (scntemp.s_name, ".data"))
{
- lseek (new, (long) data_scnptr, 0);
+ lseek (new_, (long) data_scnptr, 0);
ptr = (char *) f_ohdr.data_start;
end = ptr + f_ohdr.dsize;
- write_segment (new, ptr, end);
+ write_segment (new_, ptr, end);
}
else if (!scntemp.s_scnptr)
; /* do nothing - no data for this section */
@@ -874,7 +874,7 @@ copy_text_and_data (int new,
for (size = scntemp.s_size; size > 0; size -= sizeof (page))
{
n = size > sizeof (page) ? sizeof (page) : size;
- if (read (a_out, page, n) != n || write (new, page, n) != n)
+ if (read (a_out, page, n) != n || write (new_, page, n) != n)
PERROR ("emacs");
}
lseek (a_out, old_a_out_ptr, 0);
@@ -883,19 +883,19 @@ copy_text_and_data (int new,
#else /* COFF, but not USG_SHARED_LIBRARIES */
- lseek (new, (long) text_scnptr, 0);
+ lseek (new_, (long) text_scnptr, 0);
ptr = (char *) f_ohdr.text_start;
#ifdef HEADER_INCL_IN_TEXT
/* For Gould UTX/32, text starts after headers */
ptr = (char *) (ptr + text_scnptr);
#endif /* HEADER_INCL_IN_TEXT */
end = ptr + f_ohdr.tsize;
- write_segment (new, ptr, end);
+ write_segment (new_, ptr, end);
- lseek (new, (long) data_scnptr, 0);
+ lseek (new_, (long) data_scnptr, 0);
ptr = (char *) f_ohdr.data_start;
end = ptr + f_ohdr.dsize;
- write_segment (new, ptr, end);
+ write_segment (new_, ptr, end);
#endif /* USG_SHARED_LIBRARIES */
@@ -910,9 +910,9 @@ copy_text_and_data (int new,
the extra A_TEXT_OFFSET bytes, only the actual bytes of code. */
#ifdef A_TEXT_SEEK
- lseek (new, (long) A_TEXT_SEEK (hdr), 0);
+ lseek (new_, (long) A_TEXT_SEEK (hdr), 0);
#else
- lseek (new, (long) N_TXTOFF (hdr), 0);
+ lseek (new_, (long) N_TXTOFF (hdr), 0);
#endif /* no A_TEXT_SEEK */
#ifdef RISCiX
@@ -980,26 +980,26 @@ copy_text_and_data (int new,
end = ptr + mcount_offset - EDATA_OFFSET;
- write_segment (new, ptr, end);
+ write_segment (new_, ptr, end);
proforma[0] = bss_end; /* becomes _edata */
proforma[1] = bss_end; /* becomes _end */
proforma[2] = bss_end; /* becomes _minbrk */
proforma[3] = bss_end; /* becomes _curbrk */
- write (new, proforma, 16);
+ write (new_, proforma, 16);
temp_ptr = ptr;
ptr = end + 16;
end = temp_ptr + hdr.a_text;
- write_segment (new, ptr, end);
+ write_segment (new_, ptr, end);
}
#else /* !RISCiX */
ptr = (char *) unexec_text_start;
end = ptr + hdr.a_text;
- write_segment (new, ptr, end);
+ write_segment (new_, ptr, end);
#endif /* RISCiX */
ptr = (char *) unexec_data_start;
@@ -1007,8 +1007,8 @@ copy_text_and_data (int new,
/* This lseek is certainly incorrect when A_TEXT_OFFSET
and I believe it is a no-op otherwise.
Let's see if its absence ever fails. */
-/* lseek (new, (long) N_TXTOFF (hdr) + hdr.a_text, 0); */
- write_segment (new, ptr, end);
+/* lseek (new_, (long) N_TXTOFF (hdr) + hdr.a_text, 0); */
+ write_segment (new_, ptr, end);
#endif /* not COFF */
@@ -1016,8 +1016,8 @@ copy_text_and_data (int new,
}
static void
-write_segment (new, ptr, end)
- int new;
+write_segment (new_, ptr, end)
+ int new_;
char *ptr, *end;
{
int i, nwrite, ret;
@@ -1038,7 +1038,7 @@ write_segment (new, ptr, end)
nwrite = (((int) ptr + writesize) & -writesize) - (int) ptr;
/* But not beyond specified end. */
if (nwrite > end - ptr) nwrite = end - ptr;
- ret = write (new, ptr, nwrite);
+ ret = write (new_, ptr, nwrite);
/* If write gets a page fault, it means we reached
a gap between the old text segment and the old data segment.
This gap has probably been remapped into part of the text segment.
@@ -1054,7 +1054,7 @@ write_segment (new, ptr, end)
of the valid memory in the old data segment. */
if (nwrite > pagesize)
nwrite = pagesize;
- write (new, zeros, nwrite);
+ write (new_, zeros, nwrite);
}
#if 0 /* Now that we have can ask `write' to write more than a page,
it is legit for write do less than the whole amount specified. */
@@ -1062,7 +1062,7 @@ write_segment (new, ptr, end)
{
sprintf (buf,
"unexec write failure: addr 0x%lx, fileno %d, size 0x%x, wrote 0x%x, errno
%d",
- (unsigned long) ptr, new, nwrite, ret, errno);
+ (unsigned long) ptr, new_, nwrite, ret, errno);
PERROR (buf);
}
#endif
@@ -1077,7 +1077,7 @@ write_segment (new, ptr, end)
* Copy the relocation information and symbol table from the a.out to the new
*/
static int
-copy_sym (int new, int a_out, char *a_name, char *new_name)
+copy_sym (int new_, int a_out, char *a_name, char *new_name)
{
char page[1024];
int n;
@@ -1099,7 +1099,7 @@ copy_sym (int new, int a_out, char *a_na
while ((n = read (a_out, page, sizeof (page))) > 0)
{
- if (write (new, page, n) != n)
+ if (write (new_, page, n) != n)
{
PERROR (new_name);
}
@@ -1121,7 +1121,7 @@ mark_x (char *name)
{
struct stat sbuf;
int um;
- int new = 0; /* for PERROR */
+ int new_ = 0; /* for PERROR */
um = umask (777);
umask (um);
@@ -1166,7 +1166,7 @@ adjust_lnnoptrs (writedesc, readdesc, ne
char *new_name;
{
int nsyms;
- int new;
+ int new_;
#if defined (amdahl_uts) || defined (pfa)
SYMENT symentry;
AUXENT auxentry;
@@ -1178,29 +1178,29 @@ adjust_lnnoptrs (writedesc, readdesc, ne
if (!lnnoptr || !f_hdr.f_symptr)
return 0;
- if ((new = open (new_name, O_RDWR)) < 0)
+ if ((new_ = open (new_name, O_RDWR)) < 0)
{
PERROR (new_name);
return -1;
}
- lseek (new, f_hdr.f_symptr, 0);
+ lseek (new_, f_hdr.f_symptr, 0);
for (nsyms = 0; nsyms < f_hdr.f_nsyms; nsyms++)
{
- read (new, &symentry, SYMESZ);
+ read (new_, &symentry, SYMESZ);
if (symentry.n_numaux)
{
- read (new, &auxentry, AUXESZ);
+ read (new_, &auxentry, AUXESZ);
nsyms++;
if (ISFCN (symentry.n_type) || symentry.n_type == 0x2400)
{
auxentry.x_sym.x_fcnary.x_fcn.x_lnnoptr += bias;
- lseek (new, -AUXESZ, 1);
- write (new, &auxentry, AUXESZ);
+ lseek (new_, -AUXESZ, 1);
+ write (new_, &auxentry, AUXESZ);
}
}
}
- close (new);
+ close (new_);
return 0;
}
1.16.2.3 +1 -1 XEmacs/xemacs/src/unexelf.c
Index: unexelf.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/unexelf.c,v
retrieving revision 1.16.2.2
retrieving revision 1.16.2.3
diff -u -p -r1.16.2.2 -r1.16.2.3
--- unexelf.c 2005/09/20 16:06:12 1.16.2.2
+++ unexelf.c 2005/11/06 16:15:04 1.16.2.3
@@ -478,7 +478,7 @@ typedef struct {
# include <sys/exec_elf.h>
#endif
-#if defined(__FreeBSD__) && (defined(__alpha__) || defined(__amd64__))
+#if defined(__FreeBSD__) && (defined(__alpha__) || defined(_LP64))
# ifdef __STDC__
# define ElfW(type) Elf64_##type
# else
1.6.2.1 +15 -15 XEmacs/xemacs/src/unexhp9k800.c
Index: unexhp9k800.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/unexhp9k800.c,v
retrieving revision 1.6
retrieving revision 1.6.2.1
diff -u -p -r1.6 -r1.6.2.1
--- unexhp9k800.c 2004/09/20 19:20:06 1.6
+++ unexhp9k800.c 2005/11/06 16:15:05 1.6.2.1
@@ -90,8 +90,8 @@ void write_header(int file, struct heade
void read_header (int file, struct header *hdr, struct som_exec_auxhdr *auxhdr);
void save_data_space (int file, struct header *hdr,
struct som_exec_auxhdr *auxhdr, int size);
-void copy_rest (int old, int new);
-void copy_file (int old, int new, int size);
+void copy_rest (int old, int new_);
+void copy_file (int old, int new_, int size);
void update_file_ptrs(int file, struct header *hdr,
struct som_exec_auxhdr *auxhdr,
unsigned int location, int offset);
@@ -105,7 +105,7 @@ unexec (char *new_name, /* name of the
uintptr_t UNUSED (dummy1), /* not used by emacs */
uintptr_t UNUSED (dummy2))
{
- int old, new;
+ int old, new_;
int old_size, new_size;
struct header hdr;
struct som_exec_auxhdr auxhdr;
@@ -122,8 +122,8 @@ unexec (char *new_name, /* name of the
old = open (old_name, O_RDONLY);
if (old < 0)
{ perror(old_name); exit(1); }
- new = open (new_name, O_CREAT|O_RDWR|O_TRUNC, 0777);
- if (new < 0)
+ new_ = open (new_name, O_CREAT|O_RDWR|O_TRUNC, 0777);
+ if (new_ < 0)
{ perror(new_name); exit(1); }
/* Read the old headers */
@@ -141,24 +141,24 @@ unexec (char *new_name, /* name of the
/* Copy the old file to the new, up to the data space */
lseek(old, 0, 0);
- copy_file(old, new, auxhdr.exec_dfile);
+ copy_file(old, new_, auxhdr.exec_dfile);
/* Skip the old data segment and write a new one */
lseek(old, old_size, 1);
- save_data_space(new, &hdr, &auxhdr, new_size);
+ save_data_space(new_, &hdr, &auxhdr, new_size);
/* Copy the rest of the file */
- copy_rest(old, new);
+ copy_rest(old, new_);
/* Update file pointers since we probably changed size of data area */
- update_file_ptrs(new, &hdr, &auxhdr, auxhdr.exec_dfile, new_size-old_size);
+ update_file_ptrs(new_, &hdr, &auxhdr, auxhdr.exec_dfile, new_size-old_size);
/* Save the modified header */
- write_header(new, &hdr, &auxhdr);
+ write_header(new_, &hdr, &auxhdr);
/* Close the binary file */
close (old);
- close (new);
+ close (new_);
return 0;
}
@@ -284,7 +284,7 @@ calculate_checksum(struct header *hdr)
/* Copy size bytes from the old file to the new one. */
void
-copy_file (int old, int new, int size)
+copy_file (int old, int new_, int size)
{
int len;
int buffer[8192]; /* word aligned will be faster */
@@ -297,7 +297,7 @@ copy_file (int old, int new, int size)
perror ("Read failure on a.out file");
exit (1);
}
- if (write (new, buffer, len) != len)
+ if (write (new_, buffer, len) != len)
{
perror ("Write failure in a.out file");
exit (1);
@@ -307,14 +307,14 @@ copy_file (int old, int new, int size)
/* Copy the rest of the file, up to EOF. */
void
-copy_rest (int old, int new)
+copy_rest (int old, int new_)
{
int buffer[4096];
int len;
/* Copy bytes until end of file or error */
while ( (len = read(old, buffer, sizeof(buffer))) > 0)
- if (write(new, buffer, len) != len) break;
+ if (write(new_, buffer, len) != len) break;
if (len != 0)
{ perror("Unable to copy the rest of the file"); exit(1); }
1.3.2.1 +9 -9 XEmacs/xemacs/src/unexmips.c
Index: unexmips.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/unexmips.c,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -p -r1.3 -r1.3.2.1
--- unexmips.c 2004/09/20 19:20:06 1.3
+++ unexmips.c 2005/11/06 16:15:05 1.3.2.1
@@ -129,7 +129,7 @@ unexec (new_name, a_name, data_start, bs
unsigned UNUSED (bss_start);
unsigned entry_address;
{
- int new, old;
+ int new_, old;
int pagesize, brk;
int newsyms, symrel;
int nread;
@@ -142,8 +142,8 @@ unexec (new_name, a_name, data_start, bs
old = open (a_name, O_RDONLY, 0);
if (old < 0) fatal_unexec ("opening %s", a_name);
- new = creat (new_name, 0666);
- if (new < 0) fatal_unexec ("creating %s", new_name);
+ new_ = creat (new_name, 0666);
+ if (new_ < 0) fatal_unexec ("creating %s", new_name);
hdr = *((struct headers *)TEXT_START);
#ifdef MIPS2
@@ -275,9 +275,9 @@ unexec (new_name, a_name, data_start, bs
bss_section->s_scnptr = scnptr;
}
- WRITE (new, (void *) TEXT_START, hdr.aout.tsize,
+ WRITE (new_, (void *) TEXT_START, hdr.aout.tsize,
"writing text section to %s", new_name);
- WRITE (new, (void *) DATA_START, hdr.aout.dsize,
+ WRITE (new_, (void *) DATA_START, hdr.aout.dsize,
"writing data section to %s", new_name);
SEEK (old, hdr.fhdr.f_symptr, "seeking to start of symbols in %s",
a_name);
@@ -307,19 +307,19 @@ unexec (new_name, a_name, data_start, bs
#undef symhdr
do
{
- if (write (new, buffer, nread) != nread)
+ if (write (new_, buffer, nread) != nread)
fatal_unexec ("writing symbols to %s", new_name);
nread = read (old, buffer, BUFSIZE);
if (nread < 0) fatal_unexec ("reading symbols from %s", a_name);
#undef BUFSIZE
} while (nread != 0);
- SEEK (new, 0, "seeking to start of header in %s", new_name);
- WRITE (new, &hdr, sizeof (hdr),
+ SEEK (new_, 0, "seeking to start of header in %s", new_name);
+ WRITE (new_, &hdr, sizeof (hdr),
"writing header of %s", new_name);
close (old);
- close (new);
+ close (new_);
mark_x (new_name);
}
1.23.2.3 +3 -13 XEmacs/xemacs/src/unicode.c
Index: unicode.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/unicode.c,v
retrieving revision 1.23.2.2
retrieving revision 1.23.2.3
diff -u -p -r1.23.2.2 -r1.23.2.3
--- unicode.c 2005/07/13 04:47:07 1.23.2.2
+++ unicode.c 2005/11/06 16:15:05 1.23.2.3
@@ -1,5 +1,5 @@
/* Code to handle Unicode conversion.
- Copyright (C) 2000, 2001, 2002, 2003, 2004 Ben Wing.
+ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Ben Wing.
This file is part of XEmacs.
@@ -548,15 +548,10 @@ compute_from_unicode_table_size_1 (void
}
}
-#ifdef MC_ALLOC
- size += mc_alloced_storage_size (256 * (level == 1 ? sizeof (short) :
- sizeof (void *)), stats);
-#else /* not MC_ALLOC */
size += malloced_storage_size (table,
256 * (level == 1 ? sizeof (short) :
sizeof (void *)),
stats);
-#endif /* not MC_ALLOC */
return size;
}
@@ -578,15 +573,10 @@ compute_to_unicode_table_size_1 (void *t
}
}
-#ifdef MC_ALLOC
- size += mc_alloced_storage_size (96 * (level == 1 ? sizeof (int) :
- sizeof (void *)), stats);
-#else /* not MC_ALLOC */
size += malloced_storage_size (table,
96 * (level == 1 ? sizeof (int) :
sizeof (void *)),
stats);
-#endif /* not MC_ALLOC */
return size;
}
@@ -1270,7 +1260,7 @@ CHARACTER is one of the following:
DEFUN ("char-to-unicode", Fchar_to_unicode, 1, 1, 0, /*
Convert character to Unicode codepoint.
-When there is no international support (i.e. the 'mule feature is not
+When there is no international support (i.e. the `mule' feature is not
present), this function simply does `char-to-int'.
*/
(character))
@@ -1291,7 +1281,7 @@ charsets will be consulted, in the given
Otherwise, the default ordering of all charsets will be given (see
`set-unicode-charset-precedence').
-When there is no international support (i.e. the 'mule feature is not
+When there is no international support (i.e. the `mule' feature is not
present), this function simply does `int-to-char' and ignores the CHARSETS
argument.
1.1.6.2 +2 -10 XEmacs/xemacs/src/window-impl.h
Index: window-impl.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/window-impl.h,v
retrieving revision 1.1.6.1
retrieving revision 1.1.6.2
diff -u -p -r1.1.6.1 -r1.1.6.2
--- window-impl.h 2005/07/13 04:47:07 1.1.6.1
+++ window-impl.h 2005/11/06 16:15:05 1.1.6.2
@@ -84,11 +84,7 @@ the window configuration. */
struct window
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
/* The upper left corner coordinates of this window,
as integers (pixels) relative to upper left corner of frame = 0, 0 */
@@ -172,11 +168,7 @@ struct window
struct window_mirror
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else /* MC_ALLOC */
- struct lcrecord_header header;
-#endif /* MC_ALLOC */
+ struct LCRECORD_HEADER header;
/* Frame this mirror is on. */
struct frame *frame;
1.81.2.3 +23 -49 XEmacs/xemacs/src/window.c
Index: window.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/window.c,v
retrieving revision 1.81.2.2
retrieving revision 1.81.2.3
diff -u -p -r1.81.2.2 -r1.81.2.3
--- window.c 2005/07/13 04:47:07 1.81.2.2
+++ window.c 2005/11/06 16:15:05 1.81.2.3
@@ -346,11 +346,7 @@ DEFINE_LRECORD_IMPLEMENTATION ("window",
Lisp_Object
allocate_window (void)
{
-#ifdef MC_ALLOC
- struct window *p = alloc_lrecord_type (struct window, &lrecord_window);
-#else /* not MC_ALLOC */
- struct window *p = alloc_lcrecord_type (struct window, &lrecord_window);
-#endif /* not MC_ALLOC */
+ struct window *p = ALLOC_LCRECORD_TYPE (struct window, &lrecord_window);
Lisp_Object val = wrap_window (p);
#define WINDOW_SLOT(slot) p->slot = Qnil;
@@ -487,11 +483,7 @@ static struct window_mirror *
new_window_mirror (struct frame *f)
{
struct window_mirror *t =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct window_mirror, &lrecord_window_mirror);
-#else /* not MC_ALLOC */
- alloc_lcrecord_type (struct window_mirror, &lrecord_window_mirror);
-#endif /* not MC_ALLOC */
+ ALLOC_LCRECORD_TYPE (struct window_mirror, &lrecord_window_mirror);
t->frame = f;
t->current_display_lines = Dynarr_new (display_line);
@@ -3808,21 +3800,13 @@ temp_output_buffer_show (Lisp_Object buf
static void
make_dummy_parent (Lisp_Object window)
{
- Lisp_Object new;
+ Lisp_Object new_;
struct window *o = XWINDOW (window);
-#ifdef MC_ALLOC
- struct window *p = alloc_lrecord_type (struct window, &lrecord_window);
-#else /* not MC_ALLOC */
- struct window *p = alloc_lcrecord_type (struct window, &lrecord_window);
-#endif /* not MC_ALLOC */
-
- new = wrap_window (p);
-#ifdef MC_ALLOC
- copy_lrecord (p, o);
-#else /* MC_ALLOC */
- copy_lcrecord (p, o);
-#endif /* MC_ALLOC */
+ struct window *p = ALLOC_LCRECORD_TYPE (struct window, &lrecord_window);
+ new_ = wrap_window (p);
+ COPY_LCRECORD (p, o);
+
/* Don't copy the pointers to the line start cache or the face
instances. */
p->line_start_cache = Dynarr_new (line_start_cache);
@@ -3832,13 +3816,13 @@ make_dummy_parent (Lisp_Object window)
make_image_instance_cache_hash_table ();
/* Put new into window structure in place of window */
- replace_window (window, new);
+ replace_window (window, new_);
o->next = Qnil;
o->prev = Qnil;
o->vchild = Qnil;
o->hchild = Qnil;
- o->parent = new;
+ o->parent = new_;
p->start[CURRENT_DISP] = Qnil;
p->start[DESIRED_DISP] = Qnil;
@@ -3861,7 +3845,7 @@ returned.
*/
(window, size, horflag))
{
- Lisp_Object new;
+ Lisp_Object new_;
struct window *o, *p;
struct frame *f;
int csize;
@@ -3924,8 +3908,8 @@ returned.
and see the difference. See redisplay-tests.el --yh */
reset_face_cachels (XWINDOW (window));
#endif
- new = o->parent;
- XWINDOW (new)->vchild = window;
+ new_ = o->parent;
+ XWINDOW (new_)->vchild = window;
XFRAME (o->frame)->mirror_dirty = 1;
}
}
@@ -3944,8 +3928,8 @@ returned.
/* #### See above. */
reset_face_cachels (XWINDOW (window));
#endif
- new = o->parent;
- XWINDOW (new)->hchild = window;
+ new_ = o->parent;
+ XWINDOW (new_)->hchild = window;
XFRAME (o->frame)->mirror_dirty = 1;
}
}
@@ -3955,15 +3939,15 @@ returned.
if we are making side-by-side windows */
MARK_FRAME_WINDOWS_STRUCTURE_CHANGED (f);
- new = allocate_window ();
- p = XWINDOW (new);
+ new_ = allocate_window ();
+ p = XWINDOW (new_);
p->frame = o->frame;
p->next = o->next;
if (!NILP (p->next))
- XWINDOW (p->next)->prev = new;
+ XWINDOW (p->next)->prev = new_;
p->prev = window;
- o->next = new;
+ o->next = new_;
p->parent = o->parent;
p->buffer = Qt;
@@ -3992,13 +3976,13 @@ returned.
XFRAME (p->frame)->mirror_dirty = 1;
- note_object_created (new);
+ note_object_created (new_);
/* do this last (after the window is completely initialized and
the mirror-dirty flag is set) so that specifier recomputation
caused as a result of this will work properly and not abort. */
- Fset_window_buffer (new, o->buffer, Qt);
- return new;
+ Fset_window_buffer (new_, o->buffer, Qt);
+ return new_;
}
@@ -5112,13 +5096,7 @@ compute_window_mirror_usage (struct wind
{
if (!mir)
return;
-#ifdef MC_ALLOC
- stats->other += mc_alloced_storage_size (sizeof (struct window_mirror),
- ovstats);
-#else /* not MC_ALLOC */
- stats->other += malloced_storage_size (mir, sizeof (struct window_mirror),
- ovstats);
-#endif /* not MC_ALLOC */
+ stats->other += LISPOBJ_STORAGE_SIZE (mir, sizeof (*mir), ovstats);
#ifdef HAVE_SCROLLBARS
{
struct device *d = XDEVICE (FRAME_DEVICE (mir->frame));
@@ -5142,11 +5120,7 @@ compute_window_usage (struct window *w,
struct overhead_stats *ovstats)
{
xzero (*stats);
-#ifdef MC_ALLOC
- stats->other += mc_alloced_storage_size (sizeof (struct window), ovstats);
-#else /* not MC_ALLOC */
- stats->other += malloced_storage_size (w, sizeof (struct window), ovstats);
-#endif /* not MC_ALLOC */
+ stats->other += LISPOBJ_STORAGE_SIZE (w, sizeof (*w), ovstats);
stats->face += compute_face_cachel_usage (w->face_cachels, ovstats);
stats->glyph += compute_glyph_cachel_usage (w->glyph_cachels, ovstats);
stats->line_start +=
1.7.2.2 +1 -1 XEmacs/xemacs/src/xemacs.def.in.in
Index: xemacs.def.in.in
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/xemacs.def.in.in,v
retrieving revision 1.7.2.1
retrieving revision 1.7.2.2
diff -u -p -r1.7.2.1 -r1.7.2.2
--- xemacs.def.in.in 2005/07/13 04:47:08 1.7.2.1
+++ xemacs.def.in.in 2005/11/06 16:15:06 1.7.2.2
@@ -18,7 +18,7 @@ mcpro_1 /* mcpro */
#endif
mc_alloc /* DEFSUBR */
#else /* not MC_ALLOC */
-alloc_automanaged_lcrecord /* alloc_lcrecord_type */
+alloc_automanaged_lcrecord /* old_alloc_lcrecord_type */
#endif /* not MC_ALLOC */
apply1
#ifdef USE_ASSERTIONS
1.1.2.15 +6 -30 XEmacs/xemacs/src/Attic/xft-fonts.c
Index: xft-fonts.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/Attic/xft-fonts.c,v
retrieving revision 1.1.2.14
retrieving revision 1.1.2.15
diff -u -p -r1.1.2.14 -r1.1.2.15
--- xft-fonts.c 2005/09/06 08:24:52 1.1.2.14
+++ xft-fonts.c 2005/11/06 16:15:06 1.1.2.15
@@ -194,11 +194,7 @@ Return a new, empty fc-pattern object.
())
{
fc_pattern *fcpat =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#else
- alloc_lcrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#endif
+ ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern);
fcpat->fcpatPtr = FcPatternCreate();
return wrap_fcpattern(fcpat);
@@ -210,11 +206,7 @@ Parse an Fc font name and return its rep
(name))
{
struct fc_pattern *fcpat =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#else
- alloc_lcrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#endif
+ ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern);
CHECK_STRING(name); /* #### MEMORY LEAK!! maybe not ... */
@@ -263,11 +255,7 @@ Make a copy of the fc pattern object PAT
struct fc_pattern *copy = NULL;
CHECK_FCPATTERN(pattern);
-#ifdef MC_ALLOC
- copy = alloc_lrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#else
- copy = alloc_lcrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#endif
+ copy = ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern);
copy->fcpatPtr = FcPatternDuplicate(XFCPATTERN_PTR(pattern));
return wrap_fcpattern(copy);
}
@@ -521,11 +509,7 @@ given pattern, or an error code. Possib
FcResult res;
struct fc_pattern *res_fcpat =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#else
- alloc_lcrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#endif
+ ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern);
CHECK_FCPATTERN(pattern); /* #### MEMORY LEAKS!!! */
if (NILP(device))
return Qnil;
@@ -566,11 +550,7 @@ fontset_to_list (FcFontSet *fontset)
for (idx = 0; idx < fontset->nfont; ++idx)
{
fcpat =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#else
- alloc_lcrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#endif
+ ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern);
fcpat->fcpatPtr = FcPatternDuplicate (fontset->fonts[idx]);
fontlist = Fcons (wrap_fcpattern(fcpat), fontlist);
}
@@ -656,11 +636,7 @@ fc pattern matched by the Fc library. */
Display *dpy;
XftFont *font;
struct fc_pattern *fcpat =
-#ifdef MC_ALLOC
- alloc_lrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#else
- alloc_lcrecord_type (struct fc_pattern, &lrecord_fc_pattern);
-#endif
+ ALLOC_LCRECORD_TYPE (struct fc_pattern, &lrecord_fc_pattern);
CHECK_STRING (fontname); /* #### MEMORY LEAK?! maybe not ... */
if (NILP(xdevice))
1.1.2.9 +1 -5 XEmacs/xemacs/src/Attic/xft-fonts.h
Index: xft-fonts.h
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/Attic/xft-fonts.h,v
retrieving revision 1.1.2.8
retrieving revision 1.1.2.9
diff -u -p -r1.1.2.8 -r1.1.2.9
--- xft-fonts.h 2005/08/03 06:09:32 1.1.2.8
+++ xft-fonts.h 2005/11/06 16:15:06 1.1.2.9
@@ -54,11 +54,7 @@ XftColor xft_get_color (Display *dpy, Co
struct fc_pattern
{
-#ifdef MC_ALLOC
- struct lrecord_header header;
-#else
- struct lcrecord_header header;
-#endif
+ struct LCRECORD_HEADER header;
FcPattern *fcpatPtr;
};
1.62.2.6 +4 -0 XEmacs/xemacs/tests/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/tests/ChangeLog,v
retrieving revision 1.62.2.5
retrieving revision 1.62.2.6
diff -u -p -r1.62.2.5 -r1.62.2.6
--- ChangeLog 2005/09/20 16:06:27 1.62.2.5
+++ ChangeLog 2005/11/06 16:15:40 1.62.2.6
@@ -1,3 +1,7 @@
+2005-10-26 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacs 21.5.23 "daikon" is released.
+
2005-09-14 Stephen J. Turnbull <stephen(a)xemacs.org>
* XEmacs 21.5.22 "cucumber" is released.