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

Emacs 글꼴 바꾸기



이 글은 X용 Emacs에서 손쉽게 글꼴 (fontset)을 설정하는 방법에 대해 설명합니다. 먼저 EmacsChangeColors를 읽고, 원하는 색상을 설정하는 방법을 보시기를 추천합니다. 이 글에서 설명하지 않는 세세한 부분이 설명되어 있기 때문입니다.


1. X 글꼴 기본 지식과 필요 글꼴 설치


X Window system에서 emacs는 X에서 제공하는 글꼴을 써서 텍스트를 표시합니다. 아쉽게도? 아직은 Xft와 같은 확장 라이브러리를 지원하지 않습니다. 여러분이 쓰고 있는 시스템에서 어떤 글꼴을 제공하는지 알기 위해서는 크게 두 가지 유틸리티를 쓸 수 있습니다. 하나는 글꼴 이름을 보여주는 xlsfonts(1)이고, 다른 하나는 글꼴의 대체적인 모양을 쉽게 볼 수 있게 해 주는 xfontsel(1)입니다. (참고로 두 유틸리티 모두 X가 동작하고 있을 때에만 쓸 수 있습니다.) xlsfonts(1)는 ls(1) 명령과 비슷하게 설치되어 있는 글꼴의 목록을 터미널에 출력해 줍니다. 목록이 꽤 길기 때문에 보통 more(1)나 less(1)의 입력으로 파이프를 전달해서 봅니다:

$ xlsfonts | less
-admas-ethiomx16f-medium-r-normal--0-0-100-100-m-0-ethiopic-unicode
-admas-ethiomx16f-medium-r-normal--16-150-100-100-m-160-ethiopic-unicode
-admas-ethiomx16f-medium-r-normal--24-225-100-100-m-240-ethiopic-unicode
-adobe&cbs&yasuoka-fixed-medium-r-normal--0-0-75-75-c-0-jisx0212.1990-0
...
$ _

xfontsel(1)은 그나마? visual하게 글꼴에 대해 알아볼 수 있습니다. 사용법은 실행하고 나면 대충 알 수 있습니다:

xfontsel.png
[PNG image (8.32 KB)]

일단 먼저, X 글꼴이 어떤 식으로 이름이 붙는지 알 필요가 있습니다. 가령 글꼴 이름이 다음과 같다고 가정해 봅시다: -adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1

이 경우, '-'로 구별되는 각 항목을 다음과 같이 해석합니다:
-MAKER-FAMILY-WEIGHT-SLANT-WIDTHTYPE-STYLE...
     ...-PIXELS-HEIGHT-HORIZ-VERT-SPACING-WIDTH-REGISTRY-ENCODING
짧게 각 항목의 의미를 설명하면:
  • MAKER - 글꼴 제작자
  • FAMILY - 글꼴 이름
  • WEIGHT - 굵은 글꼴(bold), 보통(normal), 가는 글꼴(light)등의 속성
  • SLANT - 기울기 기정. 로만(r), 이탤릭(i), 오블리크(o) 등
  • WIDTHTYPE - 글꼴 폭 타입
  • STYLE - 스타일
  • PIXELS - 글꼴 크기 (픽셀 단위의 높이)
  • HEIGHT - 글꼴 크기 (포인트 단위의 높이)
  • HORIZ - 수평 해상도
  • VERT - 수직 해상도
  • SPACING - 가변 폭(p)인지 고정폭(m)인지 등을 지정.
  • WIDTH - 픽셀 단위로 각 글자의 평균 폭
  • REGISTRY, ENCODING - character set 지정
입니다. 일반적으로 이 모든 것을 다 알 필요는 전혀! 없습니다. 다만 MAKER, FAMILY, WEIGHT, SLANT, PIXELS, REGISTRY 정도만 알고 쓰면 됩니다. 시험삼아 xfontsel(1)을 실행시켜서 여러가지를 바꿔가며 테스트해보면 대충 어떤 의미로 쓰이는지 금방 알 수 있습니다.

