Zbłąkaj za 4 m przed monitem z Zsh w Mx ansi-term

10

Niedawno przeczytałem Uruchamianie pocisków w Emacsie i spędziłem trochę czasu, aby dostosować mój skomplikowany monit Zsh do pracy z ograniczonymi możliwościami M-x shelli M-x ansi-term.

Po tym wysiłku jestem w końcu w stanie korzystać z Zsh z poziomu Emacsa, jednak z pewną niedogodnością M-x ansi-term. 4mPrzed monitem zawsze widzę zbłąkany tekst .

Zbłąkany tekst przed pytaniem

Jak widać, zjawisko to wydaje się być niezależne od faktycznego podpowiedzi. Pojawia się również z dowolnymi wbudowanymi monitami, nawet tymi prostymi, które nie używają żadnych fantazyjnych znaków kontrolnych. W rzeczywistości dzieje się tak nawet z domyślnym monitem, tzn. Jeśli uruchomię Zsh bez mojego .zshrc.

Cóż, to naprawdę tylko niewielka uciążliwość i nie miałbym nic przeciwko, gdybym nie był w stanie się go pozbyć - i M-x shelltak wolę przede wszystkim tam, gdzie ten problem nie występuje.

Ale naprawdę denerwuje mnie, że nie udało mi się znaleźć przyczyny tego problemu, mimo że naprawdę próbowałem go debugować. Muszę jednak powiedzieć, że moje rozumienie terminali jest raczej ograniczone, więc mogłem przeoczyć to, co oczywiste.

Korzystam z systemu OS X 10.10. My Emacs ma 25.0.50, buduj prosto z bagażnika z Homebrew, bez specjalnych flag. Zsh to 5.0.5, tak jak w Yosemite, ale problem występuje również w wersji 5.0.7 zainstalowanej przez Homebrew.

Czy ktoś może rzucić światło na ten problem?

księżycowy
źródło
Spróbuj ustawić eksport TERM = xterm-256color w .zshrc lub (setq system-uses-terminfo zero) .
kmicu
system-user-terminfonic nie zmieniłem. Zmiana $TERMrozwiązała problem, ale to nie może być rozwiązanie, prawda? W końcu to kłamstwo, w gruncie rzeczy: ansi-termnie ma Xtermu i zdecydowanie nie obsługuje 256 kolorów.
lunaryorn
4m jest artefaktem z kodu ucieczkowego ANSI używanego do definiowania koloru, np. \x1b[37;4mOkreśla biały kolor z 37 i podkreślony tekst z 4. Nie mogę odtworzyć twojego problemu. Mój zsh to 5.0.7, a 'echo $ TERM' w ansi-term daje mi eterm-kolor , moje emacs to 24.4.1 . Przetestowałem również czystą domyślną wersję „env HOME = ~ / tmp / emacstest emacs -Q” i nie widzę żadnych problemów.
kmicu
@kmicu W systemie OS X 10.10 mogę konsekwentnie odtwarzać problem z emacs -Qkonfiguracją Zsh i wcale.
lunaryorn,

Odpowiedzi:

10

Najwyraźniej ten problem jest spowodowany brakującym terminfo dlaeterm-color . Udało mi się rozwiązać problem, postępując zgodnie z instrukcjami w tej odpowiedzi, aby zainstalować odpowiedni wpis w bazie danych terminfo. Konkretnie:

$ tic -o ~/.terminfo /usr/local/share/emacs/25.0.50/etc/e/eterm-color.ti

Nadal nie jestem pewien, dlaczego jest to w ogóle potrzebne. term.elfaktycznie eksportuje $TERMINFOzmienną wskazującą do tego katalogu, więc powłoka powinna być w stanie znaleźć terminfo. Zsh wydaje się ignorować katalog, chociaż…

Wygląda ~/.terminfojednak na to, więc powyższe polecenie udostępnia pozycję terminfo dla Zsh.

Byłbym zadowolony, gdyby ktoś mógł podać lepsze wyjaśnienie lub rozwiązanie, które nie wymaga ręcznej interwencji.

księżycowy
źródło