GNUEmacsManual:D
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)에서 이러한 옵션에 대한 기본값을 명시할 수 있는데, 주로
또는
로 명명된다. 이 파일에 일어나는 변경 사항이 즉시 효력을 발휘하는 것은 아닌데, 그 이유는 X 서버가 고유의 자원 목록을 보관하기 때문으로, 목록을 업데이트하려면
를 사용하면 된다(예: '
'.)
(MS-Windows 시스템은 X 자원 파일을 지원하지는 않으며, 그러한 시스템에서 Emacs 는 Windows Registry 에서 X 자원을 검색하는데, 먼저 현재 사용자에게만 영향을 미치면서 시스템 전반적(system-wide) 설정을 오버라이드하는 '
' 키에서 검색한 후에, 시스템의 모든 사용자에게 영향을 미치는 '
' 를 검색한다. 메뉴 및 스크롤 바는 MS-Windows 에서 native 위젯에 해당하므로 Display Control Panel 의 시스템 전반적 설정을 통해서만 맞춤화할 수 있다. 아래 설명하는 바와 같이 '
' 명령행 옵션을 이용해 자원을 설정할 수도 있다.)
X 자원 파일의 각 라인에는 하나의 옵션 또는 관련된 옵션의 집합체에 대한 값을 명시한다. 라인이 파일에서 표시되는 순서는 중요하지 않다. 각 자원 명세마다 프로그램명(program name)과 자원명(resource name)으로 구성된다. 이러한 이름에서는 대, 소문자 차이가 중요하다. 아래를 예로 들겠다.
emacs.cursorColor: dark green
프로그램명은 자원이 적용되는 실행 파일의 이름이다. Emacs 의 경우 주로 '
' 에 해당한다. Emacs 실행 파일의 이름과 상관없이 Emacs 의 모든 사례에 적용되는 정의를 명시하려면 '
' 를 사용하라.
자원명은 프로그램 설정 이름이다. 가령 Emacs 는 텍스트 커서의 색상을 제어하는 '
' 자원을 인식한다.
자원은 명명된 클래스로 그룹화된다. 가령 '
' 클래스는 '
', '
', '
' 자원을 포함한다(494 페이지의 D.2절 [자원 테이블(Table of Resources)] 참고). 자원의 이름 대신 클래스명을 이용하여 아래와 같이 클래스 내 모든 자원에 대한 기본값으로 명시하는 방법도 있다.
emacs.Foreground: dark green
변수를
이 아닌 값으로 설정할 경우 Emacs 는 X 자원을 전혀 처리하지 않는다. '
' (또는 '
') 명령행 옵션으로 Emacs 를 호출할 경우
는 자동으로 t로 설정된다(480 페이지의 C.2절 [초기 옵션(Initial Options)] 참고).
Emacs에 대한 X 자원 테이블(Table of X Resources for Emacs)
이 테이블은 메뉴 바처럼 그래픽한 위젯의 모양을 제어하는 자원을 제외하고 Emacs 가 인식하는 X 자원의 이름을 열거한다.
(
클래스)
배경색 (75 페이지의 11.9절 [색상(Colors)] 참고).
(
클래스)
윈도우 관리자(window manager)에게 Emacs 아이콘이 'on'일 경우 아이콘을 표시하고, 'off'일 경우 표시하지 않도록 지시한다. 아이콘에 대한 설명은 491 페이지의 C.11절 [아이콘 X(Icons X)]를 참고한다.
(
클래스)
텍스트 커서 색상. Emacs가 시작할 때 이 자원이 명시되어 있으면 Emacs는 그 값을 cursor 겉모습의 배경색으로 설정한다(74 페이지의 11.8절 [겉모습(Faces)] 참고).
(
클래스)
시작 시 이 자원의 값이 'off', 'false', '0' 중 하나일 경우 Emacs는 Blink Cursor 모드를 끈다(86 페이지의 11.20절 [커서 표시(Cursor Display)] 참고).
(
클래스)
겉모습에 대한 폰트명(168 페이지의 18.8절 [폰트(Fonts)] 참고). 폰트집합 이름을 명시할 수도 있다(192 페이지의 19.13절 [폰트집합(Fontsets)] 참고).
(
클래스) 폰트를 그리는 데에 사용할 백엔드를 콤마로 구분하고 우선순위 순으로 열거한 목록. 예를 들어 '
'는 Emacs에게 X 코어 폰트 드라이버를 이용해 폰트를 그리도록 지시하고, 실패할 경우 Xft 폰트 드라이버를 사용하라고 지시한다. 보통 이 자원을 설정하지 않은 채 남겨두면 Emacs가 이용 가능한 모든 폰트 백엔드의 이용을 시도할 것이다.
(
클래스)
텍스트에 대한 기본 전경색.
(
클래스) 창 크기와 위치. 값은 '
' 또는 '
' 명령행 옵션과 동일한 형태로 된 크기 및 위치 명세여야 한다(489 페이지의 C.8절 [창 크기 X(Window Size X)] 참고).</ br>크기는 Emacs 세션 내 모든 프레임에 적용되지만 위치는 초기 Emacs 프레임에만 적용된다(또는 해당 프레임 내 특정 프레임명에 대한 자원의 경우).</ br>이 자원을 '
' 로 명시하면 주 Emacs 프레임뿐만 아니라 각 메뉴에도 영향을 미칠 수 있으니 주의한다.
(
클래스) 원하는 전체화면 크기. 값은
,
,
,
중에서 가능하며, 명령행 옵션 '
', '
', '
', '
' 에 해당한다(489 페이지의 C.8절 [창 크기 X(Window Size X)] 참고). 초기 프레임에만 적용됨을 명심한다.
(
클래스)
라인 간 추가 공백을 픽셀로 나타낸 것.
(
클래스) 이 자원의 값이 '
', '
', '
' 중 하나일 경우 Emacs 는 시작 시 Menu Bar 모드를 끈다(173 페이지의 18.14절 [메뉴 바(Menu Bars)] 참고).
(
클래스)
마우스 커서의 색상. 다수의 그래픽 데스크톱 환경에서는 Emacs 가 마우스 커서를 이런 방식으로 변경하는 것을 허용하지 않으므로 어떤 효과도 보이지 않는다.
(
클래스)
초기 Emacs 프레임의 제목 막대에 표시할 이름.
(
클래스) 이 자원의 값이 '
', '
', '
' 중 하나일 경우 Emacs 는 시작 시 Tool Bar 모드를 끈다(173 페이지의 18.15절 [툴 바(Tool Bars)] 참고).
(
클래스) 값이 '
' 또는 '
' 일 경우 X 입력 방법의 (XIM) 사용을 비활성화한다. 사용자의 Emacs가 XIM 지원으로 빌드되었을 때에만 상관된다. 느린 X 클라이언트/서버 링크에서는 XIM을 끄는 것이 유용하겠다.
(
클래스) 값이 '
' 일 경우 프레임에 스크롤 바를 제공하고, '
' 일 경우 스크롤 바를 제공하지 않는다.
개별 Emacs 겉모습을 맞춤화하기 위해 X 자원을 이용할 수도 있다(74 페이지의 11.8절 [겉모습(Faces)] 참고). 예를 들어, '
' 자원은 face 겉모습의 '
' 속성을 맞춤화하는 것과 동일하다. 하지만 X 자원을 사용하는 대신 Emacs 내에서부터 겉모습을 맞춤화할 것을 권장한다. 416 페이지의 33.1.5절 [겉모습 맞춤화(Face Customization)]를 참고한다.
GTK 자원(GTK resources)
Emacs 가 GTK+ 툴킷 지원을 이용해 컴파일된 경우 GTK+위젯(예: 메뉴, 대화창, 툴 바, 스크롤 바)을 가장 단순하게 맞춤화하는 방법은 GNOME 테마 선택기(theme selector)와 같이 적절한 GTK+ 테마를 선택하는 것이다.
GTK+ 버전 2에서는 GTK+ 자원을 이용해 Emacs 가 사용하는 GTK+ 위젯의 모양을 맞춤화할 수도 있다. 이러한 자원들은
파일(Emacs 특정적 GTK+ 자원의 경우)이나
(일반 GTK+ 자원의 경우) 파일에 명시된다. GTK+ 는 GNOME 과 함께 GConf 를 실행할 때
을 무시하는 것으로 나타나기 때문에
를 사용할 것을 권장한다. 하지만 일부 GTK 테마들은
의 맞춤화를 오버라이드할 수도 있음을 명심해야 하는데, 이에 대해 우리가 할 수 있는 일은 없다. 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+ 설치 디렉터리에 있는
와 로컬 스타일 설정에 대한
(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+ 위젯에서 폰트를 '
' 로 변경한다.
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 메뉴 바에 '
' 을 적용하는 또 다른 예를 들어보겠다.
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)로 명시된다. 위젯 이름은 구체적 위젯을 참조하는 (예: '
') 반면 위젯 클래스는 비슷한 위젯의 집합체를 참조한다(예: '
'). 위젯은 항상 클래스를 가져야 하지만 이름을 꼭 가질 필요는 없다.
절대명(absolute names)은 다른 위젯에 내장된 위젯 계층구조에 상응하는 위젯 클래스 또는 위젯 이름의 시퀀스이다. 가령 top 이라는
는
라는
를 포함하고 그 안에는
라는
가 포함되어 있는데, 메뉴 바(menu-bar) 위젯의 클래스 절대명은
이고, 위젯 절대명은
이다.
GTK+ 자원 파일은 위젯 모양을 명시하는 두 가지 타입의 명령어를 포함한다.
클래스명 또는 클래스를 기반으로 하는 위젯에 대한 스타일을 명시한다.
클래스명을 기반으로 하는 위젯에 대한 스타일을 명시한다.
명령어와 관련해서는
명령어를 비슷하게 사용한 위의 예를 참고하도록 한다. 위젯명/클래스와 스타일은 큰 따옴표로 감싸야 하며, 이러한 명령어들은 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 창이 여러 개 있더라도 각 스크롤 바 위젯은
로 명명됨을 주목한다.
예를 들어, 메뉴 바 스타일을 설정하는 방법으로는 두 가지가 있다.
widget "Emacs.pane.menubar.*" style "my_style"
widget_class "GtkWindow.GtkVBox.GtkMenuBar.*" style "my_style"
GTK+ 대화상자의 경우 Emacs 는
클래스의
라는 위젯을 사용한다. 파일 선택에 있어서는
클래스의
라는 위젯을 사용한다.
팝업 메뉴와 대화상자에 대한 위젯은 독립된 창으로서
위젯에 "포함되지(contained)" 않으므로 그들의 GTK+ 절대명은 '
' 로 시작하지 않는다. 이러한 위젯을 맞춤화하려면 아래와 같이 와일드카드를 사용한다.
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"
}
'
' 스타일은 '
' 로부터 상속된다. 이를 통해 사용자는 기존 스타일을 기반으로 빌드할 수 있다. 폰트와 색상에 대한 구문을 아래에 설명하겠다.
이 예에서 보여주듯이 위젯의 state 에 따라 전경과 배경에 대해 여러 값을 명시하는 것이 가능하며, 상태에는 다음과 같은 값을 사용할 수 있다.
위젯에 대한 기본 상태다.
어떤 일을 수행할 준비가 된 위젯의 상태다. 스크롤 바의 trough 에도 사용되므로, 가령
는 스크롤 바 trough 를 빨간색으로 설정한다. 버튼을 누른 다음 놓지 않았을 때 ("armed" 상태의) 이 상태에 놓인다.
마우스 포인트를 위젯 위에 갖다 놓을 때 조작할 수 있는 위젯에 대한 상태로, 마우스가 스크롤 바의 손가락(thumb) 위에 있거나 메뉴 항목 위에 있을 때를 예로 들 수 있겠다. 누르지 않은 버튼 위에 마우스가 위치할 경우 버튼은 이 상태에 놓인다.
사용자가 선택한 데이터에 대한 상태다. 리스트에서 선택된 항목 또는 선택된 텍스트에 해당할 수 있다. 이 상태는 Emacs에서는 사용되지 않는다.
위젯이 표시되긴 하지만 일반적 방식으로 조작할 수 없을 때, 즉 버튼을 누를 수 없거나 메뉴 항목이 꺼진 경우 위젯의 상태에 해당한다. 꺼진 메뉴 항목을 노란색으로 표시하려면
를 사용한다.
스타일 데코레이션에 포함시킬 수 있는 사항은 다음과 같다.
위젯에 대한 배경색을 명시한다. 편집 가능한 텍스트는 bg를 사용하는 대신 base를 사용한다는 사실을 명시한다.
편집 가능한 텍스트에 대한 배경색을 명시한다. Emacs에서 이 색상은 파일 대화창의 텍스트 필드의 배경색으로 사용된다.
이미지 배경을 명시한다(배경색 대신). pixmap 은 이미지 파일명이어야 한다. GTK 는 XPM, XBM, GIF, JPEG, PNG 를 포함해 다수의 이미지 파일 포맷을 사용할 수 있다. 위젯이 그 부모와 동일한 이미지를 사용하길 원한다면 '
' 를 사용하라. 갖고 있는 이미지가 없다면 '
' 을 사용하라. '
'은 부모 스타일로부터 상속받은 배경 이미지를 취소한다.</ br>파일을 절대 파일명으로 명시할 수는 없다. GTK 는
에 명시된 디렉터리에서 pixmap 파일을 검색한다.
는 큰따옴표 안에 콜론으로 구분된 디렉터리 목록으로, (스타일 정의에 명시된 것이 아니라)
파일 내 최상위 수준에서 명시되어 있다(위의 예제 참고).
pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"
이는 사용할 위젯에 대한 전경색을 명시한다. 메뉴와 버튼 내 텍스트 색상이며, 스크롤 바 내 화살표에 대한 색상이다. 편집 가능한 텍스트에는
를 사용한다.
편집 가능한 텍스트에 대한 색상이다. Emacs 에서 이 색상은 파일 대화상자 내 텍스트 필드에 사용된다.
위젯 내 텍스트에 대한 폰트를 명시한다. font는 GTK-style(또는 Pango)의 폰트명으로, '
' 을 예로 들 수 있겠다. 168 페이지의 18.8절 [폰트(Fonts)]를 참고한다. 이름은 대, 소문자에 민감하지 않다.
색상을 명시하는 방법에는 세 가지가 있는데, 색상명, RGB triplet, GTK-style RGB triplet 이 그것들이다. 색상명과 RGB triplets 에 관한 설명은 75 페이지의 11.9절 [색상(Colors)]을 참고한다. 색상명은 '
' 와 같이 인용 부호로 둘러싸여 있다. RGB triplets 는 큰따옴표 없이 '#ff0000' 와 같이 쓴다. GTK-style RGB triplets 는
형태를 가지며, r, g, b 는 0-65535 범위의 정수이거나 0.0-1.0 범위로 된 부동 소수점 수(floats)로 되어 있다.