Frage

Ich mag python-send-buffer Befehl, aber ich verwende jedoch sehr oft Python, die in Anwendungen eingebettet sind, oder starte Python über ein benutzerdefiniertes Paketverwaltungssystem (um Python mit bestimmten Abhängigkeiten zu starten). Mit anderen Worten, ich kann nicht einfach "Python" ausführen und eine nützliche Python -Instanz erhalten (etwas das python-send-buffer beruht auf)

Was ich gerne erreichen möchte ist:

  • In jedem Python -Dolmetscher (oder Anwendung, mit der Sie Python -Code bewerten können) importieren Sie a magic_emacs_python_server.py Modul (Anhang zu sys.path wie nötig)
  • In EMACs rennen magic-emacs-python-send-buffer

Dies würde den Puffer in der Remote -Python -Instanz bewerten.

Es scheint, als ob es ziemlich einfach sein sollte - das Python -Modul hört in einem Thread auf einer Steckdose zu. Es bewertet im Hauptfaden und gibt die zurück repr() des Ergebnisses (oder vielleicht den Stdout/Stderr oder vielleicht beides erfasst). Das EMACS -Modul sendet nur Text an den Socket, wartet als Antwort auf eine Zeichenfolge und zeigt ihn in einem Puffer an.

Klingt so einfach, dass so etwas schon existieren muss ... Ipython hat ipy_vimserver, aber das ist der falsche Weg. Es gibt auch swank, obwohl es sehr lispspezifisch erscheint, aber es gibt es Ein Javascript -Backend Was sehr ähnlich aussieht, was ich will ... aber das Suchen findet fast nichts, abgesehen von einigen vagen (möglicherweise wahren) Behauptungen, dass Schleim nicht gut mit nicht lisparnen Sprachen funktioniert

Zusamenfassend:

  • Gibt es ein Projekt, um Code von einem EMACS -Puffer an einen vorhandenen Python -Prozess zu senden?
  • Wenn nicht, wie würden Sie empfehlen, so etwas zu schreiben (nicht sehr vertraut mit Elisp) - Swank? Ipythons Servercode? Einfacher TCP -Server von Grund auf neu?
War es hilfreich?

Lösung

Comint Bietet den größten Teil der Infrastruktur für solche Dinge. Es gibt ein paar gute Beispiele wie Dies oder Dies

Es ermöglicht Ihnen, einen Befehl auszuführen, bietet Dinge comint-send-string leicht implementieren send-region Geben Sie Befehle ein.

DBR/RemoterePle auf GitHub ist ein groben Proof-of-Concept von dem, was ich in der Frage beschrieben habe.

Es fehlt irgendeine Art von Politur, aber es funktioniert meistens - Sie importieren die replify.py Modul im Zieldolmetscher und bewerten Sie dann die emacs-remote-repl.el Nachdem Sie den dummen hartcodierten Weg zu behoben haben client.py

Andere Tipps

Nicht shell-command Geben Sie Ihnen, wonach Sie suchen? Sie können ein Wrapper -Skript schreiben oder das anpassen #! und sys.path passend.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top