Подтвердить что ты не робот

Написание расширений Emacs на других языках, кроме Lisp

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

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

4b9b3361

Ответ 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?