From 6e2272d0b199d1ab992fffac5fc8e356d7342aec Mon Sep 17 00:00:00 2001 From: Shixian Li Date: Sun, 12 Apr 2026 05:36:59 +0800 Subject: [PATCH] gh-94523: IDLE: Detect file if modified and prompt the user to refresh (GH-145625) --- Lib/idlelib/editor.py | 20 +++++++++++++++++++ ...6-03-07-20-47-40.gh-issue-94523.dq7m2k.rst | 2 ++ 2 files changed, 22 insertions(+) create mode 100644 Misc/NEWS.d/next/IDLE/2026-03-07-20-47-40.gh-issue-94523.dq7m2k.rst 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. -- 2.47.3