Вывод команды оболочки emacs не показывает цвета ANSI, но код

Когда я делаю M-! в моем emacs 21.4 коды ANSI становятся буквальными. Например: ls --color

^[[0m^[[0m05420273.pdf^[[0m
^[[0m100829_Baño1.pdf^[[0m 

Есть ли способ получить это с помощью цвета и UTF8?

На тот же вопрос был ответ в SO до, но с не совсем удовлетворительными результатами (решение было открыть shell-режим). Я умею иметь цвета в оболочке. Я только хочу знать, как я могу раскрасить M! (shell-command) или если это невозможно.

Режим оболочки слишком навязчив, когда вы хотите только показать что-то быстрое и не хотите переходить в этот буфер, и вы хотите, чтобы он автоматически исчезал без C-x-k. Очевидно, есть ситуации, когда буфер оболочки более удобен, но благодаря другому вопросу я нашел, как поместить цвет в режим оболочки.

[примечание] emacs в использовании GNU Emacs 21.4.1 (x86_64-redhat-linux-gnu, X toolkit, полосы прокрутки Xaw3d) от 15.06.2008 на builder6.centos.org


person Pablo Marin-Garcia    schedule 28.04.2011    source источник


Ответы (2)


ansi-color.el содержит функции для обработки цветовых кодов ANSI. К сожалению, на самом деле нет хорошего способа подключить его к shell-command. Это что-то вроде взлома, но оно работает:

(require 'ansi-color)

(defadvice display-message-or-buffer (before ansi-color activate)
  "Process ANSI color codes in shell output."
  (let ((buf (ad-get-arg 0)))
    (and (bufferp buf)
         (string= (buffer-name buf) "*Shell Command Output*")
         (with-current-buffer buf
           (ansi-color-apply-on-region (point-min) (point-max))))))
person cjm    schedule 28.04.2011

О UTF-8:

Чтобы указать систему кодирования для преобразования не-ASCII символов в выводе команды оболочки, используйте C-x RET c перед этой командой.

Неинтерактивные вызывающие абоненты могут указывать системы кодирования путем привязки coding-system-for-read' and coding-system-for-write '.

Это из документации shell-command.

person Thomas    schedule 28.04.2011