我喜欢 python-send-buffer
命令,但是我经常使用嵌入在应用程序中的 Python,或者通过自定义包管理系统启动 Python(以启动具有某些依赖项的 Python)。在换句话说,我不能只运行“python”并获得一个有用的 Python 实例(python-send-buffer
所依赖的东西)
我想实现的是:
- 在任何 Python 解释器(或允许您评估 Python 代码的应用程序)中,导入
magic_emacs_python_server.py
模块(必要时附加到sys.path
)< - 在 emacs 中,运行
magic-emacs-python-send-buffer
这将评估远程 Python 实例中的缓冲区。
看起来应该很简单——Python 模块在一个线程中监听一个套接字。它在主线程中进行评估,并返回结果的 repr()
(或者可能捕获 stdout/stderr,或者两者)。 emacs 模块只会将文本发送到套接字,等待响应字符串,并将其显示在缓冲区中。
听起来很简单,像这样的东西一定已经存在了……IPython 有 ipy_vimserver
,但这是错误的方法。还有 swank
,虽然它看起来非常特定于 Lisp,但有 a Javascript backend这看起来很像我想要的...但是搜索几乎找不到任何东西,除了一些模糊的(可能是真的)声称 SLIME 不能很好地与非 Lisp 语言一起工作
简而言之:
- 是否存在将代码从 emacs 缓冲区发送到现有 Python 进程的项目?
- 如果不是,你会如何推荐我写这样的东西(对 elisp 不是很熟悉)- SWANK? IPython 的服务器代码?从零开始的简单 TCP 服务器?
最佳答案
comint为这样的东西提供大部分基础设施。有很多很好的例子,比如 this或 this
它允许您运行命令,提供comint-send-string
来轻松实现send-region
类型的命令。
dbr/remoterepl on Github是我在问题中描述的内容的粗略概念验证。
它缺乏任何润色,但它大部分工作 - 您在目标解释器中导入 replify.py
模块,然后评估 emacs-remote-repl.el
在将愚蠢的硬编码路径修复到 client.py
关于python - 将 emacs 缓冲区发送到任意 Python 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4816628/