Mercurial > emacs
comparison src/undo.c @ 14480:50954bb380b6
(record_marker_adjustment): New function.
(Fprimitive_undo): Handle marker-adjustment elements.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 03 Feb 1996 18:07:27 +0000 |
parents | ee40177f6c68 |
children | 855c8d8ba0f0 |
comparison
equal
deleted
inserted
replaced
14479:69fa625812a4 | 14480:50954bb380b6 |
---|---|
123 current_buffer->undo_list | 123 current_buffer->undo_list |
124 = Fcons (make_number (last_point_position), current_buffer->undo_list); | 124 = Fcons (make_number (last_point_position), current_buffer->undo_list); |
125 | 125 |
126 current_buffer->undo_list | 126 current_buffer->undo_list |
127 = Fcons (Fcons (Fbuffer_substring (lbeg, lend), sbeg), | 127 = Fcons (Fcons (Fbuffer_substring (lbeg, lend), sbeg), |
128 current_buffer->undo_list); | |
129 } | |
130 | |
131 /* Record the fact that MARKER is about to be adjusted by ADJUSTMENT. | |
132 This is done only when a marker points within text being deleted, | |
133 because that's the only case where an automatic marker adjustment | |
134 won't be inverted automatically by undoing the buffer modification. */ | |
135 | |
136 record_marker_adjustment (marker, adjustment) | |
137 Lisp_Object marker; | |
138 int adjustment; | |
139 { | |
140 if (EQ (current_buffer->undo_list, Qt)) | |
141 return; | |
142 | |
143 /* Allocate a cons cell to be the undo boundary after this command. */ | |
144 if (NILP (pending_boundary)) | |
145 pending_boundary = Fcons (Qnil, Qnil); | |
146 | |
147 if (current_buffer != XBUFFER (last_undo_buffer)) | |
148 Fundo_boundary (); | |
149 XSETBUFFER (last_undo_buffer, current_buffer); | |
150 | |
151 current_buffer->undo_list | |
152 = Fcons (Fcons (marker, make_number (adjustment)), | |
128 current_buffer->undo_list); | 153 current_buffer->undo_list); |
129 } | 154 } |
130 | 155 |
131 /* Record that a replacement is about to take place, | 156 /* Record that a replacement is about to take place, |
132 for LENGTH characters at location BEG. | 157 for LENGTH characters at location BEG. |
461 situations. */ | 486 situations. */ |
462 Finsert_before_markers (1, &membuf); | 487 Finsert_before_markers (1, &membuf); |
463 SET_PT (pos); | 488 SET_PT (pos); |
464 } | 489 } |
465 } | 490 } |
491 else if (MARKERP (car) && INTEGERP (cdr)) | |
492 { | |
493 /* (MARKER . INTEGER) means a marker MARKER | |
494 was adjusted by INTEGER. */ | |
495 if (XMARKER (car)->buffer) | |
496 Fset_marker (car, | |
497 make_number (marker_position (car) - XINT (cdr)), | |
498 Fmarker_buffer (car)); | |
499 } | |
466 } | 500 } |
467 } | 501 } |
468 arg--; | 502 arg--; |
469 } | 503 } |
470 | 504 |