Видимые 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
), с примечаниями о том, почему вы не хотите его использовать (комментарии, предшествующие записи).