EIN -- Emacs IPython Notebook
--- or EIN Is not only for Notebooks.
Emacs IPython Notebook (EIN) lets you edit and run Jupyter (formerly IPython) notebooks within Emacs. It channels all the power of Emacs without the idiosyncrasies of in-browser editing.
EIN was originally written by tkf. More complete documentation is available.
Install
Install from MELPA (recommended) or make install
from github source. You will need to install Cask for the latter. See the online documentation for more information.
Usage
Launch a local session
M-x ein:jupyter-server-start
(aliased M-x ein:run
) launches a jupyter process from emacs.
Login to a local or remote session
M-x ein:notebooklist-login
(aliased M-x ein:login
) to a running jupyter server.
Jupyter services relayed over HTTP such as mybinder.org
and coursera.org
require cookie authentication. In these instances you need to issue C-u M-x ein:login
to be prompted for cookie information. See the Wiki for more information.
Open a notebook file
Open an .ipynb
file and press C-c C-z
.
Highlighted Features
- Copy/paste cells, even to/from different notebooks.
- Console integration: You can easily connect to a kernel via the console application. This enables you to start debugging in the same kernel. It is even possible to connect to a console over ssh.
- An IPython kernel can be "connected" to any buffer. This enables you to evaluate a buffer or buffer region using the same kernel as the notebook. Notebook goodies such as tooltip help, help browser and code completion are available in these buffers.
- Jump to definition (go to the definition by hitting
M-.
over an object). - Projectile-like file navigation via
C-c C-o
. - Limited JupyterHub support.
Org-mode Integration
EIN now integrates with org-mode! The code was heavily inspired by ob-ipython which is another project very much worth checking out. Find it on MELPA.
Screenshots
See more!
Keybindings - Notebook
key binding --- ------- C-c Prefix Command C-x Prefix Command ESC Prefix Command C-: ein:shared-output-eval-string <C-down> ein:worksheet-goto-next-input <C-up> ein:worksheet-goto-prev-input <M-S-return> ein:worksheet-execute-cell-and-insert-below <M-down> ein:worksheet-move-cell-down <M-up> ein:worksheet-move-cell-up C-x C-s ein:notebook-save-notebook-command C-x C-w ein:notebook-rename-command M-RET ein:worksheet-execute-cell-and-goto-next M-, ein:pytools-jump-back-command M-. ein:pytools-jump-to-source-command M-n ein:worksheet-next-input-history M-p ein:worksheet-previous-input-history C-c C-a ein:worksheet-insert-cell-above C-c C-b ein:worksheet-insert-cell-below C-c C-c ein:worksheet-execute-cell C-c C-d ein:worksheet-toggle-slide-type C-c C-e ein:worksheet-toggle-output C-c C-f ein:file-open C-c C-h ein:pytools-request-tooltip-or-help C-c TAB ein:completer-complete C-c C-k ein:worksheet-kill-cell C-c C-l ein:worksheet-clear-output C-c RET ein:worksheet-merge-cell C-c C-n ein:worksheet-goto-next-input C-c C-o ein:notebook-open C-c C-p ein:worksheet-goto-prev-input C-c C-q ein:notebook-kill-kernel-then-close-command C-c C-r ein:notebook-reconnect-session-command C-c C-s ein:worksheet-split-cell-at-point C-c C-t ein:worksheet-toggle-cell-type C-c C-u ein:worksheet-change-cell-type C-c C-v ein:worksheet-set-output-visibility-all C-c C-w ein:worksheet-copy-cell C-c C-x Prefix Command C-c C-y ein:worksheet-yank-cell C-c C-z ein:notebook-kernel-interrupt-command C-c ESC Prefix Command C-c ! ein:worksheet-rename-sheet C-c ' ein:edit-cell-contents C-c + ein:notebook-worksheet-insert-next C-c - ein:notebook-worksheet-delete C-c 1 ein:notebook-worksheet-open-1th C-c 2 ein:notebook-worksheet-open-2th C-c 3 ein:notebook-worksheet-open-3th C-c 4 ein:notebook-worksheet-open-4th C-c 5 ein:notebook-worksheet-open-5th C-c 6 ein:notebook-worksheet-open-6th C-c 7 ein:notebook-worksheet-open-7th C-c 8 ein:notebook-worksheet-open-8th C-c 9 ein:notebook-worksheet-open-last C-c S ein:worksheet-toggle-slideshow-view C-c i ein:inspect-object C-c { ein:notebook-worksheet-open-prev-or-last C-c } ein:notebook-worksheet-open-next-or-first C-c C-S-l ein:worksheet-clear-all-output C-c C-# ein:notebook-close C-c C-$ ein:tb-show C-c C-' ein:worksheet-turn-on-autoexec C-c C-, ein:pytools-jump-back-command C-c C-. ein:pytools-jump-to-source-command C-c C-/ ein:notebook-scratchsheet-open C-c C-; ein:shared-output-show-code-cell-at-point C-c <down> ein:worksheet-move-cell-down C-c <up> ein:worksheet-move-cell-up C-c C-x C-l ein:notebook-toggle-latex-fragment C-c C-x C-r ein:notebook-restart-session-command C-c M-+ ein:notebook-worksheet-insert-prev C-c M-w ein:worksheet-copy-cell C-c M-{ ein:notebook-worksheet-move-prev C-c M-} ein:notebook-worksheet-move-next
Keybindings - Connect
In Python (or any other) buffer, you can connect to any open notebook
by M-x ein:connect-to-notebook
then choose appropriate notebook.
After connecting to the notebook (and hence its kernel), the following
commands are available.
key binding --- ------- C-c Prefix Command ESC Prefix Command C-: ein:shared-output-eval-string M-, ein:pytools-jump-back-command M-. ein:pytools-jump-to-source-command C-c C-a ein:connect-toggle-autoexec C-c C-c ein:connect-run-or-eval-buffer C-c C-h ein:pytools-request-tooltip-or-help C-c TAB ein:completer-complete C-c C-l ein:connect-reload-buffer C-c C-o ein:console-open C-c C-r ein:connect-eval-region C-c C-x ein:tb-show C-c C-z ein:connect-pop-to-notebook C-c C-, ein:pytools-jump-back-command C-c C-. ein:pytools-jump-to-source-command C-c C-/ ein:notebook-scratchsheet-open
Links
License
Emacs IPython Notebook is licensed under GPL v3. See COPYING for details.