· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Emacs Change Colors

Emacs 색상 바꾸기





Emacs에서 배경 색상, 전경 색상(일반 글꼴 색상), 커서 색상, 마우스 포인트 색상을 바꾸는 법을 설명합니다.

현재 Emacs (version 22.0 기준)는 터미널 환경 이외에 여러 가지 window toolkit을 써서 컴파일할 수 있습니다. 예를 들어, 'athena', 'motif', 'gtk' 중 하나를 선택할 수 있는데, 전통적으는 athena widget을 가장 많이 써 왔지만, 앞으로는 'gtk'가 가장 인기있는? window toolkit이 될 것입니다.

어떤 toolkit을 쓰느냐에 상관없이, Emacs의 색상을 바꿀 수 있는데, 크게 두 가지 방법이 존재합니다. 첫째, 전통적인 X server resource를 쓰는 방법이 있고, 둘째, emacs 자체에서 제공하는 lisp 함수를 써서 바꿀 수 있습니다. 세째, 쉽게 설정할 수 있게 customize buffer를 쓸 수 있습니다. 각각 장단점이 있는데, 첫번째 방법을 써서 색상을 지정하면, emacs를 다시 시작해야만 바뀐 내용을 적용할 수 있다는 단점이 있지만, 설정 방식은 더 쉽습니다. 두번째 방법을 쓰면, 동적으로 언제든지 emacs의 색상을 바꿀 수 있다는 장점이 있지만, lisp 언어에 대해 아주 약간이나마 알아야 한다는 단점이 있습니다. 세번째 방법은 가장 쉽기 때문에, 초보자들이 선호하는 방법입니다.

또한 이 글에 있는 방법 말고, 전반적으로 look & feel을 바꾸는 Theme 기능을 쓰는 것이 훨씬 더 간편하고 편리합니다. 자세한 것은 EmacsColorTheme을 보기 바랍니다.

1. X server resource를 써서 바꾸는 방법


이 글은 X server resource를 바꾸는 일반적인 방법에 대해 다루는 글이 아니기 때문에, 자세한 사항은 생략합니다. X server resource에 대해 좀 더 자세한 글을 원하시면 따로 연락하시기 바랍니다.

첫째, 크게 시스템 전체에 영향을 미치도록 설정을 할 수가 있고, 둘째, 현재 사용자에게만 영향을 주게 설정할 수 있는데, 여기에서는 현재 사용자에게만 설정할 수 있는 방법에 대해 알아보겠습니다.

일단 Emacs를 처음 설치하고 실행하면 다음과 같은 화면을 얻을 수 있습니다:

emacs-splash-noinit.png
[PNG image (32.43 KB)]

먼저, 사용자의 홈 디렉토리에 있는 .Xdefaults 파일을 편집합니다. (없다면 새로 만들면 됩니다.)

그리고 다음과 같이 입력합니다:

Emacs.Background:   black
Emacs.Foreground:   powder blue
Emacs.pointerColor: white
Emacs.cursorColor:  white

그리고 나서 다시 실행하면, 다음과 같이 색상이 바뀐 것을 볼 수 있습니다:

emacs-splash-colors.png
[PNG image (32.74 KB)]

여기까지 따라왔다면, 여러분이 원하는 색상으로, 마음대로 바꾸기를 원할 것입니다. 그러자면, 원하는 색상의 이름을 알아내서 그 이름으로 적절하게 아까 입력했던 내용을 바꾸면 됩니다. 원하는 색상의 이름을 알기 위해서, 가장 일반적인 방법은 /usr/X11R6/lib/X11/rgb.txt를 보는 것입니다. 현재, (Wed Dec 2 17:57:12 KST 2009) 제 Gentoo 시스템에서는 파일 위치가 /usr/share/X11/rgb.txt 이네요.) 대충, 다음과 같은 형식으로 되어 있습니다.

$ head /usr/X11R6/lib/X11/rgb.txt
 ! $Xorg: rgb.txt,v 1.3 2000/08/17 19:54:00 cpqbld Exp $
255 250 250             snow
248 248 255             ghost white
248 248 255             GhostWhite
245 245 245             white smoke
245 245 245             WhiteSmoke
220 220 220             gainsboro
255 250 240             floral white
255 250 240             FloralWhite
253 245 230             old lace
$ _

포맷은 간단합니다. "빨강(r) 녹색(g) 파랑(b) 색상이름" 형태입니다. 그러나 색상에 전문가가 아닌 이상, RGB 값만 보고, 이게 어떤 색상인지 알기 쉽지 않습니다. 쉽게 보기 위해서, emacs를 띄운 후 M-x list-colors-display를 실행하면 다음과 같은 화면을 얻을 수 있습니다:

emacs-list-colors-display.png
[PNG image (35.8 KB)]

이제, 원하는 대로 색상을 바꿀 수 있겠죠? :) 색상명이 잘 안보이실 경우 http://my.netian.com/~cajunlee/rgb.htm 여기를 보셔도 됩니다.

만약, 올바르게 색상이 바뀌지 않는다면 아래 단락을 읽어 보시기 바랍니다.

얼마 전까지만 해도 X server resource를 설정하는 사용자 파일이 $HOME/.Xdefaults였는데, 최신의 xorg의 경우 $HOME/.Xdefaults-$HOSTNAME을 씁니다. 따라서 이 경우, .Xdefaults-$HOSTNAME이 .Xdefaults를 가리키도록 심볼릭 링크를 걸어주거나:

$ cd
$ ln -s .Xdefaults .Xdefaults-$HOSTNAME
$ _

