changeset 96:dbb370e3c29e r20-0final

Import from CVS: tag r20-0final
author cvs
date Mon, 13 Aug 2007 09:12:40 +0200
parents e8c07a565f9c
children 498bf5da1c90
files CHANGES-beta ChangeLog lisp/ChangeLog lisp/bytecomp/bytecomp.el lisp/cl/cl-macs.el lisp/modes/cperl-mode.el lisp/packages/font-lock.el lisp/packages/ps-print.el lisp/prim/minibuf.el lisp/tm/tm-image.el man/ChangeLog man/lispref/building.texi man/lispref/extents.texi man/new-users-guide/custom2.texi src/ChangeLog src/extents.c src/extents.h src/frame.c src/mule-coding.c
diffstat 19 files changed, 175 insertions(+), 243 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES-beta	Mon Aug 13 09:12:11 2007 +0200
+++ b/CHANGES-beta	Mon Aug 13 09:12:40 2007 +0200
@@ -1,5 +1,6 @@
 							-*- indented-text -*-
 to 20.0 final
+-- Replicating extents are history
 -- Miscellaneous bug fixes
 
 to 20.0 final
--- a/ChangeLog	Mon Aug 13 09:12:11 2007 +0200
+++ b/ChangeLog	Mon Aug 13 09:12:40 2007 +0200
@@ -1,14 +1,18 @@
+Fri Feb  7 19:21:34 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* XEmacs 20.0try3 is released.
+
 Wed Feb  5 18:03:06 1997  Steven L Baur  <steve@altair.xemacs.org>
 
-	* XEmacs 20.0 is released.
+	* XEmacs 20.0try2 is released.
 
-Wed Feb  3 19:39:08 1997  Steven L Baur  <steve@altair.xemacs.org>
+Mon Feb  3 19:39:08 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* XEmacs 19.15-b92 is released.
 
 Sat Feb  1 18:17:38 1997  Steven L Baur <steve@altair.xemacs.org>
 
-	* XEmacs 20.0 is released.
+	* XEmacs 20.0try1 is released.
 	* XEmacs 19.15-b91 AKA XEmacs '97 NOT! is released.
 
 Sat Feb  1 00:00:48 1997  Steven L Baur  <steve@altair.xemacs.org>
--- a/lisp/ChangeLog	Mon Aug 13 09:12:11 2007 +0200
+++ b/lisp/ChangeLog	Mon Aug 13 09:12:40 2007 +0200
@@ -1,3 +1,37 @@
+Fri Feb  7 03:09:32 1997  Alastair Burt <burt@dfki.uni-sb.de>
+
+	* bytecomp/bytecomp.el (byte-compile-insert-header): Correct
+	typo.
+
+Thu Feb  6 17:14:32 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* packages/font-lock.el (font-lock-fontify-keywords-region):
+	Correct bounds checking in case the keywords regexp is not
+	properly anchored.
+
+	* packages/ps-print.el: Update maintainer address.
+
+Thu Feb  6 12:35:39 1997  Bill Dubuque  <wgd@martigny.ai.mit.edu>
+	
+	* cl/cl-macs.el (cl-do-proclaim): Correct addition of bound
+	variables to `byte-compile-bound-variables'.
+
+Thu Feb  6 01:07:56 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* bytecomp/bytecomp.el (byte-compile-warn-about-unused-variables):
+	Reverse previous patch.
+
+	* prim/minibuf.el (use-dialog-box): Rename from
+	should-use-dialog-box.
+	(should-use-dialog-box-p): Use it.
+
+	* bytecomp/bytecomp.el (byte-compile-warn-about-unused-variables):
+	cell is not a cons when the cl declare macro is used.
+
+Wed Feb  5 21:37:13 1997  Hrvoje Niksic  <hniksic@bjesomar.srce.hr>
+
+	* modes/cperl-mode.el: Provide 'cperl-mode.
+
 Tue Feb  4 11:51:25 1997  Greg Klanderman  <greg@alphatech.com>
 
 	* modes/make-mode.el: Remove `makefile-runtime-macros-list' from
--- a/lisp/bytecomp/bytecomp.el	Mon Aug 13 09:12:11 2007 +0200
+++ b/lisp/bytecomp/bytecomp.el	Mon Aug 13 09:12:40 2007 +0200
@@ -3,7 +3,7 @@
 ;;; Copyright (C) 1985-1987, 1991-1994 Free Software Foundation, Inc.
 ;;; Copyright (C) 1996 Ben Wing.
 
