emacs-ipython-notebook/README.rst
2020-02-29 22:46:25 -05:00

209 lines
7.3 KiB
ReStructuredText

========================================================================
EIN -- Emacs IPython Notebook |build-status| |melpa-dev| |melpa-stable|
========================================================================
Emacs IPython Notebook (EIN) lets you run Jupyter (formerly IPython)
notebooks within Emacs. It channels all the power of Emacs without the
idiosyncrasies of in-browser editing.
Org_ users please find ob-ein_, a jupyter Babel_ backend.
EIN was originally written by `[tkf]`_. A jupyter Babel_ backend was first
introduced by `[gregsexton]`_.
.. |build-status|
image:: https://github.com/millejoh/emacs-ipython-notebook/workflows/CI/badge.svg
:target: https://github.com/millejoh/emacs-ipython-notebook/actions
:alt: Build Status
.. |melpa-dev|
image:: http://melpa.milkbox.net/packages/ein-badge.svg
:target: http://melpa.milkbox.net/#/ein
:alt: MELPA development version
.. |melpa-stable|
image:: http://melpa-stable.milkbox.net/packages/ein-badge.svg
:target: http://melpa-stable.milkbox.net/#/ein
:alt: MELPA stable version
.. _Jupyter: http://jupyter.org
.. _Babel: https://orgmode.org/worg/org-contrib/babel/intro.html
.. _Org: https://orgmode.org
.. _[tkf]: http://tkf.github.io
.. _[gregsexton]: https://github.com/gregsexton/ob-ipython
Install
=======
As described in `Getting started`_, ensure melpa's whereabouts in ``init.el`` or ``.emacs``::
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
Then
::
M-x package-refresh-contents RET
M-x package-install RET ein RET
Alternatively, directly clone this repo and ``make install``.
Usage
=====
Start EIN using **ONE** of the following:
- Open an ``.ipynb`` file normally in emacs and press ``C-c C-o``, or,
- ``M-x ein:run`` launches a jupyter process from emacs, or,
- ``M-x ein:login`` to a running jupyter server
Use ``C-u M-x ein:login`` for services such as ``mybinder.org`` requiring cookie authentication.
Alternatively, ob-ein_.
.. _Cask: https://cask.readthedocs.io/en/latest/guide/installation.html
.. _Getting started: http://melpa.org/#/getting-started
FAQ
===
How do I...
-----------
... report a bug?
File an issue using ``M-x ein:dev-bug-report-template``.
First try ``emacs -Q -f package-initialize --eval "(setq debug-on-error t)"`` and reproduce the bug. The ``-Q`` skips any user configuration that might interfere with EIN.
Note EIN is tested only for *released* GNU Emacs versions
25.1
and later. Pre-release versions are unlikely to work.
... display images inline?
We find inserting images into emacs disruptive, and so default to spawning an external viewer. To override this,
::
M-x customize-group RET ein
Ein:Output Area Inlined Images
... configure the external image viewer?
::
M-x customize-group RET mailcap
Mailcap User Mime Data
... get IDE-like behavior?
The official python module for EIN is elpy_, installed separately. Other `program modes`_ for non-python kernels may be installed with varying degrees of EIN compatibility.
.. _spacemacs layer: https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Blang/ipython-notebook
.. _company-mode: https://github.com/company-mode/company-mode
.. _jupyterhub: https://github.com/jupyterhub/jupyterhub
.. _elpy: https://melpa.org/#/elpy
.. _program modes: https://www.gnu.org/software/emacs/manual/html_node/emacs/Program-Modes.html
.. _undo boundaries: https://www.gnu.org/software/emacs/manual/html_node/elisp/Undo.html
ob-ein
======
Configuration:
::
M-x customize-group RET org-babel
Org Babel Load Languages:
Insert (ein . t)
For example, '((emacs-lisp . t) (ein . t))
Snippet:
::
#BEGIN_SRC ein-python :session localhost :results raw drawer
import numpy, math, matplotlib.pyplot as plt
%matplotlib inline
x = numpy.linspace(0, 2*math.pi)
plt.plot(x, numpy.sin(x))
#+END_SRC
The ``:session`` is the notebook url, e.g., ``http://localhost:8888/my.ipynb``, or simply ``localhost``, in which case org evaluates anonymously. A port may also be specified, e.g., ``localhost:8889``.
*Language* can be ``ein-python``, ``ein-r``, or ``ein-julia``. **The relevant** `jupyter kernel`_ **must be installed before use**. Additional languages can be configured via::
M-x customize-group RET ein
Ob Ein Languages
.. _polymode: https://github.com/polymode/polymode
.. _ob-ipython: https://github.com/gregsexton/ob-ipython
.. _scimax: https://github.com/jkitchin/scimax
.. _jupyter kernel: https://github.com/jupyter/jupyter/wiki/Jupyter-kernels
Keymap (C-h m)
==============
::
key binding
--- -------
C-c Prefix Command
C-x Prefix Command
ESC Prefix Command
<C-down> ein:worksheet-goto-next-input-km
<C-up> ein:worksheet-goto-prev-input-km
<M-S-return> ein:worksheet-execute-cell-and-insert-below-km
<M-down> ein:worksheet-not-move-cell-down-km
<M-up> ein:worksheet-not-move-cell-up-km
C-x C-s ein:notebook-save-notebook-command-km
C-x C-w ein:notebook-rename-command-km
M-RET ein:worksheet-execute-cell-and-goto-next-km
M-, ein:pytools-jump-back-command
M-. ein:pytools-jump-to-source-command
C-c C-a ein:worksheet-insert-cell-above-km
C-c C-b ein:worksheet-insert-cell-below-km
C-c C-c ein:worksheet-execute-cell-km
C-u C-c C-c ein:worksheet-execute-all-cells
C-c C-e ein:worksheet-toggle-output-km
C-c C-f ein:file-open-km
C-c C-h ein:pytools-request-help-km
C-c C-k ein:worksheet-kill-cell-km
C-c C-l ein:worksheet-clear-output-km
C-c RET ein:worksheet-merge-cell-km
C-c C-n ein:worksheet-goto-next-input-km
C-c C-o ein:notebook-open-km
C-c C-p ein:worksheet-goto-prev-input-km
C-c C-q ein:notebook-kill-kernel-then-close-command-km
C-c C-r ein:notebook-reconnect-session-command-km
C-c C-s ein:worksheet-split-cell-at-point-km
C-c C-t ein:worksheet-toggle-cell-type-km
C-c C-u ein:worksheet-change-cell-type-km
C-c C-v ein:worksheet-set-output-visibility-all-km
C-c C-w ein:worksheet-copy-cell-km
C-c C-x Prefix Command
C-c C-y ein:worksheet-yank-cell-km
C-c C-z ein:notebook-kernel-interrupt-command-km
C-c ESC Prefix Command
C-c ! ein:worksheet-rename-sheet-km
C-c + ein:notebook-worksheet-insert-next-km
C-c - ein:notebook-worksheet-delete-km
C-c 1 ein:notebook-worksheet-open-1th-km
C-c 2 ein:notebook-worksheet-open-2th-km
C-c 3 ein:notebook-worksheet-open-3th-km
C-c 4 ein:notebook-worksheet-open-4th-km
C-c 5 ein:notebook-worksheet-open-5th-km
C-c 6 ein:notebook-worksheet-open-6th-km
C-c 7 ein:notebook-worksheet-open-7th-km
C-c 8 ein:notebook-worksheet-open-8th-km
C-c 9 ein:notebook-worksheet-open-last-km
C-c { ein:notebook-worksheet-open-prev-or-last-km
C-c } ein:notebook-worksheet-open-next-or-first-km
C-c C-S-l ein:worksheet-clear-all-output-km
C-c C-# ein:notebook-close-km
C-c C-$ ein:tb-show-km
C-c C-/ ein:notebook-scratchsheet-open-km
C-c C-; ein:shared-output-show-code-cell-at-point-km
C-c <down> ein:worksheet-move-cell-down-km
C-c <up> ein:worksheet-move-cell-up-km
C-c C-x C-r ein:notebook-restart-session-command-km
C-c M-+ ein:notebook-worksheet-insert-prev-km
C-c M-w ein:worksheet-copy-cell-km
C-c M-{ ein:notebook-worksheet-move-prev-km
C-c M-} ein:notebook-worksheet-move-next-km