Написание расширений Emacs на языках, отличных от Lisp - PullRequest
25 голосов
/ 19 августа 2008

Я бы хотел взять существующее приложение (написанное на OCaml) и создать для него «интерфейс» Emacs (как, например, режим Emacs GDB). Я бы предпочел сделать это без написания тонны кода на Лиспе. В терминах MVC я бы хотел, чтобы View был Emacs, но чтобы модель и контроллер оставались (в основном) OCaml.

Кто-нибудь знает способ написания расширений Emacs на языке, отличном от Lisp? Это может принять форму привязок к API расширения Emacs на каком-либо другом языке (например, сделать OCaml первоклассным языком расширения Emacs) или режим взаимодействия Emacs, где, например, расширение имеет канал, в который оно может записать Выражения Emacs Lisp и считанные значения результатов.

Ответы [ 6 ]

13 голосов
/ 25 августа 2008

http://www.emacswiki.org/cgi-bin/emacs-en?CategoryExtensionLanguage - это список всех языков расширения, отличных от Elisp, которые вы можете использовать.

Похоже, что он ориентирован на динамический язык.

http://common -lisp.net / project / slime / отсутствует в этом списке, так как это не совсем язык расширения, а мост Elisp-Common Lisp. Его исходный код покажет, как общаться через сокеты.

Аналогичная среда IDE для Erlang - это Distel, на http://fresh.homeunix.net/~luke/distel/ (в настоящее время не работает) и https://github.com/massemanet/distel.

Удачи!

4 голосов
/ 19 августа 2008

Я не знаю, будет ли это работать для вашей конкретной проблемы, но я делал нечто подобное, используя функцию shell-command-to-string:

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

Так, например, у нас есть существующие скрипты, написанные на python, которые будут искажать файл, поэтому приведенное выше позволяет мне вызывать скрипт через emacs lisp.

Быстрый поиск в Google нашел эту страницу , описывающую систему для написания расширений в Python, так что кажется возможным сделать то, что вы хотите ... вы просто должны увидеть, если кто-то написал аналогичную структуру для OCaml.

3 голосов
/ 22 января 2016

Некоторые расширения Api теперь возможны с входящим emacs 25.1 и динамическими модулями

Библиотека, emacs-ffi предлагает интерфейс сторонней функции на основе libffi.

Ознакомьтесь с полной документацией по README .

3 голосов
/ 17 сентября 2008

Попробуйте PyMacs , что позволяет расширять Emacs в Python.

edit : обновлена ​​ссылка.

2 голосов
/ 21 февраля 2015

Что касается языков со статической типизацией, то для Haskell есть что-то, что выглядит довольно производительным и хорошо представленным:

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

есть также что-то полезное для Scala для повторного использования в проекте Ensime (есть мост для Emacs и Vim):

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

Кроме того, быстрый поиск в Google выявил еще одного потенциального кандидата на расширение Emacs с классическим языком FP, OCaml; В проекте много исходных файлов .ml, поэтому где-то должен быть мост Emacs-OCaml:

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

0 голосов
/ 16 сентября 2008

Не существует «API расширения». Emacs Lisp уже там, и он не движется.

Вы можете запускать команды Emacs из вашего другого процесса. Посмотрите на Gnuserv.

Существует множество приложений, в которых Emacs является представлением для модели / контроллера в отдельном процессе. Интерфейс Emacs GDB является хорошим примером. Я не уверен в более простом примере, может быть, sql-postgresql?

...