XEmacs 21.2.42 "Poseidon".
authortomo <tomo>
Wed, 14 Nov 2001 07:51:37 +0000 (07:51 +0000)
committertomo <tomo>
Wed, 14 Nov 2001 07:51:37 +0000 (07:51 +0000)
43 files changed:
CHANGES-beta
ChangeLog
PROBLEMS
etc/NEWS
info/internals.info
info/xemacs-faq.info
info/xemacs-faq.info-1
info/xemacs.info
info/xemacs.info-2
lib-src/ChangeLog
lisp/ChangeLog
lisp/gui.el
lisp/menubar-items.el
lisp/package-get.el
lisp/package-net.el
lisp/package-ui.el
lisp/packages.el
lisp/wid-edit.el
lwlib/ChangeLog
man/ChangeLog
man/internals/internals.texi
man/xemacs-faq.texi
man/xemacs/frame.texi
netinstall/ChangeLog
netinstall/ini.h
nt/ChangeLog
src/.dbxrc
src/.gdbinit
src/ChangeLog
src/alloc.c
src/console-x.h
src/fns.c
src/glyphs-msw.c
src/glyphs-widget.c
src/glyphs-x.c
src/glyphs.c
src/gui.c
src/gui.h
src/lisp.h
src/lrecord.h
src/opaque.h
tests/ChangeLog
version.sh

index f7ff2b8..e70e4b9 100644 (file)
@@ -1,3 +1,10 @@
+to 21.2.42 "Poseidon"
+-- 64-bit platforms (Alpha) broken in 21.2.41 now fixed -- Martin Buchholz
+-- Windows packaging changes -- Andy Piper
+-- Widget bug fixes -- Andy Piper
+-- Modeline scrolling documented -- Didier Verna
+-- C-level alignment hackery -- Martin Buchholz
+
 to 21.2.41 "Polyhymnia"
 -- A very important fix to the byte-compiler was made.
    RE-BYTE-COMPILE all your .el files that were compiled by any older
index 673916d..c408e19 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2001-01-20  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.42 "Poseidon" is released.
+
+2001-01-18  Martin Buchholz  <martin@xemacs.org>
+
+       * PROBLEMS (Sun/Solaris): Yet another microimprovement.
+
+2001-01-17  Martin Buchholz  <martin@xemacs.org>
+
+       * PROBLEMS (Sun/Solaris): Replace --with-gnu-ld=no with
+       --with-ld=/usr/ccs/bin/ld
+
+2001-01-16  Robert Pluim  <rpluim@bigfoot.com>
+
+       * PROBLEMS (SunOS/Solaris): Document workaround for GNU ld bug on
+       Solaris. Half mine, half Raymond Toy, half Martin Buchholz.
+
+2001-01-16  Didier Verna  <didier@xemacs.org>
+
+       * NEWS: document the modeline horizontal scrolling feature.
+
 2001-01-17  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.41 "Polyhymnia" is released.
@@ -62,7 +84,7 @@
 
        * XEmacs 21.2.38 is released.
 
-2000-11-26  Björn Torkelsson  <torkel@hpc2n.umu.se>
+2000-11-26  Bjrn Torkelsson  <torkel@hpc2n.umu.se>
 
        * configure.in: Only show message about DnD API if compiling with DnD
 
 
 2000-10-10  Martin Buchholz  <martin@xemacs.org>
 
-       * configure.in: 
+       * configure.in:
        Use stropts.h, not sys/stropts.h.
        Use strtio.h, not sys/strtio.h.
 
 
 2000-07-12  Martin Buchholz  <martin@xemacs.org>
 
-       * configure.in: 
+       * configure.in:
        Make sure Unix98 socklen_t is defined.
        Use ANSI C mode `-std1' with DEC C instead of `-std'.
 
 2000-07-09  Martin Buchholz  <martin@xemacs.org>
 
-       * configure.in: 
+       * configure.in:
        Replace SMART_INCLUDE with a dumber, but more reliable method.
 2000-07-10  Martin Buchholz  <martin@xemacs.org>
 
-       * modules/zlib/Makefile: 
-       * modules/sample/Makefile: 
-       * modules/ldap/Makefile: 
-       * modules/base64/Makefile: 
-       * Makefile.in.in: 
+       * modules/zlib/Makefile:
+       * modules/sample/Makefile:
+       * modules/ldap/Makefile:
+       * modules/base64/Makefile:
+       * Makefile.in.in:
        rm -f ==> $(RM)
        define SHELL=/bin/sh
 
 2000-07-08  Ben Wing  <ben@xemacs.org>
 
        * configure.in: add -lcomdlg32 for cygwin.
-       
+
 2000-07-05  Craig Lanning  <lanning@scra.org>
 
        * aclocal.m4 (can_build_shared):
        First pass at module support for cygwin and mingw.
-       
+
        * configure:
        * configure (xe_check_libs):
        * configure (acfindx):
 
 2000-04-19  Martin Buchholz  <martin@xemacs.org>
 
-       * configure.in: 
+       * configure.in:
        * src/config.h.in:
        Rewrite SMART_INCLUDE implementation to actually work.
        Be paranoid - Avoid use of spaces in these macro definitions.
-       Leave alloca() definition at start of compilation unit, 
+       Leave alloca() definition at start of compilation unit,
        as AIX requests.
        Rename SMART_INCLUDE_MACRO to SMART_INCLUDE_INDIRECTIONS.
 
 
        * xemacs/configure.in: Do a normal link when compiling with
        --pdump. Don't try compiling an unexec object file.
+
 2000-03-27  Didier Verna  <didier@xemacs.org>
 
        * configure.in: reorganize the output by topic.
 
        * config.guess: Synched with latest FSF version.
 
-1998-07-12  Björn Torkelsson  <torkel@hpc2n.umu.se>
+1998-07-12  Bjrn Torkelsson  <torkel@hpc2n.umu.se>
 
        * Makefile.in: added LDFLAGS.
 
index 4c5d43d..dab9c7c 100644 (file)
--- a/PROBLEMS
+++ b/PROBLEMS
@@ -187,6 +187,37 @@ Valdis.Kletnieks@vt.edu writes:
 
 
 ** SunOS/Solaris
+*** Dumping error when using GNU binutils / GNU ld on a Sun.
+
+Errors similar to the following:
+
+   Dumping under the name xemacs unexec():
+   dldump(/space/rpluim/xemacs-obj/src/xemacs): ld.so.1: ./temacs:
+   fatal: /space/rpluim/xemacs-obj/src/xemacs: unknown dynamic entry:
+   1879048176
+
+are caused by using GNU ld.  There are several workarounds available:
+
+In XEmacs 21.2 or later, configure using the new portable dumper
+(--pdump).
+
+Alternatively, you can link using the Sun version of ld, which is
+normally held in /usr/ccs/bin.  This can be done by one of:
+
+- building gcc with these configure flags:
+  configure --with-ld=/usr/ccs/bin/ld --with-as=/usr/ccs/bin/as
+
+- adding -B/usr/ccs/bin/ to CFLAGS used to configure XEmacs
+  (Note: The trailing '/' there is significant.)
+
+- uninstalling GNU ld.
+
+The Solaris2 FAQ claims:
+
+    When you install gcc, don't make the mistake of installing
+    GNU binutils or GNU libc, they are not as capable as their
+    counterparts you get with Solaris 2.x.
+
 *** Link failure when using acc on a Sun.
 
 To use acc, you need additional options just before the libraries, such as
@@ -208,7 +239,7 @@ it to `/usr/openwin'.
 
 There have been reports of Sun sed truncating very lines in the
 Makefile during configuration.  The workaround is to use GNU sed or,
-even better, think of a better way to generate Makefile, and send us a 
+even better, think of a better way to generate Makefile, and send us a
 patch. :-)
 
 *** On Solaris 2 I get undefined symbols from libcurses.a.
@@ -230,7 +261,7 @@ This only occurs if you have LANG != C.  This is a known bug with
 bash, as a workaround.
 
 *** On SunOS, you get linker errors
-    ld: Undefined symbol 
+    ld: Undefined symbol
        _get_wmShellWidgetClass
        _get_applicationShellWidgetClass
 
@@ -254,7 +285,7 @@ extensions to X11R5 are installed.
 
 *** On a Sun running SunOS 4.1.1, you get this error message from GNU ld:
 
-    /lib/libc.a(_Q_sub.o): Undefined symbol __Q_get_rp_rd referenced from text segment 
+    /lib/libc.a(_Q_sub.o): Undefined symbol __Q_get_rp_rd referenced from text segment
 
 The problem is in the Sun shared C library, not in GNU ld.
 
@@ -263,7 +294,7 @@ The solution is to install Patch-ID# 100267-03 from Sun.
 *** SunOS 4.1.2: undefined symbol _get_wmShellWidgetClass
 
   Apparently the version of libXmu.so.a that Sun ships is hosed: it's missing
-  some stuff that is in libXmu.a (the static version).  Sun has a patch for 
+  some stuff that is in libXmu.a (the static version).  Sun has a patch for
   this, but a workaround is to use the static version of libXmu, by changing
   the link command from "-lXmu" to "-Bstatic -lXmu -Bdynamic".  If you have
   OpenWindows 3.0, ask Sun for these patches:
@@ -314,7 +345,7 @@ There are a couple of problems [with use of -rpath with Irix ld], though:
   1. The ld in IRIX 5.3 ignores all but the last -rpath
      spec, so the patched configure spits out a warning
      if --x-libraries or --site-runtime-libraries are
-     specified under irix 5.x, and it only adds -rpath 
+     specified under irix 5.x, and it only adds -rpath
      entries for the --site-runtime-libraries.  This bug was
      fixed sometime between 5.3 and 6.2.
 
@@ -420,7 +451,7 @@ Marcus Thiessel <marcus@xemacs.org>
   This might be a sed problem. For your own safety make sure to use
   GNU sed while dumping XEmacs.
 
-*** On HP-UX 11.0 XEmacs causes excessive X11 errors when running. 
+*** On HP-UX 11.0 XEmacs causes excessive X11 errors when running.
     (also appears on AIX as reported in comp.emacs.xemacs)
 
 Marcus Thiessel <marcus@xemacs.org>
@@ -435,7 +466,7 @@ Marcus Thiessel <marcus@xemacs.org>
   configure:
 
      --x-libraries="/usr/lib/Motif1.2_R6 -L/usr/lib/X11R6"
+
   Make sure /usr/lib/Motif1.2_R6/libXm.sl is a link to
   /usr/lib/Motif1.2_R6/libXm.3.
 
@@ -456,7 +487,7 @@ Marcus Thiessel <marcus@xemacs.org>
 *** Native cc on SCO OpenServer 5 is now OK.  Icc may still throw you
 a curve.  Here is what Robert Lipe <robertl@arnet.com> says:
 
-Unlike XEmacs 19.13, building with the native cc on SCO OpenServer 5 
+Unlike XEmacs 19.13, building with the native cc on SCO OpenServer 5
 now produces a functional binary.   I will typically build this
 configuration for COFF with:
 
@@ -464,15 +495,15 @@ configuration for COFF with:
          --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
          --with-xpm --with-xface --with-sound=nas
 
-This version now supports ELF builds.  I highly recommend this to 
-reduce the in-core footprint of XEmacs.  This is now how I compile 
+This version now supports ELF builds.  I highly recommend this to
+reduce the in-core footprint of XEmacs.  This is now how I compile
 all my test releases.  Build it like this:
 
        /path_to_XEmacs_source/configure --with-gcc=no \
          --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
          --with-xpm --with-xface --with-sound=nas --dynamic
 
-The compiler known as icc [ supplied with the OpenServer 5 Development 
+The compiler known as icc [ supplied with the OpenServer 5 Development
 System ] generates a working binary, but it takes forever to generate
 XEmacs.  ICC also whines more about the code than /bin/cc does.  I do
 believe all its whining is legitimate, however.    Note that you do
@@ -484,32 +515,32 @@ The way I handle the build procedure is:
          --site-includes=/usr/local/include --site-libraries=/usr/local/lib \
          --with-xpm --with-xface --with-sound=nas --dynamic --compiler="icc"
 
-NOTE I have the xpm, xface, and audio libraries and includes in 
+NOTE I have the xpm, xface, and audio libraries and includes in
        /usr/local/lib, /usr/local/include.  If you don't have these,
        don't include the "--with-*" arguments in any of my examples.
 
-In previous versions of XEmacs, you had to override the defaults while 
+In previous versions of XEmacs, you had to override the defaults while
 compiling font-lock.o and extents.o when building with icc.  This seems
 to no longer be true, but I'm including this old information in case it
 resurfaces.  The process I used was:
 
-       make -k    
-       [ procure pizza, beer, repeat ] 
+       make -k
+       [ procure pizza, beer, repeat ]
        cd src
        make CC="icc -W0,-mP1COPT_max_tree_size=3000" font-lock.o extents.o
        make LD=icc
 
-If you want sound support, get the tls566 supplement from 
-ftp.sco.com:/TLS or any of its mirrors.  It works just groovy 
+If you want sound support, get the tls566 supplement from
+ftp.sco.com:/TLS or any of its mirrors.  It works just groovy
 with XEmacs.
 
 The M-x manual-entry is known not to work.  If you know Lisp and would
 like help in making it work, e-mail me at <robertl@dgii.com>.
 (UNCHECKED for 19.15 -- it might work).
 
-In earlier releases, gnuserv/gnuclient/gnudoit would open a frame 
+In earlier releases, gnuserv/gnuclient/gnudoit would open a frame
 just fine, but the client would lock up and the server would
-terminate when you used C-x # to close the frame.   This is now 
+terminate when you used C-x # to close the frame.   This is now
 fixed in XEmacs.
 
 In etc/ there are two files of note. emacskeys.sco and emacsstrs.sco.
@@ -550,7 +581,7 @@ leads to instability in XEmacs.
 
 *** The XEmacs executable crashes at startup.
 
-This can be caused by many things.  
+This can be caused by many things.
 
 If you are running with X11 you need to have cygwin b19 or cygwin
 b20.1 or greater, cygwin b20 will not work.
@@ -694,7 +725,7 @@ may need to add "#define static" to the m- or the s- file.
 
 Try evaluating the form (setq lock-directory nil) and see if that helps.
 There is a problem with file-locking on some systems (possibly related
-to NFS) that I don't understand.  Please send mail to the address 
+to NFS) that I don't understand.  Please send mail to the address
 xemacs@xemacs.org if you figure this one out.
 
 *** When emacs starts up, I get lots of warnings about unknown keysyms.
@@ -702,15 +733,15 @@ xemacs@xemacs.org if you figure this one out.
 If you are running the prebuilt binaries, the Motif library expects to find
 certain thing in the XKeysymDB file.  This file is normally in /usr/lib/X11/
 or in /usr/openwin/lib/.  If you keep yours in a different place, set the
-environment variable $XKEYSYMDB to point to it before starting emacs.  If 
-you still have the problem after doing that, perhaps your version of X is 
+environment variable $XKEYSYMDB to point to it before starting emacs.  If
+you still have the problem after doing that, perhaps your version of X is
 too old.  There is a copy of the MIT X11R5 XKeysymDB file in the emacs `etc'
 directory.  Try using that one.
 
 *** My X resources used to work, and now some of them are being ignored.
 
 Check the resources in .../etc/Emacs.ad (which is the same as the file
-sample.Xdefaults).  Perhaps some of the default resources built in to 
+sample.Xdefaults).  Perhaps some of the default resources built in to
 emacs are now overriding your existing resources.  Copy and edit the
 resources in Emacs.ad as necessary.
 
@@ -870,7 +901,7 @@ info.
 XEmacs has fairly new TTY redisplay support (beginning from 19.12),
 which doesn't include some basic TTY optimizations -- like using
 scrolling regions to move around blocks of text.  This is why
-redisplay on the traditional terminals, or over slow lines can be very 
+redisplay on the traditional terminals, or over slow lines can be very
 slow.
 
 If you are interested in fixing this, please let us know at
@@ -1006,7 +1037,7 @@ problem by adding this to your .cshrc file:
 
     if ($?EMACS) then
         if ($EMACS == "t") then
-            unset edit 
+            unset edit
             stty  -icrnl -onlcr -echo susp ^Z
         endif
     endif
@@ -1333,7 +1364,7 @@ As of this writing (1998-12-28) you may get crashes while running
 XEmacs in a non-C locale.  For example, `LC_ALL=en_US xemacs' crashes
 while `LC_ALL=C xemacs' runs fine.  This happens for example with GNU
 libc 2.0.7.  Installing libintl.a and libintl.h built from gettext
-0.10.35 and re-building XEmacs solves the crashes.  Presumably soon 
+0.10.35 and re-building XEmacs solves the crashes.  Presumably soon
 everyone will upgrade to GNU Libc 2.1 and this problem will go away.
 
 *** `C-z', or `M-x suspend-emacs' hangs instead of suspending.
@@ -1377,7 +1408,7 @@ exist.  The first line in the `/etc/hosts' file should look like this
 Also make sure that the `/etc/host.conf' files contains the following
 lines:
 
-    order hosts, bind 
+    order hosts, bind
     multi on
 
 Any changes, permanent and temporary, to the host name should be
@@ -1644,11 +1675,11 @@ is giving it back 3.
 The solution is to add a pair of quotes around `tty` to make it a
 single word:
 
-if (`tty` == "/dev/console") 
+if (`tty` == "/dev/console")
 
 should be changed to:
 
-if ("`tty`" == "/dev/console") 
+if ("`tty`" == "/dev/console")
 
 Even better, move things that set up terminal sections out of .cshrc
 and into .login.
