Экран Gnu в режиме оболочки emacs: как исправить цветовые коды выхода - PullRequest
10 голосов
/ 14 января 2011

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 02 марта 2011

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

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

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

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

1 голос
/ 08 февраля 2011

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

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