annotate Lib/idlelib/OutputWindow.py @ 65035:87f4b32905df 2.7

Cosmetic fix to use print function.
author Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
date Fri, 01 Oct 2010 10:48:47 +0000
parents eab361617f6a
children b36cb4602e21
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47101
diff changeset
1 from Tkinter import *
60144
eab361617f6a #7092: Fix additional "-3" warnings in the idlelib package, and convert to absolute imports.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53697
diff changeset
2 from idlelib.EditorWindow import EditorWindow
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
3 import re
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47101
diff changeset
4 import tkMessageBox
60144
eab361617f6a #7092: Fix additional "-3" warnings in the idlelib package, and convert to absolute imports.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53697
diff changeset
5 from idlelib import IOBinding
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
6
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
7 class OutputWindow(EditorWindow):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
8
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
9 """An editor window that can serve as an output file.
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
10
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
11 Also the future base class for the Python shell window.
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
12 This class has no input facilities.
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
13 """
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
14
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
15 def __init__(self, *args):
29794
94e5d1b8f696 SF patch #768187: replace apply(f, args, kwds) with f(*args, **kwds)
Raymond Hettinger <python@rcn.com>
parents: 29477
diff changeset
16 EditorWindow.__init__(self, *args)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
17 self.text.bind("<<goto-file-line>>", self.goto_file_line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
18
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
19 # Customize EditorWindow
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
20
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
21 def ispythonsource(self, filename):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
22 # No colorization needed
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
23 return 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
24
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
25 def short_title(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
26 return "Output"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
27
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
28 def maybesave(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
29 # Override base class method -- don't ask any questions
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
30 if self.get_saved():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
31 return "yes"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
32 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
33 return "no"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
34
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
35 # Act as output file
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
36
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
37 def write(self, s, tags=(), mark="insert"):
29477
892dfc9e7256 Forwardport Patch from IDLEfork SF 615312
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
38 # Tk assumes that byte strings are Latin-1;
892dfc9e7256 Forwardport Patch from IDLEfork SF 615312
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
39 # we assume that they are in the locale's encoding
892dfc9e7256 Forwardport Patch from IDLEfork SF 615312
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
40 if isinstance(s, str):
892dfc9e7256 Forwardport Patch from IDLEfork SF 615312
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
41 try:
892dfc9e7256 Forwardport Patch from IDLEfork SF 615312
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
42 s = unicode(s, IOBinding.encoding)
892dfc9e7256 Forwardport Patch from IDLEfork SF 615312
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
43 except UnicodeError:
892dfc9e7256 Forwardport Patch from IDLEfork SF 615312
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
44 # some other encoding; let Tcl deal with it
892dfc9e7256 Forwardport Patch from IDLEfork SF 615312
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
45 pass
25096
98ddc4297f36 (Re)Apply Sourceforge Python patch 520483, Sourceforge Idlefork patch
Kurt B. Kaiser <kbk@shore.net>
parents: 23784
diff changeset
46 self.text.insert(mark, s, tags)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
47 self.text.see(mark)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
48 self.text.update()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
49
60144
eab361617f6a #7092: Fix additional "-3" warnings in the idlelib package, and convert to absolute imports.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53697
diff changeset
50 def writelines(self, lines):
eab361617f6a #7092: Fix additional "-3" warnings in the idlelib package, and convert to absolute imports.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53697
diff changeset
51 for line in lines:
eab361617f6a #7092: Fix additional "-3" warnings in the idlelib package, and convert to absolute imports.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 53697
diff changeset
52 self.write(line)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
53
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
54 def flush(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
55 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
56
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
57 # Our own right-button menu
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
58
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
59 rmenu_specs = [
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
60 ("Go to file/line", "<<goto-file-line>>"),
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
61 ]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
62
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
63 file_line_pats = [
53697
9fef1f1657c8 Further development of issue5559, handle Windows files
Kurt B. Kaiser <kbk@shore.net>
parents: 53495
diff changeset
64 # order of patterns matters
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
65 r'file "([^"]*)", line (\d+)',
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
66 r'([^\s]+)\((\d+)\)',
53697
9fef1f1657c8 Further development of issue5559, handle Windows files
Kurt B. Kaiser <kbk@shore.net>
parents: 53495
diff changeset
67 r'^(\s*\S.*?):\s*(\d+):', # Win filename, maybe starting with spaces
9fef1f1657c8 Further development of issue5559, handle Windows files
Kurt B. Kaiser <kbk@shore.net>
parents: 53495
diff changeset
68 r'([^\s]+):\s*(\d+):', # filename or path, ltrim
9fef1f1657c8 Further development of issue5559, handle Windows files
Kurt B. Kaiser <kbk@shore.net>
parents: 53495
diff changeset
69 r'^\s*(\S.*?):\s*(\d+):', # Win abs path with embedded spaces, ltrim
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
70 ]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
71
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
72 file_line_progs = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
73
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
74 def goto_file_line(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
75 if self.file_line_progs is None:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
76 l = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
77 for pat in self.file_line_pats:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
78 l.append(re.compile(pat, re.IGNORECASE))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
79 self.file_line_progs = l
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
80 # x, y = self.event.x, self.event.y
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
81 # self.text.mark_set("insert", "@%d,%d" % (x, y))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
82 line = self.text.get("insert linestart", "insert lineend")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
83 result = self._file_line_helper(line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
84 if not result:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
85 # Try the previous line. This is handy e.g. in tracebacks,
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
86 # where you tend to right-click on the displayed source line
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
87 line = self.text.get("insert -1line linestart",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
88 "insert -1line lineend")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
89 result = self._file_line_helper(line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
90 if not result:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
91 tkMessageBox.showerror(
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
92 "No special line",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
93 "The line you point at doesn't look like "
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
94 "a valid file name followed by a line number.",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
95 master=self.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
96 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
97 filename, lineno = result
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
98 edit = self.flist.open(filename)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
99 edit.gotoline(lineno)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
100
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
101 def _file_line_helper(self, line):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
102 for prog in self.file_line_progs:
53495
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
103 match = prog.search(line)
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
104 if match:
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
105 filename, lineno = match.group(1, 2)
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
106 try:
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
107 f = open(filename, "r")
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
108 f.close()
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
109 break
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
110 except IOError:
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
111 continue
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
112 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
113 return None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
114 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
115 return filename, int(lineno)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
116 except TypeError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
117 return None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
118
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
119 # These classes are currently not used but might come in handy
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
120
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
121 class OnDemandOutputWindow:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
122
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
123 tagdefs = {
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
124 # XXX Should use IdlePrefs.ColorPrefs
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
125 "stdout": {"foreground": "blue"},
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
126 "stderr": {"foreground": "#007700"},
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
127 }
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
128
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
129 def __init__(self, flist):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
130 self.flist = flist
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
131 self.owin = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
132
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
133 def write(self, s, tags, mark):
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
134 if not self.owin:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
135 self.setup()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
136 self.owin.write(s, tags, mark)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
137
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
138 def setup(self):
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
139 self.owin = owin = OutputWindow(self.flist)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
140 text = owin.text
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
141 for tag, cnf in self.tagdefs.items():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
142 if cnf:
29794
94e5d1b8f696 SF patch #768187: replace apply(f, args, kwds) with f(*args, **kwds)
Raymond Hettinger <python@rcn.com>
parents: 29477
diff changeset
143 text.tag_configure(tag, **cnf)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
144 text.tag_raise('sel')
23784
24b0f6d693e3 Rework the code to have only the GvR RPC. Output from execution of user
Kurt B. Kaiser <kbk@shore.net>
parents: 22012
diff changeset
145 self.write = self.owin.write