@@ -1786,7 +1817,7 @@ nobody is using and testing.
 and testers.  It probably doesn't work.
 
 ** There are no `native XEmacs' TUTORIALs for any Asian languages,
-including Japanese.  FSF Emacs and XEmacs tutorials are quite similar, 
+including Japanese.  FSF Emacs and XEmacs tutorials are quite similar,
 so it should be sufficient to skim through the differences and apply
 them to the Japanese version.
 
index e2ae0ca..6bf41ea 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -33,6 +33,9 @@ file.
 * Changes in XEmacs 21.2
 ========================
 
+** The modeline's text is now scrollable. Please refer to the variable
+`modeline-scrolling-method' for more information.
+
 ** The delete key now deletes forward by default.
 
 This is regulated by the variable `delete-key-deletes-forward', which
index 07e79dc..0446b0a 100644 (file)
@@ -47,6 +47,7 @@ internals.info-5: 194152
 internals.info-6: 243742
 internals.info-7: 287809
 internals.info-8: 336676
+internals.info-9: 380670
 \1f
 Tag Table:
 (Indirect)
@@ -180,17 +181,17 @@ Node: Mathematics of Extent Ordering\7f357821
 Node: Extent Fragments\7f362578
 Node: Faces\7f363664
 Node: Glyphs\7f363780
-Node: Specifiers\7f365967
-Node: Menus\7f366096
-Node: Subprocesses\7f368354
-Node: Interface to the X Window System\7f370340
-Node: Lucid Widget Library\7f370621
-Node: Generic Widget Interface\7f371912
-Node: Scrollbars\7f375471
-Node: Menubars\7f375614
-Node: Checkboxes and Radio Buttons\7f375757
-Node: Progress Bars\7f375943
-Node: Tab Controls\7f376103
-Node: Index\7f376224
+Node: Specifiers\7f370413
+Node: Menus\7f370542
+Node: Subprocesses\7f372800
+Node: Interface to the X Window System\7f374786
+Node: Lucid Widget Library\7f375067
+Node: Generic Widget Interface\7f376358
+Node: Scrollbars\7f379917
+Node: Menubars\7f380060
+Node: Checkboxes and Radio Buttons\7f380203
+Node: Progress Bars\7f380389
+Node: Tab Controls\7f380549
+Node: Index\7f380670
 \1f
 End Tag Table
index bbe2a0c..bd41315 100644 (file)
@@ -9,10 +9,10 @@ END-INFO-DIR-ENTRY
 \1f
 Indirect:
 xemacs-faq.info-1: 205
-xemacs-faq.info-2: 50001
-xemacs-faq.info-3: 99619
-xemacs-faq.info-4: 149494
-xemacs-faq.info-5: 199356
+xemacs-faq.info-2: 49999
+xemacs-faq.info-3: 99617
+xemacs-faq.info-4: 149492
+xemacs-faq.info-5: 199354
 \1f
 Tag Table:
 (Indirect)
@@ -29,240 +29,240 @@ Node: Q1.0.8\7f24887
 Node: Q1.0.9\7f25102
 Node: Q1.0.10\7f25380
 Node: Q1.0.11\7f25623
-Node: Q1.0.12\7f26012
-Node: Q1.0.13\7f26380
-Node: Q1.0.14\7f26629
-Node: Q1.1.1\7f27141
-Node: Q1.1.2\7f28183
-Node: Q1.1.3\7f28576
-Node: Q1.2.1\7f29527
-Node: Q1.2.2\7f30583
-Node: Q1.2.3\7f31017
-Node: Q1.3.1\7f32101
-Node: Q1.3.2\7f32752
-Node: Q1.3.3\7f33216
-Node: Q1.3.4\7f33457
-Node: Q1.3.5\7f34230
-Node: Q1.3.6\7f36635
-Node: Q1.3.7\7f38166
-Node: Q1.4.1\7f39101
-Node: Q1.4.2\7f39963
-Node: Q1.4.3\7f40304
-Node: Q1.4.4\7f40723
-Node: Q1.4.5\7f42263
-Node: Q1.4.6\7f42567
-Node: Installation\7f43560
-Node: Q2.0.1\7f46135
-Node: Q2.0.2\7f46935
-Node: Q2.0.3\7f48703
-Node: Q2.0.4\7f50001
-Node: Q2.0.5\7f50593
-Node: Q2.0.6\7f50941
-Node: Q2.0.7\7f51322
-Node: Q2.0.8\7f51703
-Node: Q2.0.9\7f53280
-Node: Q2.0.10\7f54718
-Node: Q2.0.11\7f55562
-Node: Q2.0.12\7f56503
-Node: Q2.0.13\7f58026
-Node: Q2.0.14\7f58515
-Node: Q2.1.1\7f59573
-Node: Q2.1.2\7f62315
-Node: Q2.1.3\7f63492
-Node: Q2.1.4\7f64785
-Node: Q2.1.5\7f65584
-Node: Q2.1.6\7f65946
-Node: Q2.1.7\7f66423
-Node: Q2.1.8\7f66776
-Node: Q2.1.9\7f68310
-Node: Q2.1.10\7f68732
-Node: Q2.1.11\7f69489
-Node: Q2.1.12\7f70354
-Node: Q2.1.13\7f71309
-Node: Q2.1.14\7f72340
-Node: Q2.1.15\7f73451
-Node: Q2.1.16\7f80483
-Node: Q2.1.17\7f81177
-Node: Q2.1.18\7f81774
-Node: Q2.1.19\7f81901
-Node: Q2.1.20\7f82431
-Node: Q2.1.21\7f82813
-Node: Q2.1.22\7f83006
-Node: Q2.1.23\7f84303
-Node: Q2.1.24\7f84971
-Node: Q2.1.25\7f85443
-Node: Customization\7f86078
-Node: Q3.0.1\7f90916
-Node: Q3.0.2\7f91622
-Node: Q3.0.3\7f92186
-Node: Q3.0.4\7f92603
-Node: Q3.0.5\7f93436
-Node: Q3.0.6\7f94217
-Node: Q3.0.7\7f94797
-Node: Q3.0.8\7f95461
-Node: Q3.0.9\7f96419
-Node: Q3.1.1\7f96980
-Node: Q3.1.2\7f97717
-Node: Q3.1.3\7f98148
-Node: Q3.1.4\7f98337
-Node: Q3.1.5\7f98526
-Node: Q3.1.6\7f98910
-Node: Q3.1.7\7f99619
-Node: Q3.1.8\7f101843
-Node: Q3.2.1\7f102385
-Node: Q3.2.2\7f104038
-Node: Q3.2.3\7f104837
-Node: Q3.2.4\7f105439
-Node: Q3.2.5\7f106473
-Node: Q3.2.6\7f106940
-Node: Q3.3.1\7f107865
-Node: Q3.3.2\7f108295
-Node: Q3.3.3\7f108926
-Node: Q3.3.4\7f109307
-Node: Q3.3.5\7f110408
-Node: Q3.4.1\7f111902
-Node: Q3.4.2\7f112545
-Node: Q3.5.1\7f113057
-Node: Q3.5.2\7f114506
-Node: Q3.5.3\7f114924
-Node: Q3.5.4\7f115762
-Node: Q3.5.5\7f116594
-Node: Q3.5.6\7f117734
-Node: Q3.5.7\7f118724
-Node: Q3.5.8\7f120164
-Node: Q3.5.9\7f120911
-Node: Q3.5.10\7f121691
-Node: Q3.5.11\7f122327
-Node: Q3.6.1\7f122880
-Node: Q3.6.2\7f123625
-Node: Q3.6.3\7f124053
-Node: Q3.7.1\7f124553
-Node: Q3.7.2\7f125441
-Node: Q3.7.3\7f126100
-Node: Q3.7.4\7f126522
-Node: Q3.7.5\7f126865
-Node: Q3.7.6\7f127333
-Node: Q3.7.7\7f128048
-Node: Q3.7.8\7f129068
-Node: Q3.8.1\7f129487
-Node: Q3.8.2\7f129947
-Node: Q3.8.3\7f130410
-Node: Q3.8.4\7f131016
-Node: Q3.8.5\7f131735
-Node: Q3.9.1\7f132520
-Node: Q3.9.2\7f133460
-Node: Q3.9.3\7f134058
-Node: Q3.9.4\7f134720
-Node: Q3.10.1\7f135599
-Node: Q3.10.2\7f136417
-Node: Q3.10.3\7f137422
-Node: Q3.10.4\7f138150
-Node: Q3.10.5\7f138533
-Node: Subsystems\7f139585
-Node: Q4.0.1\7f142072
-Node: Q4.0.2\7f142597
-Node: Q4.0.3\7f143155
-Node: Q4.0.4\7f143476
-Node: Q4.0.5\7f143718
-Node: Q4.0.6\7f143949
-Node: Q4.0.7\7f144537
-Node: Q4.0.8\7f144862
-Node: Q4.0.9\7f146089
-Node: Q4.0.10\7f148127
-Node: Q4.0.11\7f148616
-Node: Q4.0.12\7f149494
-Node: Q4.1.1\7f150467
-Node: Q4.1.2\7f150870
-Node: Q4.1.3\7f151197
-Node: Q4.2.1\7f151506
-Node: Q4.2.2\7f152136
-Node: Q4.2.3\7f152376
-Node: Q4.2.4\7f152920
-Node: Q4.3.1\7f153573
-Node: Q4.3.2\7f154157
-Node: Q4.3.3\7f155638
-Node: Q4.3.4\7f155910
-Node: Q4.3.5\7f156587
-Node: Q4.4.1\7f157215
-Node: Q4.4.2\7f158701
-Node: Q4.5.1\7f159905
-Node: Q4.6.1\7f160674
-Node: Q4.7.1\7f165934
-Node: Q4.7.2\7f166889
-Node: Q4.7.3\7f167186
-Node: Q4.7.4\7f167372
-Node: Q4.7.5\7f168256
-Node: Q4.7.6\7f169897
-Node: Miscellaneous\7f170186
-Node: Q5.0.1\7f173599
-Node: Q5.0.2\7f174338
-Node: Q5.0.3\7f175192
-Node: Q5.0.4\7f175894
-Node: Q5.0.5\7f176833
-Node: Q5.0.6\7f178813
-Node: Q5.0.7\7f179470
-Node: Q5.0.8\7f180075
-Node: Q5.0.9\7f180594
-Node: Q5.0.10\7f181108
-Node: Q5.0.11\7f181356
-Node: Q5.0.12\7f181894
-Node: Q5.0.13\7f182811
-Node: Q5.0.14\7f183495
-Node: Q5.0.15\7f184260
-Node: Q5.0.16\7f184557
-Node: Q5.0.17\7f185069
-Node: Q5.0.18\7f185334
-Node: Q5.0.19\7f185528
-Node: Q5.0.20\7f185952
-Node: Q5.1.1\7f186867
-Node: Q5.1.2\7f188936
-Node: Q5.1.3\7f189672
-Node: Q5.1.4\7f193066
-Node: Q5.1.5\7f193601
-Node: Q5.1.6\7f195725
-Node: Q5.1.7\7f197211
-Node: Q5.1.8\7f198804
-Node: Q5.1.9\7f199356
-Node: Q5.1.10\7f200241
-Node: Q5.1.11\7f201372
-Node: Q5.2.1\7f201921
-Node: Q5.2.2\7f202491
-Node: Q5.2.3\7f202908
-Node: Q5.2.4\7f203143
-Node: Q5.3.1\7f204053
-Node: Q5.3.2\7f205274
-Node: Q5.3.3\7f206050
-Node: Q5.3.4\7f206534
-Node: Q5.3.5\7f207201
-Node: Q5.3.6\7f208070
-Node: Q5.3.7\7f208315
-Node: Q5.3.8\7f210505
-Node: Q5.3.9\7f210752
-Node: Q5.3.10\7f211705
-Node: Q5.3.11\7f213789
-Node: Q5.3.12\7f215380
-Node: MS Windows\7f216654
-Node: Q6.0.1\7f218131
-Node: Q6.0.2\7f218878
-Node: Q6.0.3\7f219343
-Node: Q6.0.4\7f219623
-Node: Q6.1.1\7f221902
-Node: Q6.1.2\7f222773
-Node: Q6.1.3\7f223228
-Node: Q6.1.4\7f223510
-Node: Q6.1.5\7f223888
-Node: Q6.1.6\7f224756
-Node: Q6.2.1\7f227062
-Node: Q6.2.2\7f227963
-Node: Q6.2.3\7f228375
-Node: Q6.3.1\7f228664
-Node: Q6.3.2\7f229758
-Node: Q6.3.3\7f232939
-Node: Q6.4.1\7f233208
-Node: Current Events\7f234543
-Node: Q7.0.1\7f235197
-Node: Q7.0.2\7f235836
-Node: Q7.0.3\7f236909
-Node: Q7.0.4\7f237137
+Node: Q1.0.12\7f26010
+Node: Q1.0.13\7f26378
+Node: Q1.0.14\7f26627
+Node: Q1.1.1\7f27139
+Node: Q1.1.2\7f28181
+Node: Q1.1.3\7f28574
+Node: Q1.2.1\7f29525
+Node: Q1.2.2\7f30581
+Node: Q1.2.3\7f31015
+Node: Q1.3.1\7f32099
+Node: Q1.3.2\7f32750
+Node: Q1.3.3\7f33214
+Node: Q1.3.4\7f33455
+Node: Q1.3.5\7f34228
+Node: Q1.3.6\7f36633
+Node: Q1.3.7\7f38164
+Node: Q1.4.1\7f39099
+Node: Q1.4.2\7f39961
+Node: Q1.4.3\7f40302
+Node: Q1.4.4\7f40721
+Node: Q1.4.5\7f42261
+Node: Q1.4.6\7f42565
+Node: Installation\7f43558
+Node: Q2.0.1\7f46133
+Node: Q2.0.2\7f46933
+Node: Q2.0.3\7f48701
+Node: Q2.0.4\7f49999
+Node: Q2.0.5\7f50591
+Node: Q2.0.6\7f50939
+Node: Q2.0.7\7f51320
+Node: Q2.0.8\7f51701
+Node: Q2.0.9\7f53278
+Node: Q2.0.10\7f54716
+Node: Q2.0.11\7f55560
+Node: Q2.0.12\7f56501
+Node: Q2.0.13\7f58024
+Node: Q2.0.14\7f58513
+Node: Q2.1.1\7f59571
+Node: Q2.1.2\7f62313
+Node: Q2.1.3\7f63490
+Node: Q2.1.4\7f64783
+Node: Q2.1.5\7f65582
+Node: Q2.1.6\7f65944
+Node: Q2.1.7\7f66421
+Node: Q2.1.8\7f66774
+Node: Q2.1.9\7f68308
+Node: Q2.1.10\7f68730
+Node: Q2.1.11\7f69487
+Node: Q2.1.12\7f70352
+Node: Q2.1.13\7f71307
+Node: Q2.1.14\7f72338
+Node: Q2.1.15\7f73449
+Node: Q2.1.16\7f80481
+Node: Q2.1.17\7f81175
+Node: Q2.1.18\7f81772
+Node: Q2.1.19\7f81899
+Node: Q2.1.20\7f82429
+Node: Q2.1.21\7f82811
+Node: Q2.1.22\7f83004
+Node: Q2.1.23\7f84301
+Node: Q2.1.24\7f84969
+Node: Q2.1.25\7f85441
+Node: Customization\7f86076
+Node: Q3.0.1\7f90914
+Node: Q3.0.2\7f91620
+Node: Q3.0.3\7f92184
+Node: Q3.0.4\7f92601
+Node: Q3.0.5\7f93434
+Node: Q3.0.6\7f94215
+Node: Q3.0.7\7f94795
+Node: Q3.0.8\7f95459
+Node: Q3.0.9\7f96417
+Node: Q3.1.1\7f96978
+Node: Q3.1.2\7f97715
+Node: Q3.1.3\7f98146
+Node: Q3.1.4\7f98335
+Node: Q3.1.5\7f98524
+Node: Q3.1.6\7f98908
+Node: Q3.1.7\7f99617
+Node: Q3.1.8\7f101841
+Node: Q3.2.1\7f102383
+Node: Q3.2.2\7f104036
+Node: Q3.2.3\7f104835
+Node: Q3.2.4\7f105437
+Node: Q3.2.5\7f106471
+Node: Q3.2.6\7f106938
+Node: Q3.3.1\7f107863
+Node: Q3.3.2\7f108293
+Node: Q3.3.3\7f108924
+Node: Q3.3.4\7f109305
+Node: Q3.3.5\7f110406
+Node: Q3.4.1\7f111900
+Node: Q3.4.2\7f112543
+Node: Q3.5.1\7f113055
+Node: Q3.5.2\7f114504
+Node: Q3.5.3\7f114922
+Node: Q3.5.4\7f115760
+Node: Q3.5.5\7f116592
+Node: Q3.5.6\7f117732
+Node: Q3.5.7\7f118722
+Node: Q3.5.8\7f120162
+Node: Q3.5.9\7f120909
+Node: Q3.5.10\7f121689
+Node: Q3.5.11\7f122325
+Node: Q3.6.1\7f122878
+Node: Q3.6.2\7f123623
+Node: Q3.6.3\7f124051
+Node: Q3.7.1\7f124551
+Node: Q3.7.2\7f125439
+Node: Q3.7.3\7f126098
+Node: Q3.7.4\7f126520
+Node: Q3.7.5\7f126863
+Node: Q3.7.6\7f127331
+Node: Q3.7.7\7f128046
+Node: Q3.7.8\7f129066
+Node: Q3.8.1\7f129485
+Node: Q3.8.2\7f129945
+Node: Q3.8.3\7f130408
+Node: Q3.8.4\7f131014
+Node: Q3.8.5\7f131733
+Node: Q3.9.1\7f132518
+Node: Q3.9.2\7f133458
+Node: Q3.9.3\7f134056
+Node: Q3.9.4\7f134718
+Node: Q3.10.1\7f135597
+Node: Q3.10.2\7f136415
+Node: Q3.10.3\7f137420
+Node: Q3.10.4\7f138148
+Node: Q3.10.5\7f138531
+Node: Subsystems\7f139583
+Node: Q4.0.1\7f142070
+Node: Q4.0.2\7f142595
+Node: Q4.0.3\7f143153
+Node: Q4.0.4\7f143474
+Node: Q4.0.5\7f143716
+Node: Q4.0.6\7f143947
+Node: Q4.0.7\7f144535
+Node: Q4.0.8\7f144860
+Node: Q4.0.9\7f146087
+Node: Q4.0.10\7f148125
+Node: Q4.0.11\7f148614
+Node: Q4.0.12\7f149492
+Node: Q4.1.1\7f150465
+Node: Q4.1.2\7f150868
+Node: Q4.1.3\7f151195
+Node: Q4.2.1\7f151504
+Node: Q4.2.2\7f152134
+Node: Q4.2.3\7f152374
+Node: Q4.2.4\7f152918
+Node: Q4.3.1\7f153571
+Node: Q4.3.2\7f154155
+Node: Q4.3.3\7f155636
+Node: Q4.3.4\7f155908
+Node: Q4.3.5\7f156585
+Node: Q4.4.1\7f157213
+Node: Q4.4.2\7f158699
+Node: Q4.5.1\7f159903
+Node: Q4.6.1\7f160672
+Node: Q4.7.1\7f165932
+Node: Q4.7.2\7f166887
+Node: Q4.7.3\7f167184
+Node: Q4.7.4\7f167370
+Node: Q4.7.5\7f168254
+Node: Q4.7.6\7f169895
+Node: Miscellaneous\7f170184
+Node: Q5.0.1\7f173597
+Node: Q5.0.2\7f174336
+Node: Q5.0.3\7f175190
+Node: Q5.0.4\7f175892
+Node: Q5.0.5\7f176831
+Node: Q5.0.6\7f178811
+Node: Q5.0.7\7f179468
+Node: Q5.0.8\7f180073
+Node: Q5.0.9\7f180592
+Node: Q5.0.10\7f181106
+Node: Q5.0.11\7f181354
+Node: Q5.0.12\7f181892
+Node: Q5.0.13\7f182809
+Node: Q5.0.14\7f183493
+Node: Q5.0.15\7f184258
+Node: Q5.0.16\7f184555
+Node: Q5.0.17\7f185067
+Node: Q5.0.18\7f185332
+Node: Q5.0.19\7f185526
+Node: Q5.0.20\7f185950
+Node: Q5.1.1\7f186865
+Node: Q5.1.2\7f188934
+Node: Q5.1.3\7f189670
+Node: Q5.1.4\7f193064
+Node: Q5.1.5\7f193599
+Node: Q5.1.6\7f195723
+Node: Q5.1.7\7f197209
+Node: Q5.1.8\7f198802
+Node: Q5.1.9\7f199354
+Node: Q5.1.10\7f200239
+Node: Q5.1.11\7f201370
+Node: Q5.2.1\7f201919
+Node: Q5.2.2\7f202489
+Node: Q5.2.3\7f202906
+Node: Q5.2.4\7f203141
+Node: Q5.3.1\7f204051
+Node: Q5.3.2\7f205272
+Node: Q5.3.3\7f206048
+Node: Q5.3.4\7f206532
+Node: Q5.3.5\7f207199
+Node: Q5.3.6\7f208068
+Node: Q5.3.7\7f208313
+Node: Q5.3.8\7f210503
+Node: Q5.3.9\7f210750
+Node: Q5.3.10\7f211703
+Node: Q5.3.11\7f213787
+Node: Q5.3.12\7f215378
+Node: MS Windows\7f216652
+Node: Q6.0.1\7f218129
+Node: Q6.0.2\7f218876
+Node: Q6.0.3\7f219341
+Node: Q6.0.4\7f219621
+Node: Q6.1.1\7f221900
+Node: Q6.1.2\7f222771
+Node: Q6.1.3\7f223226
+Node: Q6.1.4\7f223508
+Node: Q6.1.5\7f223886
+Node: Q6.1.6\7f224754
+Node: Q6.2.1\7f227060
+Node: Q6.2.2\7f227961
+Node: Q6.2.3\7f228373
+Node: Q6.3.1\7f228662
+Node: Q6.3.2\7f229756
+Node: Q6.3.3\7f232937
+Node: Q6.4.1\7f233206
+Node: Current Events\7f234541
+Node: Q7.0.1\7f235195
+Node: Q7.0.2\7f235834
+Node: Q7.0.3\7f236907
+Node: Q7.0.4\7f237135
 \1f
 End Tag Table
index 4f6b9b0..6706c9f 100644 (file)
@@ -609,7 +609,7 @@ Q1.0.11: Is there a port of XEmacs to the Macintosh?
 
    Yes, there is a port of XEmacs 19.14, tested on MacOS 7.6.1 and MacOS
 8.5.1 by Pitts Jarvis <pjarvis@ispchannel.com>.  It's available at
-`http://my.ispchannel.com/~pjarvis/xemacs.html'.
+`http://homepage.mac.com/pjarvis/xemacs.html'.
 
 \1f
 File: xemacs-faq.info,  Node: Q1.0.12,  Next: Q1.0.13,  Prev: Q1.0.11,  Up: Introduction
index 4f518dc..b2ba08b 100644 (file)
@@ -33,26 +33,26 @@ translation approved by the author instead of in the original English.
 Indirect:
 xemacs.info-1: 1350
 xemacs.info-2: 48996
-xemacs.info-3: 96093
-xemacs.info-4: 145333
-xemacs.info-5: 194484
-xemacs.info-6: 242144
-xemacs.info-7: 282227
-xemacs.info-8: 332190
-xemacs.info-9: 379660
-xemacs.info-10: 428178
-xemacs.info-11: 476002
-xemacs.info-12: 525173
-xemacs.info-13: 574356
-xemacs.info-14: 623433
-xemacs.info-15: 672813
-xemacs.info-16: 722680
-xemacs.info-17: 771316
-xemacs.info-18: 820011
-xemacs.info-19: 868928
-xemacs.info-20: 915111
-xemacs.info-21: 964515
-xemacs.info-22: 1007101
+xemacs.info-3: 96978
+xemacs.info-4: 146218
+xemacs.info-5: 195369
+xemacs.info-6: 243029
+xemacs.info-7: 283112
+xemacs.info-8: 333075
+xemacs.info-9: 380545
+xemacs.info-10: 429063
+xemacs.info-11: 476887
+xemacs.info-12: 526058
+xemacs.info-13: 575241
+xemacs.info-14: 624318
+xemacs.info-15: 673698
+xemacs.info-16: 723565
+xemacs.info-17: 772201
+xemacs.info-18: 820896
+xemacs.info-19: 869813
+xemacs.info-20: 915996
+xemacs.info-21: 965400
+xemacs.info-22: 1007986
 \1f
 Tag Table:
 (Indirect)
@@ -65,367 +65,368 @@ Node: Point\7f44652
 Node: Echo Area\7f46619
 Node: Mode Line\7f48996
 Node: GUI Components\7f53427
-Node: Menubar Basics\7f54657
-Node: Scrollbar Basics\7f56573
-Node: Toolbar Basics\7f57464
-Node: Gutter Basics\7f58131
-Node: Inhibiting\7f60185
-Node: Customizing\7f62556
-Node: XEmacs under X\7f62805
-Node: XEmacs under MS Windows\7f66019
-Node: Keystrokes\7f66434
-Node: Intro to Keystrokes\7f67278
-Node: Representing Keystrokes\7f69381
-Node: Key Sequences\7f70738
-Node: String Key Sequences\7f74079
-Node: Meta Key\7f74462
-Node: Super and Hyper Keys\7f75935
-Node: Character Representation\7f82180
-Node: Commands\7f83200
-Node: Pull-down Menus\7f86049
-Node: File Menu\7f89398
-Node: Edit Menu\7f93220
-Node: Apps Menu\7f95603
-Node: Options Menu\7f96093
-Node: Buffers Menu\7f100111
-Node: Tools Menu\7f100418
-Node: Help Menu\7f100909
-Node: Menu Customization\7f101310
-Node: Entering Emacs\7f105540
-Node: Exiting\7f108437
-Node: Command Switches\7f112910
-Node: Startup Paths\7f122932
-Node: Basic\7f130262
-Node: Inserting Text\7f131666
-Node: Moving Point\7f134662
-Node: Erasing\7f138268
-Node: Basic Files\7f139573
-Node: Basic Help\7f141495
-Node: Blank Lines\7f142090
-Node: Continuation Lines\7f143666
-Node: Position Info\7f145333
-Node: Arguments\7f148749
-Node: Undo\7f152848
-Node: Minibuffer\7f155795
-Node: Minibuffer File\7f158405
-Node: Minibuffer Edit\7f160210
-Node: Completion\7f163151
-Node: Completion Example\7f165082
-Node: Completion Commands\7f166177
-Node: Strict Completion\7f169153
-Node: Completion Options\7f170934
-Node: Minibuffer History\7f172442
-Node: Repetition\7f175626
-Node: M-x\7f178471
-Node: Help\7f183565
-Node: Help Summary\7f184975
-Node: Key Help\7f187761
-Node: Name Help\7f188720
-Node: Apropos\7f191365
-Node: Library Keywords\7f194484
-Node: Help Mode\7f196805
-Node: Misc Help\7f197302
-Node: Mark\7f200450
-Node: Setting Mark\7f202304
-Node: Using Region\7f205426
-Node: Marking Objects\7f206163
-Node: Mark Ring\7f208001
-Node: Mouse Selection\7f209717
-Node: Additional Mouse Operations\7f211724
-Node: Killing\7f215928
-Node: Yanking\7f221564
-Node: Kill Ring\7f222367
-Node: Appending Kills\7f223969
-Node: Earlier Kills\7f226006
-Node: Using X Selections\7f228619
-Node: X Clipboard Selection\7f229869
-Node: X Selection Commands\7f232046
-Node: X Cut Buffers\7f233132
-Node: Active Regions\7f234491
-Node: Accumulating Text\7f239071
-Node: Rectangles\7f242144
-Node: Registers\7f245663
-Node: RegPos\7f247117
-Node: RegText\7f248273
-Node: RegRect\7f249379
-Node: RegConfig\7f250258
-Node: RegNumbers\7f251198
-Node: RegFiles\7f251916
-Node: Bookmarks\7f252574
-Node: Display\7f255946
-Node: Scrolling\7f257441
-Node: Horizontal Scrolling\7f261584
-Node: Selective Display\7f262779
-Node: Display Vars\7f263998
-Node: Search\7f266676
-Node: Incremental Search\7f267869
-Node: Non-Incremental Search\7f276797
-Node: Word Search\7f278239
-Node: Regexp Search\7f279857
-Node: Regexps\7f282227
-Node: Search Case\7f296224
-Node: Replace\7f297005
-Node: Unconditional Replace\7f297953
-Node: Regexp Replace\7f299088
-Node: Replacement and Case\7f300023
-Node: Query Replace\7f301003
-Node: Other Repeating Search\7f304230
-Node: Fixit\7f305485
-Node: Kill Errors\7f306065
-Node: Transpose\7f307398
-Node: Fixing Case\7f309802
-Node: Spelling\7f310448
-Node: Files\7f311909
-Node: File Names\7f313219
-Node: Visiting\7f317556
-Node: Saving\7f324388
-Node: Backup\7f329311
-Node: Backup Names\7f330707
-Node: Backup Deletion\7f332190
-Node: Backup Copying\7f333340
-Node: Interlocking\7f335046
-Node: Reverting\7f339174
-Node: Auto Save\7f341086
-Node: Auto Save Files\7f342053
-Node: Auto Save Control\7f343894
-Node: Recover\7f345732
-Node: Version Control\7f346887
-Node: Concepts of VC\7f348925
-Node: Editing with VC\7f350535
-Node: Variables for Check-in/out\7f355791
-Node: Log Entries\7f357690
-Node: Change Logs and VC\7f358870
-Node: Old Versions\7f362137
-Node: VC Status\7f364140
-Node: Renaming and VC\7f365854
-Node: Snapshots\7f366533
-Node: Making Snapshots\7f367034
-Node: Snapshot Caveats\7f368327
-Node: Version Headers\7f370136
-Node: ListDir\7f372835
-Node: Comparing Files\7f374884
-Node: Dired\7f376417
-Node: Dired Enter\7f377088
-Node: Dired Edit\7f377913
-Node: Dired Deletion\7f379660
-Node: Dired Immed\7f382883
-Node: Misc File Ops\7f384159
-Node: Buffers\7f386647
-Node: Select Buffer\7f388805
-Node: List Buffers\7f390600
-Node: Misc Buffer\7f392358
-Node: Kill Buffer\7f394001
-Node: Several Buffers\7f395131
-Node: Windows\7f398998
-Node: Basic Window\7f399709
-Node: Split Window\7f401428
-Node: Other Window\7f403561
-Node: Pop Up Window\7f405992
-Node: Change Window\7f407497
-Node: Mule\7f410405
-Node: Mule Intro\7f411668
-Node: Language Environments\7f412684
-Node: Input Methods\7f414791
-Node: Select Input Method\7f418511
-Node: Coding Systems\7f420666
-Node: Recognize Coding\7f424852
-Node: Specify Coding\7f428178
-Node: Major Modes\7f433109
-Node: Choosing Modes\7f435328
-Node: Indentation\7f437718
-Node: Indentation Commands\7f439813
-Node: Tab Stops\7f442542
-Node: Just Spaces\7f444391
-Node: Text\7f445206
-Node: Text Mode\7f447189
-Node: Nroff Mode\7f449268
-Node: TeX Mode\7f450911
-Node: TeX Editing\7f453163
-Node: TeX Print\7f456597
-Node: Outline Mode\7f459816
-Node: Outline Format\7f461297
-Node: Outline Motion\7f464097
-Node: Outline Visibility\7f465650
-Node: Words\7f468571
-Node: Sentences\7f471518
-Node: Paragraphs\7f473714
-Node: Pages\7f476002
-Node: Filling\7f478602
-Node: Auto Fill\7f479173
-Node: Fill Commands\7f481320
-Node: Fill Prefix\7f483485
-Node: Case\7f485673
-Node: Programs\7f487701
-Node: Program Modes\7f490251
-Node: Lists\7f492483
-Node: Defuns\7f498323
-Node: Grinding\7f500976
-Node: Basic Indent\7f501604
-Node: Multi-line Indent\7f503625
-Node: Lisp Indent\7f505241
-Node: C Indent\7f508691
-Node: Matching\7f513931
-Node: Comments\7f515453
-Node: Balanced Editing\7f521905
-Node: Lisp Completion\7f522919
-Node: Documentation\7f523934
-Node: Change Log\7f525173
-Node: Tags\7f527751
-Node: Tag Syntax\7f529400
-Node: Create Tags Table\7f533344
-Node: Etags Regexps\7f537404
-Node: Select Tags Table\7f542062
-Node: Find Tag\7f545835
-Node: Tags Search\7f548799
-Node: List Tags\7f552255
-Node: Fortran\7f553284
-Node: Fortran Motion\7f554360
-Node: Fortran Indent\7f555180
-Node: ForIndent Commands\7f555865
-Node: ForIndent Num\7f557010
-Node: ForIndent Conv\7f558284
-Node: ForIndent Vars\7f559060
-Node: Fortran Comments\7f560228
-Node: Fortran Columns\7f563826
-Node: Fortran Abbrev\7f565249
-Node: Asm Mode\7f566158
-Node: Running\7f566710
-Node: Compilation\7f567679
-Node: Lisp Modes\7f572529
-Node: Lisp Libraries\7f573802
-Node: Loading\7f574356
-Node: Compiling Libraries\7f578816
-Node: Mocklisp\7f581707
-Node: Lisp Eval\7f582384
-Node: Lisp Debug\7f586024
-Node: Lisp Interaction\7f591451
-Node: External Lisp\7f592806
-Node: Packages\7f594880
-Node: Package Terminology\7f595735
-Node: Using Packages\7f597093
-Node: Building Packages\7f605971
-Node: Creating Packages\7f608514
-Node: Available Packages\7f613514
-Node: Abbrevs\7f618787
-Node: Defining Abbrevs\7f620986
-Node: Expanding Abbrevs\7f623433
-Node: Editing Abbrevs\7f626135
-Node: Saving Abbrevs\7f628008
-Node: Dynamic Abbrevs\7f629963
-Node: Picture\7f631265
-Node: Basic Picture\7f633698
-Node: Insert in Picture\7f635983
-Node: Tabs in Picture\7f637405
-Node: Rectangles in Picture\7f638926
-Node: Sending Mail\7f640834
-Node: Mail Format\7f642545
-Node: Mail Headers\7f643895
-Node: Mail Mode\7f650303
-Node: Reading Mail\7f653916
-Node: Calendar/Diary\7f655491
-Node: Calendar Motion\7f657165
-Node: Calendar Unit Motion\7f658048
-Node: Move to Beginning or End\7f660371
-Node: Specified Dates\7f661504
-Node: Scroll Calendar\7f662392
-Node: Mark and Region\7f664183
-Node: General Calendar\7f666089
-Node: LaTeX Calendar\7f667697
-Node: Holidays\7f669711
-Node: Sunrise/Sunset\7f672813
-Node: Lunar Phases\7f675852
-Node: Other Calendars\7f677237
-Node: Calendar Systems\7f678724
-Node: To Other Calendar\7f681835
-Node: From Other Calendar\7f683826
-Node: Mayan Calendar\7f686131
-Node: Diary\7f689326
-Node: Diary Commands\7f691075
-Node: Format of Diary File\7f694398
-Node: Date Formats\7f697268
-Node: Adding to Diary\7f699842
-Node: Special Diary Entries\7f701473
-Node: Calendar Customization\7f706812
-Node: Calendar Customizing\7f707674
-Node: Holiday Customizing\7f710909
-Node: Date Display Format\7f717396
-Node: Time Display Format\7f718354
-Node: Daylight Savings\7f719492
-Node: Diary Customizing\7f722680
-Node: Hebrew/Islamic Entries\7f727301
-Node: Fancy Diary Display\7f730641
-Node: Included Diary Files\7f732557
-Node: Sexp Diary Entries\7f733538
-Node: Appt Customizing\7f738628
-Node: Sorting\7f739674
-Node: Shell\7f744480
-Node: Single Shell\7f745773
-Node: Interactive Shell\7f747387
-Node: Shell Mode\7f751152
-Node: Terminal emulator\7f753643
-Node: Term Mode\7f755952
-Node: Paging in Term\7f756866
-Node: Narrowing\7f757664
-Node: Hardcopy\7f759614
-Node: Recursive Edit\7f760586
-Node: Dissociated Press\7f763573
-Node: CONX\7f766136
-Node: Amusements\7f767160
-Node: Emulation\7f767640
-Node: Customization\7f769500
-Node: Minor Modes\7f771316
-Node: Variables\7f772948
-Node: Examining\7f774904
-Node: Easy Customization\7f776365
-Node: Customization Groups\7f777379
-Node: Changing an Option\7f780308
-Node: Face Customization\7f786578
-Node: Specific Customization\7f788342
-Node: Edit Options\7f790949
-Node: Locals\7f792533
-Node: File Variables\7f795712
-Node: Keyboard Macros\7f800262
-Node: Basic Kbd Macro\7f802433
-Node: Save Kbd Macro\7f804365
-Node: Kbd Macro Query\7f806023
-Node: Key Bindings\7f807965
-Node: Keymaps\7f808839
-Node: Rebinding\7f812689
-Node: Interactive Rebinding\7f813388
-Node: Programmatic Rebinding\7f815577
-Node: Key Bindings Using Strings\7f818384
-Node: Disabling\7f820011
-Node: Syntax\7f821790
-Node: Syntax Entry\7f822671
-Node: Syntax Change\7f826755
-Node: Init File\7f828924
-Node: Init Syntax\7f830388
-Node: Init Examples\7f832739
-Node: Terminal Init\7f836929
-Node: Audible Bell\7f838666
-Node: Faces\7f842097
-Node: Frame Components\7f846939
-Node: X Resources\7f847384
-Node: Geometry Resources\7f849043
-Node: Iconic Resources\7f851491
-Node: Resource List\7f851963
-Node: Face Resources\7f858470
-Node: Widgets\7f862147
-Node: Menubar Resources\7f863086
-Node: Quitting\7f864600
-Node: Lossage\7f867578
-Node: Stuck Recursive\7f868222
-Node: Screen Garbled\7f868928
-Node: Text Garbled\7f870062
-Node: Unasked-for Search\7f870701
-Node: Emergency Escape\7f871486
-Node: Total Frustration\7f873265
-Node: Bugs\7f873896
-Node: Glossary\7f883457
-Node: Manifesto\7f915111
-Node: Key Index\7f938588
-Node: Command Index\7f964515
-Node: Variable Index\7f1007101
-Node: Concept Index\7f1023187
+Node: Menubar Basics\7f54708
+Node: Scrollbar Basics\7f56624
+Node: Mode Line Basics\7f57517
+Node: Toolbar Basics\7f58349
+Node: Gutter Basics\7f59016
+Node: Inhibiting\7f61070
+Node: Customizing\7f63441
+Node: XEmacs under X\7f63690
+Node: XEmacs under MS Windows\7f66904
+Node: Keystrokes\7f67319
+Node: Intro to Keystrokes\7f68163
+Node: Representing Keystrokes\7f70266
+Node: Key Sequences\7f71623
+Node: String Key Sequences\7f74964
+Node: Meta Key\7f75347
+Node: Super and Hyper Keys\7f76820
+Node: Character Representation\7f83065
+Node: Commands\7f84085
+Node: Pull-down Menus\7f86934
+Node: File Menu\7f90283
+Node: Edit Menu\7f94105
+Node: Apps Menu\7f96488
+Node: Options Menu\7f96978
+Node: Buffers Menu\7f100996
+Node: Tools Menu\7f101303
+Node: Help Menu\7f101794
+Node: Menu Customization\7f102195
+Node: Entering Emacs\7f106425
+Node: Exiting\7f109322
+Node: Command Switches\7f113795
+Node: Startup Paths\7f123817
+Node: Basic\7f131147
+Node: Inserting Text\7f132551
+Node: Moving Point\7f135547
+Node: Erasing\7f139153
+Node: Basic Files\7f140458
+Node: Basic Help\7f142380
+Node: Blank Lines\7f142975
+Node: Continuation Lines\7f144551
+Node: Position Info\7f146218
+Node: Arguments\7f149634
+Node: Undo\7f153733
+Node: Minibuffer\7f156680
+Node: Minibuffer File\7f159290
+Node: Minibuffer Edit\7f161095
+Node: Completion\7f164036
+Node: Completion Example\7f165967
+Node: Completion Commands\7f167062
+Node: Strict Completion\7f170038
+Node: Completion Options\7f171819
+Node: Minibuffer History\7f173327
+Node: Repetition\7f176511
+Node: M-x\7f179356
+Node: Help\7f184450
+Node: Help Summary\7f185860
+Node: Key Help\7f188646
+Node: Name Help\7f189605
+Node: Apropos\7f192250
+Node: Library Keywords\7f195369
+Node: Help Mode\7f197690
+Node: Misc Help\7f198187
+Node: Mark\7f201335
+Node: Setting Mark\7f203189
+Node: Using Region\7f206311
+Node: Marking Objects\7f207048
+Node: Mark Ring\7f208886
+Node: Mouse Selection\7f210602
+Node: Additional Mouse Operations\7f212609
+Node: Killing\7f216813
+Node: Yanking\7f222449
+Node: Kill Ring\7f223252
+Node: Appending Kills\7f224854
+Node: Earlier Kills\7f226891
+Node: Using X Selections\7f229504
+Node: X Clipboard Selection\7f230754
+Node: X Selection Commands\7f232931
+Node: X Cut Buffers\7f234017
+Node: Active Regions\7f235376
+Node: Accumulating Text\7f239956
+Node: Rectangles\7f243029
+Node: Registers\7f246548
+Node: RegPos\7f248002
+Node: RegText\7f249158
+Node: RegRect\7f250264
+Node: RegConfig\7f251143
+Node: RegNumbers\7f252083
+Node: RegFiles\7f252801
+Node: Bookmarks\7f253459
+Node: Display\7f256831
+Node: Scrolling\7f258326
+Node: Horizontal Scrolling\7f262469
+Node: Selective Display\7f263664
+Node: Display Vars\7f264883
+Node: Search\7f267561
+Node: Incremental Search\7f268754
+Node: Non-Incremental Search\7f277682
+Node: Word Search\7f279124
+Node: Regexp Search\7f280742
+Node: Regexps\7f283112
+Node: Search Case\7f297109
+Node: Replace\7f297890
+Node: Unconditional Replace\7f298838
+Node: Regexp Replace\7f299973
+Node: Replacement and Case\7f300908
+Node: Query Replace\7f301888
+Node: Other Repeating Search\7f305115
+Node: Fixit\7f306370
+Node: Kill Errors\7f306950
+Node: Transpose\7f308283
+Node: Fixing Case\7f310687
+Node: Spelling\7f311333
+Node: Files\7f312794
+Node: File Names\7f314104
+Node: Visiting\7f318441
+Node: Saving\7f325273
+Node: Backup\7f330196
+Node: Backup Names\7f331592
+Node: Backup Deletion\7f333075
+Node: Backup Copying\7f334225
+Node: Interlocking\7f335931
+Node: Reverting\7f340059
+Node: Auto Save\7f341971
+Node: Auto Save Files\7f342938
+Node: Auto Save Control\7f344779
+Node: Recover\7f346617
+Node: Version Control\7f347772
+Node: Concepts of VC\7f349810
+Node: Editing with VC\7f351420
+Node: Variables for Check-in/out\7f356676
+Node: Log Entries\7f358575
+Node: Change Logs and VC\7f359755
+Node: Old Versions\7f363022
+Node: VC Status\7f365025
+Node: Renaming and VC\7f366739
+Node: Snapshots\7f367418
+Node: Making Snapshots\7f367919
+Node: Snapshot Caveats\7f369212
+Node: Version Headers\7f371021
+Node: ListDir\7f373720
+Node: Comparing Files\7f375769
+Node: Dired\7f377302
+Node: Dired Enter\7f377973
+Node: Dired Edit\7f378798
+Node: Dired Deletion\7f380545
+Node: Dired Immed\7f383768
+Node: Misc File Ops\7f385044
+Node: Buffers\7f387532
+Node: Select Buffer\7f389690
+Node: List Buffers\7f391485
+Node: Misc Buffer\7f393243
+Node: Kill Buffer\7f394886
+Node: Several Buffers\7f396016
+Node: Windows\7f399883
+Node: Basic Window\7f400594
+Node: Split Window\7f402313
+Node: Other Window\7f404446
+Node: Pop Up Window\7f406877
+Node: Change Window\7f408382
+Node: Mule\7f411290
+Node: Mule Intro\7f412553
+Node: Language Environments\7f413569
+Node: Input Methods\7f415676
+Node: Select Input Method\7f419396
+Node: Coding Systems\7f421551
+Node: Recognize Coding\7f425737
+Node: Specify Coding\7f429063
+Node: Major Modes\7f433994
+Node: Choosing Modes\7f436213
+Node: Indentation\7f438603
+Node: Indentation Commands\7f440698
+Node: Tab Stops\7f443427
+Node: Just Spaces\7f445276
+Node: Text\7f446091
+Node: Text Mode\7f448074
+Node: Nroff Mode\7f450153
+Node: TeX Mode\7f451796
+Node: TeX Editing\7f454048
+Node: TeX Print\7f457482
+Node: Outline Mode\7f460701
+Node: Outline Format\7f462182
+Node: Outline Motion\7f464982
+Node: Outline Visibility\7f466535
+Node: Words\7f469456
+Node: Sentences\7f472403
+Node: Paragraphs\7f474599
+Node: Pages\7f476887
+Node: Filling\7f479487
+Node: Auto Fill\7f480058
+Node: Fill Commands\7f482205
+Node: Fill Prefix\7f484370
+Node: Case\7f486558
+Node: Programs\7f488586
+Node: Program Modes\7f491136
+Node: Lists\7f493368
+Node: Defuns\7f499208
+Node: Grinding\7f501861
+Node: Basic Indent\7f502489
+Node: Multi-line Indent\7f504510
+Node: Lisp Indent\7f506126
+Node: C Indent\7f509576
+Node: Matching\7f514816
+Node: Comments\7f516338
+Node: Balanced Editing\7f522790
+Node: Lisp Completion\7f523804
+Node: Documentation\7f524819
+Node: Change Log\7f526058
+Node: Tags\7f528636
+Node: Tag Syntax\7f530285
+Node: Create Tags Table\7f534229
+Node: Etags Regexps\7f538289
+Node: Select Tags Table\7f542947
+Node: Find Tag\7f546720
+Node: Tags Search\7f549684
+Node: List Tags\7f553140
+Node: Fortran\7f554169
+Node: Fortran Motion\7f555245
+Node: Fortran Indent\7f556065
+Node: ForIndent Commands\7f556750
+Node: ForIndent Num\7f557895
+Node: ForIndent Conv\7f559169
+Node: ForIndent Vars\7f559945
+Node: Fortran Comments\7f561113
+Node: Fortran Columns\7f564711
+Node: Fortran Abbrev\7f566134
+Node: Asm Mode\7f567043
+Node: Running\7f567595
+Node: Compilation\7f568564
+Node: Lisp Modes\7f573414
+Node: Lisp Libraries\7f574687
+Node: Loading\7f575241
+Node: Compiling Libraries\7f579701
+Node: Mocklisp\7f582592
+Node: Lisp Eval\7f583269
+Node: Lisp Debug\7f586909
+Node: Lisp Interaction\7f592336
+Node: External Lisp\7f593691
+Node: Packages\7f595765
+Node: Package Terminology\7f596620
+Node: Using Packages\7f597978
+Node: Building Packages\7f606856
+Node: Creating Packages\7f609399
+Node: Available Packages\7f614399
+Node: Abbrevs\7f619672
+Node: Defining Abbrevs\7f621871
+Node: Expanding Abbrevs\7f624318
+Node: Editing Abbrevs\7f627020
+Node: Saving Abbrevs\7f628893
+Node: Dynamic Abbrevs\7f630848
+Node: Picture\7f632150
+Node: Basic Picture\7f634583
+Node: Insert in Picture\7f636868
+Node: Tabs in Picture\7f638290
+Node: Rectangles in Picture\7f639811
+Node: Sending Mail\7f641719
+Node: Mail Format\7f643430
+Node: Mail Headers\7f644780
+Node: Mail Mode\7f651188
+Node: Reading Mail\7f654801
+Node: Calendar/Diary\7f656376
+Node: Calendar Motion\7f658050
+Node: Calendar Unit Motion\7f658933
+Node: Move to Beginning or End\7f661256
+Node: Specified Dates\7f662389
+Node: Scroll Calendar\7f663277
+Node: Mark and Region\7f665068
+Node: General Calendar\7f666974
+Node: LaTeX Calendar\7f668582
+Node: Holidays\7f670596
+Node: Sunrise/Sunset\7f673698
+Node: Lunar Phases\7f676737
+Node: Other Calendars\7f678122
+Node: Calendar Systems\7f679609
+Node: To Other Calendar\7f682720
+Node: From Other Calendar\7f684711
+Node: Mayan Calendar\7f687016
+Node: Diary\7f690211
+Node: Diary Commands\7f691960
+Node: Format of Diary File\7f695283
+Node: Date Formats\7f698153
+Node: Adding to Diary\7f700727
+Node: Special Diary Entries\7f702358
+Node: Calendar Customization\7f707697
+Node: Calendar Customizing\7f708559
+Node: Holiday Customizing\7f711794
+Node: Date Display Format\7f718281
+Node: Time Display Format\7f719239
+Node: Daylight Savings\7f720377
+Node: Diary Customizing\7f723565
+Node: Hebrew/Islamic Entries\7f728186
+Node: Fancy Diary Display\7f731526
+Node: Included Diary Files\7f733442
+Node: Sexp Diary Entries\7f734423
+Node: Appt Customizing\7f739513
+Node: Sorting\7f740559
+Node: Shell\7f745365
+Node: Single Shell\7f746658
+Node: Interactive Shell\7f748272
+Node: Shell Mode\7f752037
+Node: Terminal emulator\7f754528
+Node: Term Mode\7f756837
+Node: Paging in Term\7f757751
+Node: Narrowing\7f758549
+Node: Hardcopy\7f760499
+Node: Recursive Edit\7f761471
+Node: Dissociated Press\7f764458
+Node: CONX\7f767021
+Node: Amusements\7f768045
+Node: Emulation\7f768525
+Node: Customization\7f770385
+Node: Minor Modes\7f772201
+Node: Variables\7f773833
+Node: Examining\7f775789
+Node: Easy Customization\7f777250
+Node: Customization Groups\7f778264
+Node: Changing an Option\7f781193
+Node: Face Customization\7f787463
+Node: Specific Customization\7f789227
+Node: Edit Options\7f791834
+Node: Locals\7f793418
+Node: File Variables\7f796597
+Node: Keyboard Macros\7f801147
+Node: Basic Kbd Macro\7f803318
+Node: Save Kbd Macro\7f805250
+Node: Kbd Macro Query\7f806908
+Node: Key Bindings\7f808850
+Node: Keymaps\7f809724
+Node: Rebinding\7f813574
+Node: Interactive Rebinding\7f814273
+Node: Programmatic Rebinding\7f816462
+Node: Key Bindings Using Strings\7f819269
+Node: Disabling\7f820896
+Node: Syntax\7f822675
+Node: Syntax Entry\7f823556
+Node: Syntax Change\7f827640
+Node: Init File\7f829809
+Node: Init Syntax\7f831273
+Node: Init Examples\7f833624
+Node: Terminal Init\7f837814
+Node: Audible Bell\7f839551
+Node: Faces\7f842982
+Node: Frame Components\7f847824
+Node: X Resources\7f848269
+Node: Geometry Resources\7f849928
+Node: Iconic Resources\7f852376
+Node: Resource List\7f852848
+Node: Face Resources\7f859355
+Node: Widgets\7f863032
+Node: Menubar Resources\7f863971
+Node: Quitting\7f865485
+Node: Lossage\7f868463
+Node: Stuck Recursive\7f869107
+Node: Screen Garbled\7f869813
+Node: Text Garbled\7f870947
+Node: Unasked-for Search\7f871586
+Node: Emergency Escape\7f872371
+Node: Total Frustration\7f874150
+Node: Bugs\7f874781
+Node: Glossary\7f884342
+Node: Manifesto\7f915996
+Node: Key Index\7f939473
+Node: Command Index\7f965400
+Node: Variable Index\7f1007986
+Node: Concept Index\7f1024072
 \1f
 End Tag Table
index 786e236..f2754c1 100644 (file)
@@ -143,6 +143,7 @@ function, and on a tab in the gutter to switch buffers.
 
 * Menubar Basics::      How XEmacs uses the menubar.
 * Scrollbar Basics::    How XEmacs uses scrollbars.
+* Mode Line Basics::    How XEmacs uses modelines.
 * Toolbar Basics::      How XEmacs uses toolbars.
 * Gutter Basics::       How XEmacs uses gutters.
 * Inhibiting::          What if you don't like GUI?
@@ -185,7 +186,7 @@ descriptions of these menus, *Note Pull-down Menus::.  (In 21.2
 XEmacsen, the `Mule' menu will be moved under `Options'.)
 
 \1f
