28

我想使用一个现有的应用程序(用 OCaml 编写)并为它创建一个 Emacs“接口”(例如,Emacs GDB 模式)。我宁愿在不编写大量 Lisp 代码的情况下做到这一点。在 MVC 术语中,我希望视图是 Emacs,但模型和控制器保持(主要)OCaml。

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

4

6 回答 6

14

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

祝你好运!

于 2008-08-25T01:48:56.870 回答
4

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

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

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

一个快速的谷歌搜索发现这个页面描述了一个用 Python 编写扩展的系统,所以做你想做的似乎是可行的......你只需要看看是否有人为 OCaml 编写了类似的框架。

于 2008-08-18T21:34:59.747 回答
3

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

编辑:更新链接。

于 2008-09-16T21:34:51.577 回答
3

现在可以使用传入的 emacs 25.1 和动态模块进行一些扩展 Api

一个库,emacs-ffi提供一个基于libffi.

查看README上的完整文档。

于 2016-01-22T17:16:24.553 回答
2

从静态类型语言的角度来看,Haskell 有一些看起来非常高效且功能强大的东西:

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

从 Ensime 项目中重用 Scala 可能还有一些有用的东西(为 Emacs 和 Vim 提供了桥梁):

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

此外,快速的谷歌搜索发现了另一个使用经典 FP 语言 OCaml 扩展 Emacs 的潜在候选者;该项目有很多.ml源文件,所以某处必须有一个 Emacs-OCaml 桥:

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

于 2015-02-21T07:52:38.667 回答
0

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

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

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

于 2008-09-16T06:47:33.550 回答