2008-08-18 85 views
26

我想用现有的应用程序(用OCaml编写)为它创建一个Emacs“界面”(例如Emacs GDB模式)。我宁愿在不写大量Lisp代码的情况下这样做。在MVC术语中,我希望View是Emacs,但是模型和控制器仍然(主要)是OCaml。用Lisp以外的语言编写Emacs扩展

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

+0

我建议你看看merlin如何做,如Erik Allik所建议的,例如, https://github.com/the-lambda-church/merlin/blob/master/emacs/merlin.el#L430开始一个过程,并https://github.com/the-lambda-church/merlin/blob/ master/emacs/merlin.el#L631使用异步处理程序向ocaml merlin进程发送命令。 – unhammer 2015-02-23 11:33:12

回答

4

我不知道这是否会为您的特定问题的工作,但我一直在使用shell命令对字符串函数做类似的事情:

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

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

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

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/(当前为down)和https://github.com/massemanet/distel

祝你好运!

0

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

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

有很多应用程序,其中Emacs是在单独的过程中查看模型/控制器。 Emacs GDB接口就是一个很好的例子。我不确定一个简单的例子,也许sql-postgresql?

3

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

编辑:已更新的链接。

+0

死链接,这是没有用的 – Anthon 2016-10-10 15:18:05

2

从静态类型语言方面,有一些看起来相当高性能和良好功能的哈斯克尔:

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

也有可能是斯卡拉有用要从Ensime项目重复使用的东西(有两个Emacs和Vim)的桥梁:

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

此外,快速谷歌搜索揭示了另一个潜在候选延长è具有经典FP语言的Mac,OCaml;该项目有很多.ml源文件,所以一定是一个Emacs-OCaml的桥某处:

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

2

一些扩展API现在可以与输入的Emacs 25.1和动态模块

库,emacs-ffi提供基于libffi的外部功能接口。

查看关于README的完整文档。