-File: xemacs.info,  Node: Scrollbar Basics,  Next: Toolbar Basics,  Prev: Menubar Basics,  Up: GUI Components
+File: xemacs.info,  Node: Scrollbar Basics,  Next: Mode Line Basics,  Prev: Menubar Basics,  Up: GUI Components
 
 XEmacs Scrollbars
 =================
@@ -206,7 +207,27 @@ present in all windows (except the minibuffer), and there is no
 horizontal scrollbar.
 
 \1f
-File: xemacs.info,  Node: Toolbar Basics,  Next: Gutter Basics,  Prev: Scrollbar Basics,  Up: GUI Components
+File: xemacs.info,  Node: Mode Line Basics,  Next: Toolbar Basics,  Prev: Scrollbar Basics,  Up: GUI Components
+
+XEmacs Mode Lines
+=================
+
+   When used in a windowing system, the XEmacs modelines can be dragged
+vertically. The effect is to resize the windows above and below the
+modeline (this includes the minibuffer window).
+
+   Additionally, a modeline can be dragged horizontally, in which case
+it scrolls its own text. This behavior is not enabled by default
+because it could be considered as disturbing when dragging vertically.
+When this behavior is enabled, the modeline's text can be dragged
+either in the same direction as the mouse, or in the opposite sense,
+making the modeline act as a scrollbar for its own text.
+
+   You can select the behavior you want from the `Display' submenu of
+the `Options' menu.
+
+\1f
+File: xemacs.info,  Node: Toolbar Basics,  Next: Gutter Basics,  Prev: Mode Line Basics,  Up: GUI Components
 
 XEmacs Toolbars
 ===============