Emacs에서 영어만을 쓴다면 상관없겠지만, 한글을 비롯, 여러 가지 언어를 쓸 필요가 있다면, 각 나라별로 가장 기본적인? 글꼴을 시스템에 설치하는 것이 좋습니다. 각 나라별 글꼴이 없다고 걱정할 필요는 없습니다. 이 목적으로 이미 글꼴 패키지가 나와 있기 때문입니다. 먼저 xfontsel(1)을 실행시켜서 MAKER에 (xfontsel에서는 'fndry' 항목) "etl"이 있는지 확인합니다. 있으면 설치된 것이기 때문에 더 이상 작업이 필요없지만, 없다면 intlfonts라는 패키지를 설치하기 바랍니다 ([http]intlfonts 홈페이지).
  • Redhat 또는 Fedora Core 사용자는 소스를 받아서 설치.
  • SuSE 사용자는 intlfonts-bdf-X.Y.Z.noarch.rpm과 intlfonts-ttf-X.Y.Z.noarch.rpm을 설치.
  • Gentoo 사용자는 emerge intlfonts 실행.
  • Debian 사용자는 apt-get install emacs-intl-fonts 실행.
  • Slackware 사용자는 소스를 받아서 설치.
설치 후, emacs를 실행시켜서, "C-h h"를 실행하면, 각 나라별로 인사말을 확인할 수 있습니다:

emacs-hello.png
[PNG image (33.3 KB)]

2. Fontset의 이해

여러 나라 글꼴을 지원하기 위해, Emacs는 fontset이라는 X resource를 씁니다. 뭐 대단한 것은 아니고, 여러 글꼴을 하나로 묶어서 여러 encoding을 처리할 수 있게 하는 것입니다.

여러분이 특별히 지정하지 않더라도, emacs는 기본적으로 두 개의 fontset을 가지고 있습니다. 하나는 여러분이 emacs를 실행했을 때 기본적으로 쓰여지는 startup fontset이고, 하나는 여러 언어를 동시에 쓸 수 있도록 만들어진 standard fontset입니다. 기본적으로 emacs는 startup fontset을 써서 실행되게 되어 있지만, standard fontset을 쓰게 하려면 다음과 같이 실행하면 됩니다:

$ emacs -fn fontset-standard

Startup fontset을 쓴 emacs의 screenshot은 다음과 같습니다:


Standard fontset을 쓴 emacs의 screenshot은 다음과 같습니다:

emacs-standard-fontset.png
[PNG image (36.08 KB)]

따로 여러분이 직접 글꼴을 바꾸기 위해서는 fontset을 직접 만들어 주어야 합니다. Fontset은 대개 X server resource의 형태로 정의하며, 대개 $HOME/.Xdefaults에 기록됩니다. (Debian의 경우에는 $HOME/.Xresources에 기록한후에 "xrdb -merge ~/.Xresources"를 실행시켜주면 됩니다.) 자세한 것은 EmacsChangeColors를 참고하기 바랍니다.) Fontset은 다음과 같은 꼴로 정의합니다:

FONTPATTERN, [CHARSETNAME:FONTNAME]...
일단, fontset의 이름을 지어야 합니다. 보통 fontset에 쓰이는 가장 일반적인 글꼴의 이름을 쓰는데, 이름의 마지막 두 개의 항목, 즉 앞 장에서 설명한 REGISTRY와 ENCODING을 빼고, REGISTRY 자리에 "fontset"을, ENCODING 자리에 이 fontset을 대표하는 짧은 이름을 씁니다. (잘 이해가 되지 않으면, 조금 뒤에 나오는 예를 참고하기 바랍니다.)

그 다음에는 쓸 character set 이름, ":", 글꼴 이름 순으로 차례로 나열합니다. 이 것을 모두 한 줄에 쓰기 힘들기 때문에 보통 백슬래시 문자를 써서 다음 줄로 이어씁니다. 예를 들면 다음과 같습니다:

! My favorite emacs fontset.
Emacs.Fontset-0:-*-lucidatypewriter-*-*-*-*-14-*-*-*-*-*-fontset-lucida14,\
          ascii:-*-lucidatypewriter-*-*-*-*-14-*-*-*-*-*-*-1, \
 korean-ksc5601:-*-gulimche-*-*-*-*-14-*-*-*-*-180-ksc5601*-*

위는 fontset은 이름이 "lucida14"이고, ASCII character-set을 쓴 문자는 "-*-lucidatypewriter-*-*-*-*-14-*-*-*-*-*-*-1" 글꼴을 써서 표시하며, korean-ksc5601 character-set을 쓴 문자(즉 한글)는 "-*-gulimche-*-*-*-*-14-*-*-*-*-180-ksc5601*-*" 글꼴을 써서 표시합니다.

