Вопрос

Мне нравится python-send-buffer команда, однако я очень часто использую Python, встроенный в приложения, или запускаю Python через пользовательскую систему управления пакетами (для запуска Python с определенными зависимостями)..Другими словами, я не могу просто запустить "python" и получить полезный экземпляр Python (что-то, что python-send-buffer опирается на)

Чего я хотел бы достичь, так это:

  • в любом интерпретаторе Python (или приложении, которое позволяет вам оценивать код Python) импортируйте magic_emacs_python_server.py модуль (добавление к sys.path по мере необходимости)
  • В emacs запустите magic-emacs-python-send-buffer

Это позволило бы оценить буфер в удаленном экземпляре Python.

Кажется, это должно быть довольно просто - модуль Python прослушивает сокет в потоке.Он вычисляется в основном потоке и возвращает repr() результата (или, может быть, фиксирует стандартный вывод / stderr, а может быть, и то, и другое).Модуль emacs просто отправляет текст в сокет, ожидает строку в ответ и отображает ее в буфере.

Звучит так просто, что нечто подобное уже должно существовать...IPython имеет ipy_vimserver, но это неправильный путь.Существует также swank, хотя это кажется очень специфичным для Lisp, есть серверная часть Javascript что очень похоже на то, чего я хочу...но поиск почти ничего не находит, кроме некоторых расплывчатых (возможно, правдивых) утверждений о том, что SLIME плохо работает с языками, отличными от Lisp

Короче говоря:

  • Существует ли проект для отправки кода из буфера emacs в существующий процесс Python?
  • Если нет, то как бы вы порекомендовали мне написать такую вещь (не будучи очень знакомым с elisp) - SWANK?Серверный код IPython?Простой TCP-сервер с нуля?
Это было полезно?

Решение

входящий предоставляет большую часть инфраструктуры для подобных вещей.Есть куча хороших примеров, таких как это или это

Это позволяет вам запустить команду, предоставляет следующие возможности comint-send-string чтобы легко реализовать send-region вводите команды.

dbr/remoterepl на Github это грубое доказательство концепции того, что я описал в вопросе.

В нем отсутствует какая-либо полировка, но в основном он работает - вы импортируете replify.py модуль в целевом интерпретаторе, затем оцените emacs-remote-repl.el после исправления дурацкого жестко закодированного пути к client.py

Другие советы

Не делает shell-command дать вам то, что вы ищете?Вы могли бы написать сценарий-оболочку или настроить #! и sys.path соответствующим образом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top