@c This is part of the Emacs manual.
-@c Copyright (C) 1987,93,94,95,1997,2001,03 Free Software Foundation, Inc.
+@c Copyright (C) 1987, 1993, 1994, 1995, 1997, 2001, 2002, 2003,
+@c 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See file emacs.texi for copying conditions.
@node X Resources, Antinews, Emacs Invocation, Top
@appendix X Options and Resources
You can customize some X-related aspects of Emacs behavior using X
resources, as is usual for programs that use X. On MS-Windows, you
can customize some of the same aspects using the system registry.
-@xref{MS-Windows Registry}.
+@xref{MS-Windows Registry}. Likewise, Emacs on MacOS Carbon emulates X
+resources using the Preferences system. @xref{Mac Environment Variables}.
- When Emacs is built using an `X toolkit', such as Lucid or LessTif,
-you need to use X resources to customize the appearance of the
-widgets, including the menu-bar, scroll-bar, and dialog boxes. This
-is because the libraries that implement these don't provide for
+ When Emacs is built using an ``X toolkit'', such as Lucid or
+LessTif, you need to use X resources to customize the appearance of
+the widgets, including the menu-bar, scroll-bar, and dialog boxes.
+This is because the libraries that implement these don't provide for
customization through Emacs. GTK+ widgets use a separate system of
-`GTK resources', which we will also describe.
+@ifnottex
+``GTK resources'', which we will also describe.
+@end ifnottex
+@iftex
+``GTK resources.'' In this chapter we describe the most commonly used
+resource specifications. For full documentation, see the online
+manual.
+
+@c Add xref for LessTif/Motif menu resources.
+@end iftex
+
@menu
* Resources:: Using X resources with Emacs (in general).
(optionally even for all programs).
@cindex Registry (MS-Windows)
- MS-Windows systems don't support @file{~/.Xdefaults} files, but
-Emacs compiled for Windows looks for X resources in the Windows
-Registry, under the key @samp{HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs}
-and then under the key @samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}.
-The menu and scrollbars are native widgets on MS-Windows, so they are
-only customizable via the system-wide settings in the Display Control
-Panel. You can also set resources using the @samp{-xrm} command line
-option (see below.)
+ MS-Windows systems do not support @file{~/.Xdefaults} files, so
+instead Emacs compiled for Windows looks for X resources in the
+Windows Registry, first under the key
+@samp{HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs} and then under the key
+@samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}. The menu and scroll
+bars are native widgets on MS-Windows, so they are only customizable
+via the system-wide settings in the Display Control Panel. You can
+also set resources using the @samp{-xrm} command line option (see
+below.)
+@iftex
+ Applications such as Emacs look for resources with specific names
+and their particular meanings. Case distinctions are significant in
+these names. Each resource specification in @file{~/.Xdefaults}
+states the name of the program and the name of the resource. For
+Emacs, the program name is @samp{Emacs}. It looks like this:
+
+@example
+Emacs.borderWidth: 2
+@end example
+@end iftex
+@ifnottex
Programs define named resources with particular meanings. They also
define how to group resources into named classes. For instance, in
Emacs, the @samp{internalBorder} resource controls the width of the
emacs.BorderWidth: 2
emacs.borderWidth: 4
@end example
+@end ifnottex
The order in which the lines appear in the file does not matter.
Also, command-line options always override the X resources file.
+
+@ifnottex
Here is a list of X command-line options and their corresponding
resource names.
One way to experiment with the effect of different resource settings
is to use the @code{editres} program. Select @samp{Get Tree} from the
+@end ifnottex
+@iftex
+ You can experiment with the effect of different resource settings
+with the @code{editres} program. Select @samp{Get Tree} from the
+@end iftex
@samp{Commands} menu, then click on an Emacs frame. This will display
a tree showing the structure of X toolkit widgets used in an Emacs
frame. Select one of them, such as @samp{menubar}, then select
@samp{Show Resource Box} from the @samp{Commands} menu. This displays
-a list of all the meaningful X resources and allows you to edit them.
-Changes take effect immediately if you click on the @samp{Apply} button.
-(See the @code{editres} man page for more details.)
+a list of all the meaningful X resources for that widget, and allows
+you to edit them. Changes take effect when you click on the
+@samp{Apply} button. (See the @code{editres} man page for more
+details.)
@node Table of Resources
@appendixsec Table of X Resources for Emacs
@item @code{background} (class @code{Background})
Background color name.
+@ifnottex
@item @code{bitmapIcon} (class @code{BitmapIcon})
Use a bitmap icon (a picture of a gnu) if @samp{on}, let the window
manager choose an icon if @samp{off}.
+@end ifnottex
@item @code{borderColor} (class @code{BorderColor})
Color name for the external border.
+@ifnottex
@item @code{borderWidth} (class @code{BorderWidth})
Width in pixels of the external border.
+@end ifnottex
@item @code{cursorColor} (class @code{Foreground})
Color name for text cursor (point).
+@ifnottex
@item @code{cursorBlink} (class @code{CursorBlink})
Specifies whether to make the cursor blink. The default is @samp{on}. Use
@samp{off} or @samp{false} to turn cursor blinking off.
+@end ifnottex
@item @code{font} (class @code{Font})
-Font name for text (or fontset name, @pxref{Fontsets}).
+Font name (or fontset name, @pxref{Fontsets}) for @code{default} font.
@item @code{foreground} (class @code{Foreground})
Color name for text.
name, only that frame). However, the size, if specified here, applies to
all frames.
+@ifnottex
@item @code{fullscreen} (class @code{Fullscreen})
The desired fullscreen size. The value can be one of @code{fullboth},
@code{fullwidth} or @code{fullheight}, which correspond to
the command-line options @samp{-fs}, @samp{-fw}, and @samp{-fh}
(@pxref{Window Size X}).
-Note that this applies to all frames created, not just the initial
-one.
+Note that this applies to the initial frame only.
+@end ifnottex
@item @code{iconName} (class @code{Title})
Name to display in the icon.
@item @code{menuBar} (class @code{MenuBar})
@cindex menu bar
-Give frames menu bars if @samp{on}; don't have menu bars if
-@samp{off}. @xref{Lucid Resources}, and @ref{LessTif Resources}, for
-how to control the appearance of the menu bar if you have one.
+Give frames menu bars if @samp{on}; don't have menu bars if @samp{off}.
+@ifnottex
+@xref{Lucid Resources}, and @ref{LessTif Resources},
+@end ifnottex
+@iftex
+@xref{Lucid Resources},
+@end iftex
+for how to control the appearance of the menu bar if you have one.
+@ifnottex
@item @code{minibuffer} (class @code{Minibuffer})
If @samp{none}, don't make a minibuffer in this frame.
It will use a separate minibuffer frame instead.
@item @code{paneFont} (class @code{Font})
@cindex font for menus
Font name for menu pane titles, in non-toolkit versions of Emacs.
+@end ifnottex
@item @code{pointerColor} (class @code{Foreground})
Color of the mouse cursor.
+@ifnottex
@item @code{privateColormap} (class @code{PrivateColormap})
If @samp{on}, use a private color map, in the case where the ``default
visual'' of class PseudoColor and Emacs is using it.
@item @code{reverseVideo} (class @code{ReverseVideo})
Switch foreground and background default colors if @samp{on}, use colors as
specified if @samp{off}.
+@end ifnottex
@item @code{screenGamma} (class @code{ScreenGamma})
@cindex gamma correction
Gamma correction for colors, equivalent to the frame parameter
@code{screen-gamma}.
+@item @code{scrollBarWidth} (class @code{ScrollBarWidth})
+@cindex scrollbar width
+The scroll bar width in pixels, equivalent to the frame parameter
+@code{scroll-bar-width}.
+
+@ifnottex
@item @code{selectionFont} (class @code{SelectionFont})
Font name for pop-up menu items, in non-toolkit versions of Emacs. (For
toolkit versions, see @ref{Lucid Resources}, also see @ref{LessTif
@cindex synchronous X mode
Run Emacs in synchronous mode if @samp{on}. Synchronous mode is
useful for debugging X problems.
+@end ifnottex
@item @code{title} (class @code{Title})
Name to display in the title bar of the initial Emacs frame.
the tool bar. If the value is non-zero and
@code{auto-resize-tool-bars} is non-@code{nil}, the tool bar's size
will be changed automatically so that all tool bar items are visible.
+ If the value of @code{auto-resize-tool-bars} is @code{grow-only},
+the tool bar expands automatically, but does not contract automatically.
+To contract the tool bar, you must redraw the frame by entering @kbd{C-l}.
@item @code{useXIM} (class @code{UseXIM})
@cindex XIM
Give frames scroll bars if @samp{on}; don't have scroll bars if
@samp{off}.
+@ifnottex
@item @code{visualClass} (class @code{VisualClass})
Specify the ``visual'' that X should use. This tells X how to handle
colors.
@samp{-@var{depth}}, where @var{depth} is the number of color planes.
Most terminals only allow a few ``visuals,'' and the @samp{dpyinfo}
program outputs information saying which ones.
+@end ifnottex
@end table
@node Face Resources
@appendixsec X Resources for Faces
- You can also use resources to customize the appearance of particular
+ You can use resources to customize the appearance of particular
faces (@pxref{Faces}):
@table @code
-@item @var{face}.attributeFont
-Font for face @var{face}.
@item @var{face}.attributeForeground
Foreground color for face @var{face}.
@item @var{face}.attributeBackground
@item @var{face}.attributeUnderline
Underline flag for face @var{face}. Use @samp{on} or @samp{true} for
yes.
+@item @var{face}.attributeStrikeThrough
+@itemx @var{face}.attributeOverline
+@itemx @var{face}.attributeBox
+@itemx @var{face}.attributeInverse
+Likewise, for other boolean font attributes.
+@item @var{face}.attributeStipple
+The name of a pixmap data file to use for the stipple pattern, or
+@code{false} to not use stipple for the face @var{face}.
+@item @var{face}.attributeBackgroundPixmap
+The background pixmap for the face @var{face}. Should be a name of a
+pixmap file or @code{false}.
+@item @var{face}.attributeFont
+Font name (full XFD name or valid X abbreviation) for face @var{face}.
+Instead of this, you can specify the font through separate attributes.
+@end table
+
+ Instead of using @code{attributeFont} to specify a font name, you can
+select a font through these separate attributes:
+
+@table @code
@item @var{face}.attributeFamily
Font family for face @var{face}.
-@item @var{face}.attributeWidth
-Relative proportional width of the font to use for face @var{face}.
-It should be one of @code{ultra-condensed}, @code{extra-condensed},
-@code{condensed}, @code{semi-condensed}, @code{normal},
-@code{semi-expanded}, @code{expanded}, @code{extra-expanded}, or
-@code{ultra-expanded}.
@item @var{face}.attributeHeight
Height of the font to use for face @var{face}: either an integer
specifying the height in units of 1/10@dmn{pt}, or a floating point
number that specifies a scale factor to scale the underlying face's
default font, or a function to be called with the default height which
will return a new height.
-@item @var{face}.attributeWeight
-A weight to use for the face @var{face}. It must be one of
-@code{ultra-bold}, @code{extra-bold}, @code{bold},
-@code{semi-bold}, @code{normal}, @code{semi-light}, @code{light},
-@code{extra-light}, @code{ultra-light}.
-@item @var{face}.attributeSlant
-The slant to use for the font of face @var{face}. It must be one of
-@code{italic}, @code{oblique}, @code{normal},
-@code{reverse-italic}, or @code{reverse-oblique}.
-@item @var{face}.attributeStrikeThrough
-Whether the face @var{face} should be drawn with a line striking
-through the characters.
-@item @var{face}.attributeOverline
-Whether the characters in the face @var{face} should be overlined.
-@item @var{face}.attributeBox
-Whether to draw a box around the characters in face @var{face}.
-@item @var{face}.attributeInverse
-Whether to display the characters in face @var{face} in inverse
-video.
-@item @var{face}.attributeStipple
-The name of a pixmap data file to use for the stipple pattern, or
-@code{false} to not use stipple for the face @var{face}.
-@item @var{face}.attributeBackgroundPixmap
-The background pixmap for the face @var{face}. Should be a name of a
-pixmap file or @code{false}.
+@item @var{face}.attributeWidth
+@itemx @var{face}.attributeWeight
+@itemx @var{face}.attributeSlant
+Each of these resources corresponds to a like-named font attribute,
+and you write the resource value the same as the symbol you would use
+for the font attribute value.
@item @var{face}.attributeBold
-Whether to draw the characters in the face @var{face} as bold.
+Bold flag for face @var{face}---instead of @code{attributeWeight}. Use @samp{on} or @samp{true} for
+yes.
@item @var{face}.attributeItalic
-Whether to draw the characters in the face @var{face} as italic.
+Italic flag for face @var{face}---instead of @code{attributeSlant}.
@end table
@node Lucid Resources
@cindex Menu X Resources (Lucid widgets)
@cindex Lucid Widget X Resources
+@ifnottex
If the Emacs installed at your site was built to use the X toolkit
with the Lucid menu widgets, then the menu bar is a separate widget and
has its own resources. The resource names contain @samp{pane.menubar}
@noindent
For example, to specify the font @samp{8x16} for the menu-bar items,
write this:
+@end ifnottex
+@iftex
+ If the Emacs installed at your site was built to use the X toolkit
+with the Lucid menu widgets, then the menu bar is a separate widget
+and has its own resources. The resource specifications start with
+@samp{Emacs.pane.menubar}---for instance, to specify the font
+@samp{8x16} for the menu-bar items, write this:
+@end iftex
@example
Emacs.pane.menubar.font: 8x16
@noindent
Resources for @emph{non-menubar} toolkit pop-up menus have
-@samp{menu*}, in like fashion. For example, to specify the font
-@samp{8x16} for the pop-up menu items, write this:
+@samp{menu*} instead of @samp{pane.menubar}. For example, to specify
+the font @samp{8x16} for the pop-up menu items, write this:
@example
Emacs.menu*.font: 8x16
@end example
@noindent
-For dialog boxes, use @samp{dialog} instead of @samp{menu}:
+For dialog boxes, use @samp{dialog*}:
@example
Emacs.dialog*.font: 8x16
@end example
@noindent
-The Lucid menus can display multilingual text in your locale. For more
-information about fontsets see the man page for XCreateFontSet. To enable
-multilingual menu text you specify a fontSet resource instead of the font
-resource. If both font and fontSet resources are specified, the fontSet
-resource is used. To specify
-@samp{-*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*} for both the popup and
-menu bar menus, write this:
+The Lucid menus can display multilingual text in your locale. For
+more information about fontsets see the man page for
+@code{XCreateFontSet}. To enable multilingual menu text you specify a
+@code{fontSet} resource instead of the font resource. If both
+@code{font} and @code{fontSet} resources are specified, the
+@code{fontSet} resource is used.
+
+ Thus, to specify @samp{-*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*}
+for both the popup and menu bar menus, write this:
@example
-Emacs*fontSet: -*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*
+Emacs*menu*fontSet: -*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*
@end example
@noindent
+The @samp{*menu*} as a wildcard matches @samp{pane.menubar} and
+@samp{menu@dots{}}.
+
Experience shows that on some systems you may need to add
@samp{shell.}@: before the @samp{pane.menubar} or @samp{menu*}. On
-some other systems, you must not add @samp{shell.}.
+some other systems, you must not add @samp{shell.}. The generic wildcard
+approach should work on both kinds of systems.
Here is a list of the specific resources for menu bars and pop-up menus:
Color of the background.
@item buttonForeground
In the menu bar, the color of the foreground for a selected item.
+@ifnottex
@item horizontalSpacing
Horizontal spacing in pixels between items. Default is 3.
@item verticalSpacing
this to 2. If you have no problems with visibility, the default
probably looks better. The background color may also have some effect
on the contrast.
+@end ifnottex
@item margin
The margin of the menu bar, in characters. Default is 1.
@end table
+@ifnottex
@node LessTif Resources
@appendixsec LessTif Menu X Resources
@cindex Menu X Resources (LessTif widgets)
@item topShadowColor
The color for the border shadow, on the top and the left.
@end table
+@end ifnottex
@node GTK resources
@appendixsec GTK resources
+@iftex
+ The most common way to customize the GTK widgets Emacs uses (menus, dialogs
+tool bars and scroll bars) is by choosing an appropriate theme, for example
+with the GNOME theme selector. You can also do Emacs specific customization
+by inserting GTK style directives in the file @file{~/.emacs.d/gtkrc}. Some GTK
+themes ignore customizations in @file{~/.emacs.d/gtkrc} so not everything
+works with all themes. To customize Emacs font, background, faces, etc., use
+the normal X resources (@pxref{Resources}). We will present some examples of
+customizations here, but for a more detailed description, see the online manual
+
+ The first example is just one line. It changes the font on all GTK widgets
+to courier with size 12:
+
+@smallexample
+gtk-font-name = "courier 12"
+@end smallexample
+
+ The thing to note is that the font name is not an X font name, like
+-*-helvetica-medium-r-*--*-120-*-*-*-*-*-*, but a Pango font name. A Pango
+font name is basically of the format "family style size", where the style
+is optional as in the case above. A name with a style could be for example:
+
+@smallexample
+gtk-font-name = "helvetica bold 10"
+@end smallexample
+
+ To customize widgets you first define a style and then apply the style to
+the widgets. Here is an example that sets the font for menus, but not
+for other widgets:
+
+@smallexample
+# @r{Define the style @samp{menufont}.}
+style "menufont"
+@{
+ font_name = "helvetica bold 14" # This is a Pango font name
+@}
+
+# @r{Specify that widget type @samp{*emacs-menuitem*} uses @samp{menufont}.}
+widget "*emacs-menuitem*" style "menufont"
+@end smallexample
+
+The widget name in this example contains wildcards, so the style will be
+applied to all widgets that match "*emacs-menuitem*". The widgets are
+named by the way they are contained, from the outer widget to the inner widget.
+So to apply the style "my_style" (not shown) with the full, absolute name, for
+the menubar and the scroll bar in Emacs we use:
+
+@smallexample
+widget "Emacs.pane.menubar" style "my_style"
+widget "Emacs.pane.emacs.verticalScrollBar" style "my_style"
+@end smallexample
+
+But to avoid having to type it all, wildcards are often used. @samp{*}
+matches zero or more characters and @samp{?} matches one character. So "*"
+matches all widgets.
+
+ Each widget has a class (for example GtkMenuItem) and a name (emacs-menuitem).
+You can assign styles by name or by class. In this example we have used the
+class:
+
+@smallexample
+style "menufont"
+@{
+ font_name = "helvetica bold 14"
+@}
+
+widget_class "*GtkMenuBar" style "menufont"
+@end smallexample
+
+@noindent
+The names and classes for the GTK widgets Emacs uses are:
+
+@multitable {@code{verticalScrollbar plus}} {@code{GtkFileSelection} and some}
+@item @code{emacs-filedialog}
+@tab @code{GtkFileSelection}
+@item @code{emacs-dialog}
+@tab @code{GtkDialog}
+@item @code{Emacs}
+@tab @code{GtkWindow}
+@item @code{pane}
+@tab @code{GtkVHbox}
+@item @code{emacs}
+@tab @code{GtkFixed}
+@item @code{verticalScrollBar}
+@tab @code{GtkVScrollbar}
+@item @code{emacs-toolbar}
+@tab @code{GtkToolbar}
+@item @code{menubar}
+@tab @code{GtkMenuBar}
+@item @code{emacs-menuitem}
+@tab anything in menus
+@end multitable
+
+ GTK absolute names are quite strange when it comes to menus
+and dialogs. The names do not start with @samp{Emacs}, as they are
+free-standing windows and not contained (in the GTK sense) by the
+Emacs GtkWindow. To customize the dialogs and menus, use wildcards like this:
+
+@smallexample
+widget "*emacs-dialog*" style "my_dialog_style"
+widget "*emacs-filedialog* style "my_file_style"
+widget "*emacs-menuitem* style "my_menu_style"
+@end smallexample
+
+ If you specify a customization in @file{~/.emacs.d/gtkrc}, then it
+automatically applies only to Emacs, since other programs don't read
+that file. For example, the drop down menu in the file dialog can not
+be customized by any absolute widget name, only by an absolute class
+name. This is because the widgets in the drop down menu do not
+have names and the menu is not contained in the Emacs GtkWindow. To
+have all menus in Emacs look the same, use this in
+@file{~/.emacs.d/gtkrc}:
+
+@smallexample
+widget_class "*Menu*" style "my_menu_style"
+@end smallexample
+
+ Here is a more elaborate example, showing how to change the parts of
+the scroll bar:
+
+@smallexample
+style "scroll"
+@{
+ fg[NORMAL] = "red"@ @ @ @ @ # @r{The arrow color.}
+ bg[NORMAL] = "yellow"@ @ # @r{The thumb and background around the arrow.}
+ bg[ACTIVE] = "blue"@ @ @ @ # @r{The trough color.}
+ bg[PRELIGHT] = "white"@ # @r{The thumb color when the mouse is over it.}
+@}
+
+widget "*verticalScrollBar*" style "scroll"
+@end smallexample
+@end iftex
+
+@ifnottex
@cindex GTK resources and customization
@cindex resource files for GTK
@cindex @file{~/.gtkrc-2.0} file
@cindex @file{~/.emacs.d/gtkrc} file
- If Emacs was built to use the GTK widget set, then the menu bar,
+ If Emacs was built to use the GTK widget set, then the menu bar, tool bar,
scroll bar and the dialogs are customized with the standard GTK
customization file, @file{~/.gtkrc-2.0}, or with the Emacs specific
file @file{~/.emacs.d/gtkrc}. We recommend that you use
Emacs menus:
@smallexample
-# @r{Define the style @samp{metafont}.}
+# @r{Define the style @samp{menufont}.}
style "menufont"
@{
font_name = "helvetica bold 14" # This is a Pango font name
@}
-# @r{Specify that widget type @samp{*emacs-menuitem*} uses @samp{metafont}.}
+# @r{Specify that widget type @samp{*emacs-menuitem*} uses @samp{menufont}.}
widget "*emacs-menuitem*" style "menufont"
@end smallexample
sets the scroll bar trough to red. Buttons that have been pressed but
not released yet (``armed'') are in this state.
@item PRELIGHT
-This is the state when widgets that can be manipulated have the mouse
-pointer over them. For example when the mouse is over the thumb in the
-scroll bar or over a menu item. When the mouse is over a button that
-is not pressed, the button is in this state.
+This is the state for a widget that can be manipulated, when the mouse
+pointer is over it---for example when the mouse is over the thumb in
+the scroll bar or over a menu item. When the mouse is over a button
+that is not pressed, the button is in this state.
@item SELECTED
-This is the state when some data has been selected by the user. It can
-be selected text or items selected in a list.
-There is no place in Emacs where this setting has any effect.
+This is the state for data that has been selected by the user. It can
+be selected text or items selected in a list. This state is not used
+in Emacs.
@item INSENSITIVE
This is the state for widgets that are visible, but they can not be
manipulated in the usual way---for example, buttons that can't be
0-65535 or floats in the range 0.0-1.0.
Pango font names have the form ``@var{family-list} @var{style-options}
-@var{size}''.
+@var{size}.''
@cindex Pango font name
@noindent
@var{family-list} is a comma separated list of font families optionally
@end smallexample
@noindent
-the family name is ``times''.
+the family name is @samp{times}.
@noindent
@var{style-options} is a whitespace separated list of words where each word
@noindent
@var{size} is a decimal number that describes the font size in points.
+@end ifnottex
@ignore
arch-tag: 9b6ff773-48b6-41f6-b2f9-f114b8bdd97f