editor: Fix overwriting mode side effects

- insert_text normally shouldn't always overwrite when in
  overwriting mode.
This commit is contained in:
Andrew Hamilton 2022-01-29 10:44:25 +10:00
parent dfe075b11c
commit af621a6be0
2 changed files with 5 additions and 5 deletions

View file

@ -339,10 +339,10 @@ class Editor:
self.text_widget[start_y:end_y+1] = [new_line] self.text_widget[start_y:end_y+1] = [new_line]
self.cursor_x, self.cursor_y = start_x, start_y self.cursor_x, self.cursor_y = start_x, start_y
def insert_text(self, text): def insert_text(self, text, is_overwriting=False):
try: try:
current_line = self.text_widget[self.cursor_y] current_line = self.text_widget[self.cursor_y]
replace_count = len(text) if self.is_overwriting else 0 replace_count = len(text) if is_overwriting else 0
self.text_widget[self.cursor_y] = (current_line[:self.cursor_x] + text self.text_widget[self.cursor_y] = (current_line[:self.cursor_x] + text
+ current_line[self.cursor_x+replace_count:]) + current_line[self.cursor_x+replace_count:])
except IndexError: except IndexError:
@ -575,7 +575,7 @@ class Editor:
except IndexError: except IndexError:
self.ring_bell() self.ring_bell()
elif term_code in self._PRINTABLE: elif term_code in self._PRINTABLE:
self.insert_text(term_code) self.insert_text(term_code, is_overwriting=self.is_overwriting)
else: else:
self.insert_text(repr(term_code)) self.insert_text(repr(term_code))
self.previous_term_code = term_code self.previous_term_code = term_code

View file

@ -83,11 +83,11 @@ class EditorTestCase(unittest.TestCase):
# overwrite # overwrite
self.editor.toggle_overwrite() self.editor.toggle_overwrite()
self.editor.cursor_left() self.editor.cursor_left()
self.editor.insert_text("d") self.editor.insert_text("d", is_overwriting=True)
self._assert_editor("abd", (3, 0)) self._assert_editor("abd", (3, 0))
self.editor.cursor_left() self.editor.cursor_left()
self.editor.cursor_left() self.editor.cursor_left()
self.editor.insert_text("ef") self.editor.insert_text("ef", is_overwriting=True)
self._assert_editor("aef", (3, 0)) self._assert_editor("aef", (3, 0))
def test_enter(self): def test_enter(self):