用Lisp以外的语言编写Emacs扩展

时间:2008-08-18 20:31:16

标签: emacs lisp ocaml

我想要一个现有的应用程序(用OCaml编写)并为它创建一个Emacs“接口”(比如,例如,Emacs GDB模式)。我更愿意这样做而不需要编写大量的Lisp代码。在MVC术语中,我希望View是Emacs,但模型和控制器仍然(主要)保留OCaml。

有人知道用Lisp以外的语言编写Emacs扩展的方法吗?这可以采用以某种其他语言绑定到Emacs扩展API的形式(例如,使OCaml成为一流的Emacs扩展语言)或Emacs交互模式,例如,扩展具有可以写入的管道Emacs Lisp表达式并读出结果值。

6 个答案:

答案 0 :(得分:13)

http://www.emacswiki.org/cgi-bin/emacs-en?CategoryExtensionLanguage是您可以使用的所有非Elisp扩展语言的列表。

它看起来似乎是以动态语言为中心。

该列表中缺少

http://common-lisp.net/project/slime/,因为它不是一种扩展语言,而是一个Elisp-Common Lisp桥。它的源代码将显示如何在套接字上来回通信。

Erlang的类似IDE是Distel,位于http://fresh.homeunix.net/~luke/distel/(当前已关闭)和https://github.com/massemanet/distel

祝你好运!

答案 1 :(得分:4)

我不知道这是否适合您的特定问题,但我使用shell-command-to-string函数做了类似的事情:

(shell-command-to-string
    "bash -c \"script-to-exec args\"")

因此,例如,我们有用python编写的现有脚本会破坏文件,所以上面让我通过emacs lisp调用脚本。

快速谷歌搜索found this page描述了一个用Python编写扩展的系统,所以做你想做的事似乎是可行的......你只需看看是否有人为OCaml编写了类似的框架。 / p>

答案 2 :(得分:3)

尝试PyMacs,它允许在Python中扩展Emacs。

编辑:更新后的链接。

答案 3 :(得分:3)

现在可以使用传入的emacs 25.1和动态模块

进行一些扩展Api

图书馆,emacs-ffi提供基于libffi的外国函数界面。

查看README上的完整文档。

答案 4 :(得分:2)

从静态类型语言方面来看,有些东西看起来非常高效且适用于Haskell:

https://github.com/knupfer/haskell-emacs

对于Scala来说,从Ensime项目中重用它可能是有用的(有一个Emacs和Vim的桥梁):

https://github.com/ensime/ensime-server

此外,快速的谷歌搜索揭示了另一个潜在的候选人,用经典的FP语言OCaml扩展Emacs;该项目有很多.ml个源文件,所以必须在某个地方建立一个Emacs-OCaml网桥:

https://github.com/the-lambda-church/merlin

答案 5 :(得分:0)

没有“扩展API”。 Emacs Lisp就在那里,而且它没有移动。

您可以从其他进程运行Emacs命令。看看Gnuserv。

有很多应用程序,其中Emacs是单独进程中的模型/控制器视图。 Emacs GDB界面就是一个很好的例子。我不确定一个更简单的例子,也许是sql-postgresql?