813gan ef292203aa Add traceback to exception message and more data to failed export message | 1 ماه پیش | |
---|---|---|
.github | 2 ماه پیش | |
tests | 1 ماه پیش | |
.clang-format | 2 ماه پیش | |
.dir-locals.el | 2 ماه پیش | |
.git-blame-ignore-revs | 2 ماه پیش | |
.gitignore | 2 ماه پیش | |
Cask | 2 ماه پیش | |
LICENSE.txt | 2 سال پیش | |
Makefile | 1 ماه پیش | |
README.md | 1 سال پیش | |
console.py | 5 سال پیش | |
emacs-module.h | 5 سال پیش | |
emacspy.el | 1 ماه پیش | |
emacspy.pyx | 1 ماه پیش | |
emacspy_threads.py | 2 سال پیش | |
requirements.txt | 2 ماه پیش | |
stub.c | 1 ماه پیش | |
subinterpreter.c | 1 ماه پیش | |
thread_local.c | 4 سال پیش |
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()