Mercurial > emacs
comparison src/buffer.c @ 37752:1085e1cfebaf
(copy_overlays): New function.
(clone_per_buffer_values): Use it.
| author | Gerd Moellmann <gerd@gnu.org> |
|---|---|
| date | Wed, 16 May 2001 12:17:43 +0000 |
| parents | 7db9a70334b7 |
| children | fd7c0dac2110 f01f454ea6bf |
comparison
equal
deleted
inserted
replaced
| 37751:ac83181a33d0 | 37752:1085e1cfebaf |
|---|---|
| 177 Lisp_Object Qinsert_in_front_hooks; | 177 Lisp_Object Qinsert_in_front_hooks; |
| 178 Lisp_Object Qinsert_behind_hooks; | 178 Lisp_Object Qinsert_behind_hooks; |
| 179 | 179 |
| 180 static void alloc_buffer_text P_ ((struct buffer *, size_t)); | 180 static void alloc_buffer_text P_ ((struct buffer *, size_t)); |
| 181 static void free_buffer_text P_ ((struct buffer *b)); | 181 static void free_buffer_text P_ ((struct buffer *b)); |
| 182 static Lisp_Object copy_overlays P_ ((struct buffer *, Lisp_Object)); | |
| 182 | 183 |
| 183 | 184 |
| 184 /* For debugging; temporary. See set_buffer_internal. */ | 185 /* For debugging; temporary. See set_buffer_internal. */ |
| 185 /* Lisp_Object Qlisp_mode, Vcheck_symbol; */ | 186 /* Lisp_Object Qlisp_mode, Vcheck_symbol; */ |
| 186 | 187 |
| 413 b->name = name; | 414 b->name = name; |
| 414 return buf; | 415 return buf; |
| 415 } | 416 } |
| 416 | 417 |
| 417 | 418 |
| 419 /* Return a list of overlays which is a copy of the overlay list | |
| 420 LIST, but for buffer B. */ | |
| 421 | |
| 422 static Lisp_Object | |
| 423 copy_overlays (b, list) | |
| 424 struct buffer *b; | |
| 425 Lisp_Object list; | |
| 426 { | |
| 427 Lisp_Object result, buffer; | |
| 428 | |
| 429 XSETBUFFER (buffer, b); | |
| 430 | |
| 431 for (result = Qnil; CONSP (list); list = XCDR (list)) | |
| 432 { | |
| 433 Lisp_Object overlay, start, end, old_overlay; | |
| 434 int charpos; | |
| 435 | |
| 436 old_overlay = XCAR (list); | |
| 437 charpos = marker_position (OVERLAY_START (old_overlay)); | |
| 438 start = Fmake_marker (); | |
| 439 Fset_marker (start, charpos, buffer); | |
| 440 XMARKER (start)->insertion_type | |
| 441 = XMARKER (OVERLAY_START (old_overlay))->insertion_type; | |
| 442 | |
| 443 charpos = marker_position (OVERLAY_END (old_overlay)); | |
| 444 end = Fmake_marker (); | |
| 445 Fset_marker (end, charpos, buffer); | |
| 446 XMARKER (end)->insertion_type | |
| 447 = XMARKER (OVERLAY_END (old_overlay))->insertion_type; | |
| 448 | |
| 449 overlay = allocate_misc (); | |
| 450 XMISCTYPE (overlay) = Lisp_Misc_Overlay; | |
| 451 OVERLAY_START (overlay) = start; | |
| 452 OVERLAY_END (overlay) = end; | |
| 453 OVERLAY_PLIST (overlay) = Fcopy_sequence (OVERLAY_PLIST (old_overlay)); | |
| 454 | |
| 455 result = Fcons (overlay, result); | |
| 456 } | |
| 457 | |
| 458 return Fnreverse (result); | |
| 459 } | |
| 460 | |
| 461 | |
| 418 /* Clone per-buffer values of buffer FROM. | 462 /* Clone per-buffer values of buffer FROM. |
| 419 | 463 |
| 420 Buffer TO gets the same per-buffer values as FROM, with the | 464 Buffer TO gets the same per-buffer values as FROM, with the |
| 421 following exceptions: (1) TO's name is left untouched, (2) markers | 465 following exceptions: (1) TO's name is left untouched, (2) markers |
| 422 are copied and made to refer to TO, and (3) overlay lists are | 466 are copied and made to refer to TO, and (3) overlay lists are |
| 447 } | 491 } |
| 448 | 492 |
| 449 PER_BUFFER_VALUE (to, offset) = obj; | 493 PER_BUFFER_VALUE (to, offset) = obj; |
| 450 } | 494 } |
| 451 | 495 |
| 452 to->overlays_after = Fcopy_sequence (from->overlays_after); | |
| 453 to->overlays_before = Fcopy_sequence (to->overlays_before); | |
| 454 bcopy (from->local_flags, to->local_flags, sizeof to->local_flags); | 496 bcopy (from->local_flags, to->local_flags, sizeof to->local_flags); |
| 497 | |
| 498 to->overlays_before = copy_overlays (to, from->overlays_before); | |
| 499 to->overlays_after = copy_overlays (to, from->overlays_after); | |
| 455 } | 500 } |
| 456 | 501 |
| 457 | 502 |
| 458 DEFUN ("make-indirect-buffer", Fmake_indirect_buffer, Smake_indirect_buffer, | 503 DEFUN ("make-indirect-buffer", Fmake_indirect_buffer, Smake_indirect_buffer, |
| 459 2, 3, | 504 2, 3, |
