From 8df69e653a1d45dc1840c79c473dde3ebdcfe2dd Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Tue, 10 Sep 2013 20:32:34 +0200 Subject: push and pop the editring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/editring.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/editring.py b/src/editring.py index ac3db90..8a3c2ad 100644 --- a/src/editring.py +++ b/src/editring.py @@ -86,13 +86,27 @@ class Editring(): @param edit:Edit The edit to insert ''' - pass + self.editdir = -1 + self.editring[:] = self.editring[:self.editptr] + [edit] + self.editring[self.editptr:] + if len(self.editring) > self.editmax: + i = (self.editptr + self.editmax // 2) % self.editmax + self.editring[:] = self.editring[:i] + self.editring[i + 1:] def pop(self): ''' Get the next undo or redo - @return :(Edit, bool) The edit to preform (not reverse) and whether it is a undo + @return :(Edit, bool)? The edit to preform (not reverse) and whether it is a undo ''' - pass + if is_empty(): + return None + if self.editptr < 0: + self.editptr = min(1, len(self.editring)) + self.editdir = 1 + elif self.editptr == len(self.editring): + self.editptr = max(1, len(self.editring) - 2) + self.editdir = -1 + edit = self.editring[self.editptr] + self.editptr += self.editdir + return (edit, True) if self.editdir < 0 else (edit.reverse(), False) -- cgit v1.2.3-70-g09d2