No description
Find a file
2020-02-23 18:57:55 -06:00
.github/workflows avoid reloading notebooklist three times on "Stop" 2020-02-01 21:07:42 -05:00
doc Add commands to execute all cells above/below current one 2020-02-04 21:18:58 -05:00
features Restore ein-connect.el 2020-02-23 10:02:16 -06:00
lisp Restore ein-connect.el 2020-02-23 10:02:16 -06:00
test syntax-propertize-chunks takes us too far afield 2020-02-08 13:49:35 -05:00
tools remove install-evm.sh 2020-02-10 08:58:21 -05:00
.appveyor.yml modify readme 2020-02-05 10:21:27 -05:00
.gitignore purge 2019-11-08 16:05:11 -05:00
Cask modify readme 2020-02-05 10:21:27 -05:00
Makefile test undo in combination with worksheet-execute-all-cells 2020-02-08 19:04:18 -05:00
README.in.rst Wrap comint-carriage-motion in disabling of buffer-undo-list 2020-02-22 11:26:29 -05:00
README.rst Wrap comint-carriage-motion in disabling of buffer-undo-list 2020-02-22 11:26:29 -05:00

========================================================================
 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-initialize 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.

... undo?
   Cell-level actions like ``C-c C-b`` cannot be undone.
   Undo's whilst a cell continues receiving output will actually *redo* the last action.  This is due to "`undo boundaries`_" being inserted by the receiving cell, a known EIN bug.
   Undo's will not work under ``undo-tree-mode``, a default mode for Doom and Spacemacs, and other packages employing ``evil-mode``.

.. _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