]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-26353: IDLE adds an unneeded newline when saving a shell window (GH-17103)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 12 Nov 2019 11:13:32 +0000 (03:13 -0800)
committerGitHub <noreply@github.com>
Tue, 12 Nov 2019 11:13:32 +0000 (03:13 -0800)
(cherry picked from commit c8b53dc3d8f721ed8519aa5a35530a42fbfb9424)

Co-authored-by: Zackery Spytz <zspytz@gmail.com>
Lib/idlelib/NEWS.txt
Lib/idlelib/idle_test/test_iomenu.py
Lib/idlelib/iomenu.py
Misc/NEWS.d/next/IDLE/2019-11-09-23-55-59.bpo-26353.duYZiF.rst [new file with mode: 0644]

index fb22fb5e2bce046ee67037544c225be58f092110..81bf746a5cba36d54fcf617f3e387cd47840df6e 100644 (file)
@@ -3,6 +3,8 @@ Released on 2019-12-16?
 ======================================
 
 
+bop-26353: Stop adding newline when saving an IDLE shell window.
+
 bpo-38598: Do not try to compile IDLE shell or output windows.
 
 
index 743a05b3c3134eba9444111315022ff6c79ab3d2..99f40487967124aa81c70c0e8135167ba1a91ee4 100644 (file)
@@ -1,14 +1,13 @@
-"Test , coverage 16%."
+"Test , coverage 17%."
 
 from idlelib import iomenu
 import unittest
 from test.support import requires
 from tkinter import Tk
-
 from idlelib.editor import EditorWindow
 
 
-class IOBindigTest(unittest.TestCase):
+class IOBindingTest(unittest.TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -16,9 +15,11 @@ class IOBindigTest(unittest.TestCase):
         cls.root = Tk()
         cls.root.withdraw()
         cls.editwin = EditorWindow(root=cls.root)
+        cls.io = iomenu.IOBinding(cls.editwin)
 
     @classmethod
     def tearDownClass(cls):
+        cls.io.close()
         cls.editwin._close()
         del cls.editwin
         cls.root.update_idletasks()
@@ -28,9 +29,20 @@ class IOBindigTest(unittest.TestCase):
         del cls.root
 
     def test_init(self):
-        io = iomenu.IOBinding(self.editwin)
-        self.assertIs(io.editwin, self.editwin)
-        io.close
+        self.assertIs(self.io.editwin, self.editwin)
+
+    def test_fixnewlines_end(self):
+        eq = self.assertEqual
+        io = self.io
+        fix = io.fixnewlines
+        text = io.editwin.text
+        self.editwin.interp = None
+        eq(fix(), '')
+        del self.editwin.interp
+        text.insert(1.0, 'a')
+        eq(fix(), 'a'+io.eol_convention)
+        eq(text.get('1.0', 'end-1c'), 'a\n')
+        eq(fix(), 'a'+io.eol_convention)
 
 
 if __name__ == '__main__':
index b5533be79f9960401c93aca34f3fb6ef8aeb5d03..4b2833b8ca56f3698b6b1a95a6dbe430bc6509a5 100644 (file)
@@ -371,10 +371,7 @@ class IOBinding:
         return "break"
 
     def writefile(self, filename):
-        self.fixlastline()
-        text = self.text.get("1.0", "end-1c")
-        if self.eol_convention != "\n":
-            text = text.replace("\n", self.eol_convention)
+        text = self.fixnewlines()
         chars = self.encode(text)
         try:
             with open(filename, "wb") as f:
@@ -387,6 +384,16 @@ class IOBinding:
                                    parent=self.text)
             return False
 
+    def fixnewlines(self):
+        "Return text with final \n if needed and os eols."
+        if (self.text.get("end-2c") != '\n'
+            and not hasattr(self.editwin, "interp")):  # Not shell.
+            self.text.insert("end-1c", "\n")
+        text = self.text.get("1.0", "end-1c")
+        if self.eol_convention != "\n":
+            text = text.replace("\n", self.eol_convention)
+        return text
+
     def encode(self, chars):
         if isinstance(chars, bytes):
             # This is either plain ASCII, or Tk was returning mixed-encoding
@@ -426,11 +433,6 @@ class IOBinding:
         # declared encoding
         return BOM_UTF8 + chars.encode("utf-8")
 
-    def fixlastline(self):
-        c = self.text.get("end-2c")
-        if c != '\n':
-            self.text.insert("end-1c", "\n")
-
     def print_window(self, event):
         confirm = tkMessageBox.askokcancel(
                   title="Print",
diff --git a/Misc/NEWS.d/next/IDLE/2019-11-09-23-55-59.bpo-26353.duYZiF.rst b/Misc/NEWS.d/next/IDLE/2019-11-09-23-55-59.bpo-26353.duYZiF.rst
new file mode 100644 (file)
index 0000000..fd0a2a3
--- /dev/null
@@ -0,0 +1,2 @@
+Stop adding newline when saving an IDLE shell window.
+