将emacs缓冲区发送到任意Python进程

4
我喜欢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后端看起来很像我想要的...... 不过搜索结果几乎没有什么,除了一些模糊的(可能是真实的)声明,SLIME在非Lisp语言中不起作用。
简而言之:
  • 是否存在一个项目将emacs缓冲区中的代码发送到现有的Python进程?
  • 如果不存在,您会建议我如何编写这样的东西(不太熟悉elisp)——SWANK? IPython的服务器代码?从头开始编写简单的TCP服务器?
2个回答

2

comint提供了大部分与此类相关的基础设施,有一堆好例子,比如这个或者这个

它允许你运行一个命令,并提供一些东西comint-send-string来方便地实现send-region类型的命令。

Github上的dbr/remoterepl是我在问题中描述的一个粗糙的概念验证。

它缺乏任何形式的优化,但它大部分位置都已经工作了-你需要在目标解释器中导入replify.py模块,然后修复傻瓜式的硬编码路径到client.py之后评估emacs-remote-repl.el


1

shell-command不能满足您的需求吗?您可以编写一个包装脚本或适当调整#!sys.path


所以使用 shell-command 将缓冲区内容传递到脚本中?这听起来是个不错的起点,谢谢! - dbr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接