Show More
@@ -80,6 +80,22 b' class TryNext(Exception):' | |||||
80 | self.args = args |
|
80 | self.args = args | |
81 | self.kwargs = kwargs |
|
81 | self.kwargs = kwargs | |
82 |
|
82 | |||
|
83 | class IPyAutocall: | |||
|
84 | """ Instances of this class are always autocalled | |||
|
85 | ||||
|
86 | This happens regardless of 'autocall' variable state. Use this to | |||
|
87 | develop macro-like mechanisms. | |||
|
88 | """ | |||
|
89 | ||||
|
90 | def set_ip(self,ip): | |||
|
91 | """ Will be used to set _ip point to current ipython instance b/f call | |||
|
92 | ||||
|
93 | Override this method if you don't want this to happen. | |||
|
94 | ||||
|
95 | """ | |||
|
96 | self._ip = ip | |||
|
97 | ||||
|
98 | ||||
83 | # contains the most recently instantiated IPApi |
|
99 | # contains the most recently instantiated IPApi | |
84 |
|
100 | |||
85 | class IPythonNotRunning: |
|
101 | class IPythonNotRunning: |
@@ -6,7 +6,7 b' Requires Python 2.3 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 23 |
|
9 | $Id: iplib.py 2350 2007-05-15 16:56:44Z vivainio $ | |
10 | """ |
|
10 | """ | |
11 |
|
11 | |||
12 | #***************************************************************************** |
|
12 | #***************************************************************************** | |
@@ -2182,6 +2182,13 b' want to merge them back into the new files.""" % locals()' | |||||
2182 | if line.endswith('# PYTHON-MODE'): |
|
2182 | if line.endswith('# PYTHON-MODE'): | |
2183 | return self.handle_emacs(line,continue_prompt) |
|
2183 | return self.handle_emacs(line,continue_prompt) | |
2184 |
|
2184 | |||
|
2185 | # instances of IPyAutocall in user_ns get autocalled immediately | |||
|
2186 | obj = self.user_ns.get(iFun,None) | |||
|
2187 | if isinstance(obj, IPython.ipapi.IPyAutocall): | |||
|
2188 | obj.set_ip(self.api) | |||
|
2189 | return self.handle_auto(line,continue_prompt, | |||
|
2190 | pre,iFun,theRest,obj) | |||
|
2191 | ||||
2185 | # Let's try to find if the input line is a magic fn |
|
2192 | # Let's try to find if the input line is a magic fn | |
2186 | oinfo = None |
|
2193 | oinfo = None | |
2187 | if hasattr(self,'magic_'+iFun): |
|
2194 | if hasattr(self,'magic_'+iFun): | |
@@ -2359,6 +2366,7 b' want to merge them back into the new files.""" % locals()' | |||||
2359 | self.log(line,line,continue_prompt) |
|
2366 | self.log(line,line,continue_prompt) | |
2360 | return line |
|
2367 | return line | |
2361 |
|
2368 | |||
|
2369 | force_auto = isinstance(obj, IPython.ipapi.IPyAutocall) | |||
2362 | auto_rewrite = True |
|
2370 | auto_rewrite = True | |
2363 |
|
2371 | |||
2364 | if pre == self.ESC_QUOTE: |
|
2372 | if pre == self.ESC_QUOTE: | |
@@ -2374,11 +2382,11 b' want to merge them back into the new files.""" % locals()' | |||||
2374 | # We only apply it to argument-less calls if the autocall |
|
2382 | # We only apply it to argument-less calls if the autocall | |
2375 | # parameter is set to 2. We only need to check that autocall is < |
|
2383 | # parameter is set to 2. We only need to check that autocall is < | |
2376 | # 2, since this function isn't called unless it's at least 1. |
|
2384 | # 2, since this function isn't called unless it's at least 1. | |
2377 | if not theRest and (self.rc.autocall < 2): |
|
2385 | if not theRest and (self.rc.autocall < 2) and not force_auto: | |
2378 | newcmd = '%s %s' % (iFun,theRest) |
|
2386 | newcmd = '%s %s' % (iFun,theRest) | |
2379 | auto_rewrite = False |
|
2387 | auto_rewrite = False | |
2380 | else: |
|
2388 | else: | |
2381 | if theRest.startswith('['): |
|
2389 | if not force_auto and theRest.startswith('['): | |
2382 | if hasattr(obj,'__getitem__'): |
|
2390 | if hasattr(obj,'__getitem__'): | |
2383 | # Don't autocall in this case: item access for an object |
|
2391 | # Don't autocall in this case: item access for an object | |
2384 | # which is BOTH callable and implements __getitem__. |
|
2392 | # which is BOTH callable and implements __getitem__. |
@@ -11,9 +11,9 b' import IPython.ipapi' | |||||
11 |
|
11 | |||
12 |
|
12 | |||
13 | from IPython.genutils import Term |
|
13 | from IPython.genutils import Term | |
|
14 | from IPython.ipapi import IPyAutocall | |||
14 |
|
15 | |||
15 |
|
16 | class Macro(IPyAutocall): | ||
16 | class Macro: |
|
|||
17 | """Simple class to store the value of macros as strings. |
|
17 | """Simple class to store the value of macros as strings. | |
18 |
|
18 | |||
19 | Macro is just a callable that executes a string of IPython |
|
19 | Macro is just a callable that executes a string of IPython | |
@@ -34,5 +34,5 b' class Macro:' | |||||
34 |
|
34 | |||
35 | def __call__(self): |
|
35 | def __call__(self): | |
36 | Term.cout.flush() |
|
36 | Term.cout.flush() | |
37 | ip = IPython.ipapi.get() |
|
37 | ||
38 | ip.runlines(self.value) No newline at end of file |
|
38 | self._ip.runlines(self.value) No newline at end of file |
@@ -10,6 +10,10 b'' | |||||
10 |
|
10 | |||
11 | * Magic.py, ipy_rehashdir.py, ipy_profile_sh.py: System command |
|
11 | * Magic.py, ipy_rehashdir.py, ipy_profile_sh.py: System command | |
12 | aliases are now lower case on windows (MyCommand.exe => mycommand). |
|
12 | aliases are now lower case on windows (MyCommand.exe => mycommand). | |
|
13 | ||||
|
14 | * macro.py, ipapi.py, iplib.py, Prompts.py: Macro system rehaul. | |||
|
15 | Macros are now callable objects that inherit from ipapi.IPyAutocall, | |||
|
16 | i.e. get autocalled regardless of system autocall setting. | |||
13 |
|
17 | |||
14 | 2007-05-10 Fernando Perez <Fernando.Perez@colorado.edu> |
|
18 | 2007-05-10 Fernando Perez <Fernando.Perez@colorado.edu> | |
15 |
|
19 |
General Comments 0
You need to be logged in to leave comments.
Login now