[Idle-dev] CVS: idle PyShell.py,1.30,1.31
Chui Tey
teyc@users.sourceforge.net
Mon, 04 Nov 2002 14:14:57 -0800
Update of /cvsroot/idlefork/idle
In directory usw-pr-cvs1:/tmp/cvs-serv15506
Modified Files:
PyShell.py
Log Message:
Recalls breakpoints set in a file
Index: PyShell.py
===================================================================
RCS file: /cvsroot/idlefork/idle/PyShell.py,v
retrieving revision 1.30
retrieving revision 1.31
diff -C2 -r1.30 -r1.31
*** PyShell.py 23 Oct 2002 04:48:08 -0000 1.30
--- PyShell.py 4 Nov 2002 22:14:54 -0000 1.31
***************
*** 25,28 ****
--- 25,29 ----
from configHandler import idleConf
import idlever
+ import os.path
import rpc
***************
*** 80,98 ****
self.text.bind("<<open-python-shell>>", self.flist.open_shell)
rmenu_specs = [("Set Breakpoint", "<<set-breakpoint-here>>"),
("Clear Breakpoint", "<<clear-breakpoint-here>>")]
! def set_breakpoint_here(self, event=None):
text = self.text
filename = self.io.filename
! if not filename:
! text.bell()
! return
! lineno = int(float(text.index("insert")))
try:
i = self.breakpoints.index(lineno)
! except: # only add if missing, i.e. do once
self.breakpoints.append(lineno)
- text.tag_add("BREAK", "insert linestart", "insert lineend +1char")
try: # update the subprocess debugger
debug = self.flist.pyshell.interp.debugger
--- 81,104 ----
self.text.bind("<<open-python-shell>>", self.flist.open_shell)
+ self.breakpointPath=os.path.join(idleConf.GetUserCfgDir(), 'breakpoints.lst')
+
+ # whenever a file is changed, restore breakpoints
+ if self.io.filename: self.restore_file_breaks()
+ def filename_changed_hook(self,old_hook=self.io.filename_change_hook):
+ self.restore_file_breaks()
+ old_hook()
+ self.io.set_filename_change_hook(filename_changed_hook)
+
rmenu_specs = [("Set Breakpoint", "<<set-breakpoint-here>>"),
("Clear Breakpoint", "<<clear-breakpoint-here>>")]
! def set_breakpoint(self, lineno):
text = self.text
filename = self.io.filename
! text.tag_add("BREAK", "%d.0" % lineno, "%d.0" % (lineno+1))
try:
i = self.breakpoints.index(lineno)
! except ValueError: # only add if missing, i.e. do once
self.breakpoints.append(lineno)
try: # update the subprocess debugger
debug = self.flist.pyshell.interp.debugger
***************
*** 101,104 ****
--- 107,119 ----
pass
+ def set_breakpoint_here(self, event=None):
+ text = self.text
+ filename = self.io.filename
+ if not filename:
+ text.bell()
+ return
+ lineno = int(float(text.index("insert")))
+ self.set_breakpoint(lineno)
+
def clear_breakpoint_here(self, event=None):
text = self.text
***************
*** 135,138 ****
--- 150,187 ----
pass
+ def store_file_breaks(self):
+ if not self.breakpoints:
+ return
+ filename=self.io.filename
+ try:
+ lines=open(self.breakpointPath,"r").readlines()
+ except IOError:
+ lines=[]
+ new_file=open(self.breakpointPath,"w")
+ for line in lines:
+ if not line.startswith(filename+"="):
+ new_file.write(line)
+ new_file.write(filename+"="+`self.get_current_breaks()`)
+ new_file.close()
+
+ def restore_file_breaks(self):
+ self.text.update() # this enables setting "BREAK" tags to be visible
+ filename=self.io.filename
+ lines=open(self.breakpointPath,"r").readlines()
+ for line in lines:
+ if line.startswith(filename+"="):
+ breakpoint_linenumbers=eval(line[len(filename)+1:])
+ for breakpoint_linenumber in breakpoint_linenumbers:
+ self.set_breakpoint(breakpoint_linenumber)
+
+ def get_current_breaks(self):
+ #
+ # retrieves all the breakpoints in the current window
+ #
+ text = self.text
+ lines = text.tag_ranges("BREAK")
+ result = [int(float((lines[i]))) for i in range(0,len(lines),2)]
+ return result
+
def saved_change_hook(self):
"Extend base method - clear breaks if module is modified"
***************
*** 143,146 ****
--- 192,196 ----
def _close(self):
"Extend base method - clear breaks when module is closed"
+ self.store_file_breaks()
self.clear_file_breaks()
EditorWindow._close(self)