将Emacs缓冲区发送到任意Python流程
-
25-10-2019 - |
题
我喜欢 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,但 JavaScript后端 看起来很像我想要的...但是搜索几乎找不到,除了某些模糊(可能是正确的)声称粘液与非LISP语言无法正常工作
简而言之:
- 是否存在将代码从EMACS缓冲区发送到现有Python流程的项目?
- 如果没有,您将如何推荐我写这样的东西(不太熟悉ELISP) - 士气? ipython的服务器代码?简单的TCP服务器从头开始?
解决方案
comint 为这样的东西提供大多数基础架构。有很多好的例子,例如 这个 或者 这个
它允许您运行命令,提供东西 comint-send-string
轻松实施 send-region
类型命令。
dbr/remoterepl在github上 是我在问题中描述的原始概念概念。
它缺乏任何一种抛光 replify.py
目标解释器中的模块,然后评估 emacs-remote-repl.el
修复了愚蠢的硬编码路径后 client.py
其他提示
不 shell-command
给你想要的东西?您可以编写包装脚本或调整 #!
和 sys.path
适当。
不隶属于 StackOverflow