Merge pull request #417 from dickmao/readme

RFC: readme revision
This commit is contained in:
John Miller 2018-12-03 09:54:58 -06:00 committed by GitHub
commit eaf7c9ccf5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 310 additions and 342 deletions

View file

@ -13,6 +13,21 @@ endif
.DEFAULT_GOAL := test-compile
README.rst: README.in.rst
cask eval "(progn \
(add-to-list 'load-path \"./lisp\") \
(load \"ein-notebook\") \
(describe-minor-mode \"ein:notebook-mode\") \
(with-current-buffer \"*Help*\" (princ (buffer-string))))" 2>/dev/null \
| tools/readme-sed.sh "KEYS NOTEBOOK" README.in.rst > README.rst0
cask eval "(progn \
(add-to-list 'load-path \"./lisp\") \
(load \"ein-connect\") \
(describe-minor-mode \"ein:connect-mode\") \
(with-current-buffer \"*Help*\" (princ (buffer-string))))" 2>/dev/null \
| tools/readme-sed.sh "KEYS CONNECT" README.rst0 > README.rst
rm README.rst0
.PHONY: autoloads
autoloads:
emacs -Q --batch --eval "(package-initialize)" --eval "(package-generate-autoloads \"ein\" \"./lisp\")"

123
README.in.rst Normal file
View file

@ -0,0 +1,123 @@
========================================================================
EIN -- Emacs IPython Notebook |build-status| |melpa-dev| |melpa-stable|
========================================================================
--- or **E**\ IN **I**\ s not only for **N**\ otebooks.
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.
.. |build-status|
image:: https://secure.travis-ci.org/millejoh/emacs-ipython-notebook.png?branch=master
:target: http://travis-ci.org/millejoh/emacs-ipython-notebook
: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
.. _tkf: https://tkf.github.io/emacs-ipython-notebook
.. _`complete documentation`: http://millejoh.github.io/emacs-ipython-notebook
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 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``.
.. _Cask: https://cask.readthedocs.io/en/latest/guide/installation.html
.. _MELPA: http://melpa.org/#/
__ `complete documentation`_
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_.
.. _integrates: http://millejoh.github.io/emacs-ipython-notebook/#org-mode-integration
.. _ob-ipython: https://github.com/gregsexton/ob-ipython/
Screenshots
===========
.. figure:: https://github.com/millejoh/emacs-ipython-notebook/wiki/images/demo_plotnormal.PNG
:alt: Plotting in Emacs IPython Notebook
.. figure:: https://github.com/millejoh/emacs-ipython-notebook/wiki/images/R-kernel-example.PNG
:alt: EIN connecting to an R kernel
See `more <https://github.com/millejoh/emacs-ipython-notebook/wiki/Screenshots>`_!
Keybindings - Notebook
----------------------
::
.. KEYS NOTEBOOK (see Makefile)
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.
::
.. KEYS CONNECT (see Makefile)
Links
=====
* `Online Documentation
<http://millejoh.github.io/emacs-ipython-notebook/>`_
* `Wiki
<https://github.com/millejoh/emacs-ipython-notebook/wiki>`_
+ `Screenshots
<https://github.com/millejoh/emacs-ipython-notebook/wiki/Screenshots>`_
+ `Tips
<https://github.com/millejoh/emacs-ipython-notebook/wiki/Tips>`_
License
=======
Emacs IPython Notebook is licensed under GPL v3.
See COPYING for details.

View file

