Show More
@@ -1,7 +1,7 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 | """Magic functions for InteractiveShell. |
|
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 | # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and |
|
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 | else: |
|
1875 | else: | |
1876 | print 'done. Executing edited code...' |
|
1876 | print 'done. Executing edited code...' | |
1877 | try: |
|
1877 | try: | |
1878 | execfile(filename,self.shell.user_ns) |
|
1878 | self.shell.safe_execfile(filename,self.shell.user_ns) | |
1879 | except IOError,msg: |
|
1879 | except IOError,msg: | |
1880 | if msg.filename == filename: |
|
1880 | if msg.filename == filename: | |
1881 | warn('File not found. Did you forget to save?') |
|
1881 | warn('File not found. Did you forget to save?') |
@@ -2,7 +2,7 b'' | |||||
2 | """ |
|
2 | """ | |
3 | Classes for handling input/output prompts. |
|
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 | # Copyright (C) 2001-2004 Fernando Perez <fperez@colorado.edu> |
|
8 | # Copyright (C) 2001-2004 Fernando Perez <fperez@colorado.edu> | |
@@ -494,6 +494,8 b' class CachedOutput:' | |||||
494 | if arg is not None: |
|
494 | if arg is not None: | |
495 | cout_write = Term.cout.write # fast lookup |
|
495 | cout_write = Term.cout.write # fast lookup | |
496 | # first handle the cache and counters |
|
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 | self.update(arg) |
|
499 | self.update(arg) | |
498 | # do not print output if input ends in ';' |
|
500 | # do not print output if input ends in ';' | |
499 | if self.input_hist[self.prompt_count].endswith(';\n'): |
|
501 | if self.input_hist[self.prompt_count].endswith(';\n'): |
@@ -5,7 +5,7 b' General purpose utilities.' | |||||
5 | This is a grab-bag of stuff I find useful in most programs I write. Some of |
|
5 | This is a grab-bag of stuff I find useful in most programs I write. Some of | |
6 | these things are also convenient when working at the command line. |
|
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 | # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu> |
|
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 | Valid answers are: y/yes/n/no (match is not case sensitive).""" |
|
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 | ans = None |
|
952 | ans = None | |
953 | eofs, max_eofs = 0, 20 |
|
953 | eofs, max_eofs = 0, 20 | |
954 | while ans not in answers.keys(): |
|
954 | while ans not in answers.keys(): |
@@ -32,7 +32,7 b" ip_set_hook('editor',myiphooks.calljed)" | |||||
32 | The ip_set_hook function is put by IPython into the builtin namespace, so it |
|
32 | The ip_set_hook function is put by IPython into the builtin namespace, so it | |
33 | is always available from all running code. |
|
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 | # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu> |
|
38 | # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu> | |
@@ -48,9 +48,9 b' __version__ = Release.version' | |||||
48 |
|
48 | |||
49 | import os |
|
49 | import os | |
50 |
|
50 | |||
51 |
# List here all the default hooks. For now it's just the editor |
|
51 | # List here all the default hooks. For now it's just the editor functions | |
52 | # time we'll move here all the public API for user-accessible things. |
|
52 | # but over time we'll move here all the public API for user-accessible things. | |
53 | __all__ = ['editor'] |
|
53 | __all__ = ['editor', 'fix_error_editor'] | |
54 |
|
54 | |||
55 | def editor(self,filename, linenum): |
|
55 | def editor(self,filename, linenum): | |
56 | """Open the default editor at the given filename and linenumber. |
|
56 | """Open the default editor at the given filename and linenumber. | |
@@ -70,3 +70,26 b' def editor(self,filename, linenum):' | |||||
70 | linemark = '+%d' % linenum |
|
70 | linemark = '+%d' % linenum | |
71 | # Call the actual editor |
|
71 | # Call the actual editor | |
72 | os.system('%s %s %s' % (editor,linemark,filename)) |
|
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 | This file contains all the classes and helper functions specific to IPython. |
|
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 | def __getslice__(self,i,j): |
|
212 | def __getslice__(self,i,j): | |
213 | return ''.join(list.__getslice__(self,i,j)) |
|
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 | # Main IPython class |
|
233 | # Main IPython class | |
217 | class InteractiveShell(Logger, Magic): |
|
234 | class InteractiveShell(Logger, Magic): | |
@@ -544,10 +561,10 b' class InteractiveShell(Logger, Magic):' | |||||
544 |
|
561 | |||
545 | # TraceBack handlers: |
|
562 | # TraceBack handlers: | |
546 | # Need two, one for syntax errors and one for other exceptions. |
|
563 | # Need two, one for syntax errors and one for other exceptions. | |
547 |
self.SyntaxTB = |
|
564 | self.SyntaxTB = SyntaxTB(color_scheme='NoColor') | |
548 |
# Th |
|
565 | # The interactive one is initialized with an offset, meaning we always | |
549 |
# remove the topmost item in the traceback, which is our own |
|
566 | # want to remove the topmost item in the traceback, which is our own | |
550 | # code. Valid modes: ['Plain','Context','Verbose'] |
|
567 | # internal code. Valid modes: ['Plain','Context','Verbose'] | |
551 | self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain', |
|
568 | self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain', | |
552 | color_scheme='NoColor', |
|
569 | color_scheme='NoColor', | |
553 | tb_offset = 1) |
|
570 | tb_offset = 1) | |
@@ -1022,6 +1039,44 b' want to merge them back into the new files.""" % locals()' | |||||
1022 | # Configure auto-indent for all platforms |
|
1039 | # Configure auto-indent for all platforms | |
1023 | self.set_autoindent(self.rc.autoindent) |
|
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 | def showsyntaxerror(self, filename=None): |
|
1080 | def showsyntaxerror(self, filename=None): | |
1026 | """Display the syntax error that just occurred. |
|
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 | self.indent_current_nsp -= 4 |
|
1276 | self.indent_current_nsp -= 4 | |
1222 | else: |
|
1277 | else: | |
1223 | self.indent_current_nsp = 0 |
|
1278 | self.indent_current_nsp = 0 | |
|
1279 | ||||
1224 | # indent_current is the actual string to be inserted |
|
1280 | # indent_current is the actual string to be inserted | |
1225 | # by the readline hooks for indentation |
|
1281 | # by the readline hooks for indentation | |
1226 | self.indent_current = ' '* self.indent_current_nsp |
|
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 | except KeyboardInterrupt: |
|
1288 | except KeyboardInterrupt: | |
1229 | self.write("\nKeyboardInterrupt\n") |
|
1289 | self.write("\nKeyboardInterrupt\n") | |
1230 | self.resetbuffer() |
|
1290 | self.resetbuffer() |
@@ -6,7 +6,7 b' Requires Python 2.1 or better.' | |||||
6 |
|
6 | |||
7 | This file contains the main make_IPython() starter function. |
|
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 | # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu> |
|
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 | 'rcfile=s separate_in|si=s separate_out|so=s ' |
|
161 | 'rcfile=s separate_in|si=s separate_out|so=s ' | |
162 | 'separate_out2|so2=s xmode=s wildcards_case_sensitive! ' |
|
162 | 'separate_out2|so2=s xmode=s wildcards_case_sensitive! ' | |
163 | 'magic_docstrings system_verbose! ' |
|
163 | 'magic_docstrings system_verbose! ' | |
164 |
'multi_line_specials!' |
|
164 | 'multi_line_specials! ' | |
|
165 | 'autoedit_syntax!') | |||
165 |
|
166 | |||
166 | # Options that can *only* appear at the cmd line (not in rcfiles). |
|
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 | xmode = 'Verbose', |
|
225 | xmode = 'Verbose', | |
225 | wildcards_case_sensitive = 1, |
|
226 | wildcards_case_sensitive = 1, | |
226 | magic_docstrings = 0, # undocumented, for doc generation |
|
227 | magic_docstrings = 0, # undocumented, for doc generation | |
|
228 | autoedit_syntax = 0, | |||
227 | ) |
|
229 | ) | |
228 |
|
230 | |||
229 | # Things that will *only* appear in rcfiles (not at the command line). |
|
231 | # Things that will *only* appear in rcfiles (not at the command line). |
@@ -6,7 +6,7 b'' | |||||
6 | # the file COPYING, distributed as part of this software. |
|
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 | from IPython import Release |
|
11 | from IPython import Release | |
12 | __author__ = '%s <%s>' % Release.authors['Fernando'] |
|
12 | __author__ = '%s <%s>' % Release.authors['Fernando'] | |
@@ -154,13 +154,12 b' REGULAR OPTIONS' | |||||
154 |
|
154 | |||
155 | -[no]automagic |
|
155 | -[no]automagic | |
156 | Make magic commands automatic (without needing their first char- |
|
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 | information. |
|
158 | information. | |
159 |
|
159 | |||
160 |
-[no]auto |
|
160 | -[no]autoedit_syntax | |
161 | Make IPython automatically call any callable object even if you |
|
161 | When a syntax error occurs after editing a file, automatically | |
162 | didnβt type explicit parentheses. For example, βstr 43β becomes |
|
162 | open the file to the trouble causing line for convenient fixing. | |
163 | βstr(43)β automatically. |
|
|||
164 |
|
163 | |||
165 | -[no]banner |
|
164 | -[no]banner | |
166 | Print the intial information banner (default on). |
|
165 | Print the intial information banner (default on). |
@@ -4,6 +4,11 b'' | |||||
4 | input with emtpy lines. This fixes |
|
4 | input with emtpy lines. This fixes | |
5 | http://www.scipy.net/roundup/ipython/issue43 and a similar |
|
5 | http://www.scipy.net/roundup/ipython/issue43 and a similar | |
6 | discussion on the user list. |
|
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 | WARNING: a behavior change is necessarily introduced to support |
|
13 | WARNING: a behavior change is necessarily introduced to support | |
9 | blank lines: now a single blank line with whitespace does NOT |
|
14 | blank lines: now a single blank line with whitespace does NOT |
@@ -124,12 +124,11 b' Turn automatic indentation on/off.' | |||||
124 | .TP |
|
124 | .TP | |
125 | .B \-[no]automagic |
|
125 | .B \-[no]automagic | |
126 | Make magic commands automatic (without needing their first character |
|
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 | .TP |
|
128 | .TP | |
129 |
.B \-[no]auto |
|
129 | .B \-[no]autoedit_syntax | |
130 | Make IPython automatically call any callable object even if you didn't |
|
130 | When a syntax error occurs after editing a file, automatically open the file | |
131 | type explicit parentheses. For example, 'str 43' becomes 'str(43)' |
|
131 | to the trouble causing line for convenient fixing. | |
132 | automatically. |
|
|||
133 | .TP |
|
132 | .TP | |
134 | .B \-[no]banner |
|
133 | .B \-[no]banner | |
135 | Print the intial information banner (default on). |
|
134 | Print the intial information banner (default on). |
@@ -2707,6 +2707,28 b' show()' | |||||
2707 |
|
2707 | |||
2708 | \family typewriter |
|
2708 | \family typewriter | |
2709 | \series bold |
|
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 | -[no]automagic |
|
2732 | -[no]automagic | |
2711 | \series default |
|
2733 | \series default | |
2712 | : |
|
2734 | : | |
@@ -2728,6 +2750,18 b' show()' | |||||
2728 |
|
2750 | |||
2729 | \family typewriter |
|
2751 | \family typewriter | |
2730 | \series bold |
|
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 | -[no]banner |
|
2765 | -[no]banner | |
2732 | \series default |
|
2766 | \series default | |
2733 | : |
|
2767 | : | |
@@ -9121,4 +9155,14 b' Smedt' | |||||
9121 | \family default |
|
9155 | \family default | |
9122 | Debugger enhancements, so that when pdb is activated from within IPython, |
|
9156 | Debugger enhancements, so that when pdb is activated from within IPython, | |
9123 | coloring, tab completion and other features continue to work seamlessly. |
|
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 | \the_end |
|
9168 | \the_end |
General Comments 0
You need to be logged in to leave comments.
Login now