Видимые escape-последовательности ANSI при запуске оболочки Emacs (это не цвета ANSI)

Когда я запускаю команду оболочки в Emacs, я часто вижу, как выглядят коды ANSI. Похоже, они происходят, когда процесс оболочки порождает новый процесс.

Вот пример запуска Stata в оболочке Emacs. Коды ANSI (если это то, что они есть) видны внизу:

. ls *.tex
ls *.tex

-rw-r--r--  1 pnj  staff  78006 Jun 23 17:21 un_paper.tex
-rw-r--r--  1 pnj  staff   1821 Dec 22  2013 un_results.tex

. shell ls *.tex
shell ls *.tex

^[[?1l^[>un_paper.tex                    un_results.tex
^[[?1h^[=
.

Примечание: Есть много схожих SO вопросов о escape-последовательностях ANSI. Это не моя проблема! Я уже потребовал ansi-color, а также ansi-color-for-comint-mode-onи цвета ANSI работают. Кроме того, использование ansi-term решает эту проблему, но я гораздо больше предпочитаю характеристики буфера в стандартной оболочке. eshell работает немного лучше, но все равно отображает некоторые escape-коды.

Я предполагаю, что это коды режима экрана / перемещения курсора, но я не могу понять, как заставить emacs их игнорировать или обрабатывать. TERM установлен в xterm-256color.

Обновление: я узнал, что коды h и l используются для настройки режима терминала / дисплея, который, как я полагаю, Emacs не может обработать. Есть ли способ, которым я могу подавить их отображение?

2 ответа

Решение

Как вы говорите, eshell Emacs не может обрабатывать escape-коды - это "тупой" терминал. Но ваша переменная TERM сообщает вашей оболочке, что она способна обрабатывать эти escape-коды.

Установка TERM в "немой", когда вы внутри eshell, должна убрать эти уродливые escape-коды.

На самом деле, Emacs поддерживает цвета в shell, но только частично. Там есть описание терминала в ncurses (dumb-emacs-ansi), с примечаниями о том, почему вы не хотите его использовать (комментарии, предшествующие записи).

Другие вопросы по тегам