Бродячий трейлинг за 4 метра до приглашения с Zsh в Mx ansi-term

10

Недавно я прочитал Running Shells в Emacs и потратил некоторое время на адаптацию моей сложной подсказки Zsh для работы с ограниченными возможностями M-x shellи M-x ansi-term.

После этих усилий я наконец-то смог использовать Zsh из Emacs, однако есть и небольшая неприятность с ним M-x ansi-term. Я всегда вижу беспризорный текст 4mперед подсказкой.

Рассеянный текст перед подсказкой

Как вы можете видеть, это явление, кажется, не зависит от актуальной темы подсказки. Он также появляется с любыми встроенными подсказками, даже с простыми, которые не используют каких-либо необычных управляющих символов. На самом деле, это даже происходит с приглашением по умолчанию, т.е. если я запускаю Zsh без моего .zshrc.

Ну, на самом деле это всего лишь небольшая неприятность, и я бы не стал возражать, если бы не смог от нее избавиться - я в основном предпочитаю в M-x shellлюбом случае, где эта проблема не возникает.

Но меня действительно раздражает, что мне не удалось найти причину этой проблемы, хотя я действительно пытался ее отладить. Я должен сказать, однако, что мое понимание терминалов довольно ограничено, поэтому я мог пропустить самое очевидное.

Я на OS X 10.10. У меня Emacs 25.0.50, сборка прямо из ствола с Homebrew и без специальных флагов. Zsh - 5.0.5, как и в Yosemite, но проблема также возникает с 5.0.7, установленным через Homebrew.

Кто-нибудь может пролить свет на этот вопрос?

lunaryorn
источник
Попробуйте установить export TERM = xterm-256color в вашем .zshrc или (setq system-использовании-terminfo nil) .
kmicu
system-user-terminfoничего не изменилось Изменение $TERMрешило проблему, но это не может быть решением, не так ли? В конце концов, это, по сути, ложь: ansi-termнет xterm и определенно не поддерживает 256 цветов.
lunaryorn
4m - это артефакт из escape-кода ANSI, используемый для определения цвета, например, \x1b[37;4mзадает белый цвет с 37 и подчеркнутый текст с 4. Я не могу воспроизвести вашу проблему. Мой zsh - 5.0.7, а 'echo $ TERM' в терминах дает мне цвет eterm , мой emacs - 24.4.1 . Я также протестировал чистую версию по умолчанию 'env HOME = ~ / tmp / emacstest emacs -Q' и не вижу никаких проблем.
kmicu
@kmicu На OS X 10.10 я могу последовательно воспроизвести проблему с emacs -Qотсутствием конфигурации Zsh вообще.
Лунный Рог

Ответы:

10

Видимо, эта проблема вызвана отсутствием terminfo дляeterm-color . Мне удалось решить проблему, следуя инструкциям в этом ответе, чтобы установить соответствующую запись в базу данных terminfo. В частности:

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

Я до сих пор не уверен, зачем это вообще нужно. term.elфактически экспортирует $TERMINFOпеременную, указывающую на этот каталог, поэтому оболочка должна быть в состоянии найти terminfo. Zsh, кажется, игнорирует каталог, хотя ...

~/.terminfoТем не менее, он выглядит так , что приведенная выше команда делает запись terminfo доступной для Zsh.

Я был бы рад, если бы кто-нибудь мог предоставить лучшее объяснение или решение, которое не требует ручного вмешательства.

lunaryorn
источник