Ответ 1
Вы можете использовать AnsiTerm, который поддерживает цвета, или вы можете включить AnsiColor для нормальной оболочки:
(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
Я использую Ubuntu8.10 и emacs-snapshot. Запуск shell-mode на emacs и ввода "ls" показывает escape-коды:
снимок экрана http://lh3.ggpht.com/_os_zrveP8Ns/SdMmohKNjmI/AAAAAAAADB4/VlKpr5H_7ZA/s512/screen.png
Как я могу получить результат, который я ожидаю?
Вы можете использовать AnsiTerm, который поддерживает цвета, или вы можете включить AnsiColor для нормальной оболочки:
(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
Кроме того, вы можете выбрать другую оболочку: M-x term
или M-x eshell
. Первый обеспечивает интерфейс, который намного ближе к реальному терминальному эмулятору, чем shell-mode
(как только вы его запустите, вы можете выйти из режима с помощью C-c C-j
и снова войти с помощью C-c C-k
). Последняя представляет собой реализацию оболочки, написанную в Elisp (вы можете использовать общие команды оболочки, а также оценивать код Lisp).
Развернувшись на vatine, вы можете добавить это внутри своего .cshrc(.tcshrc/.bashrc), завернутого в проверку для переменной окружения INSIDE_EMACS.
Например (из моего .tcshrc):
if ( $?INSIDE_EMACS ) then
alias l 'ls --color=never'
endif
M-x ansi-color-for-comint-mode-on
Проблема заключается в том, что "l" пытается раскрасить вывод, а emacs не имеет его. Попробуйте следующее:
$ unalias l $ alias l ls --color=never
Я завернул мой alias ls ='ls --color=auto'
в ~/.bashrc:
case "$TERM" in
xterm*|rxvt*)
if [ -x /usr/bin/dircolors ]; then
alias ls='ls --color=auto'
...
fi
;;
*)
;;
esac
Это отключает использование color=auto
в emacs.