Acabo de actualizar a la última versión de IPython y ahora algo está mal cuando lo uso en emacs.
Cuando se usa en un terminal normal, funciona bien (colores, finalización de tabulación, etc.), sin embargo, ya sea en M-x eshell
o M-x shell
, en lugar de generar In [1]:
, realmente emite [?12l[?25h
y se Out[1]
envía a [J[?7h[?12l[?25h[?2004l[?7hOut[1]:
.
Tal vez sea una característica del terminal que no está disponible en los emacs utilizados por IPython, pero me gustaría saber cuál es.
Terminal.app:
In [1]: 2+2
Out[1]: 4
Emacs
[?12l[?25h2+2
[J[?7h[?12l[?25h[?2004l[?7hOut[1]: 4
Respuestas:
IPython 5 tiene una nueva interfaz de terminal, que no es compatible con los shells inferiores de Emacs. Para solucionarlo, agregue la
--simple-prompt
bandera al comando IPython:De la documentación:
Referencia: http://ipython.readthedocs.io/en/stable/whatsnew/version5.html#id1
fuente
python-shell-interpreter-args
. Si no has probado Elpy, deberías echarle un vistazo. Le permite escribir las definiciones de sus funciones en un búfer separado y pasarlas fácilmente al intérprete con solo un comando. En este caso, puede utilizar todos los comandos de edición de Emacs y obtener una sesión interactiva, lo mejor de ambos mundos.readline
aprompt_toolkit
en IPython 5.prompt_toolkit
no es compatible con los shells de Emacs, que funcionan de manera diferente aterm
: hasta donde yo sé, los shells ejecutan terminales tontos con el propósito de funcionar más como un búfer estándar de Emacs, mientras queterm
ejecuta un emulador de terminal completo real. Parece que los shells son compatibles con,readline
pero no conprompt_toolkit
, lo que explicaría el aviso que muestra las secuencias de escape. Comoterm
ejecuta un terminal completo, interpreta correctamente las secuencias de escape.Hay una manera de abrir IPython en el shell de emacs sin usar --simple-prompt
Después de esto, debería poder abrir ipython directamente en el shell de emacs sin experimentar el problema de visualización.
Sin embargo, hay un problema más en mi caso: por alguna razón, incluso después de que la visualización se volvió correcta, todavía no podía copiar y pegar directamente algunas definiciones de clase de varias líneas en ipython en el shell de emacs. Mi solución actual es usar el comando Ipython% paste. Si tiene mejores enfoques, hágamelo saber.
PD: estoy usando Ubuntu 16.04. Alguien usa MacOS dice que rompe IPython.
fuente