주의할 것은, 글꼴을 위와 같이 지정하기 전에 반드시 xfontsel(1)과 같은 유틸리티를 써서, 해당하는 글꼴이 쓸 수 있는 이름인지 확인을 해야 합니다. 잘못된 글꼴 이름을 쓴 경우, 다음에 emacs를 실행할 때, 제대로 실행되지 않을 수 있습니다.

위를 저장하고 emacs를 다시 실행해도 글꼴이 바뀌지는 않습니다. emacs 창 가운데 쯤, 마우스 포인터를 위치시키고, shift 키를 누른 상태에서 마우스 왼쪽 버튼을 누르면, 글꼴을 선택할 수 있는 화면이 나오고, 여기에서 우리가 만든 fontset인 "lucida14"가 있는 것을 확인할 수 있습니다.

emacs-sel-fontset.png
[PNG image (21.39 KB)]

이것을 선택하고 나면, 비로소! 글꼴이 바뀝니다. 아래는 이 상태에서 M-x display-splash-screen을 실행한 상태의 screenshot입니다.

emacs-fontset-lucida14.png
[PNG image (36.16 KB)]

물론 매번 이런 식으로 글꼴을 바꿔 주기란 귀찮은 일입니다. 아까 .Xdefaults에 기록할 때, 아래 줄을 추가해주면, emacs가 시작할 때 자동으로 지정한 fontset을 쓰게 합니다:

! Set the default fontset of emacs
Emacs.Font: fontset-lucida14

3. 여러 개 Fontset 정의


눈치가 빠른 분은 이미 아시겠지만, 여러 개의 fontset을 정의하는 것도 간단합니다. 앞에서 fontset을 정의할 때 Emacs.Fontset-0이라고 쓴 것을 알 수 있습니다. 두번째 fontset을 정의할 때에는 Emacs.Fontset-1을, 세번째는 Emacs.Fontset-2를 쓰시면, 여러 개의 fontset을 만들 수 있습니다.

4. Fontset 정의 예제

아래는 제 gentoo 시스템의 emacs fontset에 대한 정보입니다. 참고하시기를 바랍니다:

Emacs.Fontset-0:-*-lucidatypewriter-*-*-*-*-14-*-*-*-*-*-fontset-lucida14,\
          ascii:-*-lucidatypewriter-*-*-*-*-14-*-*-*-*-*-*-1, \
 korean-ksc5601:-*-gulim-bold-*-*-*-14-*-*-*-*-140-ksx1001.1998-*

Emacs.Fontset-1:-etl-fixed-medium-r-normal-*-14-*-*-*-*-*-fontset-etl14,\
          ascii:-etl-fixed-medium-r-normal-*-14-*-iso8859-1,\
 korean-ksc5601:-*-gulim-medium-r-normal-*-14-*-ksx1001.1998-*

Emacs.Fontset-2:-etl-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-etl16,\
          ascii:-etl-fixed-medium-r-normal-*-16-*-*-*-*-*-*-1, \
 korean-ksc5601:-*-gulim-medium-r-normal-*-16-*-*-*-*-*-ksx1001.1998-*

Emacs.Fontset-3:-etl-*-medium-r-normal-*-18-*-*-*-*-*-fontset-etl18,\
          ascii:-etl-*-medium-r-normal-*-18-*-*-*-*-*-*-1, \
 korean-ksc5601:-*-gulim-medium-r-normal-*-18-*-*-*-*-*-ksx1001.1998-*

Emacs.Fontset-4:-etl-*-medium-r-normal-*-24-*-*-*-*-*-fontset-etl24,\
          ascii:-etl-*-medium-r-normal-*-24-*-*-*-*-*-*-1, \
 korean-ksc5601:-*-gulim-medium-r-normal-*-24-*-*-*-*-*-ksx1001.1998-*

Emacs.Fontset-5:-*-lucidatypewriter-*-*-*-*-18-*-*-*-*-*-fontset-lucida18,\
          ascii:-*-lucidatypewriter-*-*-*-*-18-*-*-*-*-*-*-1, \
 korean-ksc5601:-*-gulim-bold-*-*-*-18-*-*-*-*-*-ksx1001*-*

Emacs.Fontset-6:-*-fixed-bold-*-*-*-14-*-*-*-*-*-fontset-fixed14,\
          ascii:-*-fixed-bold-*-*-*-14-*-*-*-*-*-iso8859*-*,\
 korean-ksc5601:-*-gulim-*-*-*-*-*-*-*-*-*-*-ksc5601*-*

Emacs.Font: fontset-lucida14

제 시스템에서 위에서 설정한 각각의 fontset을 쓴 screenshot은 다음과 같습니다.

