From 571a24e2bfea15d37c3503414674f59e89ec9652 Mon Sep 17 00:00:00 2001 From: tomo Date: Wed, 14 Nov 2001 07:51:37 +0000 Subject: [PATCH] XEmacs 21.2.42 "Poseidon". --- CHANGES-beta | 7 + ChangeLog | 52 ++- PROBLEMS | 93 +++-- etc/NEWS | 3 + info/internals.info | 25 +- info/xemacs-faq.info | 478 +++++++++++++------------- info/xemacs-faq.info-1 | 2 +- info/xemacs.info | 765 +++++++++++++++++++++--------------------- info/xemacs.info-2 | 25 +- lib-src/ChangeLog | 4 + lisp/ChangeLog | 44 +++ lisp/gui.el | 15 +- lisp/menubar-items.el | 37 +- lisp/package-get.el | 5 +- lisp/package-net.el | 45 +-- lisp/package-ui.el | 2 + lisp/packages.el | 2 +- lisp/wid-edit.el | 33 +- lwlib/ChangeLog | 4 + man/ChangeLog | 21 +- man/internals/internals.texi | 90 ++++- man/xemacs-faq.texi | 4 +- man/xemacs/frame.texi | 48 ++- netinstall/ChangeLog | 13 +- netinstall/ini.h | 8 +- nt/ChangeLog | 4 + src/.dbxrc | 6 +- src/.gdbinit | 6 +- src/ChangeLog | 83 +++++ src/alloc.c | 259 +++++++------- src/console-x.h | 13 +- src/fns.c | 16 +- src/glyphs-msw.c | 24 +- src/glyphs-widget.c | 151 +++++---- src/glyphs-x.c | 6 + src/glyphs.c | 2 +- src/gui.c | 122 ++++++- src/gui.h | 12 +- src/lisp.h | 33 +- src/lrecord.h | 2 + src/opaque.h | 7 - tests/ChangeLog | 4 + version.sh | 4 +- 43 files changed, 1558 insertions(+), 1021 deletions(-) diff --git a/CHANGES-beta b/CHANGES-beta index f7ff2b8..e70e4b9 100644 --- a/CHANGES-beta +++ b/CHANGES-beta @@ -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 diff --git a/ChangeLog b/ChangeLog index 673916d..c408e19 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2001-01-20 Martin Buchholz + + * XEmacs 21.2.42 "Poseidon" is released. + +2001-01-18 Martin Buchholz + + * PROBLEMS (Sun/Solaris): Yet another microimprovement. + +2001-01-17 Martin Buchholz + + * PROBLEMS (Sun/Solaris): Replace --with-gnu-ld=no with + --with-ld=/usr/ccs/bin/ld + +2001-01-16 Robert Pluim + + * PROBLEMS (SunOS/Solaris): Document workaround for GNU ld bug on + Solaris. Half mine, half Raymond Toy, half Martin Buchholz. + +2001-01-16 Didier Verna + + * NEWS: document the modeline horizontal scrolling feature. + 2001-01-17 Martin Buchholz * XEmacs 21.2.41 "Polyhymnia" is released. @@ -62,7 +84,7 @@ * XEmacs 21.2.38 is released. -2000-11-26 Björn Torkelsson +2000-11-26 Bjrn Torkelsson * configure.in: Only show message about DnD API if compiling with DnD @@ -109,7 +131,7 @@ 2000-10-10 Martin Buchholz - * configure.in: + * configure.in: Use stropts.h, not sys/stropts.h. Use strtio.h, not sys/strtio.h. @@ -224,21 +246,21 @@ 2000-07-12 Martin Buchholz - * 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 - * configure.in: + * configure.in: Replace SMART_INCLUDE with a dumber, but more reliable method. 2000-07-10 Martin Buchholz - * 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 @@ -261,12 +283,12 @@ 2000-07-08 Ben Wing * configure.in: add -lcomdlg32 for cygwin. - + 2000-07-05 Craig Lanning * aclocal.m4 (can_build_shared): First pass at module support for cygwin and mingw. - + * configure: * configure (xe_check_libs): * configure (acfindx): @@ -371,11 +393,11 @@ 2000-04-19 Martin Buchholz - * 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. @@ -402,7 +424,7 @@ * xemacs/configure.in: Do a normal link when compiling with --pdump. Don't try compiling an unexec object file. - + 2000-03-27 Didier Verna * configure.in: reorganize the output by topic. @@ -1403,7 +1425,7 @@ * config.guess: Synched with latest FSF version. -1998-07-12 Björn Torkelsson +1998-07-12 Bjrn Torkelsson * Makefile.in: added LDFLAGS. diff --git a/PROBLEMS b/PROBLEMS index 4c5d43d..dab9c7c 100644 --- 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 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 @@ -435,7 +466,7 @@ Marcus Thiessel 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 *** Native cc on SCO OpenServer 5 is now OK. Icc may still throw you a curve. Here is what Robert Lipe 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 . (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. diff --git a/etc/NEWS b/etc/NEWS index e2ae0ca..6bf41ea 100644 --- 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 diff --git a/info/internals.info b/info/internals.info index 07e79dc..0446b0a 100644 --- a/info/internals.info +++ b/info/internals.info @@ -47,6 +47,7 @@ internals.info-5: 194152 internals.info-6: 243742 internals.info-7: 287809 internals.info-8: 336676 +internals.info-9: 380670  Tag Table: (Indirect) @@ -180,17 +181,17 @@ Node: Mathematics of Extent Ordering357821 Node: Extent Fragments362578 Node: Faces363664 Node: Glyphs363780 -Node: Specifiers365967 -Node: Menus366096 -Node: Subprocesses368354 -Node: Interface to the X Window System370340 -Node: Lucid Widget Library370621 -Node: Generic Widget Interface371912 -Node: Scrollbars375471 -Node: Menubars375614 -Node: Checkboxes and Radio Buttons375757 -Node: Progress Bars375943 -Node: Tab Controls376103 -Node: Index376224 +Node: Specifiers370413 +Node: Menus370542 +Node: Subprocesses372800 +Node: Interface to the X Window System374786 +Node: Lucid Widget Library375067 +Node: Generic Widget Interface376358 +Node: Scrollbars379917 +Node: Menubars380060 +Node: Checkboxes and Radio Buttons380203 +Node: Progress Bars380389 +Node: Tab Controls380549 +Node: Index380670  End Tag Table diff --git a/info/xemacs-faq.info b/info/xemacs-faq.info index bbe2a0c..bd41315 100644 --- a/info/xemacs-faq.info +++ b/info/xemacs-faq.info @@ -9,10 +9,10 @@ END-INFO-DIR-ENTRY  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  Tag Table: (Indirect) @@ -29,240 +29,240 @@ Node: Q1.0.824887 Node: Q1.0.925102 Node: Q1.0.1025380 Node: Q1.0.1125623 -Node: Q1.0.1226012 -Node: Q1.0.1326380 -Node: Q1.0.1426629 -Node: Q1.1.127141 -Node: Q1.1.228183 -Node: Q1.1.328576 -Node: Q1.2.129527 -Node: Q1.2.230583 -Node: Q1.2.331017 -Node: Q1.3.132101 -Node: Q1.3.232752 -Node: Q1.3.333216 -Node: Q1.3.433457 -Node: Q1.3.534230 -Node: Q1.3.636635 -Node: Q1.3.738166 -Node: Q1.4.139101 -Node: Q1.4.239963 -Node: Q1.4.340304 -Node: Q1.4.440723 -Node: Q1.4.542263 -Node: Q1.4.642567 -Node: Installation43560 -Node: Q2.0.146135 -Node: Q2.0.246935 -Node: Q2.0.348703 -Node: Q2.0.450001 -Node: Q2.0.550593 -Node: Q2.0.650941 -Node: Q2.0.751322 -Node: Q2.0.851703 -Node: Q2.0.953280 -Node: Q2.0.1054718 -Node: Q2.0.1155562 -Node: Q2.0.1256503 -Node: Q2.0.1358026 -Node: Q2.0.1458515 -Node: Q2.1.159573 -Node: Q2.1.262315 -Node: Q2.1.363492 -Node: Q2.1.464785 -Node: Q2.1.565584 -Node: Q2.1.665946 -Node: Q2.1.766423 -Node: Q2.1.866776 -Node: Q2.1.968310 -Node: Q2.1.1068732 -Node: Q2.1.1169489 -Node: Q2.1.1270354 -Node: Q2.1.1371309 -Node: Q2.1.1472340 -Node: Q2.1.1573451 -Node: Q2.1.1680483 -Node: Q2.1.1781177 -Node: Q2.1.1881774 -Node: Q2.1.1981901 -Node: Q2.1.2082431 -Node: Q2.1.2182813 -Node: Q2.1.2283006 -Node: Q2.1.2384303 -Node: Q2.1.2484971 -Node: Q2.1.2585443 -Node: Customization86078 -Node: Q3.0.190916 -Node: Q3.0.291622 -Node: Q3.0.392186 -Node: Q3.0.492603 -Node: Q3.0.593436 -Node: Q3.0.694217 -Node: Q3.0.794797 -Node: Q3.0.895461 -Node: Q3.0.996419 -Node: Q3.1.196980 -Node: Q3.1.297717 -Node: Q3.1.398148 -Node: Q3.1.498337 -Node: Q3.1.598526 -Node: Q3.1.698910 -Node: Q3.1.799619 -Node: Q3.1.8101843 -Node: Q3.2.1102385 -Node: Q3.2.2104038 -Node: Q3.2.3104837 -Node: Q3.2.4105439 -Node: Q3.2.5106473 -Node: Q3.2.6106940 -Node: Q3.3.1107865 -Node: Q3.3.2108295 -Node: Q3.3.3108926 -Node: Q3.3.4109307 -Node: Q3.3.5110408 -Node: Q3.4.1111902 -Node: Q3.4.2112545 -Node: Q3.5.1113057 -Node: Q3.5.2114506 -Node: Q3.5.3114924 -Node: Q3.5.4115762 -Node: Q3.5.5116594 -Node: Q3.5.6117734 -Node: Q3.5.7118724 -Node: Q3.5.8120164 -Node: Q3.5.9120911 -Node: Q3.5.10121691 -Node: Q3.5.11122327 -Node: Q3.6.1122880 -Node: Q3.6.2123625 -Node: Q3.6.3124053 -Node: Q3.7.1124553 -Node: Q3.7.2125441 -Node: Q3.7.3126100 -Node: Q3.7.4126522 -Node: Q3.7.5126865 -Node: Q3.7.6127333 -Node: Q3.7.7128048 -Node: Q3.7.8129068 -Node: Q3.8.1129487 -Node: Q3.8.2129947 -Node: Q3.8.3130410 -Node: Q3.8.4131016 -Node: Q3.8.5131735 -Node: Q3.9.1132520 -Node: Q3.9.2133460 -Node: Q3.9.3134058 -Node: Q3.9.4134720 -Node: Q3.10.1135599 -Node: Q3.10.2136417 -Node: Q3.10.3137422 -Node: Q3.10.4138150 -Node: Q3.10.5138533 -Node: Subsystems139585 -Node: Q4.0.1142072 -Node: Q4.0.2142597 -Node: Q4.0.3143155 -Node: Q4.0.4143476 -Node: Q4.0.5143718 -Node: Q4.0.6143949 -Node: Q4.0.7144537 -Node: Q4.0.8144862 -Node: Q4.0.9146089 -Node: Q4.0.10148127 -Node: Q4.0.11148616 -Node: Q4.0.12149494 -Node: Q4.1.1150467 -Node: Q4.1.2150870 -Node: Q4.1.3151197 -Node: Q4.2.1151506 -Node: Q4.2.2152136 -Node: Q4.2.3152376 -Node: Q4.2.4152920 -Node: Q4.3.1153573 -Node: Q4.3.2154157 -Node: Q4.3.3155638 -Node: Q4.3.4155910 -Node: Q4.3.5156587 -Node: Q4.4.1157215 -Node: Q4.4.2158701 -Node: Q4.5.1159905 -Node: Q4.6.1160674 -Node: Q4.7.1165934 -Node: Q4.7.2166889 -Node: Q4.7.3167186 -Node: Q4.7.4167372 -Node: Q4.7.5168256 -Node: Q4.7.6169897 -Node: Miscellaneous170186 -Node: Q5.0.1173599 -Node: Q5.0.2174338 -Node: Q5.0.3175192 -Node: Q5.0.4175894 -Node: Q5.0.5176833 -Node: Q5.0.6178813 -Node: Q5.0.7179470 -Node: Q5.0.8180075 -Node: Q5.0.9180594 -Node: Q5.0.10181108 -Node: Q5.0.11181356 -Node: Q5.0.12181894 -Node: Q5.0.13182811 -Node: Q5.0.14183495 -Node: Q5.0.15184260 -Node: Q5.0.16184557 -Node: Q5.0.17185069 -Node: Q5.0.18185334 -Node: Q5.0.19185528 -Node: Q5.0.20185952 -Node: Q5.1.1186867 -Node: Q5.1.2188936 -Node: Q5.1.3189672 -Node: Q5.1.4193066 -Node: Q5.1.5193601 -Node: Q5.1.6195725 -Node: Q5.1.7197211 -Node: Q5.1.8198804 -Node: Q5.1.9199356 -Node: Q5.1.10200241 -Node: Q5.1.11201372 -Node: Q5.2.1201921 -Node: Q5.2.2202491 -Node: Q5.2.3202908 -Node: Q5.2.4203143 -Node: Q5.3.1204053 -Node: Q5.3.2205274 -Node: Q5.3.3206050 -Node: Q5.3.4206534 -Node: Q5.3.5207201 -Node: Q5.3.6208070 -Node: Q5.3.7208315 -Node: Q5.3.8210505 -Node: Q5.3.9210752 -Node: Q5.3.10211705 -Node: Q5.3.11213789 -Node: Q5.3.12215380 -Node: MS Windows216654 -Node: Q6.0.1218131 -Node: Q6.0.2218878 -Node: Q6.0.3219343 -Node: Q6.0.4219623 -Node: Q6.1.1221902 -Node: Q6.1.2222773 -Node: Q6.1.3223228 -Node: Q6.1.4223510 -Node: Q6.1.5223888 -Node: Q6.1.6224756 -Node: Q6.2.1227062 -Node: Q6.2.2227963 -Node: Q6.2.3228375 -Node: Q6.3.1228664 -Node: Q6.3.2229758 -Node: Q6.3.3232939 -Node: Q6.4.1233208 -Node: Current Events234543 -Node: Q7.0.1235197 -Node: Q7.0.2235836 -Node: Q7.0.3236909 -Node: Q7.0.4237137 +Node: Q1.0.1226010 +Node: Q1.0.1326378 +Node: Q1.0.1426627 +Node: Q1.1.127139 +Node: Q1.1.228181 +Node: Q1.1.328574 +Node: Q1.2.129525 +Node: Q1.2.230581 +Node: Q1.2.331015 +Node: Q1.3.132099 +Node: Q1.3.232750 +Node: Q1.3.333214 +Node: Q1.3.433455 +Node: Q1.3.534228 +Node: Q1.3.636633 +Node: Q1.3.738164 +Node: Q1.4.139099 +Node: Q1.4.239961 +Node: Q1.4.340302 +Node: Q1.4.440721 +Node: Q1.4.542261 +Node: Q1.4.642565 +Node: Installation43558 +Node: Q2.0.146133 +Node: Q2.0.246933 +Node: Q2.0.348701 +Node: Q2.0.449999 +Node: Q2.0.550591 +Node: Q2.0.650939 +Node: Q2.0.751320 +Node: Q2.0.851701 +Node: Q2.0.953278 +Node: Q2.0.1054716 +Node: Q2.0.1155560 +Node: Q2.0.1256501 +Node: Q2.0.1358024 +Node: Q2.0.1458513 +Node: Q2.1.159571 +Node: Q2.1.262313 +Node: Q2.1.363490 +Node: Q2.1.464783 +Node: Q2.1.565582 +Node: Q2.1.665944 +Node: Q2.1.766421 +Node: Q2.1.866774 +Node: Q2.1.968308 +Node: Q2.1.1068730 +Node: Q2.1.1169487 +Node: Q2.1.1270352 +Node: Q2.1.1371307 +Node: Q2.1.1472338 +Node: Q2.1.1573449 +Node: Q2.1.1680481 +Node: Q2.1.1781175 +Node: Q2.1.1881772 +Node: Q2.1.1981899 +Node: Q2.1.2082429 +Node: Q2.1.2182811 +Node: Q2.1.2283004 +Node: Q2.1.2384301 +Node: Q2.1.2484969 +Node: Q2.1.2585441 +Node: Customization86076 +Node: Q3.0.190914 +Node: Q3.0.291620 +Node: Q3.0.392184 +Node: Q3.0.492601 +Node: Q3.0.593434 +Node: Q3.0.694215 +Node: Q3.0.794795 +Node: Q3.0.895459 +Node: Q3.0.996417 +Node: Q3.1.196978 +Node: Q3.1.297715 +Node: Q3.1.398146 +Node: Q3.1.498335 +Node: Q3.1.598524 +Node: Q3.1.698908 +Node: Q3.1.799617 +Node: Q3.1.8101841 +Node: Q3.2.1102383 +Node: Q3.2.2104036 +Node: Q3.2.3104835 +Node: Q3.2.4105437 +Node: Q3.2.5106471 +Node: Q3.2.6106938 +Node: Q3.3.1107863 +Node: Q3.3.2108293 +Node: Q3.3.3108924 +Node: Q3.3.4109305 +Node: Q3.3.5110406 +Node: Q3.4.1111900 +Node: Q3.4.2112543 +Node: Q3.5.1113055 +Node: Q3.5.2114504 +Node: Q3.5.3114922 +Node: Q3.5.4115760 +Node: Q3.5.5116592 +Node: Q3.5.6117732 +Node: Q3.5.7118722 +Node: Q3.5.8120162 +Node: Q3.5.9120909 +Node: Q3.5.10121689 +Node: Q3.5.11122325 +Node: Q3.6.1122878 +Node: Q3.6.2123623 +Node: Q3.6.3124051 +Node: Q3.7.1124551 +Node: Q3.7.2125439 +Node: Q3.7.3126098 +Node: Q3.7.4126520 +Node: Q3.7.5126863 +Node: Q3.7.6127331 +Node: Q3.7.7128046 +Node: Q3.7.8129066 +Node: Q3.8.1129485 +Node: Q3.8.2129945 +Node: Q3.8.3130408 +Node: Q3.8.4131014 +Node: Q3.8.5131733 +Node: Q3.9.1132518 +Node: Q3.9.2133458 +Node: Q3.9.3134056 +Node: Q3.9.4134718 +Node: Q3.10.1135597 +Node: Q3.10.2136415 +Node: Q3.10.3137420 +Node: Q3.10.4138148 +Node: Q3.10.5138531 +Node: Subsystems139583 +Node: Q4.0.1142070 +Node: Q4.0.2142595 +Node: Q4.0.3143153 +Node: Q4.0.4143474 +Node: Q4.0.5143716 +Node: Q4.0.6143947 +Node: Q4.0.7144535 +Node: Q4.0.8144860 +Node: Q4.0.9146087 +Node: Q4.0.10148125 +Node: Q4.0.11148614 +Node: Q4.0.12149492 +Node: Q4.1.1150465 +Node: Q4.1.2150868 +Node: Q4.1.3151195 +Node: Q4.2.1151504 +Node: Q4.2.2152134 +Node: Q4.2.3152374 +Node: Q4.2.4152918 +Node: Q4.3.1153571 +Node: Q4.3.2154155 +Node: Q4.3.3155636 +Node: Q4.3.4155908 +Node: Q4.3.5156585 +Node: Q4.4.1157213 +Node: Q4.4.2158699 +Node: Q4.5.1159903 +Node: Q4.6.1160672 +Node: Q4.7.1165932 +Node: Q4.7.2166887 +Node: Q4.7.3167184 +Node: Q4.7.4167370 +Node: Q4.7.5168254 +Node: Q4.7.6169895 +Node: Miscellaneous170184 +Node: Q5.0.1173597 +Node: Q5.0.2174336 +Node: Q5.0.3175190 +Node: Q5.0.4175892 +Node: Q5.0.5176831 +Node: Q5.0.6178811 +Node: Q5.0.7179468 +Node: Q5.0.8180073 +Node: Q5.0.9180592 +Node: Q5.0.10181106 +Node: Q5.0.11181354 +Node: Q5.0.12181892 +Node: Q5.0.13182809 +Node: Q5.0.14183493 +Node: Q5.0.15184258 +Node: Q5.0.16184555 +Node: Q5.0.17185067 +Node: Q5.0.18185332 +Node: Q5.0.19185526 +Node: Q5.0.20185950 +Node: Q5.1.1186865 +Node: Q5.1.2188934 +Node: Q5.1.3189670 +Node: Q5.1.4193064 +Node: Q5.1.5193599 +Node: Q5.1.6195723 +Node: Q5.1.7197209 +Node: Q5.1.8198802 +Node: Q5.1.9199354 +Node: Q5.1.10200239 +Node: Q5.1.11201370 +Node: Q5.2.1201919 +Node: Q5.2.2202489 +Node: Q5.2.3202906 +Node: Q5.2.4203141 +Node: Q5.3.1204051 +Node: Q5.3.2205272 +Node: Q5.3.3206048 +Node: Q5.3.4206532 +Node: Q5.3.5207199 +Node: Q5.3.6208068 +Node: Q5.3.7208313 +Node: Q5.3.8210503 +Node: Q5.3.9210750 +Node: Q5.3.10211703 +Node: Q5.3.11213787 +Node: Q5.3.12215378 +Node: MS Windows216652 +Node: Q6.0.1218129 +Node: Q6.0.2218876 +Node: Q6.0.3219341 +Node: Q6.0.4219621 +Node: Q6.1.1221900 +Node: Q6.1.2222771 +Node: Q6.1.3223226 +Node: Q6.1.4223508 +Node: Q6.1.5223886 +Node: Q6.1.6224754 +Node: Q6.2.1227060 +Node: Q6.2.2227961 +Node: Q6.2.3228373 +Node: Q6.3.1228662 +Node: Q6.3.2229756 +Node: Q6.3.3232937 +Node: Q6.4.1233206 +Node: Current Events234541 +Node: Q7.0.1235195 +Node: Q7.0.2235834 +Node: Q7.0.3236907 +Node: Q7.0.4237135  End Tag Table diff --git a/info/xemacs-faq.info-1 b/info/xemacs-faq.info-1 index 4f6b9b0..6706c9f 100644 --- a/info/xemacs-faq.info-1 +++ b/info/xemacs-faq.info-1 @@ -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 . It's available at -`http://my.ispchannel.com/~pjarvis/xemacs.html'. +`http://homepage.mac.com/pjarvis/xemacs.html'.  File: xemacs-faq.info, Node: Q1.0.12, Next: Q1.0.13, Prev: Q1.0.11, Up: Introduction diff --git a/info/xemacs.info b/info/xemacs.info index 4f518dc..b2ba08b 100644 --- a/info/xemacs.info +++ b/info/xemacs.info @@ -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  Tag Table: (Indirect) @@ -65,367 +65,368 @@ Node: Point44652 Node: Echo Area46619 Node: Mode Line48996 Node: GUI Components53427 -Node: Menubar Basics54657 -Node: Scrollbar Basics56573 -Node: Toolbar Basics57464 -Node: Gutter Basics58131 -Node: Inhibiting60185 -Node: Customizing62556 -Node: XEmacs under X62805 -Node: XEmacs under MS Windows66019 -Node: Keystrokes66434 -Node: Intro to Keystrokes67278 -Node: Representing Keystrokes69381 -Node: Key Sequences70738 -Node: String Key Sequences74079 -Node: Meta Key74462 -Node: Super and Hyper Keys75935 -Node: Character Representation82180 -Node: Commands83200 -Node: Pull-down Menus86049 -Node: File Menu89398 -Node: Edit Menu93220 -Node: Apps Menu95603 -Node: Options Menu96093 -Node: Buffers Menu100111 -Node: Tools Menu100418 -Node: Help Menu100909 -Node: Menu Customization101310 -Node: Entering Emacs105540 -Node: Exiting108437 -Node: Command Switches112910 -Node: Startup Paths122932 -Node: Basic130262 -Node: Inserting Text131666 -Node: Moving Point134662 -Node: Erasing138268 -Node: Basic Files139573 -Node: Basic Help141495 -Node: Blank Lines142090 -Node: Continuation Lines143666 -Node: Position Info145333 -Node: Arguments148749 -Node: Undo152848 -Node: Minibuffer155795 -Node: Minibuffer File158405 -Node: Minibuffer Edit160210 -Node: Completion163151 -Node: Completion Example165082 -Node: Completion Commands166177 -Node: Strict Completion169153 -Node: Completion Options170934 -Node: Minibuffer History172442 -Node: Repetition175626 -Node: M-x178471 -Node: Help183565 -Node: Help Summary184975 -Node: Key Help187761 -Node: Name Help188720 -Node: Apropos191365 -Node: Library Keywords194484 -Node: Help Mode196805 -Node: Misc Help197302 -Node: Mark200450 -Node: Setting Mark202304 -Node: Using Region205426 -Node: Marking Objects206163 -Node: Mark Ring208001 -Node: Mouse Selection209717 -Node: Additional Mouse Operations211724 -Node: Killing215928 -Node: Yanking221564 -Node: Kill Ring222367 -Node: Appending Kills223969 -Node: Earlier Kills226006 -Node: Using X Selections228619 -Node: X Clipboard Selection229869 -Node: X Selection Commands232046 -Node: X Cut Buffers233132 -Node: Active Regions234491 -Node: Accumulating Text239071 -Node: Rectangles242144 -Node: Registers245663 -Node: RegPos247117 -Node: RegText248273 -Node: RegRect249379 -Node: RegConfig250258 -Node: RegNumbers251198 -Node: RegFiles251916 -Node: Bookmarks252574 -Node: Display255946 -Node: Scrolling257441 -Node: Horizontal Scrolling261584 -Node: Selective Display262779 -Node: Display Vars263998 -Node: Search266676 -Node: Incremental Search267869 -Node: Non-Incremental Search276797 -Node: Word Search278239 -Node: Regexp Search279857 -Node: Regexps282227 -Node: Search Case296224 -Node: Replace297005 -Node: Unconditional Replace297953 -Node: Regexp Replace299088 -Node: Replacement and Case300023 -Node: Query Replace301003 -Node: Other Repeating Search304230 -Node: Fixit305485 -Node: Kill Errors306065 -Node: Transpose307398 -Node: Fixing Case309802 -Node: Spelling310448 -Node: Files311909 -Node: File Names313219 -Node: Visiting317556 -Node: Saving324388 -Node: Backup329311 -Node: Backup Names330707 -Node: Backup Deletion332190 -Node: Backup Copying333340 -Node: Interlocking335046 -Node: Reverting339174 -Node: Auto Save341086 -Node: Auto Save Files342053 -Node: Auto Save Control343894 -Node: Recover345732 -Node: Version Control346887 -Node: Concepts of VC348925 -Node: Editing with VC350535 -Node: Variables for Check-in/out355791 -Node: Log Entries357690 -Node: Change Logs and VC358870 -Node: Old Versions362137 -Node: VC Status364140 -Node: Renaming and VC365854 -Node: Snapshots366533 -Node: Making Snapshots367034 -Node: Snapshot Caveats368327 -Node: Version Headers370136 -Node: ListDir372835 -Node: Comparing Files374884 -Node: Dired376417 -Node: Dired Enter377088 -Node: Dired Edit377913 -Node: Dired Deletion379660 -Node: Dired Immed382883 -Node: Misc File Ops384159 -Node: Buffers386647 -Node: Select Buffer388805 -Node: List Buffers390600 -Node: Misc Buffer392358 -Node: Kill Buffer394001 -Node: Several Buffers395131 -Node: Windows398998 -Node: Basic Window399709 -Node: Split Window401428 -Node: Other Window403561 -Node: Pop Up Window405992 -Node: Change Window407497 -Node: Mule410405 -Node: Mule Intro411668 -Node: Language Environments412684 -Node: Input Methods414791 -Node: Select Input Method418511 -Node: Coding Systems420666 -Node: Recognize Coding424852 -Node: Specify Coding428178 -Node: Major Modes433109 -Node: Choosing Modes435328 -Node: Indentation437718 -Node: Indentation Commands439813 -Node: Tab Stops442542 -Node: Just Spaces444391 -Node: Text445206 -Node: Text Mode447189 -Node: Nroff Mode449268 -Node: TeX Mode450911 -Node: TeX Editing453163 -Node: TeX Print456597 -Node: Outline Mode459816 -Node: Outline Format461297 -Node: Outline Motion464097 -Node: Outline Visibility465650 -Node: Words468571 -Node: Sentences471518 -Node: Paragraphs473714 -Node: Pages476002 -Node: Filling478602 -Node: Auto Fill479173 -Node: Fill Commands481320 -Node: Fill Prefix483485 -Node: Case485673 -Node: Programs487701 -Node: Program Modes490251 -Node: Lists492483 -Node: Defuns498323 -Node: Grinding500976 -Node: Basic Indent501604 -Node: Multi-line Indent503625 -Node: Lisp Indent505241 -Node: C Indent508691 -Node: Matching513931 -Node: Comments515453 -Node: Balanced Editing521905 -Node: Lisp Completion522919 -Node: Documentation523934 -Node: Change Log525173 -Node: Tags527751 -Node: Tag Syntax529400 -Node: Create Tags Table533344 -Node: Etags Regexps537404 -Node: Select Tags Table542062 -Node: Find Tag545835 -Node: Tags Search548799 -Node: List Tags552255 -Node: Fortran553284 -Node: Fortran Motion554360 -Node: Fortran Indent555180 -Node: ForIndent Commands555865 -Node: ForIndent Num557010 -Node: ForIndent Conv558284 -Node: ForIndent Vars559060 -Node: Fortran Comments560228 -Node: Fortran Columns563826 -Node: Fortran Abbrev565249 -Node: Asm Mode566158 -Node: Running566710 -Node: Compilation567679 -Node: Lisp Modes572529 -Node: Lisp Libraries573802 -Node: Loading574356 -Node: Compiling Libraries578816 -Node: Mocklisp581707 -Node: Lisp Eval582384 -Node: Lisp Debug586024 -Node: Lisp Interaction591451 -Node: External Lisp592806 -Node: Packages594880 -Node: Package Terminology595735 -Node: Using Packages597093 -Node: Building Packages605971 -Node: Creating Packages608514 -Node: Available Packages613514 -Node: Abbrevs618787 -Node: Defining Abbrevs620986 -Node: Expanding Abbrevs623433 -Node: Editing Abbrevs626135 -Node: Saving Abbrevs628008 -Node: Dynamic Abbrevs629963 -Node: Picture631265 -Node: Basic Picture633698 -Node: Insert in Picture635983 -Node: Tabs in Picture637405 -Node: Rectangles in Picture638926 -Node: Sending Mail640834 -Node: Mail Format642545 -Node: Mail Headers643895 -Node: Mail Mode650303 -Node: Reading Mail653916 -Node: Calendar/Diary655491 -Node: Calendar Motion657165 -Node: Calendar Unit Motion658048 -Node: Move to Beginning or End660371 -Node: Specified Dates661504 -Node: Scroll Calendar662392 -Node: Mark and Region664183 -Node: General Calendar666089 -Node: LaTeX Calendar667697 -Node: Holidays669711 -Node: Sunrise/Sunset672813 -Node: Lunar Phases675852 -Node: Other Calendars677237 -Node: Calendar Systems678724 -Node: To Other Calendar681835 -Node: From Other Calendar683826 -Node: Mayan Calendar686131 -Node: Diary689326 -Node: Diary Commands691075 -Node: Format of Diary File694398 -Node: Date Formats697268 -Node: Adding to Diary699842 -Node: Special Diary Entries701473 -Node: Calendar Customization706812 -Node: Calendar Customizing707674 -Node: Holiday Customizing710909 -Node: Date Display Format717396 -Node: Time Display Format718354 -Node: Daylight Savings719492 -Node: Diary Customizing722680 -Node: Hebrew/Islamic Entries727301 -Node: Fancy Diary Display730641 -Node: Included Diary Files732557 -Node: Sexp Diary Entries733538 -Node: Appt Customizing738628 -Node: Sorting739674 -Node: Shell744480 -Node: Single Shell745773 -Node: Interactive Shell747387 -Node: Shell Mode751152 -Node: Terminal emulator753643 -Node: Term Mode755952 -Node: Paging in Term756866 -Node: Narrowing757664 -Node: Hardcopy759614 -Node: Recursive Edit760586 -Node: Dissociated Press763573 -Node: CONX766136 -Node: Amusements767160 -Node: Emulation767640 -Node: Customization769500 -Node: Minor Modes771316 -Node: Variables772948 -Node: Examining774904 -Node: Easy Customization776365 -Node: Customization Groups777379 -Node: Changing an Option780308 -Node: Face Customization786578 -Node: Specific Customization788342 -Node: Edit Options790949 -Node: Locals792533 -Node: File Variables795712 -Node: Keyboard Macros800262 -Node: Basic Kbd Macro802433 -Node: Save Kbd Macro804365 -Node: Kbd Macro Query806023 -Node: Key Bindings807965 -Node: Keymaps808839 -Node: Rebinding812689 -Node: Interactive Rebinding813388 -Node: Programmatic Rebinding815577 -Node: Key Bindings Using Strings818384 -Node: Disabling820011 -Node: Syntax821790 -Node: Syntax Entry822671 -Node: Syntax Change826755 -Node: Init File828924 -Node: Init Syntax830388 -Node: Init Examples832739 -Node: Terminal Init836929 -Node: Audible Bell838666 -Node: Faces842097 -Node: Frame Components846939 -Node: X Resources847384 -Node: Geometry Resources849043 -Node: Iconic Resources851491 -Node: Resource List851963 -Node: Face Resources858470 -Node: Widgets862147 -Node: Menubar Resources863086 -Node: Quitting864600 -Node: Lossage867578 -Node: Stuck Recursive868222 -Node: Screen Garbled868928 -Node: Text Garbled870062 -Node: Unasked-for Search870701 -Node: Emergency Escape871486 -Node: Total Frustration873265 -Node: Bugs873896 -Node: Glossary883457 -Node: Manifesto915111 -Node: Key Index938588 -Node: Command Index964515 -Node: Variable Index1007101 -Node: Concept Index1023187 +Node: Menubar Basics54708 +Node: Scrollbar Basics56624 +Node: Mode Line Basics57517 +Node: Toolbar Basics58349 +Node: Gutter Basics59016 +Node: Inhibiting61070 +Node: Customizing63441 +Node: XEmacs under X63690 +Node: XEmacs under MS Windows66904 +Node: Keystrokes67319 +Node: Intro to Keystrokes68163 +Node: Representing Keystrokes70266 +Node: Key Sequences71623 +Node: String Key Sequences74964 +Node: Meta Key75347 +Node: Super and Hyper Keys76820 +Node: Character Representation83065 +Node: Commands84085 +Node: Pull-down Menus86934 +Node: File Menu90283 +Node: Edit Menu94105 +Node: Apps Menu96488 +Node: Options Menu96978 +Node: Buffers Menu100996 +Node: Tools Menu101303 +Node: Help Menu101794 +Node: Menu Customization102195 +Node: Entering Emacs106425 +Node: Exiting109322 +Node: Command Switches113795 +Node: Startup Paths123817 +Node: Basic131147 +Node: Inserting Text132551 +Node: Moving Point135547 +Node: Erasing139153 +Node: Basic Files140458 +Node: Basic Help142380 +Node: Blank Lines142975 +Node: Continuation Lines144551 +Node: Position Info146218 +Node: Arguments149634 +Node: Undo153733 +Node: Minibuffer156680 +Node: Minibuffer File159290 +Node: Minibuffer Edit161095 +Node: Completion164036 +Node: Completion Example165967 +Node: Completion Commands167062 +Node: Strict Completion170038 +Node: Completion Options171819 +Node: Minibuffer History173327 +Node: Repetition176511 +Node: M-x179356 +Node: Help184450 +Node: Help Summary185860 +Node: Key Help188646 +Node: Name Help189605 +Node: Apropos192250 +Node: Library Keywords195369 +Node: Help Mode197690 +Node: Misc Help198187 +Node: Mark201335 +Node: Setting Mark203189 +Node: Using Region206311 +Node: Marking Objects207048 +Node: Mark Ring208886 +Node: Mouse Selection210602 +Node: Additional Mouse Operations212609 +Node: Killing216813 +Node: Yanking222449 +Node: Kill Ring223252 +Node: Appending Kills224854 +Node: Earlier Kills226891 +Node: Using X Selections229504 +Node: X Clipboard Selection230754 +Node: X Selection Commands232931 +Node: X Cut Buffers234017 +Node: Active Regions235376 +Node: Accumulating Text239956 +Node: Rectangles243029 +Node: Registers246548 +Node: RegPos248002 +Node: RegText249158 +Node: RegRect250264 +Node: RegConfig251143 +Node: RegNumbers252083 +Node: RegFiles252801 +Node: Bookmarks253459 +Node: Display256831 +Node: Scrolling258326 +Node: Horizontal Scrolling262469 +Node: Selective Display263664 +Node: Display Vars264883 +Node: Search267561 +Node: Incremental Search268754 +Node: Non-Incremental Search277682 +Node: Word Search279124 +Node: Regexp Search280742 +Node: Regexps283112 +Node: Search Case297109 +Node: Replace297890 +Node: Unconditional Replace298838 +Node: Regexp Replace299973 +Node: Replacement and Case300908 +Node: Query Replace301888 +Node: Other Repeating Search305115 +Node: Fixit306370 +Node: Kill Errors306950 +Node: Transpose308283 +Node: Fixing Case310687 +Node: Spelling311333 +Node: Files312794 +Node: File Names314104 +Node: Visiting318441 +Node: Saving325273 +Node: Backup330196 +Node: Backup Names331592 +Node: Backup Deletion333075 +Node: Backup Copying334225 +Node: Interlocking335931 +Node: Reverting340059 +Node: Auto Save341971 +Node: Auto Save Files342938 +Node: Auto Save Control344779 +Node: Recover346617 +Node: Version Control347772 +Node: Concepts of VC349810 +Node: Editing with VC351420 +Node: Variables for Check-in/out356676 +Node: Log Entries358575 +Node: Change Logs and VC359755 +Node: Old Versions363022 +Node: VC Status365025 +Node: Renaming and VC366739 +Node: Snapshots367418 +Node: Making Snapshots367919 +Node: Snapshot Caveats369212 +Node: Version Headers371021 +Node: ListDir373720 +Node: Comparing Files375769 +Node: Dired377302 +Node: Dired Enter377973 +Node: Dired Edit378798 +Node: Dired Deletion380545 +Node: Dired Immed383768 +Node: Misc File Ops385044 +Node: Buffers387532 +Node: Select Buffer389690 +Node: List Buffers391485 +Node: Misc Buffer393243 +Node: Kill Buffer394886 +Node: Several Buffers396016 +Node: Windows399883 +Node: Basic Window400594 +Node: Split Window402313 +Node: Other Window404446 +Node: Pop Up Window406877 +Node: Change Window408382 +Node: Mule411290 +Node: Mule Intro412553 +Node: Language Environments413569 +Node: Input Methods415676 +Node: Select Input Method419396 +Node: Coding Systems421551 +Node: Recognize Coding425737 +Node: Specify Coding429063 +Node: Major Modes433994 +Node: Choosing Modes436213 +Node: Indentation438603 +Node: Indentation Commands440698 +Node: Tab Stops443427 +Node: Just Spaces445276 +Node: Text446091 +Node: Text Mode448074 +Node: Nroff Mode450153 +Node: TeX Mode451796 +Node: TeX Editing454048 +Node: TeX Print457482 +Node: Outline Mode460701 +Node: Outline Format462182 +Node: Outline Motion464982 +Node: Outline Visibility466535 +Node: Words469456 +Node: Sentences472403 +Node: Paragraphs474599 +Node: Pages476887 +Node: Filling479487 +Node: Auto Fill480058 +Node: Fill Commands482205 +Node: Fill Prefix484370 +Node: Case486558 +Node: Programs488586 +Node: Program Modes491136 +Node: Lists493368 +Node: Defuns499208 +Node: Grinding501861 +Node: Basic Indent502489 +Node: Multi-line Indent504510 +Node: Lisp Indent506126 +Node: C Indent509576 +Node: Matching514816 +Node: Comments516338 +Node: Balanced Editing522790 +Node: Lisp Completion523804 +Node: Documentation524819 +Node: Change Log526058 +Node: Tags528636 +Node: Tag Syntax530285 +Node: Create Tags Table534229 +Node: Etags Regexps538289 +Node: Select Tags Table542947 +Node: Find Tag546720 +Node: Tags Search549684 +Node: List Tags553140 +Node: Fortran554169 +Node: Fortran Motion555245 +Node: Fortran Indent556065 +Node: ForIndent Commands556750 +Node: ForIndent Num557895 +Node: ForIndent Conv559169 +Node: ForIndent Vars559945 +Node: Fortran Comments561113 +Node: Fortran Columns564711 +Node: Fortran Abbrev566134 +Node: Asm Mode567043 +Node: Running567595 +Node: Compilation568564 +Node: Lisp Modes573414 +Node: Lisp Libraries574687 +Node: Loading575241 +Node: Compiling Libraries579701 +Node: Mocklisp582592 +Node: Lisp Eval583269 +Node: Lisp Debug586909 +Node: Lisp Interaction592336 +Node: External Lisp593691 +Node: Packages595765 +Node: Package Terminology596620 +Node: Using Packages597978 +Node: Building Packages606856 +Node: Creating Packages609399 +Node: Available Packages614399 +Node: Abbrevs619672 +Node: Defining Abbrevs621871 +Node: Expanding Abbrevs624318 +Node: Editing Abbrevs627020 +Node: Saving Abbrevs628893 +Node: Dynamic Abbrevs630848 +Node: Picture632150 +Node: Basic Picture634583 +Node: Insert in Picture636868 +Node: Tabs in Picture638290 +Node: Rectangles in Picture639811 +Node: Sending Mail641719 +Node: Mail Format643430 +Node: Mail Headers644780 +Node: Mail Mode651188 +Node: Reading Mail654801 +Node: Calendar/Diary656376 +Node: Calendar Motion658050 +Node: Calendar Unit Motion658933 +Node: Move to Beginning or End661256 +Node: Specified Dates662389 +Node: Scroll Calendar663277 +Node: Mark and Region665068 +Node: General Calendar666974 +Node: LaTeX Calendar668582 +Node: Holidays670596 +Node: Sunrise/Sunset673698 +Node: Lunar Phases676737 +Node: Other Calendars678122 +Node: Calendar Systems679609 +Node: To Other Calendar682720 +Node: From Other Calendar684711 +Node: Mayan Calendar687016 +Node: Diary690211 +Node: Diary Commands691960 +Node: Format of Diary File695283 +Node: Date Formats698153 +Node: Adding to Diary700727 +Node: Special Diary Entries702358 +Node: Calendar Customization707697 +Node: Calendar Customizing708559 +Node: Holiday Customizing711794 +Node: Date Display Format718281 +Node: Time Display Format719239 +Node: Daylight Savings720377 +Node: Diary Customizing723565 +Node: Hebrew/Islamic Entries728186 +Node: Fancy Diary Display731526 +Node: Included Diary Files733442 +Node: Sexp Diary Entries734423 +Node: Appt Customizing739513 +Node: Sorting740559 +Node: Shell745365 +Node: Single Shell746658 +Node: Interactive Shell748272 +Node: Shell Mode752037 +Node: Terminal emulator754528 +Node: Term Mode756837 +Node: Paging in Term757751 +Node: Narrowing758549 +Node: Hardcopy760499 +Node: Recursive Edit761471 +Node: Dissociated Press764458 +Node: CONX767021 +Node: Amusements768045 +Node: Emulation768525 +Node: Customization770385 +Node: Minor Modes772201 +Node: Variables773833 +Node: Examining775789 +Node: Easy Customization777250 +Node: Customization Groups778264 +Node: Changing an Option781193 +Node: Face Customization787463 +Node: Specific Customization789227 +Node: Edit Options791834 +Node: Locals793418 +Node: File Variables796597 +Node: Keyboard Macros801147 +Node: Basic Kbd Macro803318 +Node: Save Kbd Macro805250 +Node: Kbd Macro Query806908 +Node: Key Bindings808850 +Node: Keymaps809724 +Node: Rebinding813574 +Node: Interactive Rebinding814273 +Node: Programmatic Rebinding816462 +Node: Key Bindings Using Strings819269 +Node: Disabling820896 +Node: Syntax822675 +Node: Syntax Entry823556 +Node: Syntax Change827640 +Node: Init File829809 +Node: Init Syntax831273 +Node: Init Examples833624 +Node: Terminal Init837814 +Node: Audible Bell839551 +Node: Faces842982 +Node: Frame Components847824 +Node: X Resources848269 +Node: Geometry Resources849928 +Node: Iconic Resources852376 +Node: Resource List852848 +Node: Face Resources859355 +Node: Widgets863032 +Node: Menubar Resources863971 +Node: Quitting865485 +Node: Lossage868463 +Node: Stuck Recursive869107 +Node: Screen Garbled869813 +Node: Text Garbled870947 +Node: Unasked-for Search871586 +Node: Emergency Escape872371 +Node: Total Frustration874150 +Node: Bugs874781 +Node: Glossary884342 +Node: Manifesto915996 +Node: Key Index939473 +Node: Command Index965400 +Node: Variable Index1007986 +Node: Concept Index1024072  End Tag Table diff --git a/info/xemacs.info-2 b/info/xemacs.info-2 index 786e236..f2754c1 100644 --- a/info/xemacs.info-2 +++ b/info/xemacs.info-2 @@ -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'.)  -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.  -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. + + +File: xemacs.info, Node: Toolbar Basics, Next: Gutter Basics, Prev: Mode Line Basics, Up: GUI Components XEmacs Toolbars =============== diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 151a0a1..ca78666 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,7 @@ +2001-01-20 Martin Buchholz + + * XEmacs 21.2.42 "Poseidon" is released. + 2001-01-17 Martin Buchholz * XEmacs 21.2.41 "Polyhymnia" is released. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 26912e7..a50f7c8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,47 @@ +2001-01-20 Martin Buchholz + + * XEmacs 21.2.42 "Poseidon" is released. + +2001-01-12 Andy Piper + + * 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 + + * 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 + + * menubar-items.el (default-menubar): add an entry for modeline + horizontal scrolling in Options -> Display. + +2001-01-17 Steve Youngs + + * package-get.el (package-get-require-signed-base): Set to nil + by default. + 2001-01-17 Martin Buchholz * XEmacs 21.2.41 "Polyhymnia" is released. diff --git a/lisp/gui.el b/lisp/gui.el index 9eb0c79..4d2e3d9 100644 --- a/lisp/gui.el +++ b/lisp/gui.el @@ -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." diff --git a/lisp/menubar-items.el b/lisp/menubar-items.el index 31e54a6..088c499 100644 --- a/lisp/menubar-items.el +++ b/lisp/menubar-items.el @@ -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 diff --git a/lisp/package-get.el b/lisp/package-get.el index 88be9d3..954d099 100644 --- a/lisp/package-get.el +++ b/lisp/package-get.el @@ -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)) diff --git a/lisp/package-net.el b/lisp/package-net.el index 63199c5..015c990 100644 --- a/lisp/package-net.el +++ b/lisp/package-net.el @@ -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. diff --git a/lisp/package-ui.el b/lisp/package-ui.el index 806bcf0..1c5bc13 100644 --- a/lisp/package-ui.el +++ b/lisp/package-ui.el @@ -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 () diff --git a/lisp/packages.el b/lisp/packages.el index 810b1f7..07832ce 100644 --- a/lisp/packages.el +++ b/lisp/packages.el @@ -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.") diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index dfcdbe4..d9e203a 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el @@ -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)))) @@ -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))))) diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog index 39bf349..0d982b7 100644 --- a/lwlib/ChangeLog +++ b/lwlib/ChangeLog @@ -1,3 +1,7 @@ +2001-01-20 Martin Buchholz + + * XEmacs 21.2.42 "Poseidon" is released. + 2001-01-17 Martin Buchholz * XEmacs 21.2.41 "Polyhymnia" is released. diff --git a/man/ChangeLog b/man/ChangeLog index 18db821..da16c29 100644 --- a/man/ChangeLog +++ b/man/ChangeLog @@ -1,3 +1,22 @@ +2001-01-20 Martin Buchholz + + * XEmacs 21.2.42 "Poseidon" is released. + +2001-01-18 Martin Buchholz + + * xemacs-faq.texi (Q1.0.11): Change XEmacs for MacOS URL. + +2001-01-17 Andy Piper + + * internals.texi: some glyph documentation. + +2001-01-16 Didier Verna + + * 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 * XEmacs 21.2.41 "Polyhymnia" is released. @@ -523,7 +542,7 @@ 2000-07-09 Martin Buchholz - * lispref/postgresql.texi: + * lispref/postgresql.texi: - Don't mention ".so" extension. - Make installation instructions more generic. - Mention M-x describe-installation. diff --git a/man/internals/internals.texi b/man/internals/internals.texi index 8cc49ad..db888d1 100644 --- a/man/internals/internals.texi +++ b/man/internals/internals.texi @@ -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 diff --git a/man/xemacs-faq.texi b/man/xemacs-faq.texi index 4f4bdab..690aa76 100644 --- a/man/xemacs-faq.texi +++ b/man/xemacs-faq.texi @@ -7,7 +7,7 @@ @finalout @titlepage @title XEmacs FAQ -@subtitle Frequently asked questions about XEmacs @* Last Modified: $Date: 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 @author Ben Wing @@ -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? diff --git a/man/xemacs/frame.texi b/man/xemacs/frame.texi index 5919818..35e4200 100644 --- a/man/xemacs/frame.texi +++ b/man/xemacs/frame.texi @@ -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. - diff --git a/netinstall/ChangeLog b/netinstall/ChangeLog index 1d8a0b0..d9bd985 100644 --- a/netinstall/ChangeLog +++ b/netinstall/ChangeLog @@ -1,3 +1,12 @@ +2001-01-20 Martin Buchholz + + * XEmacs 21.2.42 "Poseidon" is released. + +2001-01-17 Andy Piper + + * ini.h: move extern "C" to aid win32 compilation. From Fabrice + Popineau. + 2001-01-17 Martin Buchholz * XEmacs 21.2.41 "Polyhymnia" is released. @@ -166,5 +175,5 @@ * 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 $ diff --git a/netinstall/ini.h b/netinstall/ini.h index 6e5eab2..2a2cf88 100644 --- a/netinstall/ini.h +++ b/netinstall/ini.h @@ -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); diff --git a/nt/ChangeLog b/nt/ChangeLog index a42d785..b4ee642 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,7 @@ +2001-01-20 Martin Buchholz + + * XEmacs 21.2.42 "Poseidon" is released. + 2001-01-17 Martin Buchholz * XEmacs 21.2.41 "Polyhymnia" is released. diff --git a/src/.dbxrc b/src/.dbxrc index 13a52eb..4e749e2 100644 --- a/src/.dbxrc +++ b/src/.dbxrc @@ -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 } diff --git a/src/.gdbinit b/src/.gdbinit index 4cf1c3e..e3804b6 100644 --- a/src/.gdbinit +++ b/src/.gdbinit @@ -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. diff --git a/src/ChangeLog b/src/ChangeLog index e05dae0..0df0a61 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,86 @@ +2001-01-20 Martin Buchholz + + * XEmacs 21.2.42 "Poseidon" is released. + +2001-01-20 Martin Buchholz + + * console-x.h: typo fix du jour. Remove #if 0'ed code. + +2001-01-19 Martin Buchholz + + 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 + + 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 + + * gui.h: Fix and add prototypes to fix build problems. + +2001-01-18 Martin Buchholz + + 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 + + * 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 * XEmacs 21.2.41 "Polyhymnia" is released. diff --git a/src/alloc.c b/src/alloc.c index 311eea9..ddd884a 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -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); diff --git a/src/console-x.h b/src/console-x.h index cf2697c..bd36a64 100644 --- a/src/console-x.h +++ b/src/console-x.h @@ -40,17 +40,6 @@ Boston, MA 02111-1307, USA. */ #include #include #include - -#if 0 /* mrb - Xos sux. */ -#ifdef USG -#undef USG /* ####KLUDGE for Solaris 2.2 and up */ -#include -#define USG -#else -#include -#endif -#endif /* 0 */ - #include #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 */ diff --git a/src/fns.c b/src/fns.c index 8cfab15..fc1d700 100644 --- 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; diff --git a/src/glyphs-msw.c b/src/glyphs-msw.c index 7bb3c31..39bb3f4 100644 --- a/src/glyphs-msw.c +++ b/src/glyphs-msw.c @@ -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); } } } diff --git a/src/glyphs-widget.c b/src/glyphs-widget.c index fbba67f..fd754c6 100644 --- a/src/glyphs-widget.c +++ b/src/glyphs-widget.c @@ -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; - } -} - /***************************************************************************** * 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, diff --git a/src/glyphs-x.c b/src/glyphs-x.c index 0451996..f37d3ba 100644 --- a/src/glyphs-x.c +++ b/src/glyphs-x.c @@ -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)); diff --git a/src/glyphs.c b/src/glyphs.c index 73afa1b..7804e03 100644 --- a/src/glyphs.c +++ b/src/glyphs.c @@ -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), diff --git a/src/gui.c b/src/gui.c index 5ec1628..2b4e6df 100644 --- 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 (); diff --git a/src/gui.h b/src/gui.h index 91f9c61..aba8883 100644 --- 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); diff --git a/src/lisp.h b/src/lisp.h index 8352b17..2963e99 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -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) diff --git a/src/lrecord.h b/src/lrecord.h index add2205..3fb3201 100644 --- a/src/lrecord.h +++ b/src/lrecord.h @@ -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 */ }; diff --git a/src/opaque.h b/src/opaque.h index 0350bd7..527ae6b 100644 --- a/src/opaque.h +++ b/src/opaque.h @@ -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; diff --git a/tests/ChangeLog b/tests/ChangeLog index fa9cb3a..117f16b 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2001-01-20 Martin Buchholz + + * XEmacs 21.2.42 "Poseidon" is released. + 2001-01-17 Martin Buchholz * XEmacs 21.2.41 "Polyhymnia" is released. diff --git a/version.sh b/version.sh index 4b4f863..34cd7a2 100644 --- a/version.sh +++ b/version.sh @@ -2,8 +2,8 @@ emacs_is_beta=t emacs_major_version=21 emacs_minor_version=2 -emacs_beta_version=41 -xemacs_codename="Polyhymnia" +emacs_beta_version=42 +xemacs_codename="Poseidon" infodock_major_version=4 infodock_minor_version=0 infodock_build_version=8 -- 1.7.10.4