diff options
author | Guido van Rossum <guido@python.org> | 2003-04-25 18:36:31 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2003-04-25 18:36:31 (GMT) |
commit | c2f77dddf3a4d4476dd95439f670cbab1c65e288 (patch) | |
tree | 148b2053fdc34594afcf2a41f02538f7f3f5cb03 | |
parent | 9635268ea961da46b9d9ee2b40d8fb526f573e1f (diff) | |
download | cpython-c2f77dddf3a4d4476dd95439f670cbab1c65e288.zip cpython-c2f77dddf3a4d4476dd95439f670cbab1c65e288.tar.gz cpython-c2f77dddf3a4d4476dd95439f670cbab1c65e288.tar.bz2 |
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.
-rw-r--r-- | Lib/idlelib/IOBinding.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/Lib/idlelib/IOBinding.py b/Lib/idlelib/IOBinding.py index d321d8c..6f46a60 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 |