2017-03-26 2 views
1

Existe-t-il une fonction équivalente à eval-print-last-sexp pour les modes dérivés de comint dans emacs? Plus précisément, j'utilise python-mode (avec elpy) et je cherche un moyen d'envoyer le contenu d'une région au processus Python et ensuite imprimer les résultats sur la ligne suivante du script python je suis working in.Existe-t-il une fonction comme eval-print-last-sexp pour Comint-Mode?

Imprimer les résultats au Les messages seraient également acceptables, mais le comportement d'eval-print-last-sexp serait préférable. J'utilise Emacs 25.1.1 et elpy 1.13.0.

Répondre

1

Cela dépend du mode dérivé de comint, car vous devez rediriger la sortie du processus. Différents modes ont différentes méthodes d'interaction avec les processus inférieurs. Le mode Python a déjà une fonction pour ce faire, python-shell-send-string-no-output (d'autres modes ont des fonctions similaires, mais vous auriez besoin de les rechercher).

Je ne sais pas exactement comment vous voulez définir un sexp pour python, mais voici un exemple d'envoi de la ligne en cours, avec une sortie comme eval-print-last-sexp.

(defun python-eval-print-last-sexp() 
    "Print result of evaluating current line into current buffer." 
    (interactive) 
    (let ((res (python-shell-send-string-no-output 
       ;; modify to get a different sexp 
       (buffer-substring (line-beginning-position) 
           (line-end-position)))) 
     (standard-output (current-buffer))) 
    (when res 
     (terpri) 
     (princ res) 
     (terpri)))) 
+0

Excellent! 'python-shell-send-string-no-output' était exactement ce dont j'avais besoin et votre fonction fonctionne parfaitement. – nslamberth