index 151a0a1..ca78666 100644 (file)
@@ -1,3 +1,7 @@
+2001-01-20  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.42 "Poseidon" is released.
+
 2001-01-17  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.41 "Polyhymnia" is released.
index 26912e7..a50f7c8 100644 (file)
@@ -1,3 +1,47 @@
+2001-01-20  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.42 "Poseidon" is released.
+
+2001-01-12  Andy Piper  <andy@xemacs.org>
+
+       * package-get.el (package-get-custom): call
+       package-net-update-installed-db.
+
+       * package-ui.el (pui-install-selected-packages): call
+       package-net-update-installed-db.
+
+       * package-net.el (package-net-update-installed-db): use
+       packages-package-list so that we reflect reality.
+
+       * packages.el (packages-package-list): Make docstring reflect
+       reality.
+
+       * package-net.el (package-net-convert-index-to-ini): exclude mule entries.
+
+       * postinstall.cc (do_postinstall): don't pick up shells if cygwin
+       isn't installed.
+
+2001-01-17  Andy Piper  <andy@xemacs.org>
+
+       * wid-edit.el (widget-activation-glyph-mapper): activate or
+       deactivate native widgets.
+       (widget-glyph-insert-glyph): record instantiator.
+       (widget-push-button-value-create): use it.
+
+       * gui.el (gui-button-action): new function. Make button's domain
+       buffer current when calling.
+       (make-gui-button): update to use gui-button-action.
+
+2001-01-16  Didier Verna  <didier@xemacs.org>
+
+       * menubar-items.el (default-menubar): add an entry for modeline
+       horizontal scrolling in Options -> Display.
+
+2001-01-17  Steve Youngs  <youngs@xemacs.org>
+
+       * package-get.el (package-get-require-signed-base): Set to nil
+       by default.
+
 2001-01-17  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.41 "Polyhymnia" is released.
index 9eb0c79..4d2e3d9 100644 (file)
@@ -94,14 +94,25 @@ Normally it also has no modelines, menubars, or toolbars."
       (set-face-foreground 'gui-button-face '(((x color) . "black")
                                              ((mswindows color) . "black")))))
 
