2008-08-18 71 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的完整文檔。