annotate man/xemacs/custom.texi @ 5167:e374ea766cc1

clean up, rearrange allocation statistics code -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-03-21 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (assert_proper_sizing): * alloc.c (c_readonly): * alloc.c (malloced_storage_size): * alloc.c (fixed_type_block_overhead): * alloc.c (lisp_object_storage_size): * alloc.c (inc_lrecord_stats): * alloc.c (dec_lrecord_stats): * alloc.c (pluralize_word): * alloc.c (object_memory_usage_stats): * alloc.c (Fobject_memory_usage): * alloc.c (compute_memusage_stats_length): * alloc.c (disksave_object_finalization_1): * alloc.c (Fgarbage_collect): * mc-alloc.c: * mc-alloc.c (mc_alloced_storage_size): * mc-alloc.h: No functionality change here. Collect the allocations-statistics code that was scattered throughout alloc.c into one place. Add remaining section headings so that all sections have headings clearly identifying the start of the section and its purpose. Expose mc_alloced_storage_size() even when not MEMORY_USAGE_STATS; this fixes build problems and is related to the export of lisp_object_storage_size() and malloced_storage_size() when non-MEMORY_USAGE_STATS in the previous change set.
author Ben Wing <ben@xemacs.org>
date Sun, 21 Mar 2010 04:41:49 -0500
parents 5502045ec510
children 9fae6227ede5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1
3387
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2 @c FIXME -- we demand a detail menu!
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
3
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @node Customization, Quitting, Emulation, Top
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @chapter Customization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 @cindex customization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 This chapter talks about various topics relevant to adapting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 behavior of Emacs in minor ways.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 All kinds of customization affect only the particular Emacs job that you
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
12 do them in. They are completely lost when you kill the Emacs job, and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
13 have no effect on other Emacs jobs you may run at the same time or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
14 later. The only way an Emacs job can affect anything outside of it is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
15 by writing a file; in particular, the only way to make a customization
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
16 `permanent' is to put something in your init file or other appropriate
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
17 file to do the customization in each session. @xref{Init File}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 * Minor Modes:: Each minor mode is one feature you can turn on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 independently of any others.
775
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
22 * Behaviors:: Like minor modes, behaviors are independent of other
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
23 features, but behaviors are usually enabled globally,
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
24 while minor modes are per-buffer and often temporary.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 * Variables:: Many Emacs commands examine Emacs variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 to decide what to do; by setting variables,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 you can control their functioning.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 * Keyboard Macros:: A keyboard macro records a sequence of keystrokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 to be replayed with a single command.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 * Key Bindings:: The keymaps say what command each key runs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 By changing them, you can "redefine keys".
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 * Syntax:: The syntax table controls how words and expressions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 are parsed.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
34 * Init File:: How to write common customizations in the init file.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
35 * Audible Bell:: Changing how Emacs sounds the bell.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
36 * Faces:: Changing the fonts and colors of a region of text.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
37 * Frame Components:: Controlling the presence and positions of the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
38 menubar, toolbars, and gutters.
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
39 * X Resources:: X resources controlling various aspects of the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 behavior of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 @node Minor Modes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 @section Minor Modes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 @cindex minor modes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 @cindex mode line
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
48 Minor modes are common options which may be useful in many major
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
49 modes, but which may need to be enabled or disabled independently of the
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
50 major mode. (This may be because user preferences for the feature vary,
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
51 or because the feature is sometimes more of a hindrance than an aid
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
52 depending on the specific content of the buffer.) For example, Auto
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
53 Fill mode is a minor mode in which @key{SPC} automatically breaks lines
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
54 between words at the right margin
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
55 as you type. Minor modes are independent of each other and of
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 the selected major mode. Most minor modes inform you in the mode line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 when they are on; for example, @samp{Fill} in the mode line means that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 Auto Fill mode is on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 Append @code{-mode} to the name of a minor mode to get the name of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 command function that turns the mode on or off. Thus, the command to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 enable or disable Auto Fill mode is called @kbd{M-x auto-fill-mode}. These
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 commands are usually invoked with @kbd{M-x}, but you can bind keys to them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 if you wish. With no argument, the function turns the mode on if it was
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
65 off and off if it was on. This is called @dfn{toggling}. A positive
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 argument always turns the mode on, and an explicit zero argument or a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 negative argument always turns it off.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
69 @c #### maybe this list should be extended and moved to its own node?
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
70
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 @cindex Auto Fill mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 @findex auto-fill-mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 Auto Fill mode allows you to enter filled text without breaking lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 explicitly. Emacs inserts newlines as necessary to prevent lines from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 becoming too long. @xref{Filling}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
77 @cindex Filladapt mode
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
78 @findex filladapt-mode
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
79 Filladapt mode is an extension of Auto Fill mode which recognizes
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
80 @dfn{line prefixes} and automatically prepends them when automatically
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
81 breaking lines. Filladapt mode is smart enough to recognize common
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
82 idioms for bullets (e.g., leading isolated hyphens) and enumerated
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
83 paragraphs, and insert appropriate leading whitespace (and omit the
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
84 bullet!) It also does a good job of recognizing common quotation styles
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
85 in email. Filladapt mode must be enabled in addition to Auto Fill
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
86 mode. If Auto Fill mode is disabled, Filladapt mode will be
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
87 inactivated, but the indicator will remain in the modeline.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
88
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 @cindex Overwrite mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 @findex overwrite-mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 Overwrite mode causes ordinary printing characters to replace existing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 text instead of moving it to the right. For example, if point is in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 front of the @samp{B} in @samp{FOOBAR}, and you type a @kbd{G} in Overwrite
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 mode, it changes to @samp{FOOGAR}, instead of @samp{FOOGBAR}.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
96 @cindex Pending Delete mode
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
97 @findex pending-delete-mode
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
98 Pending Delete mode cause buffer insertions and deletions to replace the
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
99 active region (with nothing, for deletions). This is the common
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
100 behavior in most modern programs, but conflicts with the ``lightweight
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
101 selections'' used in the X Window System.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
102
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 @cindex Abbrev mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 @findex abbrev-mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 Abbrev mode allows you to define abbreviations that automatically expand
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 as you type them. For example, @samp{amd} might expand to @samp{abbrev
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 mode}. @xref{Abbrevs}, for full information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108
775
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
109 @c Updated for 21.5.6 2002/03/13 sjt
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
110 @node Behaviors
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
111 @section Behaviors
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
112 @cindex behavior
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
113
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
114 @dfn{Behaviors} are an alternative interface to minor modes. The toggle
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
115 interface emphasizes the case-specific nature of a minor mode: use it
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
116 with @emph{this} major mode but not in @emph{those} buffers. However,
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
117 this is inconvenient for behavior that depends on user preference.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
118 For example, someone who discovers filladapt and really
775
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
119 likes it must toggle it separately in each buffer. On the other hand,
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
120 after trying it for a while she might like to disable it everywhere,
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
121 having decided it doesn't work very well for her.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
122
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
123 Use of mode hooks will invoke the minor mode automatically in the
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
124 future, but this is inconvenient (you must switch tasks to editing the
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
125 init file) and doesn't help with existing buffers in the session. The
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
126 behavior interface addresses this problem. The command
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
127 @code{enable-behavior} prompts (with completion) for a registered
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
128 behavior (denoted by a symbol), and enables it. Conversely,
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
129 @code{disable-behavior} prompts for a behavior, and disables it.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
130
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
131 @c #### This belongs in the Lispref in the description of creating
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
132 @c packages or in customize or both.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
133
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
134 @c The package developer will register behaviors with XEmacs. Then the
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
135 @c user invokes the @code{enable-behavior} and @code{disable-behavior}
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
136 @c functions to enable or disable a given behavior. The behavior registry
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
137 @c was introduced in XEmacs 21.5.6.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
138 @c
4488
6b0000935adc Spelling fixes.
"Ville Skyttä <scop@xemacs.org>"
parents: 3711
diff changeset
139 @c @defun enable-behavior behavior &optional force
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
140 @c Called interactively, prompt the user, read a behavior symbol name with
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
141 @c completion for @var{behavior}, and take @var{force} from the prefix
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
142 @c argument. Then enable the behavior registered under the symbol
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
143 @c @var{behavior}.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
144 @c
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
145 @c The optional argument @var{force} is unimplemented in 21.5.6.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
146 @c @end defun
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
147 @c
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
148 @c @defun disable-behavior behavior &optional force
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
149 @c Called interactively, prompt the user, read a behavior symbol name with
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
150 @c completion for @var{behavior}, and take @var{force} from the prefix
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
151 @c argument. Then disable the behavior registered under the symbol
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
152 @c @var{behavior}.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
153 @c
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
154 @c The optional argument @var{force} is unimplemented in 21.5.6.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
155 @c @end defun
775
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
156
7d972c3de90a [xemacs-hg @ 2002-03-14 11:50:12 by stephent]
stephent
parents: 602
diff changeset
157
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 @node Variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 @section Variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 @cindex variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 @cindex option
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 A @dfn{variable} is a Lisp symbol which has a value. Variable names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 can contain any characters, but by convention they are words separated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 by hyphens. A variable can also have a documentation string, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 describes what kind of value it should have and how the value will be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 Lisp allows any variable to have any kind of value, but most variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 that Emacs uses require a value of a certain type. Often the value has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 to be a string or a number. Sometimes we say that a certain feature is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 turned on if a variable is ``non-@code{nil},'' meaning that if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 variable's value is @code{nil}, the feature is off, but the feature is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 on for @i{any} other value. The conventional value to turn on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 feature---since you have to pick one particular value when you set the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 variable---is @code{t}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 Emacs uses many Lisp variables for internal recordkeeping, as any Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 program must, but the most interesting variables for you are the ones that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 exist for the sake of customization. Emacs does not (usually) change the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 values of these variables; instead, you set the values, and thereby alter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 and control the behavior of certain Emacs commands. These variables are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 called @dfn{options}. Most options are documented in this manual and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 appear in the Variable Index (@pxref{Variable Index}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 One example of a variable which is an option is @code{fill-column}, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 specifies the position of the right margin (as a number of characters from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 the left margin) to be used by the fill commands (@pxref{Filling}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 * Examining:: Examining or setting one variable's value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 * Easy Customization:: Convenient and easy customization of variables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 * Edit Options:: Examining or editing list of all variables' values.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 * Locals:: Per-buffer values of variables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 * File Variables:: How files can specify variable values.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 @node Examining
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 @subsection Examining and Setting Variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 @cindex setting variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 @item C-h v
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 @itemx M-x describe-variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 Print the value and documentation of a variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 @findex set-variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 @item M-x set-variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 Change the value of a variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 @kindex C-h v
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 @findex describe-variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 To examine the value of a single variable, use @kbd{C-h v}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 (@code{describe-variable}), which reads a variable name using the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 minibuffer, with completion. It prints both the value and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 documentation of the variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 C-h v fill-column @key{RET}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 prints something like:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 fill-column's value is 75
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 Documentation:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 *Column beyond which automatic line-wrapping should happen.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 Automatically becomes local when set in any fashion.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 @cindex option
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 The star at the beginning of the documentation indicates that this variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 is an option. @kbd{C-h v} is not restricted to options; it allows any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 variable name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 @findex set-variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 If you know which option you want to set, you can use @kbd{M-x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 set-variable} to set it. This prompts for the variable name in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 minibuffer (with completion), and then prompts for a Lisp expression for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 new value using the minibuffer a second time. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 M-x set-variable @key{RET} fill-column @key{RET} 75 @key{RET}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 sets @code{fill-column} to 75, as if you had executed the Lisp expression
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 @code{(setq fill-column 75)}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 Setting variables in this way, like all means of customizing Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 except where explicitly stated, affects only the current Emacs session.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 @node Easy Customization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 @subsection Easy Customization Interface
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 @findex customize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 @cindex customization buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 A convenient way to find the user option variables that you want to
600
a99eebfee7d3 [xemacs-hg @ 2001-06-01 07:15:24 by martinb]
martinb
parents: 442
diff changeset
262 change, and then change them, is with @kbd{C-h C} (@code{customize}).
a99eebfee7d3 [xemacs-hg @ 2001-06-01 07:15:24 by martinb]
martinb
parents: 442
diff changeset
263 This command creates a @dfn{customization buffer} with which you can
a99eebfee7d3 [xemacs-hg @ 2001-06-01 07:15:24 by martinb]
martinb
parents: 442
diff changeset
264 browse through the Emacs user options in a logically organized
a99eebfee7d3 [xemacs-hg @ 2001-06-01 07:15:24 by martinb]
martinb
parents: 442
diff changeset
265 structure, then edit and set their values. You can also use the
a99eebfee7d3 [xemacs-hg @ 2001-06-01 07:15:24 by martinb]
martinb
parents: 442
diff changeset
266 customization buffer to save settings permanently. (Not all Emacs user
a99eebfee7d3 [xemacs-hg @ 2001-06-01 07:15:24 by martinb]
martinb
parents: 442
diff changeset
267 options are included in this structure as of yet, but we are adding the
a99eebfee7d3 [xemacs-hg @ 2001-06-01 07:15:24 by martinb]
martinb
parents: 442
diff changeset
268 rest.)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 * Groups: Customization Groups.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 How options are classified in a structure.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 * Changing an Option:: How to edit a value and set an option.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 * Face Customization:: How to edit the attributes of a face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 * Specific Customization:: Making a customization buffer for specific
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 options, faces, or groups.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 @node Customization Groups
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 @subsubsection Customization Groups
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 @cindex customization groups
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 For customization purposes, user options are organized into
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 @dfn{groups} to help you find them. Groups are collected into bigger
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 groups, all the way up to a master group called @code{Emacs}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286
602
b9f1a2e84ead [xemacs-hg @ 2001-06-01 08:17:05 by martinb]
martinb
parents: 600
diff changeset
287 @kbd{C-h C} (@code{customize}) creates a customization buffer that
600
a99eebfee7d3 [xemacs-hg @ 2001-06-01 07:15:24 by martinb]
martinb
parents: 442
diff changeset
288 shows the top-level @code{Emacs} group and the second-level groups
a99eebfee7d3 [xemacs-hg @ 2001-06-01 07:15:24 by martinb]
martinb
parents: 442
diff changeset
289 immediately under it. It looks like this, in part:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 /- Emacs group: ---------------------------------------------------\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 [State]: visible group members are all at standard settings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 Customization of the One True Editor.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 See also [Manual].
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 [Open] Editing group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 Basic text editing facilities.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 [Open] External group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 Interfacing to external utilities.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 @var{more second-level groups}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 \- Emacs group end ------------------------------------------------/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 This says that the buffer displays the contents of the @code{Emacs}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 group. The other groups are listed because they are its contents. But
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 they are listed differently, without indentation and dashes, because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 @emph{their} contents are not included. Each group has a single-line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 documentation string; the @code{Emacs} group also has a @samp{[State]}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 @cindex editable fields (customization buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 @cindex active fields (customization buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 Most of the text in the customization buffer is read-only, but it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 typically includes some @dfn{editable fields} that you can edit. There
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 are also @dfn{active fields}; this means a field that does something
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 when you @dfn{invoke} it. To invoke an active field, either click on it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 with @kbd{Mouse-1}, or move point to it and type @key{RET}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 For example, the phrase @samp{[Open]} that appears in a second-level
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 group is an active field. Invoking the @samp{[Open]} field for a group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 opens up a new customization buffer, which shows that group and its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 contents. This field is a kind of hypertext link to another group.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 The @code{Emacs} group does not include any user options itself, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 other groups do. By examining various groups, you will eventually find
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 the options and faces that belong to the feature you are interested in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 customizing. Then you can use the customization buffer to set them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 @findex customize-browse
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 You can view the structure of customization groups on a larger scale
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 with @kbd{M-x customize-browse}. This command creates a special kind of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 customization buffer which shows only the names of the groups (and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 options and faces), and their structure.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 In this buffer, you can show the contents of a group by invoking
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 @samp{[+]}. When the group contents are visible, this button changes to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 @samp{[-]}; invoking that hides the group contents.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 Each group, option or face name in this buffer has an active field
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 which says @samp{[Group]}, @samp{[Option]} or @samp{[Face]}. Invoking
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 that active field creates an ordinary customization buffer showing just
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 that group and its contents, just that option, or just that face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 This is the way to set values in it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 @node Changing an Option
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 @subsubsection Changing an Option
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 Here is an example of what a user option looks like in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 customization buffer:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 Kill Ring Max: [Hide] 30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 [State]: this option is unchanged from its standard setting.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 Maximum length of kill ring before oldest elements are thrown away.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 The text following @samp{[Hide]}, @samp{30} in this case, indicates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 the current value of the option. If you see @samp{[Show]} instead of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 @samp{[Hide]}, it means that the value is hidden; the customization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 buffer initially hides values that take up several lines. Invoke
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 @samp{[Show]} to show the value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 The line after the option name indicates the @dfn{customization state}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 of the option: in the example above, it says you have not changed the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 option yet. The word @samp{[State]} at the beginning of this line is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 active; you can get a menu of various operations by invoking it with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 @kbd{Mouse-1} or @key{RET}. These operations are essential for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 customizing the variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 The line after the @samp{[State]} line displays the beginning of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 option's documentation string. If there are more lines of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 documentation, this line ends with @samp{[More]}; invoke this to show
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 the full documentation string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 To enter a new value for @samp{Kill Ring Max}, move point to the value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 and edit it textually. For example, you can type @kbd{M-d}, then insert
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 another number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 When you begin to alter the text, you will see the @samp{[State]} line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 change to say that you have edited the value:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 [State]: you have edited the value as text, but not set the option.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 @cindex setting option value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 Editing the value does not actually set the option variable. To do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 that, you must @dfn{set} the option. To do this, invoke the word
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 @samp{[State]} and choose @samp{Set for Current Session}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 The state of the option changes visibly when you set it:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 [State]: you have set this option, but not saved it for future sessions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 You don't have to worry about specifying a value that is not valid;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 setting the option checks for validity and will not really install an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 unacceptable value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 @kindex M-TAB @r{(customization buffer)}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 @findex widget-complete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 While editing a value or field that is a file name, directory name,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 command name, or anything else for which completion is defined, you can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 type @kbd{M-@key{TAB}} (@code{widget-complete}) to do completion.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 Some options have a small fixed set of possible legitimate values.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 These options don't let you edit the value textually. Instead, an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 active field @samp{[Value Menu]} appears before the value; invoke this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 field to edit the value. For a boolean ``on or off'' value, the active
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 field says @samp{[Toggle]}, and it changes to the other value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 @samp{[Value Menu]} and @samp{[Toggle]} edit the buffer; the changes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 take effect when you use the @samp{Set for Current Session} operation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 Some options have values with complex structure. For example, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 value of @code{load-path} is a list of directories. Here is how it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 appears in the customization buffer:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 Load Path:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 [INS] [DEL] [Current dir?]: /usr/local/share/emacs/19.34.94/site-lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 [INS] [DEL] [Current dir?]: /usr/local/share/emacs/site-lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 [INS] [DEL] [Current dir?]: /usr/local/share/emacs/19.34.94/leim
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 [INS] [DEL] [Current dir?]: /usr/local/share/emacs/19.34.94/lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 [INS] [DEL] [Current dir?]: /build/emacs/e19/lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 [INS] [DEL] [Current dir?]: /build/emacs/e19/lisp/gnus
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 [INS]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 [State]: this item has been changed outside the customization buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 List of directories to search for files to load....
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 Each directory in the list appears on a separate line, and each line has
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 several editable or active fields.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 You can edit any of the directory names. To delete a directory from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 the list, invoke @samp{[DEL]} on that line. To insert a new directory in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 the list, invoke @samp{[INS]} at the point where you want to insert it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 You can also invoke @samp{[Current dir?]} to switch between including
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 a specific named directory in the path, and including @code{nil} in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 path. (@code{nil} in a search path means ``try the current
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 directory.'')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 @kindex TAB @r{(customization buffer)}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 @kindex S-TAB @r{(customization buffer)}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 @findex widget-forward
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 @findex widget-backward
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 Two special commands, @key{TAB} and @kbd{S-@key{TAB}}, are useful for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 moving through the customization buffer. @key{TAB}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 (@code{widget-forward}) moves forward to the next active or editable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 field; @kbd{S-@key{TAB}} (@code{widget-backward}) moves backward to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 previous active or editable field.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 Typing @key{RET} on an editable field also moves forward, just like
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 @key{TAB}. The reason for this is that people have a tendency to type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 @key{RET} when they are finished editing a field. If you have occasion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 to insert a newline in an editable field, use @kbd{C-o} or @kbd{C-q
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 C-j},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 @cindex saving option value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 Setting the option changes its value in the current Emacs session;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 @dfn{saving} the value changes it for future sessions as well. This
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
470 works by writing code into your init file so as to set the option
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
471 variable again each time you start Emacs. @xref{Init File}. To save
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
472 the option, invoke @samp{[State]} and select the @samp{Save for Future
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
473 Sessions} operation.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 You can also restore the option to its standard value by invoking
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 @samp{[State]} and selecting the @samp{Reset} operation. There are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 actually three reset operations:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 @table @samp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 @item Reset to Current
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 If you have made some modifications and not yet set the option,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 this restores the text in the customization buffer to match
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 the actual value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 @item Reset to Saved
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 This restores the value of the option to the last saved value,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 and updates the text accordingly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 @item Reset to Standard Settings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 This sets the option to its standard value, and updates the text
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 accordingly. This also eliminates any saved value for the option,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 so that you will get the standard value in future Emacs sessions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 The state of a group indicates whether anything in that group has been
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 edited, set or saved. You can select @samp{Set for Current Session},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 @samp{Save for Future Sessions} and the various kinds of @samp{Reset}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 operation for the group; these operations on the group apply to all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 options in the group and its subgroups.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 Near the top of the customization buffer there are two lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 containing several active fields:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 [Set] [Save] [Reset] [Done]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 Invoking @samp{[Done]} buries this customization buffer. Each of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 other fields performs an operation---set, save or reset---on each of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 items in the buffer that could meaningfully be set, saved or reset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 @node Face Customization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 @subsubsection Customizing Faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 @cindex customizing faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 @cindex bold font
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 @cindex italic font
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 @cindex fonts and faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 In addition to user options, some customization groups also include
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 faces. When you show the contents of a group, both the user options and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 the faces in the group appear in the customization buffer. Here is an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 example of how a face looks:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 Custom Changed Face: (sample)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 [State]: this face is unchanged from its standard setting.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 Face used when the customize item has been changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 Parent groups: [Custom Magic Faces]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 Attributes: [ ] Bold: [Toggle] off (nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 [ ] Italic: [Toggle] off (nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 [ ] Underline: [Toggle] off (nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 [ ] Foreground: white (sample)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 [ ] Background: blue (sample)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 [ ] Inverse: [Toggle] off (nil)
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
536 [ ] Stipple:
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
537 [ ] Font Family:
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
538 [ ] Size:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 [ ] Strikethru: off
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 Each face attribute has its own line. The @samp{[@var{x}]} field
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 before the attribute name indicates whether the attribute is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 @dfn{enabled}; @samp{X} means that it is. You can enable or disable the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 attribute by invoking that field. When the attribute is enabled, you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 can change the attribute value in the usual ways.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547
1142
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
548 @xref{Faces}, for description of how @code{face-frob-from-locale-first}
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
549 variable affects changing @samp{Bold} and @samp{Italic} attributes.
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
550
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 @c Is this true for XEmacs?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 @c On a black-and-white display, the colors you can use for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 @c background are @samp{black}, @samp{white}, @samp{gray}, @samp{gray1},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 @c and @samp{gray3}. Emacs supports these shades of gray by using
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555 @c background stipple patterns instead of a color.
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
556 @c
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 Setting, saving and resetting a face work like the same operations for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 options (@pxref{Changing an Option}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 A face can specify different appearances for different types of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 display. For example, a face can make text red on a color display, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 use a bold font on a monochrome display. To specify multiple
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 appearances for a face, select @samp{Show Display Types} in the menu you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 get from invoking @samp{[State]}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 @c It would be cool to implement this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 @c @findex modify-face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 @c Another more basic way to set the attributes of a specific face is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 @c with @kbd{M-x modify-face}. This command reads the name of a face, then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 @c reads the attributes one by one. For the color and stipple attributes,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 @c the attribute's current value is the default---type just @key{RET} if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 @c you don't want to change that attribute. Type @samp{none} if you want
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 @c to clear out the attribute.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 @node Specific Customization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 @subsubsection Customizing Specific Items
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 Instead of finding the options you want to change by moving down
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 through the structure of groups, you can specify the particular option,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 face or group that you want to customize.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 @item M-x customize-option @key{RET} @var{option} @key{RET}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 Set up a customization buffer with just one option, @var{option}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 @item M-x customize-face @key{RET} @var{face} @key{RET}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 Set up a customization buffer with just one face, @var{face}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 @item M-x customize-group @key{RET} @var{group} @key{RET}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 Set up a customization buffer with just one group, @var{group}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 @item M-x customize-apropos @key{RET} @var{regexp} @key{RET}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 Set up a customization buffer with all the options, faces and groups
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 that match @var{regexp}.
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
592 @item M-x customize-saved
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 Set up a customization buffer containing all options and faces that you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 have saved with customization buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 @item M-x customize-customized
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 Set up a customization buffer containing all options and faces that you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 have customized but not saved.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 @findex customize-option
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 If you want to alter a particular user option variable with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 customization buffer, and you know its name, you can use the command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 @kbd{M-x customize-option} and specify the option name. This sets up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 the customization buffer with just one option---the one that you asked
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 for. Editing, setting and saving the value work as described above, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 only for the specified option.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 @findex customize-face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 Likewise, you can modify a specific face, chosen by name, using
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 @kbd{M-x customize-face}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 @findex customize-group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 You can also set up the customization buffer with a specific group,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 using @kbd{M-x customize-group}. The immediate contents of the chosen
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 group, including option variables, faces, and other groups, all appear
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 as well. However, these subgroups' own contents start out hidden. You
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 can show their contents in the usual way, by invoking @samp{[Show]}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 @findex customize-apropos
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 To control more precisely what to customize, you can use @kbd{M-x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 customize-apropos}. You specify a regular expression as argument; then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 all options, faces and groups whose names match this regular expression
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 are set up in the customization buffer. If you specify an empty regular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 expression, this includes @emph{all} groups, options and faces in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 customization buffer (but that takes a long time).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 @findex customize-saved
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 @findex customize-customized
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 If you change option values and then decide the change was a mistake,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 you can use two special commands to revisit your previous changes. Use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 @kbd{customize-saved} to look at the options and faces that you have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 saved. Use @kbd{M-x customize-customized} to look at the options and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 faces that you have set but not saved.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 @node Edit Options
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 @subsection Editing Variable Values
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 @item M-x list-options
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 Display a buffer listing names, values, and documentation of all options.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 @item M-x edit-options
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 Change option values by editing a list of options.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 @findex list-options
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 @kbd{M-x list-options} displays a list of all Emacs option variables in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 an Emacs buffer named @samp{*List Options*}. Each option is shown with its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 documentation and its current value. Here is what a portion of it might
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 look like:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 @smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 ;; exec-path:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 ("." "/usr/local/bin" "/usr/ucb" "/bin" "/usr/bin" "/u2/emacs/etc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 *List of directories to search programs to run in subprocesses.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 Each element is a string (directory name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 or nil (try the default directory).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 ;; fill-column:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 75
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 *Column beyond which automatic line-wrapping should happen.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 Automatically becomes local when set in any fashion.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 @end smallexample
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 @findex edit-options
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 @kbd{M-x edit-options} goes one step further and immediately selects the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 @samp{*List Options*} buffer; this buffer uses the major mode Options mode,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 which provides commands that allow you to point at an option and change its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 value:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 @item s
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 Set the variable point is in or near to a new value read using the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 minibuffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 @item x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 Toggle the variable point is in or near: if the value was @code{nil},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 it becomes @code{t}; otherwise it becomes @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 @item 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 Set the variable point is in or near to @code{t}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 @item 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 Set the variable point is in or near to @code{nil}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 @item n
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 @itemx p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 Move to the next or previous variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 @node Locals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 @subsection Local Variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 @item M-x make-local-variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 Make a variable have a local value in the current buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 @item M-x kill-local-variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 Make a variable use its global value in the current buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 @item M-x make-variable-buffer-local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 Mark a variable so that setting it will make it local to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 buffer that is current at that time.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 @cindex local variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 You can make any variable @dfn{local} to a specific Emacs buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 This means that the variable's value in that buffer is independent of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 its value in other buffers. A few variables are always local in every
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 buffer. All other Emacs variables have a @dfn{global} value which is in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 effect in all buffers that have not made the variable local.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 Major modes always make the variables they set local to the buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 This is why changing major modes in one buffer has no effect on other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 @findex make-local-variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 @kbd{M-x make-local-variable} reads the name of a variable and makes it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713 local to the current buffer. Further changes in this buffer will not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 affect others, and changes in the global value will not affect this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 @findex make-variable-buffer-local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 @cindex per-buffer variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 @kbd{M-x make-variable-buffer-local} reads the name of a variable and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 changes the future behavior of the variable so that it automatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 becomes local when it is set. More precisely, once you have marked a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 variable in this way, the usual ways of setting the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 variable will automatically invoke @code{make-local-variable} first. We
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724 call such variables @dfn{per-buffer} variables.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 Some important variables have been marked per-buffer already. They
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 include @code{abbrev-mode}, @code{auto-fill-function},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 @code{case-fold-search}, @code{comment-column}, @code{ctl-arrow},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 @code{fill-column}, @code{fill-prefix}, @code{indent-tabs-mode},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 @code{left-margin}, @*@code{mode-line-format}, @code{overwrite-mode},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 @code{selective-display-ellipses}, @*@code{selective-display},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 @code{tab-width}, and @code{truncate-lines}. Some other variables are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 always local in every buffer, but they are used for internal
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 purposes.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 Note: the variable @code{auto-fill-function} was formerly named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737 @code{auto-fill-hook}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 @findex kill-local-variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740 If you want a variable to cease to be local to the current buffer,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741 call @kbd{M-x kill-local-variable} and provide the name of a variable to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 the prompt. The global value of the variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 is again in effect in this buffer. Setting the major mode kills all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 the local variables of the buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 @findex setq-default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 To set the global value of a variable, regardless of whether the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 variable has a local value in the current buffer, you can use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 Lisp function @code{setq-default}. It works like @code{setq}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 If there is a local value in the current buffer, the local value is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 not affected by @code{setq-default}; thus, the new global value may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 not be visible until you switch to another buffer, as in the case of:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755 (setq-default fill-column 75)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 @code{setq-default} is the only way to set the global value of a variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 that has been marked with @code{make-variable-buffer-local}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 @findex default-value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 Programs can look at a variable's default value with @code{default-value}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 This function takes a symbol as an argument and returns its default value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 The argument is evaluated; usually you must quote it explicitly, as in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 the case of:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 (default-value 'fill-column)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 @node File Variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 @subsection Local Variables in Files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 @cindex local variables in files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 A file can contain a @dfn{local variables list}, which specifies the
3510
06a586083be3 [xemacs-hg @ 2006-07-16 10:51:43 by aidan]
aidan
parents: 3387
diff changeset
777 buffer-local values to use for certain Emacs variables when that file is
06a586083be3 [xemacs-hg @ 2006-07-16 10:51:43 by aidan]
aidan
parents: 3387
diff changeset
778 edited. Visiting the file checks for a local variables list and makes
06a586083be3 [xemacs-hg @ 2006-07-16 10:51:43 by aidan]
aidan
parents: 3387
diff changeset
779 each variable in the list local to the buffer in which the file is
06a586083be3 [xemacs-hg @ 2006-07-16 10:51:43 by aidan]
aidan
parents: 3387
diff changeset
780 visited, with the value specified in the file.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 A local variables list goes near the end of the file, in the last page.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 (It is often best to put it on a page by itself.) The local variables list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 starts with a line containing the string @samp{Local Variables:}, and ends
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 with a line containing the string @samp{End:}. In between come the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 variable names and values, one set per line, as @samp{@var{variable}:@:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 @var{value}}. The @var{value}s are not evaluated; they are used literally.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 The line which starts the local variables list does not have to say
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 just @samp{Local Variables:}. If there is other text before @samp{Local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 Variables:}, that text is called the @dfn{prefix}, and if there is other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 text after, that is called the @dfn{suffix}. If a prefix or suffix are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793 present, each entry in the local variables list should have the prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 before it and the suffix after it. This includes the @samp{End:} line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 The prefix and suffix are included to disguise the local variables list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 as a comment so the compiler or text formatter will ignore it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 If you do not need to disguise the local variables list as a comment in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 this way, there is no need to include a prefix or a suffix.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 Two ``variable'' names are special in a local variables list: a value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 for the variable @code{mode} sets the major mode, and a value for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 variable @code{eval} is simply evaluated as an expression and the value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 is ignored. These are not real variables; setting them in any other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 context does not have the same effect. If @code{mode} is used in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 local variables list, it should be the first entry in the list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807 Here is an example of a local variables list:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 ;;; Local Variables: ***
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 ;;; mode:lisp ***
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 ;;; comment-column:0 ***
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 ;;; comment-start: ";;; " ***
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 ;;; comment-end:"***" ***
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 ;;; End: ***
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 Note that the prefix is @samp{;;; } and the suffix is @samp{ ***}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 Note also that comments in the file begin with and end with the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 strings. Presumably the file contains code in a language which is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 enough like Lisp for Lisp mode to be useful but in which comments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 start and end differently. The prefix and suffix are used in the local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 variables list to make the list look like several lines of comments when
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
823 the compiler or interpreter for that language reads the file.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 The start of the local variables list must be no more than 3000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 characters from the end of the file, and must be in the last page if the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 file is divided into pages. Otherwise, Emacs will not notice it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 there. The purpose is twofold: a stray @samp{Local Variables:}@: not in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 the last page does not confuse Emacs, and Emacs never needs to search a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 long file that contains no page markers and has no local variables list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
832 You may be tempted to turn on minor modes like Auto Fill mode with a
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
833 local variable list. That is inappropriate. Those behaviors that seem
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
834 appropriate for almost any personal taste, such as setting up the syntax
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
835 table "symbol constituent" character class, are collected into a major
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
836 mode. But whether you use Auto Fill mode or not is
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 a matter of personal taste, not a matter of the contents of particular
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 files. If you want to use Auto Fill, set up major mode hooks with your
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
839 init file to turn it on (when appropriate) for you alone
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
840 (@pxref{Init File}). Don't use a local variable list that would
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 impose your taste on everyone working with the file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 XEmacs allows you to specify local variables in the first line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 of a file, in addition to specifying them in the @code{Local Variables}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 section at the end of a file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 If the first line of a file contains two occurrences of @code{`-*-'},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 XEmacs uses the information between them to determine what the major
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 mode and variable settings should be. For example, these are all legal:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 @example
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
852 ;;; -*- mode: emacs-lisp -*-
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
853 ;;; -*- mode: postscript; version-control: never -*-
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
854 ;;; -*- tags-file-name: "/foo/bar/TAGS" -*-
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857 For historical reasons, the syntax @code{`-*- modename -*-'} is allowed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 as well; for example, you can use:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 @example
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
861 ;;; -*- emacs-lisp -*-
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 @vindex enable-local-variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865 The variable @code{enable-local-variables} controls the use of local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 variables lists in files you visit. The value can be @code{t},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 @code{nil}, or something else. A value of @code{t} means local variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 lists are obeyed; @code{nil} means they are ignored; anything else means
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 query.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 The command @code{M-x normal-mode} always obeys local variables lists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 and ignores this variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 @node Keyboard Macros
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 @section Keyboard Macros
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877 @cindex keyboard macros
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 A @dfn{keyboard macro} is a command defined by the user to abbreviate a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 sequence of keys. For example, if you discover that you are about to type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880 @kbd{C-n C-d} forty times, you can speed your work by defining a keyboard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 macro to invoke @kbd{C-n C-d} and calling it with a repeat count of forty.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 @c widecommands
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 @item C-x (
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 Start defining a keyboard macro (@code{start-kbd-macro}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887 @item C-x )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 End the definition of a keyboard macro (@code{end-kbd-macro}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 @item C-x e
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 Execute the most recent keyboard macro (@code{call-last-kbd-macro}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 @item C-u C-x (
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892 Re-execute last keyboard macro, then add more keys to its definition.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 @item C-x q
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894 When this point is reached during macro execution, ask for confirmation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 (@code{kbd-macro-query}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 @item M-x name-last-kbd-macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 Give a command name (for the duration of the session) to the most
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 recently defined keyboard macro.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 @item M-x insert-kbd-macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 Insert in the buffer a keyboard macro's definition, as Lisp code.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 Keyboard macros differ from other Emacs commands in that they are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 written in the Emacs command language rather than in Lisp. This makes it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905 easier for the novice to write them and makes them more convenient as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 temporary hacks. However, the Emacs command language is not powerful
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 enough as a programming language to be useful for writing anything
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 general or complex. For such things, Lisp must be used.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 You define a keyboard macro by executing the commands which are its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 definition. Put differently, as you are defining a keyboard macro, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 definition is being executed for the first time. This way, you see
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913 what the effects of your commands are, and don't have to figure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 them out in your head. When you are finished, the keyboard macro is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 defined and also has been executed once. You can then execute the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 set of commands again by invoking the macro.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 * Basic Kbd Macro:: Defining and running keyboard macros.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 * Save Kbd Macro:: Giving keyboard macros names; saving them in files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 * Kbd Macro Query:: Keyboard macros that do different things each use.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 @node Basic Kbd Macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 @subsection Basic Use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927 @kindex C-x (
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 @kindex C-x )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 @kindex C-x e
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930 @findex start-kbd-macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931 @findex end-kbd-macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 @findex call-last-kbd-macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 To start defining a keyboard macro, type @kbd{C-x (}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 (@code{start-kbd-macro}). From then on, anything you type continues to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 executed, but also becomes part of the definition of the macro. @samp{Def}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936 appears in the mode line to remind you of what is going on. When you are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937 finished, the @kbd{C-x )} command (@code{end-kbd-macro}) terminates the
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
938 definition, without becoming part of it.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940 For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 C-x ( M-f foo C-x )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947 defines a macro to move forward a word and then insert @samp{foo}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 You can give @kbd{C-x )} a repeat count as an argument, in which case it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 repeats the macro that many times right after defining it, but defining
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 the macro counts as the first repetition (since it is executed as you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 define it). If you give @kbd{C-x )} an argument of 4, it executes the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 macro immediately 3 additional times. An argument of zero to @kbd{C-x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 e} or @kbd{C-x )} means repeat the macro indefinitely (until it gets an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955 error or you type @kbd{C-g}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 Once you have defined a macro, you can invoke it again with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 @kbd{C-x e} command (@code{call-last-kbd-macro}). You can give the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 command a repeat count numeric argument to execute the macro many times.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 To repeat an operation at regularly spaced places in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 text, define a macro and include as part of the macro the commands to move
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 to the next place you want to use it. For example, if you want to change
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 each line, you should position point at the start of a line, and define a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 macro to change that line and leave point at the start of the next line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966 Repeating the macro will then operate on successive lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 After you have terminated the definition of a keyboard macro, you can add
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 to the end of its definition by typing @kbd{C-u C-x (}. This is equivalent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970 to plain @kbd{C-x (} followed by retyping the whole definition so far. As
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 a consequence it re-executes the macro as previously defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 @node Save Kbd Macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 @subsection Naming and Saving Keyboard Macros
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976 @findex name-last-kbd-macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 To save a keyboard macro for longer than until you define the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 next one, you must give it a name using @kbd{M-x name-last-kbd-macro}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 This reads a name as an argument using the minibuffer and defines that name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 to execute the macro. The macro name is a Lisp symbol, and defining it in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 this way makes it a valid command name for calling with @kbd{M-x} or for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 binding a key to with @code{global-set-key} (@pxref{Keymaps}). If you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 specify a name that has a prior definition other than another keyboard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 macro, Emacs prints an error message and nothing is changed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 @findex insert-kbd-macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 Once a macro has a command name, you can save its definition in a file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988 You can then use it in another editing session. First visit the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989 you want to save the definition in. Then use the command:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 M-x insert-kbd-macro @key{RET} @var{macroname} @key{RET}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 This inserts some Lisp code that, when executed later, will define the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997 macro with the same definition it has now. You need not understand Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 code to do this, because @code{insert-kbd-macro} writes the Lisp code for you.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999 Then save the file. You can load the file with @code{load-file}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000 (@pxref{Lisp Libraries}). If the file you save in is your initialization file
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1001 (@pxref{Init File}), then the macro will be defined each
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 time you run Emacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 If you give @code{insert-kbd-macro} a prefix argument, it creates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005 additional Lisp code to record the keys (if any) that you have bound to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 keyboard macro, so that the macro is reassigned the same keys when you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 load the file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 @node Kbd Macro Query
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 @subsection Executing Macros With Variations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 @kindex C-x q
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 @findex kbd-macro-query
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 You can use @kbd{C-x q} (@code{kbd-macro-query}), to get an effect similar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015 to that of @code{query-replace}. The macro asks you each time
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 whether to make a change. When you are defining the macro, type @kbd{C-x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 q} at the point where you want the query to occur. During macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 definition, the @kbd{C-x q} does nothing, but when you invoke the macro,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 @kbd{C-x q} reads a character from the terminal to decide whether to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 continue.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1021
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 The special answers to a @kbd{C-x q} query are @key{SPC}, @key{DEL},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 @kbd{C-d}, @kbd{C-l}, and @kbd{C-r}. Any other character terminates
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024 execution of the keyboard macro and is then read as a command.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 @key{SPC} means to continue. @key{DEL} means to skip the remainder of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 this repetition of the macro, starting again from the beginning in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 next repetition. @kbd{C-d} means to skip the remainder of this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 repetition and cancel further repetition. @kbd{C-l} redraws the frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 and asks you again for a character to specify what to do. @kbd{C-r} enters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 a recursive editing level, in which you can perform editing that is not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 part of the macro. When you exit the recursive edit using @kbd{C-M-c},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 you are asked again how to continue with the keyboard macro. If you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 type a @key{SPC} at this time, the rest of the macro definition is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 executed. It is up to you to leave point and the text in a state such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 that the rest of the macro will do what you want.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 @kbd{C-u C-x q}, which is @kbd{C-x q} with a numeric argument, performs a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 different function. It enters a recursive edit reading input from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 keyboard, both when you type it during the definition of the macro and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 when it is executed from the macro. During definition, the editing you do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 inside the recursive edit does not become part of the macro. During macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 execution, the recursive edit gives you a chance to do some particularized
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 editing. @xref{Recursive Edit}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 @node Key Bindings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046 @section Customizing Key Bindings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 This section deals with the @dfn{keymaps} that define the bindings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 between keys and functions, and shows how you can customize these bindings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 @cindex command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 @cindex function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 @cindex command name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 A command is a Lisp function whose definition provides for interactive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055 use. Like every Lisp function, a command has a function name, which is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 a Lisp symbol whose name usually consists of lower case letters and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 hyphens.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 * Keymaps:: Definition of the keymap data structure.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 Names of Emacs's standard keymaps.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 * Rebinding:: How to redefine one key's meaning conveniently.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 * Disabling:: Disabling a command means confirmation is required
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 before it can be executed. This is done to protect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 beginners from surprises.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 @node Keymaps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 @subsection Keymaps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 @cindex keymap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 @cindex global keymap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 @vindex global-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 The bindings between characters and command functions are recorded in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 data structures called @dfn{keymaps}. Emacs has many of these. One, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 @dfn{global} keymap, defines the meanings of the single-character keys that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 are defined regardless of major mode. It is the value of the variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 @code{global-map}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 @cindex local keymap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 @vindex c-mode-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 @vindex lisp-mode-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 Each major mode has another keymap, its @dfn{local keymap}, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 contains overriding definitions for the single-character keys that are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 redefined in that mode. Each buffer records which local keymap is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 installed for it at any time, and the current buffer's local keymap is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 the only one that directly affects command execution. The local keymaps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 for Lisp mode, C mode, and many other major modes always exist even when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 not in use. They are the values of the variables @code{lisp-mode-map},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 @code{c-mode-map}, and so on. For less frequently used major modes, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 local keymap is sometimes constructed only when the mode is used for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 first time in a session, to save space.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 @cindex minibuffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 @vindex minibuffer-local-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 @vindex minibuffer-local-ns-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 @vindex minibuffer-local-completion-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 @vindex minibuffer-local-must-match-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 @vindex repeat-complex-command-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100 @vindex isearch-mode-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101 There are local keymaps for the minibuffer, too; they contain various
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 completion and exit commands.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106 @code{minibuffer-local-map} is used for ordinary input (no completion).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 @code{minibuffer-local-ns-map} is similar, except that @key{SPC} exits
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 just like @key{RET}. This is used mainly for Mocklisp compatibility.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 @code{minibuffer-local-completion-map} is for permissive completion.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 @code{minibuffer-local-must-match-map} is for strict completion and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 for cautious completion.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 @code{repeat-complex-command-map} is for use in @kbd{C-x @key{ESC}}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 @code{isearch-mode-map} contains the bindings of the special keys which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 are bound in the pseudo-mode entered with @kbd{C-s} and @kbd{C-r}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 @vindex ctl-x-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 @vindex help-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124 @vindex esc-map
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 Finally, each prefix key has a keymap which defines the key sequences
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 that start with it. For example, @code{ctl-x-map} is the keymap used for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 characters following a @kbd{C-x}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 @code{ctl-x-map} is the variable name for the map used for characters that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132 follow @kbd{C-x}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 @code{help-map} is used for characters that follow @kbd{C-h}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136 @code{esc-map} is for characters that follow @key{ESC}. All Meta
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 characters are actually defined by this map.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 @code{ctl-x-4-map} is for characters that follow @kbd{C-x 4}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 @code{mode-specific-map} is for characters that follow @kbd{C-c}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144 The definition of a prefix key is the keymap to use for looking up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145 the following character. Sometimes the definition is actually a Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 symbol whose function definition is the following character keymap. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 effect is the same, but it provides a command name for the prefix key that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 you can use as a description of what the prefix key is for. Thus the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 binding of @kbd{C-x} is the symbol @code{Ctl-X-Prefix}, whose function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150 definition is the keymap for @kbd{C-x} commands, the value of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 @code{ctl-x-map}.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 Prefix key definitions can appear in either the global
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154 map or a local map. The definitions of @kbd{C-c}, @kbd{C-x}, @kbd{C-h},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 and @key{ESC} as prefix keys appear in the global map, so these prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 keys are always available. Major modes can locally redefine a key as a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 prefix by putting a prefix key definition for it in the local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 map.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 A mode can also put a prefix definition of a global prefix character such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 as @kbd{C-x} into its local map. This is how major modes override the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 definitions of certain keys that start with @kbd{C-x}. This case is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 special, because the local definition does not entirely replace the global
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 one. When both the global and local definitions of a key are other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 keymaps, the next character is looked up in both keymaps, with the local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 definition overriding the global one. The character after the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 @kbd{C-x} is looked up in both the major mode's own keymap for redefined
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 @kbd{C-x} commands and in @code{ctl-x-map}. If the major mode's own keymap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 for @kbd{C-x} commands contains @code{nil}, the definition from the global
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 keymap for @kbd{C-x} commands is used.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 @node Rebinding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 @subsection Changing Key Bindings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 @cindex key rebinding, this session
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175 @cindex rebinding keys, this session
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 You can redefine an Emacs key by changing its entry in a keymap.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 You can change the global keymap, in which case the change is effective in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 all major modes except those that have their own overriding local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 definitions for the same key. Or you can change the current buffer's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 local map, which affects all buffers using the same major mode.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 @menu
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1184 * Interactive Rebinding:: Changing Key Bindings Interactively
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1185 * Programmatic Rebinding:: Changing Key Bindings Programmatically
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1186 * Key Bindings Using Strings:: Using Strings for Changing Key Bindings
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 @node Interactive Rebinding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 @subsubsection Changing Key Bindings Interactively
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 @findex global-set-key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 @findex local-set-key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 @findex local-unset-key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196 @item M-x global-set-key @key{RET} @var{key} @var{cmd} @key{RET}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197 Defines @var{key} globally to run @var{cmd}.
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1198 @item M-x local-set-key @key{RET} @var{keys} @var{cmd} @key{RET}
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199 Defines @var{key} locally (in the major mode now in effect) to run
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200 @var{cmd}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201 @item M-x local-unset-key @key{RET} @var{keys} @key{RET}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202 Removes the local binding of @var{key}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 @var{cmd} is a symbol naming an interactively-callable function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 When called interactively, @var{key} is the next complete key sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 that you type. When called as a function, @var{key} is a string, a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 vector of events, or a vector of key-description lists as described in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210 the @code{define-key} function description. The binding goes in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 the current buffer's local map, which is shared with other buffers in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212 the same major mode.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 The following example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 M-x global-set-key @key{RET} C-f next-line @key{RET}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221 redefines @kbd{C-f} to move down a line. The fact that @var{cmd} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 read second makes it serve as a kind of confirmation for @var{key}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224 These functions offer no way to specify a particular prefix keymap as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225 the one to redefine in, but that is not necessary, as you can include
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 prefixes in @var{key}. @var{key} is read by reading characters one by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 one until they amount to a complete key (that is, not a prefix key).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 Thus, if you type @kbd{C-f} for @var{key}, Emacs enters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 the minibuffer immediately to read @var{cmd}. But if you type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230 @kbd{C-x}, another character is read; if that character is @kbd{4},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1231 another character is read, and so on. For example,@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 M-x global-set-key @key{RET} C-x 4 $ spell-other-window @key{RET}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238 redefines @kbd{C-x 4 $} to run the (fictitious) command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239 @code{spell-other-window}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 @findex define-key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 @findex substitute-key-definition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243 The most general way to modify a keymap is the function
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1244 @code{define-key}, used in Lisp code (such as your init file).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 @code{define-key} takes three arguments: the keymap, the key to modify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 in it, and the new definition. @xref{Init File}, for an example.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 @code{substitute-key-definition} is used similarly; it takes three
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248 arguments, an old definition, a new definition, and a keymap, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249 redefines in that keymap all keys that were previously defined with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 old definition to have the new definition instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252 @node Programmatic Rebinding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253 @subsubsection Changing Key Bindings Programmatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255 You can use the functions @code{global-set-key} and @code{define-key}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 to rebind keys under program control.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 @findex define-key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1259 @findex global-set-key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262 @item @code{(global-set-key @var{keys} @var{cmd})}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263 Defines @var{keys} globally to run @var{cmd}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264 @item @code{(define-key @var{keymap} @var{keys} @var{def})}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265 Defines @var{keys} to run @var{def} in the keymap @var{keymap}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266 @end table
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1267
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1268 @var{keymap} is a keymap object.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1270 @var{keys} is the sequence of keystrokes to bind.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272 @var{def} is anything that can be a key's definition:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1275 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1276 @code{nil}, meaning key is undefined in this keymap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 A command, that is, a Lisp function suitable for interactive calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280 A string or key sequence vector, which is treated as a keyboard macro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 A keymap to define a prefix key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1284 A symbol so that when the key is looked up, the symbol stands for its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285 function definition, which should at that time be one of the above,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286 or another symbol whose function definition is used, and so on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 A cons, @code{(string . defn)}, meaning that @var{defn} is the definition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1289 (@var{defn} should be a valid definition in its own right)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291 A cons, @code{(keymap . char)}, meaning use the definition of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 @var{char} in map @var{keymap}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295 For backward compatibility, XEmacs allows you to specify key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1296 sequences as strings. However, the preferred method is to use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297 representations of key sequences as vectors of keystrokes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1298 @xref{Keystrokes}, for more information about the rules for constructing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299 key sequences.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1300
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1301 Emacs allows you to abbreviate representations for key sequences in
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302 most places where there is no ambiguity.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1303 Here are some rules for abbreviation:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1304
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307 The keysym by itself is equivalent to a list of just that keysym, i.e.,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308 @code{f1} is equivalent to @code{(f1)}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 A keystroke by itself is equivalent to a vector containing just that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 keystroke, i.e., @code{(control a)} is equivalent to @code{[(control a)]}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1312 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313 You can use ASCII codes for keysyms that have them. i.e.,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314 @code{65} is equivalent to @code{A}. (This is not so much an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1315 abbreviation as an alternate representation.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1316 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1317
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1318 Here are some examples of programmatically binding keys:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1319
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1320 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1322 ;;; Bind @code{my-command} to @key{f1}
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1323 (global-set-key 'f1 'my-command)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1324
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1325 ;;; Bind @code{my-command} to @kbd{Shift-f1}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1326 (global-set-key '(shift f1) 'my-command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328 ;;; Bind @code{my-command} to @kbd{C-c Shift-f1}
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1329 (global-set-key '[(control c) (shift f1)] 'my-command)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331 ;;; Bind @code{my-command} to the middle mouse button.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 (global-set-key 'button2 'my-command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1334 ;;; Bind @code{my-command} to @kbd{@key{META} @key{CTL} @key{Right Mouse Button}}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1335 ;;; in the keymap that is in force when you are running @code{dired}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336 (define-key dired-mode-map '(meta control button3) 'my-command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1337
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1338 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1339
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1340 @comment ;; note that these next four lines are not synonymous:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1341 @comment ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1342 @comment (global-set-key '(meta control delete) 'my-command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1343 @comment (global-set-key '(meta control backspace) 'my-command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1344 @comment (global-set-key '(meta control h) 'my-command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1345 @comment (global-set-key '(meta control H) 'my-command)
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1346 @comment
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347 @comment ;; note that this binds two key sequences: ``control-j'' and ``linefeed''.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348 @comment ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349 @comment (global-set-key "\^J" 'my-command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1351 @node Key Bindings Using Strings
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1352 @subsubsection Using Strings for Changing Key Bindings
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1354 For backward compatibility, you can still use strings to represent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355 key sequences. Thus you can use commands like the following:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1358 ;;; Bind @code{end-of-line} to @kbd{C-f}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1359 (global-set-key "\C-f" 'end-of-line)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1361
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1362 Note, however, that in some cases you may be binding more than one
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1363 key sequence by using a single command. This situation can
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1364 arise because in ASCII, @kbd{C-i} and @key{TAB} have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1365 the same representation. Therefore, when Emacs sees:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368 (global-set-key "\C-i" 'end-of-line)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1370
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371 it is unclear whether the user intended to bind @kbd{C-i} or @key{TAB}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1372 The solution XEmacs adopts is to bind both of these key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373 sequences.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1375 @cindex redefining keys
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376 After binding a command to two key sequences with a form like:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1377
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378 @example
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1379 (define-key global-map "\^X\^I" 'command-1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1382 it is possible to redefine only one of those sequences like so:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1384 @example
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1385 (define-key global-map [(control x) (control i)] 'command-2)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1386 (define-key global-map [(control x) tab] 'command-3)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1387 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1388
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1389 This applies only when running under a window system. If you are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390 talking to Emacs through an ASCII-only channel, you do not get any of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 these features.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1392
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1393 Here is a table of pairs of key sequences that behave in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1394 similar fashion:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396 @example
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1397 control h backspace
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398 control l clear
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1399 control i tab
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1400 control m return
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1401 control j linefeed
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1402 control [ escape
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1403 control @@ control space
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1404 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1405
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406 @node Disabling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1407 @subsection Disabling Commands
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408 @cindex disabled command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410 Disabling a command marks it as requiring confirmation before it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1411 can be executed. The purpose of disabling a command is to prevent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1412 beginning users from executing it by accident and being confused.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1413
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414 The direct mechanism for disabling a command is to have a non-@code{nil}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1415 @code{disabled} property on the Lisp symbol for the command. These
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1416 properties are normally set by the user's init file with
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1417 Lisp expressions such as:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1418
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1419 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1420 (put 'delete-region 'disabled t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1421 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1422
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1423 @xref{Init File}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1424
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1425 If the value of the @code{disabled} property is a string, that string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426 is included in the message printed when the command is used:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1427
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1429 (put 'delete-region 'disabled
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1430 "Text deleted this way cannot be yanked back!\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1432
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1433 @findex disable-command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1434 @findex enable-command
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1435 You can disable a command either by editing the init file
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436 directly or with the command @kbd{M-x disable-command}, which edits the
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1437 init file for you. @xref{Init File}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1438
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1439 When you attempt to invoke a disabled command interactively in Emacs,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440 a window is displayed containing the command's name, its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1441 documentation, and some instructions on what to do next; then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1442 Emacs asks for input saying whether to execute the command as requested,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1443 enable it and execute, or cancel it. If you decide to enable the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 command, you are asked whether to do this permanently or just for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445 current session. Enabling permanently works by automatically editing
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1446 your init file. You can use @kbd{M-x enable-command} at any
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1447 time to enable any command permanently.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1448
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449 Whether a command is disabled is independent of what key is used to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1450 invoke it; it also applies if the command is invoked using @kbd{M-x}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451 Disabling a command has no effect on calling it as a function from Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1452 programs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1453
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454 @node Syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455 @section The Syntax Table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1456 @cindex syntax table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458 All the Emacs commands which parse words or balance parentheses are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1459 controlled by the @dfn{syntax table}. The syntax table specifies which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460 characters are opening delimiters, which are parts of words, which are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1461 string quotes, and so on. Actually, each major mode has its own syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1462 table (though sometimes related major modes use the same one) which it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1463 installs in each buffer that uses that major mode. The syntax table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1464 installed in the current buffer is the one that all commands use, so we
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1465 call it ``the'' syntax table. A syntax table is a Lisp object, a vector of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1466 length 256 whose elements are numbers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1467
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1468 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1469 * Entry: Syntax Entry. What the syntax table records for each character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1470 * Change: Syntax Change. How to change the information.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473 @node Syntax Entry
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1474 @subsection Information About Each Character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1475
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476 The syntax table entry for a character is a number that encodes six
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1477 pieces of information:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1478
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1481 The syntactic class of the character, represented as a small integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 The matching delimiter, for delimiter characters only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484 (the matching delimiter of @samp{(} is @samp{)}, and vice versa)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 A flag saying whether the character is the first character of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 two-character comment starting sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489 A flag saying whether the character is the second character of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 two-character comment starting sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 A flag saying whether the character is the first character of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 two-character comment ending sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 A flag saying whether the character is the second character of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 two-character comment ending sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 The syntactic classes are stored internally as small integers, but are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500 usually described to or by the user with characters. For example, @samp{(}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501 is used to specify the syntactic class of opening delimiters. Here is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 table of syntactic classes, with the characters that specify them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 @table @samp
871
732270854293 [xemacs-hg @ 2002-06-11 19:28:14 by adrian]
adrian
parents: 775
diff changeset
1505 @item @w{-}
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
1506 The class of whitespace characters. Avoid use of the formerly
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
1507 advertised @w{ }, because it is not supported by GNU Emacs.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 @item w
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509 The class of word-constituent characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 @item _
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511 The class of characters that are part of symbol names but not words.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512 This class is represented by @samp{_} because the character @samp{_}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 has this class in both C and Lisp.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514 @item .
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515 The class of punctuation characters that do not fit into any other
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 special class.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517 @item (
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 The class of opening delimiters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 @item )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520 The class of closing delimiters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521 @item '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 The class of expression-adhering characters. These characters are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 part of a symbol if found within or adjacent to one, and are part
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 of a following expression if immediately preceding one, but are like
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 whitespace if surrounded by whitespace.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 @item "
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527 The class of string-quote characters. They match each other in pairs,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 and the characters within the pair all lose their syntactic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 significance except for the @samp{\} and @samp{/} classes of escape
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 characters, which can be used to include a string-quote inside the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532 @item $
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 The class of self-matching delimiters. This is intended for @TeX{}'s
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 @samp{$}, which is used both to enter and leave math mode. Thus,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 a pair of matching @samp{$} characters surround each piece of math mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 @TeX{} input. A pair of adjacent @samp{$} characters act like a single
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 one for purposes of matching.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539 @item /
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 The class of escape characters that always just deny the following
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 character its special syntactic significance. The character after one
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 of these escapes is always treated as alphabetic.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 @item \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 The class of C-style escape characters. In practice, these are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 treated just like @samp{/}-class characters, because the extra
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 possibilities for C escapes (such as being followed by digits) have no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 effect on where the containing expression ends.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 @item <
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 The class of comment-starting characters. Only single-character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 comment starters (such as @samp{;} in Lisp mode) are represented this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 @item >
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 The class of comment-ending characters. Newline has this syntax in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 Lisp mode.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557 @vindex parse-sexp-ignore-comments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 The characters flagged as part of two-character comment delimiters can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 have other syntactic functions most of the time. For example, @samp{/} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 @samp{*} in C code, when found separately, have nothing to do with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 comments. The comment-delimiter significance overrides when the pair of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 characters occur together in the proper order. Only the list and sexp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 commands use the syntax table to find comments; the commands specifically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 for comments have other variables that tell them where to find comments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 Moreover, the list and sexp commands notice comments only if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566 @code{parse-sexp-ignore-comments} is non-@code{nil}. This variable is set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1567 to @code{nil} in modes where comment-terminator sequences are liable to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 appear where there is no comment, for example, in Lisp mode where the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 comment terminator is a newline but not every newline ends a comment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 @node Syntax Change
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572 @subsection Altering Syntax Information
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 It is possible to alter a character's syntax table entry by storing a new
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 number in the appropriate element of the syntax table, but it would be hard
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 to determine what number to use. Emacs therefore provides a command that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 allows you to specify the syntactic properties of a character in a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578 convenient way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 @findex modify-syntax-entry
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 @kbd{M-x modify-syntax-entry} is the command to change a character's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 syntax. It can be used interactively and is also used by major
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 modes to initialize their own syntax tables. Its first argument is the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 character to change. The second argument is a string that specifies the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 new syntax. When called from Lisp code, there is a third, optional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 argument, which specifies the syntax table in which to make the change. If
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 not supplied, or if this command is called interactively, the third
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 argument defaults to the current buffer's syntax table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590 @enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592 The first character in the string specifies the syntactic class. It
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 is one of the characters in the previous table (@pxref{Syntax Entry}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596 The second character is the matching delimiter. For a character that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 is not an opening or closing delimiter, this should be a space, and may
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598 be omitted if no following characters are needed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 The remaining characters are flags. The flag characters allowed are:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603 @table @samp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 @item 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1605 Flag this character as the first of a two-character comment starting sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606 @item 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607 Flag this character as the second of a two-character comment starting sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608 @item 3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1609 Flag this character as the first of a two-character comment ending sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610 @item 4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611 Flag this character as the second of a two-character comment ending sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615 @kindex C-h s
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1616 @findex describe-syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1617 Use @kbd{C-h s} (@code{describe-syntax}) to display a description of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1618 the contents of the current syntax table. The description of each
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1619 character includes both the string you have to pass to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620 @code{modify-syntax-entry} to set up that character's current syntax,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621 and some English to explain that string if necessary.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 @node Init File
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1624 @section The Init File
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625 @cindex init file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626 @cindex Emacs initialization file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 @cindex key rebinding, permanent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 @cindex rebinding keys, permanently
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1630 When you start Emacs, it normally loads either @file{.xemacs/init.el}
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1631 or the file @file{.emacs} (whichever comes first) in your home directory.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1632 This file, if it exists, should contain Lisp code. It is called your
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1633 initialization file or @dfn{init file}. Use the command line switch
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1634 @samp{-q} to tell Emacs whether to load an init file (@pxref{Entering
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1635 Emacs}). Use the command line switch @samp{-user-init-file}
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1636 (@pxref{Command Switches}) to tell Emacs to load a different file
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1637 instead of @file{~/.xemacs/init.el}/@file{~/.emacs}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1638
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1639 When the init file is read, the variable @code{user-init-file} says
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1640 which init file was loaded.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 At some sites there is a @dfn{default init file}, which is the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 library named @file{default.el}, found via the standard search path for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 libraries. The Emacs distribution contains no such library; your site
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645 may create one for local customizations. If this library exists, it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 loaded whenever you start Emacs. But your init file, if any, is loaded
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 first; if it sets @code{inhibit-default-init} non-@code{nil}, then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 @file{default} is not loaded.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1650 If you have a large amount of code in your init file, you should
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1651 byte-compile it to @file{~/.xemacs/init.elc} or @file{~/.emacs.elc}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 * Init Syntax:: Syntax of constants in Emacs Lisp.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 * Init Examples:: How to do some things with an init file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 * Terminal Init:: Each terminal type can have an init file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 @node Init Syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 @subsection Init File Syntax
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1662 The init file contains one or more Lisp function call
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 expressions. Each consists of a function name followed by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664 arguments, all surrounded by parentheses. For example, @code{(setq
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665 fill-column 60)} represents a call to the function @code{setq} which is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 used to set the variable @code{fill-column} (@pxref{Filling}) to 60.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 The second argument to @code{setq} is an expression for the new value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 of the variable. This can be a constant, a variable, or a function call
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1670 expression. In the init file, constants are used most of the time.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 They can be:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1673 @table @asis
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674 @item Numbers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 Integers are written in decimal, with an optional initial minus sign.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 If a sequence of digits is followed by a period and another sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678 of digits, it is interpreted as a floating point number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 The number prefixes @samp{#b}, @samp{#o}, and @samp{#x} are supported to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 represent numbers in binary, octal, and hexadecimal notation (or radix).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683 @item Strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 Lisp string syntax is the same as C string syntax with a few extra
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 features. Use a double-quote character to begin and end a string constant.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 Newlines and special characters may be present literally in strings. They
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688 can also be represented as backslash sequences: @samp{\n} for newline,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689 @samp{\b} for backspace, @samp{\r} for return, @samp{\t} for tab,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 @samp{\f} for formfeed (control-l), @samp{\e} for escape, @samp{\\} for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 backslash, @samp{\"} for a double-quote, or @samp{\@var{ooo}} for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 character whose octal code is @var{ooo}. Backslash and double-quote are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 the only characters for which backslash sequences are mandatory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695 You can use @samp{\C-} as a prefix for a control character, as in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696 @samp{\C-s} for ASCII Control-S, and @samp{\M-} as a prefix for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697 a Meta character, as in @samp{\M-a} for Meta-A or @samp{\M-\C-a} for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 Control-Meta-A.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1699
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700 @item Characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701 Lisp character constant syntax consists of a @samp{?} followed by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702 either a character or an escape sequence starting with @samp{\}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 Examples: @code{?x}, @code{?\n}, @code{?\"}, @code{?\)}. Note that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 strings and characters are not interchangeable in Lisp; some contexts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 require one and some contexts require the other.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707 @item True
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 @code{t} stands for `true'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 @item False
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 @code{nil} stands for `false'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713 @item Other Lisp objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 Write a single-quote (') followed by the Lisp object you want.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 @node Init Examples
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718 @subsection Init File Examples
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720 Here are some examples of doing certain commonly desired things with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721 Lisp expressions:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 Make @key{TAB} in C mode just insert a tab if point is in the middle of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729 (setq c-tab-always-indent nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 Here we have a variable whose value is normally @code{t} for `true'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 and the alternative is @code{nil} for `false'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 Make searches case sensitive by default (in all buffers that do not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 override this).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740 (setq-default case-fold-search nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 This sets the default value, which is effective in all buffers that do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 not have local values for the variable. Setting @code{case-fold-search}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 with @code{setq} affects only the current buffer's local value, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746 is probably not what you want to do in an init file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749 Make Text mode the default mode for new buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752 (setq default-major-mode 'text-mode)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755 Note that @code{text-mode} is used because it is the command for entering
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756 the mode we want. A single-quote is written before it to make a symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757 constant; otherwise, @code{text-mode} would be treated as a variable name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 Turn on Auto Fill mode automatically in Text mode and related modes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 (setq text-mode-hook
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 '(lambda () (auto-fill-mode 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 Here we have a variable whose value should be a Lisp function. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 function we supply is a list starting with @code{lambda}, and a single
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769 quote is written in front of it to make it (for the purpose of this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1770 @code{setq}) a list constant rather than an expression. Lisp functions
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771 are not explained here; for mode hooks it is enough to know that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 @code{(auto-fill-mode 1)} is an expression that will be executed when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1773 Text mode is entered. You could replace it with any other expression
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1774 that you like, or with several expressions in a row.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777 (setq text-mode-hook 'turn-on-auto-fill)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780 This is another way to accomplish the same result.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781 @code{turn-on-auto-fill} is a symbol whose function definition is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782 @code{(lambda () (auto-fill-mode 1))}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785 Load the installed Lisp library named @file{foo} (actually a file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 @file{foo.elc} or @file{foo.el} in a standard Emacs directory).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789 (load "foo")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 When the argument to @code{load} is a relative pathname, not starting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793 with @samp{/} or @samp{~}, @code{load} searches the directories in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 @code{load-path} (@pxref{Loading}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797 Load the compiled Lisp file @file{foo.elc} from your home directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800 (load "~/foo.elc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 Here an absolute file name is used, so no searching is done.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806 Rebind the key @kbd{C-x l} to run the function @code{make-symbolic-link}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809 (global-set-key "\C-xl" 'make-symbolic-link)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1810 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812 or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815 (define-key global-map "\C-xl" 'make-symbolic-link)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1816 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1817
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818 Note once again the single-quote used to refer to the symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819 @code{make-symbolic-link} instead of its value as a variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1820
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1821 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822 Do the same thing for C mode only.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1824 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1825 (define-key c-mode-map "\C-xl" 'make-symbolic-link)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1829 Bind the function key @key{F1} to a command in C mode.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830 Note that the names of function keys must be lower case.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1833 (define-key c-mode-map 'f1 'make-symbolic-link)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837 Bind the shifted version of @key{F1} to a command.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840 (define-key c-mode-map '(shift f1) 'make-symbolic-link)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1843 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844 Redefine all keys which now run @code{next-line} in Fundamental mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 to run @code{forward-line} instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1847 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848 (substitute-key-definition 'next-line 'forward-line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849 global-map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1853 Make @kbd{C-x C-v} undefined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1854
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 (global-unset-key "\C-x\C-v")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859 One reason to undefine a key is so that you can make it a prefix.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1860 Simply defining @kbd{C-x C-v @var{anything}} would make @kbd{C-x C-v}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1861 a prefix, but @kbd{C-x C-v} must be freed of any non-prefix definition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1862 first.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1865 Make @samp{$} have the syntax of punctuation in Text mode.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866 Note the use of a character constant for @samp{$}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1867
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869 (modify-syntax-entry ?\$ "." text-mode-syntax-table)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1873 Enable the use of the command @code{eval-expression} without confirmation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1874
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1875 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1876 (put 'eval-expression 'disabled nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1877 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1879
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1880 @node Terminal Init
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1881 @subsection Terminal-Specific Initialization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1882
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1883 Each terminal type can have a Lisp library to be loaded into Emacs when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1884 it is run on that type of terminal. For a terminal type named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1885 @var{termtype}, the library is called @file{term/@var{termtype}} and it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1886 found by searching the directories @code{load-path} as usual and trying the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1887 suffixes @samp{.elc} and @samp{.el}. Normally it appears in the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1888 subdirectory @file{term} of the directory where most Emacs libraries are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1889 kept.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891 The usual purpose of the terminal-specific library is to define the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1892 escape sequences used by the terminal's function keys using the library
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893 @file{keypad.el}. See the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894 @file{term/vt100.el} for an example of how this is done.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1895
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896 When the terminal type contains a hyphen, only the part of the name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1897 before the first hyphen is significant in choosing the library name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 Thus, terminal types @samp{aaa-48} and @samp{aaa-30-rv} both use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 the library @file{term/aaa}. The code in the library can use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900 @code{(getenv "TERM")} to find the full terminal type name.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1902 @vindex term-file-prefix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1903 The library's name is constructed by concatenating the value of the
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1904 variable @code{term-file-prefix} and the terminal type. Your init
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 file can prevent the loading of the terminal-specific library by setting
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1906 @code{term-file-prefix} to @code{nil}. @xref{Init File}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908 @vindex term-setup-hook
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909 The value of the variable @code{term-setup-hook}, if not @code{nil}, is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1910 called as a function of no arguments at the end of Emacs initialization,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1911 after both your init file and any terminal-specific library have been
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1912 read. @xref{Init File}. You can set the value in the init file to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1913 override part of any of the terminal-specific libraries and to define
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914 initializations for terminals that do not have a library.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 @node Audible Bell
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917 @section Changing the Bell Sound
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1918 @cindex audible bell, changing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919 @cindex bell, changing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920 @vindex sound-alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921 @findex load-default-sounds
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922 @findex play-sound
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924 You can now change how the audible bell sounds using the variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 @code{sound-alist}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927 @code{sound-alist}'s value is an list associating symbols with, among
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 other things, strings of audio-data. When @code{ding} is called with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 one of the symbols, the associated sound data is played instead of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930 standard beep. This only works if you are logged in on the console of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931 machine with audio hardware. To listen to a sound of the provided type,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932 call the function @code{play-sound} with the argument @var{sound}. You
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1933 can also set the volume of the sound with the optional argument
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934 @var{volume}.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1935 @cindex ding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1936
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 Each element of @code{sound-alist} is a list describing a sound.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938 The first element of the list is the name of the sound being defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939 Subsequent elements of the list are alternating keyword/value pairs:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1942 @item sound
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1943 A string of raw sound data, or the name of another sound to play.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 The symbol @code{t} here means use the default X beep.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946 @item volume
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947 An integer from 0-100, defaulting to @code{bell-volume}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 @item pitch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950 If using the default X beep, the pitch (Hz) to generate.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 @item duration
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953 If using the default X beep, the duration (milliseconds).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1956 For compatibility, elements of `sound-alist' may also be of the form:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1957
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1958 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1959 ( @var{sound-name} . @var{<sound>} )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960 ( @var{sound-name} @var{<volume>} @var{<sound>} )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963 You should probably add things to this list by calling the function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 @code{load-sound-file}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966 Note that you can only play audio data if running on the console screen
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967 of a machine with audio hardware which emacs understands, which at this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 time means a Sun SparcStation, SGI, or HP9000s700.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970 Also note that the pitch, duration, and volume options are available
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1971 everywhere, but most X servers ignore the `pitch' option.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1973 @vindex bell-volume
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974 The variable @code{bell-volume} should be an integer from 0 to 100,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975 with 100 being loudest, which controls how loud the sounds emacs makes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976 should be. Elements of the @code{sound-alist} may override this value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977 This variable applies to the standard X bell sound as well as sound files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1978
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 If the symbol @code{t} is in place of a sound-string, Emacs uses the
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
1980 default X beep. This allows you to define beep-types of
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981 different volumes even when not running on the console.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 @findex load-sound-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984 You can add things to this list by calling the function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985 @code{load-sound-file}, which reads in an audio-file and adds its data to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1986 the sound-alist. You can specify the sound with the @var{sound-name}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987 argument and the file into which the sounds are loaded with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 @var{filename} argument. The optional @var{volume} argument sets the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989 volume.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1991 @code{load-sound-file (@var{filename sound-name} &optional @var{volume})}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1992
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1993 To load and install some sound files as beep-types, use the function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 @code{load-default-sounds} (note that this only works if you are on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995 display 0 of a machine with audio hardware).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997 The following beep-types are used by Emacs itself. Other Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 packages may use other beep types, but these are the ones that the C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1999 kernel of Emacs uses.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2001 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2002 @item auto-save-error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 An auto-save does not succeed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2005 @item command-error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2006 The Emacs command loop catches an error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2008 @item undefined-key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2009 You type a key that is undefined
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2011 @item undefined-click
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2012 You use an undefined mouse-click combination
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2013
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2014 @item no-completion
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2015 Completion was not possible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2016
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2017 @item y-or-n-p
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2018 You type something other than the required @code{y} or @code{n}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2019
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2020 @item yes-or-no-p
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2021 You type something other than @code{yes} or @code{no}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2022 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2023
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2024 @comment node-name, next, previous, up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2025 @node Faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2026 @section Faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2027
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2028 XEmacs has objects called extents and faces. An @dfn{extent}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2029 is a region of text and a @dfn{face} is a collection of textual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2030 attributes, such as fonts and colors. Every extent is displayed in some
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2031 face; therefore, changing the properties of a face immediately updates the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2032 display of all associated extents. Faces can be frame-local: you can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2033 have a region of text that displays with completely different
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2034 attributes when its buffer is viewed from a different X window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2035
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2036 The display attributes of faces may be specified either in Lisp or through
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2037 the X resource manager.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2038
3387
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2039 Basic Xft support has been merged into the mainline, and it looks pretty
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2040 good. However, customization UI and documentation still leaves a lot to
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2041 be desired. Here's a first cut, as a separate node.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2042
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2043 @menu
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2044 * Xft Font Customization::
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2045 @end menu
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2046
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047 @subsection Customizing Faces
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2049 You can change the face of an extent with the functions in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050 this section. All the functions prompt for a @var{face} as an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051 argument; use completion for a list of possible values.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054 @item M-x invert-face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2055 Swap the foreground and background colors of the given @var{face}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2056 @item M-x make-face-bold
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2057 Make the font of the given @var{face} bold. When called from a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2058 program, returns @code{nil} if this is not possible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2059 @item M-x make-face-bold-italic
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2060 Make the font of the given @var{face} bold italic.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2061 When called from a program, returns @code{nil} if not possible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2062 @item M-x make-face-italic
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2063 Make the font of the given @var{face} italic.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2064 When called from a program, returns @code{nil} if not possible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2065 @item M-x make-face-unbold
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2066 Make the font of the given @var{face} non-bold.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2067 When called from a program, returns @code{nil} if not possible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2068 @item M-x make-face-unitalic
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2069 Make the font of the given @var{face} non-italic.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2070 When called from a program, returns @code{nil} if not possible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071 @item M-x make-face-larger
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2072 Make the font of the given @var{face} a little larger.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2073 When called from a program, returns @code{nil} if not possible.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2074 @item M-x make-face-smaller
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2075 Make the font of the given @var{face} a little smaller.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2076 When called from a program, returns @code{nil} if not possible.
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2077 @item M-x set-face-background
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2078 Change the background color of the given @var{face}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2079 @item M-x set-face-background-pixmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2080 Change the background pixmap of the given @var{face}.
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2081 @item M-x set-face-background-pixmap-file
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2082 A simpler version but with filename completion.
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2083 @item M-x set-face-background-placement
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2084 Change the placement of the background pixmap of the given @var{face}.
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2085 @item M-x set-face-font
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2086 Change the font of the given @var{face}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2087 @item M-x set-face-foreground
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2088 Change the foreground color of the given @var{face}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2089 @item M-x set-face-underline-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2090 Change whether the given @var{face} is underlined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2091 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2092
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2093 @findex make-face-larger
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2094 @findex make-face-smaller
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2095
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2096 @findex invert-face
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2097 You can exchange the foreground and background color of the selected
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2098 @var{face} with the function @code{invert-face}. If the face does not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2099 specify both foreground and background, then its foreground and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2100 background are set to the background and foreground of the default face.
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2101 When calling this from a program, you can supply the optional argument
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2102 @var{frame} to specify which frame is affected; otherwise, all frames
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2103 are affected.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2104
1142
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2105 @findex make-face-bold
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2106 @findex make-face-bold-italic
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2107 @findex make-face-italic
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2108 @findex make-face-unbold
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2109 @findex make-face-unitalic
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2110 @vindex face-frob-from-locale-first
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2111 The work of @code{make-face-bold}, @code{make-face-bold-italic},
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2112 @code{make-face-italic}, @code{make-face-unbold},
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2113 @code{make-face-unitalic} functions is affected by
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2114 @code{face-frob-from-locale-first} variable. If it is @code{nil}, those
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2115 functions first try to manipulate device specific data like X font names
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2116 to obtain the desired font face specification. This may be unsuitable
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2117 in environments using different font face specifications for different
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2118 frames, non-Mule environments in particular.
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2119
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2120 If the variable is non-@code{nil}, those functions first try to figure
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2121 out whether the face font is the same as one of predefined faces:
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2122 @code{default}, @code{bold}, @code{italic}, @code{bold-italic}. If it
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2123 is the same, then the new face font specification is set to be the same
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2124 as that of a corresponding predefined face. Thus if the predefined face
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2125 is set up properly for different frames, the same will hold for the face
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2126 being changed by the functions. This is the behavior one might desire
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2127 in non-Mule environments mentioned above: face being changed still looks
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2128 right in all frames.
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2129
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2130 How predefined faces might be set up for different frames in such an
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2131 environments is described in @ref{Face Resources}.
55834f418dfb [xemacs-hg @ 2002-12-04 14:00:37 by stephent]
stephent
parents: 1137
diff changeset
2132
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2133 @findex set-face-background
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2134 You can set the background color of the specified @var{face} with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2135 function @code{set-face-background}. The argument @code{color} should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2136 be a string, the name of a color. When called from a program, if the
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2137 optional @var{frame} argument is provided, the face is changed only
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2138 in that frame; otherwise, it is changed in all frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2139
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2140 @findex set-face-background-pixmap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2141 You can set the background pixmap of the specified @var{face} with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2142 function @code{set-face-background-pixmap}. The pixmap argument
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2143 @var{name} should be a string, the name of a file of pixmap data. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2144 directories listed in the @code{x-bitmap-file-path} variable are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2145 searched. The bitmap may also be a list of the form @code{(@var{width
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2146 height data})}, where @var{width} and @var{height} are the size in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2147 pixels, and @var{data} is a string containing the raw bits of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2148 bitmap. If the optional @var{frame} argument is provided, the face is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2149 changed only in that frame; otherwise, it is changed in all frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2151 The variable @code{x-bitmap-file-path} takes as a value a list of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2152 directories in which X bitmap files may be found. If the value is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2153 @code{nil}, the list is initialized from the @code{*bitmapFilePath}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2154 resource.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2156 If the environment variable @b{XBMLANGPATH} is set, then it is consulted
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2157 before the @code{x-bitmap-file-path} variable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2158
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2159 @findex set-face-background-pixmap
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2160 Alternately, you can use a simpler version of
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2161 @code{set-face-background-pixmap} called
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2162 @code{set-face-background-pixmap-file}. This function does not give you
3111
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2163 as much control on the pixmap instantiator, but provides filename
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2164 completion.
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2165
5080
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2166 @findex set-face-background-placement
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2167 You can set the placement of the background pixmap of the specified
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2168 @var{face} with the function @code{set-face-background-placement}. The
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2169 placement argument can be either @code{absolute} or @code{relative} (the
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2170 default). A @code{relative} placement means that the pixmap is attached
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2171 to the frame and moves with it. An @code{absolute} placement means that
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2172 the pixmap is rather attached to the frame's root window, so that when
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2173 you move the frame on the screen, it will appear to ``slide'' on the
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2174 pixmap. This placement mode can be used to achieve pseudo-translucency
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2175 for a frame, for example by setting the default face's background pixmap
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2176 to the root window's one.
5502045ec510 The background-placement face property.
Didier Verna <didier@lrde.epita.fr>
parents: 4666
diff changeset
2177
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2178 @findex set-face-font
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2179 You can set the font of the specified @var{face} with the function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2180 @code{set-face-font}. The @var{font} argument should be a string, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2181 name of a font. When called from a program, if the
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2182 optional @var{frame} argument is provided, the face is changed only
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2183 in that frame; otherwise, it is changed in all frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2184
3111
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2185 The syntax of the @var{font} argument varies according to platform. In
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2186 each of the following syntaxes, the example shows how to specify a
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2187 14-point upright bold Courier font.
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2188
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2189 @table @strong
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2190 @item X11
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2191 The X11 syntax is defined by the @dfn{X Logical Font Descriptor} (XLFD)
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2192 standard. An XLFD contains 14 fields each preceded by a hyphen:
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2193 foundry, family, weight, slant, swidth, adstyle, pixelsize, pointsize,
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2194 xresolution, yresolution, spacing, averagewidth, registry, and encoding.
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2195 It is usually sufficient to specify family, weight, slant, pointsize,
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2196 registry, and encoding, wildcarding the rest with @samp{*}. If you're
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2197 not sure what's available, you can wildcard some of the fields usually
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2198 specified, too. Here's our example font in XLFD syntax:
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2199 @code{"-*-courier-bold-r-*-*-*-140-*-*-*-*-iso8859-*"}.
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2200 The XLFD syntax is also used for GTK+ version 1. XLFD names must be
3510
06a586083be3 [xemacs-hg @ 2006-07-16 10:51:43 by aidan]
aidan
parents: 3387
diff changeset
2201 encoded in ISO-8859-1.
3111
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2202
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2203 @item Xft
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2204 The Xft syntax is defined by the @file{fontconfig} library
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2205 @ref{Font Names,,,fontconfig}. It is less a font naming convention than
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2206 a way to express any arbitrary subset of the font's properties in a
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2207 syntax that is both human- and machine-readable. A @file{fontconfig}
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2208 font name contains the family, a hyphen, and the pointsize, followed by
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2209 an arbitrary sequence of properties. Each property consists of a colon,
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2210 a keyword, an equals sign, and the property value. Here's our example
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2211 font in @file{fontconfig} syntax: @code{"Courier-14:weight=bold"}. This
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2212 syntax admits ``style abbreviations'' which can be user-defined. A
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2213 style is a single keyword denoting a sequence of properties. So the
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2214 example font may be abbreviated to @code{"Courier-14:bold"} ("bold" is a
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2215 standard abbreviation for "weight=bold"). The @file{fontconfig} syntax
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2216 is also used for GTK+ version 2. @file{fontconfig} names must be
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2217 encoded in UTF-8.
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2218
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2219 @item MS-Windows
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2220 The MS Windows syntax is superficially similar to that of Xft but
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2221 actually is more like XLFD. A font name consists of five fields,
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2222 family, size, slant, weight, and encoding, each expressed as a keyword
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2223 taking on standardized values (except family, which is just a name).
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2224 Here's our example font in MS Windows syntax:
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2225 @code{"Courier:14:Bold:Western"}.
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2226 @end table
e1bc252950d9 [xemacs-hg @ 2005-11-29 12:08:32 by stephent]
stephent
parents: 2736
diff changeset
2227
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2228 @findex set-face-foreground
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2229 You can set the foreground color of the specified @var{face} with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2230 function @code{set-face-foreground}. The argument @var{color} should be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2231 a string, the name of a color. If the optional @var{frame} argument is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2232 provided, the face is changed only in that frame; otherwise, it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2233 changed in all frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2234
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2235 @findex set-face-underline-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2236 You can set underline the specified @var{face} with the function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2237 @code{set-face-underline-p}. The argument @var{underline-p} can be used
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2238 to make underlining an attribute of the face or not. If the optional
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2239 @var{frame} argument is provided, the face is changed only in that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2240 frame; otherwise, it is changed in all frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2241
3387
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2242
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2243 @node Xft Font Customization, , , Faces
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2244 @section Xft Font Customization
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2245
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2246 This section was written by @email{stephen@@xemacs.org,Stephen Turnbull},
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2247 and is very much a work in progress. I've tried to provide pointers to
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2248 as much of the relevant information as possible, but many of the APIs
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2249 and UIs are in flux, so it seemed more work than it was worth to
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2250 completely translate the tables of constants, and so on. Feel free to
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2251 ask for clarifications, @emph{etc.} Please Cc
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2252 @email{xemacs-beta@@xemacs.org,the XEmacs Beta Testers' mailing list},
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2253 as that is the issue tracking channel of record, and there are a few
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2254 others who can answer the questions or improve documentation when I'm
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2255 not able to respond quickly.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2256
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2257 @c Don't blame Ben (or Eric and Matthias, for that matter). Feel free to
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2258 @c add, edit, and share the blame, everybody!
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2259
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2260 @c #### Make these @urlref's!!
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2261 As of mid-2005, we have added support for the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2262 @file{Xft} library, which provides a more robust @emph{font
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2263 configuration} mechanism via Keith Packard's @file{fontconfig} library;
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2264 improved glyph rendering, including antialiasing, via the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2265 @file{freetype} library; and client-side rendering (saving bandwidth and
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2266 server memory) via the @file{XRender extension}.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2267
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2268 @c #### Describe Alexey Gladkov and Yury Konovalov's work.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2269
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2270 @subheading Font configuration
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2271
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2272 In XEmacs, font configuration is handled via @emph{faces}. Currently
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2273 XEmacs uses a special type of @emph{font specifier} to map XEmacs
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2274 locales to font names. Especially under X11, this can cause annoying
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2275 problems because of the unreliability of X servers' mappings from
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2276 @samp{XLFD} names to X11 fonts, over which XEmacs has no influence
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2277 whatsoever. However, the @file{fontconfig} library which is used with
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2278 @file{Xft} provides much more reliable mapping, along with a more
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2279 reliably parsable naming scheme similar to that used by TrueType fonts
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2280 on MS Windows and the Macintosh.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2281
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2282 @subheading fontconfig
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2283
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2284 Fontconfig is dramatically different from the X model in several ways.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2285 In particular, when queried for a font @emph{fontconfig always returns a
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2286 font}, whereas X queries may return ``not found.'' However, the font
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2287 returned need not be anything like the desired font. This is not really
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2288 a problem in practice, because users generally have a pretty good idea
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2289 of what fonts are available on their display. However, users should be
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2290 aware that as of XEmacs 21.5.26 the font selection internals have not
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2291 been revised to account for this radically different model, so some
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2292 surprising results are possible.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2293
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2294 From the user's point of view, @file{fontconfig} provides a naming
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2295 convention which is @emph{precise}, @emph{accurate}, and
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2296 @emph{convenient}. Precision means that all properties available in the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2297 programming API can be individually specified. Accuracy means that the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2298 truename of the font is exactly the list of all properties specified by
4488
6b0000935adc Spelling fixes.
"Ville Skyttä <scop@xemacs.org>"
parents: 3711
diff changeset
2299 the font. Thus, the anomalies that occur with XLFDs on many servers
3387
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2300 (including modern Linux distributions with XFree86 or X.org servers)
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2301 cannot occur. Convenience is subjective, of course. However,
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2302 @file{fontconfig} provides a configuration system which (1) explicitly
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2303 specifies the defaults and substitutions that will be made in processing
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2304 user queries, (2) allows the user to specify search configuration,
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2305 abbreviations, substitutions, and defaults that override the system's,
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2306 in the same format as used by system files, and (3) allows flexible
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2307 aliases that can resolve to any of several actual fonts depending on
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2308 which fonts are installed.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2309
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2310 Further, a @dfn{standard minimal configuration} is defined that ensures
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2311 that at least the @emph{serif}, @emph{sans-serif}, and @emph{monospace}
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2312 font aliases are available on all @file{fontconfig} systems.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2313
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2314 @subheading fontconfig font names
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2315
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2316 @file{fontconfig} font names are very regular, and constitute a precise
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2317 and extensible specification of a font's properties.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2318
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2319 The basic @file{fontconfig} font name has three components: the font
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2320 family name, the size, and a list of named attribute fields. All
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2321 attribute names and values are strings encoded in Unicode UTF-8, or
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2322 decimal numbers with optional decimal point and fraction. The
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2323 characters @samp{-}, @samp{:}, @samp{,}, @samp{=}, and @samp{\} are
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2324 syntactically significant to @file{fontconfig}. They may be used in
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2325 font name components by the familiar mechanism of backslash escaping.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2326 This simply removes any special meaning from the following character.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2327 It is always safe to use an escape even if it is not needed.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2328
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2329 Most string values are case-insensitive, but this is attribute-specific.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2330
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2331 The @dfn{font family name} is an arbitrary string, which may contain any
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2332 character, including spaces, hyphens, and commas. Don't forget to
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2333 escape hyphens, colons, commas, and backslashes!
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2334
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2335 The @dfn{size} is a decimal number with optional decimal point and
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2336 fractional part. It is interpreted as point size.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2337
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2338 A @dfn{named attribute field} is a key-value pair separated by an equal
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2339 sign. Some attributes have predefined semantics. (These include such
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2340 familiar attributes as @samp{slant} and @samp{dpi} -- note that
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2341 @file{fontconfig} does not distinguish between vertical and horizontal
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2342 resolution!
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2343
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2344 The basic syntax of a font name is simple and regular. The @emph{font
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2345 family name} comes first, followed by a hyphen and the @emph{size},
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2346 followed by a list of @emph{named attribute fields}, each introduced by
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2347 a colon:
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2348
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2349 @example
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2350 @var{font family name}-@var{size}:@var{key1}=@var{value1}:@var{key2}=@var{value2}...
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2351 @end example
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2352
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2353 There are four extensions to the basic syntax. First, all of the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2354 fields are optional. If size is omitted, the hyphen should be omitted
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2355 as well. There should never be a trailing colon. Note that
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2356 @file{fontconfig} does @emph{not} interpret an omitted field as
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2357 ``default to current.'' @file{fontconfig} does not have access to that
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2358 context. Instead, omitted fields are filled in according to a set of
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2359 defaults specified in the system @file{fonts.conf} file and in the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2360 user's @file{.fonts.cont} file. The user's configuration gets
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2361 precedence, of course.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2362
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2363 The second is that the @emph{font family name}, the @emph{size}, and the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2364 @emph{value} component of a @emph{named attribute field} may be a
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2365 comma-separated list of values. This is called a @dfn{pattern}. In
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2366 queries, @file{fontconfig} tries to match each entry in the list in
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2367 order. (I suspect that order of attributes is also significant.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2368 @emph{I.e.}, font family always gets highest precedence, followed by
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2369 size, followed by the remaining named attributes. Testing and reports
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2370 to the @email{xemacs-beta@@xemacs.org,XEmacs Beta Testers mailing list}
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2371 are very welcome!)
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2372
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2373 The third is the definition of @dfn{constants} to represent numerical
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2374 values. For example, both @samp{slant} and @samp{weight} are defined as
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2375 integer attributes, but the magnitudes are arbitrary; only the ordering
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2376 and relative distances are useful. (``Relative distance'' is used to
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2377 implement the concept that although strictly speaking @emph{italic} and
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2378 @emph{oblique} are different faces, most users don't know the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2379 difference, and even professional typographers would agree that they are
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2380 much closer to each other than either is to @emph{roman}.) So
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2381 @emph{constants} like @samp{roman} (0) and @samp{italic} (100) are
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2382 defined for @samp{slant}, and @samp{medium} (100) and @samp{bold} (200)
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2383 are defined for @samp{weight}.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2384
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2385 The fourth is that a @dfn{style} may be defined as an alias for an
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2386 instance of a @emph{named attribute field}, that is, specifying both key
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2387 and value. The @emph{styles} @samp{bold}, an alias for
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2388 @samp{weight=200}, and @samp{italic}, an alias for @samp{slant=100}, are
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2389 commonly used.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2390
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2391 Styles and constants can be defined by the application. XEmacs
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2392 currently defines none, but suggestions are welcome if some convenient
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2393 alias is lacking from @file{fontconfig}. Note that we will not provide
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2394 additional aliases where standard ones exist, @emph{e.g.}, @samp{heavy}
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2395 as an additional alias for @samp{bold} would almost certainly be
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2396 rejected. These cause more confusion than they are worth, and would
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2397 decrease portability of user specifications to other applications.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2398
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2399 (Attributes can also be defined, but they must be implemented by the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2400 fonts to be useful. Until XEmacs provides its own fonts with
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2401 non-standardized attributes, this is not useful.)
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2402
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2403 Here are some examples of font names and query patterns:
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2404
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2405 @example
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2406 Times-12 12-point Times Roman
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2407 Times-12:bold 12-point Times Bold
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2408 Courier:italic Courier Italic in the default size
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2409 Monospace:matrix=1 .1 0 1 The user's preferred monospace font
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2410 with artificial obliquing
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2411 Mikachan\-PB-16 16-point Mikachan-PB
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2412 LucidaTypewriter,Courier-9 9-point LucidaTypewriter if available,
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2413 otherwise 9-point Courier
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2414 @end example
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2415
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2416 Note how @emph{styles} are used in the second and third examples, how
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2417 @samp{matrix} has a complex value containing spaces, and the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2418 escaped hyphen in the font family name @samp{Mikachan\-PB}.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2419
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2420 @c #### FIXME here and also in fontconfig.texi (in general-docs package).
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2421 Here is a (somewhat outdated) list of current standard named attributes:
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2422
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2423 @example
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2424 Property CPP symbol Type Description
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2425
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2426 family FC_FAMILY String Font family name
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2427 style FC_STYLE String Font style. Overrides weight and slant
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2428 slant FC_SLANT Int Italic, oblique or roman
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2429 weight FC_WEIGHT Int Light, medium, demibold, bold or black
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2430 size FC_SIZE Double Point size
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2431 aspect FC_ASPECT Double Stretch glyphs horizontally, then hint
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2432 pixelsize FC_PIXEL_SIZE Double Pixel size
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2433 spacing FC_SPACING Int Proportional, monospace or charcell
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2434 foundry FC_FOUNDRY String Font foundry name
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2435 antialias FC_ANTIALIAS Bool Should glyphs be antialiased?
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2436 hinting FC_HINTING Bool Should the rasterizer use hinting?
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2437 verticallayout FC_VERTICAL_LAYOUT Bool Use vertical layout
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2438 autohint FC_AUTOHINT Bool Use autohinter instead of normal hinter
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2439 globaladvance FC_GLOBAL_ADVANCE Bool Use font global advance data
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2440 file FC_FILE String The filename holding the font
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2441 index FC_INDEX Int The index of the font within the file
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2442 ftface FC_FT_FACE FT_Face Use the specified FreeType face object
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2443 rasterizer FC_RASTERIZER String Which rasterizer is in use
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2444 outline FC_OUTLINE Bool Whether the glyphs are outlines
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2445 scalable FC_SCALABLE Bool Whether glyphs can be scaled
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2446 scale FC_SCALE Double Point->pixel conversion scale factor
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2447 dpi FC_DPI Double Target dots per inch
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2448 rgba FC_RGBA Int unknown, rgb, bgr, vrgb, vbgr, none
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2449 - subpixel geometry
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2450 source FC_SOURCE String X11, freetype
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2451 minspace FC_MINSPACE Bool Eliminate leading from line spacing
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2452 charset FC_CHARSET CharSet Unicode chars encoded by the font
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2453 lang FC_LANG String List of RFC-3066-style languages
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2454 this font supports
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2455 fontversion FC_FONTVERSION Int From 'head' table
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2456 @end example
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2457
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2458 Here is a list of current standard constants:
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2459
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2460 @example
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2461 Constant Property CPP symbol
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2462
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2463 light weight FC_WEIGHT_LIGHT
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2464 medium weight FC_WEIGHT_MEDIUM
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2465 demibold weight FC_WEIGHT_DEMIBOLD
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2466 bold weight FC_WEIGHT_BOLD
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2467 black weight FC_WEIGHT_BLACK
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2468 roman slant FC_SLANT_ROMAN
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2469 italic slant FC_SLANT_ITALIC
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2470 oblique slant FC_SLANT_OBLIQUE
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2471 proportional spacing FC_PROPORTIONAL
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2472 mono spacing FC_MONO
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2473 charcell spacing FC_CHARCELL
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2474 unknown rgba FC_RGBA_UNKNOWN
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2475 rgb rgba FC_RGBA_RGB
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2476 bgr rgba FC_RGBA_BGR
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2477 vrgb rgba FC_RGBA_VRGB
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2478 vbgr rgba FC_RGBA_VBGR
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2479 none rgba FC_RGBA_NONE
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2480 @end example
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2481
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2482 Note that this is the @file{fontconfig} API list; you can expect that
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2483 XEmacs will define corresponding keywords by substituting @samp{:} for
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2484 the leading @samp{FC_}, @samp{-} for @samp{_}, removing the key of the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2485 attribute if present, and lowercasing the name. Thus
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2486 @samp{FC_WEIGHT_BOLD} becomes @samp{:bold}.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2487 @kbd{M-x apropos RET fc-.*-mapping} will give a list of variables each
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2488 of which lists such keywords and their meanings.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2489
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2490 @subheading Font menus
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2491
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2492 The @samp{Options->Font} and @samp{Options->Font Sizes} menus are
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2493 broken, by design, not just by @file{Xft}. The problem is that many
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2494 fonts are unavailable because they don't match the current size---which
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2495 is very strange, since @file{Xft} fonts are of course scalable. But the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2496 whole idea of requiring that the font match the size is strange. And
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2497 the @samp{Options->Font Weights} menu is just disabled, and has been for
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2498 eons.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2499
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2500 @subheading X resources
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2501
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2502 Currently there are @emph{four} treatments of font resources. There are
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2503 the @samp{XEmacs.@var{face}.attributeFont} resources used to set a
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2504 single global font specification. In the widgets, some (still) have a
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2505 @samp{font} resource using the automatic @file{Xt} resource conversion
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2506 to X's @samp{FontStruct}, some have separate @samp{font} and @samp{xftFont}
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2507 resources with the former automatically converted to @samp{FontStruct}
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2508 by @file{Xt} and the latter left as a string, to be converted to a
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2509 fontconfig @samp{FcPattern} by
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2510 @samp{FcParseName} later, and some have a single @samp{font} resource
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2511 which is converted to @samp{FontStruct} by @file{Xt} or the latter left
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2512 as a string, depending on whether @file{Xft} was enabled by
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2513 @samp{configure} or not.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2514
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2515 Eventually these should be converted to use the face
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2516 approach, perhaps with some way to set specifications for individual
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2517 widgets, frames, or buffers. This will require some careful design work
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2518 to incorporate face support in the widgets. Stephen's current thinking
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2519 is that XEmacs should just accept any
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2520 or all of @samp{font}, @samp{fontSet}, and @samp{fontList} resources,
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2521 treat them all as lists of font names, either @samp{XLFD}- or
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2522 @file{fontconfig}-style, parse them ourselves (ie, not use the @file{Xt}
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2523 resource manager), and add them to font specifiers as appropriate. But
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2524 this will require a bit of thought to obey POLA vis-a-vis usual @file{Xt}
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2525 conventions.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2526
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2527 @subheading Specifiers, charsets, and languages
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2528
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2529 Traditionally Mule uses a rather rigid and low-level abstraction, the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2530 @emph{charset}, to characterize font repertoires. Unfortunately,
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2531 support for a given charset is generally neither necessary nor
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2532 sufficient to support a language. Worse, in XEmacs's current
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2533 implementation Xft doesn't help much. Instead you need to add the fonts
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2534 for different charsets to the font specifier in the right order.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2535
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2536 There currently is no explicit way to specify that a particular font be
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2537 used only for a given language. However, since many fonts support only
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2538 a limited repertoire such as ISO 8859/1, you can use the precedence of
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2539 specifications for a given specifier locale to get something of this
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2540 effect for non-Latin character sets. This will normally work rather
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2541 poorly for multiple Latin character sets, however, because the
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2542 repertoires tend to have large amounts of overlap. Support for
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2543 specifying font by @emph{language} as well as by character set is
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2544 planned.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2545
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2546 Because fonts supporting other languages tend to support English as
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2547 well, if you want to use one font for English and another for the other
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2548 language, you must use the @code{append} method when adding font
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2549 specifications for the @emph{other} language.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2550
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2551 However, this simple method leaves you with a problem if you want to
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2552 change the other language's font: you have to remove the existing
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2553 specification so it won't shadow the new one when you append.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2554
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2555 In order to provide a convenient way to change ``other-language fonts'',
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2556 I use @code{remove-tag-set-append} and @code{define-specifier-tag} like
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2557 this:
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2558
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2559 @example
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2560 (define-specifier-tag 'lang-ja)
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2561 ;; No, I don't try to do real work with this font! But it makes it
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2562 ;; obvious that I got the requested font. :-)
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2563 (set-face-font 'default "AirCut-14")
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2564 (set-face-font 'default "Kochi Mincho-14" nil '(lang-ja) 'append)
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2565 ;; Oops, too sober. Try something to match AirCut.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2566 (set-face-font 'default "Mikachan-14"
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2567 nil '(lang-ja) 'remove-tag-set-append)
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2568 @end example
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2569
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2570 The only way to configure widget fonts at the present time is to use X
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2571 resources (or hack the source and rebuild). Currently supported widgets
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2572 are
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2573 @itemize
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2574 @item
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2575 menubars
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2576 @item
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2577 tab controls
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2578 @end itemize
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2579
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2580 Here are the resources I use. @strong{Warning:} @emph{This interface
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2581 will change. Pay attention to beta announcements, and complain loudly
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2582 if changes aren't documented here!} The tab control and menubar have
4666
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2583 separate @code{Font} and @code{FcFontName} resources, and use the X
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2584 resource manager to instantiate a FontStruct from the @code{Font}
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2585 resource. There is no converter facility for @code{FcFontName} yet, and
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2586 creating one that handles both FontStruct and XftFont depending on
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2587 XEmacs's configuration and the font name seems error-prone at best.
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2588 Probably we will use a simple string representation for this resource,
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2589 and convert to a face in XEmacs rather than a font in Xt/Xft. (The
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2590 older @code{XftFont} resource is deprecated. There is code intended to
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2591 implement backward compatibility, but there are repots that it doesn't
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2592 work properly.)
3387
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2593 @example
4666
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2594 XEmacs*Tabs.fcFontName: Bitstream Vera Sans-16
4c1a8323aa9a Fix incorrect Xft resources in Info docs.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4488
diff changeset
2595 XEmacs*menubar*fcFontName: Bitstream Vera Sans-16
3387
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2596 XEmacs.modeline.attributeFont: Bitstream Charter-16
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2597 XEmacs.default.attributeFont: Bitstream Vera Sans Mono-16
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2598 @end example
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2599 I highly recommend use of a proportional font in the modeline because it
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2600 allows a lot more text to fit there.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2601 @c Previously the font sizes were quite varied, and there was a comment
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2602 @c that this weirdness gave good balance. This isn't true on my main
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2603 @c platform, Mac OS X, and needs to be rechecked on Linux, where it was
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2604 @c observed.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2605
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2606 @subheading Known Problems
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2607
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2608 @table @code
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2609 @item Options->Font
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2610 @itemx Options->Font Size
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2611 These menus don't work. All fonts are greyed out. All sizes are
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2612 available, but many (most?) faces don't change size, in particular,
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2613 @samp{default} does not.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2614
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2615 @item Antialiased text bleeding outside of reported extent
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2616 This is most obvious with the underscore character in that
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2617 font, and with cursors. The bottom of the underscore is antialiased,
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2618 and insertions or deletions in the same line before the underscore leave
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2619 a series of "phantom" underlines.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2620
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2621 I think this is probably an Xft bug, but I'm not sure.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2622 @end table
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2623
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2624 @subheading Variables Used with Xft and Fontconfig
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2625
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2626 @defvar xft-debug-level
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2627
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2628 Level of debugging messages to issue to stderr for @var{Xft}.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2629 A nonnegative integer. Set to 0 to suppress all warnings.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2630 Default is 1 to ensure a minimum of debugging output at initialization.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2631 Higher levels give more information.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2632 @end defvar
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2633
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2634 @defvar xft-version
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2635
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2636 The major version number of the Xft library compiled with.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2637 @end defvar
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2638
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2639 @defvar xft-xlfd-font-regexp
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2640
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2641 Regular expression matching XLFD font names.
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2642 @end defvar
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2643
f5d8dba84d4f [xemacs-hg @ 2006-05-09 05:00:26 by stephent]
stephent
parents: 3111
diff changeset
2644
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2645 @node Frame Components
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2646 @section Frame Components
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2647
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2648 You can control the presence and position of most frame components, such
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2649 as the menubar, toolbars, and gutters.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2650
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2651 This section is not written yet. Try the Lisp Reference Manual:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2652 @ref{Menubar,,,lispref,}, @ref{Toolbar Intro,,,lispref,}, and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2653 @ref{Gutter Intro,,,lispref,}.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2654
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2655 @node X Resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2656 @section X Resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2657 @cindex X resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2658 @findex x-create-frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2659
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2660 Historically, XEmacs used the X resource application class @samp{Emacs}
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2661 for its resources. Unfortunately, GNU Emacs's usage of resources has
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2662 evolved differently from XEmacs's, and especially in the case of fonts
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2663 semantics are not compatible between the two Emacsen. Thus, sharing of
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2664 the application class can easily lead to trouble.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2665
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2666 XEmacs now uses the X resource application class @samp{XEmacs}.
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2667 Versions since 21.5.21 do this unconditionally. To attempt to maintain
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2668 some backward compatibility, previous versions checked the X resource
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2669 database for resources starting in @samp{XEmacs}, and if none were
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2670 found, @samp{Emacs} was used. This behavior is likely to be obsoleted,
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2671 so you should move your X resources to using the @samp{XEmacs} class.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2672 In the short term, to stay with the old behavior, start XEmacs with the
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2673 environment variable @b{USE_EMACS_AS_DEFAULT_APPLICATION_CLASS} set to
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2674 some non-empty value; this will restore the pre-21.5.21 behavior.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2675 @c #### is this documented in the Lispref?
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2676 Lisp programs can examine the variable @code{x-emacs-application-class}
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2677 to determine which is being used in the running application.
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2678
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2679 The examples in this section assume the application class is
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2680 @samp{XEmacs}.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2681
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2682 Most of XEmacs's resources are set per-frame. Each XEmacs frame can
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2683 have its own name or the same name as another, depending on the name
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2684 passed to the @code{make-frame} function. Up until 21.5.21, the default
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2685 frame name was @samp{emacs}; since then, it has been @samp{XEmacs}, but
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2686 in the short term the old default can be restored by the
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2687 @b{USE_EMACS_AS_DEFAULT_APPLICATION_CLASS} environment variable
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2688 mentioned above.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2689 @c #### Cheesy. Variable should be documented here.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
2690 See the docstring for the Lisp variable `default-frame-name'.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2691
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2692 You can specify resources for all frames with the syntax:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2693
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2694 @example
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2695 XEmacs*parameter: value
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2696 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2697 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2698
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2699 or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2700
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2701 @example
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2702 XEmacs*EmacsFrame.parameter:value
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2703 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2704 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2705
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2706 You can specify resources for a particular frame with the syntax:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2707
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2708 @example
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2709 XEmacs*FRAME-NAME.parameter: value
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2710 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2711 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2712
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2713 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2714 * Geometry Resources:: Controlling the size and position of frames.
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2715 * Iconic Resources:: Controlling whether frames come up iconic.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2716 * Resource List:: List of resources settable on a frame or device.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2717 * Face Resources:: Controlling faces using resources.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2718 * Widgets:: The widget hierarchy for XEmacs.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2719 * Menubar Resources:: Specifying resources for the menubar.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2720 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2721
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2722 @node Geometry Resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2723 @subsection Geometry Resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2724
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2725 To make the default size of all XEmacs frames be 80 columns by 55 lines,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2726 do this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2727
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2728 @example
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2729 XEmacs*EmacsFrame.geometry: 80x55
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2730 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2731 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2732
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2733 To set the geometry of a particular frame named @samp{fred}, do this:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2734
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2735 @example
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2736 XEmacs*fred.geometry: 80x55
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2737 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2738 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2739
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2740 Important! Do not use the following syntax:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2741
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2742 @example
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2743 XEmacs*geometry: 80x55
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2744 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2745 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2746
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2747 You should never use @code{*geometry} with any X application. It does
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2748 not say "make the geometry of XEmacs be 80 columns by 55 lines." It
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2749 really says, "make XEmacs and all subwindows thereof be 80x55 in whatever
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2750 units they care to measure in." In particular, that is both telling the
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2751 XEmacs text pane to be 80x55 in characters, and telling the menubar pane
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2752 to be 80x55 pixels, which is surely not what you want.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2753
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2754 As a special case, this geometry specification also works (and sets the
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2755 default size of all XEmacs frames to 80 columns by 55 lines):
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2756
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2757 @example
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2758 XEmacs.geometry: 80x55
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2759 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2760 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2761
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2762 since that is the syntax used with most other applications (since most
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2763 other applications have only one top-level window, unlike XEmacs). In
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2764 general, however, the top-level shell (the unmapped ApplicationShell
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2765 widget named @samp{XEmacs} that is the parent of the shell widgets that
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2766 actually manage the individual frames) does not have any interesting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2767 resources on it, and you should set the resources on the frames instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2768
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2769 The @code{-geometry} command-line argument sets only the geometry of the
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2770 initial frame created by XEmacs.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2771
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2772 A more complete explanation of geometry-handling is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2773
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2774 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2775 @item
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2776 The @code{-geometry} command-line option sets the @code{XEmacs.geometry}
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2777 resource, that is, the geometry of the ApplicationShell.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2778
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2779 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2780 For the first frame created, the size of the frame is taken from the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2781 ApplicationShell if it is specified, otherwise from the geometry of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2782 frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2783
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2784 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2785 For subsequent frames, the order is reversed: First the frame, and then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2786 the ApplicationShell.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2787
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2788 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2789 For the first frame created, the position of the frame is taken from the
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2790 ApplicationShell (@code{XEmacs.geometry}) if it is specified, otherwise
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2791 from the geometry of the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2792
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2793 @item
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2794 For subsequent frames, the position is taken only from the frame, and
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2795 never from the ApplicationShell.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2796 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2797
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2798 This is rather complicated, but it does seem to provide the most
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2799 intuitive behavior with respect to the default sizes and positions of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2800 frames created in various ways.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2801
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2802 @node Iconic Resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2803 @subsection Iconic Resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2804
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2805 Analogous to @code{-geometry}, the @code{-iconic} command-line option
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2806 sets the iconic flag of the ApplicationShell (@code{XEmacs.iconic}) and
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2807 always applies to the first frame created regardless of its name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2808 However, it is possible to set the iconic flag on particular frames (by
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2809 name) by using the @code{XEmacs*FRAME-NAME.iconic} resource.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2810
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2811 @node Resource List
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2812 @subsection Resource List
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2813
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2814 XEmacs frames accept the following resources:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2815
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2816 @table @asis
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2817 @item @code{geometry} (class @code{Geometry}): string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2818 Initial geometry for the frame. @xref{Geometry Resources}, for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2819 complete discussion of how this works.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2820
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2821 @item @code{iconic} (class @code{Iconic}): boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2822 Whether this frame should appear in the iconified state.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2823
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2824 @item @code{internalBorderWidth} (class @code{InternalBorderWidth}): int
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
2825 How many blank pixels to leave between the text and the edge of the
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2826 window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2827
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2828 @item @code{interline} (class @code{Interline}): int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2829 How many pixels to leave between each line (may not be implemented).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2830
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2831 @item @code{menubar} (class @code{Menubar}): boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2832 Whether newly-created frames should initially have a menubar. Set to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2833 true by default.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2834
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2835 @item @code{initiallyUnmapped} (class @code{InitiallyUnmapped}): boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2836 Whether XEmacs should leave the initial frame unmapped when it starts
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2837 up. This is useful if you are starting XEmacs as a server (e.g. in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2838 conjunction with gnuserv or the external client widget). You can also
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2839 control this with the @code{-unmapped} command-line option.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2840
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2841 @item @code{barCursor} (class @code{BarColor}): boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2842 Whether the cursor should be displayed as a bar, or the traditional box.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2843
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2844 @item @code{cursorColor} (class @code{CursorColor}): color-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2845 The color of the text cursor.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2846
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2847 @item @code{scrollBarWidth} (class @code{ScrollBarWidth}): integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2848 How wide the vertical scrollbars should be, in pixels; 0 means no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2849 vertical scrollbars. You can also use a resource specification of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2850 form @code{*scrollbar.width}, or the usual toolkit scrollbar resources:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2851 @code{*XmScrollBar.width} (Motif), @code{*XlwScrollBar.width} (Lucid),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2852 or @code{*Scrollbar.thickness} (Athena). We don't recommend that you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2853 use the toolkit resources, though, because they're dependent on how
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2854 exactly your particular build of XEmacs was configured.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2855
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2856 @item @code{scrollBarHeight} (class @code{ScrollBarHeight}): integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2857 How high the horizontal scrollbars should be, in pixels; 0 means no
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2858 horizontal scrollbars. You can also use a resource specification of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2859 form @code{*scrollbar.height}, or the usual toolkit scrollbar resources:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2860 @code{*XmScrollBar.height} (Motif), @code{*XlwScrollBar.height} (Lucid),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2861 or @code{*Scrollbar.thickness} (Athena). We don't recommend that you use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2862 the toolkit resources, though, because they're dependent on how exactly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2863 your particular build of XEmacs was configured.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2864
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2865 @item @code{scrollBarPlacement} (class @code{ScrollBarPlacement}): string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2866 Where the horizontal and vertical scrollbars should be positioned. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2867 should be one of the four strings @samp{BOTTOM_LEFT},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2868 @samp{BOTTOM_RIGHT}, @samp{TOP_LEFT}, and @samp{TOP_RIGHT}. Default is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2869 @samp{BOTTOM_RIGHT} for the Motif and Lucid scrollbars and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2870 @samp{BOTTOM_LEFT} for the Athena scrollbars.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2871
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2872 @item @code{topToolBarHeight} (class @code{TopToolBarHeight}): integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2873 @itemx @code{bottomToolBarHeight} (class @code{BottomToolBarHeight}): integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2874 @itemx @code{leftToolBarWidth} (class @code{LeftToolBarWidth}): integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2875 @itemx @code{rightToolBarWidth} (class @code{RightToolBarWidth}): integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2876 Height and width of the four possible toolbars.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2877
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2878 @item @code{topToolBarShadowColor} (class @code{TopToolBarShadowColor}): color-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2879 @itemx @code{bottomToolBarShadowColor} (class @code{BottomToolBarShadowColor}): color-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2880 Color of the top and bottom shadows for the toolbars. NOTE: These resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2881 do @emph{not} have anything to do with the top and bottom toolbars (i.e. the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2882 toolbars at the top and bottom of the frame)! Rather, they affect the top
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2883 and bottom shadows around the edges of all four kinds of toolbars.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2884
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2885 @item @code{topToolBarShadowPixmap} (class @code{TopToolBarShadowPixmap}): pixmap-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2886 @itemx @code{bottomToolBarShadowPixmap} (class @code{BottomToolBarShadowPixmap}): pixmap-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2887 Pixmap of the top and bottom shadows for the toolbars. If set, these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2888 resources override the corresponding color resources. NOTE: These
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2889 resources do @emph{not} have anything to do with the top and bottom
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2890 toolbars (i.e. the toolbars at the top and bottom of the frame)!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2891 Rather, they affect the top and bottom shadows around the edges of all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2892 four kinds of toolbars.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2893
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2894 @item @code{toolBarShadowThickness} (class @code{ToolBarShadowThickness}): integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2895 Thickness of the shadows around the toolbars, in pixels.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2896
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2897 @item @code{visualBell} (class @code{VisualBell}): boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2898 Whether XEmacs should flash the screen rather than making an audible beep.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2899
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2900 @item @code{bellVolume} (class @code{BellVolume}): integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2901 Volume of the audible beep.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2902
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2903 @item @code{useBackingStore} (class @code{UseBackingStore}): boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2904 Whether XEmacs should set the backing-store attribute of the X windows
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2905 it creates. This increases the memory usage of the X server but decreases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2906 the amount of X traffic necessary to update the screen, and is useful
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2907 when the connection to the X server goes over a low-bandwidth line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2908 such as a modem connection.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2909 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2910
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2911 XEmacs devices accept the following resources:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2912
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2913 @table @asis
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2914 @item @code{textPointer} (class @code{Cursor}): cursor-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2915 The cursor to use when the mouse is over text. This resource is used to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2916 initialize the variable @code{x-pointer-shape}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2917
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2918 @item @code{selectionPointer} (class @code{Cursor}): cursor-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2919 The cursor to use when the mouse is over a selectable text region (an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2920 extent with the @samp{highlight} property; for example, an Info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2921 cross-reference). This resource is used to initialize the variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2922 @code{x-selection-pointer-shape}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2923
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2924 @item @code{spacePointer} (class @code{Cursor}): cursor-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2925 The cursor to use when the mouse is over a blank space in a buffer (that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2926 is, after the end of a line or after the end-of-file). This resource is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2927 used to initialize the variable @code{x-nontext-pointer-shape}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2928
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2929 @item @code{modeLinePointer} (class @code{Cursor}): cursor-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2930 The cursor to use when the mouse is over a modeline. This resource is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2931 used to initialize the variable @code{x-mode-pointer-shape}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2932
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2933 @item @code{gcPointer} (class @code{Cursor}): cursor-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2934 The cursor to display when a garbage-collection is in progress. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2935 resource is used to initialize the variable @code{x-gc-pointer-shape}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2936
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2937 @item @code{scrollbarPointer} (class @code{Cursor}): cursor-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2938 The cursor to use when the mouse is over the scrollbar. This resource
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2939 is used to initialize the variable @code{x-scrollbar-pointer-shape}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2940
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2941 @item @code{pointerColor} (class @code{Foreground}): color-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2942 @itemx @code{pointerBackground} (class @code{Background}): color-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2943 The foreground and background colors of the mouse cursor. These
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2944 resources are used to initialize the variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2945 @code{x-pointer-foreground-color} and @code{x-pointer-background-color}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2946 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2947
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2948 @node Face Resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2949 @subsection Face Resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2950
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2951 The attributes of faces are also per-frame. They can be specified as:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2952
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2953 @example
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2954 XEmacs.FACE_NAME.parameter: value
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2955 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2956 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2957
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2958 or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2959
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2960 @example
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2961 XEmacs*FRAME_NAME.FACE_NAME.parameter: value
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2962 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2963 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2964
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2965 Faces accept the following resources:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2966
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2967 @table @asis
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2968 @item @code{attributeFont} (class @code{AttributeFont}): font-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2969 The font of this face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2970
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2971 @item @code{attributeForeground} (class @code{AttributeForeground}): color-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2972 @itemx @code{attributeBackground} (class @code{AttributeBackground}): color-name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2973 The foreground and background colors of this face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2974
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2975 @item @code{attributeBackgroundPixmap} (class @code{AttributeBackgroundPixmap}): file-name
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2976 The name of an @sc{xbm} file (or @sc{xpm} file, if your version of XEmacs
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2977 supports @sc{xpm}), to use as a background stipple.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2978
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2979 @item @code{attributeUnderline} (class @code{AttributeUnderline}): boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2980 Whether text in this face should be underlined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2981 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2982
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2983 All text is displayed in some face, defaulting to the face named
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2984 @code{default}. To set the font of normal text, use
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2985 @code{XEmacs*default.attributeFont}. To set it in the frame named
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2986 @code{fred}, use @code{XEmacs*fred.default.attributeFont}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2987
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2988 These are the names of the predefined faces:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2989
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2990 @table @code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2991 @item default
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2992 Everything inherits from this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2993
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2994 @item bold
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2995 If this is not specified in the resource database, XEmacs tries to find a
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2996 bold version of the font of the default face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2997
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2998 @item italic
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
2999 If this is not specified in the resource database, XEmacs tries to find
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3000 an italic version of the font of the default face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3001
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3002 @item bold-italic
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
3003 If this is not specified in the resource database, XEmacs tries to find a
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3004 bold-italic version of the font of the default face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3005
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3006 @item modeline
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3007 This is the face that the modeline is displayed in. If not specified in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3008 the resource database, it is determined from the default face by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3009 reversing the foreground and background colors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3010
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3011 @item highlight
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3012 This is the face that highlighted extents (for example, Info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3013 cross-references and possible completions, when the mouse passes over
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3014 them) are displayed in.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3015
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3016 @item left-margin
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3017 @itemx right-margin
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3018 These are the faces that the left and right annotation margins are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3019 displayed in.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3020
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3021 @item zmacs-region
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3022 This is the face that mouse selections are displayed in.
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
3023
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3024 @item isearch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3025 This is the face that the matched text being searched for is displayed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3026 in.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3027
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3028 @item info-node
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3029 This is the face of info menu items. If unspecified, it is copied from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3030 @code{bold-italic}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3031
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3032 @item info-xref
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3033 This is the face of info cross-references. If unspecified, it is copied
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3034 from @code{bold}. (Note that, when the mouse passes over a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3035 cross-reference, the cross-reference's face is determined from a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3036 combination of the @code{info-xref} and @code{highlight} faces.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3037 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3038
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3039 Other packages might define their own faces; to see a list of all faces,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3040 use any of the interactive face-manipulation commands such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3041 @code{set-face-font} and type @samp{?} when you are prompted for the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3042 name of a face.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3043
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3044 If the @code{bold}, @code{italic}, and @code{bold-italic} faces are not
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3045 specified in the resource database, then XEmacs attempts to derive them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3046 from the font of the default face. It can only succeed at this if you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3047 have specified the default font using the XLFD (X Logical Font
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3048 Description) format, which looks like
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3049
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3050 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3051 *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3052 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3053 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3054
3711
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3055 All X fonts can be referred to via XLFD-style names, and you should use
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3056 those forms. See the man pages for @samp{X(1)}, @samp{xlsfonts(1)}, and
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3057 @samp{xfontsel(1)}.
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3058
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3059 If you use any of the other, less strict font name formats, some of which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3060 look like
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3061
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3062 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3063 lucidasanstypewriter-12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3064 fixed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3065 9x13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3066 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3067
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3068 then XEmacs won't be able to guess the names of the bold and italic
3711
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3069 versions, and on a build with internationalization support, it will
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3070 refuse to use them. (Since only the XLFD form includes information as
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3071 to which character set the font coverage.)
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3072
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3073 If it is very important to you to use the short form names, you can
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3074 override this for ASCII, and for ASCII alone, by passing the
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3075 @samp{FORCE} argument to @samp{set-charset-registries}, and specifying
761385dfa575 [xemacs-hg @ 2006-11-29 19:56:09 by aidan]
aidan
parents: 3510
diff changeset
3076 an empty string as one of the charset registries.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3077
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3078 @node Widgets
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3079 @subsection Widgets
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3080
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3081 There are several structural widgets between the terminal EmacsFrame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3082 widget and the top level ApplicationShell; the exact names and types of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3083 these widgets change from release to release (for example, they changed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3084 between 19.8 and 19.9, 19.9 and 19.10, and 19.10 and 19.12) and are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3085 subject to further change in the future, so you should avoid mentioning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3086 them in your resource database. The above-mentioned syntaxes should be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3087 forward- compatible. As of 19.13, the exact widget hierarchy is as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3088 follows:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3089
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3090 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3091 INVOCATION-NAME "shell" "container" FRAME-NAME
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3092 x-emacs-application-class "EmacsShell" "EmacsManager" "EmacsFrame"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3093 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3094
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3095 where INVOCATION-NAME is the terminal component of the name of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3096 XEmacs executable (usually @samp{xemacs}), and
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2681
diff changeset
3097 @samp{x-emacs-application-class} is generally @samp{XEmacs}.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3098
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3099 @node Menubar Resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3100 @subsection Menubar Resources
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3102 As the menubar is implemented as a widget which is not a part of XEmacs
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3103 proper, it does not use the face mechanism for specifying fonts and
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3104 colors: It uses whatever resources are appropriate to the type of widget
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3105 which is used to implement it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3106
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
3107 If XEmacs was compiled to use only the Lucid Motif-lookalike menu widgets,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3108 then one way to specify the font of the menubar would be
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3110 @example
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
3111 XEmacs*menubar*font: *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3112 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3113
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
3114 If both the Lucid Motif-lookalike menu widgets and X Font Sets are
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3115 configured to allow multilingual menubars, then one uses
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3116
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3117 @example
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3118 *menubar*FontSet: -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3119 -*-*-*-*-*-*-*-120-*-jisx0208.1983-0
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3120 @end example
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3121
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3122 That would specify fonts for a Japanese menubar. Specifying only one
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3123 XLFD is acceptable; specifying more than one for a given registry
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3124 (language) is also allowed. When X Font Sets are configured, some .font
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3125 resources (eg, menubars) are ignored in favor of the corresponding
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3126 .fontSet resources.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3127
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
3128 If the Motif library is being used, then one would have to use
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3130 @example
2681
f15523a6da7a [xemacs-hg @ 2005-03-24 12:17:51 by aidan]
aidan
parents: 1738
diff changeset
3131 XEmacs*menubar*fontList: *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3132 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3133
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3134 because the Motif library uses the @code{fontList} resource name instead
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3135 of @code{font}, which has subtly different semantics.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3136
1137
c6facab13185 [xemacs-hg @ 2002-12-03 10:35:06 by didierv]
didierv
parents: 871
diff changeset
3137 The same is true of the scrollbars: They accept whichever resources are
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3138 appropriate for the toolkit in use.