• Barry O'Reilly's avatar
    Undo in region after markers in undo history relocated · 37ea8275
    Barry O'Reilly authored
    * simple.el (primitive-undo): Only process marker adjustments
    validated against their corresponding (TEXT . POS).  Issue warning
    for lone marker adjustments in undo history.  (Bug#16818)
    (undo-make-selective-list): Add marker adjustments to selective
    undo list based on whether their corresponding (TEXT . POS) is in
    the region.  Remove variable adjusted-markers, which was unused
    and only non nil during undo-make-selective-list.
    (undo-elt-in-region): Return nil when passed a marker adjustment
    and explain in function doc.
    
    Have (MARKER . ADJUSTMENT) undo records always be immediately
    after their corresponding (TEXT . POS) record in undo list.
    (Bug#16818)
    * lisp.h (record-delete): New arg record_markers.
    (record_marker_adjustment): No longer needed outside undo.c.
    * insdel.c (adjust_markers_for_delete): Move calculation of marker
    adjustments to undo.c's record_marker_adjustments.  Note that
    fileio.c's decide_coding_unwind is another caller to
    adjust_markers_for_delete.  Because it has undo list bound to t,
    it does not rely on adjust_markers_for_delete to record marker
    adjustments.
    (del_range_2): Swap call to record_delete and
    adjust_markers_for_delete so as undo marker adjustments are
    recorded before current deletion's adjustments, as before.
    (adjust_after_replace):
    (replace_range): Pass value for new record_markers arg to
    delete_record.
    * undo.c (record_marker_adjustment): Renamed to
    record_marker_adjustments and made static.
    (record_delete): Check record_markers arg and call
    record_marker_adjustments.
    (record_change): Pass value for new record_markers arg to
    delete_record.
    (record_point): at_boundary calculation no longer needs to account
    for marker adjustments.
    
    * undo-tests.el (undo-test-marker-adjustment-nominal):
    (undo-test-region-t-marker): New tests of marker adjustments.
    (undo-test-marker-adjustment-moved):
    (undo-test-region-mark-adjustment): New tests to demonstrate
    bug#16818, which fail without the fix.
    
    * markers.texi (Moving Marker Positions): The 2014-03-02 doc
    change mentioning undo's inability to handle relocated markers no
    longer applies.  See bug#16818.
    * text.texi (Undo): Expand documentation of (TEXT . POS) and
    (MARKER . ADJUSTMENT) undo elements.
    37ea8275
undo.c 16.3 KB