]> granicus.if.org Git - python/commitdiff
New feature: when saving a file, keep the eol convention of the
authorGuido van Rossum <guido@python.org>
Fri, 25 Apr 2003 18:36:31 +0000 (18:36 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 25 Apr 2003 18:36:31 +0000 (18:36 +0000)
original.  New files are written using the eol convention of the
platform, given by os.linesep.  All files are read and written in
binary mode.

Lib/idlelib/IOBinding.py

index d321d8cb5ac67c7e86237a6b34fe7ef69fc8f233..6f46a60d7846cf1d4661d6d134717a90e9fffc9b 100644 (file)
@@ -178,6 +178,10 @@ class IOBinding:
             self.text.focus_set()
         return "break"
 
+    eol = r"(\r\n)|\n|\r"  # \r\n (Windows), \n (UNIX), or \r (Mac)
+    eol_re = re.compile(eol)
+    eol_convention = os.linesep # Default
+
     def loadfile(self, filename):
         try:
             # open the file in binary mode so that we can handle
@@ -191,8 +195,10 @@ class IOBinding:
 
         chars = self.decode(chars)
         # We now convert all end-of-lines to '\n's
-        eol = r"(\r\n)|\n|\r"  # \r\n (Windows), \n (UNIX), or \r (Mac)
-        chars = re.compile( eol ).sub( r"\n", chars )
+        firsteol = self.eol_re.search(chars)
+        if firsteol:
+            self.eol_convention = firsteol.group(0)
+            chars = self.eol_re.sub(r"\n", chars)
 
         self.text.delete("1.0", "end")
         self.set_filename(None)
@@ -306,8 +312,10 @@ class IOBinding:
     def writefile(self, filename):
         self.fixlastline()
         chars = self.encode(self.text.get("1.0", "end-1c"))
+        if self.eol_convention != "\n":
+            chars = chars.replace("\n", self.eol_convention)
         try:
-            f = open(filename, "w")
+            f = open(filename, "wb")
             f.write(chars)
             f.close()
             return True