+
+(defun gui-button-action (instance action user-data)
+  (let ((domain (image-instance-domain instance)))
+    (with-current-buffer (if (windowp domain)
+                            (window-buffer domain) nil)
+      (funcall action user-data))))
+
 (defun make-gui-button (string &optional action user-data)
   "Make a GUI button whose label is STRING and whose action is ACTION.
 If the button is inserted in a buffer and then clicked on, and ACTION
-is non-nil, ACTION will be called with one argument, USER-DATA."
+is non-nil, ACTION will be called with one argument, USER-DATA.
+When ACTION is called, the buffer containing the button is made current."
   (vector 'button
          :descriptor string
          :face 'gui-button-face
-         :callback `(funcall (quote ,action) (quote ,user-data))))
+         :callback-ex `(lambda (image-instance event)
+                         (gui-button-action image-instance
+                                            (quote ,action)
+                                            (quote ,user-data)))))
 
 (defun insert-gui-button (button &optional pos buffer)
   "Insert GUI button BUTTON at POS in BUFFER."
index 31e54a6..088c499 100644 (file)
@@ -401,13 +401,13 @@ which will not be used as accelerators."
        ;; hack-o-matic, we can't force a load of package-base here
        ;; since it triggers dialog box interactions which we can't
        ;; deal with while using a menu
-       ("Using %_Custom" 
+       ("Using %_Custom"
        :filter (lambda (&rest junk)
                  (if package-get-base
                      (submenu-generate-accelerator-spec
                       (cdr (custom-menu-create 'packages)))
                    '("Please load Package Index"))))
-       
+
        ["%_Help" (Info-goto-node "(xemacs)Packages")])
       ("%_Internet"
        ["Read Mail %_1 (VM)..." vm
@@ -932,7 +932,7 @@ which will not be used as accelerators."
                        (eq browse-url-browser-function 'browse-url-grail))
         :active (and (boundp 'browse-url-browser-function)
                      (fboundp 'browse-url-grail))]
-       ["%_Kfm" 
+       ["%_Kfm"
         (customize-set-variable 'browse-url-browser-function
                                 'browse-url-kfm)
         :style radio
@@ -940,7 +940,7 @@ which will not be used as accelerators."
                        (eq browse-url-browser-function 'browse-url-kfm))
         :active (and (boundp 'browse-url-browser-function)
                      (fboundp 'browse-url-kfm))]
-       ))      
+       ))
       ("%_Troubleshooting"
        ["%_Debug on Error"
        (customize-set-variable 'debug-on-error (not debug-on-error))
@@ -968,17 +968,32 @@ which will not be used as accelerators."
                                        (not scrollbars-visible-p))
                :style toggle
                :selected scrollbars-visible-p]))
-       ["%_3D Modeline"
-       (customize-set-variable 'modeline-3d-p
-                               (not modeline-3d-p))
-       :style toggle
-       :selected modeline-3d-p]
        ["%_Wrap Long Lines"
        (progn;; becomes buffer-local
          (setq truncate-lines (not truncate-lines))
          (customize-set-variable 'truncate-lines truncate-lines))
        :style toggle
        :selected (not truncate-lines)]
+       "----"
+       ["%_3D Modeline"
+       (customize-set-variable 'modeline-3d-p
+                               (not modeline-3d-p))
+       :style toggle
+       :selected modeline-3d-p]
+       ("Modeline %_Horizontal Scrolling"
+       ["%_None"
+        (customize-set-variable 'modeline-scrolling-method nil)
+        :style radio
+        :selected (not modeline-scrolling-method)]
+       ["As %_Text"
+        (customize-set-variable 'modeline-scrolling-method t)
+        :style radio
+        :selected (eq modeline-scrolling-method t)]
+       ["As %_Scrollbar"
+        (customize-set-variable 'modeline-scrolling-method 'scrollbar)
+        :style radio
+        :selected (eq modeline-scrolling-method 'scrollbar)]
+       )
        ,@(if (featurep 'toolbar)
             '("---"
               ["%_Toolbars Visible"
@@ -1105,7 +1120,7 @@ which will not be used as accelerators."
                                  (not column-number-mode))
          (redraw-modeline))
        :style toggle :selected column-number-mode]
-       
+
        ("\"Other %_Window\" Location"
        ["%_Always in Same Frame"
         (customize-set-variable
@@ -1156,7 +1171,7 @@ which will not be used as accelerators."
         :selected (and (boundp 'gnuserv-frame) (eq gnuserv-frame t))
         :active (boundp 'gnuserv-frame)]
        )
-       )      
+       )
       ("%_Menubars"
        ["%_Frame-Local Font Menu"
        (customize-set-variable 'font-menu-this-frame-only-p
index 88be9d3..954d099 100644 (file)
@@ -269,7 +269,7 @@ Otherwise respect the `force-current' argument of `package-get-require-base'."
   :type 'boolean
   :group 'package-get)
 
-(defcustom package-get-require-signed-base-updates t
+(defcustom package-get-require-signed-base-updates nil
   "*If set to a non-nil value, require explicit user confirmation for updates
 to the package-get database which cannot have their signature verified via PGP.
 When nil, updates which are not PGP signed are allowed without confirmation."
@@ -1048,7 +1048,8 @@ lead to Emacs accessing remote sites."
            (if (eval (intern (concat (symbol-name (car pkg)) "-package")))
                (package-get (car pkg) nil))
            t)
-         package-get-base))
+         package-get-base)
+  (package-net-update-installed-db))
 
 (defun package-get-ever-installed-p (pkg &optional notused)
   (string-match "-package$" (symbol-name pkg))
index 63199c5..015c990 100644 (file)
@@ -185,28 +185,31 @@ DESTDIR defaults to the value of `data-directory'."
   "Write out the installed package index in a net install suitable format.
 If DESTDIR is non-nil then use that as the destination directory. 
 DESTDIR defaults to the value of `package-net-setup-directory'."
-  ;; Need the local version
-  (package-get-require-base)
 
-  (setq destdir (file-name-as-directory 
-                (or destdir (package-net-setup-directory))))
-  (let ((buf (get-buffer-create "*installed.db*")))
-    (unwind-protect
-        (save-excursion
-          (set-buffer buf)
-          (erase-buffer buf)
-          (goto-char (point-min))
-          (let ((entries package-get-base) entry plist)
-           (while entries
-             (setq entry (car entries))
-             (setq plist (car (cdr entry)))
-             (insert (format "%s %s %s\n" (symbol-name (car entry))
-                             (plist-get plist 'filename)
-                             (plist-get plist 'size)))
-             (setq entries (cdr entries))))
-         (make-directory-path destdir)
-         (write-region (point-min) (point-max) (concat destdir "installed.db")))
-      (kill-buffer buf))))
+  (when (or (eq system-type 'cygwin32)
+           (eq system-type 'window-nt))
+    (setq destdir (file-name-as-directory 
+                  (or destdir (package-net-setup-directory))))
+    (let ((buf (get-buffer-create "*installed.db*")))
+      (unwind-protect
+         (save-excursion
+           (set-buffer buf)
+           (erase-buffer buf)
+           (goto-char (point-min))
+           ;; we use packages-package-list here as we actually want to
+           ;; update relative to the installed reality
+           (let ((entries packages-package-list) entry version)
+             (while entries
+               (setq entry (car entries))
+               (setq version (plist-get (cdr entry) :version))
+               ;; Unfortunately we can't read the size from this
+               (insert (format "%s %s-%3.2f-pkg.tar.gz 0\n" (symbol-name (car entry))
+                               (symbol-name (car entry))
+                               version))
+               (setq entries (cdr entries))))
+           (make-directory-path destdir)
+           (write-region (point-min) (point-max) (concat destdir "installed.db")))
+       (kill-buffer buf)))))
 
 (defun package-net-convert-download-sites-to-mirrors (&optional destdir)
   "Write out the download site list in a net install suitable format.
index 806bcf0..1c5bc13 100644 (file)
@@ -424,6 +424,8 @@ and whether or not it is up-to-date."
       (if pui-deleted-packages
          (pui-list-packages)
        (error "No packages have been selected!")))
+    ;; sync with windows type systems
+    (package-net-update-installed-db)
     ))
 
 (defun pui-add-required-packages ()
index 810b1f7..07832ce 100644 (file)
@@ -55,7 +55,7 @@
 ;;; Package versioning
 
 (defvar packages-package-list nil
-  "Database of loaded packages and version numbers")
+  "Database of installed packages and version numbers")
 
 (defvar packages-hierarchy-depth 1
   "Depth of package hierarchies.")
index dfcdbe4..d9e203a 100644 (file)
@@ -480,14 +480,22 @@ Suitable for use with `map-extents'."
       (let* ((glyph-widget (extent-property extent 'glyph-widget))
             (up-glyph (widget-get glyph-widget :glyph-up))
             (inactive-glyph (widget-get glyph-widget :glyph-inactive))
+            (instantiator (widget-get glyph-widget :glyph-instantiator))
             (new-glyph (if activate-p up-glyph inactive-glyph)))
+       (cond
+        ;; Assume that an instantiator means a native widget.
+        (instantiator
+         (setq instantiator
+               (set-instantiator-property instantiator :active activate-p))
+         (widget-put glyph-widget :glyph-instantiator instantiator)
+         (set-glyph-image up-glyph instantiator))
         ;; Check that the new glyph exists, and differs from the
         ;; default one.
-       (and up-glyph inactive-glyph (not (eq up-glyph inactive-glyph))
-            ;; Check if the glyph is already installed.
-            (not (eq (extent-end-glyph extent) new-glyph))
-            ;; Change it.
-            (set-extent-end-glyph extent new-glyph)))))
+        ((and up-glyph inactive-glyph (not (eq up-glyph inactive-glyph))
+              ;; Check if the glyph is already installed.
+              (not (eq (extent-end-glyph extent) new-glyph)))
+         ;; Change it.
+         (set-extent-end-glyph extent new-glyph))))))
   nil)
 
 (defun widget-specify-inactive (widget from to)
@@ -785,10 +793,12 @@ only because of compatibility."
       (insert tag))
     glyph))
 
-(defun widget-glyph-insert-glyph (widget glyph &optional down inactive)
+(defun widget-glyph-insert-glyph (widget glyph &optional down inactive
+                                        instantiator)
   "In WIDGET, insert GLYPH.
 If optional arguments DOWN and INACTIVE are given, they should be
-glyphs used when the widget is pushed and inactive, respectively."
+glyphs used when the widget is pushed and inactive, respectively.
+INSTANTIATOR is the vector used to create the glyph."
   (insert "*")
   (let ((extent (make-extent (point) (1- (point))))
        (help-echo (and widget (widget-get widget :help-echo)))
@@ -810,6 +820,7 @@ glyphs used when the widget is pushed and inactive, respectively."
   (when widget
     (widget-put widget :glyph-up glyph)
     (when down (widget-put widget :glyph-down down))
+    (when instantiator (widget-put widget :glyph-instantiator instantiator))
     (when inactive (widget-put widget :glyph-inactive inactive))))
 
 \f
@@ -1924,7 +1935,7 @@ If END is omitted, it defaults to the length of LIST."
         (tag-glyph (widget-get widget :tag-glyph))
         (text (concat widget-push-button-prefix
                       tag widget-push-button-suffix))
-        gui)
+        gui inst)
     (cond (tag-glyph
           (widget-glyph-insert widget text tag-glyph))
          ;; We must check for console-on-window-system-p here,
@@ -1933,9 +1944,9 @@ If END is omitted, it defaults to the length of LIST."
          ((and widget-push-button-gui
                (console-on-window-system-p))
           (let* ((gui-button-shadow-thickness 1))
-            (setq gui (make-glyph 
-                       (make-gui-button tag 'widget-gui-action widget))))
-          (widget-glyph-insert-glyph widget gui))
+            (setq inst (make-gui-button tag 'widget-gui-action widget))
+            (setq gui (make-glyph inst)))
+          (widget-glyph-insert-glyph widget gui nil nil inst))
          (t
           (insert text)))))
 
index 39bf349..0d982b7 100644 (file)
@@ -1,3 +1,7 @@
+2001-01-20  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.42 "Poseidon" is released.
+
 2001-01-17  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.41 "Polyhymnia" is released.
index 18db821..da16c29 100644 (file)
@@ -1,3 +1,22 @@
+2001-01-20  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.42 "Poseidon" is released.
+
+2001-01-18  Martin Buchholz  <martin@xemacs.org>
+
+       * xemacs-faq.texi (Q1.0.11): Change XEmacs for MacOS URL.
+
+2001-01-17  Andy Piper  <andy@xemacs.org>
+
+       * internals.texi: some glyph documentation.
+
+2001-01-16  Didier Verna  <didier@xemacs.org>
+
+       * frame.texi (Mode Line Basics): new node ...
+       * frame.texi (GUI Components): ... under this one ...
+       * frame.texi (Scrollbar Basics): ... after this one ...
+       * frame.texi (Toolbar Basics): ... before this one.
+
 2001-01-17  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.41 "Polyhymnia" is released.
 
 2000-07-09  Martin Buchholz  <martin@xemacs.org>
 
-       * lispref/postgresql.texi: 
+       * lispref/postgresql.texi:
        - Don't mention ".so" extension.
        - Make installation instructions more generic.
        - Mention M-x describe-installation.
index 8cc49ad..db888d1 100644 (file)
@@ -8734,8 +8734,8 @@ screen images can be instantiated from a single glyph.
 Glyphs are lazily instantiated by calling one of the glyph
 functions. This usually occurs within redisplay when
 @code{Fglyph_height} is called. Instantiation causes an image-instance
-to be created and cached. This cache is on a device basis for all glyphs
-except glyph-widgets, and on a window basis for glyph widgets.  The
+to be created and cached. This cache is on a per-device basis for all glyphs
+except widget-glyphs, and on a per-window basis for widgets-glyphs.  The
 caching is done by @code{image_instantiate} and is necessary because it
 is generally possible to display an image-instance in multiple
 domains. For instance if we create a Pixmap, we can actually display
@@ -8752,6 +8752,74 @@ cached on an XEmacs window basis.
 Any action on a glyph first consults the cache before actually
 instantiating a widget.
 
+@section Glyph Instantiation
+
+Glyph instantiation is a hairy topic and requires some explanation. The
+guts of glyph instantiation is contained within
+@code{image_instantiate}. A glyph contains an image which is a
+specifier. When a glyph function - for instance @code{Fglyph_height} -
+asks for a property of the glyph that can only be determined from its
+instantiated state, then the glyph image is instantiated and an image
+instance created. The instantiation process is governed by the specifier
+code and goes through a series of steps:
+
+@itemize @bullet
+@item
+Validation. Instantiation of image instances happens dynamically - often
+within the guts of redisplay. Thus it is often not feasible to catch
+instantiator errors at instantiation time. Instead the instantiator is
+validated at the time it is added to the image specifier. This function
+is defined by @code{image_validate} and at a simple level validates
+keyword value pairs.
+@item
+Duplication. The specifier code by default takes a copy of the
+instantiator. This is reasonable for most specifiers but in the case of
+widget-glyphs can be problematic, since some of the properties in the
+instantiator - for instance callbacks - could cause infinite recursion
+in the copying process. Thus the image code defines a function -
+@code{image_copy_instantiator} - which will selectively copy values.
+This is controlled by the way that a keyword is defined either using
+@code{IIFORMAT_VALID_KEYWORD} or
+@code{IIFORMAT_VALID_NONCOPY_KEYWORD}. Note that the image caching and
+redisplay code relies on instantiator copying to ensure that current and
+new instantiators are actually different rather than referring to the
+same thing.
+@item
+Normalization. Once the instantiator has been copied it must be
+converted into a form that is viable at instantiation time. This can
+involve no changes at all, but typically involves things like converting
+file names to the actual data. This function is defined by
+@code{image_going_to_add} and @code{normalize_image_instantiator}.
+@item
+Instantiation. When an image instance is actually required for display
+it is instantiated using @code{image_instantiate}. This involves calling
+instantiate methods that are specific to the type of image being
+instantiated.
+@end itemize
+
+The final instantiation phase also involves a number of steps. In order
+to understand these we need to describe a number of concepts.
+
+An image is instantiated in a @dfn{domain}, where a domain can be any
+one of a device, frame, window or image-instance. The domain gives the
+image-instance context and identity and properties that affect the
+appearance of the image-instance may be different for the same glyph
+instantiated in different domains. An example is the face used to
+display the image-instance.
+
+Although an image is instantiated in a particular domain the
+instantiation domain is not necessarily the domain in which the
+image-instance is cached. For example a pixmap can be instantiated in a
+window be actually be cached on a per-device basis. The domain in which
+the image-instance is actually cached is called the
+@dfn{governing-domain}. A governing-domain is currently either a device
+or a window. Widget-glyphs and text-glyphs have a window as a
+governing-domain, all other image-instances have a device as the
+governing-domain. The governing domain for an image-instance is
+determined using the governing_domain image-instance method.
+
+@section Widget-Glyphs
+
 @section Widget-Glyphs in the MS-Windows Environment
 
 To Do
@@ -8763,6 +8831,24 @@ Library}) for manipulating the native toolkit objects. This is primarily
 so that different toolkits can be supported for widget-glyphs, just as
 they are supported for features such as menubars etc.
 
+Lwlib is extremely poorly documented and quite hairy so here is my
+understanding of what goes on.
+
+Lwlib maintains a set of widget_instances which mirror the hierarchical
+state of Xt widgets. I think this is so that widgets can be updated and
+manipulated generically by the lwlib library. For instance
+update_one_widget_instance can cope with multiple types of widget and
+multiple types of toolkit. Each element in the widget hierarchy is updated
+from its corresponding widget_instance by walking the widget_instance
+tree recursively.
+
+This has desirable properties such as lw_modify_all_widgets which is
+called from @file{glyphs-x.c} and updates all the properties of a widget
+without having to know what the widget is or what toolkit it is from.
+Unfortunately this also has hairy properties such as making the lwlib
+code quite complex. And of course lwlib has to know at some level what
+the widget is and how to set its properties.
+
 @node Specifiers, Menus, Glyphs, Top
 @chapter Specifiers
 
index 4f4bdab..690aa76 100644 (file)
@@ -7,7 +7,7 @@
 @finalout
 @titlepage
 @title XEmacs FAQ
-@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2000/11/14 23:29:27 $
+@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 2001/01/18 13:35:02 $
 @sp 1
 @author Tony Rossini <rossini@@biostat.washington.edu>
 @author Ben Wing <ben@@xemacs.org>
@@ -698,7 +698,7 @@ Yes, @xref{MS Windows}.
 
 Yes, there is a port of XEmacs 19.14, tested on MacOS 7.6.1 and MacOS
 8.5.1 by @email{pjarvis@@ispchannel.com, Pitts Jarvis}.  It's available
-at @uref{http://my.ispchannel.com/~pjarvis/xemacs.html}.
+at @uref{http://homepage.mac.com/pjarvis/xemacs.html}.
 
 @node Q1.0.12, Q1.0.13, Q1.0.11, Introduction
 @unnumberedsubsec Q1.0.12: Is there a port of XEmacs to NextStep?
index 5919818..35e4200 100644 (file)
@@ -21,16 +21,16 @@ you can split the frame into two or more subwindows.  If you are
 running XEmacs under the X window system, that means you can have several
 @dfn{XEmacs windows} inside the X window that contains the XEmacs frame.
 You can even have multiple frames in different X windows, each with
-their own set of subwindows. 
+their own set of subwindows.
 @refill
 @end table
 
-Each XEmacs frame displays a variety of information: 
+Each XEmacs frame displays a variety of information:
 @itemize @bullet
 @item
 The biggest area usually displays the text you are editing.  It may
 consist of one window or of two or more windows if you need to look at two
-buffers a the same time. 
+buffers a the same time.
 @item
 Below each text window's last line is a @dfn{mode line} (@pxref{Mode
 Line}), which describes what is going on in that window.  The mode line
@@ -78,12 +78,12 @@ visible in all XEmacs windows containing that buffer.
 
 
 @menu
-* Point::              The place in the text where editing commands operate.  
-* Echo Area::           Short messages appear at the bottom of the frame.  
+* Point::              The place in the text where editing commands operate.
+* Echo Area::           Short messages appear at the bottom of the frame.
 * Mode Line::          Interpreting the mode line.
 * GUI Components::      Menubar, toolbars, gutters.
-* XEmacs under X::      Some information on using XEmacs under the X 
-                        Window System. 
+* XEmacs under X::      Some information on using XEmacs under the X
+                        Window System.
 * XEmacs under MS Windows:: Some information on using XEmacs under
                         Microsoft Windows.
 @end menu
@@ -203,7 +203,7 @@ looking.
 
   @var{ch} contains two stars (@samp{**}) if the text in the buffer has been
 edited (the buffer is ``modified''), or two dashes (@samp{--}) if the
-buffer has not been edited.  Exception: for a read-only buffer, it is 
+buffer has not been edited.  Exception: for a read-only buffer, it is
 @samp{%%}.
 
   @var{buf} is the name of the window's chosen @dfn{buffer}.  The chosen
@@ -214,7 +214,7 @@ currently selected buffer.  @xref{Buffers}.
 
   @var{pos} tells you whether there is additional text above the top of
 the screen or below the bottom.  If your file is small and it is
-completely visible on the screen, @var{pos} is @samp{All}.  Otherwise, 
+completely visible on the screen, @var{pos} is @samp{All}.  Otherwise,
 @var{pos} is @samp{Top} if you are looking at the beginning of the file,
 @samp{Bot} if you are looking at the end of the file, or
 @samp{@var{nn}%}, where @var{nn} is the percentage of the file above the
@@ -274,7 +274,7 @@ controls whether the mode line is displayed in inverse video (assuming
 the terminal supports it); @code{nil} means no inverse video.  The
 default is @code{t}.  For X frames, simply set the foreground and
 background colors appropriately.
-  
+
 @node GUI Components, XEmacs under X, Mode Line, Frame
 @comment  node-name,  next,  previous,  up
 @section GUI Components
@@ -294,6 +294,7 @@ function, and on a tab in the gutter to switch buffers.
 @menu
 * Menubar Basics::      How XEmacs uses the menubar.
 * Scrollbar Basics::    How XEmacs uses scrollbars.
+* Mode Line Basics::    How XEmacs uses modelines.
 * Toolbar Basics::      How XEmacs uses toolbars.
 * Gutter Basics::       How XEmacs uses gutters.
 * Inhibiting::          What if you don't like GUI?
@@ -336,7 +337,7 @@ Other menus which are typically available are the @samp{Options},
 detailed descriptions of these menus, @ref{Pull-down Menus}.  (In 21.2
 XEmacsen, the @samp{Mule} menu will be moved under @samp{Options}.)
 
-@node Scrollbar Basics, Toolbar Basics, Menubar Basics, GUI Components
+@node Scrollbar Basics, Mode Line Basics, Menubar Basics, GUI Components
 @comment  node-name,  next,  previous,  up
 @section XEmacs Scrollbars
 
@@ -355,7 +356,25 @@ may be customized by the user.  By default a vertical scrollbar is
 present in all windows (except the minibuffer), and there is no
 horizontal scrollbar.
 
-@node Toolbar Basics, Gutter Basics, Scrollbar Basics, GUI Components
+@node Mode Line Basics, Toolbar Basics, Scrollbar Basics, GUI Components
+@comment  node-name,  next,  previous,  up
+@section XEmacs Mode Lines
+
+When used in a windowing system, the XEmacs modelines can be dragged
+vertically. The effect is to resize the windows above and below the
+modeline (this includes the minibuffer window).
+
+Additionally, a modeline can be dragged horizontally, in which case it
+scrolls its own text. This behavior is not enabled by default because it
+could be considered as disturbing when dragging vertically. When this
+behavior is enabled, the modeline's text can be dragged either in the
+same direction as the mouse, or in the opposite sense, making the
+modeline act as a scrollbar for its own text.
+
+You can select the behavior you want from the @samp{Display} submenu of
+the @samp{Options} menu.
+
+@node Toolbar Basics, Gutter Basics, Mode Line Basics, GUI Components
 @comment  node-name,  next,  previous,  up
 @section XEmacs Toolbars
 
@@ -491,7 +510,7 @@ in first.  This is normally bound to @kbd{C-x 5 b}.
 You can specify a different default frame size other than the one provided.
 Use the variable @code{default-frame-alist}, which is an alist of default
 values for frame creation other than the first one.  These may be set in
-your init file, like this:  
+your init file, like this:
 
 @example
   (setq default-frame-alist '((width . 80) (height . 55)))
@@ -509,7 +528,7 @@ When you create a new frame, the variable @code{create-frame-hook}
 is called with one argument, the frame just created.
 
 If you want to close one or more of the X windows you created using
-@b{New Frame}, use the @b{Delete Frame} menu item from the @b{File} menu.  
+@b{New Frame}, use the @b{Delete Frame} menu item from the @b{File} menu.
 
 @vindex frame-title-format
 @vindex frame-icon-title-format
@@ -549,4 +568,3 @@ with MS Windows.
 
 Where possible, native MS Windows GUI components and capabilities are
 used in XEmacs.
-
index 1d8a0b0..d9bd985 100644 (file)
@@ -1,3 +1,12 @@
+2001-01-20  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.42 "Poseidon" is released.
+
+2001-01-17  Andy Piper  <andy@xemacs.org>
+
+       * ini.h: move extern "C" to aid win32 compilation. From Fabrice
+       Popineau.
+
 2001-01-17  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.41 "Polyhymnia" is released.
 
        * all: port from cygwin setup.
 
-%%% $Id: ChangeLog,v 1.1.2.9 2001/01/12 16:11:12 andyp Exp $
-$Revision: 1.1.2.9 $
+%%% $Id: ChangeLog,v 1.1.2.11 2001/01/17 21:54:32 andyp Exp $
+$Revision: 1.1.2.11 $
index 6e5eab2..2a2cf88 100644 (file)
@@ -61,15 +61,15 @@ typedef struct {
   } info[NTRUST+1];    /* +1 for TRUST_UNKNOWN */
 } Package;
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 extern Package *package;
 extern Package *xemacs_package;
 
 extern int npackages;
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 Package *new_package (char *name);
 void   ini_init (char *string);
 
index a42d785..b4ee642 100644 (file)
@@ -1,3 +1,7 @@
+2001-01-20  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.42 "Poseidon" is released.
+
 2001-01-17  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.41 "Polyhymnia" is released.
index 13a52eb..4e749e2 100644 (file)
@@ -204,14 +204,14 @@ function update-elc {
   run -nd -batch -l ../lisp/update-elc.el
 }
 
-document dump-temacs << 'end'
-Usage: dump-temacs
+document dmp << 'end'
+Usage: dmp
 Run the dumping part of the build procedure.
 Use when debugging temacs, not xemacs!
 Use this when temacs builds successfully, but xemacs does not.
 end
 
-function dump-temacs {
+function dmp {
   environment-to-run-temacs
   run -nd -batch -l ../lisp/loadup.el dump
 }
index 4cf1c3e..e3804b6 100644 (file)
@@ -166,13 +166,13 @@ Use when debugging temacs, not xemacs!
 Use this when temacs builds successfully, but xemacs does not.
 end
 
-define dump-temacs
+define dmp
   environment-to-run-temacs
   run -nd -batch -l ../lisp/loadup.el dump
 end
 
-document dump-temacs
-Usage: dump-temacs
+document dmp
+Usage: dmp
 Run the dumping part of the build procedure.
 Use when debugging temacs, not xemacs!
 Use this when temacs builds successfully, but xemacs does not.
index e05dae0..0df0a61 100644 (file)
@@ -1,3 +1,86 @@
+2001-01-20  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.42 "Poseidon" is released.
+
+2001-01-20  Martin Buchholz  <martin@xemacs.org>
+
+       * console-x.h: typo fix du jour.  Remove #if 0'ed code.
+
+2001-01-19  Martin Buchholz  <martin@xemacs.org>
+
+       De-kludgify FIXED_TYPE free list frobbing.
+       Fix crashes on 64-bit platforms introduced by my patch of 2001-01-13.
+       * alloc.c (DECLARE_FIXED_TYPE_ALLOC): Use Lisp_Free.
+       * alloc.c (ALLOCATE_FIXED_TYPE_1): Use new definitions.
+       * alloc.c (Lisp_Free): New pseudo lisp object definition.
+       * alloc.c (LRECORD_FREE_P): New.
+       * alloc.c (MARK_LRECORD_AS_FREE): New.
+       * alloc.c (MARK_LRECORD_AS_NOT_FREE): New.
+       * alloc.c (STRUCT_FREE_P): Deleted.
+       * alloc.c (MARK_STRUCT_AS_FREE): Deleted.
+       * alloc.c (MARK_STRUCT_AS_NOT_FREE): Deleted.
+       * alloc.c (STRING_CHARS_FREE_P): New.
+       * alloc.c (MARK_STRING_CHARS_AS_FREE): New.
+       * alloc.c (PUT_FIXED_TYPE_ON_FREE_LIST): Use new definitions.
+       * alloc.c (FREE_FIXED_TYPE): Use new definitions.
+       * alloc.c (STRING_CHARS_FREE_P): Use new definitions.
+       * alloc.c (resize_string): Use new definitions.
+       * alloc.c (SWEEP_FIXED_TYPE_BLOCK): Use new definitions.
+       * alloc.c (verify_string_chars_integrity): Use new definitions.
+       * alloc.c (compact_string_chars): Use new definitions.
+       * alloc.c: Update monster comments.
+       * lrecord.h (lrecord_type): Add some new lrecord types for
+       alloc.c's use.
+
+2001-01-18  Martin Buchholz  <martin@xemacs.org>
+
+       Improve alignment hackery.
+       * lisp.h (ALIGNOF): Better definition for the non-gcc case.
+       (max_align_t): Moved from opaque.h - general purpose.
+       (ALIGN_PTR): Use size_t, not long.
+       * opaque.h (max_align_t): Move to lisp.h.
+
+2001-01-18  Norbert Koch  <nk@LF.net>
+
+       * gui.h: Fix and add prototypes to fix build problems.
+
+2001-01-18  Martin Buchholz  <martin@xemacs.org>
+
+       temacs is going away, so `dump-temacs' is now a bad name.
+       * .dbxrc (dump-temacs): Rename to `dmp'.
+       * .gdbinit (dump-temacs): Rename to `dmp'.
+
+2001-01-17  Andy Piper  <andy@xemacs.org>
+
+       * glyphs.c (print_image_instance): comment to make martin happy.
+
+       * glyphs-x.c (x_redisplay_widget): update faces after a frame
+       change.
+
+       * glyphs-msw.c (mswindows_redisplay_widget): add code to cope with
+       activation.
+       (mswindows_tab_control_redisplay): warning suppression.
+
+       * glyphs-widget.c (widget_update): re-write to cope with updated
+       items.
+       (widget_instantiate): use new gui_item functions.
+       (tab_control_update): deleted.
+       (progress_gauge_update): deleted.
+       (image_instantiator_progress_guage): take out update reference.
+       (image_instantiator_tree_view): ditto.
+       (image_instantiator_tab_control): ditto.
+
+       * gui.c (widget_gui_parse_item_keywords): new function. Do things
+       Right the new way.
+       (gui_item_add_keyval_pair): re-write to cope with descriptors and
+       return whether anything was changed.
+       (update_gui_item_keywords): as it sounds.
+
+       * gui.h: declare widget_gui_parse_item_keywords.
+
+       * fns.c (safe_copy_tree): new function taken from Fcopy_tree.
+       (Fcopy_tree): use it. Stops infloop death in bogus instantiators.
+
 2001-01-17  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.41 "Polyhymnia" is released.
index 311eea9..ddd884a 100644 (file)
@@ -544,35 +544,27 @@ dbg_eq (Lisp_Object obj1, Lisp_Object obj2)
    currently executing functions; the gcpro list; etc.) and
    recursively marking all objects that are accessible.
 
-   At the beginning of the sweep stage, the conses in the cons
-   blocks are in one of three states: in use and marked, in use
-   but not marked, and not in use (already freed).  Any conses
-   that are marked have been marked in the mark stage just
-   executed, because as part of the sweep stage we unmark any
-   marked objects.  The way we tell whether or not a cons cell
-   is in use is through the FREE_STRUCT_P macro.  This basically
-   looks at the first 4 bytes (or however many bytes a pointer
-   fits in) to see if all the bits in those bytes are 1.  The
-   resulting value (0xFFFFFFFF) is not a valid pointer and is
-   not a valid Lisp_Object.  All current fixed-size types have
-   a pointer or Lisp_Object as their first element with the
-   exception of strings; they have a size value, which can
-   never be less than zero, and so 0xFFFFFFFF is invalid for
-   strings as well.  Now assuming that a cons cell is in use,
-   the way we tell whether or not it is marked is to look at
-   the mark bit of its car (each Lisp_Object has one bit
-   reserved as a mark bit, in case it's needed).  Note that
-   different types of objects use different fields to indicate
-   whether the object is marked, but the principle is the same.
-
-   Conses on the free_cons_list are threaded through a pointer
-   stored in the bytes directly after the bytes that are set
-   to 0xFFFFFFFF (we cannot overwrite these because the cons
-   is still in a cons_block and needs to remain marked as
-   not in use for the next time that GC happens).  This
-   implies that all fixed-size types must be at least big
-   enough to store two pointers, which is indeed the case
-   for all current fixed-size types.
+   At the beginning of the sweep stage, the conses in the cons blocks
+   are in one of three states: in use and marked, in use but not
+   marked, and not in use (already freed).  Any conses that are marked
+   have been marked in the mark stage just executed, because as part
+   of the sweep stage we unmark any marked objects.  The way we tell
+   whether or not a cons cell is in use is through the LRECORD_FREE_P
+   macro.  This uses a special lrecord type `lrecord_type_free',
+   which is never associated with any valid object.
+
+   Conses on the free_cons_list are threaded through a pointer stored
+   in the conses themselves.  Because the cons is still in a
+   cons_block and needs to remain marked as not in use for the next
+   time that GC happens, we need room to store both the "free"
+   indicator and the chaining pointer.  So this pointer is stored
+   after the lrecord header (actually where C places a pointer after
+   the lrecord header; they are not necessarily contiguous).  This
+   implies that all fixed-size types must be big enough to contain at
+   least one pointer.  This is true for all current fixed-size types,
+   with the possible exception of Lisp_Floats, for which we define the
+   meat of the struct using a union of a pointer and a double to
+   ensure adequate space for the free list chain pointer.
 
    Some types of objects need additional "finalization" done
    when an object is converted from in use to not in use;
@@ -586,19 +578,18 @@ dbg_eq (Lisp_Object obj1, Lisp_Object obj2)
    WARNING: Things are in an extremely bizarre state when
    the ADDITIONAL_FREE_type macros are called, so beware!
 
-   When ERROR_CHECK_GC is defined, we do things differently
-   so as to maximize our chances of catching places where
-   there is insufficient GCPROing.  The thing we want to
-   avoid is having an object that we're using but didn't
-   GCPRO get freed by GC and then reallocated while we're
-   in the process of using it -- this will result in something
-   seemingly unrelated getting trashed, and is extremely
-   difficult to track down.  If the object gets freed but
-   not reallocated, we can usually catch this because we
-   set all bytes of a freed object to 0xDEADBEEF. (The
-   first four bytes, however, are 0xFFFFFFFF, and the next
-   four are a pointer used to chain freed objects together;
-   we play some tricks with this pointer to make it more
+   When ERROR_CHECK_GC is defined, we do things differently so as to
+   maximize our chances of catching places where there is insufficient
+   GCPROing.  The thing we want to avoid is having an object that
+   we're using but didn't GCPRO get freed by GC and then reallocated
+   while we're in the process of using it -- this will result in
+   something seemingly unrelated getting trashed, and is extremely
+   difficult to track down.  If the object gets freed but not
+   reallocated, we can usually catch this because we set most of the
+   bytes of a freed object to 0xDEADBEEF. (The lisp object type is set
+   to the invalid type `lrecord_type_free', however, and a pointer
+   used to chain freed objects together is stored after the lrecord
+   header; we play some tricks with this pointer to make it more
    bogus, so crashes are more likely to occur right away.)
 
    We want freed objects to stay free as long as possible,
@@ -663,8 +654,8 @@ struct type##_block                                 \
 static struct type##_block *current_##type##_block;    \
 static int current_##type##_block_index;               \
                                                        \
-static structtype *type##_free_list;                   \
-static structtype *type##_free_list_tail;              \
+static Lisp_Free *type##_free_list;                    \
+static Lisp_Free *type##_free_list_tail;               \
                                                        \
 static void                                            \
 init_##type##_alloc (void)                             \
@@ -704,43 +695,38 @@ static int gc_count_num_##type##_freelist
    cell was not GC-protected and was getting collected before
    free_cons() was called. */
 
-#define ALLOCATE_FIXED_TYPE_1(type, structtype, result)                         \
-do                                                                      \
-{                                                                       \
-  if (gc_count_num_##type##_freelist >                                  \
-      MINIMUM_ALLOWED_FIXED_TYPE_CELLS_##type)                                  \
-    {                                                                   \
-      result = type##_free_list;                                        \
-      /* Before actually using the chain pointer, we complement all its         \
-         bits; see FREE_FIXED_TYPE(). */                                \
-      type##_free_list =                                                \
-        (structtype *) ~(unsigned long)                                         \
-          (* (structtype **) ((char *) result + sizeof (void *)));      \
-      gc_count_num_##type##_freelist--;                                         \
-    }                                                                   \
-  else                                                                  \
-    ALLOCATE_FIXED_TYPE_FROM_BLOCK (type, result);                      \
-  MARK_STRUCT_AS_NOT_FREE (result);                                     \
+#define ALLOCATE_FIXED_TYPE_1(type, structtype, result) do {   \
+  if (gc_count_num_##type##_freelist >                         \
+      MINIMUM_ALLOWED_FIXED_TYPE_CELLS_##type)                 \
+    {                                                          \
+      result = (structtype *) type##_free_list;                        \
+      /* Before actually using the chain pointer,              \
+        we complement all its bits; see FREE_FIXED_TYPE(). */  \
+      type##_free_list = (Lisp_Free *)                         \
+       (~ (EMACS_UINT) (type##_free_list->chain));             \
+      gc_count_num_##type##_freelist--;                                \
+    }                                                          \
+  else                                                         \
+    ALLOCATE_FIXED_TYPE_FROM_BLOCK (type, result);             \
+  MARK_LRECORD_AS_NOT_FREE (result);                           \
 } while (0)
 
 #else /* !ERROR_CHECK_GC */
 
-#define ALLOCATE_FIXED_TYPE_1(type, structtype, result)                \
-do                                                             \
-{                                                              \
+#define ALLOCATE_FIXED_TYPE_1(type, structtype, result) do {   \
   if (type##_free_list)                                                \
     {                                                          \
-      result = type##_free_list;                               \
-      type##_free_list =                                       \
-        * (structtype **) ((char *) result + sizeof (void *)); \
+      result = (structtype *) type##_free_list;                        \
+      type##_free_list = type##_free_list->chain;              \
     }                                                          \
   else                                                         \
     ALLOCATE_FIXED_TYPE_FROM_BLOCK (type, result);             \
-  MARK_STRUCT_AS_NOT_FREE (result);                            \
+  MARK_LRECORD_AS_NOT_FREE (result);                           \
 } while (0)
 
 #endif /* !ERROR_CHECK_GC */
 
+
 #define ALLOCATE_FIXED_TYPE(type, structtype, result)  \
 do                                                     \
 {                                                      \
@@ -755,70 +741,54 @@ do                                                                \
   NOSEEUM_INCREMENT_CONS_COUNTER (sizeof (structtype), #type); \
 } while (0)
 
-/* INVALID_POINTER_VALUE should be a value that is invalid as a pointer
-   to a Lisp object and invalid as an actual Lisp_Object value.  We have
-   to make sure that this value cannot be an integer in Lisp_Object form.
-   0xFFFFFFFF could be so on a 64-bit system, so we extend it to 64 bits.
-   On a 32-bit system, the type bits will be non-zero, making the value
-   be a pointer, and the pointer will be misaligned.
-
-   Even if Emacs is run on some weirdo system that allows and allocates
-   byte-aligned pointers, this pointer is at the very top of the address
-   space and so it's almost inconceivable that it could ever be valid. */
-
-#if INTBITS == 32
-# define INVALID_POINTER_VALUE 0xFFFFFFFF
-#elif INTBITS == 48
-# define INVALID_POINTER_VALUE 0xFFFFFFFFFFFF
-#elif INTBITS == 64
-# define INVALID_POINTER_VALUE 0xFFFFFFFFFFFFFFFF
+
+/* Lisp_Free is the type to represent a free list member inside a frob
+   block of any lisp object type.  */
+typedef struct Lisp_Free
+{
+  struct lrecord_header lheader;
+  struct Lisp_Free *chain;
+} Lisp_Free;
+
+#define LRECORD_FREE_P(ptr) \
+((ptr)->lheader.type == lrecord_type_free)
+
+#define MARK_LRECORD_AS_FREE(ptr) \
+((void) ((ptr)->lheader.type = lrecord_type_free))
+
+#ifdef ERROR_CHECK_GC
+#define MARK_LRECORD_AS_NOT_FREE(ptr) \
+((void) ((ptr)->lheader.type = lrecord_type_undefined))
 #else
-You have some weird system and need to supply a reasonable value here.
+#define MARK_LRECORD_AS_NOT_FREE(ptr) DO_NOTHING
 #endif
 
-/* The construct (* (void **) (ptr)) would cause aliasing problems
-   with modern optimizing compilers like `gcc -O3 -fstrict-aliasing'.
-   But `char *' can legally alias any pointer.  Hence this union trick...
-
-   It turned out that the union trick was not good enough for xlC -O3;
-   and it is questionable whether it really complies with the C standard.
-   so we use memset instead, which should be safe from optimizations. */
-typedef union { char c; void *p; } *aliasing_voidpp;
-#define ALIASING_VOIDPP_DEREFERENCE(ptr) \
-  (((aliasing_voidpp) (ptr))->p)
-#define FREE_STRUCT_P(ptr) \
-  (ALIASING_VOIDPP_DEREFERENCE (ptr) == (void *) INVALID_POINTER_VALUE)
-#define MARK_STRUCT_AS_FREE(ptr) memset (ptr, 0xff, sizeof (void *))
-#define MARK_STRUCT_AS_NOT_FREE(ptr) memset (ptr, 0x00, sizeof (void *))
-
 #ifdef ERROR_CHECK_GC
 
-#define PUT_FIXED_TYPE_ON_FREE_LIST(type, structtype, ptr)             \
-do { if (type##_free_list_tail)                                                \
-       {                                                               \
-        /* When we store the chain pointer, we complement all          \
-           its bits; this should significantly increase its            \
-           bogosity in case someone tries to use the value, and        \
-           should make us dump faster if someone stores something      \
-           over the pointer because when it gets un-complemented in    \
-           ALLOCATED_FIXED_TYPE(), the resulting pointer will be       \
-           extremely bogus. */                                         \
-        * (structtype **)                                              \
-          ((char *) type##_free_list_tail + sizeof (void *)) =         \
-            (structtype *) ~(unsigned long) ptr;                       \
-       }                                                               \
-     else                                                              \
-       type##_free_list = ptr;                                         \
-     type##_free_list_tail = ptr;                                      \
-   } while (0)
+#define PUT_FIXED_TYPE_ON_FREE_LIST(type, structtype, ptr) do {        \
+  if (type##_free_list_tail)                                   \
+    {                                                          \
+      /* When we store the chain pointer, we complement all    \
+        its bits; this should significantly increase its       \
+        bogosity in case someone tries to use the value, and   \
+        should make us crash faster if someone overwrites the  \
+        pointer because when it gets un-complemented in        \
+        ALLOCATED_FIXED_TYPE(), the resulting pointer will be  \
+        extremely bogus. */                                    \
+      type##_free_list_tail->chain =                           \
+       (Lisp_Free *) ~ (EMACS_UINT) (ptr);                     \
+    }                                                          \
+  else                                                         \
+    type##_free_list = (Lisp_Free *) (ptr);                    \
+  type##_free_list_tail = (Lisp_Free *) (ptr);                 \
+} while (0)
 
 #else /* !ERROR_CHECK_GC */
 
-#define PUT_FIXED_TYPE_ON_FREE_LIST(type, structtype, ptr)     \
-do { * (structtype **) ((char *) (ptr) + sizeof (void *)) =    \
-       type##_free_list;                                       \
-     type##_free_list = (ptr);                                 \
-   } while (0)
+#define PUT_FIXED_TYPE_ON_FREE_LIST(type, structtype, ptr) do {        \
+  ((Lisp_Free *) (ptr))->chain = type##_free_list;             \
+  type##_free_list = (Lisp_Free *) (ptr);                      \
+} while (0)                                                    \
 
 #endif /* !ERROR_CHECK_GC */
 
@@ -829,7 +799,7 @@ do { * (structtype **) ((char *) (ptr) + sizeof (void *)) = \
   ADDITIONAL_FREE_##type (FFT_ptr);                            \
   deadbeef_memory (FFT_ptr, sizeof (structtype));              \
   PUT_FIXED_TYPE_ON_FREE_LIST (type, structtype, FFT_ptr);     \
-  MARK_STRUCT_AS_FREE (FFT_ptr);                               \
+  MARK_LRECORD_AS_FREE (FFT_ptr);                              \
 } while (0)
 
 /* Like FREE_FIXED_TYPE() but used when we are explicitly
@@ -1781,6 +1751,9 @@ static struct string_chars_block *current_string_chars_block;
 #define BIG_STRING_FULLSIZE_P(fullsize) ((fullsize) >= STRING_CHARS_BLOCK_SIZE)
 #define BIG_STRING_SIZE_P(size) (BIG_STRING_FULLSIZE_P (STRING_FULLSIZE(size)))
 
+#define STRING_CHARS_FREE_P(ptr) ((ptr)->string == NULL)
+#define MARK_STRING_CHARS_AS_FREE(ptr) ((void) ((ptr)->string = NULL))
+
 struct string_chars
 {
   Lisp_String *string;
@@ -1988,7 +1961,7 @@ resize_string (Lisp_String *s, Bytecount pos, Bytecount delta)
            /* Sanity check to make sure we aren't hosed by strange
               alignment/padding. */
            assert (old_s_chars->string == s);
-           MARK_STRUCT_AS_FREE (old_s_chars);
+           MARK_STRING_CHARS_AS_FREE (old_s_chars);
            ((struct unused_string_chars *) old_s_chars)->fullsize =
              oldfullsize;
          }
@@ -2644,7 +2617,7 @@ do {                                                                      \
        {                                                               \
          obj_type *SFTB_victim = &(SFTB_current->block[SFTB_iii]);     \
                                                                        \
-         if (FREE_STRUCT_P (SFTB_victim))                              \
+         if (LRECORD_FREE_P (SFTB_victim))                             \
            {                                                           \
              num_free++;                                               \
            }                                                           \
@@ -2690,13 +2663,13 @@ do {                                                                            \
     {                                                                          \
       int SFTB_iii;                                                            \
       int SFTB_empty = 1;                                                      \
-      obj_type *SFTB_old_free_list = typename##_free_list;                     \
+      Lisp_Free *SFTB_old_free_list = typename##_free_list;                    \
                                                                                \
       for (SFTB_iii = 0; SFTB_iii < SFTB_limit; SFTB_iii++)                    \
        {                                                                       \
          obj_type *SFTB_victim = &(SFTB_current->block[SFTB_iii]);             \
                                                                                \
-         if (FREE_STRUCT_P (SFTB_victim))                                      \
+         if (LRECORD_FREE_P (SFTB_victim))                                     \
            {                                                                   \
              num_free++;                                                       \
              PUT_FIXED_TYPE_ON_FREE_LIST (typename, obj_type, SFTB_victim);    \
@@ -2914,11 +2887,11 @@ verify_string_chars_integrity (void)
          int size;
          int fullsize;
 
-         /* If the string_chars struct is marked as free (i.e. the STRING
-            pointer is 0xFFFFFFFF) then this is an unused chunk of string
-             storage. (See below.) */
+         /* If the string_chars struct is marked as free (i.e. the
+            STRING pointer is NULL) then this is an unused chunk of
+            string storage. (See below.) */
 
-         if (FREE_STRUCT_P (s_chars))
+         if (STRING_CHARS_FREE_P (s_chars))
            {
              fullsize = ((struct unused_string_chars *) s_chars)->fullsize;
              pos += fullsize;
@@ -2965,16 +2938,16 @@ compact_string_chars (void)
          int size;
          int fullsize;
 
-         /* If the string_chars struct is marked as free (i.e. the STRING
-            pointer is 0xFFFFFFFF) then this is an unused chunk of string
-             storage.  This happens under Mule when a string's size changes
-            in such a way that its fullsize changes. (Strings can change
-            size because a different-length character can be substituted
-            for another character.) In this case, after the bogus string
-            pointer is the "fullsize" of this entry, i.e. how many bytes
-            to skip. */
+         /* If the string_chars struct is marked as free (i.e. the
+            STRING pointer is NULL) then this is an unused chunk of
+            string storage.  This happens under Mule when a string's
+            size changes in such a way that its fullsize changes.
+            (Strings can change size because a different-length
+            character can be substituted for another character.)
+            In this case, after the bogus string pointer is the
+            "fullsize" of this entry, i.e. how many bytes to skip. */
 
-         if (FREE_STRUCT_P (from_s_chars))
+         if (STRING_CHARS_FREE_P (from_s_chars))
            {
              fullsize = ((struct unused_string_chars *) from_s_chars)->fullsize;
              from_pos += fullsize;
@@ -2982,7 +2955,7 @@ compact_string_chars (void)
             }
 
           string = from_s_chars->string;
-         assert (!(FREE_STRUCT_P (string)));
+         assert (!(LRECORD_FREE_P (string)));
 
           size = string_length (string);
           fullsize = STRING_FULLSIZE (size);
index cf2697c..bd36a64 100644 (file)
@@ -40,17 +40,6 @@ Boston, MA 02111-1307, USA.  */
 #include <X11/cursorfont.h>
 #include <X11/keysym.h>
 #include <X11/Xatom.h>
-
-#if 0 /* mrb - Xos sux. */
-#ifdef USG
-#undef USG     /* ####KLUDGE for Solaris 2.2 and up */
-#include <X11/Xos.h>
-#define USG
-#else
-#include <X11/Xos.h>
-#endif
-#endif /* 0 */
-
 #include <X11/StringDefs.h>
 
 #ifdef HAVE_XPM
@@ -76,7 +65,7 @@ struct x_device
   /* Xt application info. */
   Widget Xt_app_shell;
 
-  /* Cache of GC's for frame's on this device. */
+  /* Cache of GC's for frames on this device. */
   struct gc_cache *gc_cache;
 
   /* Selected visual, depth and colormap for this device */
index 8cfab15..fc1d700 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -56,6 +56,7 @@ Lisp_Object Qstring_lessp;
 Lisp_Object Qidentity;
 
 static int internal_old_equal (Lisp_Object, Lisp_Object, int);
+Lisp_Object safe_copy_tree (Lisp_Object arg, Lisp_Object vecp, int depth);
 
 static Lisp_Object
 mark_bit_vector (Lisp_Object obj)
@@ -863,6 +864,15 @@ are not copied.
 */
        (arg, vecp))
 {
+  return safe_copy_tree (arg, vecp, 0);
+}
+
+Lisp_Object
+safe_copy_tree (Lisp_Object arg, Lisp_Object vecp, int depth)
+{
+  if (depth > 200)
+    signal_simple_error ("Stack overflow in copy-tree", arg);
+    
   if (CONSP (arg))
     {
       Lisp_Object rest;
@@ -872,9 +882,9 @@ are not copied.
          Lisp_Object elt = XCAR (rest);
          QUIT;
          if (CONSP (elt) || VECTORP (elt))
-           XCAR (rest) = Fcopy_tree (elt, vecp);
+           XCAR (rest) = safe_copy_tree (elt, vecp, depth + 1);
          if (VECTORP (XCDR (rest))) /* hack for (a b . [c d]) */
-           XCDR (rest) = Fcopy_tree (XCDR (rest), vecp);
+           XCDR (rest) = safe_copy_tree (XCDR (rest), vecp, depth +1);
          rest = XCDR (rest);
        }
     }
@@ -888,7 +898,7 @@ are not copied.
          Lisp_Object elt = XVECTOR_DATA (arg) [j];
          QUIT;
          if (CONSP (elt) || VECTORP (elt))
-           XVECTOR_DATA (arg) [j] = Fcopy_tree (elt, vecp);
+           XVECTOR_DATA (arg) [j] = safe_copy_tree (elt, vecp, depth + 1);
        }
     }
   return arg;
index 7bb3c31..39bb3f4 100644 (file)
@@ -2326,6 +2326,24 @@ mswindows_redisplay_widget (Lisp_Image_Instance *p)
       SendMessage (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
                   WM_SETTEXT, 0, (LPARAM)lparam);
     }
+  /* Set active state. */
+  if (IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
+    {
+      Lisp_Object item = IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (p);
+      LONG style = GetWindowLong 
+       (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
+        GWL_STYLE);
+
+      if (CONSP (item))
+       item = XCAR (item);
+
+      if (gui_item_active_p (item))
+       SetWindowLong (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
+                      GWL_STYLE, style & ~WS_DISABLED);
+      else
+       SetWindowLong (WIDGET_INSTANCE_MSWINDOWS_HANDLE (p),
+                      GWL_STYLE, style | WS_DISABLED);
+    }
 }
 
 /* register widgets into our hashtable so that we can cope with the
@@ -2935,7 +2953,7 @@ mswindows_tab_control_redisplay (Lisp_Object image_instance)
       IMAGE_INSTANCE_WIDGET_ACTION_OCCURRED (ii))
     {
       HWND wnd = WIDGET_INSTANCE_MSWINDOWS_HANDLE (ii);
-      int i = 0, selected = 0;
+      int i = 0, selected_idx = 0;
       Lisp_Object rest;
 
       assert (!NILP (IMAGE_INSTANCE_WIDGET_ITEMS (ii)));
@@ -2988,10 +3006,10 @@ mswindows_tab_control_redisplay (Lisp_Object image_instance)
              add_tab_item (image_instance, wnd, XCAR (rest),
                            IMAGE_INSTANCE_FRAME (ii), i);
              if (gui_item_selected_p (XCAR (rest)))
-               selected = i;
+               selected_idx = i;
              i++;
            }
-         SendMessage (wnd, TCM_SETCURSEL, selected, 0);
+         SendMessage (wnd, TCM_SETCURSEL, selected_idx, 0);
        }
     }
 }
index fbba67f..fd754c6 100644 (file)
@@ -294,16 +294,89 @@ widget_update (Lisp_Object image_instance, Lisp_Object instantiator)
 {
   Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance);
   struct image_instantiator_methods* meths;
+  struct gcpro gcpro1;
 
   Lisp_Object text = find_keyword_in_vector (instantiator, Q_text);
+  Lisp_Object desc = find_keyword_in_vector (instantiator, Q_descriptor);
+  Lisp_Object items = find_keyword_in_vector (instantiator, Q_items);
+  Lisp_Object descriptor_item = Qnil;
+
+  GCPRO1 (descriptor_item);
+
   /* Pick up any generic properties that we might need to keep hold
-     of. */
+     of. 
+     #### This is potentially bogus because it is changing the items
+     in place rather than in the pending items. */
   if (!NILP (text))
     {
       IMAGE_INSTANCE_WIDGET_TEXT (ii) = text;
       IMAGE_INSTANCE_TEXT_CHANGED (ii) = 1;
     }
 
+  /* Retrieve the gui item information. This is easy if we have been
+     provided with a vector, more difficult if we have just been given
+     keywords.
+
+     #### This is inconsistent with instantiation in that you have to
+     have the :descriptor keyword for updates in order to recognise 
+     changes. */
+  if (VECTORP (desc))
+    {
+      descriptor_item = gui_parse_item_keywords_no_errors (desc);
+    }
+  else
+    {
+      /* Since we are updating the instantiator could be incomplete
+        and hence the gui item descriptor not well formed. We
+        therefore try updating and discard the results if nothing
+        changed. */
+      descriptor_item = copy_gui_item (IMAGE_INSTANCE_WIDGET_ITEM (ii));
+      if (!update_gui_item_keywords (descriptor_item, instantiator))
+       descriptor_item = Qnil;
+    }
+
+  /* Record new items for update. *_redisplay will do the
+     rest. */
+  if (!EQ (IMAGE_INSTANCE_WIDGET_TYPE (ii), Qlayout)
+      && 
+      !EQ (IMAGE_INSTANCE_WIDGET_TYPE (ii), Qnative_layout))
+    {
+      if (!NILP (items))
+       {
+         if (NILP (descriptor_item))
+           descriptor_item = IMAGE_INSTANCE_WIDGET_ITEM (ii);
+         
+         check_valid_item_list (items);
+#ifdef DEBUG_WIDGET_OUTPUT
+         stderr_out ("items for widget %p updated\n", 
+                     IMAGE_INSTANCE_SUBWINDOW_ID (ii));
+#endif
+         /* Don't set the actual items since we might decide not to use
+            the new ones (because nothing has really changed). If we did
+            set them and didn't use them then we would get into whole
+            heaps of trouble when the old items get GC'd. */
+         descriptor_item = Fcons (descriptor_item, parse_gui_item_tree_children (items));
+       }
+      /* If the descriptor was updated but not the items we need to fill
+        in the `new' items. */
+      else if (!NILP (descriptor_item) 
+              && 
+              CONSP (IMAGE_INSTANCE_WIDGET_ITEMS (ii)))
+       {
+         descriptor_item = Fcons 
+           (descriptor_item,
+            copy_gui_item_tree (XCDR (IMAGE_INSTANCE_WIDGET_ITEMS (ii))));
+       }
+    }
+
+  if (!NILP (descriptor_item))
+    {
+      IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii) = descriptor_item;
+      IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 1;
+    }
+
+  UNGCPRO;
+      
   /* Now try device specific methods first ... */
   meths = decode_device_ii_format (image_instance_device (image_instance),
                                   IMAGE_INSTANCE_WIDGET_TYPE (ii),
@@ -570,19 +643,24 @@ widget_instantiate (Lisp_Object image_instance, Lisp_Object instantiator,
   if (!NILP (face))
     SET_IMAGE_INSTANCE_WIDGET_FACE (ii, Fget_face (face));
 
-  /* retrieve the gui item information. This is easy if we have been
+  /* Retrieve the gui item information. This is easy if we have been
      provided with a vector, more difficult if we have just been given
-     keywords */
-  if (STRINGP (desc) || NILP (desc))
+     keywords. Note that standard gui descriptor shortcuts will not work
+     because of keyword parsing.
+
+     #### This is bogus in that descriptor and items share the same slot, 
+     we should rationalize. */
+  if (VECTORP (desc))
     {
-      /* big cheat - we rely on the fact that a gui item looks like an instantiator */
       IMAGE_INSTANCE_WIDGET_ITEMS (ii) =
-       gui_parse_item_keywords_no_errors (instantiator);
-      IMAGE_INSTANCE_WIDGET_TEXT (ii) = desc;
+       gui_parse_item_keywords_no_errors (desc);
     }
   else
-    IMAGE_INSTANCE_WIDGET_ITEMS (ii) =
-      gui_parse_item_keywords_no_errors (desc);
+    {
+      /* big cheat - we rely on the fact that a gui item looks like an instantiator */
+      IMAGE_INSTANCE_WIDGET_ITEMS (ii) =
+       widget_gui_parse_item_keywords (instantiator);
+    }
 
   /* Pick up the orientation before we do our first layout. */
   if (EQ (orient, Qleft) || EQ (orient, Qright) || EQ (orient, Qvertical))
@@ -776,32 +854,6 @@ tab_control_query_geometry (Lisp_Object image_instance,
     }
 }
 
-/* Update the contents of a tab control. */
-static void
-tab_control_update (Lisp_Object image_instance,
-                   Lisp_Object instantiator)
-{
-  Lisp_Object items = find_keyword_in_vector (instantiator, Q_items);
-  /* Record new items for update. *_tab_control_redisplay will do the
-     rest. */
-  if (!NILP (items))
-    {
-      Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance);
-      check_valid_item_list (items);
-#ifdef DEBUG_WIDGET_OUTPUT
-      stderr_out ("tab control %p updated\n", IMAGE_INSTANCE_SUBWINDOW_ID (ii));
-#endif
-      /* Don't set the actual items since we might decide not to use
-         the new ones (because nothing has really changed). If we did
-         set them and didn't use them then we would get into whole
-         heaps of trouble when the old items get GC'd. */
-      IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii) =
-       Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)),
-              parse_gui_item_tree_children (items));
-      IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 1;
-    }
-}
-
 /* Determine whether only the order has changed for a tab. */
 int tab_control_order_only_changed (Lisp_Object image_instance)
 {
@@ -840,32 +892,6 @@ int tab_control_order_only_changed (Lisp_Object image_instance)
   return found;
 }
 
-/* Set the properties of a progress gauge */
-static void
-progress_gauge_update (Lisp_Object image_instance,
-                      Lisp_Object instantiator)
-{
-  Lisp_Image_Instance *ii = XIMAGE_INSTANCE (image_instance);
-  Lisp_Object value = find_keyword_in_vector (instantiator, Q_value);
-
-  if (!NILP (value))
-    {
-      CHECK_INT (value);
-#ifdef DEBUG_WIDGET_OUTPUT
-      stderr_out ("progress gauge value set to %ld\n", XINT (value));
-#endif
-      IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii) =
-       copy_gui_item_tree (IMAGE_INSTANCE_WIDGET_ITEMS (ii));
-#ifdef ERROR_CHECK_GLYPHS
-      assert (GUI_ITEMP (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)));
-#endif
-      if (GUI_ITEMP (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii)))
-       XGUI_ITEM (IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii))->value = value;
-
-      IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 1;
-    }
-}
-
 \f
 /*****************************************************************************
  *                              widget layout                               *
@@ -1480,7 +1506,6 @@ static void image_instantiator_progress_guage (void)
   IIFORMAT_HAS_SHARED_METHOD (progress_gauge, instantiate, widget);
   IIFORMAT_HAS_SHARED_METHOD (progress_gauge, post_instantiate, widget);
   IIFORMAT_HAS_SHARED_METHOD (progress_gauge, governing_domain, subwindow);
-  IIFORMAT_HAS_METHOD (progress_gauge, update);
   VALID_WIDGET_KEYWORDS (progress_gauge);
   VALID_GUI_KEYWORDS (progress_gauge);
 
@@ -1495,7 +1520,6 @@ static void image_instantiator_tree_view (void)
   IIFORMAT_HAS_SHARED_METHOD (tree_view, instantiate, widget);
   IIFORMAT_HAS_SHARED_METHOD (tree_view, post_instantiate, widget);
   IIFORMAT_HAS_SHARED_METHOD (tree_view, governing_domain, subwindow);
-  IIFORMAT_HAS_SHARED_METHOD (tree_view, update, tab_control);
   IIFORMAT_HAS_METHOD (tree_view, query_geometry);
   VALID_WIDGET_KEYWORDS (tree_view);
   VALID_GUI_KEYWORDS (tree_view);
@@ -1511,7 +1535,6 @@ static void image_instantiator_tab_control (void)
   IIFORMAT_HAS_SHARED_METHOD (tab_control, post_instantiate, widget);
   IIFORMAT_HAS_SHARED_METHOD (tab_control, governing_domain, subwindow);
   IIFORMAT_HAS_METHOD (tab_control, query_geometry);
-  IIFORMAT_HAS_METHOD (tab_control, update);
   VALID_WIDGET_KEYWORDS (tab_control);
   VALID_GUI_KEYWORDS (tab_control);
   IIFORMAT_VALID_KEYWORD (tab_control, Q_orientation,
index 0451996..f37d3ba 100644 (file)
@@ -2228,8 +2228,14 @@ x_redisplay_widget (Lisp_Image_Instance *p)
   /* Possibly update the colors and font */
   if (IMAGE_INSTANCE_WIDGET_FACE_CHANGED (p)
       ||
+      /* #### This is not sufficient because it will not cope with widgets
+        that are not currently visible. Once redisplay has done the
+        visible ones it will clear this flag so that when new ones
+        become visible they will not be updated. */
       XFRAME (IMAGE_INSTANCE_FRAME (p))->faces_changed
       ||
+      XFRAME (IMAGE_INSTANCE_FRAME (p))->frame_changed
+      ||
       IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (p))
     {
       update_widget_face (wv, p, IMAGE_INSTANCE_FRAME (p));
index 73afa1b..7804e03 100644 (file)
@@ -1004,7 +1004,7 @@ print_image_instance (Lisp_Object obj, Lisp_Object printcharfun,
          print_internal
            (IMAGE_INSTANCE_WIDGET_FACE (ii), printcharfun, 0);
        }
-
+      /* fallthrough */
 
     case IMAGE_SUBWINDOW:
       sprintf (buf, " %dx%d", IMAGE_INSTANCE_WIDTH (ii),
index 5ec1628..2b4e6df 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -37,6 +37,7 @@ Lisp_Object Qmenu_no_selection_hook;
 Lisp_Object Vmenu_no_selection_hook;
 
 static Lisp_Object parse_gui_item_tree_list (Lisp_Object list);
+Lisp_Object find_keyword_in_vector (Lisp_Object vector, Lisp_Object keyword);
 
 #ifdef HAVE_POPUPS
 
@@ -111,39 +112,63 @@ get_gui_callback (Lisp_Object data, Lisp_Object *fn, Lisp_Object *arg)
  * structure. If KEY is not a keyword, or is an unknown keyword, then
  * error is signaled.
  */
-void
+int
 gui_item_add_keyval_pair (Lisp_Object gui_item,
                          Lisp_Object key, Lisp_Object val,
                          Error_behavior errb)
 {
   Lisp_Gui_Item *pgui_item = XGUI_ITEM (gui_item);
+  int retval = 0;
 
   if (!KEYWORDP (key))
     syntax_error_2 ("Non-keyword in gui item", key, pgui_item->name);
 
-  if     (EQ (key, Q_suffix))   pgui_item->suffix   = val;
-  else if (EQ (key, Q_active))  pgui_item->active   = val;
-  else if (EQ (key, Q_included)) pgui_item->included = val;
-  else if (EQ (key, Q_config))  pgui_item->config   = val;
-  else if (EQ (key, Q_filter))  pgui_item->filter   = val;
-  else if (EQ (key, Q_style))   pgui_item->style    = val;
-  else if (EQ (key, Q_selected)) pgui_item->selected = val;
-  else if (EQ (key, Q_keys))    pgui_item->keys     = val;
-  else if (EQ (key, Q_callback)) pgui_item->callback = val;
-  else if (EQ (key, Q_callback_ex)) pgui_item->callback_ex = val;
-  else if (EQ (key, Q_value))   pgui_item->value     = val;
+  if (EQ (key, Q_descriptor))
+    {
+      if (!EQ (pgui_item->name, val))
+       {
+         retval = 1;
+         pgui_item->name   = val;
+       }
+    }
+#define FROB(slot) \
+  else if (EQ (key, Q_##slot))                 \
+  {                                            \
+    if (!EQ (pgui_item->slot, val))                    \
+      {                                                \
+       retval = 1;                             \
+       pgui_item->slot   = val;                        \
+      }                                                \
+  }
+  FROB (suffix)
+  FROB (active)
+  FROB (included)
+  FROB (config)
+  FROB (filter)
+  FROB (style)
+  FROB (selected)
+  FROB (keys)
+  FROB (callback)
+  FROB (callback_ex)
+  FROB (value)
+#undef FROB
   else if (EQ (key, Q_key_sequence)) ;   /* ignored for FSF compatibility */
   else if (EQ (key, Q_label)) ;   /* ignored for 21.0 implement in 21.2  */
   else if (EQ (key, Q_accelerator))
     {
-      if (SYMBOLP (val) || CHARP (val))
-       pgui_item->accelerator = val;
-      else if (ERRB_EQ (errb, ERROR_ME))
-       syntax_error ("Bad keyboard accelerator", val);
+      if (!EQ (pgui_item->accelerator, val))
+       {
+         retval = 1;
+         if (SYMBOLP (val) || CHARP (val))
+           pgui_item->accelerator = val;
+         else if (ERRB_EQ (errb, ERROR_ME))
+           syntax_error ("Bad keyboard accelerator", val);
+       }
     }
   else if (ERRB_EQ (errb, ERROR_ME))
     syntax_error_2 ("Unknown keyword in gui item", key,
                           pgui_item->name);
+  return retval;
 }
 
 void
@@ -248,6 +273,69 @@ make_gui_item_from_keywords_internal (Lisp_Object item,
   return gui_item;
 }
 
+/* This will only work with descriptors in the new format. */
+Lisp_Object
+widget_gui_parse_item_keywords (Lisp_Object item)
+{
+  int i, length;
+  Lisp_Object *contents;
+  Lisp_Object gui_item = allocate_gui_item ();
+  Lisp_Object desc = find_keyword_in_vector (item, Q_descriptor);
+
+  CHECK_VECTOR (item);
+  length = XVECTOR_LENGTH (item);
+  contents = XVECTOR_DATA (item);
+
+  if (!NILP (desc) && !STRINGP (desc) && !VECTORP (desc))
+    syntax_error ("Invalid GUI item descriptor", item);
+
+  if (length & 1)
+    {
+      if (!SYMBOLP (contents [0]))
+       syntax_error ("Invalid GUI item descriptor", item);
+      contents++;                      /* Ignore the leading symbol. */
+      length--;
+    }
+
+  for (i = 0; i < length;)
+    {
+      Lisp_Object key = contents [i++];
+      Lisp_Object val = contents [i++];
+      gui_item_add_keyval_pair (gui_item, key, val, ERROR_ME_NOT);
+    }
+
+  return gui_item;
+}
+
+/* Update a gui item from a partial descriptor. */
+int
+update_gui_item_keywords (Lisp_Object gui_item, Lisp_Object item)
+{
+  int i, length, retval = 0;
+  Lisp_Object *contents;
+
+  CHECK_VECTOR (item);
+  length = XVECTOR_LENGTH (item);
+  contents = XVECTOR_DATA (item);
+
+ if (length & 1)
+    {
+      if (!SYMBOLP (contents [0]))
+       syntax_error ("Invalid GUI item descriptor", item);
+      contents++;                      /* Ignore the leading symbol. */
+      length--;
+    }
+
+  for (i = 0; i < length;)
+    {
+      Lisp_Object key = contents [i++];
+      Lisp_Object val = contents [i++];
+      if (gui_item_add_keyval_pair (gui_item, key, val, ERROR_ME_NOT))
+       retval = 1;
+    }
+  return retval;
+}
+
 Lisp_Object
 gui_parse_item_keywords (Lisp_Object item)
 {
@@ -618,7 +706,7 @@ print_gui_item (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
   write_c_string (buf, printcharfun);
 }
 
-static Lisp_Object
+Lisp_Object
 copy_gui_item (Lisp_Object gui_item)
 {
   Lisp_Object  ret = allocate_gui_item ();
index 91f9c61..aba8883 100644 (file)
--- a/src/gui.h
+++ b/src/gui.h
@@ -31,6 +31,9 @@ int separator_string_p (const Bufbyte *s);
 void get_gui_callback (Lisp_Object, Lisp_Object *, Lisp_Object *);
 int gui_item_equal_sans_selected (Lisp_Object obj1, Lisp_Object obj2, int depth);
 
+
+
+
 extern int popup_up_p;
 
 /************************************************************************/
@@ -64,9 +67,12 @@ DECLARE_LRECORD (gui_item, Lisp_Gui_Item);
 #define CHECK_GUI_ITEM(x) CHECK_RECORD (x, gui_item)
 #define CONCHECK_GUI_ITEM(x) CONCHECK_RECORD (x, gui_item)
 
-void gui_item_add_keyval_pair (Lisp_Object,
-                              Lisp_Object key, Lisp_Object val,
-                              Error_behavior errb);
+int update_gui_item_keywords (Lisp_Object gui_item, Lisp_Object item);
+Lisp_Object copy_gui_item (Lisp_Object gui_item);
+Lisp_Object widget_gui_parse_item_keywords (Lisp_Object item);
+int gui_item_add_keyval_pair (Lisp_Object gui_item,
+                              Lisp_Object key, Lisp_Object val,
+                              Error_behavior errb);
 Lisp_Object gui_parse_item_keywords (Lisp_Object item);
 Lisp_Object gui_parse_item_keywords_no_errors (Lisp_Object item);
 void gui_add_item_keywords_to_plist (Lisp_Object plist, Lisp_Object gui_item);
index 8352b17..2963e99 100644 (file)
@@ -193,20 +193,45 @@ void xfree (void *);
 # endif /* GNUC */
 #endif
 
+/* No type has a greater alignment requirement than max_align_t.
+   (except perhaps for types we don't use, like long double) */
+typedef union
+{
+  struct { long l; } l;
+  struct { void *p; } p;
+  struct { void (*f)(void); } f;
+  struct { double d; } d;
+} max_align_t;
+
 #ifndef ALIGNOF
 # if defined (__GNUC__) && (__GNUC__ >= 2)
-#  define ALIGNOF(x) __alignof__ (x)
+/* gcc has an extension that gives us exactly what we want. */
+#  define ALIGNOF(type) __alignof__ (type)
+# elif ! defined (__cplusplus)
+/* The following is mostly portable, except that:
+   - it doesn't work for inside out declarations like void (*) (void).
+     (so just call ALIGNOF with a typedef'ed name)
+   - it doesn't work with C++.  The C++ committee has decided,
+     in its infinite wisdom, that:
+     "Types must be declared in declarations, not in expressions." */
+#  define ALIGNOF(type) offsetof (struct { char c; type member; }, member)
 # else
-#  define ALIGNOF(x) sizeof (x)
+/* The following should be completely portable, but might give values
+   that are larger than necessary.  But never larger than the maximum
+   possible alignment. */
+#  define ALIGNOF(type)                                \
+((sizeof (type) % sizeof (max_align_t)) == 0 ? \
+ sizeof (max_align_t) :                                \
+ (sizeof (type) % sizeof (max_align_t)))
 # endif
-#endif
+#endif /* ALIGNOF */
 
 #define ALIGN_SIZE(len, unit) \
   ((((len) + (unit) - 1) / (unit)) * (unit))
 
 /* #### Yuck, this is kind of evil */
 #define ALIGN_PTR(ptr, unit) \
-  ((void *) ALIGN_SIZE ((long) (ptr), unit))
+  ((void *) ALIGN_SIZE ((size_t) (ptr), unit))
 
 #ifndef DO_NOTHING
 #define DO_NOTHING do {} while (0)
index add2205..3fb3201 100644 (file)
@@ -189,6 +189,8 @@ enum lrecord_type
   lrecord_type_devmode,
   lrecord_type_mswindows_dialog_id,
   lrecord_type_case_table,
+  lrecord_type_free, /* only used for "free" lrecords */
+  lrecord_type_undefined, /* only used for debugging */
   lrecord_type_last_built_in_type /* must be last */
 };
 
index 0350bd7..527ae6b 100644 (file)
@@ -26,13 +26,6 @@ Boston, MA 02111-1307, USA.  */
 #ifndef INCLUDED_opaque_h_
 #define INCLUDED_opaque_h_
 
-typedef union
-{
-  struct { Lisp_Object obj; } obj;
-  struct { void *p; } p;
-  struct { double d; } d;
-} max_align_t;
-
 typedef struct Lisp_Opaque
 {
   struct lcrecord_header header;
index fa9cb3a..117f16b 100644 (file)
@@ -1,3 +1,7 @@
+2001-01-20  Martin Buchholz <martin@xemacs.org>
+
+       * XEmacs 21.2.42 "Poseidon" is released.
+
 2001-01-17  Martin Buchholz <martin@xemacs.org>
 
        * XEmacs 21.2.41 "Polyhymnia" is released.
index 4b4f863..34cd7a2 100644 (file)
@@ -2,8 +2,8 @@
 emacs_is_beta=t
 emacs_major_version=21
 emacs_minor_version=2
-emacs_beta_version=41
-xemacs_codename="Polyhymnia"
+emacs_beta_version=42
+xemacs_codename="Poseidon"
 infodock_major_version=4
 infodock_minor_version=0
 infodock_build_version=8