또는 사용자 파일 이름을 설정하는 XENVIRONMENT 변수를 설정하는 script를 $HOME/.bash_profile이나 $HOME/.profile에 넣어주면 됩니다. (bash 기준)

if [ -f $HOME/.Xdefaults ]; then
  export XENVIRONMENT=$HOME/.Xdefaults
fi

2. Emacs Lisp을 써서 바꾸는 방법


Lisp을 모른다고 너무 겁먹지 않으셔도 됩니다. 저도 잘 모르니깐 쉽게 설명하겠습니다. 일단 다음과 같은 네 함수를 쓰시면 됩니다:

(set-background-color COLOR-NAME)
(set-foreground-color COLOR-NAME)
(set-cursor-color COLOR-NAME)
(set-mouse-color COLOR-NAME)

예를 들어, 앞 단락에서 설정한 것과 똑같이 설정하려면 다음과 같이 하면 됩니다:

(set-background-color "black")
(set-foreground-color "white")
(set-cursor-color "yellow")
(set-mouse-color "yellow")

물론 이 내용은 $HOME/.emacs 파일에 저장해 두어야 합니다.

쉽죠? 물론 더 어려운 방법도 있습니다. (힌트. Frame parameter를 직접 바꾸는 것인데, 자세한 것은 elisp manual을 참고하기 바랍니다.)

3. Customize Buffer를 써서 바꾸는 법

emacs는 사용자가 쉽게 여러가지 설정을 바꿀 수 있도록 customize buffer를 제공합니다. customize buffer를 간단히 소개하면, 일반 GUI 프로그램들의 Options 다이얼로그 박스나, Preference 다이얼로그를 생각하면 됩니다. 먼저 customize buffer를 한 번 보는게 이해가 빠를 것 같습니다:

emacs-customize-buffer.png
[PNG image (31.55 KB)]

위 Customize buffer를 띄우기 위해서는 두가지 방법이 있습니다. 첫째, 메뉴에서 ''''''Options->''''''Customize Emacs->''''''Toplevel Customization Group을 선택하거나 M-x customize를 실행하면 됩니다.

각 서브 그룹를 선택하기 위해서는 해당 버튼을 마우스 왼쪽 버튼으로 누르거나, 커서를 버튼 위에 위치시키고, <RET>을 누르면 됩니다. 일단 서브 그룹으로 들어간 상태에서 상위 그룹으로 돌아가기 위해서는 'u' (up을 뜻함)를 누르면 됩니다.

여기에서 "Faces" 그룹을 선택하고 (즉, "Faces group" 옆에 있는 "Go to Group"이란 버튼을 왼쪽 버튼으로 누르고), 다시 "Basic Faces" 그룹을 선택합니다. 그리고 나서 "Default" face의 옆에 있는 Show Face 버튼을 누릅니다. 여기까지 왔으면 대충 다음과 같은 화면을 볼 수 있습니다:

emacs-customize-default-face.png
[PNG image (31.61 KB)]

참고로, Emacs에서 face란 글꼴(font), 배경색(background), 전경색(foreground), 밑줄 등 속성의 집합을 의미합니다. 한마디로 글꼴에 적용될 수 있는 모든 속성을 뜻합니다. Emacs에는 여러가지 face가 미리 정의되어 있는데, 여기서 default face는 모든 face들의 부모 격입니다. 따라서 모든 face의 글꼴을 한번에 바꾸려 하거나, 모든 글꼴의 배경 색상을 바꾸고 싶다면, default face의 속성을 바꾸면 됩니다.

일단 여기에서 우리가 관심을 가져야 할 부분은, 배경 색상과 전경 색상이므로, "foreground"와 "background" 부분을 바꿔줍니다. 앞 방법과 마찬가지로 foreground는 "powder blue"로, background는 "black"으로 바꿉니다. (<RET>을 치지 않도록 조심하기 바랍니다.)

그 다음 Default face의 바로 밑에 있는 "State" 버튼을 누르면 서브 메뉴가 뜹니다. 여기에서 "Save for Future Sessions"을 선택하면, 자동으로 $HOME/.emacs에 기록을 하고, 그 내용이 반영됩니다:

emacs-customize-default-face-save.png
[PNG image (35.26 KB)]


아래는 내용 변경이 반영된 화면입니다:

emacs-customize-default-face-done.png
[PNG image (33.6 KB)]

참고로 관심이 있다면 $HOME/.emacs 파일을 열어서 customize buffer가 어떤 식으로 설정을 저장하는지도 보기 바랍니다. 꼭 모든 lisp 코드를 이해할 필요는 없습니다:

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 )
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(default ((t (:stipple nil :background "black" :foreground "powder blue" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 90 :width normal :family "adobe-courier")))))

4. 우선 순위


X server resource를 설정하는 방법은, emacs가 실행되기 전에 먼저 색상을 설정합니다. 그리고 lisp으로 설정하는 방법은, emacs가 시작한 다음, 설정 파일을 읽어서 설정합니다. 따라서 두 가지 방식 모두 썼다면 후자인, lisp으로 설정하는 방식이 마지막으로 적용되게 됩니다.

끝. B) -- [http]신성국

  • TODO 색상 이름 대신 RGB 값을 직접 지정하는 법.
  • TODO X와 emacs version 정보에 대한 링크 추가.
  • TODO Customize buffer를 이용, 커서와 마우스 색 지정.
  • TODO 왜 배경/전경을 바꾸기 위해 face 속성을 바꿔야 하는가 설명.




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-12-02 17:54:30
Processing time 0.0106 sec