annotate Lib/idlelib/OutputWindow.py @ 58765:2ba7677bfa95 legacy-trunk

testCopysign was defined twice in test_math; combine the definitions
author Mark Dickinson <dickinsm@gmail.com>
date Sat, 06 Feb 2010 23:11:25 +0000
parents 9fef1f1657c8
children eab361617f6a
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 *
13975
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
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47101
diff changeset
4 import tkMessageBox
29477
892dfc9e7256 Forwardport Patch from IDLEfork SF 615312
Kurt B. Kaiser <kbk@shore.net>
parents: 26959
diff changeset
5 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
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
50 def writelines(self, l):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
51 map(self.write, l)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
52
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
53 def flush(self):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
54 pass
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
55
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
56 # Our own right-button menu
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
57
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
58 rmenu_specs = [
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
59 ("Go to file/line", "<<goto-file-line>>"),
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
60 ]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
61
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
62 file_line_pats = [
53697
9fef1f1657c8 Further development of issue5559, handle Windows files
Kurt B. Kaiser <kbk@shore.net>
parents: 53495
diff changeset
63 # order of patterns matters
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
64 r'file "([^"]*)", line (\d+)',
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
65 r'([^\s]+)\((\d+)\)',
53697
9fef1f1657c8 Further development of issue5559, handle Windows files
Kurt B. Kaiser <kbk@shore.net>
parents: 53495
diff changeset
66 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
67 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
68 r'^\s*(\S.*?):\s*(\d+):', # Win abs path with embedded spaces, ltrim
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
69 ]
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
70
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
71 file_line_progs = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
72
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
73 def goto_file_line(self, event=None):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
74 if self.file_line_progs is None:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
75 l = []
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
76 for pat in self.file_line_pats:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
77 l.append(re.compile(pat, re.IGNORECASE))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
78 self.file_line_progs = l
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
79 # x, y = self.event.x, self.event.y
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
80 # self.text.mark_set("insert", "@%d,%d" % (x, y))
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
81 line = self.text.get("insert linestart", "insert lineend")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
82 result = self._file_line_helper(line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
83 if not result:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
84 # Try the previous line. This is handy e.g. in tracebacks,
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
85 # where you tend to right-click on the displayed source line
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
86 line = self.text.get("insert -1line linestart",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
87 "insert -1line lineend")
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
88 result = self._file_line_helper(line)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
89 if not result:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
90 tkMessageBox.showerror(
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
91 "No special line",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
92 "The line you point at doesn't look like "
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
93 "a valid file name followed by a line number.",
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
94 master=self.text)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
95 return
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
96 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
97 edit = self.flist.open(filename)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
98 edit.gotoline(lineno)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
99
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
100 def _file_line_helper(self, line):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
101 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
102 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
103 if match:
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
104 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
105 try:
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
106 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
107 f.close()
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
108 break
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
109 except IOError:
d2cfd3d3bc54 Right click 'go to file/line' not working if spaces
Kurt B. Kaiser <kbk@shore.net>
parents: 47183
diff changeset
110 continue
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
111 else:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
112 return None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
113 try:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
114 return filename, int(lineno)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
115 except TypeError:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
116 return None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
117
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
118 # These classes are currently not used but might come in handy
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
119
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
120 class OnDemandOutputWindow:
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
121
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
122 tagdefs = {
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
123 # XXX Should use IdlePrefs.ColorPrefs
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
124 "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
125 "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
126 }
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
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
128 def __init__(self, flist):
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
129 self.flist = flist
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
130 self.owin = None
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
131
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 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
133 if not self.owin:
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
134 self.setup()
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
135 self.owin.write(s, tags, mark)
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
136
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
137 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
138 self.owin = owin = OutputWindow(self.flist)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
139 text = owin.text
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
140 for tag, cnf in self.tagdefs.items():
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
141 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
142 text.tag_configure(tag, **cnf)
13975
30713d5288df Initial revision
David Scherer <dscherer@cmu.edu>
parents:
diff changeset
143 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
144 self.write = self.owin.write