Właśnie uaktualniłem do najnowszej wersji IPython i teraz coś jest nie tak z używaniem go w emacsie.
Kiedy używasz go w zwykłym terminalu, działa dobrze (kolory, uzupełnianie tabulatorami itp.), Jednak albo w, M-x eshell
albo M-x shell
zamiast wypisywania In [1]:
, faktycznie wypisuje [?12l[?25h
i Out[1]
wypisuje do [J[?7h[?12l[?25h[?2004l[?7hOut[1]:
.
Może to jakaś funkcja terminalu niedostępna w emacach używanych przez IPython, ale chciałbym wiedzieć, który to jest.
Terminal.app:
In [1]: 2+2
Out[1]: 4
Emacs
[?12l[?25h2+2
[J[?7h[?12l[?25h[?2004l[?7hOut[1]: 4
Odpowiedzi:
IPython 5 ma nowy interfejs terminala, który nie jest kompatybilny z gorszymi powłokami Emacsa. Aby to naprawić, dodaj
--simple-prompt
flagę do polecenia IPython:Z dokumentacji:
Odniesienie: http://ipython.readthedocs.io/en/stable/whatsnew/version5.html#id1
źródło
python-shell-interpreter-args
. Jeśli nie próbowałeś Elpy, powinieneś to sprawdzić. Umożliwia zapisanie definicji funkcji w oddzielnym buforze i łatwe przekazanie ich do tłumacza za pomocą tylko jednego polecenia. W takim przypadku możesz skorzystać ze wszystkich poleceń edycyjnych Emacsa i uzyskać interaktywną sesję - najlepiej z obu światów.readline
doprompt_toolkit
dnia ipython 5.prompt_toolkit
nie jest kompatybilny z muszli Emacs, które działają inaczejterm
: o ile wiem, muszle uruchomić głupie terminale z celów pracy bardziej przypomina standardowy bufor Emacsa, podczas gdyterm
działa rzeczywisty pełny emulator terminala. Wygląda na to, że powłoki są kompatybilne,readline
ale nie z nimiprompt_toolkit
, co wyjaśniałoby monit pokazujący sekwencje specjalne. Ponieważterm
działa pełny terminal, poprawnie interpretuje sekwencje specjalne.Istnieje sposób na otwarcie IPython w powłoce emacsa bez użycia --simple-prompt
Następnie powinieneś być w stanie otworzyć ipython bezpośrednio w powłoce emacsa bez problemów z wyświetlaniem.
W moim przypadku jest jeszcze jeden problem: z jakiegoś powodu, nawet po poprawnym wyświetleniu, nadal nie mogłem bezpośrednio skopiować i wkleić niektórych definicji linii wieloliniowych do ipython w powłoce emacsa. Moje obecne rozwiązanie polega na użyciu polecenia Ipython% paste. Jeśli masz lepsze podejście, daj mi znać.
PS: Używam Ubuntu 16.04. Ktoś używa MacOS mówi, że łamie IPython.
źródło