]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-94523: IDLE: Detect file if modified and prompt the user to refresh (GH-145625)
authorShixian Li <lsx7@sina.com>
Sat, 11 Apr 2026 21:36:59 +0000 (05:36 +0800)
committerGitHub <noreply@github.com>
Sat, 11 Apr 2026 21:36:59 +0000 (14:36 -0700)
Lib/idlelib/editor.py
Misc/NEWS.d/next/IDLE/2026-03-07-20-47-40.gh-issue-94523.dq7m2k.rst [new file with mode: 0644]

index 3128934763a1c0806f7922ffc867bd8603a5c1a6..932b6bf70ac9fc8a4e8289c52cc6d884c528e3db 100644 (file)
@@ -312,6 +312,9 @@ class EditorWindow:
         else:
             self.update_menu_state('options', '*ine*umbers', 'disabled')
 
+        self.mtime = self.last_mtime()
+        text_frame.bind('<FocusIn>', 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 (file)
index 0000000..831f6ac
--- /dev/null
@@ -0,0 +1,2 @@
+Detect file if modified at local disk and prompt to ask refresh. Patch by
+Shixian Li.