Well got it working - seems to be behaving
. I’ve re-written my LastEditLine (overnight…) code so that it maintains hidden regions that coincide with the edited content. I can now invoke a quick panel to list and jump to the edited lines
. It would be really nice if someone gave it a quick test run (please).
{ "keys": "ctrl+alt+j"], "command": "quick_edits" },
{ "keys": "ctrl+alt+k"], "command": "prev_edit_line" },
{ "keys": "ctrl+alt+l"], "command": "next_edit_line" }
[code]import sublime, sublime_plugin
class PrevEditLineCommand(sublime_plugin.TextCommand):
def run(self, edit):
vid = self.view.id()
sel = self.view.sel()[0]
currA = sel.begin()
currB = sel.end()
curr_line, _ = self.view.rowcol(currA)
edited = self.view.get_regions(“edited_rgns”) or ]
edited_last = self.view.get_regions(“edited_rgn”) or ]
if not edited and not edited_last:
return
edited.extend(edited_last)
self.view.add_regions(“edited_rgns”, edited, “edits”, sublime.HIDDEN)
self.view.erase_regions(“edited_rgn”)
edited = self.view.get_regions(“edited_rgns”) or ]
for reg in [r for r in reversed(edited) if r.begin() < currA]:
self.view.sel().clear()
self.view.show(reg)
self.view.sel().add(reg)
break
class NextEditLineCommand(sublime_plugin.TextCommand):
def run(self, edit):
vid = self.view.id()
sel = self.view.sel()[0]
currA = sel.begin()
currB = sel.end()
curr_line, _ = self.view.rowcol(currA)
edited = self.view.get_regions(“edited_rgns”) or ]
edited_last = self.view.get_regions(“edited_rgn”) or ]
if not edited and not edited_last:
return
edited.extend(edited_last)
self.view.add_regions(“edited_rgns”, edited, “edits”, sublime.HIDDEN)
self.view.erase_regions(“edited_rgn”)
edited = self.view.get_regions(“edited_rgns”) or ]
for reg in [r for r in edited if r.begin() > currA]:
self.view.sel().clear()
self.view.show(reg)
self.view.sel().add(reg)
break
class QuickEditsCommand(sublime_plugin.TextCommand):
def run(self, edit):
window = sublime.active_window()
view = window.active_view() if window != None else None
if view is None or view.id() != self.view.id():
sublime.status_message(‘Click into the view/tab first.’)
return
edited = self.view.get_regions(“edited_rgns”) or ]
edited_last = self.view.get_regions(“edited_rgn”) or ]
if not edited and not edited_last:
sublime.status_message(‘No edits to list.’)
return
edited.extend(edited_last)
self.view.add_regions(“edited_rgns”, edited, “edits”, sublime.HIDDEN)
self.view.erase_regions(“edited_rgn”)
edited = self.view.get_regions(“edited_rgns”) or ]
the_edits = ]
for i, r in enumerate(edited):
curr_line, _ = self.view.rowcol(r.begin())
curr_text = self.view.substr®
the_edits.append(“Line: %03d %s” % ( curr_line, curr_text ))
window.show_quick_panel(the_edits, self.on_chosen)
def on_chosen(self, index):
if index == -1: return
edited = self.view.get_regions("edited_rgns") or ]
for reg in [r for i, r in enumerate(edited) if i == index]:
self.view.sel().clear()
self.view.show(reg)
self.view.sel().add(reg)
break
class CaptureEditing(sublime_plugin.EventListener):
def on_modified(self, view):
# create hidden regions that mirror the edited regions
vid = view.id()
sel = view.sel()[0]
currA = sel.begin()
currB = sel.end()
self.curr_line, _ = view.rowcol(currA)
if not hasattr(self, ‘prev_line’):
self.prev_line = self.curr_line
self.lastx = currA
self.lasty = currB
self.curr_edit = sublime.Region(self.lastx, self.lasty)
view.add_regions(“edited_rgn”,[self.curr_edit], “edits”, sublime.HIDDEN)
return
if self.curr_line == self.prev_line:
self.lastx = min(currA, self.lastx)
self.lasty = max(currB, self.lasty)
self.curr_edit = sublime.Region(self.lastx, self.lasty)
view.add_regions(“edited_rgn”,[self.curr_edit], “edits”, sublime.HIDDEN)
else:
self.prev_line = self.curr_line
self.lastx = currA
self.lasty = currB
edited = view.get_regions(“edited_rgns”) or ]
edited_last = view.get_regions(“edited_rgn”) or ]
if not edited and not edited_last:
return
edited.extend(edited_last)
view.add_regions(“edited_rgns”, edited, “edits”, sublime.HIDDEN)
view.erase_regions(“edited_rgn”)
[/code]
It occasionally drops the first letter of the edited text(?) and, as mentioned, I would like to collapse two adjacent regions. Regards, Andy.
LastEditLine.zip (993 Bytes)