Emacs의 ansi color 설정
Emacs에서 shell-mode 에서 뿌리는 ansi color가 테마 색이랑 잘 맞지 않아서 가시성이 떨어지거나 할 때가 있다. 내 경우는 color-theme-tomorrow-night-eighties이나 color-theme-tomorrow-night-blue 테마를 사용하는데, 둘 다 ansi blue 색상의 가시성이 떨어져서 ls를 치면 디렉토리가 잘 보이지 않는 문제가 있었다.
물론 입맛대로 ansi color 각각에 해당하는 색상을 지정해 줄 수 있다. ansi-color.el 라이브러리를 통해 이러한 일을 할 수 있는데, 아래는 내 컬러값 세팅 예시이다.
(eval-after-load 'ansi-color '(progn (setq ansi-color-names-vector ["black" "tomato" "chartreuse1" "gold1" "DodgerBlue3" "MediumOrchid1" "cyan" "white"]) (setq ansi-color-map (ansi-color-make-color-map))))
ansi-color-names-vector에 아래 표에 보이는 것과 같이 코드 값 순서대로 원하는 색상을 적어 주면 된다. 색상은 "black"처럼 이름으로 지정해 줘도 되지만, "#000000"처럼 RGB값을 지정해 줘도 된다. M-x list-colors-display RET를 사용하면 사용할 수 있는 이름과 색상을 열람할 수 있다.
Intensity | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
Normal | Black | Red | Green | Yellow | Blue | Magenta | Cyan | White |
Bright | Black | Red | Green | Yellow | Blue | Magenta | Cyan | White |
ansi-color-names-vector을 세팅해 주면, GNU Emacs 24.5 기준으로 shell-mode에서는 정상적으로 색상이 변경되지만 term-mode에서는 지정한 색상에 맞춰 ansi color가 변경되지 않는다. 이유는 term-mode는 ansi-color.el 라이브러리를 사용하지 않고, ansi color face를 별도로 정의하고 있어서 그런데, ansi-color-names-vector에 지정한 색상을 term-mode에도 동일하게 사용하려면 아래의 구문을 설정에 추가하자.
;; To make colors in term mode derive emacs' ansi color map (eval-after-load 'term '(let ((term-face-vector [term-color-black term-color-red term-color-green term-color-yellow term-color-blue term-color-magenta term-color-cyan term-color-white])) (require 'ansi-color) (dotimes (index (length term-face-vector)) (let ((fg (cdr (aref ansi-color-map (+ index 30)))) (bg (cdr (aref ansi-color-map (+ index 40))))) (set-face-attribute (aref term-face-vector index) nil :foreground fg :background bg)))))
해 보니까 eshell-mode의 경우도 ansi-color-names-vector에 따라 변경이 안되는 것 같긴 한데 내 경우는 eshell을 사용하지 않아서 잘 모르겠네. EmacsWiki에서 가이드 하는 방법이 잘 안 되는 것 같기도 하고... 이건 나중에 내가 eshell을 자주 쓰게 되면 업데이트 하겠지 -_-
'Emacs' 카테고리의 다른 글
Emacs의 버퍼 변경 알림 프롬프트에서 변경 내용 표시하기 (0) | 2016.04.01 |
---|---|
Emacs spell checker (0) | 2016.03.11 |
auto-complete-c-headers 설정 (1) | 2016.03.03 |
자동 byte-compile 설정 (0) | 2016.03.03 |
Emacsclient의 활용 (0) | 2016.03.02 |