From: Guido van Rossum Date: Fri, 25 Apr 2003 18:36:31 +0000 (+0000) Subject: New feature: when saving a file, keep the eol convention of the X-Git-Tag: v2.3c1~969 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c2f77dddf3a4d4476dd95439f670cbab1c65e288;p=python New feature: when saving a file, keep the eol convention of the 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. --- diff --git a/Lib/idlelib/IOBinding.py b/Lib/idlelib/IOBinding.py index d321d8cb5a..6f46a60d78 100644 --- a/Lib/idlelib/IOBinding.py +++ b/Lib/idlelib/IOBinding.py @@ -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