Mercurial > emacs
changeset 22107:5507c26908af
(insert_1_both, insert_from_string_1, replace_range)
(insert_from_buffer_1, adjust_before_replace, adjust_after_replace):
Don't copy text being deleted, if undo is disabled.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 16 May 1998 20:34:59 +0000 |
parents | f4a52ea42920 |
children | 7d28e1d5ea0e |
files | src/insdel.c |
diffstat | 1 files changed, 121 insertions(+), 58 deletions(-) [+] |
line wrap: on
line diff
--- a/src/insdel.c Sat May 16 19:56:07 1998 +0000 +++ b/src/insdel.c Sat May 16 20:34:59 1998 +0000 @@ -1014,7 +1014,7 @@ register int nchars, nbytes; int inherit, prepare, before_markers; { - register Lisp_Object temp, deletion; + register Lisp_Object temp; int combined_before_bytes, combined_after_bytes; if (NILP (current_buffer->enable_multibyte_characters)) @@ -1045,23 +1045,33 @@ if (combined_after_bytes) { - deletion = make_buffer_string_both (PT, PT_BYTE, - PT + combined_after_bytes, - PT_BYTE + combined_after_bytes, 1); + Lisp_Object deletion; + deletion = Qnil; + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (PT, PT_BYTE, + PT + combined_after_bytes, + PT_BYTE + combined_after_bytes, 1); adjust_markers_for_record_delete (PT, PT_BYTE, PT + combined_after_bytes, PT_BYTE + combined_after_bytes); - record_delete (PT, deletion); + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (PT, deletion); } if (combined_before_bytes) { - deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1), - PT, PT_BYTE, 1); + Lisp_Object deletion; + deletion = Qnil; + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1), + PT, PT_BYTE, 1); adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1), PT, PT_BYTE); - record_delete (PT - 1, deletion); + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (PT - 1, deletion); } record_insert (PT - !!combined_before_bytes, @@ -1170,7 +1180,6 @@ int combined_before_bytes, combined_after_bytes; int adjusted_nchars; INTERVAL intervals; - Lisp_Object deletion; /* Make OUTGOING_NBYTES describe the text as it will be inserted in this buffer. */ @@ -1220,23 +1229,33 @@ if (combined_after_bytes) { - deletion = make_buffer_string_both (PT, PT_BYTE, - PT + combined_after_bytes, - PT_BYTE + combined_after_bytes, 1); + Lisp_Object deletion; + deletion = Qnil; + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (PT, PT_BYTE, + PT + combined_after_bytes, + PT_BYTE + combined_after_bytes, 1); adjust_markers_for_record_delete (PT, PT_BYTE, PT + combined_after_bytes, PT_BYTE + combined_after_bytes); - record_delete (PT, deletion); + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (PT, deletion); } if (combined_before_bytes) { - deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1), - PT, PT_BYTE, 1); + Lisp_Object deletion; + deletion = Qnil; + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1), + PT, PT_BYTE, 1); adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1), PT, PT_BYTE); - record_delete (PT - 1, deletion); + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (PT - 1, deletion); } record_insert (PT - !!combined_before_bytes, @@ -1318,7 +1337,7 @@ int from, nchars; int inherit; { - register Lisp_Object temp, deletion; + register Lisp_Object temp; int chunk; int from_byte = buf_charpos_to_bytepos (buf, from); int to_byte = buf_charpos_to_bytepos (buf, from + nchars); @@ -1391,23 +1410,33 @@ if (combined_after_bytes) { - deletion = make_buffer_string_both (PT, PT_BYTE, - PT + combined_after_bytes, - PT_BYTE + combined_after_bytes, 1); + Lisp_Object deletion; + deletion = Qnil; + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (PT, PT_BYTE, + PT + combined_after_bytes, + PT_BYTE + combined_after_bytes, 1); adjust_markers_for_record_delete (PT, PT_BYTE, PT + combined_after_bytes, PT_BYTE + combined_after_bytes); - record_delete (PT, deletion); + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (PT, deletion); } if (combined_before_bytes) { - deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1), - PT, PT_BYTE, 1); + Lisp_Object deletion; + deletion = Qnil; + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1), + PT, PT_BYTE, 1); adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1), PT, PT_BYTE); - record_delete (PT - 1, deletion); + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (PT - 1, deletion); } record_insert (PT - !!combined_before_bytes, @@ -1474,12 +1503,17 @@ int from, from_byte, to, to_byte; { Lisp_Object deletion; - deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1); + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1); CHECK_MARKERS (); adjust_markers_for_delete (from, from_byte, to, to_byte); - record_delete (from, deletion); + + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (from, deletion); + adjust_overlays_for_delete (from, to - from); } @@ -1499,28 +1533,39 @@ = count_combining_before (GPT_ADDR, len_byte, from, from_byte); int combined_after_bytes = count_combining_after (GPT_ADDR, len_byte, from, from_byte); - Lisp_Object deletion; int nchars_del = 0, nbytes_del = 0; if (combined_after_bytes) { - deletion = make_buffer_string_both (from, from_byte, - from + combined_after_bytes, - from_byte + combined_after_bytes, 1); + Lisp_Object deletion; + deletion = Qnil; + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (from, from_byte, + from + combined_after_bytes, + from_byte + combined_after_bytes, + 1); adjust_markers_for_record_delete (from, from_byte, from + combined_after_bytes, from_byte + combined_after_bytes); - record_delete (from, deletion); + + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (from, deletion); } if (combined_before_bytes) { - deletion = make_buffer_string_both (from - 1, CHAR_TO_BYTE (from - 1), - from, from_byte, 1); + Lisp_Object deletion; + deletion = Qnil; + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (from - 1, CHAR_TO_BYTE (from - 1), + from, from_byte, 1); adjust_markers_for_record_delete (from - 1, CHAR_TO_BYTE (from - 1), from, from_byte); - record_delete (from - 1, deletion); + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (from - 1, deletion); } /* Update various buffer positions for the new text. */ @@ -1624,7 +1669,6 @@ int adjusted_inschars; INTERVAL intervals; int outgoing_insbytes = insbytes; - Lisp_Object deletion; CHECK_MARKERS (); @@ -1676,16 +1720,23 @@ if (to < GPT) gap_left (to, to_byte, 0); - deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1); - - if (nomarkers) - /* Relocate all markers pointing into the new, larger gap - to point at the end of the text before the gap. - Do this before recording the deletion, - so that undo handles this after reinserting the text. */ - adjust_markers_for_delete (from, from_byte, to, to_byte); - - record_delete (from, deletion); + { + Lisp_Object deletion; + deletion = Qnil; + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1); + + if (nomarkers) + /* Relocate all markers pointing into the new, larger gap + to point at the end of the text before the gap. + Do this before recording the deletion, + so that undo handles this after reinserting the text. */ + adjust_markers_for_delete (from, from_byte, to, to_byte); + + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (from, deletion); + } GAP_SIZE += nbytes_del; ZV -= nchars_del; @@ -1733,23 +1784,33 @@ if (combined_after_bytes) { - deletion = make_buffer_string_both (PT, PT_BYTE, - PT + combined_after_bytes, - PT_BYTE + combined_after_bytes, 1); + Lisp_Object deletion; + deletion = Qnil; + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (PT, PT_BYTE, + PT + combined_after_bytes, + PT_BYTE + combined_after_bytes, 1); adjust_markers_for_record_delete (PT, PT_BYTE, PT + combined_after_bytes, PT_BYTE + combined_after_bytes); - record_delete (PT, deletion); + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (PT, deletion); } if (combined_before_bytes) { - deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1), - PT, PT_BYTE, 1); + Lisp_Object deletion; + deletion = Qnil; + + if (! EQ (current_buffer->undo_list, Qt)) + deletion = make_buffer_string_both (PT - 1, CHAR_TO_BYTE (PT - 1), + PT, PT_BYTE, 1); adjust_markers_for_record_delete (PT - 1, CHAR_TO_BYTE (PT - 1), PT, PT_BYTE); - record_delete (PT - 1, deletion); + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (PT - 1, deletion); } record_insert (PT - !!combined_before_bytes, @@ -1966,11 +2027,12 @@ else from_byte_1 = from_byte; - deletion - = make_buffer_string_both (from - !!combined_after_bytes, - from_byte_1, - to + combined_after_bytes, - to_byte + combined_after_bytes, 1); + if (! EQ (current_buffer->undo_list, Qt)) + deletion + = make_buffer_string_both (from - !!combined_after_bytes, + from_byte_1, + to + combined_after_bytes, + to_byte + combined_after_bytes, 1); if (combined_after_bytes) /* COMBINED_AFTER_BYTES nonzero means that the above code moved the gap. We must move the gap again to a proper place. */ @@ -1997,7 +2059,8 @@ adjust_markers_for_record_delete (from - 1, from_byte_1, from, from_byte); } - record_delete (from - !!combined_after_bytes, deletion); + if (! EQ (current_buffer->undo_list, Qt)) + record_delete (from - !!combined_after_bytes, deletion); MODIFF++; /* Relocate point as if it were a marker. */