annotate Lib/idlelib/OutputWindow.py @ 27998:e27f58a50737 legacy-trunk

SF bug #690377: Dud footnote reference in distutils docs
author Raymond Hettinger <python@rcn.com>
date Fri, 21 Feb 2003 02:47:09 +0000
parents b8c72e86a12d
children 892dfc9e7256
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
1 from Tkinter import *
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
2 from EditorWindow import EditorWindow
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
3 import re
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
4 import tkMessageBox
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
5
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
6 class OutputWindow(EditorWindow):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
7
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
8 """An editor window that can serve as an output file.
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
9
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
10 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
11 This class has no input facilities.
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
12 """
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
13
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
14 def __init__(self, *args):
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
15 apply(EditorWindow.__init__, (self,) + args)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
16 self.text.bind("<<goto-file-line>>", self.goto_file_line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
17
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
18 # Customize EditorWindow
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
19
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
20 def ispythonsource(self, filename):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
21 # No colorization needed
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
22 return 0
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
23
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
24 def short_title(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
25 return "Output"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
26
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
27 def maybesave(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
28 # Override base class method -- don't ask any questions
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
29 if self.get_saved():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
30 return "yes"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
31 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
32 return "no"
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
33
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
34 # Act as output file
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
35
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
36 def write(self, s, tags=(), mark="insert"):
25096
98ddc4297f36 (Re)Apply Sourceforge Python patch 520483, Sourceforge Idlefork patch
Kurt B. Kaiser <kbk@shore.net>
parents: 23784
diff changeset
37 self.text.insert(mark, s, tags)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
38 self.text.see(mark)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
39 self.text.update()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
40
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
41 def writelines(self, l):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
42 map(self.write, l)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
43
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
44 def flush(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
45 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
46
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
47 # Our own right-button menu
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
48
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
49 rmenu_specs = [
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
50 ("Go to file/line", "<<goto-file-line>>"),
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
51 ]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
52
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
53 file_line_pats = [
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
54 r'file "([^"]*)", line (\d+)',
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
55 r'([^\s]+)\((\d+)\)',
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
56 r'([^\s]+):\s*(\d+):',
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
57 ]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
58
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
59 file_line_progs = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
60
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
61 def goto_file_line(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
62 if self.file_line_progs is None:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
63 l = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
64 for pat in self.file_line_pats:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
65 l.append(re.compile(pat, re.IGNORECASE))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
66 self.file_line_progs = l
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
67 # x, y = self.event.x, self.event.y
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
68 # self.text.mark_set("insert", "@%d,%d" % (x, y))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
69 line = self.text.get("insert linestart", "insert lineend")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
70 result = self._file_line_helper(line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
71 if not result:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
72 # Try the previous line. This is handy e.g. in tracebacks,
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
73 # where you tend to right-click on the displayed source line
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
74 line = self.text.get("insert -1line linestart",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
75 "insert -1line lineend")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
76 result = self._file_line_helper(line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
77 if not result:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
78 tkMessageBox.showerror(
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
79 "No special line",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
80 "The line you point at doesn't look like "
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
81 "a valid file name followed by a line number.",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
82 master=self.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
83 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
84 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
85 edit = self.flist.open(filename)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
86 edit.gotoline(lineno)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
87
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
88 def _file_line_helper(self, line):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
89 for prog in self.file_line_progs:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
90 m = prog.search(line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
91 if m:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
92 break
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
93 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
94 return None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
95 filename, lineno = m.group(1, 2)
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
96 try:
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
97 f = open(filename, "r")
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 f.close()
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
99 except IOError:
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
100 return None
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
101 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
102 return filename, int(lineno)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
103 except TypeError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
104 return None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
105
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
106 # These classes are currently not used but might come in handy
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
107
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
108 class OnDemandOutputWindow:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
109
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
110 tagdefs = {
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
111 # XXX Should use IdlePrefs.ColorPrefs
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
112 "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
113 "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
114 }
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
115
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
116 def __init__(self, flist):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
117 self.flist = flist
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
118 self.owin = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
119
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
120 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
121 if not self.owin:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
122 self.setup()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
123 self.owin.write(s, tags, mark)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
124
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
125 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
126 self.owin = owin = OutputWindow(self.flist)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
127 text = owin.text
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
128 for tag, cnf in self.tagdefs.items():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
129 if cnf:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
130 apply(text.tag_configure, (tag,), cnf)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
131 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
132 self.write = self.owin.write
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
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 #class PseudoFile:
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
135 #
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
136 # def __init__(self, owin, tags, mark="end"):
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
137 # self.owin = owin
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
138 # self.tags = tags
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.mark = 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
140
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
141 # def write(self, s):
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
142 # self.owin.write(s, self.tags, self.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
143
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
144 # def writelines(self, l):
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 # map(self.write, l)
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
146
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
147 # def flush(self):
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
148 # pass