diff --git a/porcupine/plugins/trailing_newline.py b/porcupine/plugins/trailing_newline.py index bdbc1103d..da9509738 100644 --- a/porcupine/plugins/trailing_newline.py +++ b/porcupine/plugins/trailing_newline.py @@ -9,7 +9,8 @@ def on_save(event: tkinter.Event[tabs.FileTab]) -> None: if event.widget.settings.get("insert_final_newline", bool): textwidget = event.widget.textwidget - if textwidget.get("end - 2 chars", "end - 1 char") != "\n": + char = textwidget.get("end - 2 chars", "end - 1 char") + if char and char != "\n": # doesn't end with a \n yet, be sure not to annoyingly move the # cursor like IDLE does cursor = textwidget.index("insert") diff --git a/tests/test_trailing_newline_plugin.py b/tests/test_trailing_newline_plugin.py index 29178583b..bd9cc5746 100644 --- a/tests/test_trailing_newline_plugin.py +++ b/tests/test_trailing_newline_plugin.py @@ -1,5 +1,11 @@ def test_trailing_newline(filetab, tmp_path): filetab.path = tmp_path / "foo.py" + + assert filetab.textwidget.get("1.0", "end") == "\n" + filetab.save() + assert filetab.textwidget.get("1.0", "end") == "\n" + assert (tmp_path / "foo.py").read_text() == "" + filetab.textwidget.insert("1.0", "hello") assert filetab.textwidget.get("1.0", "end - 1 char") == "hello"