python-emacs
This package provides an interface between Python and GNU Emacs. It allows you to easily pass data from Python to Emacs, execute Emacs Lisp code, and transfer the resulting data back to Python again. It also provides utilities for building Emacs Lisp expressions in Python.
Installation
Install using pip:
pip install python-emacs
Or directly from the repository:
git clone https://github.com/jlumpe/python-emacs
cd python-emacs
pip install .
Usage
Create an interface to Emacs using either EmacsBatch or EmacsClient. The first runs a new Emacs
process in batch mode with every command, the second uses emacsclient to communicate with a
running server. Both follow the same API.
>>> from emacs import EmacsBatch
>>> emacs = EmacsBatch(args=['-Q']) # Don't load user config with each invocation
Execute an Elisp expression and get the result:
>>> emacs.eval('(+ 1 2)')
3
>>> emacs.eval('(format "One plus two is %d" (+ 1 2))')
'One plus two is 3'
>>> src = '''
... (progn
... (require 'cl)
... (cl-loop
... for i in '(1 2 3 4 5)
... collect (* i i)))
... '''
>>> emacs.eval(src)
[1, 4, 9, 16, 25]
Evaluation errors are caught in Emacs and raised in Python:
>>> emacs.eval('(+ 1 "foo")')
ElispException: Wrong type argument: number-or-marker-p, "foo"
Write Elisp programs in Python
>>> import emacs.elisp as el
>>> src = el.to_elisp((el.Symbol('format'), 'One plus two is %d', (el.Symbol('+'), 1, 2)))
>>> src
<el (format "One plus two is %d" (+ 1 2))>
>>> emacs.eval(src)
'One plus two is 3'
Using a terrible DSL:
>>> from emacs.elisp import E
>>> prog = E.with_output_to_string(
E.dolist(
(E.i, E.number_sequence(1, 20)),
E.princ(E.i),
E.when(E['='](E['%'](E.i, 3), 0), E.princ("fizz")),
E.when(E['='](E['%'](E.i, 5), 0), E.princ("buzz")),
E.princ('\n')))
>>> prog
<el (with-output-to-string (dolist (i (number-sequence 1 20)) (princ i) (when (= (% i 3) 0) (princ "fizz")) (when (= (% i 5) 0) (princ "buzz")) (princ "\n")))>
>>> print(emacs.eval(prog))
1
2
3fizz
4
5buzz
6fizz
7
8
9fizz
10buzz
11
12fizz
13
14
15fizzbuzz
16
17
18fizz
19
20buzz
Metadata
Release files for python-emacs 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| python-emacs-0.2.1.tar.gz | 13.3 kB | Without provenance | Details for python-emacs-0.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| python_emacs-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for python_emacs-0.2.1-py3-none-any.whl |
Total release size: 25.8 kB
Release files / python-emacs-0.2.1.tar.gz
| Download URL | python-emacs-0.2.1.tar.gz |
|---|---|
| Size | 13.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
37f868e665fdfdb4fc37ca6c3463a742fa1486fe561d568db30257b1ef38bbef
|
|
BLAKE2b-256 checksum How to use checksums |
2583311d4de47d60b167d32edd3139899327afb585eae62a9a966d5e1b399f5c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.10
|
Release files / python_emacs-0.2.1-py3-none-any.whl
| Download URL | python_emacs-0.2.1-py3-none-any.whl |
|---|---|
| Size | 12.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0d60cd3b26e458f458ffde9d2e1bbe6d17b7a1002416f4cdab7946bad5fb7580
|
|
BLAKE2b-256 checksum How to use checksums |
50671e1d928a0185f2430287146002abd821b96ae0f81d9324151f29e30d98d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.10
|
Security for python-emacs 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.