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