Question

Je comme la commande python-send-buffer, mais je l'utilise très souvent Python intégré dans les applications, ou lancer Python via un système de gestion de package personnalisé (pour lancer Python avec certaines dépendances) .. En d'autres termes, je ne peux pas courir « python »et obtenir une instance Python utile (quelque chose qui repose sur python-send-buffer)

Ce que je voudrais réaliser est:

  • dans un interpréteur Python (ou une application qui vous permet d'évaluer le code Python), importer un module de magic_emacs_python_server.py (à annexant sys.path si nécessaire)
  • Dans emacs, exécutez magic-emacs-python-send-buffer

évaluerait la mémoire tampon dans l'instance Python à distance.

On dirait qu'il devrait être assez simple - le module Python écoute sur une prise, dans un fil. Il évalue dans le thread principal, et renvoie la repr() du résultat (ou capture peut-être le stdout / stderr, ou peut-être les deux). Le module emacs serait simplement envoyer des messages texte à la prise, attend une chaîne en réponse, et l'affiche dans un tampon.

sons si simple quelque chose comme ça doit déjà exister ... IPython a ipy_vimserver, mais cela est dans le mauvais sens. Il y a aussi swank, alors qu'il semble très Lisp spécifique, il est un Javascript back-end qui semble très comme ce que je veux ... mais la recherche trouve presque rien, autre que quelques vagues (peut-être vrai) prétend que BOUE ne fonctionne pas bien avec les langues non-Lisp

En bref:

  • Est-ce qu'un exist de projet pour envoyer le code d'un emacs tampon à un processus Python existant?
  • Sinon, comment recommanderiez-vous que j'écris chose telle (ne pas être très familier avec elisp) - SWANK? le code du serveur de IPython? Simple serveur TCP à partir de zéro?
Était-ce utile?

La solution

COMINT fournit la plupart des infrastructures pour des choses comme ça. Il y a un tas de bons exemples, comme ce ou cette

Il vous permet d'exécuter une commande, fournit des choses comint-send-string d'implémenter facilement des commandes de type send-region.

DBR / remoterepl sur Github est une preuve de concept brut de ce que je décrit dans la question.

Il manque tout type de vernis, mais il fonctionne la plupart du temps - vous importez le module replify.py dans l'interpréteur cible, puis évaluer la emacs-remote-repl.el après avoir fixé le chemin hardcoded stupide pour client.py

Autres conseils

Ne pas shell-command vous donner ce que vous cherchez? Vous pouvez écrire un script d'emballage ou d'ajuster correctement la #! et sys.path.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top