self.filename_change_hook = hook
filename = None
+ file_timestamp = None
dirname = None
def set_filename(self, filename):
chars = f.read()
fileencoding = f.encoding
eol_convention = f.newlines
+ file_timestamp = self.getmtime(filename)
converted = False
except (UnicodeDecodeError, SyntaxError):
# Wait for the editor window to appear
chars = f.read()
fileencoding = f.encoding
eol_convention = f.newlines
+ file_timestamp = self.getmtime(filename)
converted = True
except OSError as err:
messagebox.showerror("I/O Error", str(err), parent=self.text)
self.text.insert("1.0", chars)
self.reset_undo()
self.set_filename(filename)
+ self.file_timestamp = file_timestamp
if converted:
# We need to save the conversion results first
# before being able to execute the code
if not self.filename:
self.save_as(event)
else:
+ # Check the time of most recent content modification so the
+ # user doesn't accidentally overwrite a newer version of the file.
+ try:
+ file_timestamp = self.getmtime(self.filename)
+ except OSError:
+ pass
+ else:
+ if self.file_timestamp != file_timestamp:
+ confirm = messagebox.askokcancel(
+ title="File has changed",
+ message=(
+ "The file has changed on disk since reading it!\n\n"
+ "Do you really want to overwrite it?"),
+ default=messagebox.CANCEL,
+ parent=self.text)
+ if not confirm:
+ return "break"
+
if self.writefile(self.filename):
+ self.file_timestamp = self.getmtime(self.filename)
self.set_saved(True)
try:
self.editwin.store_file_breaks()
filename = self.asksavefile()
if filename:
if self.writefile(filename):
+ self.file_timestamp = self.getmtime(filename)
self.set_filename(filename)
self.set_saved(1)
try:
parent=self.text)
return False
+ def getmtime(self, filename):
+ return os.stat(filename).st_mtime
+
def fixnewlines(self):
"""Return text with os eols.