Mercurial > cpython-lru_cache-weakref
annotate Lib/idlelib/OutputWindow.py @ 80661:94de77bd0b4b 2.7
Issue #16194: document imp.load_dynamic problems
when read several extension modules from the same binary object file.
| author | Andrew Svetlov <andrew.svetlov@gmail.com> |
|---|---|
| date | Thu, 29 Nov 2012 19:51:28 +0200 |
| parents | 639dd6e62de4 |
| children |
| 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 * |
|
63585
df378e44ba9a
Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
56387
diff
changeset
|
2 from idlelib.EditorWindow import EditorWindow |
| 13975 | 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 |
|
63585
df378e44ba9a
Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
56387
diff
changeset
|
5 from idlelib import IOBinding |
| 13975 | 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 | 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 | 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 | 13 """ |
| 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 | 17 self.text.bind("<<goto-file-line>>", self.goto_file_line) |
| 18 | |
| 19 # Customize EditorWindow | |
| 20 | |
| 21 def ispythonsource(self, filename): | |
| 22 # No colorization needed | |
| 23 return 0 | |
| 24 | |
| 25 def short_title(self): | |
| 26 return "Output" | |
| 27 | |
| 28 def maybesave(self): | |
| 29 # Override base class method -- don't ask any questions | |
| 30 if self.get_saved(): | |
| 31 return "yes" | |
| 32 else: | |
| 33 return "no" | |
| 34 | |
| 35 # Act as output file | |
| 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 | 47 self.text.see(mark) |
| 48 self.text.update() | |
| 49 | |
|
63585
df378e44ba9a
Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
56387
diff
changeset
|
50 def writelines(self, lines): |
|
df378e44ba9a
Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
56387
diff
changeset
|
51 for line in lines: |
|
df378e44ba9a
Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
56387
diff
changeset
|
52 self.write(line) |
| 13975 | 53 |
| 54 def flush(self): | |
| 55 pass | |
| 56 | |
| 57 # Our own right-button menu | |
| 58 | |
| 59 rmenu_specs = [ | |
|
80172
639dd6e62de4
Issue #1207589: Add Cut/Copy/Paste items to IDLE right click Context Menu
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
68256
diff
changeset
|
60 ("Cut", "<<cut>>", "rmenu_check_cut"), |
|
639dd6e62de4
Issue #1207589: Add Cut/Copy/Paste items to IDLE right click Context Menu
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
68256
diff
changeset
|
61 ("Copy", "<<copy>>", "rmenu_check_copy"), |
|
639dd6e62de4
Issue #1207589: Add Cut/Copy/Paste items to IDLE right click Context Menu
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
68256
diff
changeset
|
62 ("Paste", "<<paste>>", "rmenu_check_paste"), |
|
639dd6e62de4
Issue #1207589: Add Cut/Copy/Paste items to IDLE right click Context Menu
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
68256
diff
changeset
|
63 (None, None, None), |
|
639dd6e62de4
Issue #1207589: Add Cut/Copy/Paste items to IDLE right click Context Menu
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
68256
diff
changeset
|
64 ("Go to file/line", "<<goto-file-line>>", None), |
| 13975 | 65 ] |
| 66 | |
| 67 file_line_pats = [ | |
|
56387
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
68 # order of patterns matters |
| 13975 | 69 r'file "([^"]*)", line (\d+)', |
| 70 r'([^\s]+)\((\d+)\)', | |
|
56387
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
71 r'^(\s*\S.*?):\s*(\d+):', # Win filename, maybe starting with spaces |
|
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
72 r'([^\s]+):\s*(\d+):', # filename or path, ltrim |
|
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
73 r'^\s*(\S.*?):\s*(\d+):', # Win abs path with embedded spaces, ltrim |
| 13975 | 74 ] |
| 75 | |
| 76 file_line_progs = None | |
| 77 | |
| 78 def goto_file_line(self, event=None): | |
| 79 if self.file_line_progs is None: | |
| 80 l = [] | |
| 81 for pat in self.file_line_pats: | |
| 82 l.append(re.compile(pat, re.IGNORECASE)) | |
| 83 self.file_line_progs = l | |
| 84 # x, y = self.event.x, self.event.y | |
| 85 # self.text.mark_set("insert", "@%d,%d" % (x, y)) | |
| 86 line = self.text.get("insert linestart", "insert lineend") | |
| 87 result = self._file_line_helper(line) | |
| 88 if not result: | |
| 89 # Try the previous line. This is handy e.g. in tracebacks, | |
| 90 # where you tend to right-click on the displayed source line | |
| 91 line = self.text.get("insert -1line linestart", | |
| 92 "insert -1line lineend") | |
| 93 result = self._file_line_helper(line) | |
| 94 if not result: | |
| 95 tkMessageBox.showerror( | |
| 96 "No special line", | |
| 97 "The line you point at doesn't look like " | |
| 98 "a valid file name followed by a line number.", | |
| 99 master=self.text) | |
| 100 return | |
| 101 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
|
102 edit = self.flist.open(filename) |
| 13975 | 103 edit.gotoline(lineno) |
| 104 | |
| 105 def _file_line_helper(self, line): | |
| 106 for prog in self.file_line_progs: | |
|
56387
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
107 match = prog.search(line) |
|
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
108 if match: |
|
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
109 filename, lineno = match.group(1, 2) |
|
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
110 try: |
|
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
111 f = open(filename, "r") |
|
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
112 f.close() |
|
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
113 break |
|
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
114 except IOError: |
|
490190cb4a57
Merged revisions 71995,72227 via svnmerge from
Kurt B. Kaiser <kbk@shore.net>
parents:
47183
diff
changeset
|
115 continue |
| 13975 | 116 else: |
| 117 return None | |
| 118 try: | |
| 119 return filename, int(lineno) | |
| 120 except TypeError: | |
| 121 return None | |
| 122 | |
|
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
|
123 # These classes are currently not used but might come in handy |
| 13975 | 124 |
| 125 class OnDemandOutputWindow: | |
| 126 | |
| 127 tagdefs = { | |
| 128 # XXX Should use IdlePrefs.ColorPrefs | |
| 129 "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
|
130 "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
|
131 } |
|
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 |
| 13975 | 133 def __init__(self, flist): |
| 134 self.flist = flist | |
| 135 self.owin = None | |
| 136 | |
|
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
|
137 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
|
138 if not self.owin: |
| 13975 | 139 self.setup() |
| 140 self.owin.write(s, tags, mark) | |
| 141 | |
| 142 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
|
143 self.owin = owin = OutputWindow(self.flist) |
| 13975 | 144 text = owin.text |
| 145 for tag, cnf in self.tagdefs.items(): | |
| 146 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
|
147 text.tag_configure(tag, **cnf) |
| 13975 | 148 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
|
149 self.write = self.owin.write |
