Написание расширений Emacs на языках, отличных от Lisp
Я хотел бы взять существующее приложение (написанное на OCaml) и создать для него «интерфейс» Emacs (например, режим Emacs GDB). Я бы предпочел сделать это без написания тонны кода на Лиспе. В терминах MVC я бы хотел, чтобы View был Emacs, но чтобы модель и контроллер оставались (в первую очередь) OCaml.
Кто-нибудь знает, как писать расширения Emacs на языке, отличном от Lisp? Это может быть либо привязкой к API расширения Emacs на каком-либо другом языке (например, делая OCaml первоклассным языком расширения Emacs), либо режимом взаимодействия с Emacs, где, например, у расширения есть канал, в который оно может писать Выражения Emacs Lisp и считывание значений результатов.
Ответов (6)6
Не существует "Extension API". Emacs Lisp уже там, и он не движется.
Вы можете запускать команды Emacs из другого процесса. Взгляните на Gnuserv.
Существует множество приложений, в которых Emacs является представлением для модели / контроллера в отдельном процессе. Интерфейс Emacs GDB - хороший пример. Я не уверен в более простом примере, может быть, sql-postgresql?
Попробуйте PyMacs , который позволяет расширить Emacs на Python.
изменить : обновленная ссылка.
Со стороны статически типизированных языков есть кое-что, что выглядит довольно производительно и хорошо подходит для Haskell:
https://github.com/knupfer/haskell-emacs
также, вероятно, есть что-то полезное для повторного использования Scala из проекта Ensime (есть мост как для Emacs, так и для Vim):
https://github.com/ensime/ensime-server
Более того, быстрый поиск в Google выявил еще одного потенциального кандидата на расширение Emacs классическим языком программирования FP, OCaml; в проекте много .ml
исходных файлов, поэтому где-то должен быть мост Emacs-OCaml:
Я не знаю, сработает ли это для вашей конкретной проблемы, но я делал нечто подобное, используя функцию shell-command-to-string:
(shell-command-to-string
"bash -c \"script-to-exec args\"")
Так, например, у нас есть существующие сценарии, написанные на python, которые будут искажать файл, поэтому приведенное выше позволяет мне вызывать сценарий через emacs lisp.
Быстрый поиск в Google нашел эту страницу, описывающую систему для написания расширений на Python, поэтому кажется возможным делать то, что вы хотите ... вам просто нужно посмотреть, написал ли кто-нибудь подобную структуру для OCaml.
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 .
Удачи!