diff options
| author | Miles Bader | 2007-04-11 00:17:47 +0000 |
|---|---|---|
| committer | Miles Bader | 2007-04-11 00:17:47 +0000 |
| commit | 57cb2e6f261bb0aad81a9f7e6f3017b54adee068 (patch) | |
| tree | 6ceb46f2e3bf08f16468d77f4fbfd201f637596a /src/editfns.c | |
| parent | 3bd1d328e94787ac52ef6ba5dfec3b94ba23917a (diff) | |
| parent | c429815a6b9d271a57eed4956125f6bc89d1d72b (diff) | |
| download | emacs-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.c | 42 |
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 | ||
| 273 | DEFUN ("goto-char", Fgoto_char, Sgoto_char, 1, 1, "NGoto char: ", | 273 | DEFUN ("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. |
| 275 | Beginning of buffer is position (point-min), end is (point-max). */) | 275 | Beginning of buffer is position (point-min), end is (point-max). |
| 276 | |||
| 277 | The 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 | ||