From: Shixian Li Date: Sat, 11 Apr 2026 21:36:59 +0000 (+0800) Subject: gh-94523: IDLE: Detect file if modified and prompt the user to refresh (GH-145625) X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6e2272d0b199d1ab992fffac5fc8e356d7342aec;p=thirdparty%2FPython%2Fcpython.git gh-94523: IDLE: Detect file if modified and prompt the user to refresh (GH-145625) --- diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py index 3128934763a1..932b6bf70ac9 100644 --- a/Lib/idlelib/editor.py +++ b/Lib/idlelib/editor.py @@ -312,6 +312,9 @@ class EditorWindow: else: self.update_menu_state('options', '*ine*umbers', 'disabled') + self.mtime = self.last_mtime() + text_frame.bind('', self.focus_in_event) + def handle_winconfig(self, event=None): self.set_width() @@ -1027,6 +1030,8 @@ class EditorWindow: def set_saved(self, flag): self.undo.set_saved(flag) + if flag: + self.mtime = self.last_mtime() def reset_undo(self): self.undo.reset_undo() @@ -1112,6 +1117,21 @@ class EditorWindow: # unless override: unregister from flist, terminate if last window self.close_hook() + def last_mtime(self): + file = self.io.filename + return os.path.getmtime(file) if file else 0 + + def focus_in_event(self, event): + mtime = self.last_mtime() + if self.mtime != mtime: + self.mtime = mtime + if self. askyesno( + 'Reload', '"%s"\n\nThis script has been modified by another program.' + '\nDo you want to reload it?' % self.io.filename, parent=self.text): + self.io.loadfile(self.io.filename) + else: + self.set_saved(False) + def load_extensions(self): self.extensions = {} self.load_standard_extensions() diff --git a/Misc/NEWS.d/next/IDLE/2026-03-07-20-47-40.gh-issue-94523.dq7m2k.rst b/Misc/NEWS.d/next/IDLE/2026-03-07-20-47-40.gh-issue-94523.dq7m2k.rst new file mode 100644 index 000000000000..831f6ac62876 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2026-03-07-20-47-40.gh-issue-94523.dq7m2k.rst @@ -0,0 +1,2 @@ +Detect file if modified at local disk and prompt to ask refresh. Patch by +Shixian Li.