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 服务器?
4

2 回答 2

2

comint为这样的东西提供了大部分基础设施。有很多很好的例子,像这样这样

它允许您运行命令,提供comint-send-string轻松实现send-region类型命令的东西。

Github 上的 dbr/remoterepl是我在问题中描述的粗略概念证明。

它缺乏任何类型的修饰,但它主要工作 - 你在目标解释器中导入模块,然后在修复愚蠢的硬编码路径后replify.py评估emacs-remote-repl.elclient.py

于 2012-04-03T15:52:26.530 回答
1

没有shell-command给你你正在寻找的东西?您可以编写一个包装脚本或适当地调整#!and sys.path

于 2011-01-27T16:52:08.460 回答