-;; Author: Jamie Zawinski <jwz@lucid.com>
+;; Author: Jamie Zawinski <jwz@netscape.com>
 ;;	Hallvard Furuseth <hbf@ulrik.uio.no>
 ;; Keywords: internal
 
@@ -1224,18 +1224,20 @@
 		(not (eq (car rest) 'new-scope)))
       (setq cell (car rest))
       (if (and (= 0 (logand byte-compile-referenced-bit (cdr cell)))
-	       ;; Don't warn about declared-but-unused arguments, for two
-	       ;; reasons: first, the arglist structure might be imposed by
-	       ;; external forces, and we don't have (declare (ignore x)) yet;
-	       ;; and second, inline expansion produces forms like
+	       ;; Don't warn about declared-but-unused arguments,
+	       ;; for two reasons: first, the arglist structure
+	       ;; might be imposed by external forces, and we don't
+	       ;; have (declare (ignore x)) yet; and second, inline
+	       ;; expansion produces forms like
 	       ;;   ((lambda (arg) (byte-code "..." [arg])) x)
-	       ;; which we can't (ok, well, don't) recognise as containing a
-	       ;; reference to arg, so every inline expansion would generate
-	       ;; a warning.  (If we had `ignore' then inline expansion could
-	       ;; emit an ignore declaration.)
+	       ;; which we can't (ok, well, don't) recognise as
+	       ;; containing a reference to arg, so every inline
+	       ;; expansion would generate a warning.  (If we had
+	       ;; `ignore' then inline expansion could emit an
+	       ;; ignore declaration.)
 	       (= 0 (logand byte-compile-arglist-bit (cdr cell)))
-	       ;; Don't warn about defvars because this is a legitimate special
-	       ;; binding.
+	       ;; Don't warn about defvars because this is a
+	       ;; legitimate special binding.
 	       (not (byte-compile-defvar-p (car cell))))
 	  (setq unreferenced (cons (car cell) unreferenced)))
       (setq rest (cdr rest)))
@@ -1705,7 +1707,7 @@
 	       "\n(if (and (boundp 'emacs-version)\n"
 	       "\t (or (and (boundp 'epoch::version) epoch::version)\n"
 	       "\t     (and (not (string-match \"XEmacs\" emacs-version))\n"
-	       "\t          (string-lessp emacs-version \"19.29\"))n"
+	       "\t          (string-lessp emacs-version \"19.29\"))\n"
 	       "\t     (string-lessp emacs-version \"19.14\")))\n"
 	       "    (error \"`"
 	       ;; prin1-to-string is used to quote backslashes.
--- a/lisp/cl/cl-macs.el	Mon Aug 13 09:12:11 2007 +0200
+++ b/lisp/cl/cl-macs.el	Mon Aug 13 09:12:40 2007 +0200
@@ -1399,7 +1399,10 @@
   (cond ((eq (car-safe spec) 'special)
 	 (if (boundp 'byte-compile-bound-variables)
 	     (setq byte-compile-bound-variables
-		   (append (cdr spec) byte-compile-bound-variables))))
+		   ;; todo: this should compute correct binding bits vs. 0
+		   (append (mapcar #'(lambda (v) (cons v 0)) 
+				   (cdr spec))
+			   byte-compile-bound-variables))))
 
 	((eq (car-safe spec) 'inline)
 	 (while (setq spec (cdr spec))
--- a/lisp/modes/cperl-mode.el	Mon Aug 13 09:12:11 2007 +0200
+++ b/lisp/modes/cperl-mode.el	Mon Aug 13 09:12:40 2007 +0200
@@ -32,7 +32,7 @@
 ;;; Corrections made by Ilya Zakharevich ilya@math.mps.ohio-state.edu
 ;;; XEmacs changes by Peter Arius arius@informatik.uni-erlangen.de
 
-;; $Id: cperl-mode.el,v 1.1.1.1 1996/12/18 22:42:48 steve Exp $
+;; $Id: cperl-mode.el,v 1.2 1997/02/08 03:26:07 steve Exp $
 
 ;;; To use this mode put the following into your .emacs file:
 
@@ -4526,3 +4526,7 @@
 	    (cperl-get-help)
 	    (setq cperl-help-shown t))))
       (cperl-lazy-install)))
