From eb5254961bbbb30ba4311c846b3347ebad105cf2 Mon Sep 17 00:00:00 2001 From: Andrew Hamilton Date: Tue, 21 Jun 2022 19:37:59 +1000 Subject: [PATCH] Only recalculate diff after change actions --- diff_edit/__init__.py | 5 +++-- diff_edit/editor.py | 8 +++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/diff_edit/__init__.py b/diff_edit/__init__.py index c308122..d4f7a31 100755 --- a/diff_edit/__init__.py +++ b/diff_edit/__init__.py @@ -327,8 +327,9 @@ class DiffEditor: or self.KEY_MAP.get(term_code)): action(self) else: - self.editors[0].on_keyboard_input(term_code) - self.diff_changed() + is_content_changed = self.editors[0].on_keyboard_input(term_code) + if is_content_changed: + self.diff_changed() self.previous_term_code = term_code fill3.APPEARANCE_CHANGED_EVENT.set() diff --git a/diff_edit/editor.py b/diff_edit/editor.py index 2756f99..7c23a4a 100755 --- a/diff_edit/editor.py +++ b/diff_edit/editor.py @@ -780,6 +780,7 @@ class TextEditor: self.history.append((self.text_widget.lines.copy(), self._cursor_x, self._cursor_y)) self.history_position = len(self.history) + @change_action def undo(self): if self.history_position == 0: self.ring_bell() @@ -856,10 +857,13 @@ class TextEditor: if self.parts_widget is not None: self.parts_widget.on_keyboard_input(term_code) return + is_content_changed = False if action := (TextEditor.KEY_MAP.get((self.previous_term_code, term_code)) or TextEditor.KEY_MAP.get(term_code)): if action.__name__ == "wrapper": - self.add_to_history() + if action != TextEditor.undo: + self.add_to_history() + is_content_changed = True try: action(self) except IndexError: @@ -867,9 +871,11 @@ class TextEditor: elif not (len(term_code) == 1 and ord(term_code) < 32): self.add_to_history() self.insert_text(term_code, is_overwriting=self.is_overwriting) + is_content_changed = True self.previous_term_code = term_code self.follow_cursor() fill3.APPEARANCE_CHANGED_EVENT.set() + return is_content_changed def scroll(self, dx, dy): view_x, view_y = self.scroll_position