Skip to content

Commit 6e2272d

Browse files
authored
gh-94523: IDLE: Detect file if modified and prompt the user to refresh (GH-145625)
1 parent f445d2e commit 6e2272d

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

Lib/idlelib/editor.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,9 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
312312
else:
313313
self.update_menu_state('options', '*ine*umbers', 'disabled')
314314

315+
self.mtime = self.last_mtime()
316+
text_frame.bind('<FocusIn>', self.focus_in_event)
317+
315318
def handle_winconfig(self, event=None):
316319
self.set_width()
317320

@@ -1027,6 +1030,8 @@ def get_saved(self):
10271030

10281031
def set_saved(self, flag):
10291032
self.undo.set_saved(flag)
1033+
if flag:
1034+
self.mtime = self.last_mtime()
10301035

10311036
def reset_undo(self):
10321037
self.undo.reset_undo()
@@ -1112,6 +1117,21 @@ def _close(self):
11121117
# unless override: unregister from flist, terminate if last window
11131118
self.close_hook()
11141119

1120+
def last_mtime(self):
1121+
file = self.io.filename
1122+
return os.path.getmtime(file) if file else 0
1123+
1124+
def focus_in_event(self, event):
1125+
mtime = self.last_mtime()
1126+
if self.mtime != mtime:
1127+
self.mtime = mtime
1128+
if self. askyesno(
1129+
'Reload', '"%s"\n\nThis script has been modified by another program.'
1130+
'\nDo you want to reload it?' % self.io.filename, parent=self.text):
1131+
self.io.loadfile(self.io.filename)
1132+
else:
1133+
self.set_saved(False)
1134+
11151135
def load_extensions(self):
11161136
self.extensions = {}
11171137
self.load_standard_extensions()
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Detect file if modified at local disk and prompt to ask refresh. Patch by
2+
Shixian Li.

0 commit comments

Comments
 (0)