Pregunta

me gusta el python-send-buffer Comando, sin embargo, a menudo uso Python integrado en aplicaciones, o lanzar Python a través de un sistema de gestión de paquetes personalizado (para lanzar Python con ciertas dependencias). En otras palabras, no puedo ejecutar "Python" y obtener una instancia útil de Python (algo que python-send-buffer se basa en)

Lo que me gustaría lograr es:

  • En cualquier intérprete de Python (o aplicación que le permita evaluar el código de Python), importe un magic_emacs_python_server.py módulo (agregar a sys.path según sea necesario)
  • En emacs, corre magic-emacs-python-send-buffer

Esto evaluaría el búfer en la instancia remota de Python.

Parece que debería ser bastante simple: el módulo Python escucha en un enchufe, en un hilo. Se evalúa en el hilo principal y devuelve el repr() del resultado (o tal vez captura el stdout/stderr, o tal vez ambos). El módulo EMACS simplemente enviaría texto al enchufe, espera una cadena en respuesta y la muestra en un búfer.

Suena tan simple algo como esto ya debe existir ... Ipython tiene ipy_vimserver, pero este es el camino incorrecto. También hay swank, aunque parece muy específico de Lisp, hay un backend de JavaScript que se parece mucho a lo que quiero ... pero la búsqueda no encuentra casi nada, aparte de algunas vaga (posiblemente verdadera) afirma que el limo no funciona bien con idiomas no listos

En breve:

  • ¿Existe un proyecto para enviar código de un búfer EMACS a un proceso de Python existente?
  • Si no, ¿cómo recomendaría que escriba tal cosa (no estar muy familiarizado con Elisp) - Swank? ¿El código del servidor de Ipython? Servidor TCP simple desde cero?
¿Fue útil?

Solución

reverencia Proporciona la mayor parte de la infraestructura para cosas como esta. Hay un montón de buenos ejemplos, como este o este

Le permite ejecutar un comando, proporciona cosas comint-send-string para implementar fácilmente send-region Escriba comandos.

DBR/RemoterePR en GitHub es una prueba de concepto de crudo de lo que describí en la pregunta.

Carece de cualquier tipo de esmalte, pero en su mayoría funciona: importe el replify.py módulo en el intérprete de destino, luego evalúe el emacs-remote-repl.el Después de arreglar el estúpido camino codificado a client.py

Otros consejos

No shell-command ¿Te da lo que estás buscando? Podrías escribir un script de envoltura o ajustar el #! y sys.path adecuadamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top