<div dir="ltr"><div>IPython developers,</div><div><br></div><div>One of the nice things that the IPython team did for the next version was to create a base class for creating new kernels for code written in Python, called wrapper kernels [1]. </div>
<div><br></div><div>Unfortunately, such kernels don't have ! shell commands, nor magics. This is understandable, as those are tightly integrated with IPython's Python. However, one could get some of the basic functionality of these features on top of the wrapper kernel, in a generic way. For example, you could run shell commands, or have some magics that operate independent of the kernel.</div>
<div><br></div><div>We have created a prototype of magics for wrapper kernels [2]. The code is in magickernel.py, and the magics are in the folder magics. The current prototype works like this:</div><div><br></div><div>```</div>
<div><div>In [1]: %magics</div><div>Line magics:</div><div>     %cd PATH - change current directory of session</div><div>     %connect_info - show connection information</div><div>     %download URL [FILENAME] - download file from URL</div>
<div>     %html CODE - display code as HTML</div><div>     %install_magic URL - download and install magic from URL</div><div>     %javascript CODE - send code as JavaScript</div><div>     %latex TEXT - display text as LaTex</div>
<div>     %magics - show installed magics</div><div>     %reload_magics - reload the magics from the installed files</div><div>     %shell COMMAND - run the line as a shell command</div><div>     %time COMMAND - show time to run line</div>
<div><br></div><div>Cell magics:</div><div>    %%file FILENAME - write contents of cell to file</div><div>    %%html - display contents of cell as HTML</div><div>    %%javascript - send contents of cell as JavaScript</div>
<div>    %%latex - display contents of cell as LaTeX</div><div>    %%shell - run the contents of the cell as shell commands</div><div>    %%time - show time to run cell</div><div><br></div><div>Shell shortcut:</div><div>    ! COMMAND ... - execute command in shell</div>
<div><br></div><div>Any cell magic can be made persistent for rest of session by using %%% prefix.</div></div><div>```<br></div><div><br></div><div>The idea is to be able to easily add some standard-like magics to 3rd-party kernels by using MagicKernel. See the sample wrapperkernel EchoKernel with magics [3]. Also, the idea here is not to replicate too much what comes with IPython's Python, but to provide a small, simple core set of magics that can't be easily done in the kernel language. You can install MagicKernel from source, or using:</div>
<div><br></div><div>$ pip install calico --upgrade</div><div><br></div><div>This is a prototype (with some bugs), and we very much hope for others to provide feedback or code, and more work needs to be done. What magics would you need in your 3rd-party kernel, that can be accomplished this way? Will this design be sufficient? </div>
<div><br></div><div>We hope that this is useful!</div><div><br></div><div>-Doug</div><div><br></div>[1] - <a href="http://ipython.org/ipython-doc/dev/development/wrapperkernels.html">http://ipython.org/ipython-doc/dev/development/wrapperkernels.html</a><div>
[2] - <a href="https://bitbucket.org/ipre/calico/src/master/src/calico/">https://bitbucket.org/ipre/calico/src/master/src/calico/</a></div><div>[3] - <a href="https://bitbucket.org/ipre/calico/src/master/src/echo_kernel/echo_kernel.py">https://bitbucket.org/ipre/calico/src/master/src/echo_kernel/echo_kernel.py</a></div>
<div><br></div></div>