Это зависит от того, как вы хотите все настроить. Определенно часть руководства по процессам стоит прочитать. Чтение кода для пакета 'comint - хорошее место для начала.
Вы перечислили довольно ограниченный набор функций, которые вы хотели бы показать, которые могут быть решены с помощью прямого подключения. Вы можете найти полезные служебные функции, взглянув на то, что предусмотрено в 'net-utils (M-x find-library net-utils RET).
Если приложение, к которому вы пытаетесь подключиться, имеет интерпретированный язык, я бы подключился к нему, а не к написанию пользовательского анализатора на стороне приложения.
Запуск Emacs из приложения
Поскольку вы запускаете Emacs из приложения (в отличие от другого способа (который мог бы облегчить эту работу)), я бы, вероятно, сделал следующее:
- написать небольшой скрипт на Perl, чтобы открыть сокет и читать / писать в него
- установить цикл (read (eval (print))) в интерпретаторе (или написать собственный) и подключить его к сокету / порту
- запуск Emacs с вызовом функции (--eval или --execute) с указанием сокета
- запустить сценарий perl как подпроцесс и порт (смотрите, как это делают inferior-lisp или inferior-tcl )
В этот момент все, что есть в Emacs, может быть отправлено в подпроцесс perl ('comint-send-string) и передано в ваш REPL , и там вы получите желаемый эффект. Аналогично, вы можете отправлять команды обратно в emacs, просто отправляя через строки и анализируя их по функциям, которые вы вставили в 'comint-output-filter-functions.
Затем вы написали бы две маленькие библиотеки, одну на интерпретируемом для вашего APP языке, а другую в Emacs, чтобы выполнять любые функции, которые имеют смысл. Библиотека emacs, вероятно, должна быть упакована как основной (или второстепенный) режим в зависимости от того, на что похожи файлы. Если они используются исключительно с приложением, основным режимом, если это (например) файлы C ++, второстепенный режим будет лучше, если учесть, что вы, вероятно, захотите использовать режим c ++.
Я бы написал маленький скрипт на perl, в отличие от elisp, просто б / к, я знаю, как взаимодействовать с comint. Если маленький Perl-скрипт можно заменить на кусок elisp, и при этом получить преимущество, используя comint, это будет дополнительным бонусом.
У меня почти такая же настройка для Tcl / Tk, только команда соединения обрабатывает только соединение. Это работает очень хорошо.
Запуск приложения из Emacs
Теперь, если вы могли бы вместо этого запустить приложение из Emacs, все вышеописанное применимо, только вы можете избавиться от маленького Perl-скрипта и просто взаимодействовать через интерфейс 'comint. Розетки не нужны.
- Вам по-прежнему нужен цикл 'repl (если приложение не может привязать stdin / stdout к интерпретатору
- Библиотеки останутся прежними
Это было бы намного проще, но работает, только если пользовательский поток позволяет вам идти в этом направлении. (Я догадываюсь, что вы пишете это не только для вашего использования.)
При этом, возможно, будет проще разработать / протестировать этот путь (запуск из Emacs). Вы можете добавить связь через сокет позже как улучшение. Что мотивирует больше ...