def ShowLineNo( self, filename, lineno ): wasOpen = editor.editorTemplate.FindOpenDocument(filename) is not None if os.path.isfile(filename) and scriptutils.JumpToDocument(filename, lineno): if not wasOpen: doc = editor.editorTemplate.FindOpenDocument(filename) if doc is not None: self.UpdateDocumentLineStates(doc) return 1 return 0 return 1 else: # Can't find the source file - linecache may have it? import linecache line = linecache.getline(filename, lineno) print "%s(%d): %s" % (os.path.basename(filename), lineno, line[:-1].expandtabs(4)) return 0
def _FindIt(control, searchParams): global lastSearch, defaultSearch control = _GetControl(control) if control is None: return FOUND_NOTHING # Move to the next char, so we find the next one. flags = 0 if searchParams.matchWords: flags = flags | win32con.FR_WHOLEWORD if searchParams.matchCase: flags = flags | win32con.FR_MATCHCASE if searchParams.sel == (-1, -1): sel = control.GetSel() # If the position is the same as we found last time, # then we assume it is a "FindNext" if sel == lastSearch.sel: sel = sel[0] + 1, sel[0] + 1 else: sel = searchParams.sel if sel[0] == sel[1]: sel = sel[0], control.GetTextLength() rc = FOUND_NOTHING # (Old edit control will fail here!) posFind, foundSel = control.FindText(flags, sel, searchParams.findText) lastSearch = SearchParams(searchParams) if posFind >= 0: rc = FOUND_NORMAL lineno = control.LineFromChar(posFind) control.SCIEnsureVisible(lineno) control.SetSel(foundSel) control.SetFocus() win32ui.SetStatusText(win32ui.LoadString(afxres.AFX_IDS_IDLEMESSAGE)) if rc == FOUND_NOTHING and lastSearch.acrossFiles: # Loop around all documents. First find this document. try: try: doc = control.GetDocument() except AttributeError: try: doc = control.GetParent().GetDocument() except AttributeError: print "Cant find a document for the control!" doc = None if doc is not None: template = doc.GetDocTemplate() alldocs = template.GetDocumentList() mypos = lookpos = alldocs.index(doc) while 1: lookpos = (lookpos + 1) % len(alldocs) if lookpos == mypos: break view = alldocs[lookpos].GetFirstView() posFind, foundSel = view.FindText( flags, (0, view.GetTextLength()), searchParams.findText) if posFind >= 0: nChars = foundSel[1] - foundSel[0] lineNo = view.LineFromChar(posFind) # zero based. lineStart = view.LineIndex(lineNo) colNo = posFind - lineStart # zero based. scriptutils.JumpToDocument( alldocs[lookpos].GetPathName(), lineNo + 1, colNo + 1, nChars) rc = FOUND_NEXT_FILE break except win32ui.error: pass if rc == FOUND_NOTHING: # Loop around this control - attempt to find from the start of the control. posFind, foundSel = control.FindText(flags, (0, sel[0] - 1), searchParams.findText) if posFind >= 0: control.SCIEnsureVisible(control.LineFromChar(foundSel[0])) control.SetSel(foundSel) control.SetFocus() win32ui.SetStatusText( "Not found! Searching from the top of the file.") rc = FOUND_LOOPED_BACK else: lastSearch.sel = -1, -1 win32ui.SetStatusText("Can not find '%s'" % searchParams.findText) if rc != FOUND_NOTHING: lastSearch.sel = foundSel if lastSearch.remember: defaultSearch = lastSearch return rc