813gan ef292203aa Add traceback to exception message and more data to failed export message | hace 1 mes | |
---|---|---|
.github | hace 2 meses | |
tests | hace 1 mes | |
.clang-format | hace 2 meses | |
.dir-locals.el | hace 2 meses | |
.git-blame-ignore-revs | hace 2 meses | |
.gitignore | hace 2 meses | |
Cask | hace 2 meses | |
LICENSE.txt | hace 2 años | |
Makefile | hace 1 mes | |
README.md | hace 1 año | |
console.py | hace 5 años | |
emacs-module.h | hace 5 años | |
emacspy.el | hace 1 mes | |
emacspy.pyx | hace 1 mes | |
emacspy_threads.py | hace 2 años | |
requirements.txt | hace 2 meses | |
stub.c | hace 1 mes | |
subinterpreter.c | hace 1 mes | |
thread_local.c | hace 4 años |
emacspy enables you to program Emacs in Python instead of ELisp. It works by using dynamic modules support introduced in Emacs 25.
Install Cython (pip install cython
) and run make
. emacspy.so
will appear in the current directory. Make sure your Emacs build has loadable modules support enabled (default builds on some distributions don't!):
emacs --help | grep -q module-assertions && echo OK || echo "No loadable modules support"
You can load the module using normal load
directive:
(add-to-list 'load-path "~/emacspy")
(load "~/emacspy/emacspy")
The module will expose two ELisp functions eval-python
and exec-python
.
(eval-python "4+4")
You can use exec-python
to load you Python files:
(exec-python "import sys; sys.path.append('/home/user/my-files')")
(exec-python "import mymodule")
Emacspy also exposes Python API for interacting with Emacs. To use it import emacspy
module.
import emacspy
# use emacspy.v to access Emacs variables
emacspy.v.tab_width
# use emacspy.f to call Emacs functions
emacspy.f.message("hello")
# returned values are wrapped in EmacsValue
emacspy.f["+"](1, 2) # => <EmacsValue ...>
# use functions to convert to Python values
emacspy.f["+"](1, 2).int()
emacspy.v.page_delimiter.str()