Strano output della shell quando si utilizza IPython 5


37

Ho appena aggiornato all'ultima versione di IPython e ora qualcosa non va quando lo si utilizza in emacs.

Quando lo si utilizza in un terminale normale funziona bene (colori, completamento della scheda, ecc.), Tuttavia sia in M-x eshello M-x shell, anziché in output In [1]:, in realtà viene emesso [?12l[?25he Out[1]output [J[?7h[?12l[?25h[?2004l[?7hOut[1]:.

Forse è una funzionalità del terminale non disponibile su emacs utilizzata da IPython, ma mi piacerebbe sapere quale sia.

Terminal.app:

In [1]: 2+2
Out[1]: 4

Emacs

[?12l[?25h2+2
[J[?7h[?12l[?25h[?2004l[?7hOut[1]: 4

Hai aperto un bug a monte? Non sono riuscito a trovare nulla, ma è anche un po 'difficile cercare ATM con Gmane rielaborato.
rasmus,

2
Per riferimento, il bug a monte è # 25306
npostavs

Risposte:


41

IPython 5 ha una nuova interfaccia terminale, che non è compatibile con le shell inferiori di Emacs. Per risolverlo, aggiungi il --simple-promptflag al comando IPython:

(setq python-shell-interpreter "ipython"
    python-shell-interpreter-args "--simple-prompt -i")

Dalla documentazione:

La nuova interfaccia non è compatibile con la funzionalità 'inferior-shell' di Emacs. Per continuare a usarlo, aggiungi il --simple-promptflag al comando Emacs esegue. Questo flag disabilita la maggior parte delle funzionalità di IPython, basandosi su Emacs per fornire cose come il completamento delle schede.

Riferimento: http://ipython.readthedocs.io/en/stable/whatsnew/version5.html#id1


6
Sì, è quello che ho fatto all'inizio, tuttavia la mancanza di supporto multilinea (molto importante per le definizioni delle funzioni) mi ha fatto ritornare a ipython 4. Va notato che ipython 5 funziona bene con il termine Mx.
Letterale

3
L'impostazione di questo flag è comunque molto utile con Elpy, attraverso la variabile python-shell-interpreter-args. Se non hai provato Elpy, dovresti dare un'occhiata. Consente di scrivere le definizioni delle funzioni in un buffer separato e di passarle facilmente all'interprete con un solo comando. In questo caso, puoi utilizzare tutti i comandi di modifica di Emacs e ottenere una sessione interattiva, la migliore di entrambi i mondi.
Ricardo Lima,

1
@Literal il motivo per cui è scritto anche sul link: sono cambiati dall'uso readlinesu prompt_toolkitsu IPython 5. prompt_toolkitnon è compatibile con le shell Emacs, che funzionano in modo diverso da term: per quanto ne so, le shell eseguono terminali stupidi con lo scopo di lavorare più come un buffer Emacs standard, mentre termesegue un vero emulatore di terminale completo. Sembra che le shell siano compatibili con readlinema non con prompt_toolkit, il che spiegherebbe il prompt che mostra le sequenze di escape. Poiché termesegue un terminale completo, interpreta correttamente le sequenze di escape.
Ricardo Lima,

1
Non l'ho accettato perché mi sarebbe piaciuto conservare le altre funzionalità, magari usando un'altra modalità shell con più funzionalità. Ma credo che dovrò conviverci.
Letterale

1
@CodyChan Disabilita le funzionalità di IPython relative all'interfaccia utente, come il completamento, i colori, ecc. Mantiene cose come% comandi magici, cronologia input / output
,!

0

C'è un modo per aprire IPython nella shell di emacs senza usare --simple-prompt

1. pip install rlipython

2. Open IPython in terminal

3. Run import rlipython; rlipython.install() 

Successivamente, dovresti essere in grado di aprire ipython direttamente nella shell emacs senza riscontrare il problema di visualizzazione.

C'è un altro problema nel mio caso: per qualche motivo, anche dopo che la visualizzazione è stata corretta, non sono ancora riuscito a copiare e incollare direttamente alcune definizioni di classe multilinea in ipython nella shell emacs. La mia attuale soluzione è utilizzare il comando Ipython% paste. Se hai approcci migliori, per favore fatemelo sapere.

PS: sto usando Ubuntu 16.04. Qualcuno usa MacOS dice che rompe IPython.



Corrompe l'installazione di ipython
Diogo il

in quale modo? per me funziona benissimo
DataHungry,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.