Написание расширений Emacs на языках, отличных от Lisp

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

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

18.08.2008 20:31:15
Я рекомендую вам посмотреть, как это делает мерлин, как это предложил Эрик Аллик, например, github.com/the-lambda-church/merlin/blob/master/emacs/… начинает процесс, и github.com/the-lambda -church / merlin / blob / master / emacs /… отправляет команду процессу ocaml merlin с асинхронным обработчиком.
unhammer 23.02.2015 11:33:12
6 ОТВЕТОВ

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

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

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

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

4
18.08.2008 21:34:59

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

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

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

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

Удачи!

14
21.02.2015 05:03:45

Там нет "Расширение API". Emacs Lisp находится там, и он не движется.

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

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

0
16.09.2008 06:47:33

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

редактировать : обновленная ссылка.

3
11.10.2016 09:14:46
Мертвая ссылка, это не полезно
Anthon 10.10.2016 15:18:05

Со стороны статически типизированных языков есть кое-что, что выглядит довольно производительным и хорошо представленным для 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

2
21.02.2015 07:52:38

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

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

Проверьте полную документацию на README .

3
22.01.2016 17:16:24