Недавно я прочитал 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.
Кто-нибудь может пролить свет на этот вопрос?
system-user-terminfo
ничего не изменилось Изменение$TERM
решило проблему, но это не может быть решением, не так ли? В конце концов, это, по сути, ложь:ansi-term
нет xterm и определенно не поддерживает 256 цветов.\x1b[37;4m
задает белый цвет с 37 и подчеркнутый текст с 4. Я не могу воспроизвести вашу проблему. Мой zsh - 5.0.7, а 'echo $ TERM' в терминах дает мне цвет eterm , мой emacs - 24.4.1 . Я также протестировал чистую версию по умолчанию 'env HOME = ~ / tmp / emacstest emacs -Q' и не вижу никаких проблем.emacs -Q
отсутствием конфигурации Zsh вообще.Ответы:
Видимо, эта проблема вызвана отсутствием terminfo для
eterm-color
. Мне удалось решить проблему, следуя инструкциям в этом ответе, чтобы установить соответствующую запись в базу данных terminfo. В частности:Я до сих пор не уверен, зачем это вообще нужно.
term.el
фактически экспортирует$TERMINFO
переменную, указывающую на этот каталог, поэтому оболочка должна быть в состоянии найти terminfo. Zsh, кажется, игнорирует каталог, хотя ...~/.terminfo
Тем не менее, он выглядит так , что приведенная выше команда делает запись terminfo доступной для Zsh.Я был бы рад, если бы кто-нибудь мог предоставить лучшее объяснение или решение, которое не требует ручного вмешательства.
источник