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

时间:2020-03-05 18:40:30  来源:igfitidea点击:

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

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

解决方案

回答

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

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

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

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

回答

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。

祝你好运!

回答

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

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

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

回答

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

编辑:更新的链接。