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

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

Writing Emacs extensions in languages other than Lisp

我想使用一个现有的应用程序(用OCaml编写)并为其创建一个Emacs"接口"(例如,Emacs GDB模式)。 我宁愿不编写大量Lisp代码来执行此操作。 用MVC术语来说,我希望View成为Emacs,但希望Model和Controller保留(主要是)OCaml。

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


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。

祝好运!


我不知道这是否可以解决您的特定问题,但是我一直在使用shell-command-to-string函数执行类似的操作:

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

因此,举例来说,我们已有用python编写的脚本,它将破坏文件,因此上述内容使我可以通过emacs lisp调用脚本。

快速的Google搜索发现此页面描述了一个用Python编写扩展的系统,因此似乎可以按照自己的意愿进行操作...您只需要查看是否有人为OCaml编写了类似的框架即可。


现在,传入的emacs 25.1和动态模块可以使用一些Extension Api

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

请查看自述文件中的完整文档。


尝试使用PyMacs,它可以在Python中扩展Emacs。

编辑:更新的链接。


从静态类型语言的角度来看,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


没有"扩展API"。 Emacs Lisp就在那儿,它没有动。

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

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


推荐阅读