【问题标题】:Writing Emacs extensions in languages other than Lisp用 Lisp 以外的语言编写 Emacs 扩展
【发布时间】:2010-09-06 02:57:42
【问题描述】:

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

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

【问题讨论】:

标签: emacs lisp ocaml


【解决方案1】:

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

编辑:更新链接。

【讨论】:

  • 死链接,没用
【解决方案2】:

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

一个库,emacs-ffi 提供了一个基于libffi 的外部函数接口。

查看README 上的完整文档。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      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

      祝你好运!

      【讨论】:

        【解决方案5】:

        没有“扩展 API”。 Emacs Lisp 就在其中,但它并没有移动。

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

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

        【讨论】:

          【解决方案6】:

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-06-14
            • 1970-01-01
            • 1970-01-01
            • 2019-01-25
            • 2021-08-08
            • 2011-05-27
            • 1970-01-01
            相关资源
            最近更新 更多