Revision history for Emacs-Rep

0.01    Sun May 30 12:23:55 2010
        First version.
        Limitation: all of perl's substitutions syntax is
        not supported, in particular substitutions with embedded
        semicolons may behave oddly.

0.02    Sun Jun  6 17:36:22 2010
        Using a PPI-based solution now.  The full range of perl's
        substitution syntax is now supported.
        Have support for multi-line substitutions.
        Window management is more careful (no crashes
        from the current window being too small).
        User set-up is more flexible (easy to use an alternative key prefix).

0.03    Fri Jun 11 04:31:04 2010
        Implemented an entirely new system of managing change
        metadata, which now supports an indefinite series of
        individual undos of cascading, overlapping substitution
        changes.
        The modified buffer is now made read-only until changes
        are accepted.
        User set-up with rep-standard-setup is still more flexible.

0.04    Sat Jun 12 22:34:28 2010

        Cleaner handling of zero-width end results (i.e.  when a
        s///g is used to delete a string entirely, now you can
        still tab to that location and undo the deletion).
        Also made modifications to backtab behavior to work better
        with these "zero width" regions.

0.05    Tue Jun 15 11:44:04 2010

        Cleaner implementation of tab/backtab functions in
        rep-modififed-mode:
        These:
          rep-modified-skip-to-next-change and rep-modified-skip-to-prev-change
        now use the primitives:
           rep-at-start-of-changed-region
           rep-at-end-of-changed-region
        which are built on top of the (successful) experiment:
           rep-rising-or-falling-edge

0.08    Sat Jun  9 19:44:03 2012

        Completely re-worked how the changes are managed in
        emacs, so that undos of multiple, overlapping changes
        work correctly:

        Now overlays are used to indicate changed regions
        (because they support zero-width regions), and a buffer
        local data structure is used to save metadata for each
        change, including a list of shadowed changes with
        locations measured relative to the change, so that and
        "undo" command can properly re-set the extent of any
        affected overlays.

        The perl side no longer tries to use the "revise_locations"
        code to fix-up the recorded locations: instead the change
        metadata is used on the emacs side in inverse order so that
        the original, unrevised numbering is always correct when
        a change is applied.

        The metadata returned from the perl routine do_find_and_reps
        is restricted to just what's currently in use by rep.el:
        there's less redundancy, with the 'end' field elimated
        (since you can always get it by adding a string length to
        'beg').  Similarly, the old context string features
        'pre' and 'post' have been dropped.

        The TAB and BACKTAB features now behave in a consistent
        way, skipping forward or back to the nearest *top level*
        change (meaning a whole change unshadowed by any later
        one).  This implementation is completely different from
        the one mentioned above for version 0.05.

0.09  Tue Jun 26 09:47:31 2012

      Fixed TAB and BACKTAB features to find deletions (zero-width
      regions), now handles multiple adjacent deltions sensible
      (regards them all as in the same place, and the last one
      made is "on top" and visible to the rep-undo command).

      Added TODO file to the distribution.

1.00  Wed Jul  4 12:34:38 2012

      Further improvements to TAB/BACKTAB to handle corner cases
      (nested, overlapping changes to changes, etc).

      Cleaned-up rep.el code somewhat, removing some redundant
      features, explicitly checking for nil values (rather than
      letting the emacs code crash with myserious overlayp errors).

      This application now has no known bugs (though it is
      not yet tested with the new GNU emacs 24 release),
      hence the jump to 1.0.