commit: Document "lifting to Lisp". <87tzjvx8lu.fsf@uwakimon.sk.tsukuba.ac.jp>
16 years, 10 months
Stephen Turnbull
changeset: 4427:cff4ad0ab682b75b3986d85e78722c2667599e3d
tag: tip
user: Stephen J. Turnbull <stephen(a)xemacs.org>
date: Wed Feb 27 14:41:45 2008 +0900
files: man/ChangeLog man/internals/internals.texi
description:
Document "lifting to Lisp". <87tzjvx8lu.fsf(a)uwakimon.sk.tsukuba.ac.jp>
diff -r 515b91f904c1344a690b4ade3989a9cb69348894 -r cff4ad0ab682b75b3986d85e78722c2667599e3d man/ChangeLog
--- a/man/ChangeLog Tue Feb 26 18:02:34 2008 +0100
+++ b/man/ChangeLog Wed Feb 27 14:41:45 2008 +0900
@@ -1,3 +1,15 @@ 2007-12-17 Aidan Kehoe <kehoea@parhasa
+2008-02-27 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * internals/internals.texi (Discussion -- KKCC):
+ (Discussion -- Incremental Collector):
+ New nodes.
+ (Top):
+ (Discussion -- Garbage Collection):
+ (Discussion -- Pure Space):
+ Adjust pointers and menus for new nodes.
+
+ (lrecords): Remark that lcrecords are obsolete.
+
2007-12-17 Aidan Kehoe <kehoea(a)parhasard.net>
* lispref/strings.texi (Formatting Strings):
diff -r 515b91f904c1344a690b4ade3989a9cb69348894 -r cff4ad0ab682b75b3986d85e78722c2667599e3d man/internals/internals.texi
--- a/man/internals/internals.texi Tue Feb 26 18:02:34 2008 +0100
+++ b/man/internals/internals.texi Wed Feb 27 14:41:45 2008 +0900
@@ -740,6 +740,8 @@ Future Work Discussion
Discussion -- Garbage Collection
+* Discussion -- KKCC::
+* Discussion -- Incremental Collector::
* Discussion -- Pure Space::
* Discussion -- Hashtable-Based Marking and Cleanup::
* Discussion -- The Anti-Cons::
@@ -8551,6 +8553,9 @@ more defensive but less efficient and is
[see @file{lrecord.h}]
+@strong{This node needs updating for the ``new garbage collection
+algorithms'' (KKCC) and the ``incremental'' collector.}
+
All lrecords have at the beginning of their structure a @code{struct
lrecord_header}. This just contains a type number and some flags,
including the mark bit. All builtin type numbers are defined as
@@ -8570,6 +8575,9 @@ field used to distinguish one lcrecord f
field used to distinguish one lcrecord from another. (This field is used
only for debugging and could be removed, but the space gain is not
significant.)
+
+@strong{lcrecords are now obsolete when using the write-barrier-based
+collector.}
Simple lrecords are created using @code{ALLOCATE_FIXED_TYPE()}, just
like for other frob blocks. The only change is that the implementation
@@ -28419,12 +28427,82 @@ into the normal Future Work section.
@cindex garbage collection, discussion
@menu
+* Discussion -- KKCC::
+* Discussion -- Incremental Collector::
* Discussion -- Pure Space::
* Discussion -- Hashtable-Based Marking and Cleanup::
* Discussion -- The Anti-Cons::
@end menu
-@node Discussion -- Pure Space, Discussion -- Hashtable-Based Marking and Cleanup, Discussion -- Garbage Collection, Discussion -- Garbage Collection
+@node Discussion -- KKCC, Discussion -- Incremental Collector, Discussion -- Garbage Collection, Discussion -- Garbage Collection
+@subsection Discussion -- KKCC
+@cindex discussion, KKCC
+@cindex KKCC, discussion
+
+KKCC is the tag used for the ``new garbage collector algorithms,'' which
+are a refactoring of the garbage collector to make trying new collectors
+simpler.
+
+@node Discussion -- Incremental Collector, Discussion -- Pure Space, Discussion -- KKCC, Discussion -- Garbage Collection
+@subsection Discussion -- Incremental Collector
+@cindex discussion, Incremental Collector
+@cindex Incremental Collector, discussion
+
+The incremental collector is designed to allow better ``realtime''
+performance by not requiring a full mark and sweep pass. This also
+allows removal of most finalizers, as described in
+@samp{<vpd8x1fomdx.fsf@(a)informatik.uni-tuebingen.de>} by Marcus Crestani
+on xemacs-beta:
+
+I was able to nuke many finalizers by transforming
+separately allocated data structures to Lisp objects. Some of the
+remaining finalizers are also likely to go away, as soon as I (or
+someone else) find the time to ``lift'' the remaining, separately allocated
+objects to Lisp objects.
+
+Unfortunately, the current Lisp object layout leads to holes in the
+write barrier: Not all data structures that contain pointers to Lisp
+objects are allocated on the Lisp heap. Some Lisp objects do not carry
+all their information in the object itself. External parts are kept in
+separately allocated memory blocks that are not managed by the new Lisp
+allocator. Examples for these objects are hash tables and dynamic
+arrays, two objects that can dynamically grow and shrink. The separate
+memory blocks are not guaranteed to reside on page boundaries, and thus
+cannot be watched by the write barrier.
+
+Moreover, the separate parts can contain live pointers to other Lisp
+objects. These pointers are not covered by the write barrier and
+modifications by the client during garbage collection do escape. In
+this case, the client changes the connectivity of the reachability
+graph behind the collector's back, which eventually leads to erroneous
+collection of live objects. To solve this problem, I transformed the
+separately allocated parts to fully qualified Lisp objects that are
+managed by the allocator and thus are covered by the write barrier.
+This also removes a lot of special allocation and removal code for the
+out-sourced parts. Generally, allocating all data structures that
+contain pointers to Lisp objects on one heap makes the whole memory
+layout more consistent.
+
+A large part of the patch converts these data structures to Lisp
+objects. The conversion of an additionally allocated data structure to
+an Lisp objects includes:
+@itemize
+@item Add new object type to @samp{enum lrecord_type} in @file{lrecord.h}.
+@item Add @samp{lrecord_header} to the object's struct.
+@item Add @samp{DECLARE_RECORD()}/@samp{XFOO}/etc. below the struct definition.
+@item Add lrecord definition.
+@item Change allocation with malloc to allocation with new allocator.
+@item Add object to @samp{syms_of_*()}.
+@item Change memory description of parent object.
+@item Modify finalizer, free, or delete functions.
+@end itemize
+
+The initial motivation for this is the write barrier and the consistent
+format for all objects that may contain Lisp pointers. That we can get
+rid of finalizers this way follows naturally.
+
+
+@node Discussion -- Pure Space, Discussion -- Hashtable-Based Marking and Cleanup, Discussion -- Incremental Collector, Discussion -- Garbage Collection
@subsection Discussion -- Pure Space
@cindex discussion, pure space
@cindex pure space, discussion
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
[AC web] Fix typo.
16 years, 10 months
Stephen J. Turnbull
APPROVE CCOMMIT web
Index: About/ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacsweb/About/ChangeLog,v
retrieving revision 1.220
diff -u -U0 -r1.220 ChangeLog
--- About/ChangeLog 20 Feb 2008 05:08:39 -0000 1.220
+++ About/ChangeLog 27 Feb 2008 04:45:57 -0000
@@ -0,0 +1,4 @@
+2008-02-27 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacsVsGNUemacs.content: Fix a typo. Thanks to Jerry James.
+
Index: About/XEmacsVsGNUemacs.content
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacsweb/About/XEmacsVsGNUemacs.content,v
retrieving revision 1.10
diff -u -r1.10 XEmacsVsGNUemacs.content
--- About/XEmacsVsGNUemacs.content 20 Feb 2008 05:08:40 -0000 1.10
+++ About/XEmacsVsGNUemacs.content 27 Feb 2008 04:46:03 -0000
@@ -141,7 +141,7 @@
characters), but characters are not integers. GNU Emacs 19,
XEmacs 19, Mule 2.3 (an extensive patch to GNU Emacs 18.55 and
19.x), and GNU Emacs 20--22 (incorporating Mule 3 and later Mule 4)
- represent them as integers. [GNU Emacs 23 may bet a character type.]
+ represent them as integers. [GNU Emacs 23 may get a character type.]
</p>
<p>
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
Re: Add support for a compare-fn in add-to-list
16 years, 10 months
Stephen J. Turnbull
Brian Palmer writes:
> (if (member* element (symbol-value list-var)
>
> > :test (or compare-fn #'equal))
>
>
> Since subr.el is dumped before cl.el, I wanted to make sure that if anything
> pre-CL did call add-to-list, it'd at least work if they avoided the :test
> case. But nothing seems to, so I suppose this would be safe?
Hm, that's a good point. On the other hand, add-to-list is a pretty
userland kind of function. Maybe it should be moved later. Also,
member* is defined as a compiler macro; it would be nice if that could
be used.
> > Do we have any use cases for :test functions other than member?
>
> Emacs also seems to offer a memql, but I'm not sure how much use it is other
> than completism.
A "use case" is real code, not an accident of API. I'll take that as
a "no". ;-)
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
commit: Fix specifier inheritance behavior
16 years, 10 months
Didier Verna
changeset: 4426:515b91f904c1344a690b4ade3989a9cb69348894
tag: tip
user: Didier Verna <didier(a)xemacs.org>
date: Tue Feb 26 18:02:34 2008 +0100
files: src/ChangeLog src/glyphs.c src/objects.c src/specifier.c
description:
Fix specifier inheritance behavior
This patch ensures that no fallback is used if so requested, when the
specifier instantiation process involves inheritance (for instance, a face
[property] inheriting from another face [property]).
diff -r bfb8a26de3cbbf131d3b8ec8d30862aef96de7fc -r 515b91f904c1344a690b4ade3989a9cb69348894 src/ChangeLog
--- a/src/ChangeLog Sat Feb 23 14:32:19 2008 +0100
+++ b/src/ChangeLog Tue Feb 26 18:02:34 2008 +0100
@@ -1,6 +1,20 @@ 2008-02-11 Aidan Kehoe <kehoea@parhasa
+2008-02-26 Didier Verna <didier(a)xemacs.org>
+
+ * specifier.c (CHECK_INSTANCE_ENTRY): See below.
+ * specifier.c (specifier_instance_1): Propagate the no_fallback
+ flag to ...
+ * specifier.c (specifier_instance_from_inst_list): ... here, and
+ in turn propagate it to the <specifier>_instantiate methods.
+ * glyphs.c (image_instantiate): Handle the no_fallback flag.
+ * objects.c (color_instantiate): Ditto.
+ * objects.c (font_instantiate): Ditto.
+ * objects.c (face_boolean_instantiate): Ditto.
+ * specifier.c (specifier_matching_foo_from_inst_list): Update call
+ to specifier_instance_from_inst_list accordingly.
+
2008-02-11 Aidan Kehoe <kehoea(a)parhasard.net>
- * search.c (search_buffer):
+ * search.c (search_buffer):
In the event that a character is not representable in the buffer,
fail immediately. Prevents an assertion failure in the code to
deal with whether Boyer-Moore search can be used for such
@@ -21,16 +35,16 @@ 2008-02-01 Jerry James <james(a)xemacs.o
2008-01-30 Aidan Kehoe <kehoea(a)parhasard.net>
- * search.c (debug-xemacs-searches):
+ * search.c (debug-xemacs-searches):
New variable, available on debug builds. Used in
- tests/automated/case-tests.el.
+ tests/automated/case-tests.el.
(search_buffer): Only store the charset_base for characters with
translations. Correct some comments, correct some checks. If
- debug_xemacs_searches is non-zero, record which search was used.
+ debug_xemacs_searches is non-zero, record which search was used.
(boyer_moore): Remove an assertion that was incorrect. Remove its
documentation. Correct an assertion dealing with equivalence
tables; we may end up looking through the equivalence table if a
- non-ASCII non-case character was searched for.
+ non-ASCII non-case character was searched for.
2008-01-25 Michael Sperber <mike(a)xemacs.org>
@@ -43,13 +57,13 @@ 2008-01-24 Mike Sperber <mike(a)xemacs.o
2008-01-21 Aidan Kehoe <kehoea(a)parhasard.net>
- * elhash.c (Fputhash): Document the return value.
- (Fclrhash): Ditto.
+ * elhash.c (Fputhash): Document the return value.
+ (Fclrhash): Ditto.
2007-12-26 Aidan Kehoe <kehoea(a)parhasard.net>
* casetab.c:
- Extend and correct some case table documentation.
+ Extend and correct some case table documentation.
* search.c (search_buffer):
Correct a bug where only the first entry for a character in the
case equivalence table was examined in determining if the
@@ -64,7 +78,7 @@ 2007-12-26 Aidan Kehoe <kehoea@parhasa
* search.c (boyer_moore):
Assert that we haven't been passed a string with varying
characters sets or rows within character sets. That's what
- simple_search is for.
+ simple_search is for.
In the very rare event that a character in the search string has a
canonical case mapping that is not in the same character set and
@@ -74,14 +88,14 @@ 2007-12-26 Aidan Kehoe <kehoea@parhasa
Do not search for any character case mappings that cannot possibly
occur in the buffer, given the buffer metadata about its
- contents.
+ contents.
2008-01-19 Aidan Kehoe <kehoea(a)parhasard.net>
* dired.c (Ffile_attributes): If bignums are available, use them
for the file size when necessary. If they are not, be clearer
about the check for whether the file size can fit in a Lisp
- integer.
+ integer.
2008-01-18 Jerry James <james(a)xemacs.org>
@@ -99,30 +113,30 @@ 2008-01-15 Aidan Kehoe <kehoea@parhasa
* print.c (prin1_to_string): New.
The guts of Fprin1_to_string, without resetting
- Vprint_gensym_alist.
- (Fprin1_to_string):
+ Vprint_gensym_alist.
+ (Fprin1_to_string):
Call prin1_to_string, wrapped with RESET_PRINT_GENSYM calls.
- * doprnt.c (emacs_doprnt_1):
+ * doprnt.c (emacs_doprnt_1):
Call prin1_to_string, not Fprin1_to_string (dos veces). Avoids an
- inappropriate reset of print-gensym-alist.
+ inappropriate reset of print-gensym-alist.
2008-01-12 Aidan Kehoe <kehoea(a)parhasard.net>
- * rangetab.c (Fmap_range_table):
+ * rangetab.c (Fmap_range_table):
Clarify docstring. (If FUNCTION doesn't touch any range-table
entry, things will also be correct.)
2008-01-09 Aidan Kehoe <kehoea(a)parhasard.net>
- * config.h.in:
+ * config.h.in:
Check that __STDC_VERSION__ is defined before examining its
- value. Eliminates a Cygwin warning.
+ value. Eliminates a Cygwin warning.
2008-01-08 Aidan Kehoe <kehoea(a)parhasard.net>
* text.h (MAX_XETCHAR_SIZE): Remove, eliminating a redefinition
warning on Win32.
- * dumper.c (pdump_load):
+ * dumper.c (pdump_load):
Don't use PATH_MAX_EXTERNAL, instead allocate enough for the path
+ DUMP_SLACK (space for .dmp and version information), already
used on Win32 and #defined to be 100.
@@ -138,7 +152,7 @@ 2008-01-03 Aidan Kehoe <kehoea@parhasa
2008-01-03 Aidan Kehoe <kehoea(a)parhasard.net>
* fileio.c (Fmake_temp_name): Correct the comment to cross
- reference to make-temp-file, and not to this function.
+ reference to make-temp-file, and not to this function.
2008-01-03 Stephen J. Turnbull <stephen(a)xemacs.org>
@@ -146,8 +160,8 @@ 2008-01-03 Stephen J. Turnbull <stephe
2008-01-02 Aidan Kehoe <kehoea(a)parhasard.net>
- * emacs.c (main_1):
- Call the new vars_of_console_gtk function.
+ * emacs.c (main_1):
+ Call the new vars_of_console_gtk function.
* console-gtk.c (vars_of_console_gtk): New.
* console-gtk.c (gtk_perhaps_init_unseen_key_defaults):
Correct the initialisation of the hash table, on the model of the
@@ -157,7 +171,7 @@ 2008-01-02 Aidan Kehoe <kehoea@parhasa
* doc.c (Fbuilt_in_symbol_file):
Don't check is fun zero in the condition, check that it's not
- nil. Fixes the union build; thank you Stephen.
+ nil. Fixes the union build; thank you Stephen.
2008-01-02 Mike Sperber <mike(a)xemacs.org>
@@ -176,31 +190,31 @@ 2007-12-30 Aidan Kehoe <kehoea@parhasa
2007-12-24 Aidan Kehoe <kehoea(a)parhasard.net>
- * event-xlike-inc.c (x_keysym_to_character):
+ * event-xlike-inc.c (x_keysym_to_character):
* event-xlike-inc.c (gtk_keysym_to_character):
Unify the typed character if possible, following the current value
- for the unicode precedence list.
+ for the unicode precedence list.
2007-12-24 Aidan Kehoe <kehoea(a)parhasard.net>
- * symbols.c (Fintern_soft):
+ * symbols.c (Fintern_soft):
Provide a new optional third argument, DEFAULT, for those who want
to check if "nil" is a symbol or not. (More realistically, general
code that may get handed "nil" should probably use this argument.)
2007-12-23 Aidan Kehoe <kehoea(a)parhasard.net>
- * objects-tty.c (tty_find_charset_font):
+ * objects-tty.c (tty_find_charset_font):
* objects-msw.c (mswindows_font_spec_matches_charset_stage_2):
* objects-msw.c (mswindows_font_spec_matches_charset_stage_1):
- * objects-xlike-inc.c (x_font_spec_matches_charset):
+ * objects-xlike-inc.c (x_font_spec_matches_charset):
* objects-xlike-inc.c (gtk_font_spec_matches_charset):
If the charset is not specified when calling the
font_spec_matches_charset device method, its value is Qnil, not
Qunbound. See
http://mid.gmane.org/E1EfbmW-00029r-5G@iwi191.iwi.uni-sb.de and
Ben Wing's patch of
- http://mid.gmane.org/439FA06B.3090007@xemacs.org.
+ http://mid.gmane.org/439FA06B.3090007@xemacs.org.
2007-12-22 Aidan Kehoe <kehoea(a)parhasard.net>
@@ -212,7 +226,7 @@ 2007-12-22 Aidan Kehoe <kehoea@parhasa
that's a great idea.
* database.c (print_database):
Give the coding system used for text conversion when printing a
- database object.
+ database object.
2007-12-20 Jerry James <james(a)xemacs.org>
@@ -228,11 +242,11 @@ 2007-12-18 Aidan Kehoe <kehoea@parhasa
* symbols.c (Fspecial_form_p):
Following commentary from Jerry James, don't error if not passed a
- subr.
+ subr.
Flesh out the docstring; give details of what a subr is, what a
special form is, and why one should probably not write special
- forms oneself.
+ forms oneself.
2007-12-18 Aidan Kehoe <kehoea(a)parhasard.net>
@@ -246,9 +260,9 @@ 2007-12-17 Aidan Kehoe <kehoea@parhasa
Add support for formatted printing of both longs and bignums as
base 2.
* editfns.c (Fformat):
- Document the new %b escape for #'format.
+ Document the new %b escape for #'format.
* lisp.h:
- Make ulong_to_bit_string available beside long_to_string.
+ Make ulong_to_bit_string available beside long_to_string.
* lread.c:
Fix a bug where the integer base was being ignored in certain
contexts; thank you Sebastian Freundt. This is necessary for
@@ -256,18 +270,18 @@ 2007-12-17 Aidan Kehoe <kehoea@parhasa
#'bit-vector-to-integer, just added to subr.el
* print.c (ulong_to_bit_string): New.
Analagous to long_to_string, but used all the time when %b is
- encountered, since we can't pass that to sprintf.
+ encountered, since we can't pass that to sprintf.
2007-12-12 Aidan Kehoe <kehoea(a)parhasard.net>
* config.h.in:
- Make the results of the checks for
+ Make the results of the checks for
FcConfigGetRescanInterval, FcConfigSetRescanInterval
available.
* font-mgr.h:
If FcConfigSetRescanInterval and FcConfigGetRescanInterval are not
available as functions, #define them to map to their old
- misspelled names.
+ misspelled names.
* font-mgr.c (Ffc_config_get_rescan_interval):
* font-mgr.c (Ffc_config_set_rescan_interval):
Use the correct spelling in
@@ -275,7 +289,7 @@ 2007-12-12 Aidan Kehoe <kehoea@parhasa
2007-12-11 Aidan Kehoe <kehoea(a)parhasard.net>
- * glyphs-eimage.c:
+ * glyphs-eimage.c:
Merge Ron Isaacson's patch of
3ggprxj7ifh.wl_Ron.Isaacson(a)morganstanley.com , originally from
Gennady Khokhorin. Prevents library incompatibilities on Win32.
@@ -314,7 +328,7 @@ 2007-12-04 Aidan Kehoe <kehoea@parhasa
coding systems) and make_coding_system_1 (which has to).
* file-coding.c (Ffind_coding_system):
Move the implementation to find_coding_system; call that function
- with a do_autoloads argument of 1.
+ with a do_autoloads argument of 1.
* file-coding.c (Fautoload_coding_system):
New.
* file-coding.c (add_coding_system_to_list_mapper):
@@ -331,21 +345,21 @@ 2007-12-04 Aidan Kehoe <kehoea@parhasa
system as its argument.
This is also tied in with the POSIX locale infrastructure by means
- of posix-charset-to-coding-system-hash.
+ of posix-charset-to-coding-system-hash.
2007-11-29 Aidan Kehoe <kehoea(a)parhasard.net>
* mule-ccl.c (ccl_driver):
- Take out a static variable I was using for debugging.
+ Take out a static variable I was using for debugging.
2007-11-26 Aidan Kehoe <kehoea(a)parhasard.net>
- * doprnt.c:
+ * doprnt.c:
Default to a buffer size of 350 for the sprintf call, but increase
it if the precision and minwidth indicate that it should be
bigger. Issue reported by Hans de Graaff; bug originally fixed by
Sebastian Freundt in SXEmacs following the change I merged on
- 2006-11-28. Forks have their disadvantages.
+ 2006-11-28. Forks have their disadvantages.
2007-11-11 Mats Lidell <matsl(a)xemacs.org>
@@ -367,18 +381,18 @@ 2007-11-14 Aidan Kehoe <kehoea@parhasa
* lread.c (read_unicode_escape):
Correct the range check for Unicode characters specified with
- source-level escapes.
+ source-level escapes.
* unicode.c:
* unicode.c (unicode_to_ichar):
* unicode.c (coding_system_type_create_unicode):
Correct the dump behaviour for just-in-time Unicode code
points. Update the docstring for #'unicode-to-char to indicate
- that code points will run out above around 400,000 in a session.
+ that code points will run out above around 400,000 in a session.
2007-11-14 Aidan Kehoe <kehoea(a)parhasard.net>
* editfns.c (vars_of_editfns):
- Correct the docstring of user-full-name.
+ Correct the docstring of user-full-name.
* fileio.c:
* fileio.c (Fmake_temp_name):
Document that make-temp-file is available and the best approach to
@@ -387,10 +401,10 @@ 2007-11-14 Aidan Kehoe <kehoea@parhasa
Take a new arg, MUSTBENEW, to error if the file to be written
already exists.
* fileio.c (auto_save_1):
- Update a call to Fwrite_region_internal to pass the new argument.
+ Update a call to Fwrite_region_internal to pass the new argument.
* fileio.c (syms_of_fileio):
Provide 'excl as a symbol, for the calls to
- write-region-internal.
+ write-region-internal.
2007-11-05 Didier Verna <didier(a)xemacs.org>
diff -r bfb8a26de3cbbf131d3b8ec8d30862aef96de7fc -r 515b91f904c1344a690b4ade3989a9cb69348894 src/glyphs.c
--- a/src/glyphs.c Sat Feb 23 14:32:19 2008 +0100
+++ b/src/glyphs.c Tue Feb 26 18:02:34 2008 +0100
@@ -3259,7 +3259,7 @@ static Lisp_Object
static Lisp_Object
image_instantiate (Lisp_Object specifier, Lisp_Object UNUSED (matchspec),
Lisp_Object domain, Lisp_Object instantiator,
- Lisp_Object depth)
+ Lisp_Object depth, int no_fallback)
{
Lisp_Object glyph = IMAGE_SPECIFIER_ATTACHEE (XIMAGE_SPECIFIER (specifier));
int dest_mask = XIMAGE_SPECIFIER_ALLOWED (specifier);
@@ -3298,7 +3298,7 @@ image_instantiate (Lisp_Object specifier
assert (XVECTOR_LENGTH (instantiator) == 3);
return (FACE_PROPERTY_INSTANCE
(Fget_face (XVECTOR_DATA (instantiator)[2]),
- Qbackground_pixmap, domain, 1, depth));
+ Qbackground_pixmap, domain, no_fallback, depth));
}
else
{
diff -r bfb8a26de3cbbf131d3b8ec8d30862aef96de7fc -r 515b91f904c1344a690b4ade3989a9cb69348894 src/objects.c
--- a/src/objects.c Sat Feb 23 14:32:19 2008 +0100
+++ b/src/objects.c Tue Feb 26 18:02:34 2008 +0100
@@ -103,7 +103,7 @@ print_color_instance (Lisp_Object obj, L
Lisp_Color_Instance *c = XCOLOR_INSTANCE (obj);
if (print_readably)
printing_unreadable_object ("#<color-instance 0x%x>",
- c->header.uid);
+ c->header.uid);
write_fmt_string_lisp (printcharfun, "#<color-instance %s", 1, c->name);
write_fmt_string_lisp (printcharfun, " on %s", 1, c->device);
if (!NILP (c->device)) /* Vthe_null_color_instance */
@@ -153,7 +153,7 @@ DEFINE_LRECORD_IMPLEMENTATION ("color-in
0, /*dumpable-flag*/
mark_color_instance, print_color_instance,
finalize_color_instance, color_instance_equal,
- color_instance_hash,
+ color_instance_hash,
color_instance_description,
Lisp_Color_Instance);
@@ -295,7 +295,7 @@ static const struct memory_description f
{ XD_LISP_OBJECT, offsetof (Lisp_Font_Instance, truename)},
{ XD_LISP_OBJECT, offsetof (Lisp_Font_Instance, device)},
{ XD_LISP_OBJECT, offsetof (Lisp_Font_Instance, charset)},
- { XD_UNION, offsetof (Lisp_Font_Instance, data),
+ { XD_UNION, offsetof (Lisp_Font_Instance, data),
XD_INDIRECT (0, 0), { &font_instance_data_description } },
{ XD_END }
};
@@ -596,7 +596,7 @@ static Lisp_Object
static Lisp_Object
color_instantiate (Lisp_Object specifier, Lisp_Object UNUSED (matchspec),
Lisp_Object domain, Lisp_Object instantiator,
- Lisp_Object depth)
+ Lisp_Object depth, int no_fallback)
{
/* When called, we're inside of call_with_suspended_errors(),
so we can freely error. */
@@ -606,10 +606,10 @@ color_instantiate (Lisp_Object specifier
if (COLOR_INSTANCEP (instantiator))
{
/* If we are on the same device then we're done. Otherwise change
- the instantiator to the name used to generate the pixel and let the
- STRINGP case deal with it. */
+ the instantiator to the name used to generate the pixel and let the
+ STRINGP case deal with it. */
if (NILP (device) /* Vthe_null_color_instance */
- || EQ (device, XCOLOR_INSTANCE (instantiator)->device))
+ || EQ (device, XCOLOR_INSTANCE (instantiator)->device))
return instantiator;
else
instantiator = Fcolor_instance_name (instantiator);
@@ -647,13 +647,15 @@ color_instantiate (Lisp_Object specifier
instantiator);
return (FACE_PROPERTY_INSTANCE_1
(Fget_face (XVECTOR_DATA (instantiator)[0]),
- COLOR_SPECIFIER_FACE_PROPERTY (XCOLOR_SPECIFIER (specifier)),
- domain, ERROR_ME, 0, depth));
+ COLOR_SPECIFIER_FACE_PROPERTY
+ (XCOLOR_SPECIFIER (specifier)),
+ domain, ERROR_ME, no_fallback, depth));
case 2:
return (FACE_PROPERTY_INSTANCE_1
(Fget_face (XVECTOR_DATA (instantiator)[0]),
- XVECTOR_DATA (instantiator)[1], domain, ERROR_ME, 0, depth));
+ XVECTOR_DATA (instantiator)[1], domain, ERROR_ME,
+ no_fallback, depth));
default:
ABORT ();
@@ -830,11 +832,11 @@ invalidate_charset_font_caches (Lisp_Obj
hash_table = Fgethash (charset, d->charset_font_cache_stage_1,
Qunbound);
if (!UNBOUNDP (hash_table))
- Fclrhash (hash_table);
+ Fclrhash (hash_table);
hash_table = Fgethash (charset, d->charset_font_cache_stage_2,
Qunbound);
if (!UNBOUNDP (hash_table))
- Fclrhash (hash_table);
+ Fclrhash (hash_table);
}
}
@@ -845,7 +847,7 @@ font_instantiate (Lisp_Object UNUSED (sp
font_instantiate (Lisp_Object UNUSED (specifier),
Lisp_Object USED_IF_MULE (matchspec),
Lisp_Object domain, Lisp_Object instantiator,
- Lisp_Object depth)
+ Lisp_Object depth, int no_fallback)
{
/* When called, we're inside of call_with_suspended_errors(),
so we can freely error. */
@@ -877,7 +879,7 @@ font_instantiate (Lisp_Object UNUSED (sp
if (FONT_INSTANCEP (instantiator))
{
if (NILP (device)
- || EQ (device, XFONT_INSTANCE (instantiator)->device))
+ || EQ (device, XFONT_INSTANCE (instantiator)->device))
{
#ifdef MULE
if (font_spec_matches_charset (d, charset, 0,
@@ -895,7 +897,7 @@ font_instantiate (Lisp_Object UNUSED (sp
#ifdef MULE
/* #### rename these caches. */
Lisp_Object cache = stage ? d->charset_font_cache_stage_2 :
- d->charset_font_cache_stage_1;
+ d->charset_font_cache_stage_1;
#else
Lisp_Object cache = d->font_instance_cache;
#endif
@@ -926,9 +928,9 @@ font_instantiate (Lisp_Object UNUSED (sp
{
/* make sure we cache the failures, too. */
matching_font =
- DEVMETH_OR_GIVEN (d, find_charset_font,
- (device, instantiator, charset, stage),
- instantiator);
+ DEVMETH_OR_GIVEN (d, find_charset_font,
+ (device, instantiator, charset, stage),
+ instantiator);
Fputhash (instantiator, matching_font, hash_table);
}
if (NILP (matching_font))
@@ -956,13 +958,13 @@ font_instantiate (Lisp_Object UNUSED (sp
match_inst = face_property_matching_instance
(Fget_face (XVECTOR_DATA (instantiator)[0]), Qfont,
- charset, domain, ERROR_ME, 0, depth, initial);
-
- if (UNBOUNDP(match_inst))
+ charset, domain, ERROR_ME, no_fallback, depth, initial);
+
+ if (UNBOUNDP(match_inst))
{
match_inst = face_property_matching_instance
(Fget_face (XVECTOR_DATA (instantiator)[0]), Qfont,
- charset, domain, ERROR_ME, 0, depth, final);
+ charset, domain, ERROR_ME, no_fallback, depth, final);
}
return match_inst;
@@ -1067,7 +1069,7 @@ face_boolean_instantiate (Lisp_Object sp
face_boolean_instantiate (Lisp_Object specifier,
Lisp_Object UNUSED (matchspec),
Lisp_Object domain, Lisp_Object instantiator,
- Lisp_Object depth)
+ Lisp_Object depth, int no_fallback)
{
/* When called, we're inside of call_with_suspended_errors(),
so we can freely error. */
@@ -1094,7 +1096,7 @@ face_boolean_instantiate (Lisp_Object sp
retval = (FACE_PROPERTY_INSTANCE_1
(Fget_face (XVECTOR_DATA (instantiator)[0]),
- prop, domain, ERROR_ME, 0, depth));
+ prop, domain, ERROR_ME, no_fallback, depth));
if (instantiator_len == 3 && !NILP (XVECTOR_DATA (instantiator)[2]))
retval = NILP (retval) ? Qt : Qnil;
diff -r bfb8a26de3cbbf131d3b8ec8d30862aef96de7fc -r 515b91f904c1344a690b4ade3989a9cb69348894 src/specifier.c
--- a/src/specifier.c Sat Feb 23 14:32:19 2008 +0100
+++ b/src/specifier.c Tue Feb 26 18:02:34 2008 +0100
@@ -247,7 +247,7 @@ prune_specifiers (void)
{
Lisp_Specifier* sp = XSPECIFIER (rest);
/* A bit of assertion that we're removing both parts of the
- magic one altogether */
+ magic one altogether */
assert (!MAGIC_SPECIFIER_P(sp)
|| (BODILY_SPECIFIER_P(sp) && marked_p (sp->fallback))
|| (GHOST_SPECIFIER_P(sp) && marked_p (sp->magic_parent)));
@@ -386,10 +386,10 @@ static const struct memory_description s
};
#ifdef NEW_GC
-DEFINE_LRECORD_IMPLEMENTATION ("specifier-caching",
+DEFINE_LRECORD_IMPLEMENTATION ("specifier-caching",
specifier_caching,
1, /*dumpable-flag*/
- 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
specifier_caching_description_1,
struct specifier_caching);
#else /* not NEW_GC */
@@ -695,7 +695,7 @@ instantiated in.
? Qt : Qnil;
}
-DEFUN ("valid-specifier-locale-type-p", Fvalid_specifier_locale_type_p, 1,
+DEFUN ("valid-specifier-locale-type-p", Fvalid_specifier_locale_type_p, 1,
1, 0, /*
Given a specifier LOCALE-TYPE, return non-nil if it is valid.
Valid locale types are `global', `device', `frame', `window', and `buffer'.
@@ -983,8 +983,8 @@ device_matches_specifier_tag_set_p (Lisp
static int
charset_matches_specifier_tag_set_p (Lisp_Object charset,
- Lisp_Object tag_set,
- enum font_specifier_matchspec_stages
+ Lisp_Object tag_set,
+ enum font_specifier_matchspec_stages
stage)
{
Lisp_Object rest;
@@ -998,20 +998,20 @@ charset_matches_specifier_tag_set_p (Lis
Lisp_Object assoc;
/* In the event that, during the creation of a charset, no specifier
- tags exist for which CHARSET-PREDICATE has been specified, then
- that charset's entry in Vcharset_tag_lists will be nil, and this
- charset shouldn't match. */
-
- if (NILP (XVECTOR_DATA(Vcharset_tag_lists)[XCHARSET_LEADING_BYTE(charset)
- - MIN_LEADING_BYTE]))
- {
- return 0;
- }
+ tags exist for which CHARSET-PREDICATE has been specified, then
+ that charset's entry in Vcharset_tag_lists will be nil, and this
+ charset shouldn't match. */
+
+ if (NILP (XVECTOR_DATA(Vcharset_tag_lists)[XCHARSET_LEADING_BYTE(charset)
+ - MIN_LEADING_BYTE]))
+ {
+ return 0;
+ }
/* Now, find out what the pre-calculated value is. */
assoc = assq_no_quit(tag,
XVECTOR_DATA(Vcharset_tag_lists)
- [XCHARSET_LEADING_BYTE(charset)
+ [XCHARSET_LEADING_BYTE(charset)
- MIN_LEADING_BYTE]);
if (!(NILP(assoc)) && !(NILP(XCDR(assoc))))
@@ -1060,18 +1060,18 @@ specifies which devices match it.)
}
Lisp_Object
-define_specifier_tag(Lisp_Object tag, Lisp_Object device_predicate,
+define_specifier_tag(Lisp_Object tag, Lisp_Object device_predicate,
Lisp_Object charset_predicate)
{
- Lisp_Object assoc = assq_no_quit (tag, Vuser_defined_tags),
+ Lisp_Object assoc = assq_no_quit (tag, Vuser_defined_tags),
concons, devcons, charpres = Qnil;
int recompute_devices = 0, recompute_charsets = 0, i, max_args = -1;
if (NILP (assoc))
{
recompute_devices = recompute_charsets = 1;
- Vuser_defined_tags = Fcons (list3 (tag, device_predicate,
- charset_predicate),
+ Vuser_defined_tags = Fcons (list3 (tag, device_predicate,
+ charset_predicate),
Vuser_defined_tags);
DEVICE_LOOP_NO_BREAK (devcons, concons)
{
@@ -1105,7 +1105,7 @@ define_specifier_tag(Lisp_Object tag, Li
invalid_argument
("Charset predicate must be able to take an argument", tag);
}
-
+
/* If there exists a charset_predicate for the tag currently (even if
the new charset_predicate is nil), or if we're adding one, we need
to recompute. This contrasts with the device predicates, where we
@@ -1139,7 +1139,7 @@ define_specifier_tag(Lisp_Object tag, Li
}
}
- if (recompute_charsets)
+ if (recompute_charsets)
{
if (NILP(charset_predicate))
{
@@ -1158,8 +1158,8 @@ define_specifier_tag(Lisp_Object tag, Li
if (!NILP(charset_predicate))
{
- struct gcpro gcpro1;
- charpres = make_vector(impossible, Qnil);
+ struct gcpro gcpro1;
+ charpres = make_vector(impossible, Qnil);
GCPRO1 (charpres);
/* If you want to extend the number of stages available, here
@@ -1212,8 +1212,8 @@ define_specifier_tag(Lisp_Object tag, Li
}
else
{
- XVECTOR_DATA(Vcharset_tag_lists)[i]
- = Fcons(Fcons(tag, charpres),
+ XVECTOR_DATA(Vcharset_tag_lists)[i]
+ = Fcons(Fcons(tag, charpres),
XVECTOR_DATA (Vcharset_tag_lists)[i]);
}
}
@@ -1310,15 +1310,15 @@ setup_device_initial_specifier_tags (str
assert(3 == list_len);
device_predicate = XCADR(XCAR (rest));
-
+
if (NILP (device_predicate))
{
- XCDR (XCAR (rest2)) = Qt;
+ XCDR (XCAR (rest2)) = Qt;
}
else
{
- device_predicate = !NILP (call_critical_lisp_code
- (d, device_predicate, device))
+ device_predicate = !NILP (call_critical_lisp_code
+ (d, device_predicate, device))
? Qt : Qnil;
XCDR (XCAR (rest2)) = device_predicate;
}
@@ -1329,7 +1329,7 @@ setup_charset_initial_specifier_tags (Li
setup_charset_initial_specifier_tags (Lisp_Object charset)
{
Lisp_Object rest, charset_predicate, tag, new_value;
- Lisp_Object charset_tag_list = Qnil;
+ Lisp_Object charset_tag_list = Qnil;
LIST_LOOP (rest, Vuser_defined_tags)
{
@@ -1362,7 +1362,7 @@ setup_charset_initial_specifier_tags (Li
\
} while (0)
- SETUP_CHARSET_TAGS_FROB (initial);
+ SETUP_CHARSET_TAGS_FROB (initial);
SETUP_CHARSET_TAGS_FROB (final);
/* More later? */
@@ -2325,10 +2325,10 @@ where
where
LOCALE := a window, a buffer, a frame, a device, or `global'
TAG-SET := an unordered list of zero or more TAGS, each of which
- is a symbol
+ is a symbol
TAG := a device class (see `valid-device-class-p'), a device type
- (see `valid-console-type-p'), or a tag defined with
- `define-specifier-tag'
+ (see `valid-console-type-p'), or a tag defined with
+ `define-specifier-tag'
INSTANTIATOR := format determined by the type of specifier
The pair (TAG-SET . INSTANTIATOR) is called an `inst-pair'.
@@ -2804,7 +2804,8 @@ specifier_instance_from_inst_list (Lisp_
Lisp_Object inst_list,
Error_Behavior errb, int no_quit,
Lisp_Object depth,
- Lisp_Object *instantiator)
+ Lisp_Object *instantiator,
+ int no_fallback)
{
/* This function can GC */
Lisp_Specifier *sp;
@@ -2866,7 +2867,7 @@ specifier_instance_from_inst_list (Lisp_
if (!device_matches_specifier_tag_set_p (device, tag_set))
{
- continue;
+ continue;
}
val = XCDR (tagged_inst);
@@ -2883,7 +2884,7 @@ specifier_instance_from_inst_list (Lisp_
val = call_with_suspended_errors
((lisp_fn_t) RAW_SPECMETH (sp, instantiate),
Qunbound, Qspecifier, errb, 5, specifier,
- matchspec, domain, val, depth);
+ matchspec, domain, val, depth, no_fallback);
if (!UNBOUNDP (val))
{
@@ -2922,7 +2923,7 @@ specifier_instance_from_inst_list (Lisp_
if (!device_matches_specifier_tag_set_p (device, tag_set))
{
- continue;
+ continue;
}
val = XCDR (tagged_inst);
@@ -2932,7 +2933,7 @@ specifier_instance_from_inst_list (Lisp_
val = call_with_suspended_errors
((lisp_fn_t) RAW_SPECMETH (sp, instantiate),
Qunbound, Qspecifier, errb, 5, specifier,
- matchspec, domain, val, depth);
+ matchspec, domain, val, depth, no_fallback);
if (!UNBOUNDP (val))
{
@@ -2963,7 +2964,7 @@ specifier_instance_from_inst_list (Lisp_
specifier_instance_from_inst_list (specifier, matchspec, \
domain, *CIE_inst_list, \
errb, no_quit, depth, \
- instantiator); \
+ instantiator, no_fallback); \
if (!UNBOUNDP (CIE_val)) \
return CIE_val; \
} \
@@ -3075,7 +3076,8 @@ specifier_instance_1 (Lisp_Object specif
assert (CONSP (sp->fallback));
return specifier_instance_from_inst_list (specifier, matchspec, domain,
sp->fallback, errb, no_quit,
- depth, instantiator);
+ depth, instantiator,
+ no_fallback);
}
#undef CHECK_INSTANCE_ENTRY
@@ -3245,7 +3247,7 @@ dependent on the particular type of spec
display table is not there. (Chartable specifiers are not yet
implemented.)
--- For font specifiers, MATCHSPEC should be a cons (CHARSET . STAGE).
+-- For font specifiers, MATCHSPEC should be a cons (CHARSET . STAGE).
The defined stages are currently `initial' and `final'. On X11, 'initial
is used when the font matching process is looking for fonts that match
the desired registries of the charset--see the `charset-registries'
@@ -3308,7 +3310,7 @@ specifier_matching_foo_from_inst_list (L
if (!NILP (built_up_list))
val = specifier_instance_from_inst_list (specifier, matchspec, domain,
built_up_list, ERROR_ME,
- 0, Qzero, &instantiator);
+ 0, Qzero, &instantiator, 0);
UNGCPRO;
return UNBOUNDP (val) ? default_ : want_instantiator ? instantiator : val;
@@ -3329,7 +3331,7 @@ you should not use this function; use `s
0);
}
-DEFUN ("specifier-instantiator-from-inst-list",
+DEFUN ("specifier-instantiator-from-inst-list",
Fspecifier_instantiator_from_inst_list, 3, 4, 0, /*
Attempt to convert an inst-list into an instance; return instantiator.
This is identical to `specifier-instance-from-inst-list' but returns
@@ -3923,5 +3925,5 @@ vars_of_specifier (void)
staticpro (&Vunlock_ghost_specifiers);
Vcharset_tag_lists = make_vector(NUM_LEADING_BYTES, Qnil);
- staticpro (&Vcharset_tag_lists);
-}
+ staticpro (&Vcharset_tag_lists);
+}
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
Re: overlay.el bug, incompatable overlays-in
16 years, 10 months
FKtPp
Stephen J. Turnbull wrote:
> It's me FKtPp ;) writes:
> > Stephen J. Turnbull wrote:
> > > Moving to XEmacs Patches for discussion.
> > >
> > > It's me FKtPp ;) writes:
> > >
> > > > I've created one with my two mail pasted in.
> > >
> > > > What about this attached patch?
> > >
> > > Much better. Does it do what you need it to do?
> > >
> >
> >
> > Sorry, I have to say NO.
>
> I don't understand what it's not doing. Please explain what it's
> supposed to do in the tests you've presented. Also eventually you're
> going to need to explain in the context of nXML whether it does the
> right thing there, too.
>
Sorry. The difference is in the reassignment of those two BEG and END
variable. They were used to determind the extent/overlay
starting/ending point, and in XEmacs these can not be a value outside
buffer or it will cause the "Argment out of range" error.
So in my first copy of overlay.el I make them limited in range
[(point-min), (point-max)], but after sending out the email I findout
this could break functionality if the buffer is narrowed.
Then I composed the second path, whth BEG and END limited in range [0,
(buffer-size)], but, again, I find this even worse:
XEmacs don't accept 0 as extend/overlay starting point, and report
"Argment out of range"
(buffer-size) is 1 character less than (point-max) in a widen buffer.
The second copy is totally broken... :'( sorry for no testing
After some rethought I change the range to [1, (1+ (buffer-size))] , and
run some code assumed would be failed if using the official XEmacs
overlay.el.
That's the whole story, wish it is clear enough for you to understand
the situation.
Thanks
FktPp
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
Re: overlay.el bug, incompatable overlays-in
16 years, 10 months
FKtPp
Stephen J. Turnbull wrote:
> Moving to XEmacs Patches for discussion.
>
> It's me FKtPp ;) writes:
>
> > I've created one with my two mail pasted in.
>
> > What about this attached patch?
>
> Much better. Does it do what you need it to do?
>
Sorry, I have to say NO.
and, please see the attached patch, which I'd tested using the following
code in scratch buffer:
;; This buffer is for notes you don't want to save, and for Lisp evaluation.
;; If you want to create a file, first visit that file with C-x C-f,
;; then enter the text in that file's own buffer. (C-x is the standard
;; XEmacs abbreviation for `Control+x', i.e. hold down the Control key
;; while hitting the x key.)
;;
;; For Lisp evaluation, type an expression, move to the end and hit C-j.
(require 'overlay)
overlay
(make-overlay -100 200)
#<extent [1, 200) overlay 0x30a0cb0 in buffer *scratch*>
(overlays-in -1000 1000)
(#<extent [1, 200) overlay 0x2c97150 in buffer *scratch*> #<extent [1,
200) overlay 0x30a0cb0 in buffer *scratch*>)
(move-overlay (car (overlays-in -1000 1000))
200 4000)
#<extent [200, 709) overlay 0x2c97150 in buffer *scratch*>
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
Re: overlay.el bug, incompatable overlays-in
16 years, 10 months
FKtPp
Stephen J. Turnbull wrote:
> It's me FKtPp ;) writes:
>
> > A branch of test shows that GNU's overlays- function can accept any
> > integer as BIG or END parameter -_-
>
> [[ *sigh* I really detest that style of programming. No wonder the
> overlays emulation is deprecated. ]]
>
> > attachment is a changed overlay.el that with above 3 #'functions emulate
> > the GNU's behavior.
>
> Please submit it to XEmacs Patches as a patch against the Mercurial
> repository. It will get faster review that way, at least from me.
> You may also wish to put a copy on the tracker (this kind of thing
> will eventually be done automatically but that is not implemented
> yet).
>
I've created one with my two mail pasted in.
> I can tell you already that (1) the docstrings *need* to be amended to
> describe the DWIM behavior, and (2) I'm almost certainly going to ask
> that the normalization of arguments (null BUFFER -> current buffer,
> truncating bounds and reordering them) be refactored as a defsubst.
>
> Thanks!
>
What about this attached patch?
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
Re: [AC web] Update (more or less) XEmacsVsGNUemacs.html
16 years, 10 months
Stephen J. Turnbull
Jerry James writes:
> On Tue, Feb 19, 2008 at 10:11 PM, Stephen J. Turnbull
> <stephen(a)xemacs.org> wrote:
> > @@ -128,14 +140,14 @@
> > be converted to integers (and many integers can be converted to
> > characters), but characters are not integers. GNU Emacs 19,
> > XEmacs 19, Mule 2.3 (an extensive patch to GNU Emacs 18.55 and
> > - 19.x), and GNU Emacs 20 (incorporating Mule 3 and later Mule 4)
> > - represent them as integers.
> > + 19.x), and GNU Emacs 20--22 (incorporating Mule 3 and later Mule 4)
> > + represent them as integers. [GNU Emacs 23 may bet a character type.]
>
> They may also *get* a character type. :-)
Er, given their long (and not necessarily yet over) history of \201
regressions, I'd call it a felicitous typo. ;-)
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
[AC web] Update (more or less) XEmacsVsGNUemacs.html
16 years, 10 months
Stephen J. Turnbull
APPROVE COMMIT web
Index: About/ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacsweb/About/ChangeLog,v
retrieving revision 1.219
diff -u -r1.219 ChangeLog
--- About/ChangeLog 26 Nov 2007 19:02:49 -0000 1.219
+++ About/ChangeLog 20 Feb 2008 04:59:45 -0000
@@ -0,0 +1,6 @@
+2008-02-19 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * XEmacsVsGNUemacs.content: Update Emacs mailing address to
+ emacs-devel. Update URLs for XEmacs development pages. Lots of
+ text changes.
+
Index: About/XEmacsVsGNUemacs.content
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacsweb/About/XEmacsVsGNUemacs.content,v
retrieving revision 1.9
diff -u -r1.9 XEmacsVsGNUemacs.content
--- About/XEmacsVsGNUemacs.content 13 Jan 2003 21:35:26 -0000 1.9
+++ About/XEmacsVsGNUemacs.content 20 Feb 2008 04:59:45 -0000
@@ -7,6 +7,20 @@
<h1>XEmacs vs. GNU Emacs</h1>
<p>
+ <em>
+ Much of this page was written over a decade ago, by somebody
+ other than the current editor, possibly Ben Wing. The previous
+ major revision occurred on January 1, 2001, by me. GNU Emacs
+ has improved a fair amount, but the irreconcilable differences
+ between the projects continue, with no resolution in sight. I
+ have little interest in learning enough technical details about
+ GNU Emacs 22 to accurately revise it, so you should take
+ everything in square brackets with a grain of salt. -- stephen,
+ February 19, 2008
+ </em>
+ </p>
+
+ <p>
There are currently irreconcilable differences in the views about
technical, programming, design and organizational matters between
Richard Stallman (RMS) and the XEmacs development team which provide
@@ -18,7 +32,7 @@
avoid posting to the newsgroups, because of the very heated
flamewars that often result. Mail your questions to <a
href="mailto:xemacs-beta@xemacs.org">xemacs-beta@xemacs.org</a>
- and <a href="mailto:bug-gnu-emacs@prep.ai.mit.edu">bug-gnu-emacs@prep.ai.mit.edu</a>.
+ and <a href="mailto:emacs-devel@gnu.og">emacs-devel@gnu.org</a>.
</p>
<p>
@@ -35,83 +49,81 @@
<p>
This section is now quite dated. Much of it refers to GNU Emacs
- 19 and XEmacs 20. However, the differences described persist in
+ 19 and XEmacs 20. However, many of the differences described persist in
the most recent versions of both Emacsen in some form.
</p>
<h3>User-Visible Editing Features</h3>
<p>
- In XEmacs, images of arbitrary size can be embedded in a buffer.
- (Soon available in GNU Emacs 21.)
- </p>
-
- <p>
- In XEmacs, variable width fonts work. (Soon available in GNU
- Emacs 21.)
- </p>
-
- <p>
- The height of a line is the height of the tallest font on that
- line, instead of all lines having the same height. (Soon
- available in GNU Emacs 21.)
+ As of GNU Emacs 22, XEmacs's GUI features (images, variable pitch
+ fonts, widgets) are reported by some GNU Emacs users to be more
+ efficient and usable than GNU Emacs's.
</p>
<p>
- <!-- #### Is this obsolete? -->
- XEmacs provides support for ToolTalk on systems that have it.
- <!-- #### Possibly I should drop mention of DnD? -->
- Experimental support for drag-and-drop protocols is provided from
- XEmacs 21.
- </p>
-
- <p>
- XEmacs can ask questions using popup dialog boxes. Any command
- executed from a menu will ask yes/no questions with dialog boxes,
- while commands executed via the keyboard will use the minibuffer.
+ <!-- #### Is this obsolete? --> XEmacs provides support for
+ ToolTalk on systems that have it. <!-- #### Possibly I should
+ drop mention of DnD? --> Experimental support for drag-and-drop
+ protocols is provided from XEmacs 21. [Not available in GNU Emacs
+ 21. Status in GNU Emacs 22 unknown.]
</p>
<p>
XEmacs has a built-in toolbar. Four toolbars can actually be
configured simultaneously: top, bottom, left, and right toolbars.
+ [A single toolbar was added to GNU Emacs 21.]
</p>
+ <h3>General Platform Support</h3>
+
<p>
- XEmacs has vertical and horizontal scrollbars. Unlike in GNU
- Emacs 19 (which provides a primitive form of vertical scrollbar),
- these are true toolkit scrollbars. A look-alike Motif scrollbar
- is provided for those who don't have Motif. (Even for those who
- do, the look-alike may be preferable as it is faster.)
+ Starting with XEmacs 21.4, if your platform supports dynamically
+ loadable modules, so does XEmacs. RMS continues to refuse to
+ allow this facility in GNU Emacs, because it makes it easier to
+ distribute modules in violation of the GPL.
</p>
- <h3>General Platform Support</h3>
-
<p>
If you're running on a machine with audio hardware, you can
specify sound files for XEmacs to play instead of the default X
beep. See the documentation of the function load-sound-file and
the variable sound-alist. XEmacs also supports the network sound
- protocols NAS and EsounD.
+ protocols NAS and EsounD. [Not available in GNU Emacs 22.]
</p>
<p>
XEmacs 21 supports database protocols with LISP bindings,
- currently including Berkeley DB, LDAP, and PostgreSQL (21.2 only).
+ currently including Berkeley DB, LDAP, and PostgreSQL (from 21.4).
+ [Not available in GNU Emacs 22.]
</p>
<p>
- XEmacs 20 and 21 support the Canna, Wnn, and SJ3 Japanese input
+ XEmacs 21 supports the Canna, Wnn, and SJ3 Japanese input
method servers directly, as well as through the X Input Method
- (XIM) protocol. GNU Emacs 20 supports only the XIM protocol.
+ (XIM) protocol. GNU Emacs 22 supports only the XIM protocol,
+ although there are now pure Lisp implementations of Canna and Wnn.
Both Emacsen support the Quail family of input methods
(implemented in LISP) for many languages.
</p>
+ <p>
+ As of XEmacs 21.4, although XEmacs supports preloaded Lisp using
+ "unexec", it is considered obsolete. XEmacs 21.4 uses a much more
+ portable technique to "dump" and "preload" Lisp. GNU Emacs 22
+ still uses unexec.
+ </p>
+
+ <p>
+ XEmacs 21 supports multiple frames on TTYs. GNU Emacs is
+ scheduled to get that feature in version 23.
+ </p>
+
<h3>Packaged LISP Libraries</h3>
<p>
Many more packages are provided standard with XEmacs than with GNU
- Emacs 19 or 20.
+ Emacs 22.
</p>
<p>
@@ -128,14 +140,14 @@
be converted to integers (and many integers can be converted to
characters), but characters are not integers. GNU Emacs 19,
XEmacs 19, Mule 2.3 (an extensive patch to GNU Emacs 18.55 and
- 19.x), and GNU Emacs 20 (incorporating Mule 3 and later Mule 4)
- represent them as integers.
+ 19.x), and GNU Emacs 20--22 (incorporating Mule 3 and later Mule 4)
+ represent them as integers. [GNU Emacs 23 may bet a character type.]
</p>
<p>
From XEmacs 20 on, the buffer is treated as an array of
characters, and the representation of buffer text is not exposed
- to LISP. The GNU Emacs 20 functions like buffer-as-multibyte are
+ to LISP. The GNU Emacs 20--22 functions like buffer-as-multibyte are
not supported.
</p>
@@ -175,29 +187,31 @@
<h3>Window System Programming Interface</h3>
<p>
- XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which
- makes it be a more well-behaved X citizen (and also improves
- portability). A result of this is that it is possible to include
- other Xt "Widgets" in the XEmacs window. Also, XEmacs understands
- the standard Xt command-line arguments.
- </p>
-
- <p>
XEmacs supports Motif applications, generic Xt (e.g. Athena)
applications, and raw Xlib applications. An XEmacs variant which
supports GTK+ is available (integration as an option in the XEmacs
mainline is planned for XEmacs 22), although code to take
- advantage of the support is as yet scarce.
+ advantage of the support is as yet scarce. XEmacs does not
+ support raw Xlib. GNU Emacs 22 supports Xlib, GTK+, and MS
+ Windows, with 3rd party or experimental support for Carbon and
+ Cocoa on the Mac.
</p>
<p>
- An XEmacs frame can be placed within an "external client widget"
- managed by another application. This allows an application to use
- an XEmacs frame as its text pane rather than the standard Text
- widget that is provided with Motif or Athena.
+ XEmacs provides an interface called the "native widget API" for
+ adding new kinds of widgets (currently including progress bars, tab
+ controls, and buttons) which can be attached to extents using the
+ image API. GNU Emacs does not.
+ </p>
+
+ <p>
+ As a compile-time option, an XEmacs frame can be placed within an
+ "external client widget" managed by another application. This
+ allows an application to use an XEmacs frame as its text pane
+ rather than the standard Text widget that is provided with Motif
+ or Athena.
</p>
- <!-- #### This is new! -->
<h3>Community Participation</h3>
<p>
@@ -205,33 +219,44 @@
simple. Mail to <a href="mailto:xemacs-beta@xemacs.org">XEmacs
Developers <xemacs-beta(a)xemacs.org></a>, and you're in! (If
you <em>want</em> to be, of course. You're also welcome to just
- post development-related questions and bug reports.) The GNU
- Emacs development team and internal mailing lists are
- <em>still</em> by invitation only.
+ post development-related questions and bug reports.) As of
+ February 2008, XEmacs has a
+ <a href="http://tracker.xemacs.org/XEmacs/its/">modern bug tracker</a>.
+ The GNU Emacs development lists were opened up as of the version
+ 21 development cycle, and a bug tracking system is under discussion.
</p>
<p>
- The "bleeding edge" of mainline XEmacs development is available by
- <a href="<!-- _GP_ relPath(qq{Develop/cvsaccess.html})
- -->">anonymous CVS</a> as are some subsidiary branches (check out
- the <em>xemacs-gtk</em> module for the latest in GUI features!)
+ XEmacs's bundled packages and the stable XEmacs 21.4 line are kept
+ in a <a href="http://www.xemacs.org/Develop/cvsaccess.html">CVS
+ repository</a>, while starting in December 2007, the mainline
+ development was moved to a
+ <a href="http://www.xemacs.org/Develop/hgaccess.html">Mercurial
+ repository</a>. GNU Emacs continues to use CVS although 3rd
+ parties provide bzr, GNU Arch, Darcs, and git repositories, and a
+ move to bzr is under discussion.
</p>
<p>
- Development and maintenance of Lisp libraries is separated from
+ In XEmacs,
+ development and maintenance of Lisp libraries is separated from
the core editor development at a fairly low level. This provides
better modularization and a better division of responsibility
between external library maintainers and the XEmacs core
development team. Even for packages the size of Gnus, XEmacs
users normally have access to a pre-built version within a few
weeks of a major release, and minor updates often within days.
+ RMS once again vetoed provision of a package system for Emacs in
+ December 2007.
</p>
<p>
+ In XEmacs,
CVS commit authority is broadly dispersed. Recognized maintainers
of LISP libraries who are willing to maintain XEmacs packaged
versions automatically qualify for CVS accounts for their
- packages.
+ packages. Something similar is true for GNU Emacs at the time of
+ writing.
</p>
<h2>The FSF Point of View</h2>
@@ -339,7 +364,11 @@
international treaty, and is automatically awarded to the author
as soon as a work is published. Both projects use the GNU General
Public License to protect their work while providing it freely to
- the community.
+ the community. (GNU Emacs moved to GPL version 3 almost as soon
+ as it was available; XEmacs is moving in that direction as well.
+ Of course since XEmacs is licensed under "GPL version 2 or later,"
+ individuals who wish to redistribute XEmacs under version 3 can do
+ so. Thus this is not a real difference.)
</p>
<p>
@@ -508,7 +537,14 @@
<h3>Author's Disclaimer</h3>
<p>
- I disagree strongly with the FSF position in many respects.
+ I disagree strongly with the FSF position in many respects. In
+ fact it is my personal opinion that in interactions with XEmacs
+ developers RMS has been more interested in recruiting them to do
+ work he wants done on Emacs, than in acquiring XEmacs code with
+ far less effort than it would take to develop it from scratch.
+ </p>
+
+ <p>
However, I have tried to present the facts of the legal issue as
accurately and objectively as possible, and have some hope I
succeeded. The interpretation of why XEmacs developers as a group
@@ -535,12 +571,6 @@
There are plenty of venues where you can read endless flames on
these issues. With little effort, you can probably find some of
mine. This isn't one. So big deal.
- </p>
-
- <p>
- Oh, yeah. I'm sorry I get so wrapped up in the politics. I'll
- try to spend more time on the technical details in the next
- round. Maybe even find out what's happened in Emacs 20 and 21!
</p>
<address>
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches