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

标签 python emacs read-eval-print-loop swank

我喜欢 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为这样的东西提供大部分基础设施。有很多很好的例子,比如 thisthis

它允许您运行命令,提供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/

相关文章:

python - 不覆盖处理程序的路由层次结构

emacs - 如何检查是否连接到远程服务器?

Clojure - 评估高阶函数的返回函数

Gradle 中的 Scala REPL

python - Pandas:如果特定列的总计数仅出现 1 次,则删除 DataFrame 的行

python - 识别最近的网格点

python - Python 中的静态类型检查 : Conflicting alternatives?

emacs - Emacs : Relationship between etags, ebrowse、cscope、GNU Global 和 exuberant ctags 的标签

emacs - 如何控制 Emacs 制作备份文件的方式?

针对内部 DSL 的 Scala REPL 个性化