Domanda

Mi piace il comando python-send-buffer, però ho molto spesso usare Python incorporato in applicazioni, o lanciare Python attraverso un sistema di gestione dei pacchetti personalizzati (per lanciare Python con alcune dipendenze) .. In altre parole, non posso correre "python "e ottenere un utile esempio Python (qualcosa che si basa su python-send-buffer)

Quello che vorrei realizzare è:

  • in qualsiasi interprete Python (o applicazione che permette di valutare il codice Python), importare un modulo magic_emacs_python_server.py (aggiungendo al sys.path se necessario)
  • In Emacs, eseguire magic-emacs-python-send-buffer

Ciò valutare il buffer nel caso Python remoto.

Sembra che dovrebbe essere abbastanza semplice - gli ascolti modulo Python su un socket, in un thread. Si valuta nel thread principale, e restituisce la repr() del risultato (o forse cattura l'output / error, o forse entrambi). Il modulo emacs sarebbe sufficiente inviare testo alla presa, attende una stringa in risposta, e visualizza in un buffer.

Sembra così semplice qualcosa di simile deve esistere già ... IPython ha ipy_vimserver, ma questo è il modo sbagliato. C'è anche swank, mentre sembra molto Lisp-specifica, v'è un Javascript backend che sembra molto come quello che voglio ... ma cercare reperti quasi niente, a parte alcuni (possibilmente vero) affermazioni vaghe che SLIME non funziona bene con lingue non Lisp

In breve:

  • Esiste un progetto per esistere codice Inviare da un Emacs buffer per un processo Python esistente?
  • Se no, come mi consiglia scrivo cosa del genere una (non essere molto familiare con elisp) - SWANK? codice del server di IPython? server TCP Semplice da zero?
È stato utile?

Soluzione

COMINT fornisce la maggior parte delle infrastrutture per cose come questa. C'è un sacco di buoni esempi, come questo o questo

E 'consente di eseguire un comando, fornisce le cose comint-send-string di implementare facilmente i comandi di tipo send-region.

DBR / remoterepl su Github è un proof-of-concept di greggio quello che ho descritto nella domanda.

E 'priva di qualsiasi tipo di smalto, ma funziona per lo più - si importa il modulo replify.py nell'interprete di destinazione, quindi valutare la emacs-remote-repl.el dopo aver fissato il percorso hardcoded stupido client.py

Altri suggerimenti

non shell-command ti danno quello che stai cercando? Si potrebbe scrivere uno script wrapper o regolare il #! e sys.path in modo appropriato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top