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.