4.1. lucida14

emacs-lucida14.png
[PNG image (30.72 KB)]

4.2. lucida18

emacs-lucida18.png
[PNG image (37.88 KB)]

4.3. etl14

emacs-etl14.png
[PNG image (27.54 KB)]

4.4. etl16

emacs-etl16.png
[PNG image (29.31 KB)]

4.5. etl18

emacs-etl18.png
[PNG image (31.82 KB)]

4.6. etl24

emacs-etl24.png
[PNG image (41.11 KB)]

5. Emacs 23버젼에서의 글꼴 설정


주의!!! Emacs Version 23은 현재 CVS 개발 버전이기 때문에, 아래 방법이 동작할 수도, 하지 않을 수도 있으며, 최종적으로 아래 방식보다 더 좋은 방식이 나올 수도 있습니다.

현재 개발 버전인 Emacs 23.x에는 Xft를 써서 Truetype font를 쓸 수 있는 기능이 들어 있습니다. 많은 분들이 보기 좋은 폰트를 쓰는 것을 희망하기 때문에, 아직 안정되지 않았지만 Emacs 23.x를 쓰는 분들이 많습니다. 여기에는 간단하게 Truetype font들을 설정하는 방법에 대해 다루겠습니다.

초보자라면, Emacs를 시작한 다음, [Option]->[Set Default Font...]에서 폰트를 설정하고, [Option]->[Save Options]를 눌러서 상태를 저장하면 됩니다.

조금 고급 사용자라면 두 가지 방법을 쓸 수 있는데, 하나는 X resource에서 폰트를 설정하는 것이고, 다른 하나는 lisp 코드에서 설정하는 방법입니다. (꼭 Truetype이라서가 아니라 기존 폰트도 두 방식 모두 쓸 수 있습니다.)

5.1. Xft X Resource Setting

X resource에서 설정하는 방법은 기존 bitmap font와 같습니다. 다만 FAMILY 이름만 truetype font로 바꿔주면 됩니다.

(그냥 Emacs.Font를 쓰지 않고 Emacs.Fontset을 쓰는 이유는, 보통 영문 폰트와 한글 폰트를 묶어서 쓰기 때문입니다. 원래 fontconfig 설정에 따라 대체 폰트를 고르는 것이 정석이나, Emacs는 fontconfig 이전부터 이런 기능을 제공하기 때문에, 설정 자체가 충돌하는 것이 현실입니다. 만약 사용자의 fontconfig 설정이 이미 잘 되어 있다면, 굳이 Emacs의 fontset 기능을 쓰지 않고, 단순히 Emacs.Font만 써 주는 것으로도 가능할 것입니다.)


Emacs.Fontset-0:-*-Bitstream Vera Sans Mono-*-*-*-*-14-*-*-*-*-*-fontset-vera14,\
          latin:-*-Bitstream Vera Sans Mono-*-*-*-*-14-*-*-*-*-*-*-*, \
         hangul:-*-NanumGothic_Coding-*-*-*-*-*-*-*-*-*-*-*-*

Emacs.Fontset-1:-*-DejaVu Sans Mono-*-*-*-*-14-*-*-*-*-*-fontset-dejavu14,\
          latin:-*-DejaVu Sans Mono-*-*-*-*-14-*-*-*-*-*-*-*, \
         hangul:-*-NanumGothic_Coding-*-*-*-*-*-*-*-*-*-*-*-*

Emacs*Fontset-2:-*-Consolas-*-*-*-*-14-*-*-*-*-*-fontset-consolas,\
          latin:-*-Consolas-*-*-*-*-14-*-*-*-*-*-*,\
        hangul:-*-NanumGothic_Coding-*-*-*-*-*-*-*-*-*-*-*

Emacs*Fontset-3:-*-Monaco-*-*-*-*-14-*-*-*-*-*-fontset-monaco,\
          latin:-*-Monaco-*-*-*-*-14-*-*-*-*-*-*,\
        hangul:-*-NanumGothic_Coding-*-*-*-*-*-*-*-*-*-*-*

Emacs.Font: fontset-vera14

이 방식은 (기존 emacs version에서도 마찬가지) 여러 개의 폰트셋을 지정할 수 있고, 또 shift + left mouse button click으로 메뉴를 띄워서 접근할 수 있다는 장점이 있습니다.

