aboutsummaryrefslogtreecommitdiffstats
path: root/src/editfns.c
diff options
context:
space:
mode:
authorMiles Bader2007-04-11 00:17:47 +0000
committerMiles Bader2007-04-11 00:17:47 +0000
commit57cb2e6f261bb0aad81a9f7e6f3017b54adee068 (patch)
tree6ceb46f2e3bf08f16468d77f4fbfd201f637596a /src/editfns.c
parent3bd1d328e94787ac52ef6ba5dfec3b94ba23917a (diff)
parentc429815a6b9d271a57eed4956125f6bc89d1d72b (diff)
downloademacs-57cb2e6f261bb0aad81a9f7e6f3017b54adee068.tar.gz
emacs-57cb2e6f261bb0aad81a9f7e6f3017b54adee068.zip
Merge from emacs--devo--0
Patches applied: * emacs--devo--0 (patch 675-697) - Update from CVS - Merge from gnus--rel--5.10 - Release ERC 5.2. * gnus--rel--5.10 (patch 211-215) - Update from CVS - Merge from emacs--devo--0 Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-189
Diffstat (limited to 'src/editfns.c')
-rw-r--r--src/editfns.c42
1 files changed, 30 insertions, 12 deletions
diff --git a/src/editfns.c b/src/editfns.c
index d2cd31044ce..fa5f9c11684 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -272,7 +272,9 @@ clip_to_bounds (lower, num, upper)
272 272
273DEFUN ("goto-char", Fgoto_char, Sgoto_char, 1, 1, "NGoto char: ", 273DEFUN ("goto-char", Fgoto_char, Sgoto_char, 1, 1, "NGoto char: ",
274 doc: /* Set point to POSITION, a number or marker. 274 doc: /* Set point to POSITION, a number or marker.
275Beginning of buffer is position (point-min), end is (point-max). */) 275Beginning of buffer is position (point-min), end is (point-max).
276
277The return value is POSITION. */)
276 (position) 278 (position)
277 register Lisp_Object position; 279 register Lisp_Object position;
278{ 280{
@@ -4261,7 +4263,10 @@ Transposing beyond buffer boundaries is an error. */)
4261 int gap, len1, len_mid, len2; 4263 int gap, len1, len_mid, len2;
4262 unsigned char *start1_addr, *start2_addr, *temp; 4264 unsigned char *start1_addr, *start2_addr, *temp;
4263 4265
4264 INTERVAL cur_intv, tmp_interval1, tmp_interval_mid, tmp_interval2; 4266 INTERVAL cur_intv, tmp_interval1, tmp_interval_mid, tmp_interval2, tmp_interval3;
4267 Lisp_Object buf;
4268
4269 XSETBUFFER (buf, current_buffer);
4265 cur_intv = BUF_INTERVALS (current_buffer); 4270 cur_intv = BUF_INTERVALS (current_buffer);
4266 4271
4267 validate_region (&startr1, &endr1); 4272 validate_region (&startr1, &endr1);
@@ -4368,8 +4373,11 @@ Transposing beyond buffer boundaries is an error. */)
4368 4373
4369 tmp_interval1 = copy_intervals (cur_intv, start1, len1); 4374 tmp_interval1 = copy_intervals (cur_intv, start1, len1);
4370 tmp_interval2 = copy_intervals (cur_intv, start2, len2); 4375 tmp_interval2 = copy_intervals (cur_intv, start2, len2);
4371 Fset_text_properties (make_number (start1), make_number (end2), 4376 /* Don't use Fset_text_properties: that can cause GC, which can
4372 Qnil, Qnil); 4377 clobber objects stored in the tmp_intervals. */
4378 tmp_interval3 = validate_interval_range (buf, &startr1, &endr2, 0);
4379 if (!NULL_INTERVAL_P (tmp_interval3))
4380 set_text_properties_1 (startr1, endr2, Qnil, buf, tmp_interval3);
4373 4381
4374 /* First region smaller than second. */ 4382 /* First region smaller than second. */
4375 if (len1_byte < len2_byte) 4383 if (len1_byte < len2_byte)
@@ -4425,10 +4433,14 @@ Transposing beyond buffer boundaries is an error. */)
4425 record_change (start2, len2); 4433 record_change (start2, len2);
4426 tmp_interval1 = copy_intervals (cur_intv, start1, len1); 4434 tmp_interval1 = copy_intervals (cur_intv, start1, len1);
4427 tmp_interval2 = copy_intervals (cur_intv, start2, len2); 4435 tmp_interval2 = copy_intervals (cur_intv, start2, len2);
4428 Fset_text_properties (make_number (start1), make_number (end1), 4436
4429 Qnil, Qnil); 4437 tmp_interval3 = validate_interval_range (buf, &startr1, &endr1, 0);
4430 Fset_text_properties (make_number (start2), make_number (end2), 4438 if (!NULL_INTERVAL_P (tmp_interval3))
4431 Qnil, Qnil); 4439 set_text_properties_1 (startr1, endr1, Qnil, buf, tmp_interval3);
4440
4441 tmp_interval3 = validate_interval_range (buf, &startr2, &endr2, 0);
4442 if (!NULL_INTERVAL_P (tmp_interval3))
4443 set_text_properties_1 (startr2, endr2, Qnil, buf, tmp_interval3);
4432 4444
4433 SAFE_ALLOCA (temp, unsigned char *, len1_byte); 4445 SAFE_ALLOCA (temp, unsigned char *, len1_byte);
4434 start1_addr = BYTE_POS_ADDR (start1_byte); 4446 start1_addr = BYTE_POS_ADDR (start1_byte);
@@ -4454,8 +4466,10 @@ Transposing beyond buffer boundaries is an error. */)
4454 tmp_interval1 = copy_intervals (cur_intv, start1, len1); 4466 tmp_interval1 = copy_intervals (cur_intv, start1, len1);
4455 tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid); 4467 tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid);
4456 tmp_interval2 = copy_intervals (cur_intv, start2, len2); 4468 tmp_interval2 = copy_intervals (cur_intv, start2, len2);
4457 Fset_text_properties (make_number (start1), make_number (end2), 4469
4458 Qnil, Qnil); 4470 tmp_interval3 = validate_interval_range (buf, &startr1, &endr2, 0);
4471 if (!NULL_INTERVAL_P (tmp_interval3))
4472 set_text_properties_1 (startr1, endr2, Qnil, buf, tmp_interval3);
4459 4473
4460 /* holds region 2 */ 4474 /* holds region 2 */
4461 SAFE_ALLOCA (temp, unsigned char *, len2_byte); 4475 SAFE_ALLOCA (temp, unsigned char *, len2_byte);
@@ -4485,8 +4499,10 @@ Transposing beyond buffer boundaries is an error. */)
4485 tmp_interval1 = copy_intervals (cur_intv, start1, len1); 4499 tmp_interval1 = copy_intervals (cur_intv, start1, len1);
4486 tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid); 4500 tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid);
4487 tmp_interval2 = copy_intervals (cur_intv, start2, len2); 4501 tmp_interval2 = copy_intervals (cur_intv, start2, len2);
4488 Fset_text_properties (make_number (start1), make_number (end2), 4502
4489 Qnil, Qnil); 4503 tmp_interval3 = validate_interval_range (buf, &startr1, &endr2, 0);
4504 if (!NULL_INTERVAL_P (tmp_interval3))
4505 set_text_properties_1 (startr1, endr2, Qnil, buf, tmp_interval3);
4490 4506
4491 /* holds region 1 */ 4507 /* holds region 1 */
4492 SAFE_ALLOCA (temp, unsigned char *, len1_byte); 4508 SAFE_ALLOCA (temp, unsigned char *, len1_byte);
@@ -4521,6 +4537,8 @@ Transposing beyond buffer boundaries is an error. */)
4521 fix_start_end_in_overlays (start1, end2); 4537 fix_start_end_in_overlays (start1, end2);
4522 } 4538 }
4523 4539
4540 signal_after_change (XINT (start1), XINT (end2 - start1),
4541 XINT (end2 - start1));
4524 return Qnil; 4542 return Qnil;
4525} 4543}
4526 4544