@ -4,18 +4,9 @@
--- or **E**\ IN **I**\ s not only for **N**\ otebooks.
EIN works with IPython 2.x_, 3.x_, and Jupyter_! Note that remote and password
protected logins are working with IPython 3.x, but have not been tested with
Jupyter.
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.
.. note:: The code has been stable enough for my day to day work, but there are
no guarantees for the safety for your notebook data. Please make sure
that you back-up and back-up often!
.. note:: Thanks to some truly impressive work by @dickmao, ein testing is
working once again using the excellent ert and ecukes tools. We hope
this will make contributing tests much easier, so please feel free to
jump in and contribute!
EIN was originally written by tkf_. More `complete documentation`_ is available.
.. |build-status|
image:: https://secure.travis-ci.org/millejoh/emacs-ipython-notebook.png?branch=master
@ -29,10 +20,48 @@ Jupyter.
image:: http://melpa-stable.milkbox.net/packages/ein-badge.svg
:target: http://melpa-stable.milkbox.net/#/ein
:alt: MELPA stable version
.. _2.x: http://ipython.org/ipython-doc/2/index.html
.. _3.x: http://ipython.org/ipython-doc/3/index.html
.. _Jupyter: http://jupyter.org
.. _tkf: https://tkf.github.io/emacs-ipython-notebook
.. _`complete documentation`: http://millejoh.github.io/emacs-ipython-notebook
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 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``.
.. _Cask: https://cask.readthedocs.io/en/latest/guide/installation.html
.. _MELPA: http://melpa.org/#/
__ `complete documentation`_
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
====================
@ -54,44 +83,129 @@ Screenshots
See `more <https://github.com/millejoh/emacs-ipython-notebook/wiki/Screenshots>`_!
Features
========
Keybindings - Notebook
----------------------
The Emacs IPython Notebook (EIN) provides a client for IPython v2.x and 3.x and
Jupyter notebooks via an integrated REPL (like SLIME_) in Emacs. EIN makes
notebook editing very powerful by allowing you to use Emacs features; it also
expose IPython features such as code evaluation, object inspection and code
completion to the Emacs side. These features can be accessed anywhere in Emacs
and improve Python code editing and reading in Emacs.
::
.. _SLIME: http://common-lisp.net/project/slime/
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
Highlighted features:
Keybindings - Connect
---------------------
* 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).
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.
Other notebook features:
::
* Inline images
* Auto/manual-completion
* Popup (tooltip) help
* Syntax highlighting in each cell type (Python/Markdown)
* Help browser (opens when executing ``function?``)
* Traceback viewer
* Integration with org-mode
* Support for debugging via %debug
* Multiple python kernels
* EXPERIMENTAL: Non-python kernels! R runs in EIN, see the screenshot above!
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:
Links
=====
* `Online Documentation
<http://millejoh.github.io/emacs-ipython-notebook/>`_
@ -104,264 +218,6 @@ Links:
+ `Tips
<https://github.com/millejoh/emacs-ipython-notebook/wiki/Tips>`_
* `Downloads
<https://github.com/millejoh/emacs-ipython-notebook/tags>`_
* `Repository at GitHub
<https://github.com/millejoh/emacs-ipython-notebook>`_
* `Issue Tracker at GitHub
<https://github.com/millejoh/emacs-ipython-notebook/issues>`_
Quick try
=========
Install from MELPA_! Seriously, installing from MELPA is the easiest way to
ensure all of ein's dependencies are correctly installed. `zeroein.el` is from a
bygone era and does not quite work the way it used to. If you are determined,
and slightly masochistic, you can attempt the following::
git clone git://github.com/millejoh/emacs-ipython-notebook.git
cd emacs-ipython-notebook/
lisp/zeroein.el
This will launch a new Emacs instance.
You can use environment variable ``EMACS`` to control Emacs executable
to use.::
EMACS=emacs-snapshot lisp/zeroein.el
The above command requires /bin/sh. If the above command does not work
(e.g., you are using MS Windows), try the following command::
emacs -Q -l lisp/zeroein.el
Requirements
============
* EMACS 24.5, 25.2, or 26
* IPython_ 2.0 or higher.
* Tornado_ 4.0.2 or higher.
* `websocket.el`_ >= 1.7
* `request.el`_ >= 0.3
* `request-deferred.el`_ >= 0.2
* `dash`_ >= 2.13
* `s`_ >= 1.11
* `f`_
* `auto-complete.el`_ >= 1.4:
You need to configure subpackage ``ein-ac`` to enable
this feature.
* `skewer-mode`_ >= 1.6.2:
Skewer mode gives EIN the ability to execute dynamic javascript in the
note book.
* (optional) Jupyterhub_ 0.8 or higher:
EIN supports logging in to Jupyterhub servers using PAM authentication,
though this only works with v0.8, which currently is the development version
of Jupyterhub.
* (optional) markdown-mode
* (optional) python-mode:
It should work with either python.el or python-mode.el. `python.el`_ is
required to use ``ein:console-open`` command.
* (optional) `smartrep.el`_:
This package enables you to omit typing prefix keys (e.g.,
``C-c C-n C-n C-n ...`` instead of ``C-c C-n C-c C-n C-c C-n ...``).
You need to configure subpackage ``ein-smartrep`` to enable
this feature.
* (optional) `jedi.el`_:
Python auto-completion for emacs using `jedi`_. In your
emacs initialization file add
``(setq ein:completion-backend 'ein:use-ac-jedi-backend)``
Also, EIN heavily relies on standard Emacs libraries including EWOC,
EIEIO and json.el.
.. _IPython: http://ipython.org/
.. _Tornado: http://www.tornadoweb.org/en/stable/
.. _websocket.el: https://github.com/ahyatt/emacs-websocket
.. _request.el: https://github.com/tkf/emacs-request
.. _request-deferred.el: https://github.com/tkf/emacs-request/blob/master/request-deferred.el
.. _dash: https://github.com/magnars/dash.el
.. _skewer-mode: https://github.com/skeeto/skewer-mode
.. _nXhtml: http://ourcomments.org/Emacs/nXhtml/doc/nxhtml.html
.. _python.el: https://github.com/fgallina/python.el
.. _auto-complete.el: http://cx4a.org/software/auto-complete/
.. _smartrep.el: https://github.com/myuhe/smartrep.el
.. _jedi.el: https://github.com/tkf/emacs-jedi
.. _jedi: https://github.com/davidhalter/jedi
.. _s: https://github.com/magnars/s.el
.. _f: https://github.com/rejeep/f.el
Usage
=====
1. Install from MELPA_.
For manual install, put Emacs lisp ``ein*.el`` files and Python file
``ein.py`` in your load path. See `online documentation`_ for more
information.
2. Configure the variables ``ein:jupyter-default-server-command`` and
``ein:jupyter-default-notebook-directory``, then call
``ein:jupyter-server-start``. This should start the jupyter notebook server,
log in, then automatically open the notebook list.
-OR-
2. Start the `Jupyter notebook server`_.
3. (Optional) Newer versions of Jupyter have token authentication_ enabled by
default so you will need to call ``M-x ein:notebooklist-login`` and enter the
token as the password.
4. Execute ``M-x ein:notebooklist-open`` to open notebook list.
.. _`Jupyter notebook server`:
https://jupyter.readthedocs.io/en/latest/content-quickstart.html
.. _MELPA: http://melpa.org/#/
.. _authentication: https://blog.jupyter.org/security-release-jupyter-notebook-4-3-1-808e1f3bb5e2
Subpackages
-----------
Enable `auto-complete.el`_::
(setq ein:use-auto-complete t)
;; Or, to enable "superpack" (a little bit hacky improvements):
;; (setq ein:use-auto-complete-superpack t)
Enable `smartrep.el`_::
(setq ein:use-smartrep t)
Keybindings - Notebook
----------------------
.. (ein:dev-insert-mode-map "\\{ein:notebook-mode-map}")
::
key binding
--- -------
C-c Prefix Command
C-x Prefix Command
ESC Prefix Command
. ein:notebook-complete-dot
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-e ein:worksheet-toggle-output
C-c C-f 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-f ein:file-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-restart-kernel-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 ein:tb-show
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: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 { 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: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 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
.. // KEYS END //
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.
.. (ein:dev-insert-mode-map "\\{ein:connect-mode-map}")
::
key binding
--- -------
C-c Prefix Command
ESC Prefix Command
. ein:completer-dot-complete
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-f 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
.. // KEYS END //
License
=======

View file

@ -1,40 +0,0 @@
"""
Emacs Lisp Display object/Formatter for IPython.
Usage::
In [1]:
%run path/to/emacslisp.py
In [2]:
EmacsLisp('(+ 1 2 3)')
Out [2]:
6
"""
from IPython.core.formatters import BaseFormatter, Unicode, ObjectName
from IPython.core.display import DisplayObject
def add_display_formatter(new_formatter):
from IPython.core.formatters import FormatterABC
FormatterABC.register(new_formatter)
from IPython.core.interactiveshell import InteractiveShell
inst = InteractiveShell.instance()
f = new_formatter(config=inst.display_formatter.config)
inst.display_formatter.formatters[f.format_type] = f
class EmacsLispFormatter(BaseFormatter):
format_type = Unicode('application/emacs-lisp')
print_method = ObjectName('_repr_emacs_lisp_')
class EmacsLisp(DisplayObject):
def _repr_emacs_lisp_(self):
return self.data
if __name__ == '__main__':
add_display_formatter(EmacsLispFormatter)

14
tools/readme-sed.sh Executable file
View file

@ -0,0 +1,14 @@
#!/bin/bash
# by mklement0 https://stackoverflow.com/a/29613573/5132008
# Define sample multi-line literal.
input=`cat`
replace=$(awk '/key.*binding/,EOF { print " " $0 }' <<<"$input")
# Escape it for use as a Sed replacement string.
IFS= read -d '' -r < <(sed -e ':a' -e '$!{N;ba' -e '}' -e 's/[&/\]/\\&/g; s/\n/\\&/g' <<<"$replace")
replaceEscaped=${REPLY%$'\n'}
# If ok, outputs $replace as is.
sed "/$1/c\\$replaceEscaped" $2