+
+(provide 'cperl-mode)
+
+;;; cperl-mode.el ends here
--- a/lisp/packages/font-lock.el	Mon Aug 13 09:12:11 2007 +0200
+++ b/lisp/packages/font-lock.el	Mon Aug 13 09:12:40 2007 +0200
@@ -1158,12 +1158,13 @@
 	;; Find an occurrence of `matcher' from `start' to `end'.
 	(setq keyword (car keywords) matcher (car keyword))
 	(goto-char start)
-	(while (if (stringp matcher)
-		   (re-search-forward matcher end t)
-		 (funcall matcher end))
+	(while (and (< (point) end)
+		    (if (stringp matcher)
+			(re-search-forward matcher end t)
+		      (funcall matcher end)))
 	  ;; Apply each highlight to this instance of `matcher', which may be
 	  ;; specific highlights or more keywords anchored to `matcher'.
-	(setq highlights (cdr keyword))
+	  (setq highlights (cdr keyword))
 	(while highlights
 	  (if (numberp (car (car highlights)))
 	      (font-lock-apply-highlight (car highlights))
--- a/lisp/packages/ps-print.el	Mon Aug 13 09:12:11 2007 +0200
+++ b/lisp/packages/ps-print.el	Mon Aug 13 09:12:40 2007 +0200
@@ -3,7 +3,7 @@
 ;; Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
 
 ;; Author:     Jim Thompson (was <thompson@wg2.waii.com>)
-;; Maintainer: Jacques Duthen <duthen@cegelec-red.fr>
+;; Maintainer: Jacques Duthen <duthen@club-internet.fr>
 ;; Keywords:   print, PostScript
 ;; Time-stamp: <97/01/29 23:21:25 tjchol01>
 ;; Version:    3.05
@@ -2445,15 +2445,16 @@
   (/ x-color-value ps-print-color-scale))
 
 (defun ps-color-values (x-color)
-  (cond ((fboundp 'x-color-values)
+  (cond ((fboundp 'color-instance-rgb-components)
+	 (if (ps-color-device)
+	     (color-instance-rgb-components
+	      (if (color-instance-p x-color) x-color
+		(if (color-specifier-p x-color)
+		    (make-color-instance (color-name x-color))
+		  (make-color-instance x-color))))
+	   (error "No available function to determine X color values.")))
+	((fboundp 'x-color-values)
 	 (x-color-values x-color))
-	((and (fboundp 'color-instance-rgb-components)
-	      (ps-color-device))
-	 (color-instance-rgb-components
-	  (if (color-instance-p x-color) x-color
-	    (if (color-specifier-p x-color)
-		(make-color-instance (color-name x-color))
-	      (make-color-instance x-color)))))
 	(t (error "No available function to determine X color values."))))
 
 (defun ps-face-attributes (face)
--- a/lisp/prim/minibuf.el	Mon Aug 13 09:12:11 2007 +0200
+++ b/lisp/prim/minibuf.el	Mon Aug 13 09:12:40 2007 +0200
@@ -158,7 +158,7 @@
     map)
   "Minibuffer keymap used by shell-command and related commands.")
 
-(defvar should-use-dialog-box t
+(defvar use-dialog-box t
   "Variable controlling usage of the dialog box.  If nil, the dialog box
 will never be used, even in response to mouse events.")
 
@@ -2007,11 +2007,11 @@
 event, and checks whether dialog-support exists and the current device
 supports dialog boxes.
 
-The dialog box is totally disabled if the variable `should-use-dialog-box'
+The dialog box is totally disabled if the variable `use-dialog-box'
 is set to nil."
   (and (featurep 'dialog)
        (device-on-window-system-p)
-       should-use-dialog-box
+       use-dialog-box
        (or force-dialog-box-use
 	   (button-press-event-p last-command-event)
 	   (button-release-event-p last-command-event)
--- a/lisp/tm/tm-image.el	Mon Aug 13 09:12:11 2007 +0200
+++ b/lisp/tm/tm-image.el	Mon Aug 13 09:12:40 2007 +0200
@@ -7,7 +7,7 @@
 ;;         Dan Rich <drich@morpheus.corp.sgi.com>
 ;; Maintainer: MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;; Created: 1995/12/15
-;; Version: $Id: tm-image.el,v 1.2 1996/12/28 21:03:14 steve Exp $
+;; Version: $Id: tm-image.el,v 1.3 1997/02/08 03:26:13 steve Exp $
 
 ;; Keywords: mail, news, MIME, multimedia, image, picture, X-Face
 
@@ -224,14 +224,15 @@
     (mime-decode-region beg end encoding)
     (let ((data (buffer-string))
 	  (minor (assoc-value ctype mime-viewer/image-converter-alist))
-	  gl)
+	  gl e)
       (delete-region (point-min)(point-max))
       (while (progn
 	       (setq gl (make-glyph (vector minor :data data)))
 	       (eq (image-instance-type (glyph-image-instance gl))
 		   'text)
 	       ))
-      (make-annotation gl (point) 'text)
+      (setq e (make-extent (point) (point)))
+      (set-extent-end-glyph e gl)
       )
     (insert "\n")
     ))
--- a/man/ChangeLog	Mon Aug 13 09:12:11 2007 +0200
+++ b/man/ChangeLog	Mon Aug 13 09:12:40 2007 +0200
@@ -1,3 +1,8 @@
+Thu Feb  6 22:57:09 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* lispref/extents.texi (Duplicable Extents): replicable extents
+	are history.
+
 Wed Jan 29 19:59:41 1997  Steven L Baur  <steve@altair.xemacs.org>
 
 	* xemacs-faq.texi (Q1.1.1): Correct typos.
--- a/man/lispref/building.texi	Mon Aug 13 09:12:11 2007 +0200
+++ b/man/lispref/building.texi	Mon Aug 13 09:12:40 2007 +0200
@@ -134,8 +134,8 @@
 @example
 @group
 (emacs-version)
-  @result{} "XEmacs 19.14 [Lucid] (i586-unknown-linux1.2.13)
-                 of Wed Mar  6 1996 on nene"
+  @result{} "XEmacs 20.0 [Lucid] (i586-unknown-linux2.0.18)
+                 of Wed Feb  6 1997 on nene"
 @end group
 @end example
 
@@ -157,7 +157,7 @@
 
 @defvar emacs-version
 The value of this variable is the version of Emacs being run.  It is a
-string, e.g. @code{"19.14 XEmacs Lucid"}.
+string, e.g. @code{"20.0 XEmacs Lucid"}.
 @end defvar
 
   The following two variables did not exist before FSF GNU Emacs version
@@ -166,12 +166,12 @@
 
 @defvar emacs-major-version
 The major version number of Emacs, as an integer.  For XEmacs version
-19.14, the value is 19.
+20.0, the value is 20.
 @end defvar
 
 @defvar emacs-minor-version
 The minor version number of Emacs, as an integer.  For XEmacs version
-19.14, the value is 14.
+20.0, the value is 0.
 @end defvar
 
 @node Pure Storage
--- a/man/lispref/extents.texi	Mon Aug 13 09:12:11 2007 +0200
+++ b/man/lispref/extents.texi	Mon Aug 13 09:12:40 2007 +0200
@@ -553,17 +553,9 @@
 kill, yank, and undo commands will restore or copy it.  @xref{Duplicable
 Extents}.
 
-@item replicating
-(Boolean) Meaningful only in conjunction with @code{duplicable}.  If
-set, actions that cause an extent to be copied from a buffer to a string
-cause the original extent to be recorded in the copy (as the copied
-extent's parent), so that when the extent is copied back into the
-buffer, @code{eq}ness between the original extent and the re-inserted
-extent is maintained whenever possible. @xref{Duplicable Extents}.
-
 @item unique
-(Boolean) Meaningful only in conjunction with @code{duplicable} and
-@code{replicating}.  When this is set, there may be only one instance of
+(Boolean) Meaningful only in conjunction with @code{duplicable}.
+When this is set, there may be only one instance of
 this extent attached at a time.  @xref{Duplicable Extents}.
 
 @item invisible
@@ -765,8 +757,7 @@
 that you cannot create an inheritance loop -- this is explicitly
 disallowed.
 
-  Parent extents are used to implement the ``replicating'' property
-(@pxref{Duplicable Extents}) and extents over the modeline.
+  Parent extents are used to implement the extents over the modeline.
 
 @defun set-extent-parent extent parent
 This function sets the parent of @var{extent} to @var{parent}.
@@ -793,30 +784,14 @@
 @node Duplicable Extents
 @section Duplicable Extents
 @cindex duplicable extent
-@cindex replicating extents
 @cindex unique extents
 @cindex extent replica
 @cindex extent, duplicable
-@cindex extent, replicating
 @cindex extent, unique
 
   If an extent has the @code{duplicable} property, it will be copied into
 strings, so that kill, yank, and undo commands will restore or copy it.
 
-  If a duplicable extent also has the @code{replicating} property, the
-extent itself is not actually copied; rather, a pointer to it is
-stored, along with the start and end positions of the extent. (This
-is done by making the copied extent a child of the original extent.
-Formerly, this was done by creating a special object called an
-@dfn{extent replica}.  Extent replicas no longer exist, but all the
-functionality is available in a cleaner and more general fashion
-using the @code{replicating} property.) This means that, e.g.,
-if you copy a replacting extent into the kill ring, then change the
-properties of the extent, then paste the kill-ring text back into the
-buffer, the newly-inserted extent will have the property changes you
-just made to the original extent, and not the property values at the
-time the text was copied into the kill ring.
-
 Specifically:
 
 @itemize @bullet
@@ -837,42 +812,8 @@
 back into a buffer.
 
 @item
-If a duplicable extent has the @code{replicating} property, then when
-it is copied into a string, the parent of the new extent is set to the
-extent it was copied from.
-
-@item
-When an extent with the @code{replicating} property is copied from
-a string back into a buffer:
-
-@itemize @minus
-@item
-If the extent's parent was detached from this buffer, it is reattached
-at the new range.
-
-@item
-If the extent's parent is attached to this buffer and is contiguous with
-or overlaps the new range, it is simply extended to include that range.
-Note that in this case the extent's @code{paste-function} is not called
-(see below).
-
-@item
-If the extent's parent was detached from another buffer, it is copied
-as if by @code{copy-extent} and attached at the new range.
-
-@item
-If the extent's parent is attached to another buffer, or is attached to
-this buffer and does not overlap the new range, it is copied as if by
-@code{copy-extent} and attached at the new range.  However, if the
-extent's parent has the @code{unique} property, this action is inhibited
-and nothing happens.
-@end itemize
-
-@item
 When @code{concat} is called on strings, the extents in the strings are
-copied into the resulting string.  If two or more replicating extents
-with the same parent end up overlapping or abutting in the resulting
-string, they are merged into a single extent.
+copied into the resulting string.
 
 @item
 When @code{substring} is called on a string, the relevant extents
@@ -883,10 +824,8 @@
 deletion, or inserted by @code{insert-extent} or string insertion, the
 action is recorded by the undo mechanism so that it can be undone later.
 Note that if an extent gets detached and then a later undo causes the
-extent to get reinserted, the new extent will be `eq' to the original
-extent if and only if the extent has the @code{replicating} property
-set.  This is the same as what happens when a string is cut and then
-pasted back in.
+extent to get reinserted, the new extent will not be `eq' to the original
+extent.
 
 @item
 Extent motion, face changes, and attachment via @code{make-extent} are
--- a/man/new-users-guide/custom2.texi	Mon Aug 13 09:12:11 2007 +0200
+++ b/man/new-users-guide/custom2.texi	Mon Aug 13 09:12:40 2007 +0200
@@ -419,13 +419,13 @@
 @noindent
 If you want to write your own menus, you can look at some of the
 examples in
-@file{/usr/local/lib/xemacs-19.13/lisp/packages/big-menubar.el} file.
+@file{/usr/local/lib/xemacs-20.0/lisp/packages/big-menubar.el} file.
 
 @end itemize
 
    For more information on initializing your @file{.emacs} file,
 @xref{Init File,,,,XEmacs User's Manual}. You should also look at
-@file{/usr/local/lib/xemacs-19.13/etc/sample.emacs}, which is a sample
+@file{/usr/local/lib/xemacs-20.0/etc/sample.emacs}, which is a sample
 @file{.emacs} file. It contains some of the commonly desired
 customizations in Emacs. 
 
--- a/src/ChangeLog	Mon Aug 13 09:12:11 2007 +0200
+++ b/src/ChangeLog	Mon Aug 13 09:12:40 2007 +0200
@@ -1,3 +1,26 @@
+Fri Feb  7 11:36:56 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* mule-coding.c (Fdecode_coding_region): Make explicit call to
+	`barf_if_buffer_read_only'.
+	(Fencode_coding_region): Ditto.
+
+Thu Feb  6 22:39:39 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* extents.c (syms_of_extents): Remove references to replicating
+	extents.
+
+	* extents.h (struct extent): Remove references to replicating
+	extents.
+
+Thu Feb  6 01:11:43 1997  Jareth Hein  <jhod@po.iijnet.or.jp>
+
+	* mule-coding.c (ENCODE_SJIS): Correct typo.
+
+Thu Feb  6 01:10:22 1997  Steven L Baur  <steve@altair.xemacs.org>
+
+	* frame.c (delete_frame_internal): Protect against deletion of
+	frames with living popup children.
+
 Wed Feb  5 17:13:17 1997  David Moore  <dmoore@UCSD.EDU>
 
 	* emacs.c (main_1): Try to avoid collisions against potentially
--- a/src/extents.c	Mon Aug 13 09:12:11 2007 +0200
+++ b/src/extents.c	Mon Aug 13 09:12:40 2007 +0200
@@ -445,7 +445,6 @@
 /* Qhighlight defined in general.c */
 Lisp_Object Qunique;
 Lisp_Object Qduplicable;
-Lisp_Object Qreplicating;
 Lisp_Object Qdetachable;
 Lisp_Object Qpriority;
 Lisp_Object Qmouse_face;
@@ -2959,12 +2958,11 @@
   if (!NILP (extent_read_only (anc))) *bp++ = '%';
   if (!NILP (extent_mouse_face (anc))) *bp++ = 'H';
   if (extent_unique_p (anc)) *bp++ = 'U';
-  else if (extent_replicating_p (anc)) *bp++ = 'R';
   else if (extent_duplicable_p (anc)) *bp++ = 'D';
   if (!NILP (extent_invisible (anc))) *bp++ = 'I';
 
   if (!NILP (extent_read_only (anc)) || !NILP (extent_mouse_face (anc)) ||
-      extent_unique_p (anc) || extent_replicating_p (anc) ||
+      extent_unique_p (anc) ||
       extent_duplicable_p (anc) || !NILP (extent_invisible (anc)))
     *bp++ = ' ';
 
@@ -5078,26 +5076,13 @@
                     string into a buffer, the extents are copied back
                     into the buffer.
                     
- replicating        Meaningful only in conjunction with `duplicable'.
-                    If this flag is set, extents that are copied from
-                    buffers into strings are made children of the
-                    original extent.  When the string is pasted back
-                    into a buffer, the same extent (i.e. the `eq'
-                    predicate applies) that was originally in the
-                    buffer will be used if possible -- i.e. if the
-                    extent is detached or the paste location abuts or
-                    overlaps the extent.  This behavior is compatible
-                    with the old "extent replica" behavior and was
-                    apparently required by Energize.
-                    
- unique             Meaningful only in conjunction with `duplicable'
-                    and `replicating'.  When this is set, there may be
-                    only one instance of this extent attached at a
-                    time: if it is copied to the kill ring and then
-                    yanked, the extent is not copied.  If, however, it
-                    is killed (removed from the buffer) and then
-                    yanked, it will be re-attached at the new
-                    position.
+ unique             Meaningful only in conjunction with `duplicable'.
+                    When this is set, there may be only one instance
+                    of this extent attached at a time: if it is copied
+                    to the kill ring and then yanked, the extent is
+                    not copied.  If, however, it is killed (removed
+                    from the buffer) and then yanked, it will be
+                    re-attached at the new position.
                     
  invisible          If the value is non-nil, text under this extent
                     may be treated as not present for the purpose of
@@ -5153,8 +5138,7 @@
                     `inside-margin', or `outside-margin') of the extent's
                     begin glyph.
 
- end-glyph-layout   The layout policy of the extent's end glyph.
-*/
+ end-glyph-layout The layout policy of the extent's end glyph.  */
        (extent, property, value))
 {
   /* This function can GC if property is `keymap' */
@@ -5167,8 +5151,6 @@
     extent_unique_p (e) = !NILP (value);
   else if (EQ (property, Qduplicable))
     extent_duplicable_p (e) = !NILP (value);
-  else if (EQ (property, Qreplicating))
-    extent_replicating_p (e) = !NILP (value);
   else if (EQ (property, Qinvisible))
     set_extent_invisible (e, value);
   else if (EQ (property, Qdetachable))
@@ -5255,7 +5237,6 @@
   else if (EQ (property, Qend_open))	 RETURN_FLAG (end_open);
   else if (EQ (property, Qunique))	 RETURN_FLAG (unique);
   else if (EQ (property, Qduplicable))	 RETURN_FLAG (duplicable);
-  else if (EQ (property, Qreplicating))	 RETURN_FLAG (replicating);
   else if (EQ (property, Qdetachable))	 RETURN_FLAG (detachable);
 #undef RETURN_FLAG
   /* Support (but don't document...) the obvious antonyms. */
@@ -5358,7 +5339,6 @@
   result = Fcons (sym, Fcons (Qt, result))
   CONS_FLAG (end_open, Qend_open);
   CONS_FLAG (start_open, Qstart_open);
-  CONS_FLAG (replicating, Qreplicating);
   CONS_FLAG (detachable, Qdetachable);
   CONS_FLAG (duplicable, Qduplicable);
   CONS_FLAG (unique, Qunique);
@@ -5618,14 +5598,6 @@
 				     end + closure->from))
 	return 0;
       e = copy_extent (extent, start, end, closure->string);
-      if (extent_replicating_p (extent))
-	{
-	  Lisp_Object e_obj = Qnil, extent_obj = Qnil;
-
-	  XSETEXTENT (e_obj, e);
-	  XSETEXTENT (extent_obj, extent);
-	  Fset_extent_parent (e_obj, extent_obj);
-	}
     }
 
   return 0;
@@ -5693,62 +5665,12 @@
   if (!extent_duplicable_p (extent))
     return 0;
 
-  if (!extent_replicating_p (extent))
-    {
-      if (!inside_undo &&
-	  !run_extent_paste_function (extent, new_start, new_end,
-				      closure->buffer))
-	return 0;
-      copy_extent (extent, new_start, new_end, closure->buffer);
-    }
-  else
-    {
-      Bytind parstart = 0;
-      Bytind parend = 0;
-      Lisp_Object parent_obj = extent_parent (extent);
-      EXTENT parent;
-
-      if (!EXTENTP (parent_obj))
-	return 0;
-      parent = XEXTENT (parent_obj);
-      if (!EXTENT_LIVE_P (parent))
-	return 0;
-
-      if (!extent_detached_p (parent))
-	{
-	  parstart = extent_endpoint_bytind (parent, 0);
-	  parend = extent_endpoint_bytind (parent, 1);
-	}
-
-/* #### remove this crap */
-#ifdef ENERGIZE
-      /* Energize extents like toplevel-forms can only be pasted 
-	 in the buffer they come from.  This should be parametrized
-	 in the generic extent objects.  Right now just silently
-	 skip the extents if it's not from the same buffer.
-	 */
-      if (!EQ (extent_object (parent), closure->buffer)
-	  && energize_extent_data (parent))
-	return 0;
-#endif
-	  
-      /* If this is a `unique' extent, and it is currently attached
-	 somewhere other than here (non-overlapping), then don't copy
-	 it (that's what `unique' means).  If however it is detached,
-	 or if we are inserting inside/adjacent to the original
-	 extent, then insert_extent() will simply reattach it, which
-	 is what we want.
-	 */
-      if (extent_unique_p (parent)
-	  && !extent_detached_p (parent)
-	  && (!EQ (extent_object (parent), closure->buffer)
-	      || parend > new_end
-	      || parstart < new_start))
-	return 0;
-  
-      insert_extent (parent, new_start, new_end,
-		     closure->buffer, !inside_undo);
-    }
+  if (!inside_undo &&
+      !run_extent_paste_function (extent, new_start, new_end,
+				  closure->buffer))
+    return 0;
+  copy_extent (extent, new_start, new_end, closure->buffer);
+
   return 0;
 }
 
@@ -5801,13 +5723,6 @@
   struct copy_string_extents_1_arg *closure = 
     (struct copy_string_extents_1_arg *) arg;
 
-  if (extent_replicating_p (extent) &&
-      EQ (extent_parent (extent), closure->parent_in_question))
-    {
-      closure->found_extent = extent;
-      return 1; /* stop mapping */
-    }
-
   return 0;
 }
 
@@ -5831,35 +5746,6 @@
   new_start = old_start + closure->new_pos - closure->old_pos;
   new_end = old_end + closure->new_pos - closure->old_pos;
 
-  if (extent_replicating_p (extent))
-    {
-      struct copy_string_extents_1_arg closure_1;
-
-      closure_1.parent_in_question = extent_parent (extent);
-      closure_1.found_extent = 0;
-
-      /* When adding a replicating extent, we need to make sure
-	 that there isn't an existing replicating extent referring
-	 to the same parent extent that abuts or overlaps.  If so,
-	 we merge with that extent rather than adding anew. */
-      map_extents_bytind (closure->old_pos, closure->old_pos + closure->length,
-			  copy_string_extents_1_mapper,
-			  (void *) &closure, closure->new_string, 0,
-			  /* get all extents that abut the region */
-			  ME_END_CLOSED | ME_ALL_EXTENTS_CLOSED);
-      if (closure_1.found_extent)
-	{
-	  Bytecount exstart =
-	    extent_endpoint_bytind (closure_1.found_extent, 0);
-	  Bytecount exend =
-	    extent_endpoint_bytind (closure_1.found_extent, 1);
-	  exstart = min (exstart, new_start);
-	  exend = max (exend, new_end);
-	  set_extent_endpoints (closure_1.found_extent, exstart, exend, Qnil);
-	  return 0;
-	}
-    }
-      
   copy_extent (extent,
 	       old_start + closure->new_pos - closure->old_pos,
 	       old_end + closure->new_pos - closure->old_pos,
@@ -6662,7 +6548,6 @@
   /* defsymbol (&Qhighlight, "highlight"); in faces.c */
   defsymbol (&Qunique, "unique");
   defsymbol (&Qduplicable, "duplicable");
-  defsymbol (&Qreplicating, "replicating");
   defsymbol (&Qdetachable, "detachable");
   defsymbol (&Qpriority, "priority");
   defsymbol (&Qmouse_face, "mouse-face");
--- a/src/extents.h	Mon Aug 13 09:12:11 2007 +0200
+++ b/src/extents.h	Mon Aug 13 09:12:40 2007 +0200
@@ -75,7 +75,8 @@
       unsigned int unused9	: 1;  /* 9   unused                          */
       unsigned int unique	: 1;  /* 10  there may be only one attached  */
       unsigned int duplicable	: 1;  /* 11  copied to strings by kill/undo  */
-      unsigned int replicating	: 1;  /* 12  invoke old extent-replica behav.*/
+      unsigned int REPLICATING	: 1;  /* 12  invoke old extent-replica behav.*/
+				      /* Not used any more */
       unsigned int detachable	: 1;  /* 13  extent detaches if text deleted */
       unsigned int internal	: 1;  /* 14  used by map-extents etc.        */
       unsigned int unused15	: 1;  /* 15  unused			     */
@@ -283,7 +284,6 @@
 #define extent_end_open_p(e)	extent_normal_field (e, end_open)
 #define extent_unique_p(e)	extent_normal_field (e, unique)
 #define extent_duplicable_p(e)	extent_normal_field (e, duplicable)
-#define extent_replicating_p(e)	extent_normal_field (e, replicating)
 #define extent_detachable_p(e)	extent_normal_field (e, detachable)
 #define extent_internal_p(e)	extent_normal_field (e, internal)
 
--- a/src/frame.c	Mon Aug 13 09:12:11 2007 +0200
+++ b/src/frame.c	Mon Aug 13 09:12:40 2007 +0200
@@ -1278,6 +1278,29 @@
 	}
     }
 
+  /* Test for popup frames hanging around. */
+  /* Deletion of a parent frame with popups is deadly. */
+  {
+    Lisp_Object frmcons, devcons, concons;
+
+    FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
+      {
+	Lisp_Object this = XCAR (frmcons);
+
+
+	if (! EQ (this, frame)
+	    && EQ (frame, DEVMETH_OR_GIVEN(XDEVICE(XCAR(devcons)),
+					   get_frame_parent,
+					   (XFRAME(this)),
+					   Qnil)))
+	  {
+	    /* We've found a popup frame whose parent is this frame. */
+	    signal_simple_error
+	      ("Attempt to delete a frame with live popups", frame);
+	  }
+      }
+  }
+
   /* Before here, we haven't made any dangerous changes (just checked for
      error conditions).  Now run the delete-frame-hook.  Remember that
      user code there could do any number of dangerous things, including
--- a/src/mule-coding.c	Mon Aug 13 09:12:11 2007 +0200
+++ b/src/mule-coding.c	Mon Aug 13 09:12:40 2007 +0200
@@ -1991,6 +1991,9 @@
   struct gcpro gcpro1, gcpro2;
 
   get_buffer_range_char (buf, start, end, &b, &e, 0);
+
+  barf_if_buffer_read_only (buf, b, e);
+
   coding_system = Fget_coding_system (coding_system);
   instream  = make_lisp_buffer_input_stream  (buf, b, e, 0);
   outstream = make_lisp_buffer_output_stream (buf, b, 0);
@@ -2379,6 +2382,9 @@
   struct gcpro gcpro1, gcpro2;
 
   get_buffer_range_char (buf, start, end, &b, &e, 0);
+
+  barf_if_buffer_read_only (buf, b, e);
+
   coding_system = Fget_coding_system (coding_system);
   instream  = make_lisp_buffer_input_stream  (buf, b, e, 0);
   outstream = make_lisp_buffer_output_stream (buf, b, 0);
@@ -2486,7 +2492,7 @@
 
 #define ENCODE_SJIS(c1, c2, sj1, sj2)			\
 do {							\
-  int I1 = c1, I2 = sj2;				\
+  int I1 = c1, I2 = c2;					\
   if (I1 & 1)						\
     sj1 = (I1 >> 1) + ((I1 < 0xdf) ? 0x31 : 0x71),	\
     sj2 = I2 - ((I2 >= 0xe0) ? 0x60 : 0x61);		\