GNUEmacsManual:D

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

X 옵션과 자원

X 를 사용하는 일반 프로그래램과 마찬가지로 X 자원을 이용해 Emacs 동작에서 X 와 관련된 몇 가지 측면들을 맞춤화할 수 있다.


Emacs 를 GTK+ 지원으로 컴파일하면 메뉴 바, 스크롤 바, 대화상자와 같은 다양한 그래픽 위젯의 모양은 "GTK 자원(GTK resources)"으로 결정된다. Emacs 가 GTK+ 지원 없이 빌드되면 이러한 위젯들의 모양은 추가 X 자원에 의해 결정된다.


MS-Windows 에서는 시스템 레지스트리를 이용해 동일한 측면들 중 몇 가지를 맞춤화할 수 있다(486 페이지의 C.4.3절 [MS-Windows 레지스트리(MS-Windows Registry)]를 참고한다.


X 자원(X Resources)

X Windows System 에서 실행되는 프로그램은 클래스와 자원으로 이루어진 계층구조에서 사용자 옵션을 조직한다. 사용자의 X 자원 파일(X resource file)에서 이러한 옵션에 대한 기본값을 명시할 수 있는데, 주로

~/.Xdefaults

또는

~/.Xresources

로 명명된다. 이 파일에 일어나는 변경 사항이 즉시 효력을 발휘하는 것은 아닌데, 그 이유는 X 서버가 고유의 자원 목록을 보관하기 때문으로, 목록을 업데이트하려면

xrdb

를 사용하면 된다(예: '

xrdb ~/.Xdefaults

'.)


(MS-Windows 시스템은 X 자원 파일을 지원하지는 않으며, 그러한 시스템에서 Emacs 는 Windows Registry 에서 X 자원을 검색하는데, 먼저 현재 사용자에게만 영향을 미치면서 시스템 전반적(system-wide) 설정을 오버라이드하는 '

HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs

' 키에서 검색한 후에, 시스템의 모든 사용자에게 영향을 미치는 '

HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs

' 를 검색한다. 메뉴 및 스크롤 바는 MS-Windows 에서 native 위젯에 해당하므로 Display Control Panel 의 시스템 전반적 설정을 통해서만 맞춤화할 수 있다. 아래 설명하는 바와 같이 '

-xrm

' 명령행 옵션을 이용해 자원을 설정할 수도 있다.)


X 자원 파일의 각 라인에는 하나의 옵션 또는 관련된 옵션의 집합체에 대한 값을 명시한다. 라인이 파일에서 표시되는 순서는 중요하지 않다. 각 자원 명세마다 프로그램명(program name)과 자원명(resource name)으로 구성된다. 이러한 이름에서는 대, 소문자 차이가 중요하다. 아래를 예로 들겠다.

emacs.cursorColor: dark green


프로그램명은 자원이 적용되는 실행 파일의 이름이다. Emacs 의 경우 주로 '

emacs

' 에 해당한다. Emacs 실행 파일의 이름과 상관없이 Emacs 의 모든 사례에 적용되는 정의를 명시하려면 '

Emacs

' 를 사용하라.


자원명은 프로그램 설정 이름이다. 가령 Emacs 는 텍스트 커서의 색상을 제어하는 '

cursorColor

' 자원을 인식한다.


자원은 명명된 클래스로 그룹화된다. 가령 '

Foreground

' 클래스는 '

cursorColor

', '

foreground

', '

pointerColor

' 자원을 포함한다(494 페이지의 D.2절 [자원 테이블(Table of Resources)] 참고). 자원의 이름 대신 클래스명을 이용하여 아래와 같이 클래스 내 모든 자원에 대한 기본값으로 명시하는 방법도 있다.

emacs.Foreground: dark green


inhibit-x-resources

변수를

nil

이 아닌 값으로 설정할 경우 Emacs 는 X 자원을 전혀 처리하지 않는다. '

-Q

' (또는 '

--quick

') 명령행 옵션으로 Emacs 를 호출할 경우

inhibit-x-resources

는 자동으로 t로 설정된다(480 페이지의 C.2절 [초기 옵션(Initial Options)] 참고).


Emacs에 대한 X 자원 테이블(Table of X Resources for Emacs)

이 테이블은 메뉴 바처럼 그래픽한 위젯의 모양을 제어하는 자원을 제외하고 Emacs 가 인식하는 X 자원의 이름을 열거한다.


background

(

Background

클래스)

배경색 (75 페이지의 11.9절 [색상(Colors)] 참고).


bitmapIcon

(

BitmapIcon

클래스)

윈도우 관리자(window manager)에게 Emacs 아이콘이 'on'일 경우 아이콘을 표시하고, 'off'일 경우 표시하지 않도록 지시한다. 아이콘에 대한 설명은 491 페이지의 C.11절 [아이콘 X(Icons X)]를 참고한다.


cursorColor

(

Foreground

클래스)

텍스트 커서 색상. Emacs가 시작할 때 이 자원이 명시되어 있으면 Emacs는 그 값을 cursor 겉모습의 배경색으로 설정한다(74 페이지의 11.8절 [겉모습(Faces)] 참고).


cursorBlink

(

CursorBlink

클래스)

시작 시 이 자원의 값이 'off', 'false', '0' 중 하나일 경우 Emacs는 Blink Cursor 모드를 끈다(86 페이지의 11.20절 [커서 표시(Cursor Display)] 참고).


font

(

Font

클래스)

default

겉모습에 대한 폰트명(168 페이지의 18.8절 [폰트(Fonts)] 참고). 폰트집합 이름을 명시할 수도 있다(192 페이지의 19.13절 [폰트집합(Fontsets)] 참고).


fontBackend

(

FontBackend

클래스) 폰트를 그리는 데에 사용할 백엔드를 콤마로 구분하고 우선순위 순으로 열거한 목록. 예를 들어 '

x, xft

'는 Emacs에게 X 코어 폰트 드라이버를 이용해 폰트를 그리도록 지시하고, 실패할 경우 Xft 폰트 드라이버를 사용하라고 지시한다. 보통 이 자원을 설정하지 않은 채 남겨두면 Emacs가 이용 가능한 모든 폰트 백엔드의 이용을 시도할 것이다.


foreground

(

Foreground

클래스)

텍스트에 대한 기본 전경색.


geometry

(

Geometry

클래스) 창 크기와 위치. 값은 '

-g

' 또는 '

--geometry

' 명령행 옵션과 동일한 형태로 된 크기 및 위치 명세여야 한다(489 페이지의 C.8절 [창 크기 X(Window Size X)] 참고).</ br>크기는 Emacs 세션 내 모든 프레임에 적용되지만 위치는 초기 Emacs 프레임에만 적용된다(또는 해당 프레임 내 특정 프레임명에 대한 자원의 경우).</ br>이 자원을 '

emacs*geometry

' 로 명시하면 주 Emacs 프레임뿐만 아니라 각 메뉴에도 영향을 미칠 수 있으니 주의한다.


fullscreen

(

Fullscreen

클래스) 원하는 전체화면 크기. 값은

fullboth

,

maximized

,

fullwidth

,

fullheight

중에서 가능하며, 명령행 옵션 '

-fs

', '

-mm

', '

-fw

', '

-fh

' 에 해당한다(489 페이지의 C.8절 [창 크기 X(Window Size X)] 참고). 초기 프레임에만 적용됨을 명심한다.


lineSpacing

(

LineSpacing

클래스)

라인 간 추가 공백을 픽셀로 나타낸 것.


menuBar

(

MenuBar

클래스) 이 자원의 값이 '

off

', '

false

', '

0

' 중 하나일 경우 Emacs 는 시작 시 Menu Bar 모드를 끈다(173 페이지의 18.14절 [메뉴 바(Menu Bars)] 참고).


pointerColor

(

Foreground

클래스)

마우스 커서의 색상. 다수의 그래픽 데스크톱 환경에서는 Emacs 가 마우스 커서를 이런 방식으로 변경하는 것을 허용하지 않으므로 어떤 효과도 보이지 않는다.


title

(

Title

클래스)

초기 Emacs 프레임의 제목 막대에 표시할 이름.


toolBar

(

ToolBar

클래스) 이 자원의 값이 '

off

', '

false

', '

0

' 중 하나일 경우 Emacs 는 시작 시 Tool Bar 모드를 끈다(173 페이지의 18.15절 [툴 바(Tool Bars)] 참고).


useXIM

(

UseXIM

클래스) 값이 '

false

' 또는 '

off

' 일 경우 X 입력 방법의 (XIM) 사용을 비활성화한다. 사용자의 Emacs가 XIM 지원으로 빌드되었을 때에만 상관된다. 느린 X 클라이언트/서버 링크에서는 XIM을 끄는 것이 유용하겠다.


verticalScrollBars

(

ScrollBars

클래스) 값이 '

on

' 일 경우 프레임에 스크롤 바를 제공하고, '

off

' 일 경우 스크롤 바를 제공하지 않는다.


개별 Emacs 겉모습을 맞춤화하기 위해 X 자원을 이용할 수도 있다(74 페이지의 11.8절 [겉모습(Faces)] 참고). 예를 들어, '

face.attributeForeground

' 자원은 face 겉모습의 '

foreground

' 속성을 맞춤화하는 것과 동일하다. 하지만 X 자원을 사용하는 대신 Emacs 내에서부터 겉모습을 맞춤화할 것을 권장한다. 416 페이지의 33.1.5절 [겉모습 맞춤화(Face Customization)]를 참고한다.


GTK 자원(GTK resources)

Emacs 가 GTK+ 툴킷 지원을 이용해 컴파일된 경우 GTK+위젯(예: 메뉴, 대화창, 툴 바, 스크롤 바)을 가장 단순하게 맞춤화하는 방법은 GNOME 테마 선택기(theme selector)와 같이 적절한 GTK+ 테마를 선택하는 것이다.


GTK+ 버전 2에서는 GTK+ 자원을 이용해 Emacs 가 사용하는 GTK+ 위젯의 모양을 맞춤화할 수도 있다. 이러한 자원들은

~/.emacs.d/gtkrc

파일(Emacs 특정적 GTK+ 자원의 경우)이나

~/.gtkrc-2.0

(일반 GTK+ 자원의 경우) 파일에 명시된다. GTK+ 는 GNOME 과 함께 GConf 를 실행할 때

~/.gtkrc-2.0

을 무시하는 것으로 나타나기 때문에

~/.emacs.d/gtkrc

를 사용할 것을 권장한다. 하지만 일부 GTK 테마들은

~/.emacs.d/gtkrc

의 맞춤화를 오버라이드할 수도 있음을 명심해야 하는데, 이에 대해 우리가 할 수 있는 일은 없다. GTK+ 자원은 GTK+ 위젯과 상관이 없는 Emacs 측면들에는 영향을 미치지 않는데, 가령 주 Emacs 창에서 폰트와 색상들은 일반 X 자원에 의해 관리된다(493 페이지의 D.1절 [자원(Resources)] 참고).


다음 절들은 Emacs 에 대해 GTK+ 자원을 맞춤화하는 방법을 설명한다. GTK+ 자원에 관한 상세한 설명은 http://developer.gnome.org/gtk2/stable/gtk2-Resource-Files.html 에서 GTK+ API 문서를 참고한다.


GTK+ 버전 3 에서는 GTK+ 자원이 완전히 다른 시스템으로 대체되었다. GTK+ 위젯의 모양은 이제 CSS와 유사한 스타일의 파일로 결정되는데, 이 파일은 GTK+ 설치 디렉터리에 있는

gtk-3.0/gtk.css

와 로컬 스타일 설정에 대한

~/.themes/theme/gtk-3.0/gtk.css

(theme은 현재 GTK+ 테마 이름)에 해당한다. 따라서 이번 절에 실린 GTK+ 자원에 대한 설명은 GTK+ 3 에는 적용되지 않는다. GTK+ 3 스타일링 시스템에 관한 상세한 정보는 http://developer.gnome.org/gtk3/3.0/GtkCssProvider.html 을 참고한다.


GTK 자원 기본 사항(GTK Resource Basics)

GTK+ 2 자원 파일에서 (주로 {{RoundTitleNavy|~/.emacs.d/gtkrc{{) 가장 단순한 유형의 자원 설정은 단순히 변수에 값을 할당하는 것이다. 가령 다음과 같은 라인을 자원 파일에 넣으면 모든 GTK+ 위젯에서 폰트를 '

courier-12

' 로 변경한다.

gtk-font-name = "courier 12"


이런 경우 폰트명은 Fontconfig 스타일의 폰트명이나 XLFD가 아니라 GTK폰트 패턴으로서 (Pango font name이라고 부르기도 한다) 제공되어야 함을 명심한다. 168 페이지의 18.8절 [폰트(Fonts)]를 참고한다.


위젯을 맞춤화하기 위해서는 style을 먼저 정의한 후에 스타일을 위젯으로 적용한다. 메뉴에 대한 폰트를 설정하는 예를 아래에 제시하겠다('#' 문자는 주석을 나타낸다).

# Define the style 'my_style'.
style "my_style" 
{
  font_name = "helvetica bold 14"
}

# Specify that widget type '*emacs-menuitem*' uses 'my_style'. 
widget "*emacs-menuitem*" style "my_style"


이 예제에서 위젯 이름에 와일드카드가 포함되어 있으므로 스타일은 '

*emacs-menuitem*

' 에 일치하는 모든 위젯에 적용된다. 위젯은 그것이 포함된 방식, 즉 외부 위젯으로부터 내부 위젯 방향으로 명명된다. 구체적으로 Emacs 메뉴 바에 '

my_style

' 을 적용하는 또 다른 예를 들어보겠다.

widget "Emacs.pane.menubar.*" style "my_style"


스크롤 바 부분들을 변경하는 방법을 보이기 위해 좀 더 정교한 예를 들어보겠다.

style "scroll" 
{
  fg[NORMAL] = "red" 		# Arrow color.
  bg[NORMAL] = "yellow"		# Thumb and background around arrow. 
  bg[ACTIVE] = "blue" 		# Trough color.
  bg[PRELIGHT] = "white"	# Thumb color when the mouse is over it.
}

widget "*verticalScrollBar*" style "scroll"


GTK 위젯 이름(GTK widget names)

GTK+ 위젯은 위젯 이름(widget name)과 위젯 클래스(widget class)로 명시된다. 위젯 이름은 구체적 위젯을 참조하는 (예: '

emacs-menuitem

') 반면 위젯 클래스는 비슷한 위젯의 집합체를 참조한다(예: '

GtkMenuItem

'). 위젯은 항상 클래스를 가져야 하지만 이름을 꼭 가질 필요는 없다.


절대명(absolute names)은 다른 위젯에 내장된 위젯 계층구조에 상응하는 위젯 클래스 또는 위젯 이름의 시퀀스이다. 가령 top 이라는

GtkWindow

box

라는

GtkVBox

를 포함하고 그 안에는

menubar

라는

GtkMenuBar

가 포함되어 있는데, 메뉴 바(menu-bar) 위젯의 클래스 절대명은

GtkWindow.GtkVBox.GtkMenuBar

이고, 위젯 절대명은

top.box.menubar

이다.


GTK+ 자원 파일은 위젯 모양을 명시하는 두 가지 타입의 명령어를 포함한다.


widget

클래스명 또는 클래스를 기반으로 하는 위젯에 대한 스타일을 명시한다.


widget_class

클래스명을 기반으로 하는 위젯에 대한 스타일을 명시한다.


widget

명령어와 관련해서는

widget_class

명령어를 비슷하게 사용한 위의 예를 참고하도록 한다. 위젯명/클래스와 스타일은 큰 따옴표로 감싸야 하며, 이러한 명령어들은 GTK+ 자원 파일에서 최상위 수준에 위치해야 함을 명심한다.


앞서 언급하였듯 셸 와일드카드 구문을 이용해 위젯명 또는 클래스를 명시할 수도 있는데, '

*

' 는 0 개 이상의 문자에 일치하고 '

?

' 는 1개 문자에 일치한다. 아래 예는 모든 위젯에 하나의 스타일을 할당한다.

widget "*" style "my_style"


Emacs에서 GTK 위젯명(GTK Widget Names in Emacs)

Emacs 프레임이 사용하는 GTK+ 위젯을 아래 열거하겠다.


Emacs
(
GtkWindow
클래스)
pane
(
GtkVBox
클래스)
menubar
(
GtkMenuBar
클래스)
[메뉴 항목 위젯]
[명명되지 않은 위젯] (
GtkHandleBox
클래스)
emacs-toolbar
(
GtkToolbar
클래스)
[툴 바 항목 위젯]
emacs
(
GtkFixed
클래스)
verticalScrollBar
(
GtkVScrollbar
클래스)


Emacs 창의 내용은

emacs

위젯에 그려진다. Emacs 창이 여러 개 있더라도 각 스크롤 바 위젯은

verticalScrollBar

로 명명됨을 주목한다.


예를 들어, 메뉴 바 스타일을 설정하는 방법으로는 두 가지가 있다.

widget "Emacs.pane.menubar.*" style "my_style"
widget_class "GtkWindow.GtkVBox.GtkMenuBar.*" style "my_style"


GTK+ 대화상자의 경우 Emacs 는

GtkDialog

클래스의

emacs-dialog

라는 위젯을 사용한다. 파일 선택에 있어서는

GtkFileSelection

클래스의

emacs-filedialog

라는 위젯을 사용한다.


팝업 메뉴와 대화상자에 대한 위젯은 독립된 창으로서

Emacs

위젯에 "포함되지(contained)" 않으므로 그들의 GTK+ 절대명은 '

Emacs

' 로 시작하지 않는다. 이러한 위젯을 맞춤화하려면 아래와 같이 와일드카드를 사용한다.

widget "*emacs-dialog*" style "my_dialog_style"
widget "*emacs-filedialog* style "my_file_style"
widget "*emacs-menuitem* style "my_menu_style"


Emacs 내 모든 메뉴로 스타일을 적용하려면 아래를 사용한다.

widget_class "*Menu*" style "my_menu_style"


GTK 스타일(GTK styles)

두 가지 GTK+ 스타일 데코레이션의 예를 소개하겠다.

pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"

style "default"
{
 font_name = "helvetica 12"

 bg[NORMAL] = { 0.83, 0.80, 0.73 }   
 bg[SELECTED] = { 0.0, 0.55, 0.55 } 
 bg[INSENSITIVE] = { 0.77, 0.77, 0.66 } 
 bg[ACTIVE] = { 0.0, 0.55, 0.55 } 
 bg[PRELIGHT] = { 0.0, 0.55, 0.55 }

 fg[NORMAL] = "black"
 fg[SELECTED] = { 0.9,	0.9,	0.9 }
 fg[ACTIVE] =	"black"
 fg[PRELIGHT] = { 0.9,	0.9,	0.9 }

 base[INSENSITIVE] = "#777766" 
 text[INSENSITIVE] = { 0.60, 0.65, 0.57 }

 bg_pixmap[NORMAL] = "background.xpm" 
 bg_pixmap[INSENSITIVE] = "background.xpm" 
 bg_pixmap[ACTIVE] = "background.xpm" 
 bg_pixmap[PRELIGHT] = "<none>"
}

style "ruler" = "default" 
{
  font_name = "helvetica 8"
}


'

ruler

' 스타일은 '

default

' 로부터 상속된다. 이를 통해 사용자는 기존 스타일을 기반으로 빌드할 수 있다. 폰트와 색상에 대한 구문을 아래에 설명하겠다.


이 예에서 보여주듯이 위젯의 state 에 따라 전경과 배경에 대해 여러 값을 명시하는 것이 가능하며, 상태에는 다음과 같은 값을 사용할 수 있다.


NORMAL

위젯에 대한 기본 상태다.


ACTIVE

어떤 일을 수행할 준비가 된 위젯의 상태다. 스크롤 바의 trough 에도 사용되므로, 가령

bg[ACTIVE] = "red"

는 스크롤 바 trough 를 빨간색으로 설정한다. 버튼을 누른 다음 놓지 않았을 때 ("armed" 상태의) 이 상태에 놓인다.


PRELIGHT

마우스 포인트를 위젯 위에 갖다 놓을 때 조작할 수 있는 위젯에 대한 상태로, 마우스가 스크롤 바의 손가락(thumb) 위에 있거나 메뉴 항목 위에 있을 때를 예로 들 수 있겠다. 누르지 않은 버튼 위에 마우스가 위치할 경우 버튼은 이 상태에 놓인다.


SELECTED

사용자가 선택한 데이터에 대한 상태다. 리스트에서 선택된 항목 또는 선택된 텍스트에 해당할 수 있다. 이 상태는 Emacs에서는 사용되지 않는다.


INSENSITIVE

위젯이 표시되긴 하지만 일반적 방식으로 조작할 수 없을 때, 즉 버튼을 누를 수 없거나 메뉴 항목이 꺼진 경우 위젯의 상태에 해당한다. 꺼진 메뉴 항목을 노란색으로 표시하려면

fg[INSENSITIVE] = "yellow"

를 사용한다.


스타일 데코레이션에 포함시킬 수 있는 사항은 다음과 같다.


bg[state] = color

위젯에 대한 배경색을 명시한다. 편집 가능한 텍스트는 bg를 사용하는 대신 base를 사용한다는 사실을 명시한다.


base[state] = color

편집 가능한 텍스트에 대한 배경색을 명시한다. Emacs에서 이 색상은 파일 대화창의 텍스트 필드의 배경색으로 사용된다.


bg_pixmap[state] = "pixmap"

이미지 배경을 명시한다(배경색 대신). pixmap 은 이미지 파일명이어야 한다. GTK 는 XPM, XBM, GIF, JPEG, PNG 를 포함해 다수의 이미지 파일 포맷을 사용할 수 있다. 위젯이 그 부모와 동일한 이미지를 사용하길 원한다면 '

<parent>

' 를 사용하라. 갖고 있는 이미지가 없다면 '

<none>

' 을 사용하라. '

<none>

'은 부모 스타일로부터 상속받은 배경 이미지를 취소한다.</ br>파일을 절대 파일명으로 명시할 수는 없다. GTK 는

pixmap_path

에 명시된 디렉터리에서 pixmap 파일을 검색한다.

pixmap_path

는 큰따옴표 안에 콜론으로 구분된 디렉터리 목록으로, (스타일 정의에 명시된 것이 아니라)

gtkrc

파일 내 최상위 수준에서 명시되어 있다(위의 예제 참고).

pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"


fg[state] = color

이는 사용할 위젯에 대한 전경색을 명시한다. 메뉴와 버튼 내 텍스트 색상이며, 스크롤 바 내 화살표에 대한 색상이다. 편집 가능한 텍스트에는

text

를 사용한다.


text[state] = color

편집 가능한 텍스트에 대한 색상이다. Emacs 에서 이 색상은 파일 대화상자 내 텍스트 필드에 사용된다.


font_name = "font"

위젯 내 텍스트에 대한 폰트를 명시한다. font는 GTK-style(또는 Pango)의 폰트명으로, '

Sans Italic 10

' 을 예로 들 수 있겠다. 168 페이지의 18.8절 [폰트(Fonts)]를 참고한다. 이름은 대, 소문자에 민감하지 않다.


색상을 명시하는 방법에는 세 가지가 있는데, 색상명, RGB triplet, GTK-style RGB triplet 이 그것들이다. 색상명과 RGB triplets 에 관한 설명은 75 페이지의 11.9절 [색상(Colors)]을 참고한다. 색상명은 '

"red"

' 와 같이 인용 부호로 둘러싸여 있다. RGB triplets 는 큰따옴표 없이 '#ff0000' 와 같이 쓴다. GTK-style RGB triplets 는

{ r, g, b }

형태를 가지며, r, g, b 는 0-65535 범위의 정수이거나 0.0-1.0 범위로 된 부동 소수점 수(floats)로 되어 있다.


Notes