Update years in copyright notice; nfc.
[bpt/emacs.git] / man / xresources.texi
1 @c This is part of the Emacs manual.
2 @c Copyright (C) 1987, 1993, 1994, 1995, 1997, 2001, 2002, 2003,
3 @c 2004, 2005 Free Software Foundation, Inc.
4 @c See file emacs.texi for copying conditions.
5 @node X Resources, Antinews, Emacs Invocation, Top
6 @appendix X Options and Resources
7
8 You can customize some X-related aspects of Emacs behavior using X
9 resources, as is usual for programs that use X. On MS-Windows, you
10 can customize some of the same aspects using the system registry.
11 @xref{MS-Windows Registry}.
12
13 When Emacs is built using an `X toolkit', such as Lucid or LessTif,
14 you need to use X resources to customize the appearance of the
15 widgets, including the menu-bar, scroll-bar, and dialog boxes. This
16 is because the libraries that implement these don't provide for
17 customization through Emacs. GTK+ widgets use a separate system of
18 `GTK resources', which we will also describe.
19
20 @menu
21 * Resources:: Using X resources with Emacs (in general).
22 * Table of Resources:: Table of specific X resources that affect Emacs.
23 * Face Resources:: X resources for customizing faces.
24 * Lucid Resources:: X resources for Lucid menus.
25 * LessTif Resources:: X resources for LessTif and Motif menus.
26 * GTK resources:: Resources for GTK widgets.
27 @end menu
28
29 @node Resources
30 @appendixsec X Resources
31 @cindex resources
32 @cindex X resources
33 @cindex @file{~/.Xdefaults} file
34 @cindex @file{~/.Xresources} file
35
36 Programs running under the X Window System organize their user
37 options under a hierarchy of classes and resources. You can specify
38 default values for these options in your X resources file, usually
39 named @file{~/.Xdefaults} or @file{~/.Xresources}.
40 If changes in @file{~/.Xdefaults} do not
41 take effect, it is because your X server stores its own list of
42 resources; to update them, use the shell command @command{xrdb}---for
43 instance, @samp{xrdb ~/.Xdefaults}.
44
45 Each line in the file specifies a value for one option or for a
46 collection of related options, for one program or for several programs
47 (optionally even for all programs).
48
49 @cindex Registry (MS-Windows)
50 MS-Windows systems don't support @file{~/.Xdefaults} files, but
51 Emacs compiled for Windows looks for X resources in the Windows
52 Registry, under the key @samp{HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs}
53 and then under the key @samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}.
54 The menu and scrollbars are native widgets on MS-Windows, so they are
55 only customizable via the system-wide settings in the Display Control
56 Panel. You can also set resources using the @samp{-xrm} command line
57 option (see below.)
58
59 Programs define named resources with particular meanings. They also
60 define how to group resources into named classes. For instance, in
61 Emacs, the @samp{internalBorder} resource controls the width of the
62 internal border, and the @samp{borderWidth} resource controls the width
63 of the external border. Both of these resources are part of the
64 @samp{BorderWidth} class. Case distinctions are significant in these
65 names.
66
67 Every resource definition is associated with a specific program
68 name---the name of the executable file that you ran. For Emacs, that
69 is normally @samp{emacs}. To specify a definition for all instances
70 of Emacs, regardless of their names, use @samp{Emacs}.
71
72 In @file{~/.Xdefaults}, you can specify a value for a single resource
73 on one line, like this:
74
75 @example
76 emacs.borderWidth: 2
77 @end example
78
79 @noindent
80 Or you can use a class name to specify the same value for all resources
81 in that class. Here's an example:
82
83 @example
84 emacs.BorderWidth: 2
85 @end example
86
87 If you specify a value for a class, it becomes the default for all
88 resources in that class. You can specify values for individual
89 resources as well; these override the class value, for those particular
90 resources. Thus, this example specifies 2 as the default width for all
91 borders, but overrides this value with 4 for the external border:
92
93 @example
94 emacs.BorderWidth: 2
95 emacs.borderWidth: 4
96 @end example
97
98 The order in which the lines appear in the file does not matter.
99 Also, command-line options always override the X resources file.
100 Here is a list of X command-line options and their corresponding
101 resource names.
102
103 @table @samp
104 @item -name @var{name}
105 @opindex --name
106 @itemx --name=@var{name}
107 @cindex resource name, command-line argument
108 Use @var{name} as the resource name (and the title) for the initial
109 Emacs frame. This option does not affect subsequent frames, but Lisp
110 programs can specify frame names when they create frames.
111
112 If you don't specify this option, the default is to use the Emacs
113 executable's name as the resource name.
114
115 @item -xrm @var{resource-values}
116 @opindex --xrm
117 @itemx --xrm=@var{resource-values}
118 @cindex resource values, command-line argument
119 Specify X resource values for this Emacs job (see below).
120 @end table
121
122 For consistency, @samp{-name} also specifies the name to use for
123 other resource values that do not belong to any particular frame.
124
125 The resources that name Emacs invocations also belong to a class; its
126 name is @samp{Emacs}. If you write @samp{Emacs} instead of
127 @samp{emacs}, the resource applies to all frames in all Emacs jobs,
128 regardless of frame titles and regardless of the name of the executable
129 file. Here is an example:
130
131 @example
132 Emacs.BorderWidth: 2
133 Emacs.borderWidth: 4
134 @end example
135
136 You can specify a string of additional resource values for Emacs to
137 use with the command line option @samp{-xrm @var{resources}}. The text
138 @var{resources} should have the same format that you would use inside a file
139 of X resources. To include multiple resource specifications in
140 @var{resources}, put a newline between them, just as you would in a file.
141 You can also use @samp{#include "@var{filename}"} to include a file full
142 of resource specifications. Resource values specified with @samp{-xrm}
143 take precedence over all other resource specifications.
144
145 One way to experiment with the effect of different resource settings
146 is to use the @code{editres} program. Select @samp{Get Tree} from the
147 @samp{Commands} menu, then click on an Emacs frame. This will display
148 a tree showing the structure of X toolkit widgets used in an Emacs
149 frame. Select one of them, such as @samp{menubar}, then select
150 @samp{Show Resource Box} from the @samp{Commands} menu. This displays
151 a list of all the meaningful X resources and allows you to edit them.
152 Changes take effect immediately if you click on the @samp{Apply} button.
153 (See the @code{editres} man page for more details.)
154
155 @node Table of Resources
156 @appendixsec Table of X Resources for Emacs
157
158 This table lists the resource names that designate options for
159 Emacs, not counting those for the appearance of the menu bar, each
160 with the class that it belongs to:
161
162 @table @asis
163 @item @code{background} (class @code{Background})
164 Background color name.
165
166 @item @code{bitmapIcon} (class @code{BitmapIcon})
167 Use a bitmap icon (a picture of a gnu) if @samp{on}, let the window
168 manager choose an icon if @samp{off}.
169
170 @item @code{borderColor} (class @code{BorderColor})
171 Color name for the external border.
172
173 @item @code{borderWidth} (class @code{BorderWidth})
174 Width in pixels of the external border.
175
176 @item @code{cursorColor} (class @code{Foreground})
177 Color name for text cursor (point).
178
179 @item @code{cursorBlink} (class @code{CursorBlink})
180 Specifies whether to make the cursor blink. The default is @samp{on}. Use
181 @samp{off} or @samp{false} to turn cursor blinking off.
182
183 @item @code{font} (class @code{Font})
184 Font name for text (or fontset name, @pxref{Fontsets}).
185
186 @item @code{foreground} (class @code{Foreground})
187 Color name for text.
188
189 @item @code{geometry} (class @code{Geometry})
190 Window size and position. Be careful not to specify this resource as
191 @samp{emacs*geometry}, because that may affect individual menus as well
192 as the Emacs frame itself.
193
194 If this resource specifies a position, that position applies only to the
195 initial Emacs frame (or, in the case of a resource for a specific frame
196 name, only that frame). However, the size, if specified here, applies to
197 all frames.
198
199 @item @code{fullscreen} (class @code{Fullscreen})
200 The desired fullscreen size. The value can be one of @code{fullboth},
201 @code{fullwidth} or @code{fullheight}, which correspond to
202 the command-line options @samp{-fs}, @samp{-fw}, and @samp{-fh}
203 (@pxref{Window Size X}).
204
205 Note that this applies to all frames created, not just the initial
206 one.
207
208 @item @code{iconName} (class @code{Title})
209 Name to display in the icon.
210
211 @item @code{internalBorder} (class @code{BorderWidth})
212 Width in pixels of the internal border.
213
214 @item @code{lineSpacing} (class @code{LineSpacing})
215 @cindex line spacing
216 @cindex leading
217 Additional space (@dfn{leading}) between lines, in pixels.
218
219 @item @code{menuBar} (class @code{MenuBar})
220 @cindex menu bar
221 Give frames menu bars if @samp{on}; don't have menu bars if
222 @samp{off}. @xref{Lucid Resources}, and @ref{LessTif Resources}, for
223 how to control the appearance of the menu bar if you have one.
224
225 @item @code{minibuffer} (class @code{Minibuffer})
226 If @samp{none}, don't make a minibuffer in this frame.
227 It will use a separate minibuffer frame instead.
228
229 @item @code{paneFont} (class @code{Font})
230 @cindex font for menus
231 Font name for menu pane titles, in non-toolkit versions of Emacs.
232
233 @item @code{pointerColor} (class @code{Foreground})
234 Color of the mouse cursor.
235
236 @item @code{privateColormap} (class @code{PrivateColormap})
237 If @samp{on}, use a private color map, in the case where the ``default
238 visual'' of class PseudoColor and Emacs is using it.
239
240 @item @code{reverseVideo} (class @code{ReverseVideo})
241 Switch foreground and background default colors if @samp{on}, use colors as
242 specified if @samp{off}.
243
244 @item @code{screenGamma} (class @code{ScreenGamma})
245 @cindex gamma correction
246 Gamma correction for colors, equivalent to the frame parameter
247 @code{screen-gamma}.
248
249 @item @code{selectionFont} (class @code{SelectionFont})
250 Font name for pop-up menu items, in non-toolkit versions of Emacs. (For
251 toolkit versions, see @ref{Lucid Resources}, also see @ref{LessTif
252 Resources}.)
253
254 @item @code{selectionTimeout} (class @code{SelectionTimeout})
255 Number of milliseconds to wait for a selection reply.
256 If the selection owner doesn't reply in this time, we give up.
257 A value of 0 means wait as long as necessary.
258
259 @item @code{synchronous} (class @code{Synchronous})
260 @cindex debugging X problems
261 @cindex synchronous X mode
262 Run Emacs in synchronous mode if @samp{on}. Synchronous mode is
263 useful for debugging X problems.
264
265 @item @code{title} (class @code{Title})
266 Name to display in the title bar of the initial Emacs frame.
267
268 @item @code{toolBar} (class @code{ToolBar})
269 @cindex tool bar
270 Number of lines to reserve for the tool bar. A zero value suppresses
271 the tool bar. If the value is non-zero and
272 @code{auto-resize-tool-bars} is non-@code{nil}, the tool bar's size
273 will be changed automatically so that all tool bar items are visible.
274
275 @item @code{useXIM} (class @code{UseXIM})
276 @cindex XIM
277 @cindex X input methods
278 @cindex input methods, X
279 Turn off use of X input methods (XIM) if @samp{false} or @samp{off}.
280 This is only relevant if your Emacs is actually built with XIM
281 support. It is potentially useful to turn off XIM for efficiency,
282 especially slow X client/server links.
283
284 @item @code{verticalScrollBars} (class @code{ScrollBars})
285 Give frames scroll bars if @samp{on}; don't have scroll bars if
286 @samp{off}.
287
288 @item @code{visualClass} (class @code{VisualClass})
289 Specify the ``visual'' that X should use. This tells X how to handle
290 colors.
291
292 The value should start with one of @samp{TrueColor},
293 @samp{PseudoColor}, @samp{DirectColor}, @samp{StaticColor},
294 @samp{GrayScale}, and @samp{StaticGray}, followed by
295 @samp{-@var{depth}}, where @var{depth} is the number of color planes.
296 Most terminals only allow a few ``visuals,'' and the @samp{dpyinfo}
297 program outputs information saying which ones.
298 @end table
299
300 @node Face Resources
301 @appendixsec X Resources for Faces
302
303 You can also use resources to customize the appearance of particular
304 faces (@pxref{Faces}):
305
306 @table @code
307 @item @var{face}.attributeFont
308 Font for face @var{face}.
309 @item @var{face}.attributeForeground
310 Foreground color for face @var{face}.
311 @item @var{face}.attributeBackground
312 Background color for face @var{face}.
313 @item @var{face}.attributeUnderline
314 Underline flag for face @var{face}. Use @samp{on} or @samp{true} for
315 yes.
316 @item @var{face}.attributeFamily
317 Font family for face @var{face}.
318 @item @var{face}.attributeWidth
319 Relative proportional width of the font to use for face @var{face}.
320 It should be one of @code{ultra-condensed}, @code{extra-condensed},
321 @code{condensed}, @code{semi-condensed}, @code{normal},
322 @code{semi-expanded}, @code{expanded}, @code{extra-expanded}, or
323 @code{ultra-expanded}.
324 @item @var{face}.attributeHeight
325 Height of the font to use for face @var{face}: either an integer
326 specifying the height in units of 1/10@dmn{pt}, or a floating point
327 number that specifies a scale factor to scale the underlying face's
328 default font, or a function to be called with the default height which
329 will return a new height.
330 @item @var{face}.attributeWeight
331 A weight to use for the face @var{face}. It must be one of
332 @code{ultra-bold}, @code{extra-bold}, @code{bold},
333 @code{semi-bold}, @code{normal}, @code{semi-light}, @code{light},
334 @code{extra-light}, @code{ultra-light}.
335 @item @var{face}.attributeSlant
336 The slant to use for the font of face @var{face}. It must be one of
337 @code{italic}, @code{oblique}, @code{normal},
338 @code{reverse-italic}, or @code{reverse-oblique}.
339 @item @var{face}.attributeStrikeThrough
340 Whether the face @var{face} should be drawn with a line striking
341 through the characters.
342 @item @var{face}.attributeOverline
343 Whether the characters in the face @var{face} should be overlined.
344 @item @var{face}.attributeBox
345 Whether to draw a box around the characters in face @var{face}.
346 @item @var{face}.attributeInverse
347 Whether to display the characters in face @var{face} in inverse
348 video.
349 @item @var{face}.attributeStipple
350 The name of a pixmap data file to use for the stipple pattern, or
351 @code{false} to not use stipple for the face @var{face}.
352 @item @var{face}.attributeBackgroundPixmap
353 The background pixmap for the face @var{face}. Should be a name of a
354 pixmap file or @code{false}.
355 @item @var{face}.attributeBold
356 Whether to draw the characters in the face @var{face} as bold.
357 @item @var{face}.attributeItalic
358 Whether to draw the characters in the face @var{face} as italic.
359 @end table
360
361 @node Lucid Resources
362 @appendixsec Lucid Menu X Resources
363 @cindex Menu X Resources (Lucid widgets)
364 @cindex Lucid Widget X Resources
365
366 If the Emacs installed at your site was built to use the X toolkit
367 with the Lucid menu widgets, then the menu bar is a separate widget and
368 has its own resources. The resource names contain @samp{pane.menubar}
369 (following, as always, the name of the Emacs invocation, or @samp{Emacs},
370 which stands for all Emacs invocations). Specify them like this:
371
372 @example
373 Emacs.pane.menubar.@var{resource}: @var{value}
374 @end example
375
376 @noindent
377 For example, to specify the font @samp{8x16} for the menu-bar items,
378 write this:
379
380 @example
381 Emacs.pane.menubar.font: 8x16
382 @end example
383
384 @noindent
385 Resources for @emph{non-menubar} toolkit pop-up menus have
386 @samp{menu*}, in like fashion. For example, to specify the font
387 @samp{8x16} for the pop-up menu items, write this:
388
389 @example
390 Emacs.menu*.font: 8x16
391 @end example
392
393 @noindent
394 For dialog boxes, use @samp{dialog} instead of @samp{menu}:
395
396 @example
397 Emacs.dialog*.font: 8x16
398 @end example
399
400 @noindent
401 The Lucid menus can display multilingual text in your locale. For more
402 information about fontsets see the man page for XCreateFontSet. To enable
403 multilingual menu text you specify a fontSet resource instead of the font
404 resource. If both font and fontSet resources are specified, the fontSet
405 resource is used. To specify
406 @samp{-*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*} for both the popup and
407 menu bar menus, write this:
408
409 @example
410 Emacs*fontSet: -*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*
411 @end example
412
413 @noindent
414 Experience shows that on some systems you may need to add
415 @samp{shell.}@: before the @samp{pane.menubar} or @samp{menu*}. On
416 some other systems, you must not add @samp{shell.}.
417
418 Here is a list of the specific resources for menu bars and pop-up menus:
419
420 @table @code
421 @item font
422 Font for menu item text.
423 @item fontSet
424 Fontset for menu item text.
425 @item foreground
426 Color of the foreground.
427 @item background
428 Color of the background.
429 @item buttonForeground
430 In the menu bar, the color of the foreground for a selected item.
431 @item horizontalSpacing
432 Horizontal spacing in pixels between items. Default is 3.
433 @item verticalSpacing
434 Vertical spacing in pixels between items. Default is 2.
435 @item arrowSpacing
436 Horizontal spacing between the arrow (which indicates a submenu) and
437 the associated text. Default is 10.
438 @item shadowThickness
439 Thickness of shadow line around the widget. Default is 1.
440
441 Also determines the thickness of shadow lines around other objects,
442 for instance 3D buttons and arrows. If you have the impression that
443 the arrows in the menus do not stand out clearly enough or that the
444 difference between ``in'' and ``out'' buttons is difficult to see, set
445 this to 2. If you have no problems with visibility, the default
446 probably looks better. The background color may also have some effect
447 on the contrast.
448 @item margin
449 The margin of the menu bar, in characters. Default is 1.
450 @end table
451
452 @node LessTif Resources
453 @appendixsec LessTif Menu X Resources
454 @cindex Menu X Resources (LessTif widgets)
455 @cindex LessTif Widget X Resources
456
457 If the Emacs installed at your site was built to use the X toolkit
458 with the LessTif or Motif widgets, then the menu bar, the dialog
459 boxes, the pop-up menus, and the file-selection box are separate
460 widgets and have their own resources.
461
462 The resource names for the menu bar contain @samp{pane.menubar}
463 (following, as always, the name of the Emacs invocation, or
464 @samp{Emacs}, which stands for all Emacs invocations). Specify them
465 like this:
466
467 @smallexample
468 Emacs.pane.menubar.@var{subwidget}.@var{resource}: @var{value}
469 @end smallexample
470
471 Each individual string in the menu bar is a subwidget; the subwidget's
472 name is the same as the menu item string. For example, the word
473 @samp{File} in the menu bar is part of a subwidget named
474 @samp{emacs.pane.menubar.File}. Most likely, you want to specify the
475 same resources for the whole menu bar. To do this, use @samp{*} instead
476 of a specific subwidget name. For example, to specify the font
477 @samp{8x16} for the menu-bar items, write this:
478
479 @smallexample
480 Emacs.pane.menubar.*.fontList: 8x16
481 @end smallexample
482
483 @noindent
484 This also specifies the resource value for submenus.
485
486 Each item in a submenu in the menu bar also has its own name for X
487 resources; for example, the @samp{File} submenu has an item named
488 @samp{Save (current buffer)}. A resource specification for a submenu
489 item looks like this:
490
491 @smallexample
492 Emacs.pane.menubar.popup_*.@var{menu}.@var{item}.@var{resource}: @var{value}
493 @end smallexample
494
495 @noindent
496 For example, here's how to specify the font for the @samp{Save (current
497 buffer)} item:
498
499 @smallexample
500 Emacs.pane.menubar.popup_*.File.Save (current buffer).fontList: 8x16
501 @end smallexample
502
503 @noindent
504 For an item in a second-level submenu, such as @samp{Complete Word}
505 under @samp{Spell Checking} under @samp{Tools}, the resource fits this
506 template:
507
508 @smallexample
509 Emacs.pane.menubar.popup_*.popup_*.@var{menu}.@var{resource}: @var{value}
510 @end smallexample
511
512 @noindent
513 For example,
514
515 @smallexample
516 Emacs.pane.menubar.popup_*.popup_*.Spell Checking.Complete Word: @var{value}
517 @end smallexample
518
519 @noindent
520 (This should be one long line.)
521
522 It's impossible to specify a resource for all the menu-bar items
523 without also specifying it for the submenus as well. So if you want the
524 submenu items to look different from the menu bar itself, you must ask
525 for that in two steps. First, specify the resource for all of them;
526 then, override the value for submenus alone. Here is an example:
527
528 @smallexample
529 Emacs.pane.menubar.*.fontList: 8x16
530 Emacs.pane.menubar.popup_*.fontList: 8x16
531 @end smallexample
532
533 @noindent
534 For LessTif pop-up menus, use @samp{menu*} instead of
535 @samp{pane.menubar}. For example, to specify the font @samp{8x16} for
536 the pop-up menu items, write this:
537
538 @smallexample
539 Emacs.menu*.fontList: 8x16
540 @end smallexample
541
542 @noindent
543 For LessTif dialog boxes, use @samp{dialog} instead of @samp{menu}:
544
545 @example
546 Emacs.dialog*.fontList: 8x16
547 Emacs.dialog*.foreground: hotpink
548 @end example
549
550 To specify resources for the LessTif file-selection box, use
551 @samp{fsb*}, like this:
552
553 @example
554 Emacs.fsb*.fontList: 8x16
555 @end example
556
557 @iftex
558 @medbreak
559 @end iftex
560 Here is a list of the specific resources for LessTif menu bars and
561 pop-up menus:
562
563 @table @code
564 @item armColor
565 The color to show in an armed button.
566 @item fontList
567 The font to use.
568 @item marginBottom
569 @itemx marginHeight
570 @itemx marginLeft
571 @itemx marginRight
572 @itemx marginTop
573 @itemx marginWidth
574 Amount of space to leave around the item, within the border.
575 @item borderWidth
576 The width of the border around the menu item, on all sides.
577 @item shadowThickness
578 The width of the border shadow.
579 @item bottomShadowColor
580 The color for the border shadow, on the bottom and the right.
581 @item topShadowColor
582 The color for the border shadow, on the top and the left.
583 @end table
584
585
586 @node GTK resources
587 @appendixsec GTK resources
588 @cindex GTK resources and customization
589 @cindex resource files for GTK
590 @cindex @file{~/.gtkrc-2.0} file
591 @cindex @file{~/.emacs.d/gtkrc} file
592
593 If Emacs was built to use the GTK widget set, then the menu bar,
594 scroll bar and the dialogs are customized with the standard GTK
595 customization file, @file{~/.gtkrc-2.0}, or with the Emacs specific
596 file @file{~/.emacs.d/gtkrc}. We recommend that you use
597 @file{~/.emacs.d/gtkrc} for customizations, since @file{~/.gtkrc-2.0}
598 seems to be ignored when running GConf with GNOME. These files apply
599 only to GTK widget features. To customize Emacs font, background,
600 faces, etc., use the normal X resources (@pxref{Resources}).
601
602 Some GTK themes override these mechanisms, which means that using
603 these mechanisms will not work to customize them.
604
605 In these files you first define a style and say what it means; then
606 you specify to apply the style to various widget types (@pxref{GTK
607 widget names}). Here is an example of how to change the font for
608 Emacs menus:
609
610 @smallexample
611 # @r{Define the style @samp{metafont}.}
612 style "menufont"
613 @{
614 font_name = "helvetica bold 14" # This is a Pango font name
615 @}
616
617 # @r{Specify that widget type @samp{*emacs-menuitem*} uses @samp{metafont}.}
618 widget "*emacs-menuitem*" style "menufont"
619 @end smallexample
620
621 Here is a more elaborate example, showing how to change the parts of
622 the scroll bar:
623
624 @smallexample
625 style "scroll"
626 @{
627 fg[NORMAL] = "red"@ @ @ @ @ # @r{The arrow color.}
628 bg[NORMAL] = "yellow"@ @ # @r{The thumb and background around the arrow.}
629 bg[ACTIVE] = "blue"@ @ @ @ # @r{The trough color.}
630 bg[PRELIGHT] = "white"@ # @r{The thumb color when the mouse is over it.}
631 @}
632
633 widget "*verticalScrollBar*" style "scroll"
634 @end smallexample
635
636 There are also parameters that affect GTK as a whole. For example,
637 the property @code{gtk-font-name} sets the default font for GTK. You
638 must use Pango font names (@pxref{GTK styles}). A GTK resources file
639 that just sets a default font looks like this:
640
641 @smallexample
642 gtk-font-name = "courier 12"
643 @end smallexample
644
645 The GTK resources file is fully described in the GTK API document.
646 This can be found in
647 @file{@var{prefix}/share/gtk-doc/html/gtk/gtk-resource-files.html},
648 where @file{prefix} is the directory in which the GTK libraries were
649 installed (usually @file{/usr} or @file{/usr/local}). You can also
650 find the document online, at
651 @uref{http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html}.
652
653 @menu
654 * GTK widget names:: How widgets in GTK are named in general.
655 * GTK Names in Emacs:: GTK widget names in Emacs.
656 * GTK styles:: What can be customized in a GTK widget.
657 @end menu
658
659 @node GTK widget names
660 @appendixsubsec GTK widget names
661 @cindex GTK widget names
662
663 A GTK widget is specified by its @dfn{widget class} and
664 @dfn{widget name}. The widget class is the type of the widget: for
665 example, @code{GtkMenuBar}. The widget name is the name given to a
666 specific widget. A widget always has a class, but need not have a
667 name.
668
669 @dfn{Absolute names} are sequences of widget names or widget
670 classes, corresponding to hierarchies of widgets embedded within
671 other widgets. For example, if a @code{GtkWindow} named @code{top}
672 contains a @code{GtkVBox} named @code{box}, which in turn contains
673 a @code{GtkMenuBar} called @code{menubar}, the absolute class name
674 of the menu-bar widget is @code{GtkWindow.GtkVBox.GtkMenuBar}, and
675 its absolute widget name is @code{top.box.menubar}.
676
677 When assigning a style to a widget, you can use the absolute class
678 name or the absolute widget name.
679
680 There are two commands to specify changes for widgets:
681
682 @table @asis
683 @item @code{widget_class}
684 specifies a style for widgets based on the absolute class name.
685
686 @item @code{widget}
687 specifies a style for widgets based on the absolute class name,
688 or just the class.
689 @end table
690
691 @noindent
692 You must specify the class and the style in double-quotes, and put
693 these commands at the top level in the GTK customization file, like
694 this:
695
696 @smallexample
697 style "menufont"
698 @{
699 font_name = "helvetica bold 14"
700 @}
701
702 widget "top.box.menubar" style "menufont"
703 widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "menufont"
704 @end smallexample
705
706 Matching of absolute names uses shell wildcard syntax: @samp{*}
707 matches zero or more characters and @samp{?} matches one character.
708 This example assigns @code{base_style} to all widgets:
709
710 @smallexample
711 widget "*" style "base_style"
712 @end smallexample
713
714 Given the absolute class name @code{GtkWindow.GtkVBox.GtkMenuBar}
715 and the corresponding absolute widget name @code{top.box.menubar}, all
716 these examples specify @code{my_style} for the menu bar:
717
718 @smallexample
719 widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "my_style"
720 widget_class "GtkWindow.*.GtkMenuBar" style "my_style"
721 widget_class "*GtkMenuBar" style "my_style"
722 widget "top.box.menubar" style "my_style"
723 widget "*box*menubar" style "my_style"
724 widget "*menubar" style "my_style"
725 widget "*menu*" style "my_style"
726 @end smallexample
727
728 @node GTK Names in Emacs
729 @appendixsubsec GTK Widget Names in Emacs
730 @cindex GTK widget names
731 @cindex GTK widget classes
732
733 In Emacs, the top level widget for a frame is a @code{GtkWindow}
734 that contains a @code{GtkVBox}. The @code{GtkVBox} contains the
735 @code{GtkMenuBar} and a @code{GtkFixed} widget. The vertical scroll
736 bars, @code{GtkVScrollbar}, are contained in the @code{GtkFixed}
737 widget. The text you write in Emacs is drawn in the @code{GtkFixed}
738 widget.
739
740 Dialogs in Emacs are @code{GtkDialog} widgets. The file dialog is a
741 @code{GtkFileSelection} widget.
742
743 @noindent
744 To set a style for the menu bar using the absolute class name, use:
745
746 @smallexample
747 widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "my_style"
748 @end smallexample
749
750 @noindent
751 For the scroll bar, the absolute class name is:
752
753 @smallexample
754 widget_class
755 "GtkWindow.GtkVBox.GtkFixed.GtkVScrollbar"
756 style "my_style"
757 @end smallexample
758
759 @noindent
760 The names for the emacs widgets, and their classes, are:
761
762 @multitable {@code{verticalScrollbar plus}} {@code{GtkFileSelection} and some}
763 @item @code{emacs-filedialog}
764 @tab @code{GtkFileSelection}
765 @item @code{emacs-dialog}
766 @tab @code{GtkDialog}
767 @item @code{Emacs}
768 @tab @code{GtkWindow}
769 @item @code{pane}
770 @tab @code{GtkVHbox}
771 @item @code{emacs}
772 @tab @code{GtkFixed}
773 @item @code{verticalScrollBar}
774 @tab @code{GtkVScrollbar}
775 @item @code{emacs-toolbar}
776 @tab @code{GtkToolbar}
777 @item @code{menubar}
778 @tab @code{GtkMenuBar}
779 @item @code{emacs-menuitem}
780 @tab anything in menus
781 @end multitable
782
783 @noindent
784 Thus, for Emacs you can write the two examples above as:
785
786 @smallexample
787 widget "Emacs.pane.menubar" style "my_style"
788 widget "Emacs.pane.emacs.verticalScrollBar" style "my_style"
789 @end smallexample
790
791 GTK absolute names are quite strange when it comes to menus
792 and dialogs. The names do not start with @samp{Emacs}, as they are
793 free-standing windows and not contained (in the GTK sense) by the
794 Emacs GtkWindow. To customize the dialogs and menus, use wildcards like this:
795
796 @smallexample
797 widget "*emacs-dialog*" style "my_dialog_style"
798 widget "*emacs-filedialog* style "my_file_style"
799 widget "*emacs-menuitem* style "my_menu_style"
800 @end smallexample
801
802 If you specify a customization in @file{~/.emacs.d/gtkrc}, then it
803 automatically applies only to Emacs, since other programs don't read
804 that file. For example, the drop down menu in the file dialog can not
805 be customized by any absolute widget name, only by an absolute class
806 name. This is because the widgets in the drop down menu do not
807 have names and the menu is not contained in the Emacs GtkWindow. To
808 have all menus in Emacs look the same, use this in
809 @file{~/.emacs.d/gtkrc}:
810
811 @smallexample
812 widget_class "*Menu*" style "my_menu_style"
813 @end smallexample
814
815 @node GTK styles
816 @appendixsubsec GTK styles
817 @cindex GTK styles
818
819 In a GTK style you specify the appearance widgets shall have. You
820 can specify foreground and background color, background pixmap and
821 font. The edit widget (where you edit the text) in Emacs is a GTK
822 widget, but trying to specify a style for the edit widget will have no
823 effect. This is so that Emacs compiled for GTK is compatible with
824 Emacs compiled for other X toolkits. The settings for foreground,
825 background and font for the edit widget is taken from the X resources;
826 @pxref{Resources}. Here is an example of two style declarations,
827 @samp{default} and @samp{ruler}:
828
829 @smallexample
830 pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"
831
832 style "default"
833 @{
834 font_name = "helvetica 12"
835
836 bg[NORMAL] = @{ 0.83, 0.80, 0.73 @}
837 bg[SELECTED] = @{ 0.0, 0.55, 0.55 @}
838 bg[INSENSITIVE] = @{ 0.77, 0.77, 0.66 @}
839 bg[ACTIVE] = @{ 0.0, 0.55, 0.55 @}
840 bg[PRELIGHT] = @{ 0.0, 0.55, 0.55 @}
841
842 fg[NORMAL] = "black"
843 fg[SELECTED] = @{ 0.9, 0.9, 0.9 @}
844 fg[ACTIVE] = "black"
845 fg[PRELIGHT] = @{ 0.9, 0.9, 0.9 @}
846
847 base[INSENSITIVE] = "#777766"
848 text[INSENSITIVE] = @{ 0.60, 0.65, 0.57 @}
849
850 bg_pixmap[NORMAL] = "background.xpm"
851 bg_pixmap[INSENSITIVE] = "background.xpm"
852 bg_pixmap[ACTIVE] = "background.xpm"
853 bg_pixmap[PRELIGHT] = "<none>"
854
855 @}
856
857 style "ruler" = "default"
858 @{
859 font_name = "helvetica 8"
860 @}
861
862 @end smallexample
863
864 The style @samp{ruler} inherits from @samp{default}. This way you can build
865 on existing styles. The syntax for fonts and colors is described below.
866
867 As this example shows, it is possible to specify several values for
868 foreground and background depending on the widget's @dfn{state}. The
869 possible states are:
870
871 @table @code
872 @item NORMAL
873 This is the default state for widgets.
874 @item ACTIVE
875 This is the state for a widget that is ready to do something. It is
876 also for the trough of a scroll bar, i.e. @code{bg[ACTIVE] = "red"}
877 sets the scroll bar trough to red. Buttons that have been pressed but
878 not released yet (``armed'') are in this state.
879 @item PRELIGHT
880 This is the state when widgets that can be manipulated have the mouse
881 pointer over them. For example when the mouse is over the thumb in the
882 scroll bar or over a menu item. When the mouse is over a button that
883 is not pressed, the button is in this state.
884 @item SELECTED
885 This is the state when some data has been selected by the user. It can
886 be selected text or items selected in a list.
887 There is no place in Emacs where this setting has any effect.
888 @item INSENSITIVE
889 This is the state for widgets that are visible, but they can not be
890 manipulated in the usual way---for example, buttons that can't be
891 pressed, and disabled menu items. To display disabled menu items in
892 yellow, use @code{fg[INSENSITIVE] = "yellow"}.
893 @end table
894
895 Here are the things that can go in a style declaration:
896
897 @table @code
898 @item bg[@var{state}] = @var{color}
899 This specifies the background color for the widget. Note that
900 editable text doesn't use @code{bg}; it uses @code{base} instead.
901
902 @item base[@var{state}] = @var{color}
903 This specifies the background color for editable text. In Emacs, this
904 color is used for the background of the text fields in the file
905 dialog.
906
907 @item bg_pixmap[@var{state}] = "@var{pixmap}"
908 This specifies an image background (instead of a background color).
909 @var{pixmap} should be the image file name. GTK can use a number of
910 image file formats, including XPM, XBM, GIF, JPEG and PNG. If you
911 want a widget to use the same image as its parent, use
912 @samp{<parent>}. If you don't want any image, use @samp{<none>}.
913 @samp{<none>} is the way to cancel a background image inherited from a
914 parent style.
915
916 You can't specify the file by its absolute file name. GTK looks for
917 the pixmap file in directories specified in @code{pixmap_path}.
918 @code{pixmap_path} is a colon-separated list of directories within
919 double quotes, specified at the top level in a @file{gtkrc} file
920 (i.e. not inside a style definition; see example above):
921
922 @smallexample
923 pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"
924 @end smallexample
925
926 @item fg[@var{state}] = @var{color}
927 This specifies the foreground color for widgets to use. It is the
928 color of text in menus and buttons, and the color for the arrows in
929 the scroll bar. For editable text, use @code{text}.
930
931 @item text[@var{state}] = @var{color}
932 This is the color for editable text. In Emacs, this color is used for the
933 text fields in the file dialog.
934
935 @item font_name = "@var{font}"
936 This specifies the font for text in the widget. @var{font} is a
937 Pango font name, for example @samp{Sans Italic 10}, @samp{Helvetica
938 Bold 12}, @samp{Courier 14}, @samp{Times 18}. See below for exact
939 syntax. The names are case insensitive.
940 @end table
941
942 There are three ways to specify a color: by name, in hexadecimal
943 form, and with an RGB triplet.
944
945 @noindent
946 A color name is written within double quotes, for example @code{"red"}.
947
948 @noindent
949 Hexadecimal form is the same as in X:
950 @code{#@var{rrrr}@var{gggg}@var{bbbb}}, where all three color specs
951 must have the same number of hex digits (1, 2, 3 or 4).
952
953 @noindent
954 An RGB triplet looks like @code{@{ @var{r}, @var{g}, @var{b} @}},
955 where @var{r}, @var{g} and @var{b} are either integers in the range
956 0-65535 or floats in the range 0.0-1.0.
957
958 Pango font names have the form ``@var{family-list} @var{style-options}
959 @var{size}''.
960 @cindex Pango font name
961 @noindent
962 @var{family-list} is a comma separated list of font families optionally
963 terminated by a comma. This way you can specify several families and the
964 first one found will be used. @var{family} corresponds to the second part in
965 an X font name, for example in
966
967 @smallexample
968 -adobe-times-medium-r-normal--12-120-75-75-p-64-iso10646-1
969 @end smallexample
970
971 @noindent
972 the family name is ``times''.
973
974 @noindent
975 @var{style-options} is a whitespace separated list of words where each word
976 is a style, variant, weight, or stretch. The default value for all of
977 these is @code{normal}.
978
979 @noindent
980 A `style' corresponds to the fourth part of an X font name. In X font
981 names it is the character @samp{r}, @samp{i} or @samp{o}; in Pango
982 font names the corresponding values are @code{normal}, @code{italic},
983 or @code{oblique}.
984
985 @noindent
986 A `variant' is either @code{normal} or @code{small-caps}.
987 Small caps is a font with the lower case characters replaced by
988 smaller variants of the capital characters.
989
990 @noindent
991 Weight describes the ``boldness'' of a font. It corresponds to the third
992 part of an X font name. It is one of @code{ultra-light}, @code{light},
993 @code{normal}, @code{bold}, @code{ultra-bold}, or @code{heavy}.
994
995 @noindent
996 Stretch gives the width of the font relative to other designs within a
997 family. It corresponds to the fifth part of an X font name. It is one of
998 @code{ultra-condensed}, @code{extra-condensed}, @code{condensed},
999 @code{semi-condensed}, @code{normal}, @code{semi-expanded},
1000 @code{expanded}, @code{extra-expanded}, or @code{ultra-expanded}.
1001
1002 @noindent
1003 @var{size} is a decimal number that describes the font size in points.
1004
1005 @ignore
1006 arch-tag: 9b6ff773-48b6-41f6-b2f9-f114b8bdd97f
1007 @end ignore