Вывод команды оболочки emacs не показывает цвета ANSI, но код - PullRequest
6 голосов
/ 28 апреля 2011

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

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

Есть ли способ получить его с цветом и UTF8?

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

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

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

Ответы [ 2 ]

20 голосов
/ 28 апреля 2011

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))))))
1 голос
/ 28 апреля 2011

О UTF-8:

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

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

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

...