Show More
@@ -1,7 +1,7 b'' | |||
|
1 | 1 | # -*- coding: utf-8 -*- |
|
2 | 2 | """Magic functions for InteractiveShell. |
|
3 | 3 | |
|
4 |
$Id: Magic.py 9 |
|
|
4 | $Id: Magic.py 960 2005-12-28 06:51:01Z fperez $""" | |
|
5 | 5 | |
|
6 | 6 | #***************************************************************************** |
|
7 | 7 | # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and |
@@ -1875,7 +1875,7 b' Currently the magic system has the following functions:\\n"""' | |||
|
1875 | 1875 | else: |
|
1876 | 1876 | print 'done. Executing edited code...' |
|
1877 | 1877 | try: |
|
1878 | execfile(filename,self.shell.user_ns) | |
|
1878 | self.shell.safe_execfile(filename,self.shell.user_ns) | |
|
1879 | 1879 | except IOError,msg: |
|
1880 | 1880 | if msg.filename == filename: |
|
1881 | 1881 | warn('File not found. Did you forget to save?') |
@@ -2,7 +2,7 b'' | |||
|
2 | 2 | """ |
|
3 | 3 | Classes for handling input/output prompts. |
|
4 | 4 | |
|
5 |
$Id: Prompts.py 9 |
|
|
5 | $Id: Prompts.py 960 2005-12-28 06:51:01Z fperez $""" | |
|
6 | 6 | |
|
7 | 7 | #***************************************************************************** |
|
8 | 8 | # Copyright (C) 2001-2004 Fernando Perez <fperez@colorado.edu> |
@@ -494,6 +494,8 b' class CachedOutput:' | |||
|
494 | 494 | if arg is not None: |
|
495 | 495 | cout_write = Term.cout.write # fast lookup |
|
496 | 496 | # first handle the cache and counters |
|
497 | # but avoid recursive reference when displaying _oh/Out | |
|
498 | if arg is not self.user_ns['_oh']: | |
|
497 | 499 | self.update(arg) |
|
498 | 500 | # do not print output if input ends in ';' |
|
499 | 501 | if self.input_hist[self.prompt_count].endswith(';\n'): |
@@ -5,7 +5,7 b' General purpose utilities.' | |||
|
5 | 5 | This is a grab-bag of stuff I find useful in most programs I write. Some of |
|
6 | 6 | these things are also convenient when working at the command line. |
|
7 | 7 | |
|
8 |
$Id: genutils.py 9 |
|
|
8 | $Id: genutils.py 960 2005-12-28 06:51:01Z fperez $""" | |
|
9 | 9 | |
|
10 | 10 | #***************************************************************************** |
|
11 | 11 | # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu> |
@@ -948,7 +948,7 b' def ask_yes_no(prompt,default=None):' | |||
|
948 | 948 | |
|
949 | 949 | Valid answers are: y/yes/n/no (match is not case sensitive).""" |
|
950 | 950 | |
|
951 |
answers = {'y': |
|
|
951 | answers = {'y':True,'n':False,'yes':True,'no':False} | |
|
952 | 952 | ans = None |
|
953 | 953 | eofs, max_eofs = 0, 20 |
|
954 | 954 | while ans not in answers.keys(): |
@@ -32,7 +32,7 b" ip_set_hook('editor',myiphooks.calljed)" | |||
|
32 | 32 | The ip_set_hook function is put by IPython into the builtin namespace, so it |
|
33 | 33 | is always available from all running code. |
|
34 | 34 | |
|
35 |
$Id: hooks.py |
|
|
35 | $Id: hooks.py 960 2005-12-28 06:51:01Z fperez $""" | |
|
36 | 36 | |
|
37 | 37 | #***************************************************************************** |
|
38 | 38 | # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu> |
@@ -48,9 +48,9 b' __version__ = Release.version' | |||
|
48 | 48 | |
|
49 | 49 | import os |
|
50 | 50 | |
|
51 |
# List here all the default hooks. For now it's just the editor |
|
|
52 | # time we'll move here all the public API for user-accessible things. | |
|
53 | __all__ = ['editor'] | |
|
51 | # List here all the default hooks. For now it's just the editor functions | |
|
52 | # but over time we'll move here all the public API for user-accessible things. | |
|
53 | __all__ = ['editor', 'fix_error_editor'] | |
|
54 | 54 | |
|
55 | 55 | def editor(self,filename, linenum): |
|
56 | 56 | """Open the default editor at the given filename and linenumber. |
@@ -70,3 +70,26 b' def editor(self,filename, linenum):' | |||
|
70 | 70 | linemark = '+%d' % linenum |
|
71 | 71 | # Call the actual editor |
|
72 | 72 | os.system('%s %s %s' % (editor,linemark,filename)) |
|
73 | ||
|
74 | import tempfile | |
|
75 | def fix_error_editor(self,filename,linenum,column,msg): | |
|
76 | """Open the editor at the given filename, linenumber, column and | |
|
77 | show an error message. This is used for correcting syntax errors. | |
|
78 | The current implementation only has special support for the VIM editor, | |
|
79 | and falls back on the 'editor' hook if VIM is not used. | |
|
80 | ||
|
81 | Call ip_set_hook('fix_error_editor',youfunc) to use your own function, | |
|
82 | """ | |
|
83 | def vim_quickfix_file(): | |
|
84 | t = tempfile.NamedTemporaryFile() | |
|
85 | t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg)) | |
|
86 | t.flush() | |
|
87 | return t | |
|
88 | if os.path.basename(self.rc.editor) != 'vim': | |
|
89 | self.hooks.editor(filename,linenum) | |
|
90 | return | |
|
91 | t = vim_quickfix_file() | |
|
92 | try: | |
|
93 | os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name) | |
|
94 | finally: | |
|
95 | t.close() |
@@ -6,7 +6,7 b' Requires Python 2.1 or newer.' | |||
|
6 | 6 | |
|
7 | 7 | This file contains all the classes and helper functions specific to IPython. |
|
8 | 8 | |
|
9 |
$Id: iplib.py 9 |
|
|
9 | $Id: iplib.py 960 2005-12-28 06:51:01Z fperez $ | |
|
10 | 10 | """ |
|
11 | 11 | |
|
12 | 12 | #***************************************************************************** |
@@ -212,6 +212,23 b' class InputList(list):' | |||
|
212 | 212 | def __getslice__(self,i,j): |
|
213 | 213 | return ''.join(list.__getslice__(self,i,j)) |
|
214 | 214 | |
|
215 | class SyntaxTB(ultraTB.ListTB): | |
|
216 | """Extension which holds some state: the last exception value""" | |
|
217 | ||
|
218 | def __init__(self,color_scheme = 'NoColor'): | |
|
219 | ultraTB.ListTB.__init__(self,color_scheme) | |
|
220 | self.last_syntax_error = None | |
|
221 | ||
|
222 | def __call__(self, etype, value, elist): | |
|
223 | self.last_syntax_error = value | |
|
224 | ultraTB.ListTB.__call__(self,etype,value,elist) | |
|
225 | ||
|
226 | def clear_err_state(self): | |
|
227 | """Return the current error state and clear it""" | |
|
228 | e = self.last_syntax_error | |
|
229 | self.last_syntax_error = None | |
|
230 | return e | |
|
231 | ||
|
215 | 232 | #**************************************************************************** |
|
216 | 233 | # Main IPython class |
|
217 | 234 | class InteractiveShell(Logger, Magic): |
@@ -544,10 +561,10 b' class InteractiveShell(Logger, Magic):' | |||
|
544 | 561 | |
|
545 | 562 | # TraceBack handlers: |
|
546 | 563 | # Need two, one for syntax errors and one for other exceptions. |
|
547 |
self.SyntaxTB = |
|
|
548 |
# Th |
|
|
549 |
# remove the topmost item in the traceback, which is our own |
|
|
550 | # code. Valid modes: ['Plain','Context','Verbose'] | |
|
564 | self.SyntaxTB = SyntaxTB(color_scheme='NoColor') | |
|
565 | # The interactive one is initialized with an offset, meaning we always | |
|
566 | # want to remove the topmost item in the traceback, which is our own | |
|
567 | # internal code. Valid modes: ['Plain','Context','Verbose'] | |
|
551 | 568 | self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain', |
|
552 | 569 | color_scheme='NoColor', |
|
553 | 570 | tb_offset = 1) |
@@ -1022,6 +1039,44 b' want to merge them back into the new files.""" % locals()' | |||
|
1022 | 1039 | # Configure auto-indent for all platforms |
|
1023 | 1040 | self.set_autoindent(self.rc.autoindent) |
|
1024 | 1041 | |
|
1042 | def _should_recompile(self,e): | |
|
1043 | """Utility routine for edit_syntax_error""" | |
|
1044 | ||
|
1045 | if e.filename in ('<ipython console>','<input>','<string>', | |
|
1046 | '<console>'): | |
|
1047 | return False | |
|
1048 | try: | |
|
1049 | if not ask_yes_no('Return to editor to correct syntax error? ' | |
|
1050 | '[Y/n] ','y'): | |
|
1051 | return False | |
|
1052 | except EOFError: | |
|
1053 | return False | |
|
1054 | self.hooks.fix_error_editor(e.filename,e.lineno,e.offset,e.msg) | |
|
1055 | return True | |
|
1056 | ||
|
1057 | def edit_syntax_error(self): | |
|
1058 | """The bottom half of the syntax error handler called in the main loop. | |
|
1059 | ||
|
1060 | Loop until syntax error is fixed or user cancels. | |
|
1061 | """ | |
|
1062 | ||
|
1063 | while self.SyntaxTB.last_syntax_error: | |
|
1064 | # copy and clear last_syntax_error | |
|
1065 | err = self.SyntaxTB.clear_err_state() | |
|
1066 | if not self._should_recompile(err): | |
|
1067 | return | |
|
1068 | try: | |
|
1069 | # may set last_syntax_error again if a SyntaxError is raised | |
|
1070 | self.safe_execfile(err.filename,self.shell.user_ns) | |
|
1071 | except: | |
|
1072 | self.showtraceback() | |
|
1073 | else: | |
|
1074 | f = file(err.filename) | |
|
1075 | try: | |
|
1076 | sys.displayhook(f.read()) | |
|
1077 | finally: | |
|
1078 | f.close() | |
|
1079 | ||
|
1025 | 1080 | def showsyntaxerror(self, filename=None): |
|
1026 | 1081 | """Display the syntax error that just occurred. |
|
1027 | 1082 | |
@@ -1221,10 +1276,15 b' want to merge them back into the new files.""" % locals()' | |||
|
1221 | 1276 | self.indent_current_nsp -= 4 |
|
1222 | 1277 | else: |
|
1223 | 1278 | self.indent_current_nsp = 0 |
|
1279 | ||
|
1224 | 1280 | # indent_current is the actual string to be inserted |
|
1225 | 1281 | # by the readline hooks for indentation |
|
1226 | 1282 | self.indent_current = ' '* self.indent_current_nsp |
|
1227 | 1283 | |
|
1284 | if (self.SyntaxTB.last_syntax_error and | |
|
1285 | self.rc.autoedit_syntax): | |
|
1286 | self.edit_syntax_error() | |
|
1287 | ||
|
1228 | 1288 | except KeyboardInterrupt: |
|
1229 | 1289 | self.write("\nKeyboardInterrupt\n") |
|
1230 | 1290 | self.resetbuffer() |
@@ -6,7 +6,7 b' Requires Python 2.1 or better.' | |||
|
6 | 6 | |
|
7 | 7 | This file contains the main make_IPython() starter function. |
|
8 | 8 | |
|
9 |
$Id: ipmaker.py 9 |
|
|
9 | $Id: ipmaker.py 960 2005-12-28 06:51:01Z fperez $""" | |
|
10 | 10 | |
|
11 | 11 | #***************************************************************************** |
|
12 | 12 | # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu> |
@@ -161,7 +161,8 b" object? -> Details about 'object'. ?object also works, ?? prints more." | |||
|
161 | 161 | 'rcfile=s separate_in|si=s separate_out|so=s ' |
|
162 | 162 | 'separate_out2|so2=s xmode=s wildcards_case_sensitive! ' |
|
163 | 163 | 'magic_docstrings system_verbose! ' |
|
164 |
'multi_line_specials!' |
|
|
164 | 'multi_line_specials! ' | |
|
165 | 'autoedit_syntax!') | |
|
165 | 166 | |
|
166 | 167 | # Options that can *only* appear at the cmd line (not in rcfiles). |
|
167 | 168 | |
@@ -224,6 +225,7 b" object? -> Details about 'object'. ?object also works, ?? prints more." | |||
|
224 | 225 | xmode = 'Verbose', |
|
225 | 226 | wildcards_case_sensitive = 1, |
|
226 | 227 | magic_docstrings = 0, # undocumented, for doc generation |
|
228 | autoedit_syntax = 0, | |
|
227 | 229 | ) |
|
228 | 230 | |
|
229 | 231 | # Things that will *only* appear in rcfiles (not at the command line). |
@@ -6,7 +6,7 b'' | |||
|
6 | 6 | # the file COPYING, distributed as part of this software. |
|
7 | 7 | #***************************************************************************** |
|
8 | 8 | |
|
9 |
# $Id: usage.py 9 |
|
|
9 | # $Id: usage.py 960 2005-12-28 06:51:01Z fperez $ | |
|
10 | 10 | |
|
11 | 11 | from IPython import Release |
|
12 | 12 | __author__ = '%s <%s>' % Release.authors['Fernando'] |
@@ -154,13 +154,12 b' REGULAR OPTIONS' | |||
|
154 | 154 | |
|
155 | 155 | -[no]automagic |
|
156 | 156 | Make magic commands automatic (without needing their first char- |
|
157 |
acter to be |
|
|
157 | acter to be %). Type %magic at the IPython prompt for more | |
|
158 | 158 | information. |
|
159 | 159 | |
|
160 |
-[no]auto |
|
|
161 | Make IPython automatically call any callable object even if you | |
|
162 | didnβt type explicit parentheses. For example, βstr 43β becomes | |
|
163 | βstr(43)β automatically. | |
|
160 | -[no]autoedit_syntax | |
|
161 | When a syntax error occurs after editing a file, automatically | |
|
162 | open the file to the trouble causing line for convenient fixing. | |
|
164 | 163 | |
|
165 | 164 | -[no]banner |
|
166 | 165 | Print the intial information banner (default on). |
@@ -4,6 +4,11 b'' | |||
|
4 | 4 | input with emtpy lines. This fixes |
|
5 | 5 | http://www.scipy.net/roundup/ipython/issue43 and a similar |
|
6 | 6 | discussion on the user list. |
|
7 | (edit_syntax_error): added support for automatically reopening the | |
|
8 | editor if the file had a syntax error in it. Thanks to scottt who | |
|
9 | provided the patch at: | |
|
10 | http://www.scipy.net/roundup/ipython/issue36 (slightly modified | |
|
11 | version committed). | |
|
7 | 12 | |
|
8 | 13 | WARNING: a behavior change is necessarily introduced to support |
|
9 | 14 | blank lines: now a single blank line with whitespace does NOT |
@@ -124,12 +124,11 b' Turn automatic indentation on/off.' | |||
|
124 | 124 | .TP |
|
125 | 125 | .B \-[no]automagic |
|
126 | 126 | Make magic commands automatic (without needing their first character |
|
127 |
to be |
|
|
127 | to be %). Type %magic at the IPython prompt for more information. | |
|
128 | 128 | .TP |
|
129 |
.B \-[no]auto |
|
|
130 | Make IPython automatically call any callable object even if you didn't | |
|
131 | type explicit parentheses. For example, 'str 43' becomes 'str(43)' | |
|
132 | automatically. | |
|
129 | .B \-[no]autoedit_syntax | |
|
130 | When a syntax error occurs after editing a file, automatically open the file | |
|
131 | to the trouble causing line for convenient fixing. | |
|
133 | 132 | .TP |
|
134 | 133 | .B \-[no]banner |
|
135 | 134 | Print the intial information banner (default on). |
@@ -2707,6 +2707,28 b' show()' | |||
|
2707 | 2707 | |
|
2708 | 2708 | \family typewriter |
|
2709 | 2709 | \series bold |
|
2710 | -[no]autocall: | |
|
2711 | \family default | |
|
2712 | \series default | |
|
2713 | Make IPython automatically call any callable object even if you didn't | |
|
2714 | type explicit parentheses. | |
|
2715 | For example, `str 43' becomes `str(43)' automatically. | |
|
2716 | \layout List | |
|
2717 | \labelwidthstring 00.00.0000 | |
|
2718 | ||
|
2719 | ||
|
2720 | \family typewriter | |
|
2721 | \series bold | |
|
2722 | -[no]autoindent: | |
|
2723 | \family default | |
|
2724 | \series default | |
|
2725 | Turn automatic indentation on/off. | |
|
2726 | \layout List | |
|
2727 | \labelwidthstring 00.00.0000 | |
|
2728 | ||
|
2729 | ||
|
2730 | \family typewriter | |
|
2731 | \series bold | |
|
2710 | 2732 | -[no]automagic |
|
2711 | 2733 | \series default |
|
2712 | 2734 | : |
@@ -2728,6 +2750,18 b' show()' | |||
|
2728 | 2750 | |
|
2729 | 2751 | \family typewriter |
|
2730 | 2752 | \series bold |
|
2753 | -[no]autoedit_syntax: | |
|
2754 | \family default | |
|
2755 | \series default | |
|
2756 | When a syntax error occurs after editing a file, automatically open the | |
|
2757 | file to the trouble causing line for convenient fixing. | |
|
2758 | ||
|
2759 | \layout List | |
|
2760 | \labelwidthstring 00.00.0000 | |
|
2761 | ||
|
2762 | ||
|
2763 | \family typewriter | |
|
2764 | \series bold | |
|
2731 | 2765 | -[no]banner |
|
2732 | 2766 | \series default |
|
2733 | 2767 | : |
@@ -9121,4 +9155,14 b' Smedt' | |||
|
9121 | 9155 | \family default |
|
9122 | 9156 | Debugger enhancements, so that when pdb is activated from within IPython, |
|
9123 | 9157 | coloring, tab completion and other features continue to work seamlessly. |
|
9158 | \layout List | |
|
9159 | \labelwidthstring 00.00.0000 | |
|
9160 | ||
|
9161 | Scott (email unknown) Support for automatic editor invocation on syntax | |
|
9162 | errors (see | |
|
9163 | \begin_inset LatexCommand \htmlurl{http://www.scipy.net/roundup/ipython/issue36} | |
|
9164 | ||
|
9165 | \end_inset | |
|
9166 | ||
|
9167 | ). | |
|
9124 | 9168 | \the_end |
General Comments 0
You need to be logged in to leave comments.
Login now