Написание расширений Emacs на других языках, кроме Lisp
Я хочу использовать существующее приложение (написанное в OCaml) и создать для него интерфейс Emacs (например, режим Emacs GDB). Я бы предпочел сделать это без написания тонны кода Lisp. В условиях MVC я хотел бы, чтобы представление было Emacs, но для модели и контроллера осталось (в первую очередь) OCaml.
Кто-нибудь знает способ написания расширений Emacs на языке, отличном от Lisp? Это может быть либо привязкой к API расширения Emacs на каком-либо другом языке (например, для OCaml - первоклассный язык расширения Emacs), либо в режиме взаимодействия Emacs, где, например, в расширении есть труба, в которую он может писать Emacs Lisp и считывают значения результатов.
Ответы
Ответ 1
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.
Удачи!
Ответ 2
Я не знаю, будет ли это работать для вашей конкретной проблемы, но я делал что-то подобное с помощью функции shell-command-to-string:
(shell-command-to-string
"bash -c \"script-to-exec args\"")
Так, например, у нас есть существующие скрипты, написанные на python, которые будут калечить файл, поэтому приведенное выше позволяет мне вызвать script через emacs lisp.
Быстрый поиск в google нашел эту страницу, описывая систему для написания расширений в Python, поэтому представляется целесообразным делать то, что вы хотите. вам просто нужно посмотреть, не написал ли кто-нибудь аналогичную структуру для OCaml.
Ответ 3
Попробуйте PyMacs, что позволяет расширять Emacs на Python.
edit: обновленная ссылка.
Ответ 4
Со стороны статически типизированных языков есть что-то, что выглядит довольно эффектно и хорошо показано для 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
Ответ 5
Теперь возможно расширение Exti Api с входящими emacs 25.1 и динамическими модулями
Библиотека, emacs-ffi
предлагает интерфейс внешней функции на основе libffi
.
Ознакомьтесь с полной документацией README.
Ответ 6
Нет "API расширения". Emacs Lisp - путь туда, и он не перемещается.
Вы можете запускать команды Emacs из другого процесса. Посмотрите на Gnuserv.
Существует множество приложений, в которых Emacs представляет собой представление для модели/контроллера в отдельном процессе. Хорошим примером является интерфейс Emacs GDB. Я не уверен в более простом примере, может быть, sql-postgresql?