Экран Gnu в режиме оболочки emacs: как исправить цветовые escape-коды

Я хотел бы подключить экран или tmux внутри emacs в режиме оболочки. Я часто нахожу, что я запускаю emacs с более низкими процессами внутри экрана на удаленных серверах; было бы неплохо, если бы я мог сменить рабочий процесс на локальные emacs + TRAMP; Однако необходимость повторной привязки постоянных сеансов является обязательной. (Такой рабочий процесс особенно полезен для анализа в R [1])

Режим оболочки довольно желателен, потому что я постоянно сталкиваюсь с разными глюками и даже сбой при использовании комбинации Mx term или Mx ansi-term + screen + R. Однако я не могу избавиться от ansi-окрашенного изображения, представленного как escape-коды на экране при запуске под оболочкой Mx. Когда я использую ansi-color-for-comint-mode-on, они в порядке, но как только экран загорается, это становится ужасным беспорядком.

Кто-нибудь понял набор условий для правильной интерпретации цвета ansi с оболочкой + экран или tmux? Как вообще избавиться от цвета?.. Существуют ли другие альтернативы с точки зрения запуска постоянных удаленных процессов и их привязки к локальным emacs?..

[1] http://blog.nguyenvq.com/2010/07/11/using-r-ess-remote-with-screen-in-emacs/

Ответ 1

Насколько я могу судить, для экрана требуются функции вашего терминала, что режим оболочки Emacs просто не предоставляет и не может обеспечить, просто потому, что он не является традиционным терминалом символов, например VT100. Таким образом, проблема заключается не в том, чтобы избавиться от или попытаться интерпретировать цветовые коды - есть больше возможностей терминала, которые требуется для работы экрана.

По умолчанию экран даже не запускается в режиме оболочки Emacs, насколько я могу судить (он ошибочно говорит, что ему нужна четкая возможность экрана). Некоторые сообщения в Интернете, похоже, предлагают установить TERM = xterm, чтобы обойти это, но это просто обманывает экран, думая, что у терминала есть возможности XTerm, которых у него нет.

Термин и ansi-term режимы Emacs предоставят возможности терминала, необходимые для экрана, но, к сожалению, у вас, похоже, были проблемы с этими режимами.

Вместо этого я хотел бы взглянуть на команду "emacsclient -t" (часть Emacs), которая позволяет вам открыть локальный фрейм, подключенный к существующему экземпляру Emacs, таким же образом, как и Screen позволяет вам для повторного подключения к ранее созданному экземпляру экрана. Таким образом, вы можете настроить emacsclient на вашем локальном компьютере для повторного подключения через TCP к постоянному удаленному экземпляру Emacs.

Ответ 2

Я не использую экран, но, возможно, вы можете исправить это из своего .bashrc. У меня есть куча условного кода, превращая цвет в окна xterm, но оставляя его для других терминалов, которые его не поддерживают. Оболочка M-x устанавливает переменную TERM в немой, поэтому вы можете проверить ее и установить цвет соответствующим образом.

case "$TERM" in
dumb)
## non-color settings here
;;
xterm)
## color settings here
;;
*)
## default (maybe you want non-color here?)
;;
esac