Как получить цвета в выводе (emacs) shell-команды? - PullRequest
3 голосов
/ 18 января 2011

При выполнении команды shell-command выходные данные, отображаемые в соответствующем буфере, не окрашиваются.

Это особенно раздражает, когда вы вызываете среду тестирования (выводя желтый / зеленый / красный ...) из Emacs.

Как я могу сконфигурировать или расширить emacs, чтобы иметь команду оболочки , позволяющую выводить в оболочке цветной вывод и сохранять цвета при представлении этого вывода?

Спасибо!

пс. Я использую оболочку Bash в системе UN * X.

Ответы [ 3 ]

3 голосов
/ 19 января 2011

Это, вероятно, то, что вы хотите:

(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
2 голосов
/ 19 января 2011

Вы можете реализовать свой собственный shell-execute, что-то вроде

(defun my-shell-execute(cmd)
   (interactive "sShell command: ")
   (shell (get-buffer-create "my-shell-buf"))
   (process-send-string (get-buffer-process "my-shell-buf") (concat cmd "\n")))
0 голосов
/ 08 марта 2017

Это добавляет совет для запуска ansi-color-apply-on-region на минибуфере после завершения команды оболочки:

(require 'ansi-color)

(defun ansi-color-apply-on-buffer ()
    (ansi-color-apply-on-region (point-min) (point-max)))

(defun ansi-color-apply-on-minibuffer ()
  (let ((bufs (remove-if-not
               (lambda (x) (string-starts-with (buffer-name x) " *Echo Area"))
               (buffer-list))))
    (dolist (buf bufs)
      (with-current-buffer buf
        (ansi-color-apply-on-buffer)))))

(defun ansi-color-apply-on-minibuffer-advice (proc &rest rest)
  (ansi-color-apply-on-minibuffer))

(advice-add 'shell-command :after #'ansi-color-apply-on-minibuffer-advice)
;; (advice-remove 'shell-command #'ansi-color-apply-on-minibuffer-advice)

Это не зависит от режима оболочки или коминта.Я сопровождаю это чем-то вроде следующего, чтобы получить хороший результат теста (зеленый смайлик с количеством успешных тестов.

(defun add-test-function (cmd)
  (interactive "sCommand to run: ")
  (setq my-testall-test-function cmd)
  (defun my-testall ()
    (interactive)
    (shell-command my-testall-test-function))
  (local-set-key [f9] 'my-testall))
...