Show More
@@ -0,0 +1,128 b'' | |||||
|
1 | """Implementation of execution-related magic functions. | |||
|
2 | """ | |||
|
3 | #----------------------------------------------------------------------------- | |||
|
4 | # Copyright (c) 2012 The IPython Development Team. | |||
|
5 | # | |||
|
6 | # Distributed under the terms of the Modified BSD License. | |||
|
7 | # | |||
|
8 | # The full license is in the file COPYING.txt, distributed with this software. | |||
|
9 | #----------------------------------------------------------------------------- | |||
|
10 | ||||
|
11 | #----------------------------------------------------------------------------- | |||
|
12 | # Imports | |||
|
13 | #----------------------------------------------------------------------------- | |||
|
14 | ||||
|
15 | # Our own packages | |||
|
16 | from IPython.core.magic import Bunch, Magics, register_magics, line_magic | |||
|
17 | from IPython.testing.skipdoctest import skip_doctest | |||
|
18 | from IPython.utils.warn import error | |||
|
19 | ||||
|
20 | #----------------------------------------------------------------------------- | |||
|
21 | # Magic implementation classes | |||
|
22 | #----------------------------------------------------------------------------- | |||
|
23 | ||||
|
24 | @register_magics | |||
|
25 | class AutoMagics(Magics): | |||
|
26 | """Magics that control various autoX behaviors.""" | |||
|
27 | ||||
|
28 | def __init__(self, shell): | |||
|
29 | super(AutoMagics, self).__init__(shell) | |||
|
30 | # namespace for holding state we may need | |||
|
31 | self._magic_state = Bunch() | |||
|
32 | ||||
|
33 | @line_magic | |||
|
34 | def automagic(self, parameter_s=''): | |||
|
35 | """Make magic functions callable without having to type the initial %. | |||
|
36 | ||||
|
37 | Without argumentsl toggles on/off (when off, you must call it as | |||
|
38 | %automagic, of course). With arguments it sets the value, and you can | |||
|
39 | use any of (case insensitive): | |||
|
40 | ||||
|
41 | - on, 1, True: to activate | |||
|
42 | ||||
|
43 | - off, 0, False: to deactivate. | |||
|
44 | ||||
|
45 | Note that magic functions have lowest priority, so if there's a | |||
|
46 | variable whose name collides with that of a magic fn, automagic won't | |||
|
47 | work for that function (you get the variable instead). However, if you | |||
|
48 | delete the variable (del var), the previously shadowed magic function | |||
|
49 | becomes visible to automagic again.""" | |||
|
50 | ||||
|
51 | arg = parameter_s.lower() | |||
|
52 | mman = self.shell.magics_manager | |||
|
53 | if arg in ('on', '1', 'true'): | |||
|
54 | val = True | |||
|
55 | elif arg in ('off', '0', 'false'): | |||
|
56 | val = False | |||
|
57 | else: | |||
|
58 | val = not mman.auto_magic | |||
|
59 | mman.auto_magic = val | |||
|
60 | print '\n' + self.shell.magics_manager.auto_status() | |||
|
61 | ||||
|
62 | @skip_doctest | |||
|
63 | @line_magic | |||
|
64 | def autocall(self, parameter_s=''): | |||
|
65 | """Make functions callable without having to type parentheses. | |||
|
66 | ||||
|
67 | Usage: | |||
|
68 | ||||
|
69 | %autocall [mode] | |||
|
70 | ||||
|
71 | The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the | |||
|
72 | value is toggled on and off (remembering the previous state). | |||
|
73 | ||||
|
74 | In more detail, these values mean: | |||
|
75 | ||||
|
76 | 0 -> fully disabled | |||
|
77 | ||||
|
78 | 1 -> active, but do not apply if there are no arguments on the line. | |||
|
79 | ||||
|
80 | In this mode, you get:: | |||
|
81 | ||||
|
82 | In [1]: callable | |||
|
83 | Out[1]: <built-in function callable> | |||
|
84 | ||||
|
85 | In [2]: callable 'hello' | |||
|
86 | ------> callable('hello') | |||
|
87 | Out[2]: False | |||
|
88 | ||||
|
89 | 2 -> Active always. Even if no arguments are present, the callable | |||
|
90 | object is called:: | |||
|
91 | ||||
|
92 | In [2]: float | |||
|
93 | ------> float() | |||
|
94 | Out[2]: 0.0 | |||
|
95 | ||||
|
96 | Note that even with autocall off, you can still use '/' at the start of | |||
|
97 | a line to treat the first argument on the command line as a function | |||
|
98 | and add parentheses to it:: | |||
|
99 | ||||
|
100 | In [8]: /str 43 | |||
|
101 | ------> str(43) | |||
|
102 | Out[8]: '43' | |||
|
103 | ||||
|
104 | # all-random (note for auto-testing) | |||
|
105 | """ | |||
|
106 | ||||
|
107 | if parameter_s: | |||
|
108 | arg = int(parameter_s) | |||
|
109 | else: | |||
|
110 | arg = 'toggle' | |||
|
111 | ||||
|
112 | if not arg in (0, 1, 2,'toggle'): | |||
|
113 | error('Valid modes: (0->Off, 1->Smart, 2->Full') | |||
|
114 | return | |||
|
115 | ||||
|
116 | if arg in (0, 1, 2): | |||
|
117 | self.shell.autocall = arg | |||
|
118 | else: # toggle | |||
|
119 | if self.shell.autocall: | |||
|
120 | self._magic_state.autocall_save = self.shell.autocall | |||
|
121 | self.shell.autocall = 0 | |||
|
122 | else: | |||
|
123 | try: | |||
|
124 | self.shell.autocall = self._magic_state.autocall_save | |||
|
125 | except AttributeError: | |||
|
126 | self.shell.autocall = self._magic_state.autocall_save = 1 | |||
|
127 | ||||
|
128 | print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall] |
@@ -2005,7 +2005,7 b' class InteractiveShell(SingletonConfigurable):' | |||||
2005 | self.register_magic_function = self.magics_manager.register_function |
|
2005 | self.register_magic_function = self.magics_manager.register_function | |
2006 | self.define_magic = self.magics_manager.define_magic |
|
2006 | self.define_magic = self.magics_manager.define_magic | |
2007 |
|
2007 | |||
2008 |
self.register_magics(m |
|
2008 | self.register_magics(m.AutoMagics, m.BasicMagics, m.CodeMagics, | |
2009 | m.ConfigMagics, mf.DeprecatedMagics, m.ExecutionMagics, |
|
2009 | m.ConfigMagics, mf.DeprecatedMagics, m.ExecutionMagics, | |
2010 | mf.ExtensionsMagics, m.HistoryMagics, mf.LoggingMagics, |
|
2010 | mf.ExtensionsMagics, m.HistoryMagics, mf.LoggingMagics, | |
2011 | m.NamespaceMagics, mf.OSMagics, mf.PylabMagics ) |
|
2011 | m.NamespaceMagics, mf.OSMagics, mf.PylabMagics ) |
@@ -67,113 +67,6 b' from IPython.utils.warn import warn, error' | |||||
67 | #----------------------------------------------------------------------------- |
|
67 | #----------------------------------------------------------------------------- | |
68 |
|
68 | |||
69 | @register_magics |
|
69 | @register_magics | |
70 | class AutoMagics(Magics): |
|
|||
71 | """Magics that control various autoX behaviors.""" |
|
|||
72 |
|
||||
73 | def __init__(self, shell): |
|
|||
74 | super(AutoMagics, self).__init__(shell) |
|
|||
75 | # namespace for holding state we may need |
|
|||
76 | self._magic_state = Bunch() |
|
|||
77 |
|
||||
78 | @line_magic |
|
|||
79 | def automagic(self, parameter_s=''): |
|
|||
80 | """Make magic functions callable without having to type the initial %. |
|
|||
81 |
|
||||
82 | Without argumentsl toggles on/off (when off, you must call it as |
|
|||
83 | %automagic, of course). With arguments it sets the value, and you can |
|
|||
84 | use any of (case insensitive): |
|
|||
85 |
|
||||
86 | - on, 1, True: to activate |
|
|||
87 |
|
||||
88 | - off, 0, False: to deactivate. |
|
|||
89 |
|
||||
90 | Note that magic functions have lowest priority, so if there's a |
|
|||
91 | variable whose name collides with that of a magic fn, automagic won't |
|
|||
92 | work for that function (you get the variable instead). However, if you |
|
|||
93 | delete the variable (del var), the previously shadowed magic function |
|
|||
94 | becomes visible to automagic again.""" |
|
|||
95 |
|
||||
96 | arg = parameter_s.lower() |
|
|||
97 | mman = self.shell.magics_manager |
|
|||
98 | if arg in ('on', '1', 'true'): |
|
|||
99 | val = True |
|
|||
100 | elif arg in ('off', '0', 'false'): |
|
|||
101 | val = False |
|
|||
102 | else: |
|
|||
103 | val = not mman.auto_magic |
|
|||
104 | mman.auto_magic = val |
|
|||
105 | print '\n' + self.shell.magics_manager.auto_status() |
|
|||
106 |
|
||||
107 | @skip_doctest |
|
|||
108 | @line_magic |
|
|||
109 | def autocall(self, parameter_s=''): |
|
|||
110 | """Make functions callable without having to type parentheses. |
|
|||
111 |
|
||||
112 | Usage: |
|
|||
113 |
|
||||
114 | %autocall [mode] |
|
|||
115 |
|
||||
116 | The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the |
|
|||
117 | value is toggled on and off (remembering the previous state). |
|
|||
118 |
|
||||
119 | In more detail, these values mean: |
|
|||
120 |
|
||||
121 | 0 -> fully disabled |
|
|||
122 |
|
||||
123 | 1 -> active, but do not apply if there are no arguments on the line. |
|
|||
124 |
|
||||
125 | In this mode, you get:: |
|
|||
126 |
|
||||
127 | In [1]: callable |
|
|||
128 | Out[1]: <built-in function callable> |
|
|||
129 |
|
||||
130 | In [2]: callable 'hello' |
|
|||
131 | ------> callable('hello') |
|
|||
132 | Out[2]: False |
|
|||
133 |
|
||||
134 | 2 -> Active always. Even if no arguments are present, the callable |
|
|||
135 | object is called:: |
|
|||
136 |
|
||||
137 | In [2]: float |
|
|||
138 | ------> float() |
|
|||
139 | Out[2]: 0.0 |
|
|||
140 |
|
||||
141 | Note that even with autocall off, you can still use '/' at the start of |
|
|||
142 | a line to treat the first argument on the command line as a function |
|
|||
143 | and add parentheses to it:: |
|
|||
144 |
|
||||
145 | In [8]: /str 43 |
|
|||
146 | ------> str(43) |
|
|||
147 | Out[8]: '43' |
|
|||
148 |
|
||||
149 | # all-random (note for auto-testing) |
|
|||
150 | """ |
|
|||
151 |
|
||||
152 | if parameter_s: |
|
|||
153 | arg = int(parameter_s) |
|
|||
154 | else: |
|
|||
155 | arg = 'toggle' |
|
|||
156 |
|
||||
157 | if not arg in (0, 1, 2,'toggle'): |
|
|||
158 | error('Valid modes: (0->Off, 1->Smart, 2->Full') |
|
|||
159 | return |
|
|||
160 |
|
||||
161 | if arg in (0, 1, 2): |
|
|||
162 | self.shell.autocall = arg |
|
|||
163 | else: # toggle |
|
|||
164 | if self.shell.autocall: |
|
|||
165 | self._magic_state.autocall_save = self.shell.autocall |
|
|||
166 | self.shell.autocall = 0 |
|
|||
167 | else: |
|
|||
168 | try: |
|
|||
169 | self.shell.autocall = self._magic_state.autocall_save |
|
|||
170 | except AttributeError: |
|
|||
171 | self.shell.autocall = self._magic_state.autocall_save = 1 |
|
|||
172 |
|
||||
173 | print "Automatic calling is:",['OFF','Smart','Full'][self.shell.autocall] |
|
|||
174 |
|
||||
175 |
|
||||
176 | @register_magics |
|
|||
177 | class OSMagics(Magics): |
|
70 | class OSMagics(Magics): | |
178 | """Magics to interact with the underlying OS (shell-type functionality). |
|
71 | """Magics to interact with the underlying OS (shell-type functionality). | |
179 | """ |
|
72 | """ |
@@ -13,6 +13,7 b'' | |||||
13 | #----------------------------------------------------------------------------- |
|
13 | #----------------------------------------------------------------------------- | |
14 |
|
14 | |||
15 | from IPython.core.magic import Magics, register_magics |
|
15 | from IPython.core.magic import Magics, register_magics | |
|
16 | from .auto import AutoMagics | |||
16 | from .basic import BasicMagics |
|
17 | from .basic import BasicMagics | |
17 | from .code import CodeMagics, MacroToEdit |
|
18 | from .code import CodeMagics, MacroToEdit | |
18 | from .config import ConfigMagics |
|
19 | from .config import ConfigMagics |
General Comments 0
You need to be logged in to leave comments.
Login now