다만, 단점으로, 기존 emacs와 emacs-23을 병행하는 경우, 기존 emacs (version 22 이하)에서 true type 폰트를 이해할 수 없기 때문에, 다음과 같이 에러가 발생합니다:

$ emacs-22
No fonts match `-*-bitstream vera sans mono-*-*-*-*-14-*-*-*-*-*-*'
$ _


5.2. Xft Lisp Setting


이 방식은, X resource를 활용하지 않고, 직접 lisp 코드로 font를 지정하는 방법입니다. (즉 .emacs에 써 줌) 장점으로는 Emacs version에 따라 폰트를 따로 지정할 수 있다는 것이며, 단점으론 여러 개의 폰트를 손쉽게 바꿔줄 수 있는 기능(shift + left mouse click)을 쓸 수 없다는 것입니다.

물론 lisp 코드를 더 추가하면 shift + left mouse click 메뉴에도 등록할 수 있지만, 필요한 설명이 너무 많아서 생략~

따라서 아래와 같이 lisp 코드에서 xftp 함수로 Emacs에 xft 기능이 있는지 확인하는 함수를 만들었습니다:

(defun xftp (&optional frame)
  "Return t if FRAME support XFT font backend."
  (let ((xft-supported))
    (mapc (lambda (x) (if (eq x 'xft) (setq xft-supported t)))
          (frame-parameter frame 'font-backend))
    xft-supported))

그리고 나서 아래와 같이 폰트 설정을 합니다:

(when (xftp)
  (let ((fontset "fontset-default"))
    (set-fontset-font fontset 'latin
                      '("DejaVu Sans Mono" . "unicode-bmp"))
    (set-fontset-font fontset 'hangul
                      '("NanumGothic_Coding" . "unicode-bmp"))
    (set-face-attribute 'default nil
                        :font fontset
                        :height 110)))

5.3. Screenshots


두 스크린 샷 모두 EmacsColorTheme 패키지에서 제공하는 (color-theme-robin-hood)를 사용했으며, 앞 X Resource Setting 방법을 써서 설정한 화면입니다.

Bitstream Vera Sans Mono + 나눔고딕_코딩:

emacs-xft-vera_1.png
[PNG image (108.63 KB)]

DejaVu Sans Mono + 나눔고딕_코딩:

emacs-xft-dejavu_1.png
[PNG image (101 KB)]

Consolas + 나눔고딕_코딩:

emacs-xft-consola.png
[PNG image (95.61 KB)]

Monaco + 나눔고딕_코딩:

emacs-xft-monaco.png
[PNG image (87.21 KB)]

5.4. X Resource 기타


어떤 분이 아래와 같은 내용을 올려 주셨는데, 설명을 안하셨네요.. 이 부분은 제가 특별히 설명드릴 능력이 안되는군요. 현재, 개발 버전 Emacs의 경우 Xft의 설정을 system-wide에서 읽어오지 않고 X resource에서 읽어온다고 하는데 정확히 확인해보지는 않았습니다. 참고삼아 남겨 둡니다.

Emacs.font: 굴림체-13
Emacs.FontBackend: xft
Xft.dpi: 96
Xft.antialias: 0
Xft.hinting: 0
Xft.hintstyle: hintfull
Xft.rgba:rgb


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

  • TODO 좀 더 자세히 써야 하나??

윈도우에서의 설정도 다루어 주심 감사하겠습니다. 특히 UTF-8로 .... 가변 글꼴이 나오는 방법이 없을 까요 info를 보면 영문은 크고 진하게 나오는데 한글은 안되는 군요. --HoSungKim 2006-05-02

=> 죄송합니다. :( 제가 Windows에서는 Emacs를 쓰지 않아서.. 잘 모르겠군요. [http]신성국


andale mono나 courier new와 같이 중간이 띄어쓰기가 있는 글꼴의 경우에는 어떻게 하는지 궁금합니다. 여러가지 시도해보았는데 안되네요. (위키, 아직 익숙치 않습니다) --Amunsen 06-12-14

=> 중간에 띄어쓰기가 있어도 상관없습니다. 그대로 띄어쓰면 됩니다. [http]신성국



좋은 내용 감사합니다. 그림의 emacs는 메뉴가 아주 예쁜 글씨로 나오는군요. 어떤 이유인지 궁금합니다. 혹시 xft branch를 사용하셨는지요? --Oppor 07-01-19

=> 아니요, 질문하셨을때 그림의 emacs는 모두 bitmap 글꼴입니다. [http]신성국








sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-12-03 13:35:47
Processing time 0.0260 sec