2008-08-18 14 views
26

Ich möchte eine vorhandene Anwendung (in OCaml geschrieben) erstellen und eine Emacs-Schnittstelle dafür erstellen (wie zum Beispiel den Emacs GDB-Modus). Ich würde es vorziehen, dies zu tun, ohne eine Tonne Lisp-Code zu schreiben. In Bezug auf MVC möchte ich, dass die Ansicht Emacs ist, aber dass das Modell und der Controller (hauptsächlich) OCaml bleiben.Schreiben von Emacs-Erweiterungen in anderen Sprachen als Lisp

Kennt jemand eine Möglichkeit, Emacs-Erweiterungen in einer anderen Sprache als Lisp zu schreiben? Dies könnte entweder die Form von Bindungen an die Emacs-Erweiterungs-API in einer anderen Sprache annehmen (z. B. OCaml zu einer erstklassigen Emacs-Erweiterungssprache machen) oder einen Emacs-Interaktionsmodus, in dem die Erweiterung beispielsweise über eine Pipe verfügt, in die sie schreiben kann Emacs Lisp Ausdrücke und Ergebniswerte auslesen.

+0

Ich empfehle Ihnen einen Blick auf, wie Merlin es tut, wie von Erik Allik vorgeschlagen, z. https://github.com/the-lambda-church/merlin/blob/master/emacs/merlin.el#L430 startet einen Prozess und https://github.com/the-lambda-church/merlin/blob/ master/emacs/merlin.el # L631 sendet einen Befehl an den ocaml merlin-Prozess mit einem asynchronen Handler. – unhammer

Antwort

4

Ich weiß nicht, ob dies für Ihr spezielles Problem arbeiten, aber ich habe etwas ähnliches mit der Shell-Befehl-to-String-Funktion getan:

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

So zum Beispiel haben wir bestehende Skripte, die in Python geschrieben sind und die eine Datei beschädigen, so dass ich das Skript über emacs lisp aufrufen kann.

Eine schnelle Google-Suche found this page beschreibt ein System zum Schreiben von Erweiterungen in Python, so scheint es machbar zu tun, was Sie wollen ... Sie müssen nur sehen, ob jemand ein ähnliches Framework für OCaml geschrieben hat.

13

http://www.emacswiki.org/cgi-bin/emacs-en?CategoryExtensionLanguage ist eine Liste aller Nicht-Elisp-Sprachen, die Sie verwenden können.

Es scheint dynamische Sprache zentrisch zu sein.

http://common-lisp.net/project/slime/ fehlt in dieser Liste, da es nicht eine Erweiterungssprache, sondern eine Elisp-Common-Lisp-Brücke ist. Sein Quellcode würde zeigen, wie man über Sockets hin und her kommuniziert.

Eine ähnliche IDE für Erlang ist Distel, um http://fresh.homeunix.net/~luke/distel/ (derzeit down) und https://github.com/massemanet/distel.

Viel Glück!

0

Es gibt keine "Erweiterung API". Emacs Lisp ist da drin, und es bewegt sich nicht.

Sie können Emacs-Befehle von Ihrem anderen Prozess ausführen. Schau dir Gnuserv an.

Es gibt viele Anwendungen, in denen Emacs die Ansicht für ein Modell/Controller in einem separaten Prozess ist. Die Emacs GDB-Schnittstelle ist ein gutes Beispiel. Ich bin mir nicht sicher, ein einfacheres Beispiel, vielleicht sql-postgresql?

3

Versuchen Sie PyMacs, die Erweiterung von Emacs in Python ermöglicht.

bearbeiten: Link aktualisiert.

+0

Toter Link, das ist nicht hilfreich – Anthon

2

Von der statisch typisierten Sprachen Seite, ist es etwas, das recht performant und gut gekennzeichneter für Haskell aussieht:

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

es auch wahrscheinlich aus dem Ensime Projekt wiederverwendet etwas Nützliches für Scala werden (hat eine Brücke für beiden Emacs und Vim):

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

Weiterhin ist eine schnelle google-Suche ergab, einen weiteren potentiellen Kandidaten für E erstreckt macs mit einer klassischen FP-Sprache, OCaml; Das Projekt hat eine Menge .ml Quelldateien, so gibt es muss irgendwo ein Emacs-OCaml Brücke sein:

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

2

Einige Erweiterung Api ist nun möglich, mit den eingehenden Emacs 25.1 und dynamische Module

A-Bibliothek emacs-ffi bieten eine Fremdfunktionsschnittstelle basierend auf libffi.

Überprüfen Sie die vollständige Dokumentation auf der README.