From 441dad8145686a9438ef1a30da64e589af2989ed Mon Sep 17 00:00:00 2001 From: "Kurt B. Kaiser" Date: Sun, 4 Oct 2009 23:26:19 +0000 Subject: [PATCH] Merged revisions 71995,72227 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r71995 | kurt.kaiser | 2009-04-26 19:22:11 -0400 (Sun, 26 Apr 2009) | 2 lines Right click 'go to file/line' not working if spaces in path. Bug 5559. ........ r72227 | kurt.kaiser | 2009-05-02 22:05:22 -0400 (Sat, 02 May 2009) | 2 lines Further development of issue5559, handle Windows files which not only have embedded spaces, but leading spaces. ........ --- Lib/idlelib/NEWS.txt | 3 +++ Lib/idlelib/OutputWindow.py | 39 +++++++++++++------------------------ 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index 001c6d78239..c07484de689 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -3,6 +3,9 @@ What's New in Python 2.6.4rc1 *Release date: XX-Oct-2009* +- OutputWindow/PyShell right click menu "Go to file/line" wasn't working with + file paths containing spaces. Bug 5559. + What's New in Python 2.6.3 ========================== diff --git a/Lib/idlelib/OutputWindow.py b/Lib/idlelib/OutputWindow.py index 787e9b0bba0..f6b379b9a6a 100644 --- a/Lib/idlelib/OutputWindow.py +++ b/Lib/idlelib/OutputWindow.py @@ -60,9 +60,12 @@ class OutputWindow(EditorWindow): ] file_line_pats = [ + # order of patterns matters r'file "([^"]*)", line (\d+)', r'([^\s]+)\((\d+)\)', - r'([^\s]+):\s*(\d+):', + r'^(\s*\S.*?):\s*(\d+):', # Win filename, maybe starting with spaces + r'([^\s]+):\s*(\d+):', # filename or path, ltrim + r'^\s*(\S.*?):\s*(\d+):', # Win abs path with embedded spaces, ltrim ] file_line_progs = None @@ -96,17 +99,17 @@ class OutputWindow(EditorWindow): def _file_line_helper(self, line): for prog in self.file_line_progs: - m = prog.search(line) - if m: - break + match = prog.search(line) + if match: + filename, lineno = match.group(1, 2) + try: + f = open(filename, "r") + f.close() + break + except IOError: + continue else: return None - filename, lineno = m.group(1, 2) - try: - f = open(filename, "r") - f.close() - except IOError: - return None try: return filename, int(lineno) except TypeError: @@ -139,19 +142,3 @@ class OnDemandOutputWindow: text.tag_configure(tag, **cnf) text.tag_raise('sel') self.write = self.owin.write - -#class PseudoFile: -# -# def __init__(self, owin, tags, mark="end"): -# self.owin = owin -# self.tags = tags -# self.mark = mark - -# def write(self, s): -# self.owin.write(s, self.tags, self.mark) - -# def writelines(self, l): -# map(self.write, l) - -# def flush(self): -# pass